From nobody Sun Jul 19 09:48:09 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4h2zPD2HPMz6lyHq; Sun, 19 Jul 2026 09:48:48 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Received: from smtp6.goneo.de (smtp6.goneo.de [85.220.129.31]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4h2zPC4hNpz3FPj; Sun, 19 Jul 2026 09:48:47 +0000 (UTC) (envelope-from freebsd@walstatt-de.de) Authentication-Results: mx1.freebsd.org; none Received: from hub2.goneo.de (hub2.goneo.de [85.220.129.53]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by smtp6.goneo.de (Postfix) with ESMTPS id B3DC9240520; Sun, 19 Jul 2026 11:48:45 +0200 (CEST) Received: from hub2.goneo.de (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPS id DA4C52405DC; Sun, 19 Jul 2026 11:48:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walstatt-de.de; s=DKIM001; t=1784454523; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=BrDkV+/C7qXM4vfzhJr/hkLyZ1OkskbfmKdGGZhuiGA=; b=sl86CNrDJj5bZGxOg1Jwcx5cg7/FvhdT5+sLEtC64lXFG+ZE6PZ9WCXV0Lc6Dh4OpfY2dq VkrRdYlFUImzXN9smsZOmnlkMGrK2jayYFBWvmOmSAhrryJyPp9MdWgnljLZJ6XxacbRRU xUUI/tHIRTqQrBc2vYI3ACHHmp893XvrdW4EQDBVlzB9oviFWLSXDgHuVnSvh4yVWS5K2A tyjlzYE6jgCTDF+Sz6QqIsjgNZm7OLuJ8YAN1SIR4MFFC6xxdKyVEVGhnN3q/bCMtgnEWe tlszujUOsDZAe6iERejQOzV3L9ZAzpO9ZAA4E6IlQau7MDN715/6WBtOOKVidw== Received: from thor.sb211.local (dynamic-2a02-3100-2487-d402-3329-b340-b083-e6c6.310.pool.telefonica.de [IPv6:2a02:3100:2487:d402:3329:b340:b083:e6c6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange secp256r1 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by hub2.goneo.de (Postfix) with ESMTPSA id 75B53240520; Sun, 19 Jul 2026 11:48:43 +0200 (CEST) Date: Sun, 19 Jul 2026 11:48:09 +0200 From: A FreeBSD User To: Mark Johnston Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: a7e483ee146a - main - vm_phys: Add a sysctl to dump registered fictitious memory ranges Message-ID: <20260719114836.58a7f518@thor.sb211.local> In-Reply-To: <6a5c1c3f.3b403.6ca6c3fe@gitrepo.freebsd.org> References: <6a5c1c3f.3b403.6ca6c3fe@gitrepo.freebsd.org> X-Mailer: Claws Mail 4.4.0 (GTK 3.24.52; amd64-portbld-freebsd16.0) List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/9dWuQz36q8HQlDaiuVkEkbW"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Rspamd-UID: 97800a X-Rspamd-UID: 0de615 X-Rspamd-Queue-Id: 4h2zPC4hNpz3FPj X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:25394, ipnet:85.220.128.0/17, country:DE] X-Spamd-Bar: ---- --Sig_/9dWuQz36q8HQlDaiuVkEkbW Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Am Tage des Herren Sun, 19 Jul 2026 00:37:19 +0000 Mark Johnston schrieb: > The branch main has been updated by markj: >=20 > URL: https://cgit.FreeBSD.org/src/commit/?id=3Da7e483ee146a93ac89357676fd= b9af62ac58b4bc >=20 > commit a7e483ee146a93ac89357676fdb9af62ac58b4bc > Author: Mark Johnston > AuthorDate: 2026-07-19 00:29:40 +0000 > Commit: Mark Johnston > CommitDate: 2026-07-19 00:29:40 +0000 >=20 > vm_phys: Add a sysctl to dump registered fictitious memory ranges > =20 > I've wanted this a couple of times in the past. Save the memattr in > the fictitious memory segment structure so that we can report it from > the sysctl handler, and add conversion routines for each platform. > =20 > Reviewed by: kib > MFC after: 2 weeks > Differential Revision: https://reviews.freebsd.org/D58283 > --- > sys/amd64/include/vm.h | 23 +++++++++++++++++++++++ > sys/arm/include/vm.h | 19 +++++++++++++++++++ > sys/arm64/include/vm.h | 25 +++++++++++++++++++++++-- > sys/i386/include/vm.h | 23 +++++++++++++++++++++++ > sys/powerpc/include/vm.h | 25 +++++++++++++++++++++++++ > sys/riscv/include/vm.h | 17 +++++++++++++++++ > sys/vm/vm_phys.c | 41 +++++++++++++++++++++++++++++++++++++++++ > 7 files changed, 171 insertions(+), 2 deletions(-) >=20 > diff --git a/sys/amd64/include/vm.h b/sys/amd64/include/vm.h > index 2e156b1cb1be..7219f8650a9f 100644 > --- a/sys/amd64/include/vm.h > +++ b/sys/amd64/include/vm.h > @@ -43,4 +43,27 @@ > #define VM_MEMATTR_DEFAULT VM_MEMATTR_WRITE_BACK > #define VM_MEMATTR_DEVICE VM_MEMATTR_UNCACHEABLE > =20 > +#ifdef _KERNEL > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_UNCACHEABLE: > + return ("uncacheable"); > + case VM_MEMATTR_WRITE_COMBINING: > + return ("write-combining"); > + case VM_MEMATTR_WRITE_THROUGH: > + return ("write-through"); > + case VM_MEMATTR_WRITE_PROTECTED: > + return ("write-protected"); > + case VM_MEMATTR_WRITE_BACK: > + return ("write-back"); > + case VM_MEMATTR_WEAK_UNCACHEABLE: > + return ("weak-uncacheable"); > + default: > + return (NULL); > + } > +} > +#endif > + > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/arm/include/vm.h b/sys/arm/include/vm.h > index 697b48689bd8..373f51adec82 100644 > --- a/sys/arm/include/vm.h > +++ b/sys/arm/include/vm.h > @@ -41,6 +41,25 @@ > /* Don't export aliased VM_MEMATTR to userland */ > #define VM_MEMATTR_WRITE_COMBINING VM_MEMATTR_WRITE_THROUGH /* for DRM = */ > #define VM_MEMATTR_WRITE_BACK VM_MEMATTR_WB_WA /* for DRM */ > + > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_WB_WA: > + return ("write-back, write-allocate"); > + case VM_MEMATTR_NOCACHE: > + return ("uncacheable"); > + case VM_MEMATTR_DEVICE: > + return ("device"); > + case VM_MEMATTR_SO: > + return ("strongly-ordered"); > + case VM_MEMATTR_WRITE_THROUGH: > + return ("write-through"); > + default: > + return (NULL); > + } > +} > #endif > =20 > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/arm64/include/vm.h b/sys/arm64/include/vm.h > index 4d9f2860f654..87a1839b7dac 100644 > --- a/sys/arm64/include/vm.h > +++ b/sys/arm64/include/vm.h > @@ -39,11 +39,32 @@ > #define VM_MEMATTR_DEVICE VM_MEMATTR_DEVICE_nGnRE > #define VM_MEMATTR_DEVICE_NP VM_MEMATTR_DEVICE_nGnRnE > =20 > +#define VM_MEMATTR_DEFAULT VM_MEMATTR_WRITE_BACK > + > #ifdef _KERNEL > /* If defined vmstat will try to use both of these in a switch statement= */ > #define VM_MEMATTR_WRITE_COMBINING VM_MEMATTR_WRITE_THROUGH > -#endif > =20 > -#define VM_MEMATTR_DEFAULT VM_MEMATTR_WRITE_BACK > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_DEVICE_nGnRnE: > + return ("device-nGnRnE"); > + case VM_MEMATTR_UNCACHEABLE: > + return ("uncacheable"); > + case VM_MEMATTR_WRITE_BACK: > + return ("write-back"); > + case VM_MEMATTR_WRITE_THROUGH: > + return ("write-through"); > + case VM_MEMATTR_DEVICE_nGnRE: > + return ("device-nGnRE"); > + case VM_MEMATTR_TAGGED: > + return ("tagged"); > + default: > + return (NULL); > + } > +} > +#endif > =20 > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/i386/include/vm.h b/sys/i386/include/vm.h > index 2e156b1cb1be..7219f8650a9f 100644 > --- a/sys/i386/include/vm.h > +++ b/sys/i386/include/vm.h > @@ -43,4 +43,27 @@ > #define VM_MEMATTR_DEFAULT VM_MEMATTR_WRITE_BACK > #define VM_MEMATTR_DEVICE VM_MEMATTR_UNCACHEABLE > =20 > +#ifdef _KERNEL > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_UNCACHEABLE: > + return ("uncacheable"); > + case VM_MEMATTR_WRITE_COMBINING: > + return ("write-combining"); > + case VM_MEMATTR_WRITE_THROUGH: > + return ("write-through"); > + case VM_MEMATTR_WRITE_PROTECTED: > + return ("write-protected"); > + case VM_MEMATTR_WRITE_BACK: > + return ("write-back"); > + case VM_MEMATTR_WEAK_UNCACHEABLE: > + return ("weak-uncacheable"); > + default: > + return (NULL); > + } > +} > +#endif > + > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/powerpc/include/vm.h b/sys/powerpc/include/vm.h > index 5c99cda51257..87d0faf44f2e 100644 > --- a/sys/powerpc/include/vm.h > +++ b/sys/powerpc/include/vm.h > @@ -42,4 +42,29 @@ > =20 > #define VM_MEMATTR_DEVICE VM_MEMATTR_DEFAULT > =20 > +#ifdef _KERNEL > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_DEFAULT: > + return ("default"); > + case VM_MEMATTR_UNCACHEABLE: > + return ("uncacheable"); > + case VM_MEMATTR_CACHEABLE: > + return ("cacheable"); > + case VM_MEMATTR_WRITE_COMBINING: > + return ("write-combining"); > + case VM_MEMATTR_WRITE_BACK: > + return ("write-back"); > + case VM_MEMATTR_WRITE_THROUGH: > + return ("write-through"); > + case VM_MEMATTR_PREFETCHABLE: > + return ("prefetchable"); > + default: > + return (NULL); > + } > +} > +#endif > + > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/riscv/include/vm.h b/sys/riscv/include/vm.h > index b6c0a7725124..66211fcc2580 100644 > --- a/sys/riscv/include/vm.h > +++ b/sys/riscv/include/vm.h > @@ -38,4 +38,21 @@ > #define VM_MEMATTR_LAST VM_MEMATTR_DEVICE > #define VM_MEMATTR_TOTAL (VM_MEMATTR_LAST + 1) > =20 > +#ifdef _KERNEL > +static inline const char * > +vm_memattr_name(vm_memattr_t memattr) > +{ > + switch (memattr) { > + case VM_MEMATTR_PMA: > + return ("write-back"); > + case VM_MEMATTR_UNCACHEABLE: > + return ("uncacheable"); > + case VM_MEMATTR_DEVICE: > + return ("device"); > + default: > + return (NULL); > + } > +} > +#endif > + > #endif /* !_MACHINE_VM_H_ */ > diff --git a/sys/vm/vm_phys.c b/sys/vm/vm_phys.c > index 1737020436c6..975754264fee 100644 > --- a/sys/vm/vm_phys.c > +++ b/sys/vm/vm_phys.c > @@ -108,6 +108,7 @@ struct vm_phys_fictitious_seg { > vm_paddr_t start; > vm_paddr_t end; > vm_page_t first_page; > + vm_memattr_t memattr; > }; > =20 > RB_GENERATE_STATIC(fict_tree, vm_phys_fictitious_seg, node, > @@ -172,6 +173,12 @@ SYSCTL_OID(_vm, OID_AUTO, phys_segs, > sysctl_vm_phys_segs, "A", > "Phys Seg Info"); > =20 > +static int sysctl_vm_phys_fictitious_segs(SYSCTL_HANDLER_ARGS); > +SYSCTL_OID(_vm, OID_AUTO, phys_fictitious_segs, > + CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0, > + sysctl_vm_phys_fictitious_segs, "A", > + "Fictitious Phys Seg Info"); > + > #ifdef NUMA > static int sysctl_vm_phys_locality(SYSCTL_HANDLER_ARGS); > SYSCTL_OID(_vm, OID_AUTO, phys_locality, > @@ -341,6 +348,39 @@ sysctl_vm_phys_segs(SYSCTL_HANDLER_ARGS) > return (error); > } > =20 > +static int > +sysctl_vm_phys_fictitious_segs(SYSCTL_HANDLER_ARGS) > +{ > + struct sbuf sbuf; > + struct vm_phys_fictitious_seg *seg; > + int error; > + > + error =3D sysctl_wire_old_buffer(req, 0); > + if (error !=3D 0) > + return (error); > + sbuf_new_for_sysctl(&sbuf, NULL, 128, req); > + rw_rlock(&vm_phys_fictitious_reg_lock); > + RB_FOREACH(seg, fict_tree, &vm_phys_fictitious_tree) { > + const char *name; > + char buf[8]; > + > + sbuf_printf(&sbuf, "\nstart: %#jx\n", > + (uintmax_t)seg->start); > + sbuf_printf(&sbuf, "end: %#jx\n", > + (uintmax_t)seg->end); > + name =3D vm_memattr_name(seg->memattr); > + if (name =3D=3D NULL) { > + (void)snprintf(buf, sizeof(buf), "0x%02x", seg->memattr); > + name =3D buf; > + } > + sbuf_printf(&sbuf, "attr: %s\n", name); > + } > + rw_runlock(&vm_phys_fictitious_reg_lock); > + error =3D sbuf_finish(&sbuf); > + sbuf_delete(&sbuf); > + return (error); > +} > + > /* > * Return affinity, or -1 if there's no affinity information. > */ > @@ -1155,6 +1195,7 @@ alloc: > seg->start =3D start; > seg->end =3D end; > seg->first_page =3D fp; > + seg->memattr =3D memattr; > =20 > rw_wlock(&vm_phys_fictitious_reg_lock); > RB_INSERT(fict_tree, &vm_phys_fictitious_tree, seg); >=20 After upgrading sources with this commit, both GPU ports graphics/drm-66-kmod graphics/drm-612-kmod fail with undeclared indentifier NULL as shown below: [...] --- drm_client.o --- In file included from /usr/obj/usr/src/amd64.amd64/sys/THOR/usr/ports/graphics/drm-612-kmod/work/= drm-kmod-drm_v6.12.85_2/drivers/gpu/drm/drm_client.c:6: In file included from /usr/src/sys/compat/linuxkpi/common/include/linux/ios= ys-map.h:6: In file included from /usr/src/sys/compat/linuxkpi/common/include/linux/io.h:35: ./= machine/vm.h:64:11: error: use of undeclared identifier 'NULL' 64 | return (NUL= L); --=20 A FreeBSD user --Sig_/9dWuQz36q8HQlDaiuVkEkbW Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iJEEARYKADkWIQRQheDybVktG5eW/1Kxzvs8OqokrwUCalyddBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQsc77PDqqJK+P9wD8Cq0mT01LRxnxfG2lzd3l sRWVXKjeXWpvMpUhFF3UWUwBAKQHx8U7+abvUwIuQHahyfaM233GPIjKTBtwTATO +/wI =PoPF -----END PGP SIGNATURE----- --Sig_/9dWuQz36q8HQlDaiuVkEkbW--