Skip to content

Commit 30522a9

Browse files
vdsaogregkh
authored andcommitted
fpga: altera-cvp: fix probing for multiple FPGAs on the bus
Currently registering CvP managers works only for first probed CvP device, for all other devices it is refused due to duplicated chkcfg sysfs entry: fpga_manager fpga3: Altera CvP FPGA Manager @0000:0c:00.0 registered sysfs: cannot create duplicate filename '/bus/pci/drivers/altera-cvp/chkcfg' CPU: 0 PID: 3808 Comm: bash Tainted: G O 4.19.0-custom+ #5 Call Trace: dump_stack+0x46/0x5b sysfs_warn_dup+0x53/0x60 sysfs_add_file_mode_ns+0x16d/0x180 sysfs_create_file_ns+0x51/0x60 altera_cvp_probe+0x16f/0x2a0 [altera_cvp] local_pci_probe+0x3f/0xa0 ? pci_match_device+0xb1/0xf0 pci_device_probe+0x116/0x170 really_probe+0x21b/0x2c0 driver_probe_device+0x4b/0xe0 bind_store+0xcb/0x130 kernfs_fop_write+0xfd/0x180 __vfs_write+0x21/0x150 ? selinux_file_permission+0xdc/0x130 vfs_write+0xa8/0x1a0 ? find_vma+0xd/0x60 ksys_write+0x3d/0x90 do_syscall_64+0x44/0xf0 entry_SYSCALL_64_after_hwframe+0x44/0xa9 ... altera-cvp 0000:0c:00.0: Can't create sysfs chkcfg file fpga_manager fpga3: fpga_mgr_unregister Altera CvP FPGA Manager @0000:0c:00.0 Move chkcfg creation to module init as suggested by Alan. Signed-off-by: Anatolij Gustschin <[email protected]> Acked-by: Alan Tull <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 324fa64 commit 30522a9

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

drivers/fpga/altera-cvp.c

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -475,14 +475,6 @@ static int altera_cvp_probe(struct pci_dev *pdev,
475475
if (ret)
476476
goto err_unmap;
477477

478-
ret = driver_create_file(&altera_cvp_driver.driver,
479-
&driver_attr_chkcfg);
480-
if (ret) {
481-
dev_err(&pdev->dev, "Can't create sysfs chkcfg file\n");
482-
fpga_mgr_unregister(mgr);
483-
goto err_unmap;
484-
}
485-
486478
return 0;
487479

488480
err_unmap:
@@ -501,7 +493,6 @@ static void altera_cvp_remove(struct pci_dev *pdev)
501493
struct altera_cvp_conf *conf = mgr->priv;
502494
u16 cmd;
503495

504-
driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
505496
fpga_mgr_unregister(mgr);
506497
if (conf->map)
507498
pci_iounmap(pdev, conf->map);
@@ -511,7 +502,30 @@ static void altera_cvp_remove(struct pci_dev *pdev)
511502
pci_write_config_word(pdev, PCI_COMMAND, cmd);
512503
}
513504

514-
module_pci_driver(altera_cvp_driver);
505+
static int __init altera_cvp_init(void)
506+
{
507+
int ret;
508+
509+
ret = pci_register_driver(&altera_cvp_driver);
510+
if (ret)
511+
return ret;
512+
513+
ret = driver_create_file(&altera_cvp_driver.driver,
514+
&driver_attr_chkcfg);
515+
if (ret)
516+
pr_warn("Can't create sysfs chkcfg file\n");
517+
518+
return 0;
519+
}
520+
521+
static void __exit altera_cvp_exit(void)
522+
{
523+
driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
524+
pci_unregister_driver(&altera_cvp_driver);
525+
}
526+
527+
module_init(altera_cvp_init);
528+
module_exit(altera_cvp_exit);
515529

516530
MODULE_LICENSE("GPL v2");
517531
MODULE_AUTHOR("Anatolij Gustschin <[email protected]>");

0 commit comments

Comments
 (0)