* [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