On Fri, 01 Oct 2021, Jason Gunthorpe <[email protected]> wrote:
> On Fri, Oct 01, 2021 at 02:04:04PM +0300, Jani Nikula wrote:
>> On Fri, 27 Aug 2021, Jason Gunthorpe <[email protected]> wrote:
>> > On Fri, Aug 27, 2021 at 03:12:36PM +0000, kernel test robot wrote:
>> >> tree:   https://github.com/awilliam/linux-vfio.git next
>> >> head:   ea870730d83fc13a5fa2bd0e175176d7ac8a400a
>> >> commit: 343b7258687ecfbb363bfda8833a7cf641aac524 [33/38] PCI: Add 
>> >> 'override_only' field to struct pci_device_id
>> >> config: i386-randconfig-a004-20210827 (attached as .config)
>> >> compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
>> >> 1076082a0d97bd5c16a25ee7cf3dbb6ee4b5a9fe)
>> >> reproduce (this is a W=1 build):
>> >>         wget 
>> >> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross 
>> >> -O ~/bin/make.cross
>> >>         chmod +x ~/bin/make.cross
>> >>         # 
>> >> https://github.com/awilliam/linux-vfio/commit/343b7258687ecfbb363bfda8833a7cf641aac524
>> >>         git remote add vfio https://github.com/awilliam/linux-vfio.git
>> >>         git fetch --no-tags vfio next
>> >>         git checkout 343b7258687ecfbb363bfda8833a7cf641aac524
>> >>         # save the attached .config to linux build tree
>> >>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross 
>> >> ARCH=i386 
>> >> 
>> >> If you fix the issue, kindly add following tag as appropriate
>> >> Reported-by: kernel test robot <[email protected]>
>> >
>> > Ugh, this is due to this code:
>> >
>> > #define INTEL_VGA_DEVICE(id, info) {               \
>> >    0x8086, id,                             \
>> >    ~0, ~0,                                 \
>> >    0x030000, 0xff0000,                     \
>> >    (unsigned long) info }
>> >
>> > #define INTEL_QUANTA_VGA_DEVICE(info) {            \
>> >    0x8086, 0x16a,                          \
>> >    0x152d, 0x8990,                         \
>> >    0x030000, 0xff0000,                     \
>> >    (unsigned long) info }
>> >
>> >
>> > Which really should be using the normal pattern for defining these
>> > structs:
>> >
>> > #define PCI_DEVICE_CLASS(dev_class,dev_class_mask) \
>> >         .class = (dev_class), .class_mask = (dev_class_mask), \
>> >         .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, \
>> >         .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
>> >
>> > The warning is also not a real issue, just clang being overzealous.
>> 
>> Stumbled upon this old report, sorry for the delayed response.
>> 
>> The reason it's not using designated initializers is that the same file
>> gets synced to some userspace projects (at least libdrm and
>> igt-gpu-tools) which use the macros to initialize slightly different
>> structs. For example, igt uses struct pci_id_match from libpciaccess-dev
>> (/usr/include/pciaccess.h) and can't easily adapt to different member
>> names.
>
> Do it like this:
>
>
> #ifdef __KERNEL__
> #define INTEL_VGA_DEVICE(..)
> #endif
>
>
> And userspace does
>
> #define INTEL_VGA_DEVICE(..)
> #include <foo.h>

Sure.

>> Anyway, we've got
>> 
>> subdir-ccflags-y += $(call cc-disable-warning, missing-field-initializers)
>> subdir-ccflags-y += $(call cc-disable-warning, initializer-overrides)
>> 
>> in drivers/gpu/drm/i915/Makefile, so I wonder why they're not respected.
>
> Disabling kernel warnings because some userspace wants to copy a
> kernel header is horrific, don't do that.

We've disabled some warnings because those lines are preceded by

subdir-ccflags-y := -Wall -Wextra

enabling more warnings than the kernel build generally does.


BR,
Jani.



-- 
Jani Nikula, Intel Open Source Graphics Center

Reply via email to