Message ID | 20230426042906.724352-2-airlied@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] docs: module: start adding some docs for MODULE_ macros. | expand |
On Wed, Apr 26, 2023 at 12:31 AM Dave Airlie <airlied@gmail.com> wrote: > > From: Dave Airlie <airlied@redhat.com> > > This adds a tag that will go into the module info, only one firmware from > the group given needs to be available for this driver to work. This allows > dracut to avoid adding in firmware that aren't needed. > > This just brackets a module list in the modinfo, the modules in the list > will get entries in reversed order so the last module in the list is the > preferred one. > > The corresponding dracut code it at: > https://github.com/dracutdevs/dracut/pull/2309 > > Cc: Luis Chamberlain <mcgrof@kernel.org> > Cc: linux-modules@vger.kernel.org > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: Dave Airlie <airlied@redhat.com> I think this is a very useful feature, Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > --- > include/linux/module.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/include/linux/module.h b/include/linux/module.h > index f9d072a7e198..d3e7085cedd0 100644 > --- a/include/linux/module.h > +++ b/include/linux/module.h > @@ -306,6 +306,28 @@ extern typeof(name) __mod_##type##__##name##_device_table \ > */ > #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) > > +/** > + * MODULE_FIRMWARE_GROUP_ONLY_ONE - Create a need only one firmware group > + * @_grpname: group name > + * > + * This creates a group of which the driver only needs one firmware installed. > + * This is to allow dracut to limit the number of firmwares in the initramfs. > + * This just creates a new entry in the modinfo section, there should be one > + * of these entries bracketing the group of MODULE_INFO lines. > + * Due to how modinfo is constructed the ordering of the modinfo means the > + * last module info in the group will end up being the first one dracut will > + * search for, so place the newest firmware last. > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + * > + * ``MODULE_FIRMWARE("firmwarev1")`` > + * > + * ``MODULE_FIRMWARE("firmwarev2")`` > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + */ > +#define MODULE_FIRMWARE_GROUP_ONLY_ONE(_grpname) MODULE_INFO(firmware_group_only_one, _grpname) > + > /** > * MODULE_IMPORT_NS - Set the symbol namespace for the module. > * @ns: symbol namespace to import the module into. > -- > 2.39.2 >
On 4/25/23 21:29, Dave Airlie wrote: > From: Dave Airlie <airlied@redhat.com> > > This adds a tag that will go into the module info, only one firmware from > the group given needs to be available for this driver to work. This allows > dracut to avoid adding in firmware that aren't needed. > > This just brackets a module list in the modinfo, the modules in the list > will get entries in reversed order so the last module in the list is the > preferred one. > > The corresponding dracut code it at: > https://github.com/dracutdevs/dracut/pull/2309 > > Cc: Luis Chamberlain <mcgrof@kernel.org> > Cc: linux-modules@vger.kernel.org > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: Dave Airlie <airlied@redhat.com> > --- > include/linux/module.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/include/linux/module.h b/include/linux/module.h > index f9d072a7e198..d3e7085cedd0 100644 > --- a/include/linux/module.h > +++ b/include/linux/module.h > @@ -306,6 +306,28 @@ extern typeof(name) __mod_##type##__##name##_device_table \ > */ > #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) > > +/** > + * MODULE_FIRMWARE_GROUP_ONLY_ONE - Create a need only one firmware group need-only-one > + * @_grpname: group name > + * > + * This creates a group of which the driver only needs one firmware installed. > + * This is to allow dracut to limit the number of firmwares in the initramfs. > + * This just creates a new entry in the modinfo section, there should be one section; > + * of these entries bracketing the group of MODULE_INFO lines. > + * Due to how modinfo is constructed the ordering of the modinfo means the > + * last module info in the group will end up being the first one dracut will > + * search for, so place the newest firmware last. > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + * > + * ``MODULE_FIRMWARE("firmwarev1")`` > + * > + * ``MODULE_FIRMWARE("firmwarev2")`` > + * > + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` > + */ > +#define MODULE_FIRMWARE_GROUP_ONLY_ONE(_grpname) MODULE_INFO(firmware_group_only_one, _grpname) > + > /** > * MODULE_IMPORT_NS - Set the symbol namespace for the module. > * @ns: symbol namespace to import the module into. Tested-by: Randy Dunlap <rdunlap@infradead.org> # for the kernel-doc Is this going anywhere? It was posted about 2 months ago. thanks.
On Thu, Jun 22, 2023 at 02:12:32PM -0700, Randy Dunlap wrote:
> Is this going anywhere? It was posted about 2 months ago.
Last I heard Dave was still working with Lucas on this?
Luis
diff --git a/include/linux/module.h b/include/linux/module.h index f9d072a7e198..d3e7085cedd0 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -306,6 +306,28 @@ extern typeof(name) __mod_##type##__##name##_device_table \ */ #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) +/** + * MODULE_FIRMWARE_GROUP_ONLY_ONE - Create a need only one firmware group + * @_grpname: group name + * + * This creates a group of which the driver only needs one firmware installed. + * This is to allow dracut to limit the number of firmwares in the initramfs. + * This just creates a new entry in the modinfo section, there should be one + * of these entries bracketing the group of MODULE_INFO lines. + * Due to how modinfo is constructed the ordering of the modinfo means the + * last module info in the group will end up being the first one dracut will + * search for, so place the newest firmware last. + * + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` + * + * ``MODULE_FIRMWARE("firmwarev1")`` + * + * ``MODULE_FIRMWARE("firmwarev2")`` + * + * ``MODULE_FIRMWARE_GROUP_ONLY_ONE("mygroup")`` + */ +#define MODULE_FIRMWARE_GROUP_ONLY_ONE(_grpname) MODULE_INFO(firmware_group_only_one, _grpname) + /** * MODULE_IMPORT_NS - Set the symbol namespace for the module. * @ns: symbol namespace to import the module into.