All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: "Uwe Kleine-König" <ukleinek@kernel.org>
Cc: "Mark Brown" <broonie@kernel.org>,
	"David Lechner" <dlechner@baylibre.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"David Jander" <david@protonic.nl>,
	"Martin Sperl" <kernel@martin.sperl.org>,
	linux-spi@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
	"Jonathan Cameron" <Jonathan.Cameron@huawei.com>,
	"Linus Walleij" <linus.walleij@linaro.org>
Subject: Re: [PATCH v8 01/17] spi: add basic support for SPI offloading
Date: Tue, 11 Feb 2025 21:12:30 +0200	[thread overview]
Message-ID: <Z6uhHssgIvI2DJ4c@smile.fi.intel.com> (raw)
In-Reply-To: <tnjsrq3trijh4agmbhrfnqeq4iojhwybtg45bwt5n7mg7qqgcx@s7gw7idjuxgd>

On Tue, Feb 11, 2025 at 07:45:30PM +0100, Uwe Kleine-König wrote:
> 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@smile.fi.intel.com/).
> 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.

Thank you for summarizing the previous discussion.

> > > > > > 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.

It may not apply _today_, but it may be applicable tomorrow as headers are tend
to grow and use another headers and so on.

> 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.

Lol. Look at the header hell we have now. 98% code in the drivers/ just show
that the developers either don't care or do not understand C (in terms of
what headers are for and why it's important to follow IWYU principle).

> Maybe the unused namespace even makes it easier to spot that issue.

Do we have an existing tools for that?

> See
> https://lore.kernel.org/r/20250123103939.357160-2-u.kleine-koenig@baylibre.com
> for an example which I found exactly like that.


-- 
With Best Regards,
Andy Shevchenko



  parent reply	other threads:[~2025-02-11 19:12 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-07 20:08 [PATCH v8 00/17] spi: axi-spi-engine: add offload support David Lechner
2025-02-07 20:08 ` [PATCH v8 01/17] spi: add basic support for SPI offloading David Lechner
2025-02-10 16:45   ` Andy Shevchenko
2025-02-10 17:11     ` David Lechner
2025-02-10 17:48       ` Mark Brown
2025-02-10 20:33         ` Andy Shevchenko
2025-02-11 13:00           ` Mark Brown
2025-02-11 14:20             ` Andy Shevchenko
2025-02-11 14:29               ` Andy Shevchenko
2025-02-11 14:31                 ` Andy Shevchenko
2025-02-11 14:35                   ` Andy Shevchenko
2025-02-11 18:45                     ` Uwe Kleine-König
2025-02-11 18:53                       ` Mark Brown
2025-02-11 19:15                         ` Andy Shevchenko
2025-02-11 19:12                       ` Andy Shevchenko [this message]
2025-02-12  8:52                         ` Uwe Kleine-König
2025-02-12 10:55                           ` Andy Shevchenko
2025-02-12 10:58                           ` Andy Shevchenko
2025-02-07 20:08 ` [PATCH v8 02/17] spi: offload: add support for hardware triggers David Lechner
2025-02-07 20:09 ` [PATCH v8 03/17] dt-bindings: trigger-source: add generic PWM trigger source David Lechner
2025-02-07 20:09 ` [PATCH v8 04/17] spi: offload-trigger: add PWM trigger driver David Lechner
2025-02-10 16:52   ` Andy Shevchenko
2025-02-07 20:09 ` [PATCH v8 05/17] spi: add offload TX/RX streaming APIs David Lechner
2025-02-07 20:09 ` [PATCH v8 06/17] spi: dt-bindings: axi-spi-engine: add SPI offload properties David Lechner
2025-02-07 20:09 ` [PATCH v8 07/17] spi: axi-spi-engine: implement offload support David Lechner
2025-02-07 20:09 ` [PATCH v8 08/17] iio: buffer-dmaengine: split requesting DMA channel from allocating buffer David Lechner
2025-02-07 20:09 ` [PATCH v8 09/17] iio: buffer-dmaengine: add devm_iio_dmaengine_buffer_setup_with_handle() David Lechner
2025-02-07 20:09 ` [PATCH v8 10/17] iio: adc: ad7944: don't use storagebits for sizing David Lechner
2025-02-07 20:09 ` [PATCH v8 11/17] iio: adc: ad7944: add support for SPI offload David Lechner
2025-02-08 15:00   ` kernel test robot
2025-02-08 16:38     ` David Lechner
2025-02-10 19:09   ` David Lechner
2025-02-11 19:32     ` Jonathan Cameron
2025-02-07 20:09 ` [PATCH v8 12/17] doc: iio: ad7944: describe offload support David Lechner
2025-02-07 20:09 ` [PATCH v8 13/17] dt-bindings: iio: adc: adi,ad4695: add SPI offload properties David Lechner
2025-02-07 20:09 ` [PATCH v8 14/17] iio: adc: ad4695: Add support for SPI offload David Lechner
2025-02-07 20:20   ` Mark Brown
2025-02-08 13:11     ` Jonathan Cameron
2025-02-09  0:14   ` kernel test robot
2025-02-09  1:17   ` kernel test robot
2025-02-10 16:01   ` David Lechner
2025-02-10 18:54     ` Jonathan Cameron
2025-02-07 20:09 ` [PATCH v8 15/17] doc: iio: ad4695: add SPI offload support David Lechner
2025-02-07 20:09 ` [PATCH v8 16/17] iio: dac: ad5791: sort include directives David Lechner
2025-02-07 20:09 ` [PATCH v8 17/17] iio: dac: ad5791: Add offload support David Lechner
2025-02-10 14:36 ` [PATCH v8 00/17] spi: axi-spi-engine: add " Mark Brown
2025-02-10 18:59   ` Jonathan Cameron
2025-02-10 16:07 ` (subset) " Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z6uhHssgIvI2DJ4c@smile.fi.intel.com \
    --to=andriy.shevchenko@intel.com \
    --cc=Jonathan.Cameron@huawei.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=david@protonic.nl \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=kernel@martin.sperl.org \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=robh@kernel.org \
    --cc=ukleinek@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.