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