History

atm: correct sysfs 'device' link creation and parent relationships

The ATM subsystem was incorrectly creating the 'device' link for ATM nodes in sysfs. This led to incorrect device/parent relationships exposed by sysfs and udev. Instead of rolling the 'device' link by hand in the generic ATM code, pass each ATM driver's bus device down to the sysfs code and let sysfs do this stuff correctly.

Dan Williams committed 15 years ago

Commit d9ca6761 parent fb890ae19 files · +41 −42Browse files

Unified · Split

19 files
  1. drivers/atm/adummy.c +1 −1
  2. drivers/atm/ambassador.c +2 −1
  3. drivers/atm/atmtcp.c +1 −1
  4. drivers/atm/eni.c +1 −1
  5. drivers/atm/firestream.c +1 −1
  6. drivers/atm/fore200e.c +7 −7
  7. drivers/atm/he.c +1 −1
  8. drivers/atm/horizon.c +2 −1
  9. drivers/atm/idt77252.c +2 −1
  10. drivers/atm/iphase.c +1 −1
  11. drivers/atm/lanai.c +1 −1
  12. drivers/atm/nicstar.c +2 −1
  13. drivers/atm/solos-pci.c +4 −4
  14. drivers/atm/zatm.c +1 −1
  15. drivers/usb/atm/usbatm.c +3 −12
  16. include/linux/atmdev.h +4 −2
  17. net/atm/atm_sysfs.c +2 −1
  18. net/atm/resources.c +4 −3
  19. net/atm/resources.h +1 −1
drivers/atm/adummy.c+1−1
@@ -154,7 +154,7 @@ static int __init adummy_init(void) · 153 unmodified lines
154154 err = -ENOMEM;
155155 goto out;
156156 }
157− atm_dev = atm_dev_register(DEV_LABEL, &adummy_ops, -1, NULL);
157+ atm_dev = atm_dev_register(DEV_LABEL, NULL, &adummy_ops, -1, NULL);
158158 if (!atm_dev) {
159159 printk(KERN_ERR DEV_LABEL ": atm_dev_register() failed\n");
160160 err = -ENODEV;
drivers/atm/ambassador.c+2−1
@@ -2244,7 +2244,8 @@ static int __devinit amb_probe(struct pci_dev *pci_dev, const struct pci_device_ · 2243 unmodified lines
22442244 goto out_reset;
22452245 }
22462246
2247− dev->atm_dev = atm_dev_register (DEV_LABEL, &amb_ops, -1, NULL);
2247+ dev->atm_dev = atm_dev_register (DEV_LABEL, &pci_dev->dev, &amb_ops, -1,
2248+ NULL);
22482249 if (!dev->atm_dev) {
22492250 PRINTD (DBG_ERR, "failed to register Madge ATM adapter");
22502251 err = -EINVAL;
drivers/atm/atmtcp.c+1−1
@@ -366,7 +366,7 @@ static int atmtcp_create(int itf,int persist,struct atm_dev **result) · 365 unmodified lines
366366 if (!dev_data)
367367 return -ENOMEM;
368368
369− dev = atm_dev_register(DEV_LABEL,&atmtcp_v_dev_ops,itf,NULL);
369+ dev = atm_dev_register(DEV_LABEL,NULL,&atmtcp_v_dev_ops,itf,NULL);
370370 if (!dev) {
371371 kfree(dev_data);
372372 return itf == -1 ? -ENOMEM : -EBUSY;
drivers/atm/eni.c+1−1
@@ -2244,7 +2244,7 @@ static int __devinit eni_init_one(struct pci_dev *pci_dev, · 2243 unmodified lines
22442244 &zeroes);
22452245 if (!cpu_zeroes) goto out1;
22462246 }
2247− dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL);
2247+ dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
22482248 if (!dev) goto out2;
22492249 pci_set_drvdata(pci_dev, dev);
22502250 eni_dev->pci_dev = pci_dev;
drivers/atm/firestream.c+1−1
@@ -1911,7 +1911,7 @@ static int __devinit firestream_init_one (struct pci_dev *pci_dev, · 1910 unmodified lines
19111911 fs_dev, sizeof (struct fs_dev));
19121912 if (!fs_dev)
19131913 goto err_out;
1914− atm_dev = atm_dev_register("fs", &ops, -1, NULL);
1914+ atm_dev = atm_dev_register("fs", &pci_dev->dev, &ops, -1, NULL);
19151915 if (!atm_dev)
19161916 goto err_out_free_fs_dev;
19171917
drivers/atm/fore200e.c+7−7
@@ -2567,14 +2567,14 @@ release: · 2566 unmodified lines
25672567
25682568
25692569 static int __devinit
2570−fore200e_register(struct fore200e* fore200e)
2570+fore200e_register(struct fore200e* fore200e, struct device *parent)
25712571 {
25722572 struct atm_dev* atm_dev;
25732573
25742574 DPRINTK(2, "device %s being registered\n", fore200e->name);
25752575
2576− atm_dev = atm_dev_register(fore200e->bus->proc_name, &fore200e_ops, -1,
2577− NULL);
2576+ atm_dev = atm_dev_register(fore200e->bus->proc_name, parent, &fore200e_ops,
2577+ -1, NULL);
25782578 if (atm_dev == NULL) {
25792579 printk(FORE200E "unable to register device %s\n", fore200e->name);
25802580 return -ENODEV;
@@ -2594,9 +2594,9 @@ fore200e_register(struct fore200e* fore200e) · 13 unmodified lines
25942594
25952595
25962596 static int __devinit
2597−fore200e_init(struct fore200e* fore200e)
2597+fore200e_init(struct fore200e* fore200e, struct device *parent)
25982598 {
2599− if (fore200e_register(fore200e) < 0)
2599+ if (fore200e_register(fore200e, parent) < 0)
26002600 return -ENODEV;
26012601
26022602 if (fore200e->bus->configure(fore200e) < 0)
@@ -2662,7 +2662,7 @@ static int __devinit fore200e_sba_probe(struct platform_device *op, · 59 unmodified lines
26622662
26632663 sprintf(fore200e->name, "%s-%d", bus->model_name, index);
26642664
2665− err = fore200e_init(fore200e);
2665+ err = fore200e_init(fore200e, &op->dev);
26662666 if (err < 0) {
26672667 fore200e_shutdown(fore200e);
26682668 kfree(fore200e);
@@ -2740,7 +2740,7 @@ fore200e_pca_detect(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent · 71 unmodified lines
27402740
27412741 sprintf(fore200e->name, "%s-%d", bus->model_name, index);
27422742
2743− err = fore200e_init(fore200e);
2743+ err = fore200e_init(fore200e, &pci_dev->dev);
27442744 if (err < 0) {
27452745 fore200e_shutdown(fore200e);
27462746 goto out_free;
drivers/atm/he.c+1−1
@@ -366,7 +366,7 @@ he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent) · 365 unmodified lines
366366 goto init_one_failure;
367367 }
368368
369− atm_dev = atm_dev_register(DEV_LABEL, &he_ops, -1, NULL);
369+ atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &he_ops, -1, NULL);
370370 if (!atm_dev) {
371371 err = -ENODEV;
372372 goto init_one_failure;
drivers/atm/horizon.c+2−1
@@ -2733,7 +2733,8 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_ · 2732 unmodified lines
27332733 PRINTD(DBG_INFO, "found Madge ATM adapter (hrz) at: IO %x, IRQ %u, MEM %p",
27342734 iobase, irq, membase);
27352735
2736− dev->atm_dev = atm_dev_register(DEV_LABEL, &hrz_ops, -1, NULL);
2736+ dev->atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &hrz_ops, -1,
2737+ NULL);
27372738 if (!(dev->atm_dev)) {
27382739 PRINTD(DBG_ERR, "failed to register Madge ATM adapter");
27392740 err = -EINVAL;
drivers/atm/idt77252.c+2−1
@@ -3698,7 +3698,8 @@ idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id) · 3697 unmodified lines
36983698 goto err_out_iounmap;
36993699 }
37003700
3701− dev = atm_dev_register("idt77252", &idt77252_ops, -1, NULL);
3701+ dev = atm_dev_register("idt77252", &pcidev->dev, &idt77252_ops, -1,
3702+ NULL);
37023703 if (!dev) {
37033704 printk("%s: can't register atm device\n", card->name);
37043705 err = -EIO;
drivers/atm/iphase.c+1−1
@@ -3172,7 +3172,7 @@ static int __devinit ia_init_one(struct pci_dev *pdev, · 3171 unmodified lines
31723172 ret = -ENODEV;
31733173 goto err_out_free_iadev;
31743174 }
3175− dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
3175+ dev = atm_dev_register(DEV_LABEL, &pdev->dev, &ops, -1, NULL);
31763176 if (!dev) {
31773177 ret = -ENOMEM;
31783178 goto err_out_disable_dev;
drivers/atm/lanai.c+1−1
@@ -2591,7 +2591,7 @@ static int __devinit lanai_init_one(struct pci_dev *pci, · 2590 unmodified lines
25912591 return -ENOMEM;
25922592 }
25932593
2594− atmdev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
2594+ atmdev = atm_dev_register(DEV_LABEL, &pci->dev, &ops, -1, NULL);
25952595 if (atmdev == NULL) {
25962596 printk(KERN_ERR DEV_LABEL
25972597 ": couldn't register atm device!\n");
drivers/atm/nicstar.c+2−1
@@ -771,7 +771,8 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev) · 770 unmodified lines
771771 }
772772
773773 /* Register device */
774− card->atmdev = atm_dev_register("nicstar", &atm_ops, -1, NULL);
774+ card->atmdev = atm_dev_register("nicstar", &card->pcidev->dev, &atm_ops,
775+ -1, NULL);
775776 if (card->atmdev == NULL) {
776777 printk("nicstar%d: can't register device.\n", i);
777778 error = 17;
drivers/atm/solos-pci.c+4−4
@@ -166,7 +166,7 @@ static irqreturn_t solos_irq(int irq, void *dev_id); · 165 unmodified lines
166166 static struct atm_vcc* find_vcc(struct atm_dev *dev, short vpi, int vci);
167167 static int list_vccs(int vci);
168168 static void release_vccs(struct atm_dev *dev);
169−static int atm_init(struct solos_card *);
169+static int atm_init(struct solos_card *, struct device *);
170170 static void atm_remove(struct solos_card *);
171171 static int send_command(struct solos_card *card, int dev, const char *buf, size_t size);
172172 static void solos_bh(unsigned long);
@@ -1210,7 +1210,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) · 1037 unmodified lines
12101210 if (db_firmware_upgrade)
12111211 flash_upgrade(card, 3);
12121212
1213− err = atm_init(card);
1213+ err = atm_init(card, &dev->dev);
12141214 if (err)
12151215 goto out_free_irq;
12161216
@@ -1233,7 +1233,7 @@ static int fpga_probe(struct pci_dev *dev, const struct pci_device_id *id) · 16 unmodified lines
12331233 return err;
12341234 }
12351235
1236−static int atm_init(struct solos_card *card)
1236+static int atm_init(struct solos_card *card, struct device *parent)
12371237 {
12381238 int i;
12391239
@@ -1244,7 +1244,7 @@ static int atm_init(struct solos_card *card) · 4 unmodified lines
12441244 skb_queue_head_init(&card->tx_queue[i]);
12451245 skb_queue_head_init(&card->cli_queue[i]);
12461246
1247− card->atmdev[i] = atm_dev_register("solos-pci", &fpga_ops, -1, NULL);
1247+ card->atmdev[i] = atm_dev_register("solos-pci", parent, &fpga_ops, -1, NULL);
12481248 if (!card->atmdev[i]) {
12491249 dev_err(&card->dev->dev, "Could not register ATM device %d\n", i);
12501250 atm_remove(card);
drivers/atm/zatm.c+1−1
@@ -1597,7 +1597,7 @@ static int __devinit zatm_init_one(struct pci_dev *pci_dev, · 1596 unmodified lines
15971597 goto out;
15981598 }
15991599
1600− dev = atm_dev_register(DEV_LABEL, &ops, -1, NULL);
1600+ dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &ops, -1, NULL);
16011601 if (!dev)
16021602 goto out_free;
16031603
drivers/usb/atm/usbatm.c+3−12
@@ -951,7 +951,9 @@ static int usbatm_atm_init(struct usbatm_data *instance) · 950 unmodified lines
951951 * condition: callbacks we register can be executed at once, before we have
952952 * initialized the struct atm_dev. To protect against this, all callbacks
953953 * abort if atm_dev->dev_data is NULL. */
954− atm_dev = atm_dev_register(instance->driver_name, &usbatm_atm_devops, -1, NULL);
954+ atm_dev = atm_dev_register(instance->driver_name,
955+ &instance->usb_intf->dev, &usbatm_atm_devops,
956+ -1, NULL);
955957 if (!atm_dev) {
956958 usb_err(instance, "%s: failed to register ATM device!\n", __func__);
957959 return -1;
@@ -966,14 +968,6 @@ static int usbatm_atm_init(struct usbatm_data *instance) · 8 unmodified lines
966968 /* temp init ATM device, set to 128kbit */
967969 atm_dev->link_rate = 128 * 1000 / 424;
968970
969− ret = sysfs_create_link(&atm_dev->class_dev.kobj,
970− &instance->usb_intf->dev.kobj, "device");
971− if (ret) {
972− atm_err(instance, "%s: sysfs_create_link failed: %d\n",
973− __func__, ret);
974− goto fail_sysfs;
975− }
976−
977971 if (instance->driver->atm_start && ((ret = instance->driver->atm_start(instance, atm_dev)) < 0)) {
978972 atm_err(instance, "%s: atm_start failed: %d!\n", __func__, ret);
979973 goto fail;
@@ -992,8 +986,6 @@ static int usbatm_atm_init(struct usbatm_data *instance) · 12 unmodified lines
992986 return 0;
993987
994988 fail:
995− sysfs_remove_link(&atm_dev->class_dev.kobj, "device");
996− fail_sysfs:
997989 instance->atm_dev = NULL;
998990 atm_dev_deregister(atm_dev); /* usbatm_atm_dev_close will eventually be called */
999991 return ret;
@@ -1329,7 +1321,6 @@ void usbatm_usb_disconnect(struct usb_interface *intf) · 329 unmodified lines
13291321
13301322 /* ATM finalize */
13311323 if (instance->atm_dev) {
1332− sysfs_remove_link(&instance->atm_dev->class_dev.kobj, "device");
13331324 atm_dev_deregister(instance->atm_dev);
13341325 instance->atm_dev = NULL;
13351326 }
include/linux/atmdev.h+4−2
@@ -427,8 +427,10 @@ extern rwlock_t vcc_sklist_lock; · 426 unmodified lines
427427
428428 #define ATM_SKB(skb) (((struct atm_skb_data *) (skb)->cb))
429429
430−struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
431− int number,unsigned long *flags); /* number == -1: pick first available */
430+struct atm_dev *atm_dev_register(const char *type, struct device *parent,
431+ const struct atmdev_ops *ops,
432+ int number, /* -1 == pick first available */
433+ unsigned long *flags);
432434 struct atm_dev *atm_dev_lookup(int number);
433435 void atm_dev_deregister(struct atm_dev *dev);
434436
net/atm/atm_sysfs.c+2−1
@@ -143,12 +143,13 @@ static struct class atm_class = { · 142 unmodified lines
143143 .dev_uevent = atm_uevent,
144144 };
145145
146−int atm_register_sysfs(struct atm_dev *adev)
146+int atm_register_sysfs(struct atm_dev *adev, struct device *parent)
147147 {
148148 struct device *cdev = &adev->class_dev;
149149 int i, j, err;
150150
151151 cdev->class = &atm_class;
152+ cdev->parent = parent;
152153 dev_set_drvdata(cdev, adev);
153154
154155 dev_set_name(cdev, "%s%d", adev->type, adev->number);
net/atm/resources.c+4−3
@@ -74,8 +74,9 @@ struct atm_dev *atm_dev_lookup(int number) · 73 unmodified lines
7474 }
7575 EXPORT_SYMBOL(atm_dev_lookup);
7676
77−struct atm_dev *atm_dev_register(const char *type, const struct atmdev_ops *ops,
78− int number, unsigned long *flags)
77+struct atm_dev *atm_dev_register(const char *type, struct device *parent,
78+ const struct atmdev_ops *ops, int number,
79+ unsigned long *flags)
7980 {
8081 struct atm_dev *dev, *inuse;
8182
@@ -115,7 +116,7 @@ struct atm_dev *atm_dev_register(const char *type, const struct atmdev_ops *ops, · 33 unmodified lines
115116 goto out_fail;
116117 }
117118
118− if (atm_register_sysfs(dev) < 0) {
119+ if (atm_register_sysfs(dev, parent) < 0) {
119120 pr_err("atm_register_sysfs failed for dev %s\n", type);
120121 atm_proc_dev_deregister(dev);
121122 goto out_fail;
net/atm/resources.h+1−1
@@ -42,6 +42,6 @@ static inline void atm_proc_dev_deregister(struct atm_dev *dev) · 41 unmodified lines
4242
4343 #endif /* CONFIG_PROC_FS */
4444
45−int atm_register_sysfs(struct atm_dev *adev);
45+int atm_register_sysfs(struct atm_dev *adev, struct device *parent);
4646 void atm_unregister_sysfs(struct atm_dev *adev);
4747 #endif