| --- |
| drivers/infiniband/hw/nes/nes.c | 69 +++++++++++++--------------------------- |
| drivers/pci/pci-driver.c | 1 |
| include/linux/pci.h | 1 |
| 3 files changed, 26 insertions(+), 45 deletions(-) |
| |
| --- a/drivers/infiniband/hw/nes/nes.c |
| +++ b/drivers/infiniband/hw/nes/nes.c |
| @@ -809,13 +809,6 @@ static void nes_remove(struct pci_dev *p |
| } |
| |
| |
| -static struct pci_driver nes_pci_driver = { |
| - .name = DRV_NAME, |
| - .id_table = nes_pci_table, |
| - .probe = nes_probe, |
| - .remove = nes_remove, |
| -}; |
| - |
| static ssize_t adapter_show(struct device_driver *ddp, char *buf) |
| { |
| unsigned int devfn = 0xffffffff; |
| @@ -1157,35 +1150,29 @@ static DRIVER_ATTR_RW(idx_addr); |
| static DRIVER_ATTR_RW(idx_data); |
| static DRIVER_ATTR_RW(wqm_quanta); |
| |
| -static int nes_create_driver_sysfs(struct pci_driver *drv) |
| -{ |
| - int error; |
| - error = driver_create_file(&drv->driver, &driver_attr_adapter); |
| - error |= driver_create_file(&drv->driver, &driver_attr_eeprom_cmd); |
| - error |= driver_create_file(&drv->driver, &driver_attr_eeprom_data); |
| - error |= driver_create_file(&drv->driver, &driver_attr_flash_cmd); |
| - error |= driver_create_file(&drv->driver, &driver_attr_flash_data); |
| - error |= driver_create_file(&drv->driver, &driver_attr_nonidx_addr); |
| - error |= driver_create_file(&drv->driver, &driver_attr_nonidx_data); |
| - error |= driver_create_file(&drv->driver, &driver_attr_idx_addr); |
| - error |= driver_create_file(&drv->driver, &driver_attr_idx_data); |
| - error |= driver_create_file(&drv->driver, &driver_attr_wqm_quanta); |
| - return error; |
| -} |
| - |
| -static void nes_remove_driver_sysfs(struct pci_driver *drv) |
| -{ |
| - driver_remove_file(&drv->driver, &driver_attr_adapter); |
| - driver_remove_file(&drv->driver, &driver_attr_eeprom_cmd); |
| - driver_remove_file(&drv->driver, &driver_attr_eeprom_data); |
| - driver_remove_file(&drv->driver, &driver_attr_flash_cmd); |
| - driver_remove_file(&drv->driver, &driver_attr_flash_data); |
| - driver_remove_file(&drv->driver, &driver_attr_nonidx_addr); |
| - driver_remove_file(&drv->driver, &driver_attr_nonidx_data); |
| - driver_remove_file(&drv->driver, &driver_attr_idx_addr); |
| - driver_remove_file(&drv->driver, &driver_attr_idx_data); |
| - driver_remove_file(&drv->driver, &driver_attr_wqm_quanta); |
| -} |
| +static struct attribute *nes_attrs[] = { |
| + &driver_attr_adapter, |
| + &driver_attr_eeprom_cmd, |
| + &driver_attr_eeprom_data, |
| + &driver_attr_flash_cmd, |
| + &driver_attr_flash_data, |
| + &driver_attr_nonidx_addr, |
| + &driver_attr_nonidx_data, |
| + &driver_attr_idx_addr, |
| + &driver_attr_idx_data, |
| + &driver_attr_wqm_quanta, |
| + NULL, |
| +}; |
| +ATTRIBUTE_GROUPS(nes); |
| + |
| +static struct pci_driver nes_pci_driver = { |
| + .name = DRV_NAME, |
| + .id_table = nes_pci_table, |
| + .probe = nes_probe, |
| + .remove = nes_remove, |
| + .groups = nes_groups, |
| +}; |
| + |
| |
| /** |
| * nes_init_module - module initialization entry point |
| @@ -1193,20 +1180,13 @@ static void nes_remove_driver_sysfs(stru |
| static int __init nes_init_module(void) |
| { |
| int retval; |
| - int retval1; |
| |
| retval = nes_cm_start(); |
| if (retval) { |
| printk(KERN_ERR PFX "Unable to start NetEffect iWARP CM.\n"); |
| return retval; |
| } |
| - retval = pci_register_driver(&nes_pci_driver); |
| - if (retval >= 0) { |
| - retval1 = nes_create_driver_sysfs(&nes_pci_driver); |
| - if (retval1 < 0) |
| - printk(KERN_ERR PFX "Unable to create NetEffect sys files.\n"); |
| - } |
| - return retval; |
| + return pci_register_driver(&nes_pci_driver); |
| } |
| |
| |
| @@ -1216,7 +1196,6 @@ static int __init nes_init_module(void) |
| static void __exit nes_exit_module(void) |
| { |
| nes_cm_stop(); |
| - nes_remove_driver_sysfs(&nes_pci_driver); |
| |
| pci_unregister_driver(&nes_pci_driver); |
| } |
| --- a/drivers/pci/pci-driver.c |
| +++ b/drivers/pci/pci-driver.c |
| @@ -1289,6 +1289,7 @@ int __pci_register_driver(struct pci_dri |
| drv->driver.bus = &pci_bus_type; |
| drv->driver.owner = owner; |
| drv->driver.mod_name = mod_name; |
| + drv->driver.groups = drv->groups; |
| |
| spin_lock_init(&drv->dynids.lock); |
| INIT_LIST_HEAD(&drv->dynids.list); |
| --- a/include/linux/pci.h |
| +++ b/include/linux/pci.h |
| @@ -689,6 +689,7 @@ struct pci_driver { |
| void (*shutdown) (struct pci_dev *dev); |
| int (*sriov_configure) (struct pci_dev *dev, int num_vfs); /* PF pdev */ |
| const struct pci_error_handlers *err_handler; |
| + const struct attribute_group **groups; |
| struct device_driver driver; |
| struct pci_dynids dynids; |
| }; |