2024-01-26 18:31:37

by Greg KH

[permalink] [raw]
Subject: Re: [PATCH v2 2/3] usb: typec: ucsi: Update connector cap and status

On Fri, Jan 26, 2024 at 10:08:16AM -0800, Abhishek Pandit-Subedi wrote:
> On Thu, Jan 25, 2024 at 5:50 PM Greg Kroah-Hartman
> <[email protected]> wrote:
> >
> > On Thu, Jan 25, 2024 at 04:21:47PM -0800, Abhishek Pandit-Subedi wrote:
> > > On Thu, Jan 25, 2024 at 3:03 PM Greg Kroah-Hartman
> > > <[email protected]> wrote:
> > > >
> > > > On Wed, Jan 24, 2024 at 04:44:53PM -0800, Abhishek Pandit-Subedi wrote:
> > > > > diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> > > > > index bec920fa6b8a..94b373378f63 100644
> > > > > --- a/drivers/usb/typec/ucsi/ucsi.h
> > > > > +++ b/drivers/usb/typec/ucsi/ucsi.h
> > > > > @@ -3,6 +3,7 @@
> > > > > #ifndef __DRIVER_USB_TYPEC_UCSI_H
> > > > > #define __DRIVER_USB_TYPEC_UCSI_H
> > > > >
> > > > > +#include <asm-generic/unaligned.h>
> > > >
> > > > Do you really need to include a asm/ include file? This feels very
> > > > wrong.
> > >
> > > I didn't see any header in include/linux that already had these
> > > unaligned access functions so I opted to include
> > > asm-generic/unaligned.h. Is there a reason not to use an asm/ include
> > > file?
> >
> > Yes, you should never need to include a asm/ file, unless you are
> > arch-specific code.
> >
> > But the big issue is that you don't really need this, right?
>
> The UCSI struct definitions have lots of unaligned bit ranges (and I
> will be refactoring <linux/bitfield.h> to support this but that's
> coming later). As an example, the GET_CONNECTOR_STATUS data structure
> has unaligned fields from bit 88-145.
> Rather than define my own macro, it was suggested I use the
> get_unaligned_le32 functions (see
> https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/5195032/3..4/drivers/usb/typec/ucsi/ucsi.h#b183).
>
> I did a quick ripgrep on the drivers folder -- it looks like the "You
> should never need to include a asm/ file unless you are arch specific"
> isn't being followed for this file:
> $ (cd drivers && rg -g '*.h' "unaligned\.h" -l) | wc -l
> 22
>
> The unaligned access functions (get_unaligned_le16,
> get_unaligned_le32, etc) are really useful and widely used. Maybe they
> SHOULD be exposed from a <linux/unaligned.h> since they are so useful?
> I can send a follow-on patch that creates <linux/unaligned.h> (that
> simply just includes <asm/unaligned.h>) and moves all includes of
> <asm/unaligned.h> outside of "arch" to the linux header instead (this
> will also create a checkpatch warning now as you are expecting).

This is being worked on, see:
https://lore.kernel.org/r/20231212024920.GG1674809@ZenIV

thanks,

greg k-h


2024-01-26 18:38:02

by Abhishek Pandit-Subedi

[permalink] [raw]
Subject: Re: [PATCH v2 2/3] usb: typec: ucsi: Update connector cap and status

On Fri, Jan 26, 2024 at 10:30 AM Greg Kroah-Hartman
<[email protected]> wrote:
>
> On Fri, Jan 26, 2024 at 10:08:16AM -0800, Abhishek Pandit-Subedi wrote:
> > On Thu, Jan 25, 2024 at 5:50 PM Greg Kroah-Hartman
> > <[email protected]> wrote:
> > >
> > > On Thu, Jan 25, 2024 at 04:21:47PM -0800, Abhishek Pandit-Subedi wrote:
> > > > On Thu, Jan 25, 2024 at 3:03 PM Greg Kroah-Hartman
> > > > <[email protected]> wrote:
> > > > >
> > > > > On Wed, Jan 24, 2024 at 04:44:53PM -0800, Abhishek Pandit-Subedi wrote:
> > > > > > diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
> > > > > > index bec920fa6b8a..94b373378f63 100644
> > > > > > --- a/drivers/usb/typec/ucsi/ucsi.h
> > > > > > +++ b/drivers/usb/typec/ucsi/ucsi.h
> > > > > > @@ -3,6 +3,7 @@
> > > > > > #ifndef __DRIVER_USB_TYPEC_UCSI_H
> > > > > > #define __DRIVER_USB_TYPEC_UCSI_H
> > > > > >
> > > > > > +#include <asm-generic/unaligned.h>
> > > > >
> > > > > Do you really need to include a asm/ include file? This feels very
> > > > > wrong.
> > > >
> > > > I didn't see any header in include/linux that already had these
> > > > unaligned access functions so I opted to include
> > > > asm-generic/unaligned.h. Is there a reason not to use an asm/ include
> > > > file?
> > >
> > > Yes, you should never need to include a asm/ file, unless you are
> > > arch-specific code.
> > >
> > > But the big issue is that you don't really need this, right?
> >
> > The UCSI struct definitions have lots of unaligned bit ranges (and I
> > will be refactoring <linux/bitfield.h> to support this but that's
> > coming later). As an example, the GET_CONNECTOR_STATUS data structure
> > has unaligned fields from bit 88-145.
> > Rather than define my own macro, it was suggested I use the
> > get_unaligned_le32 functions (see
> > https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/5195032/3..4/drivers/usb/typec/ucsi/ucsi.h#b183).
> >
> > I did a quick ripgrep on the drivers folder -- it looks like the "You
> > should never need to include a asm/ file unless you are arch specific"
> > isn't being followed for this file:
> > $ (cd drivers && rg -g '*.h' "unaligned\.h" -l) | wc -l
> > 22
> >
> > The unaligned access functions (get_unaligned_le16,
> > get_unaligned_le32, etc) are really useful and widely used. Maybe they
> > SHOULD be exposed from a <linux/unaligned.h> since they are so useful?
> > I can send a follow-on patch that creates <linux/unaligned.h> (that
> > simply just includes <asm/unaligned.h>) and moves all includes of
> > <asm/unaligned.h> outside of "arch" to the linux header instead (this
> > will also create a checkpatch warning now as you are expecting).
>
> This is being worked on, see:
> https://lore.kernel.org/r/20231212024920.GG1674809@ZenIV
>
> thanks,
>
> greg k-h

Thanks, I see the move here:
https://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git/commit/?h=headers.unaligned&id=3169da8e80dfca2bcbfb6e998e2f36bcdcd5895a
I'm not sure how the logistics of this is going to work but I assume
it's ok to merge with <asm/unaligned.h> for now and let the later
merge from viro fix this? (+Viro as FYI)

I'll send up Patch 3 of this series with the fixes discussed (use
asm/unaligned.h and reorder includes)

Abhishek