From e584b00d3d0f88496dca0256097c9a62f062354e Mon Sep 17 00:00:00 2001 From: Wei Qin Date: Mon, 15 Dec 2025 21:21:43 +0800 Subject: [PATCH] ub: udma: Bugfix related to crq event unregister. driver inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IDD5E4 CVE: NA --------------------------------------------------------- This patch support fix bug about crq event unregister. Fixes: 1ae22d037be8 ("ub: udma: Support 2M hugepage function") Signed-off-by: Wei Qin --- drivers/ub/urma/hw/udma/udma_main.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/drivers/ub/urma/hw/udma/udma_main.c b/drivers/ub/urma/hw/udma/udma_main.c index 686e4a02026c..6b4059cadc96 100644 --- a/drivers/ub/urma/hw/udma/udma_main.c +++ b/drivers/ub/urma/hw/udma/udma_main.c @@ -891,11 +891,10 @@ static int udma_register_event(struct auxiliary_device *adev) return ret; } -static void udma_unregister_event(struct auxiliary_device *adev) +static void udma_unregister_none_crq_event(struct auxiliary_device *adev) { ubase_port_unregister(adev); udma_unregister_ctrlq_event(adev); - udma_unregister_crq_event(adev); udma_unregister_ce_event(adev); udma_unregister_ae_event(adev); } @@ -1021,7 +1020,8 @@ static int udma_init_dev(struct auxiliary_device *adev) err_set_ubcore_dev: udma_unregister_activate_workqueue(udma_dev); err_register_act_init: - udma_unregister_event(adev); + udma_unregister_none_crq_event(adev); + udma_unregister_crq_event(adev); err_event_register: udma_destroy_dev(udma_dev); err_create: @@ -1096,12 +1096,12 @@ void udma_reset_uninit(struct auxiliary_device *adev) return; } - /* Event should unregister before unset ubcore dev. */ - udma_unregister_event(adev); + udma_unregister_none_crq_event(adev); udma_unset_ubcore_dev(udma_dev); udma_unregister_debugfs(udma_dev); udma_unregister_activate_workqueue(udma_dev); udma_open_ue_rx(udma_dev, false, false, true, 0); + udma_unregister_crq_event(adev); udma_destroy_dev(udma_dev); mutex_unlock(&udma_reset_mutex); } @@ -1149,15 +1149,14 @@ void udma_remove(struct auxiliary_device *adev) } udma_dev->status = UDMA_SUSPEND; udma_report_reset_event(UBCORE_EVENT_ELR_ERR, udma_dev); - - /* Event should unregister before unset ubcore dev. */ - udma_unregister_event(adev); + udma_unregister_none_crq_event(adev); udma_unset_ubcore_dev(udma_dev); udma_unregister_debugfs(udma_dev); udma_unregister_activate_workqueue(udma_dev); check_and_wait_flush_done(udma_dev); if (is_rmmod) (void)ubase_activate_dev(adev); + udma_unregister_crq_event(adev); udma_destroy_dev(udma_dev); mutex_unlock(&udma_reset_mutex); dev_info(&adev->dev, "udma device remove success.\n"); -- Gitee