[PATCH v6 07/15] staging: gpib: fmh: Handle gpib_register_driver() errors

Nihar Chaithanya posted 15 patches 1 year, 1 month ago
[PATCH v6 07/15] staging: gpib: fmh: Handle gpib_register_driver() errors
Posted by Nihar Chaithanya 1 year, 1 month ago
The function gpib_register_driver() can fail, resulting in a
semi-registered module and does not return an error value if it
fails.

Unregister the previous platform driver, pci and gpib registering
functions if subsequent gpib_register_driver() fail and return the
error value. Add pr_err() statements indicating the fail and also the
error value.

Signed-off-by: Nihar Chaithanya <niharchaithanya@gmail.com>
---
 drivers/staging/gpib/fmh_gpib/fmh_gpib.c | 47 ++++++++++++++++++++----
 1 file changed, 39 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/gpib/fmh_gpib/fmh_gpib.c b/drivers/staging/gpib/fmh_gpib/fmh_gpib.c
index 62791db1c34a..90108ce0304a 100644
--- a/drivers/staging/gpib/fmh_gpib/fmh_gpib.c
+++ b/drivers/staging/gpib/fmh_gpib/fmh_gpib.c
@@ -1691,23 +1691,54 @@ static int __init fmh_gpib_init_module(void)
 
 	result = platform_driver_register(&fmh_gpib_platform_driver);
 	if (result) {
-		pr_err("fmh_gpib: platform_driver_register failed!\n");
+		pr_err("fmh_gpib: platform_driver_register failed: error = %d\n", result);
 		return result;
 	}
 
 	result = pci_register_driver(&fmh_gpib_pci_driver);
 	if (result) {
-		pr_err("fmh_gpib: pci_driver_register failed!\n");
-		return result;
+		pr_err("fmh_gpib: pci_register_driver failed: error = %d\n", result);
+		goto err_pci_driver;
+	}
+
+	result = gpib_register_driver(&fmh_gpib_unaccel_interface, THIS_MODULE);
+	if (result) {
+		pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result);
+		goto err_unaccel;
+	}
+
+	result = gpib_register_driver(&fmh_gpib_interface, THIS_MODULE);
+	if (result) {
+		pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result);
+		goto err_interface;
 	}
 
-	gpib_register_driver(&fmh_gpib_unaccel_interface, THIS_MODULE);
-	gpib_register_driver(&fmh_gpib_interface, THIS_MODULE);
-	gpib_register_driver(&fmh_gpib_pci_unaccel_interface, THIS_MODULE);
-	gpib_register_driver(&fmh_gpib_pci_interface, THIS_MODULE);
+	result = gpib_register_driver(&fmh_gpib_pci_unaccel_interface, THIS_MODULE);
+	if (result) {
+		pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result);
+		goto err_pci_unaccel;
+	}
+
+	result = gpib_register_driver(&fmh_gpib_pci_interface, THIS_MODULE);
+	if (result) {
+		pr_err("fmh_gpib: gpib_register_driver failed: error = %d\n", result);
+		goto err_pci;
+	}
 
-	pr_info("fmh_gpib\n");
 	return 0;
+
+err_pci:
+	gpib_unregister_driver(&fmh_gpib_pci_unaccel_interface);
+err_pci_unaccel:
+	gpib_unregister_driver(&fmh_gpib_interface);
+err_interface:
+	gpib_unregister_driver(&fmh_gpib_unaccel_interface);
+err_unaccel:
+	pci_unregister_driver(&fmh_gpib_pci_driver);
+err_pci_driver:
+	platform_driver_unregister(&fmh_gpib_platform_driver);
+
+	return result;
 }
 
 static void __exit fmh_gpib_exit_module(void)
-- 
2.34.1
Re: [PATCH v6 07/15] staging: gpib: fmh: Handle gpib_register_driver() errors
Posted by kernel test robot 1 year, 1 month ago
Hi Nihar,

kernel test robot noticed the following build errors:

[auto build test ERROR on staging/staging-testing]

url:    https://github.com/intel-lab-lkp/linux/commits/Nihar-Chaithanya/staging-gpib-Modify-gpib_register_driver-to-return-error-if-it-fails/20241231-031406
base:   staging/staging-testing
patch link:    https://lore.kernel.org/r/20241230185633.175690-8-niharchaithanya%40gmail.com
patch subject: [PATCH v6 07/15] staging: gpib: fmh: Handle gpib_register_driver() errors
config: xtensa-randconfig-001-20241231 (https://download.01.org/0day-ci/archive/20241231/202412311213.Dcj8Nucn-lkp@intel.com/config)
compiler: xtensa-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241231/202412311213.Dcj8Nucn-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202412311213.Dcj8Nucn-lkp@intel.com/

All errors (new ones prefixed by >>):

   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x38): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x40): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x48): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x50): undefined reference to `gpib_register_driver'
>> xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x58): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x5c): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.init.literal+0x60): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `lacs_or_read_ready':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:286:(.text+0x2c4): undefined reference to `nec7210_t1_delay'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_t1_delay':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:262:(.text+0x2de): undefined reference to `nec7210_t1_delay'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:271:(.text+0x318): undefined reference to `nec7210_serial_poll_status'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_serial_poll_status':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:211:(.text+0x328): undefined reference to `nec7210_secondary_address'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_secondary_address':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:133:(.text+0x33c): undefined reference to `nec7210_primary_address'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_primary_address':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:126:(.text+0x34c): undefined reference to `nec7210_update_status'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_update_status':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:119:(.text+0x35c): undefined reference to `nec7210_parallel_poll_response'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_parallel_poll_response':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:154:(.text+0x36c): undefined reference to `nec7210_parallel_poll'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_parallel_poll':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:140:(.text+0x37c): undefined reference to `nec7210_parallel_poll_configure'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_parallel_poll_configure':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:147:(.text+0x390): undefined reference to `nec7210_disable_eos'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_disable_eos':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:112:(.text+0x3a0): undefined reference to `nec7210_enable_eos'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_enable_eos':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:105:(.text+0x3b4): undefined reference to `nec7210_remote_enable'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_remote_enable':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:98:(.text+0x3c4): undefined reference to `nec7210_interface_clear'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_interface_clear':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:91:(.text+0x3d4): undefined reference to `nec7210_request_system_control'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_request_system_control':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:84:(.text+0x3e4): undefined reference to `nec7210_go_to_standby'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_go_to_standby':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:76:(.text+0x3f4): undefined reference to `nec7210_take_control'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_take_control':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:69:(.text+0x404): undefined reference to `nec7210_command'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_command':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:62:(.text+0x41c): undefined reference to `nec7210_write'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_write':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:54:(.text+0x434): undefined reference to `nec7210_read'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `wait_for_read':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:305:(.text+0x668): undefined reference to `gpib_match_device_path'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_device_match':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1370:(.text+0x68a): undefined reference to `gpib_match_device_path'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_return_to_local':
   drivers/staging/gpib/include/nec7210.h:59:(.text+0x808): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_detach':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1512:(.text+0x86a): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_attach_holdoff_end':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1493:(.text+0xc1c): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_pci_detach':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1637:(.text+0xc7e): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1649:(.text+0xd44): undefined reference to `gpib_pci_get_device'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_pci_attach_impl':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1545:(.text+0xd9f): undefined reference to `gpib_pci_get_device'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_all_bytes_are_sent':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:387:(.text+0x1004): undefined reference to `push_gpib_event'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_internal_interrupt':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1166:(.text+0x107f): undefined reference to `push_gpib_event'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_all_bytes_are_sent':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:387:(.text+0x1008): undefined reference to `nec7210_interrupt_have_status'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_internal_interrupt':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1170:(.text+0x1096): undefined reference to `nec7210_interrupt_have_status'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_interrupt':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1251:(.text+0x1244): undefined reference to `nec7210_set_reg_bits'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_dma_callback':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:363:(.text+0x127b): undefined reference to `nec7210_set_reg_bits'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_dma_callback':
   include/linux/spinlock.h:406:(.text+0x1324): undefined reference to `nec7210_set_reg_bits'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_dma_read':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:761:(.text+0x14e4): undefined reference to `nec7210_set_reg_bits'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_dma_callback':
   include/linux/spinlock.h:406:(.text+0x1328): undefined reference to `nec7210_set_reg_bits'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:drivers/staging/gpib/fmh_gpib/fmh_gpib.c:762: more undefined references to `nec7210_set_reg_bits' follow
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_init_module':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1704:(.init.text+0x4b): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1710:(.init.text+0x6b): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1716:(.init.text+0x8b): undefined reference to `gpib_register_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1722:(.init.text+0xab): undefined reference to `gpib_register_driver'
>> xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1731:(.init.text+0xc3): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1733:(.init.text+0xcc): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1735:(.init.text+0xd5): undefined reference to `gpib_unregister_driver'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.text.unlikely+0x0): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_init':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1342:(.text.unlikely+0x3e): undefined reference to `nec7210_board_reset'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.text.unlikely+0x4): undefined reference to `nec7210_set_handshake_mode'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_init':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1344:(.text.unlikely+0x56): undefined reference to `nec7210_set_handshake_mode'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o:(.text.unlikely+0xc): undefined reference to `nec7210_board_online'
   xtensa-linux-ld: drivers/staging/gpib/fmh_gpib/fmh_gpib.o: in function `fmh_gpib_init':
   drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1351:(.text.unlikely+0x87): undefined reference to `nec7210_board_online'

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki