Message ID | 20190821114955.12788-7-maennich@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3,01/11] module: support reading multiple values per modinfo tag | expand |
+++ Matthias Maennich [21/08/19 12:49 +0100]: >To avoid excessive usage of EXPORT_SYMBOL_NS(sym, MY_NAMESPACE), where >MY_NAMESPACE will always be the namespace we are exporting to, allow >exporting all definitions of EXPORT_SYMBOL() and friends by defining >DEFAULT_SYMBOL_NAMESPACE. > >For example, to export all symbols defined in usb-common into the >namespace USB_COMMON, add a line like this to drivers/usb/common/Makefile: > > ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE=USB_COMMON > >That is equivalent to changing all EXPORT_SYMBOL(sym) definitions to >EXPORT_SYMBOL_NS(sym, USB_COMMON). Subsequently all symbol namespaces >functionality will apply. > >Another way of making use of this feature is to define the namespace >within source or header files similar to how TRACE_SYSTEM defines are >used: > #undef DEFAULT_SYMBOL_NAMESPACE > #define DEFAULT_SYMBOL_NAMESPACE USB_COMMON > >Please note that, as opposed to TRACE_SYSTEM, DEFAULT_SYMBOL_NAMESPACE >has to be defined before including include/linux/export.h. > >If DEFAULT_SYMBOL_NAMESPACE is defined, a symbol can still be exported >to another namespace by using EXPORT_SYMBOL_NS() and friends with >explicitly specifying the namespace. This changelog provides a good summary of how to use DEFAULT_SYMBOL_NAMESPACE, I wonder if we should explicitly document its proper usage somewhere? (along with EXPORT_SYMBOL_NS*) The EXPORT_SYMBOL API is briefly documented in Documentation/kernel-hacking/hacking.rst - it might be slightly dated, but perhaps it'd fit there best? >Suggested-by: Arnd Bergmann <arnd@arndb.de> >Reviewed-by: Martijn Coenen <maco@android.com> >Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >Signed-off-by: Matthias Maennich <maennich@google.com> >--- > include/linux/export.h | 6 ++++++ > 1 file changed, 6 insertions(+) > >diff --git a/include/linux/export.h b/include/linux/export.h >index 8e12e05444d1..1fb243abdbc4 100644 >--- a/include/linux/export.h >+++ b/include/linux/export.h >@@ -166,6 +166,12 @@ struct kernel_symbol { > #define __EXPORT_SYMBOL ___EXPORT_SYMBOL > #endif > >+#ifdef DEFAULT_SYMBOL_NAMESPACE >+#undef __EXPORT_SYMBOL >+#define __EXPORT_SYMBOL(sym, sec) \ >+ __EXPORT_SYMBOL_NS(sym, sec, DEFAULT_SYMBOL_NAMESPACE) >+#endif >+ > #define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "") > #define EXPORT_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_gpl") > #define EXPORT_SYMBOL_GPL_FUTURE(sym) __EXPORT_SYMBOL(sym, "_gpl_future") >-- >2.23.0.rc1.153.gdeed80330f-goog >
On Wed, Aug 28, 2019 at 12:49:51PM +0200, Jessica Yu wrote: >+++ Matthias Maennich [21/08/19 12:49 +0100]: >>To avoid excessive usage of EXPORT_SYMBOL_NS(sym, MY_NAMESPACE), where >>MY_NAMESPACE will always be the namespace we are exporting to, allow >>exporting all definitions of EXPORT_SYMBOL() and friends by defining >>DEFAULT_SYMBOL_NAMESPACE. >> >>For example, to export all symbols defined in usb-common into the >>namespace USB_COMMON, add a line like this to drivers/usb/common/Makefile: >> >> ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE=USB_COMMON >> >>That is equivalent to changing all EXPORT_SYMBOL(sym) definitions to >>EXPORT_SYMBOL_NS(sym, USB_COMMON). Subsequently all symbol namespaces >>functionality will apply. >> >>Another way of making use of this feature is to define the namespace >>within source or header files similar to how TRACE_SYSTEM defines are >>used: >> #undef DEFAULT_SYMBOL_NAMESPACE >> #define DEFAULT_SYMBOL_NAMESPACE USB_COMMON >> >>Please note that, as opposed to TRACE_SYSTEM, DEFAULT_SYMBOL_NAMESPACE >>has to be defined before including include/linux/export.h. >> >>If DEFAULT_SYMBOL_NAMESPACE is defined, a symbol can still be exported >>to another namespace by using EXPORT_SYMBOL_NS() and friends with >>explicitly specifying the namespace. > >This changelog provides a good summary of how to use >DEFAULT_SYMBOL_NAMESPACE, I wonder if we should explicitly document >its proper usage somewhere? (along with EXPORT_SYMBOL_NS*) >The EXPORT_SYMBOL API is briefly documented in >Documentation/kernel-hacking/hacking.rst - it might be slightly dated, >but perhaps it'd fit there best? I will add documentation along with the commits. Not only for the macros, but in general to describe the feature. >>Suggested-by: Arnd Bergmann <arnd@arndb.de> >>Reviewed-by: Martijn Coenen <maco@android.com> >>Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >>Signed-off-by: Matthias Maennich <maennich@google.com> >>--- >>include/linux/export.h | 6 ++++++ >>1 file changed, 6 insertions(+) >> >>diff --git a/include/linux/export.h b/include/linux/export.h >>index 8e12e05444d1..1fb243abdbc4 100644 >>--- a/include/linux/export.h >>+++ b/include/linux/export.h >>@@ -166,6 +166,12 @@ struct kernel_symbol { >>#define __EXPORT_SYMBOL ___EXPORT_SYMBOL >>#endif >> >>+#ifdef DEFAULT_SYMBOL_NAMESPACE >>+#undef __EXPORT_SYMBOL >>+#define __EXPORT_SYMBOL(sym, sec) \ >>+ __EXPORT_SYMBOL_NS(sym, sec, DEFAULT_SYMBOL_NAMESPACE) >>+#endif >>+ >>#define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "") >>#define EXPORT_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_gpl") >>#define EXPORT_SYMBOL_GPL_FUTURE(sym) __EXPORT_SYMBOL(sym, "_gpl_future") >>-- >>2.23.0.rc1.153.gdeed80330f-goog >>
diff --git a/include/linux/export.h b/include/linux/export.h index 8e12e05444d1..1fb243abdbc4 100644 --- a/include/linux/export.h +++ b/include/linux/export.h @@ -166,6 +166,12 @@ struct kernel_symbol { #define __EXPORT_SYMBOL ___EXPORT_SYMBOL #endif +#ifdef DEFAULT_SYMBOL_NAMESPACE +#undef __EXPORT_SYMBOL +#define __EXPORT_SYMBOL(sym, sec) \ + __EXPORT_SYMBOL_NS(sym, sec, DEFAULT_SYMBOL_NAMESPACE) +#endif + #define EXPORT_SYMBOL(sym) __EXPORT_SYMBOL(sym, "") #define EXPORT_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_gpl") #define EXPORT_SYMBOL_GPL_FUTURE(sym) __EXPORT_SYMBOL(sym, "_gpl_future")