Re: [PATCH v8 01/17] spi: add basic support for SPI offloading

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

 



Hello Andy,

On Tue, Feb 11, 2025 at 04:35:34PM +0200, Andy Shevchenko wrote:
> On Tue, Feb 11, 2025 at 04:31:45PM +0200, Andy Shevchenko wrote:
> > On Tue, Feb 11, 2025 at 04:29:33PM +0200, Andy Shevchenko wrote:
> > > On Tue, Feb 11, 2025 at 04:20:50PM +0200, Andy Shevchenko wrote:
> > > > On Tue, Feb 11, 2025 at 01:00:08PM +0000, Mark Brown wrote:
> > > > > On Mon, Feb 10, 2025 at 10:33:31PM +0200, Andy Shevchenko wrote:
> > > > > > On Mon, Feb 10, 2025 at 05:48:00PM +0000, Mark Brown wrote:
> > > > > > > On Mon, Feb 10, 2025 at 11:11:23AM -0600, David Lechner wrote:
> > > > > 
> > > > > > > > In this case, we specifically split up the headers so that the only time you
> > > > > > > > would ever include this header is if you need to call functions in this
> > > > > > > > namespace (i.e. struct definitions are in linux/spi/offload/types.h which
> > > > > > > > doesn't import the namespace). So this doesn't actually seem like a problem
> > > > > > > > to me.
> > > > > 
> > > > > > > Indeed - I can't see any case where a user would need the header without
> > > > > > > needing the namespace.
> > > > > 
> > > > > > You are looking from the other end. What I'm telling is that anyone who adds
> > > > > > a header, automatically gets a namespace. What's the point to have namespace
> > > > > > if it won't easily prevent from (ab)using it in the code. I consider putting
> > > > > > MODULE_IMPORT_NS() in the headers a bit weird.

There was a similar discussion some time ago about the lpss pwm driver
(https://lore.kernel.org/linux-pwm/Z09YJGifvpENYNPy@xxxxxxxxxxxxxxxxxx/).
The arguments that you didn't accept back then already are similar to
the ones that were brought forward here.
The TL;DR; is: Adding MODULE_IMPORT_NS() to a header makes it easier for
code to use the exported symbols. Yes, that includes abusers of the
code.

But if you mostly care about the regular users of an API/ABI, making
things easy for those is the thing that matters. Agreed, if you think
that module namespaces are primarily a line of defence against abusers,
adding the import to the header weakens that defence (a bit). However a
typical header includes function prototypes and macros. Those also make
it easier for abusers. With your argumentation we better don't create
headers at all?

There are other benefits of module namespaces like reducing the set of
globally available symbols which speeds up module loading or the
ability to see in the module meta data that a namespace is used.

> > > > > Sure, but there's no case where anyone should ever be adding the header
> > > > > without adding the namespace which does rather sound like the sort of
> > > > > thing where you should just move the namespace addition to the header.
> > > > 
> > > > $ git grep -lw MODULE_IMPORT_NS | wc -l
> > > > 651
> > > > 
> > > > $ git grep -lw MODULE_IMPORT_NS | grep '\.h$'
> > > > 
> > > > drivers/base/firmware_loader/sysfs.h
> > > > drivers/iio/adc/ltc2497.h
> > > > drivers/pwm/pwm-dwc.h
> > > > ^^^ These ones are probably fine as they are not in include/
> > > > 
> > > > include/kunit/visibility.h
> > > > include/linux/module.h
> > > > include/linux/pwm.h
> > > > 
> > > > I believe these three are misuses of MODULE_IMPORT_NS(). Because one may add
> > > 
> > > _Two_, of course, module.h provides the macro :-)
> > 
> > And after looking into include/kunit/visibility.h it becomes only a single one.
> > So, PWM is abuser of MODULE_IMPORT_NS() and this series added one more.
> 
> > > > a header just as a "proxy" one (copy'n'paste, for example) and we know that is
> > > > real as we saw a lot of code that has semi-random header inclusion blocks.
> 
> And thinking of more realistic example when we want header and do *not* want a
> namespace is the simple use of the macro / or data type from it without
> actually relying on the APIs.

The problem of your more realistic example is that it doesn't apply
here. A user of include/linux/pwm.h (or the header under discussion
here) won't only use a macro or two and so not benefit from the imported
module namespace.

Nobody intends to import all possible namespaces in <linux/kernel.h>.

> So, in case of the header structure like
> 
> foo_constants.h
> foo_types.h
> foo_api.h
> foo_uplevel_something.h
> 
> The MODULE_IMPORT_NS() would make sense only to foo_api.h. And I still would
> question that. As I explained that header may simply become a stale one or
> being used by a mistake.

I have no problem here. If the header becomes stale we will most
probably notice that eventually and remove it. Maybe the unused
namespace even makes it easier to spot that issue.
See
https://lore.kernel.org/r/20250123103939.357160-2-u.kleine-koenig@xxxxxxxxxxxx
for an example which I found exactly like that.

Best regards
Uwe

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux