Message ID | 20250210075812.3900646-2-hayashi.kunihiko@socionext.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Krzysztof WilczyĆski |
Headers | show |
Series | Fix some issues related to an interrupt type in pci_endpoint_test | expand |
On Mon, Feb 10, 2025 at 04:58:08PM +0900, Kunihiko Hayashi wrote: > After devm_request_irq() fails with error in > pci_endpoint_test_request_irq(), pci_endpoint_test_free_irq_vectors() is > called assuming that all IRQs have been released. > > However some requested IRQs remain unreleased, so there are still > /proc/irq/* entries remaining and we encounters WARN() with the following s/we encounters/this results in WARN() > message: > > remove_proc_entry: removing non-empty directory 'irq/30', leaking at > least 'pci-endpoint-test.0' > WARNING: CPU: 0 PID: 202 at fs/proc/generic.c:719 remove_proc_entry > +0x190/0x19c > > And show the call trace that led to this issue: You can remove this backtrace. > > [ 12.050005] Call trace: > [ 12.051226] remove_proc_entry+0x190/0x19c (P) > [ 12.053448] unregister_irq_proc+0xd0/0x104 > [ 12.055541] free_desc+0x4c/0xd0 > [ 12.057155] irq_free_descs+0x68/0x90 > [ 12.058984] irq_domain_free_irqs+0x15c/0x1bc > [ 12.061161] msi_domain_free_locked.part.0+0x184/0x1d4 > [ 12.063728] msi_domain_free_irqs_all_locked+0x64/0x8c > [ 12.066296] pci_msi_teardown_msi_irqs+0x48/0x54 > [ 12.068604] pci_free_msi_irqs+0x18/0x38 > [ 12.070564] pci_free_irq_vectors+0x64/0x8c > [ 12.072654] pci_endpoint_test_ioctl+0x870/0x1068 > [ 12.075006] __arm64_sys_ioctl+0xb0/0xe8 > [ 12.076967] invoke_syscall+0x48/0x110 > [ 12.078841] el0_svc_common.constprop.0+0x40/0xe8 > [ 12.081192] do_el0_svc+0x20/0x2c > [ 12.082848] el0_svc+0x30/0xd0 > [ 12.084376] el0t_64_sync_handler+0x144/0x168 > [ 12.086553] el0t_64_sync+0x198/0x19c > [ 12.088383] ---[ end trace 0000000000000000 ]--- > > To solve this issue, set the number of remaining IRQs to test->num_irqs > and release IRQs in advance by calling pci_endpoint_test_release_irq(). > > Cc: stable@vger.kernel.org > Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands") > Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> - Mani > --- > drivers/misc/pci_endpoint_test.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c > index d5ac71a49386..bbcccd425700 100644 > --- a/drivers/misc/pci_endpoint_test.c > +++ b/drivers/misc/pci_endpoint_test.c > @@ -259,6 +259,9 @@ static int pci_endpoint_test_request_irq(struct pci_endpoint_test *test) > break; > } > > + test->num_irqs = i; > + pci_endpoint_test_release_irq(test); > + > return ret; > } > > -- > 2.25.1 >
Hi Manivannan, On 2025/02/15 2:21, Manivannan Sadhasivam wrote: > On Mon, Feb 10, 2025 at 04:58:08PM +0900, Kunihiko Hayashi wrote: >> After devm_request_irq() fails with error in >> pci_endpoint_test_request_irq(), pci_endpoint_test_free_irq_vectors() is >> called assuming that all IRQs have been released. >> >> However some requested IRQs remain unreleased, so there are still >> /proc/irq/* entries remaining and we encounters WARN() with the following > > s/we encounters/this results in WARN() I see. I'll fix it. >> message: >> >> remove_proc_entry: removing non-empty directory 'irq/30', leaking at >> least 'pci-endpoint-test.0' >> WARNING: CPU: 0 PID: 202 at fs/proc/generic.c:719 remove_proc_entry >> +0x190/0x19c >> >> And show the call trace that led to this issue: > > You can remove this backtrace. I'll add more information instead. > >> >> [ 12.050005] Call trace: >> [ 12.051226] remove_proc_entry+0x190/0x19c (P) >> [ 12.053448] unregister_irq_proc+0xd0/0x104 >> [ 12.055541] free_desc+0x4c/0xd0 >> [ 12.057155] irq_free_descs+0x68/0x90 >> [ 12.058984] irq_domain_free_irqs+0x15c/0x1bc >> [ 12.061161] msi_domain_free_locked.part.0+0x184/0x1d4 >> [ 12.063728] msi_domain_free_irqs_all_locked+0x64/0x8c >> [ 12.066296] pci_msi_teardown_msi_irqs+0x48/0x54 >> [ 12.068604] pci_free_msi_irqs+0x18/0x38 >> [ 12.070564] pci_free_irq_vectors+0x64/0x8c >> [ 12.072654] pci_endpoint_test_ioctl+0x870/0x1068 >> [ 12.075006] __arm64_sys_ioctl+0xb0/0xe8 >> [ 12.076967] invoke_syscall+0x48/0x110 >> [ 12.078841] el0_svc_common.constprop.0+0x40/0xe8 >> [ 12.081192] do_el0_svc+0x20/0x2c >> [ 12.082848] el0_svc+0x30/0xd0 >> [ 12.084376] el0t_64_sync_handler+0x144/0x168 >> [ 12.086553] el0t_64_sync+0x198/0x19c >> [ 12.088383] ---[ end trace 0000000000000000 ]--- >> >> To solve this issue, set the number of remaining IRQs to test->num_irqs >> and release IRQs in advance by calling pci_endpoint_test_release_irq(). >> >> Cc: stable@vger.kernel.org >> Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands") >> Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com> > > Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org> Thank you, --- Best Regards Kunihiko Hayashi
diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c index d5ac71a49386..bbcccd425700 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -259,6 +259,9 @@ static int pci_endpoint_test_request_irq(struct pci_endpoint_test *test) break; } + test->num_irqs = i; + pci_endpoint_test_release_irq(test); + return ret; }
After devm_request_irq() fails with error in pci_endpoint_test_request_irq(), pci_endpoint_test_free_irq_vectors() is called assuming that all IRQs have been released. However some requested IRQs remain unreleased, so there are still /proc/irq/* entries remaining and we encounters WARN() with the following message: remove_proc_entry: removing non-empty directory 'irq/30', leaking at least 'pci-endpoint-test.0' WARNING: CPU: 0 PID: 202 at fs/proc/generic.c:719 remove_proc_entry +0x190/0x19c And show the call trace that led to this issue: [ 12.050005] Call trace: [ 12.051226] remove_proc_entry+0x190/0x19c (P) [ 12.053448] unregister_irq_proc+0xd0/0x104 [ 12.055541] free_desc+0x4c/0xd0 [ 12.057155] irq_free_descs+0x68/0x90 [ 12.058984] irq_domain_free_irqs+0x15c/0x1bc [ 12.061161] msi_domain_free_locked.part.0+0x184/0x1d4 [ 12.063728] msi_domain_free_irqs_all_locked+0x64/0x8c [ 12.066296] pci_msi_teardown_msi_irqs+0x48/0x54 [ 12.068604] pci_free_msi_irqs+0x18/0x38 [ 12.070564] pci_free_irq_vectors+0x64/0x8c [ 12.072654] pci_endpoint_test_ioctl+0x870/0x1068 [ 12.075006] __arm64_sys_ioctl+0xb0/0xe8 [ 12.076967] invoke_syscall+0x48/0x110 [ 12.078841] el0_svc_common.constprop.0+0x40/0xe8 [ 12.081192] do_el0_svc+0x20/0x2c [ 12.082848] el0_svc+0x30/0xd0 [ 12.084376] el0t_64_sync_handler+0x144/0x168 [ 12.086553] el0t_64_sync+0x198/0x19c [ 12.088383] ---[ end trace 0000000000000000 ]--- To solve this issue, set the number of remaining IRQs to test->num_irqs and release IRQs in advance by calling pci_endpoint_test_release_irq(). Cc: stable@vger.kernel.org Fixes: e03327122e2c ("pci_endpoint_test: Add 2 ioctl commands") Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com> --- drivers/misc/pci_endpoint_test.c | 3 +++ 1 file changed, 3 insertions(+)