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 <niharchaithanya@gmail.com>
Link: https://lore.kernel.org/r/20241230185633.175690-5-niharchaithanya@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Nihar Chaithanya
2024-12-31 00:26:24 +05:30
committed by Greg Kroah-Hartman
parent 9e43ebc613
commit 65aff9b75b

View File

@@ -1351,12 +1351,6 @@ static struct pcmcia_driver cb_gpib_cs_driver = {
.resume = cb_gpib_resume,
};
int cb_pcmcia_init_module(void)
{
pcmcia_register_driver(&cb_gpib_cs_driver);
return 0;
}
void cb_pcmcia_cleanup_module(void)
{
DEBUG(0, "cb_gpib_cs: unloading\n");
@@ -1506,32 +1500,102 @@ void cb_pcmcia_detach(gpib_board_t *board)
static int __init cb7210_init_module(void)
{
int err = 0;
int result;
int ret;
result = pci_register_driver(&cb7210_pci_driver);
if (result) {
pr_err("cb7210: pci_driver_register failed!\n");
return result;
ret = pci_register_driver(&cb7210_pci_driver);
if (ret) {
pr_err("cb7210: pci_register_driver failed: error = %d\n", ret);
return ret;
}
gpib_register_driver(&cb_pci_interface, THIS_MODULE);
gpib_register_driver(&cb_isa_interface, THIS_MODULE);
gpib_register_driver(&cb_pci_accel_interface, THIS_MODULE);
gpib_register_driver(&cb_pci_unaccel_interface, THIS_MODULE);
gpib_register_driver(&cb_isa_accel_interface, THIS_MODULE);
gpib_register_driver(&cb_isa_unaccel_interface, THIS_MODULE);
ret = gpib_register_driver(&cb_pci_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pci;
}
#ifdef GPIB__PCMCIA
gpib_register_driver(&cb_pcmcia_interface, THIS_MODULE);
gpib_register_driver(&cb_pcmcia_accel_interface, THIS_MODULE);
gpib_register_driver(&cb_pcmcia_unaccel_interface, THIS_MODULE);
err += cb_pcmcia_init_module();
ret = gpib_register_driver(&cb_isa_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_isa;
}
ret = gpib_register_driver(&cb_pci_accel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pci_accel;
}
ret = gpib_register_driver(&cb_pci_unaccel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pci_unaccel;
}
ret = gpib_register_driver(&cb_isa_accel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_isa_accel;
}
ret = gpib_register_driver(&cb_isa_unaccel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_isa_unaccel;
}
#ifdef GPIB_PCMCIA
ret = gpib_register_driver(&cb_pcmcia_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pcmcia;
}
ret = gpib_register_driver(&cb_pcmcia_accel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pcmcia_accel;
}
ret = gpib_register_driver(&cb_pcmcia_unaccel_interface, THIS_MODULE);
if (ret) {
pr_err("cb7210: gpib_register_driver failed: error = %d\n", ret);
goto err_pcmcia_unaccel;
}
ret = pcmcia_register_driver(&cb_gpib_cs_driver);
if (ret) {
pr_err("cb7210: pcmcia_register_driver failed: error = %d\n", ret);
goto err_pcmcia_driver;
}
#endif
if (err)
return -1;
return 0;
#ifdef GPIB_PCMCIA
err_pcmcia_driver:
gpib_unregister_driver(&cb_pcmcia_unaccel_interface);
err_pcmcia_unaccel:
gpib_unregister_driver(&cb_pcmcia_accel_interface);
err_pcmcia_accel:
gpib_unregister_driver(&cb_pcmcia_interface);
err_pcmcia:
#endif
gpib_unregister_driver(&cb_isa_unaccel_interface);
err_isa_unaccel:
gpib_unregister_driver(&cb_isa_accel_interface);
err_isa_accel:
gpib_unregister_driver(&cb_pci_unaccel_interface);
err_pci_unaccel:
gpib_unregister_driver(&cb_pci_accel_interface);
err_pci_accel:
gpib_unregister_driver(&cb_isa_interface);
err_isa:
gpib_unregister_driver(&cb_pci_interface);
err_pci:
pci_unregister_driver(&cb7210_pci_driver);
return ret;
}
static void __exit cb7210_exit_module(void)