Re: [PATCH v2 03/10] cxl: Make IRQ release idempotent
On Tue, 28 Jul 2015 15:28:36 +1000 Daniel Axtens d...@axtens.net wrote: Check if an IRQ is mapped before releasing it. This will simplify future EEH code by allowing unconditional unmapping of IRQs. Acked-by: Cyril Bur cyril...@gmail.com Signed-off-by: Daniel Axtens d...@axtens.net --- drivers/misc/cxl/irq.c | 9 + 1 file changed, 9 insertions(+) diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c index 680cd263436d..121ec48f3ab4 100644 --- a/drivers/misc/cxl/irq.c +++ b/drivers/misc/cxl/irq.c @@ -341,6 +341,9 @@ int cxl_register_psl_err_irq(struct cxl *adapter) void cxl_release_psl_err_irq(struct cxl *adapter) { + if (adapter-err_virq != irq_find_mapping(NULL, adapter-err_hwirq)) + return; + cxl_p1_write(adapter, CXL_PSL_ErrIVTE, 0x); cxl_unmap_irq(adapter-err_virq, adapter); cxl_release_one_irq(adapter, adapter-err_hwirq); @@ -374,6 +377,9 @@ int cxl_register_serr_irq(struct cxl_afu *afu) void cxl_release_serr_irq(struct cxl_afu *afu) { + if (afu-serr_virq != irq_find_mapping(NULL, afu-serr_hwirq)) + return; + cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x); cxl_unmap_irq(afu-serr_virq, afu); cxl_release_one_irq(afu-adapter, afu-serr_hwirq); @@ -400,6 +406,9 @@ int cxl_register_psl_irq(struct cxl_afu *afu) void cxl_release_psl_irq(struct cxl_afu *afu) { + if (afu-psl_virq != irq_find_mapping(NULL, afu-psl_hwirq)) + return; + cxl_unmap_irq(afu-psl_virq, afu); cxl_release_one_irq(afu-adapter, afu-psl_hwirq); kfree(afu-psl_irq_name); ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev
[PATCH v2 03/10] cxl: Make IRQ release idempotent
Check if an IRQ is mapped before releasing it. This will simplify future EEH code by allowing unconditional unmapping of IRQs. Signed-off-by: Daniel Axtens d...@axtens.net --- drivers/misc/cxl/irq.c | 9 + 1 file changed, 9 insertions(+) diff --git a/drivers/misc/cxl/irq.c b/drivers/misc/cxl/irq.c index 680cd263436d..121ec48f3ab4 100644 --- a/drivers/misc/cxl/irq.c +++ b/drivers/misc/cxl/irq.c @@ -341,6 +341,9 @@ int cxl_register_psl_err_irq(struct cxl *adapter) void cxl_release_psl_err_irq(struct cxl *adapter) { + if (adapter-err_virq != irq_find_mapping(NULL, adapter-err_hwirq)) + return; + cxl_p1_write(adapter, CXL_PSL_ErrIVTE, 0x); cxl_unmap_irq(adapter-err_virq, adapter); cxl_release_one_irq(adapter, adapter-err_hwirq); @@ -374,6 +377,9 @@ int cxl_register_serr_irq(struct cxl_afu *afu) void cxl_release_serr_irq(struct cxl_afu *afu) { + if (afu-serr_virq != irq_find_mapping(NULL, afu-serr_hwirq)) + return; + cxl_p1n_write(afu, CXL_PSL_SERR_An, 0x); cxl_unmap_irq(afu-serr_virq, afu); cxl_release_one_irq(afu-adapter, afu-serr_hwirq); @@ -400,6 +406,9 @@ int cxl_register_psl_irq(struct cxl_afu *afu) void cxl_release_psl_irq(struct cxl_afu *afu) { + if (afu-psl_virq != irq_find_mapping(NULL, afu-psl_hwirq)) + return; + cxl_unmap_irq(afu-psl_virq, afu); cxl_release_one_irq(afu-adapter, afu-psl_hwirq); kfree(afu-psl_irq_name); -- 2.1.4 ___ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev