Skip to content

Commit 65aff9b

Browse files
niharcygregkh
authored andcommitted
staging: gpib: cb7210: Handle gpib_register_driver() errors
The function cb_pcmcia_init_module() can be replaced by calling pcmcia_register_driver() directly. The error value from this function is not returned and the previous registering functions are not unregistered. The function gpib_register_driver() can fail and similar to pcmcia_register_driver() function failing, the previous registering functions are not unregistered. Replace cb_pcmcia_init_module() with pcmcia_register_driver(). Unregister the gpib and pci register functions if the subsequent gpib or pcmcia register functions fail and return the error value. Add pr_err() statements to indicate the fail and also the error value. Signed-off-by: Nihar Chaithanya <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 9e43ebc commit 65aff9b

File tree

1 file changed

+90
-26
lines changed

1 file changed

+90
-26
lines changed

drivers/staging/gpib/cb7210/cb7210.c

Lines changed: 90 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,12 +1351,6 @@ static struct pcmcia_driver cb_gpib_cs_driver = {
13511351
.resume = cb_gpib_resume,
13521352
};
13531353

1354-
int cb_pcmcia_init_module(void)
1355-
{
1356-
pcmcia_register_driver(&cb_gpib_cs_driver);
1357-
return 0;
1358-
}
1359-
13601354
void cb_pcmcia_cleanup_module(void)
13611355
{
13621356
DEBUG(0, "cb_gpib_cs: unloading\n");
@@ -1506,32 +1500,102 @@ void cb_pcmcia_detach(gpib_board_t *board)
15061500

15071501
static int __init cb7210_init_module(void)
15081502
{
1509-
int err = 0;
1510-
int result;
1503+
int ret;
1504+
1505+
ret = pci_register_driver(&cb7210_pci_driver);
1506+
if (ret) {
1507+
pr_err("cb7210: pci_register_driver failed: error = %d\n", ret);
1508+
return ret;
1509+
}
1510+
1511+
ret = gpib_register_driver(&cb_pci_interface, THIS_MODULE);
1512+
if (ret) {
1513+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1514+
goto err_pci;
1515+
}
1516+
1517+
ret = gpib_register_driver(&cb_isa_interface, THIS_MODULE);
1518+
if (ret) {
1519+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1520+
goto err_isa;
1521+
}
15111522

1512-
result = pci_register_driver(&cb7210_pci_driver);
1513-
if (result) {
1514-
pr_err("cb7210: pci_driver_register failed!\n");
1515-
return result;
1523+
ret = gpib_register_driver(&cb_pci_accel_interface, THIS_MODULE);
1524+
if (ret) {
1525+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1526+
goto err_pci_accel;
15161527
}
15171528

1518-
gpib_register_driver(&cb_pci_interface, THIS_MODULE);
1519-
gpib_register_driver(&cb_isa_interface, THIS_MODULE);
1520-
gpib_register_driver(&cb_pci_accel_interface, THIS_MODULE);
1521-
gpib_register_driver(&cb_pci_unaccel_interface, THIS_MODULE);
1522-
gpib_register_driver(&cb_isa_accel_interface, THIS_MODULE);
1523-
gpib_register_driver(&cb_isa_unaccel_interface, THIS_MODULE);
1524-
1525-
#ifdef GPIB__PCMCIA
1526-
gpib_register_driver(&cb_pcmcia_interface, THIS_MODULE);
1527-
gpib_register_driver(&cb_pcmcia_accel_interface, THIS_MODULE);
1528-
gpib_register_driver(&cb_pcmcia_unaccel_interface, THIS_MODULE);
1529-
err += cb_pcmcia_init_module();
1529+
ret = gpib_register_driver(&cb_pci_unaccel_interface, THIS_MODULE);
1530+
if (ret) {
1531+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1532+
goto err_pci_unaccel;
1533+
}
1534+
1535+
ret = gpib_register_driver(&cb_isa_accel_interface, THIS_MODULE);
1536+
if (ret) {
1537+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1538+
goto err_isa_accel;
1539+
}
1540+
1541+
ret = gpib_register_driver(&cb_isa_unaccel_interface, THIS_MODULE);
1542+
if (ret) {
1543+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1544+
goto err_isa_unaccel;
1545+
}
1546+
1547+
#ifdef GPIB_PCMCIA
1548+
ret = gpib_register_driver(&cb_pcmcia_interface, THIS_MODULE);
1549+
if (ret) {
1550+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1551+
goto err_pcmcia;
1552+
}
1553+
1554+
ret = gpib_register_driver(&cb_pcmcia_accel_interface, THIS_MODULE);
1555+
if (ret) {
1556+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1557+
goto err_pcmcia_accel;
1558+
}
1559+
1560+
ret = gpib_register_driver(&cb_pcmcia_unaccel_interface, THIS_MODULE);
1561+
if (ret) {
1562+
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
1563+
goto err_pcmcia_unaccel;
1564+
}
1565+
1566+
ret = pcmcia_register_driver(&cb_gpib_cs_driver);
1567+
if (ret) {
1568+
pr_err("cb7210: pcmcia_register_driver failed: error = %d\n", ret);
1569+
goto err_pcmcia_driver;
1570+
}
15301571
#endif
1531-
if (err)
1532-
return -1;
15331572

15341573
return 0;
1574+
1575+
#ifdef GPIB_PCMCIA
1576+
err_pcmcia_driver:
1577+
gpib_unregister_driver(&cb_pcmcia_unaccel_interface);
1578+
err_pcmcia_unaccel:
1579+
gpib_unregister_driver(&cb_pcmcia_accel_interface);
1580+
err_pcmcia_accel:
1581+
gpib_unregister_driver(&cb_pcmcia_interface);
1582+
err_pcmcia:
1583+
#endif
1584+
gpib_unregister_driver(&cb_isa_unaccel_interface);
1585+
err_isa_unaccel:
1586+
gpib_unregister_driver(&cb_isa_accel_interface);
1587+
err_isa_accel:
1588+
gpib_unregister_driver(&cb_pci_unaccel_interface);
1589+
err_pci_unaccel:
1590+
gpib_unregister_driver(&cb_pci_accel_interface);
1591+
err_pci_accel:
1592+
gpib_unregister_driver(&cb_isa_interface);
1593+
err_isa:
1594+
gpib_unregister_driver(&cb_pci_interface);
1595+
err_pci:
1596+
pci_unregister_driver(&cb7210_pci_driver);
1597+
1598+
return ret;
15351599
}
15361600

15371601
static void __exit cb7210_exit_module(void)

0 commit comments

Comments
 (0)