include/uapi/linux/virtio_ring.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
Using libc types and headers from the UAPI headers is problematic as it
introduces a dependency on a full C toolchain.
On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does
not depend on libc.
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
include/uapi/linux/virtio_ring.h | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h
index f8c20d3de8da..3c478582a3c2 100644
--- a/include/uapi/linux/virtio_ring.h
+++ b/include/uapi/linux/virtio_ring.h
@@ -31,9 +31,6 @@
* SUCH DAMAGE.
*
* Copyright Rusty Russell IBM Corporation 2007. */
-#ifndef __KERNEL__
-#include <stdint.h>
-#endif
#include <linux/types.h>
#include <linux/virtio_types.h>
@@ -202,7 +199,7 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p,
vr->num = num;
vr->desc = p;
vr->avail = (struct vring_avail *)((char *)p + num * sizeof(struct vring_desc));
- vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16)
+ vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__virtio16)
+ align-1) & ~(align - 1));
}
---
base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8
change-id: 20251222-uapi-virtio-d208b915ca1d
Best regards,
--
Thomas Weißschuh <thomas.weissschuh@linutronix.de>
On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > Using libc types and headers from the UAPI headers is problematic as it > introduces a dependency on a full C toolchain. > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > not depend on libc. > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> are you fixing other uses of uintptr_t ? > --- > include/uapi/linux/virtio_ring.h | 5 +---- > 1 file changed, 1 insertion(+), 4 deletions(-) > > diff --git a/include/uapi/linux/virtio_ring.h b/include/uapi/linux/virtio_ring.h > index f8c20d3de8da..3c478582a3c2 100644 > --- a/include/uapi/linux/virtio_ring.h > +++ b/include/uapi/linux/virtio_ring.h > @@ -31,9 +31,6 @@ > * SUCH DAMAGE. > * > * Copyright Rusty Russell IBM Corporation 2007. */ > -#ifndef __KERNEL__ > -#include <stdint.h> > -#endif > #include <linux/types.h> > #include <linux/virtio_types.h> > > @@ -202,7 +199,7 @@ static inline void vring_init(struct vring *vr, unsigned int num, void *p, > vr->num = num; > vr->desc = p; > vr->avail = (struct vring_avail *)((char *)p + num * sizeof(struct vring_desc)); > - vr->used = (void *)(((uintptr_t)&vr->avail->ring[num] + sizeof(__virtio16) > + vr->used = (void *)(((unsigned long)&vr->avail->ring[num] + sizeof(__virtio16) > + align-1) & ~(align - 1)); > } > > > --- > base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 > change-id: 20251222-uapi-virtio-d208b915ca1d > > Best regards, > -- > Thomas Weißschuh <thomas.weissschuh@linutronix.de>
On Mon, Dec 22, 2025 at 03:39:12AM -0500, Michael S. Tsirkin wrote: > On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > > Using libc types and headers from the UAPI headers is problematic as it > > introduces a dependency on a full C toolchain. > > > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > > not depend on libc. > > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > are you fixing other uses of uintptr_t ? I am focussing on UAPI headers which include libc headers. virtio_ring.h seems to be the only such header which uses uintptr_t. There are a few other UAPI headers which reference uintptr_t, but only in comments or macros. uintptr_t in regular kernel code is out of scope for me. While it is iffy, it doesn't actually hurt. Thomas
On Mon, Dec 22, 2025 at 11:22:16AM +0100, Thomas Weißschuh wrote: > On Mon, Dec 22, 2025 at 03:39:12AM -0500, Michael S. Tsirkin wrote: > > On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > > > Using libc types and headers from the UAPI headers is problematic as it > > > introduces a dependency on a full C toolchain. > > > > > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > > > not depend on libc. > > > > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > > > > are you fixing other uses of uintptr_t ? > > I am focussing on UAPI headers which include libc headers. > virtio_ring.h seems to be the only such header which uses uintptr_t. > There are a few other UAPI headers which reference uintptr_t, but only > in comments or macros. > > uintptr_t in regular kernel code is out of scope for me. > While it is iffy, it doesn't actually hurt. > > > Thomas And other uses of stdint.h?
On Mon, Dec 22, 2025 at 05:28:30AM -0500, Michael S. Tsirkin wrote: > On Mon, Dec 22, 2025 at 11:22:16AM +0100, Thomas Weißschuh wrote: > > On Mon, Dec 22, 2025 at 03:39:12AM -0500, Michael S. Tsirkin wrote: > > > On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > > > > Using libc types and headers from the UAPI headers is problematic as it > > > > introduces a dependency on a full C toolchain. > > > > > > > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > > > > not depend on libc. > > > > > > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > > > > > > > are you fixing other uses of uintptr_t ? > > > > I am focussing on UAPI headers which include libc headers. > > virtio_ring.h seems to be the only such header which uses uintptr_t. > > There are a few other UAPI headers which reference uintptr_t, but only > > in comments or macros. > > > > uintptr_t in regular kernel code is out of scope for me. > > While it is iffy, it doesn't actually hurt. > > > > > > Thomas > > And other uses of stdint.h? If they are in UAPI headers I will look at them. I also have a series prepared to prevent new users from creeping in.
On Mon, Dec 22, 2025 at 11:43:52AM +0100, Thomas Weißschuh wrote: > On Mon, Dec 22, 2025 at 05:28:30AM -0500, Michael S. Tsirkin wrote: > > On Mon, Dec 22, 2025 at 11:22:16AM +0100, Thomas Weißschuh wrote: > > > On Mon, Dec 22, 2025 at 03:39:12AM -0500, Michael S. Tsirkin wrote: > > > > On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > > > > > Using libc types and headers from the UAPI headers is problematic as it > > > > > introduces a dependency on a full C toolchain. > > > > > > > > > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > > > > > not depend on libc. > > > > > > > > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > > > > > > > > > > are you fixing other uses of uintptr_t ? > > > > > > I am focussing on UAPI headers which include libc headers. > > > virtio_ring.h seems to be the only such header which uses uintptr_t. > > > There are a few other UAPI headers which reference uintptr_t, but only > > > in comments or macros. > > > > > > uintptr_t in regular kernel code is out of scope for me. > > > While it is iffy, it doesn't actually hurt. > > > > > > > > > Thomas > > > > And other uses of stdint.h? > > If they are in UAPI headers I will look at them. > I also have a series prepared to prevent new users from creeping in. I don't mind picking this but I'm just curious what's driving all this effort. -- MST
On Mon, Dec 22, 2025 at 05:18:26PM -0500, Michael S. Tsirkin wrote: > On Mon, Dec 22, 2025 at 11:43:52AM +0100, Thomas Weißschuh wrote: > > On Mon, Dec 22, 2025 at 05:28:30AM -0500, Michael S. Tsirkin wrote: > > > On Mon, Dec 22, 2025 at 11:22:16AM +0100, Thomas Weißschuh wrote: > > > > On Mon, Dec 22, 2025 at 03:39:12AM -0500, Michael S. Tsirkin wrote: > > > > > On Mon, Dec 22, 2025 at 09:00:33AM +0100, Thomas Weißschuh wrote: > > > > > > Using libc types and headers from the UAPI headers is problematic as it > > > > > > introduces a dependency on a full C toolchain. > > > > > > > > > > > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > > > > > > not depend on libc. > > > > > > > > > > > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> > > > > > > > > > > > > > > > are you fixing other uses of uintptr_t ? > > > > > > > > I am focussing on UAPI headers which include libc headers. > > > > virtio_ring.h seems to be the only such header which uses uintptr_t. > > > > There are a few other UAPI headers which reference uintptr_t, but only > > > > in comments or macros. > > > > > > > > uintptr_t in regular kernel code is out of scope for me. > > > > While it is iffy, it doesn't actually hurt. > > > > > > > > > > > > Thomas > > > > > > And other uses of stdint.h? > > > > If they are in UAPI headers I will look at them. > > I also have a series prepared to prevent new users from creeping in. > > I don't mind picking this but I'm just curious what's driving all this > effort. It started with a recent change to an UAPI header which introduced a dependency on libc that broke some things I was doing. See the fix and background in [0]. So I looked into catching such issues earlier, which resulted in [1]. Fortunately there are not many problematic headers [2] in general, so I am now also fixing those, so the new check can validate more headers and prevent more regressions. [0] https://lore.kernel.org/lkml/20251203-uapi-fcntl-v1-1-490c67bf3425@linutronix.de/ [1] https://lore.kernel.org/lkml/20251223-uapi-nostdinc-v1-0-d91545d794f7@linutronix.de/ [2] https://lore.kernel.org/lkml/20251223-uapi-nostdinc-v1-1-d91545d794f7@linutronix.de/ Thomas
On Mon, Dec 22, 2025, at 09:00, Thomas Weißschuh wrote: > Using libc types and headers from the UAPI headers is problematic as it > introduces a dependency on a full C toolchain. > > On Linux 'unsigned long' works as a replacement for 'uintptr_t' and does > not depend on libc. > > Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de> Acked-by: Arnd Bergmann <arnd@arndb.de>
© 2016 - 2026 Red Hat, Inc.