[PATCH 3/7] staging: comedi: amplc_pci230: Add attach_pci() hook

Ian Abbott abbotti at mev.co.uk
Tue Jun 5 08:10:02 UTC 2012


On 04/06/12 23:39, H Hartley Sweeten wrote:
> On Friday, June 01, 2012 9:32 AM, Ian Abbott wrote:
>> Implement the attach_pci() hook as function pci230_attach_pci().  This
>> is called by comedi_pci_auto_config() in preference to the old attach()
>> hook (implemented by pci230_attach() and still required for "manual"
>> configuration of comedi devices).  The advantage of the attach_pci()
>> hook is that it avoids searching for the PCI device.
>>
>> Refactor pci230_attach() and factor out code common to pci230_attach()
>> and pci230_attach_pci() into new functions pci230_match_pci_board(),
>> pci230_find_pci_board(), pci230_find_pci(), pci230_alloc_private() and
>> pci230_attach_common().
>>
>> Finally, move pci230_attach() and pci230_detach() along with all the new
>> functions towards the bottom of the file as it makes the patch much
>> cleaner (though longer) and I plan to move things around soon to get
>> rid of the remaining forward references.
>>
>> Signed-off-by: Ian Abbott<abbotti at mev.co.uk>
>> ---
>>   drivers/staging/comedi/drivers/amplc_pci230.c |  578 +++++++++++++------------
>>   1 files changed, 301 insertions(+), 277 deletions(-)
>
> <snip>
>
>> +static int __devinit pci230_attach_pci(struct comedi_device *dev,
>> +				       struct pci_dev *pci_dev)
>
> This function should not be tagged '__devinit'.

I disagree.

> <snip>
>
>> static struct comedi_driver amplc_pci230_driver = {
>>   	.driver_name	= "amplc_pci230",
>>   	.module		= THIS_MODULE,
>>   	.attach		= pci230_attach,
>> +	.attach_pci	= pci230_attach_pci,
>>   	.detach		= pci230_detach,
>>   	.board_name	=&pci230_boards[0].name,
>>   	.offset		= sizeof(pci230_boards[0]),
>
> This comedi_driver structure is going to exist until comedi_driver_unregister
> is called to remove it from the global comedi_drivers pool. All the data in this
> structure needs to remain valid while it exists.

And so it does. Compare the 'probe' member of a statically initialized 
variable of type 'struct pci_driver', for example. That points to a 
function tagged '__devinit'.

-- 
-=( Ian Abbott @ MEV Ltd.    E-mail: <abbotti at mev.co.uk>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-



More information about the devel mailing list