Re: [PATCH 4/6] drivers, staging, unisys Add visorbus module autoloading code

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

 



Top posting ;)  Greg -- I know you're busy but I just wanted to make sure you
didn't miss this question re: drivers/staging and patches that touch other areas
of the kernel.

Thanks!

P.

On 08/03/2015 01:21 PM, Prarit Bhargava wrote:
> On 07/31/2015 07:07 PM, Greg KH wrote:> On Fri, Jul 24, 2015 at 12:06:54PM -0400, Benjamin Romer wrote:
>>> From: Prarit Bhargava <prarit@xxxxxxxxxx>
>>>
>>> This patch adds an module alias and a MODULE_DEVICE_TABLE to autoload the
>>> visorhba driver when an appropriate device is created by the visorbus.
>>>
>>> Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
>>> ---
>>>  drivers/staging/unisys/visorhba/visorhba_main.c | 2 ++
>>>  1 file changed, 2 insertions(+)
>>>
>>> diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c b/drivers/staging/unisys/visorhba/visorhba_main.c
>>> index 031c6fa..50ecdf2 100644
>>> --- a/drivers/staging/unisys/visorhba/visorhba_main.c
>>> +++ b/drivers/staging/unisys/visorhba/visorhba_main.c
>>> @@ -80,6 +80,8 @@ static struct visor_driver visorhba_driver = {
>>>  	.resume = visorhba_resume,
>>>  	.channel_interrupt = NULL,
>>>  };
>>> +MODULE_DEVICE_TABLE(visorbus, visorhba_channel_types);
>>> +MODULE_ALIAS("visorbus:" SPAR_VHBA_CHANNEL_PROTOCOL_UUID_STR);
>>
>> You shouldn't have to write MODULE_ALIAS lines "by hand", they should be
>> generated for you automagically from the MODULE_DEVICE_TABLE() define,
>> if you do it right.
>>
>> You all didn't do it right :)
>>
> 
> Greg,
> 
> I need further clarification on the right approach for the autoload code.
> 
> In order to "do it right" I would have to do something like the following
> which would correctly add module alias entries for the visorbus bus.
> The issue that I have with this patch is that it touches code outside
> of drivers/staging for a driver that is solely within drivers/staging.
> 
> Is modifying non drivers/staging okay to do?  Or is simply doing
> 
> MODULE_ALIAS("visorbus:" SPAR_VHBA_CHANNEL_PROTOCOL_UUID_STR);
> 
> with a loud /* FIXME before submitting ... */ warning a better approach?
> 
> Thanks,
> 
> P.
> 
> ---8<---
> 
> drivers/staging: visorbus, add module autoload functionality
> 
> This patch adds module autoload functionality to the visorbus bus drivers
> (currently only visornic is in tree).  This patch adds visorbus alias
> creation entries to modpost, and moves the appropriate structure define
> into include/linux/mod_devicetable.h.
> 
> Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
> ---
>  drivers/staging/unisys/include/visorbus.h       |  8 --------
>  drivers/staging/unisys/visorbus/visorbus_main.c |  1 +
>  include/linux/mod_devicetable.h                 | 11 +++++++++++
>  scripts/mod/devicetable-offsets.c               |  4 ++++
>  scripts/mod/file2alias.c                        | 11 +++++++++++
>  5 files changed, 27 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/staging/unisys/include/visorbus.h b/drivers/staging/unisys/include/visorbus.h
> index a0144c6..35da159 100644
> --- a/drivers/staging/unisys/include/visorbus.h
> +++ b/drivers/staging/unisys/include/visorbus.h
> @@ -53,14 +53,6 @@ struct visorchipset_state {
>  	/* Remaining bits in this 32-bit word are unused. */
>  };
>  
> -/** This struct describes a specific Supervisor channel, by providing its
> - *  GUID, name, and sizes.
> - */
> -struct visor_channeltype_descriptor {
> -	const uuid_le guid;
> -	const char *name;
> -};
> -
>  /** Information provided by each visor driver when it registers with the
>   *  visorbus driver.
>   */
> diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c b/drivers/staging/unisys/visorbus/visorbus_main.c
> index cc4a029..fcb491a 100644
> --- a/drivers/staging/unisys/visorbus/visorbus_main.c
> +++ b/drivers/staging/unisys/visorbus/visorbus_main.c
> @@ -15,6 +15,7 @@
>   */
>  
>  #include <linux/uuid.h>
> +#include <linux/mod_devicetable.h>
>  
>  #include "visorbus.h"
>  #include "visorbus_private.h"
> diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
> index 34f25b7..acb70ed 100644
> --- a/include/linux/mod_devicetable.h
> +++ b/include/linux/mod_devicetable.h
> @@ -650,4 +650,15 @@ struct ulpi_device_id {
>  	kernel_ulong_t driver_data;
>  };
>  
> +/**
> + * struct visor_channeltype_descriptor - VISORBUS Channel Type Descriptor
> + * @guid: UUID for the channel
> + * @name: name of the channel
> + *
> + * describes a specific Supervisor channel, by providing its * GUID and name.
> + */
> +struct visor_channeltype_descriptor {
> +	uuid_le guid;
> +	char *name;
> +};
>  #endif /* LINUX_MOD_DEVICETABLE_H */
> diff --git a/scripts/mod/devicetable-offsets.c b/scripts/mod/devicetable-offsets.c
> index e70fcd1..4b8797b 100644
> --- a/scripts/mod/devicetable-offsets.c
> +++ b/scripts/mod/devicetable-offsets.c
> @@ -196,5 +196,9 @@ int main(void)
>  	DEVID_FIELD(ulpi_device_id, vendor);
>  	DEVID_FIELD(ulpi_device_id, product);
>  
> +	DEVID(visor_channeltype_descriptor);
> +	DEVID_FIELD(visor_channeltype_descriptor, guid);
> +	DEVID_FIELD(visor_channeltype_descriptor, name);
> +
>  	return 0;
>  }
> diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> index 5f20882..e90374ba 100644
> --- a/scripts/mod/file2alias.c
> +++ b/scripts/mod/file2alias.c
> @@ -1250,6 +1250,17 @@ static int do_ulpi_entry(const char *filename, void *symval,
>  }
>  ADD_TO_DEVTABLE("ulpi", ulpi_device_id, do_ulpi_entry);
>  
> +static int do_visorbus_entry(const char *filename, void *symval, char *alias)
> +{
> +	DEF_FIELD_ADDR(symval, visor_channeltype_descriptor, guid);
> +
> +	sprintf(alias, "visorbus:");
> +	add_uuid(alias, *guid);
> +
> +	return 1;
> +}
> +ADD_TO_DEVTABLE("visorbus", visor_channeltype_descriptor, do_visorbus_entry);
> +
>  /* Does namelen bytes of name exactly match the symbol? */
>  static bool sym_is(const char *name, unsigned namelen, const char *symbol)
>  {
> 
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux