Re: [PATCH] media: v4l2-subdev: Fix a 64bit bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dan,

On Fri, Nov 03, 2023 at 10:51:09AM +0300, Dan Carpenter wrote:
> On Fri, Nov 03, 2023 at 07:32:41AM +0000, Sakari Ailus wrote:
> > > > > diff --git a/include/uapi/linux/v4l2-subdev.h b/include/uapi/linux/v4l2-subdev.h
> > > > > index 4a195b68f28f..21d149969119 100644
> > > > > --- a/include/uapi/linux/v4l2-subdev.h
> > > > > +++ b/include/uapi/linux/v4l2-subdev.h
>                       ^^^^
> 
> > > > > @@ -239,7 +239,7 @@ struct v4l2_subdev_routing {
> > > > >   * set (which is the default), the 'stream' fields will be forced to 0 by the
> > > > >   * kernel.
> > > > >   */
> > > > > - #define V4L2_SUBDEV_CLIENT_CAP_STREAMS		(1U << 0)
> > > > > + #define V4L2_SUBDEV_CLIENT_CAP_STREAMS		BIT_ULL(0)
> > > > 
> > > > This is a UAPI header but BIT_ULL() is defined in kernel-only headers.
> > > > 
> > > > So (1ULL << 0) ?
> > > > 
> > > > uapi/linux/const.h also has _BITULL().
> > > 
> > > Let's just do 1ULL < 0.  I'll resend.  Is there an automated way I could
> > > have caught this?
> > 
> > I don't know. :-) Remember to use shift left for bit definitions in UAPI
> > headers?
> 
> Yeah.  I knew it was UAPI but I'm not used to thinking about UAPI rules.
> I only tried to build this on kernel .c files and didn't try to rebuild
> the usr/ dir.
> 
> I bet someone would have complained eventually but who would have
> run into this first...  I see there are existing BIT() users in the usr/
> dir, but everyone seems good about using __u32 instead of u32.  Probably
> because declaring a variable as u32 causes an immediate compile error
> for everyone but bogus BIT() defines are not an issue until someone
> tries to use them.
> 
> KTODO: write a script to check that UAPI doesn't use kernel types
> 
> Maybe this could be a part of checkpatch.pl?

I think that would be useful.

I wonder if there are be better ways to check for non-existent macros
than e.g. singling out BIT() and others. I'd think just checking for BIT()
etc. should be enough.

> 
> regards,
> dan carpenter
> 
> $ grep BIT usr/ -Rw
> usr/include/misc/uacce/uacce.h:#define UACCE_DEV_SVA            BIT(0)
> usr/include/linux/psci.h:#define PSCI_1_0_OS_INITIATED                  BIT(0)
> usr/include/linux/can/netlink.h: * For further information, please read chapter "8 BIT TIMING
> usr/include/linux/cxl_mem.h:#define CXL_MEM_COMMAND_FLAG_ENABLED                BIT(0)
> usr/include/linux/cxl_mem.h:#define CXL_MEM_COMMAND_FLAG_EXCLUSIVE              BIT(1)
> usr/include/linux/nl80211.h: *  bitmask of BIT(NL80211_BAND_*) as described in %enum
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_PAUSE            BIT(10)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_ASM_DIR          BIT(11)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_C2               BIT(12)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_RF               BIT(13)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_ACK              BIT(14)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_0_NP               BIT(15)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_1000BASE_KX      BIT(5)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_10GBASE_KX4      BIT(6)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_10GBASE_KR       BIT(7)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_40GBASE_KR4      BIT(8)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_40GBASE_CR4      BIT(9)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_100GBASE_CR10    BIT(10)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_100GBASE_KP4     BIT(11)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_100GBASE_KR4     BIT(12)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_100GBASE_CR4     BIT(13)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_25GBASE_R_S      BIT(14)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_1_25GBASE_R                BIT(15)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_2_2500BASE_KX      BIT(0)
> usr/include/linux/mdio.h:#define MDIO_AN_C73_2_5GBASE_KR                BIT(1)
> usr/include/asm/kvm.h:#define KVM_PMU_EVENT_FLAG_MASKED_EVENTS BIT(0)
> usr/include/asm/kvm.h:#define KVM_EXIT_HYPERCALL_LONG_MODE      BIT(0)
> usr/include/drm/radeon_drm.h: * THESE ARE NOT BIT FIELDS
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_READ                BIT(0)
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_WRITE               BIT(1)
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_LBW         BIT(2)
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_HBW         BIT(3)
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_RR          BIT(4)
> usr/include/drm/habanalabs_accel.h:#define HL_RAZWI_ADDR_DEC    BIT(5)

Indeed.

-- 
Regards,

Sakari Ailus




[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux