Message ID | 20221115091600.74246-1-yuancan@huawei.com (mailing list archive) |
---|---|
State | Deferred, archived |
Headers | show |
Series | [v2] x86/platform/intel/iosf_mbi: Fix error handling in iosf_mbi_init() | expand |
Hi, On 11/15/22 10:16, Yuan Can wrote: > A problem about modprobe iosf_mbi failed is triggered with the following > log given: > > debugfs: Directory 'iosf_sb' with parent '/' already present! > > The reason is that iosf_mbi_init() returns pci_register_driver() > directly without checking its return value, if pci_register_driver() > failed, it returns without removing debugfs, resulting the debugfs of > iosf_sb can never be created later. > > iosf_mbi_init() > iosf_mbi_dbg_init() # create debugfs > pci_register_driver() > driver_register() > bus_add_driver() > priv = kzalloc(...) # OOM happened > # return without remove debugfs and destroy workqueue > > Fix by removing debugfs and iosf_mbi_pm_qos when pci_register_driver() > returns error. > > Fixes: 8dc12f933c9d ("x86/iosf: Add debugfs support") > Fixes: e09db3d241f8 ("x86: baytrail/cherrytrail: Rework and move P-Unit PMIC bus semaphore code") > Signed-off-by: Yuan Can <yuancan@huawei.com> Thanks, patch looks good to me: Reviewed-by: Hans de Goede <hdegoede@redhat.com> Regards, Hans > --- > Changes in v2: > - fix typos in commit msg > - change to the suggested error handling style > arch/x86/platform/intel/iosf_mbi.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/platform/intel/iosf_mbi.c b/arch/x86/platform/intel/iosf_mbi.c > index fdd49d70b437..2d64985c53f9 100644 > --- a/arch/x86/platform/intel/iosf_mbi.c > +++ b/arch/x86/platform/intel/iosf_mbi.c > @@ -545,11 +545,23 @@ static struct pci_driver iosf_mbi_pci_driver = { > > static int __init iosf_mbi_init(void) > { > + int ret; > + > iosf_debugfs_init(); > > cpu_latency_qos_add_request(&iosf_mbi_pm_qos, PM_QOS_DEFAULT_VALUE); > > - return pci_register_driver(&iosf_mbi_pci_driver); > + ret = pci_register_driver(&iosf_mbi_pci_driver); > + if (ret) > + goto err_remove; > + > + return 0; > + > +err_remove: > + cpu_latency_qos_remove_request(&iosf_mbi_pm_qos); > + iosf_debugfs_remove(); > + > + return ret; > } > > static void __exit iosf_mbi_exit(void)
diff --git a/arch/x86/platform/intel/iosf_mbi.c b/arch/x86/platform/intel/iosf_mbi.c index fdd49d70b437..2d64985c53f9 100644 --- a/arch/x86/platform/intel/iosf_mbi.c +++ b/arch/x86/platform/intel/iosf_mbi.c @@ -545,11 +545,23 @@ static struct pci_driver iosf_mbi_pci_driver = { static int __init iosf_mbi_init(void) { + int ret; + iosf_debugfs_init(); cpu_latency_qos_add_request(&iosf_mbi_pm_qos, PM_QOS_DEFAULT_VALUE); - return pci_register_driver(&iosf_mbi_pci_driver); + ret = pci_register_driver(&iosf_mbi_pci_driver); + if (ret) + goto err_remove; + + return 0; + +err_remove: + cpu_latency_qos_remove_request(&iosf_mbi_pm_qos); + iosf_debugfs_remove(); + + return ret; } static void __exit iosf_mbi_exit(void)
A problem about modprobe iosf_mbi failed is triggered with the following log given: debugfs: Directory 'iosf_sb' with parent '/' already present! The reason is that iosf_mbi_init() returns pci_register_driver() directly without checking its return value, if pci_register_driver() failed, it returns without removing debugfs, resulting the debugfs of iosf_sb can never be created later. iosf_mbi_init() iosf_mbi_dbg_init() # create debugfs pci_register_driver() driver_register() bus_add_driver() priv = kzalloc(...) # OOM happened # return without remove debugfs and destroy workqueue Fix by removing debugfs and iosf_mbi_pm_qos when pci_register_driver() returns error. Fixes: 8dc12f933c9d ("x86/iosf: Add debugfs support") Fixes: e09db3d241f8 ("x86: baytrail/cherrytrail: Rework and move P-Unit PMIC bus semaphore code") Signed-off-by: Yuan Can <yuancan@huawei.com> --- Changes in v2: - fix typos in commit msg - change to the suggested error handling style arch/x86/platform/intel/iosf_mbi.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)