[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20190822083223.GA15709@google.com>
Date: Thu, 22 Aug 2019 09:32:23 +0100
From: Matthias Maennich <maennich@...gle.com>
To: Christoph Hellwig <hch@...radead.org>
Cc: linux-kernel@...r.kernel.org, kernel-team@...roid.com,
arnd@...db.de, geert@...ux-m68k.org, gregkh@...uxfoundation.org,
hpa@...or.com, jeyu@...nel.org, joel@...lfernandes.org,
kstewart@...uxfoundation.org, linux-arch@...r.kernel.org,
linux-kbuild@...r.kernel.org, linux-m68k@...ts.linux-m68k.org,
linux-modules@...r.kernel.org, linux-scsi@...r.kernel.org,
linux-usb@...r.kernel.org, lucas.de.marchi@...il.com,
maco@...roid.com, maco@...gle.com, michal.lkml@...kovi.net,
mingo@...hat.com, oneukum@...e.com, pombredanne@...b.com,
sam@...nborg.org, sspatil@...gle.com, stern@...land.harvard.edu,
tglx@...utronix.de, usb-storage@...ts.one-eyed-alien.net,
x86@...nel.org, yamada.masahiro@...ionext.com
Subject: Re: [PATCH v3 10/11] RFC: usb-storage: export symbols in USB_STORAGE
namespace
On Wed, Aug 21, 2019 at 04:13:29PM -0700, Christoph Hellwig wrote:
>On Wed, Aug 21, 2019 at 12:49:25PM +0100, Matthias Maennich wrote:
>> Modules using these symbols are required to explicitly import the
>> namespace. This patch was generated with the following steps and serves
>> as a reference to use the symbol namespace feature:
>>
>> 1) Define DEFAULT_SYMBOL_NAMESPACE in the corresponding Makefile
>> 2) make (see warnings during modpost about missing imports)
>> 3) make nsdeps
>>
>> Instead of a DEFAULT_SYMBOL_NAMESPACE definition, the EXPORT_SYMBOL_NS
>> variants can be used to explicitly specify the namespace. The advantage
>> of the method used here is that newly added symbols are automatically
>> exported and existing ones are exported without touching their
>> respective EXPORT_SYMBOL macro expansion.
>
>So what is USB_STORAGE here? It isn't a C string, so where does it
>come from? To me using a C string would seem like the nicer interface
>vs a random cpp symbol that gets injected somewhere.
To be honest, I would also prefer an interface that uses C strings or
literals for the new EXPORT_SYMBOLS* macros:
EXPORT_SYMBOL_NS(mysym, "USB_STORAGE");
or
const char USB_STORAGE_NS[] = "USB_STORAGE";
EXPORT_SYMBOL_NS(mysym, USB_STORAGE_NS);
The DEFAULT_SYMBOL_NAMESPACE define within Makefiles would get a bit
more verbose in that case to express the literal:
ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE="\"USB_STORAGE\""
The main reason against that, is, that in the expansion of
EXPORT_SYMBOL_NS, we define the ksymtab entry, which name is
constructed partly by the name of the namespace:
static const struct kernel_symbol __ksymtab_##sym##__##ns ...
^^^^
For that we depend on a cpp symbol to construct the name. I am not sure
there is a reasonable way of getting rid of that without ending up
constructing the ksymtab entries completely in asm as it is already done
in case of PREL32_RELOCATIONS. But I am happy to be corrected.
For reference that is done in patch 03/11 of this series:
https://lore.kernel.org/lkml/20190821114955.12788-4-maennich@google.com/
Cheers,
Matthias
Powered by blists - more mailing lists