public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH kvmtool 1/1] linux/virtio_pci.h: Include kernel.h to provide the __KERNEL_DIV_ROUND_UP define
@ 2026-02-27  0:42 hbuxiaofei
  2026-03-13 12:53 ` Will Deacon
  0 siblings, 1 reply; 3+ messages in thread
From: hbuxiaofei @ 2026-02-27  0:42 UTC (permalink / raw)
  To: kvm; +Cc: will, julien.thierry.kdev, hbuxiaofei

GCC Version:
  gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)

CC       builtin-balloon.o
In file included from include/kvm/pci.h:7:0,
                 from include/kvm/vfio.h:6,
                 from include/kvm/kvm-config.h:5,
                 from include/kvm/kvm.h:6,
                 from builtin-balloon.c:9:
include/linux/virtio_pci.h:326:2: error: implicit declaration of function ‘__KERNEL_DIV_ROUND_UP’ [-Werror=implicit-function-declaration]
  __le64 supported_caps[MAX_CAP_ID];
  ^
include/linux/virtio_pci.h:326:9: error: variably modified ‘supported_caps’ at file scope
  __le64 supported_caps[MAX_CAP_ID];
         ^
cc1: all warnings being treated as errors
make: *** [builtin-balloon.o] Error 1

Signed-off-by: hbuxiaofei <hbuxiaofei@gmail.com>
---
 include/linux/virtio_pci.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/virtio_pci.h b/include/linux/virtio_pci.h
index e732e34..fb2f66a 100644
--- a/include/linux/virtio_pci.h
+++ b/include/linux/virtio_pci.h
@@ -39,6 +39,7 @@
 #ifndef _LINUX_VIRTIO_PCI_H
 #define _LINUX_VIRTIO_PCI_H
 
+#include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/const.h>
 
-- 
2.43.7


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH kvmtool 1/1] linux/virtio_pci.h: Include kernel.h to provide the __KERNEL_DIV_ROUND_UP define
  2026-02-27  0:42 [PATCH kvmtool 1/1] linux/virtio_pci.h: Include kernel.h to provide the __KERNEL_DIV_ROUND_UP define hbuxiaofei
@ 2026-03-13 12:53 ` Will Deacon
  2026-03-13 13:05   ` Michael S. Tsirkin
  0 siblings, 1 reply; 3+ messages in thread
From: Will Deacon @ 2026-03-13 12:53 UTC (permalink / raw)
  To: hbuxiaofei; +Cc: kvm, julien.thierry.kdev, mst

[+mst]

On Fri, Feb 27, 2026 at 08:42:24AM +0800, hbuxiaofei wrote:
> GCC Version:
>   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
> 
> CC       builtin-balloon.o
> In file included from include/kvm/pci.h:7:0,
>                  from include/kvm/vfio.h:6,
>                  from include/kvm/kvm-config.h:5,
>                  from include/kvm/kvm.h:6,
>                  from builtin-balloon.c:9:
> include/linux/virtio_pci.h:326:2: error: implicit declaration of function ‘__KERNEL_DIV_ROUND_UP’ [-Werror=implicit-function-declaration]
>   __le64 supported_caps[MAX_CAP_ID];
>   ^
> include/linux/virtio_pci.h:326:9: error: variably modified ‘supported_caps’ at file scope
>   __le64 supported_caps[MAX_CAP_ID];
>          ^
> cc1: all warnings being treated as errors
> make: *** [builtin-balloon.o] Error 1
> 
> Signed-off-by: hbuxiaofei <hbuxiaofei@gmail.com>
> ---
>  include/linux/virtio_pci.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/linux/virtio_pci.h b/include/linux/virtio_pci.h
> index e732e34..fb2f66a 100644
> --- a/include/linux/virtio_pci.h
> +++ b/include/linux/virtio_pci.h
> @@ -39,6 +39,7 @@
>  #ifndef _LINUX_VIRTIO_PCI_H
>  #define _LINUX_VIRTIO_PCI_H
>  
> +#include <linux/kernel.h>
>  #include <linux/types.h>
>  #include <linux/const.h>

Hmm. This header is imported directly from the kernel sources, so it
doesn't make sense to patch it by hand as changes will be overwritten
next time we run util/update_headers.sh.

Looking at the kernel history, 205dd7a5d6ad ("virtio_pci: drop kernel.h")
suggests that linux/const.h is sufficient for __KERNEL_DIV_ROUND_UP, so
we probably just want to copy that header over (e.g. like the diff below).

Will

--->8

diff --git a/include/linux/const.h b/include/linux/const.h
new file mode 100644
index 0000000..b8f629e
--- /dev/null
+++ b/include/linux/const.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/* const.h: Macros for dealing with constants.  */
+
+#ifndef _UAPI_LINUX_CONST_H
+#define _UAPI_LINUX_CONST_H
+
+/* Some constant macros are used in both assembler and
+ * C code.  Therefore we cannot annotate them always with
+ * 'UL' and other type specifiers unilaterally.  We
+ * use the following macros to deal with this.
+ *
+ * Similarly, _AT() will cast an expression with a type in C, but
+ * leave it unchanged in asm.
+ */
+
+#ifdef __ASSEMBLY__
+#define _AC(X,Y)	X
+#define _AT(T,X)	X
+#else
+#define __AC(X,Y)	(X##Y)
+#define _AC(X,Y)	__AC(X,Y)
+#define _AT(T,X)	((T)(X))
+#endif
+
+#define _UL(x)		(_AC(x, UL))
+#define _ULL(x)		(_AC(x, ULL))
+
+#define _BITUL(x)	(_UL(1) << (x))
+#define _BITULL(x)	(_ULL(1) << (x))
+
+#if !defined(__ASSEMBLY__)
+/*
+ * Missing asm support
+ *
+ * __BIT128() would not work in the asm code, as it shifts an
+ * 'unsigned __int128' data type as direct representation of
+ * 128 bit constants is not supported in the gcc compiler, as
+ * they get silently truncated.
+ *
+ * TODO: Please revisit this implementation when gcc compiler
+ * starts representing 128 bit constants directly like long
+ * and unsigned long etc. Subsequently drop the comment for
+ * GENMASK_U128() which would then start supporting asm code.
+ */
+#define _BIT128(x)	((unsigned __int128)(1) << (x))
+#endif
+
+#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
+#define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
+
+#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
+
+#endif /* _UAPI_LINUX_CONST_H */
diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index df42d63..6c22f1c 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -8,9 +8,6 @@
 #define round_down(x, y)	((x) & ~__round_mask(x, y))
 
 #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
-#ifndef __KERNEL_DIV_ROUND_UP
-#define __KERNEL_DIV_ROUND_UP(n,d)	DIV_ROUND_UP(n,d)
-#endif
 
 #define ALIGN(x,a)		__ALIGN_MASK(x,(typeof(x))(a)-1)
 #define __ALIGN_MASK(x,mask)	(((x)+(mask))&~(mask))

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH kvmtool 1/1] linux/virtio_pci.h: Include kernel.h to provide the __KERNEL_DIV_ROUND_UP define
  2026-03-13 12:53 ` Will Deacon
@ 2026-03-13 13:05   ` Michael S. Tsirkin
  0 siblings, 0 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2026-03-13 13:05 UTC (permalink / raw)
  To: Will Deacon; +Cc: hbuxiaofei, kvm, julien.thierry.kdev

On Fri, Mar 13, 2026 at 12:53:06PM +0000, Will Deacon wrote:
> [+mst]
> 
> On Fri, Feb 27, 2026 at 08:42:24AM +0800, hbuxiaofei wrote:
> > GCC Version:
> >   gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
> > 
> > CC       builtin-balloon.o
> > In file included from include/kvm/pci.h:7:0,
> >                  from include/kvm/vfio.h:6,
> >                  from include/kvm/kvm-config.h:5,
> >                  from include/kvm/kvm.h:6,
> >                  from builtin-balloon.c:9:
> > include/linux/virtio_pci.h:326:2: error: implicit declaration of function ‘__KERNEL_DIV_ROUND_UP’ [-Werror=implicit-function-declaration]
> >   __le64 supported_caps[MAX_CAP_ID];
> >   ^
> > include/linux/virtio_pci.h:326:9: error: variably modified ‘supported_caps’ at file scope
> >   __le64 supported_caps[MAX_CAP_ID];
> >          ^
> > cc1: all warnings being treated as errors
> > make: *** [builtin-balloon.o] Error 1
> > 
> > Signed-off-by: hbuxiaofei <hbuxiaofei@gmail.com>
> > ---
> >  include/linux/virtio_pci.h | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/include/linux/virtio_pci.h b/include/linux/virtio_pci.h
> > index e732e34..fb2f66a 100644
> > --- a/include/linux/virtio_pci.h
> > +++ b/include/linux/virtio_pci.h
> > @@ -39,6 +39,7 @@
> >  #ifndef _LINUX_VIRTIO_PCI_H
> >  #define _LINUX_VIRTIO_PCI_H
> >  
> > +#include <linux/kernel.h>
> >  #include <linux/types.h>
> >  #include <linux/const.h>
> 
> Hmm. This header is imported directly from the kernel sources, so it
> doesn't make sense to patch it by hand as changes will be overwritten
> next time we run util/update_headers.sh.
> 
> Looking at the kernel history, 205dd7a5d6ad ("virtio_pci: drop kernel.h")
> suggests that linux/const.h is sufficient for __KERNEL_DIV_ROUND_UP, so
> we probably just want to copy that header over (e.g. like the diff below).
> 
> Will
> 

Exactly.

> --->8
> 
> diff --git a/include/linux/const.h b/include/linux/const.h
> new file mode 100644
> index 0000000..b8f629e
> --- /dev/null
> +++ b/include/linux/const.h
> @@ -0,0 +1,53 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> +/* const.h: Macros for dealing with constants.  */
> +
> +#ifndef _UAPI_LINUX_CONST_H
> +#define _UAPI_LINUX_CONST_H
> +
> +/* Some constant macros are used in both assembler and
> + * C code.  Therefore we cannot annotate them always with
> + * 'UL' and other type specifiers unilaterally.  We
> + * use the following macros to deal with this.
> + *
> + * Similarly, _AT() will cast an expression with a type in C, but
> + * leave it unchanged in asm.
> + */
> +
> +#ifdef __ASSEMBLY__
> +#define _AC(X,Y)	X
> +#define _AT(T,X)	X
> +#else
> +#define __AC(X,Y)	(X##Y)
> +#define _AC(X,Y)	__AC(X,Y)
> +#define _AT(T,X)	((T)(X))
> +#endif
> +
> +#define _UL(x)		(_AC(x, UL))
> +#define _ULL(x)		(_AC(x, ULL))
> +
> +#define _BITUL(x)	(_UL(1) << (x))
> +#define _BITULL(x)	(_ULL(1) << (x))
> +
> +#if !defined(__ASSEMBLY__)
> +/*
> + * Missing asm support
> + *
> + * __BIT128() would not work in the asm code, as it shifts an
> + * 'unsigned __int128' data type as direct representation of
> + * 128 bit constants is not supported in the gcc compiler, as
> + * they get silently truncated.
> + *
> + * TODO: Please revisit this implementation when gcc compiler
> + * starts representing 128 bit constants directly like long
> + * and unsigned long etc. Subsequently drop the comment for
> + * GENMASK_U128() which would then start supporting asm code.
> + */
> +#define _BIT128(x)	((unsigned __int128)(1) << (x))
> +#endif
> +
> +#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
> +#define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
> +
> +#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
> +
> +#endif /* _UAPI_LINUX_CONST_H */
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index df42d63..6c22f1c 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -8,9 +8,6 @@
>  #define round_down(x, y)	((x) & ~__round_mask(x, y))
>  
>  #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> -#ifndef __KERNEL_DIV_ROUND_UP
> -#define __KERNEL_DIV_ROUND_UP(n,d)	DIV_ROUND_UP(n,d)
> -#endif
>  
>  #define ALIGN(x,a)		__ALIGN_MASK(x,(typeof(x))(a)-1)
>  #define __ALIGN_MASK(x,mask)	(((x)+(mask))&~(mask))


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-13 13:05 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-27  0:42 [PATCH kvmtool 1/1] linux/virtio_pci.h: Include kernel.h to provide the __KERNEL_DIV_ROUND_UP define hbuxiaofei
2026-03-13 12:53 ` Will Deacon
2026-03-13 13:05   ` Michael S. Tsirkin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox