* [PATCH v2 0/3] x86/irq: slightly improve handle_irq @ 2019-08-19 19:33 Heiner Kallweit 2019-08-19 19:34 ` [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al Heiner Kallweit ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Heiner Kallweit @ 2019-08-19 19:33 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, x86 Cc: Linux Kernel Mailing List When checking something else I stumbled across this code. This patch set simplifies it a little bit. v2: - patch 2: add "likely" to if clause and reorder it - patch 2: For 64bit, remove handle_irq and inline call to generic_handle_irq_desc Heiner Kallweit (3): x86/irq: improve definition of VECTOR_SHUTDOWN et al x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq x86/irq: slightly improve do_IRQ arch/x86/include/asm/hw_irq.h | 4 ++-- arch/x86/include/asm/irq.h | 2 +- arch/x86/kernel/irq.c | 11 ++++++++--- arch/x86/kernel/irq_32.c | 7 +------ arch/x86/kernel/irq_64.c | 9 --------- 5 files changed, 12 insertions(+), 21 deletions(-) -- 2.22.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al 2019-08-19 19:33 [PATCH v2 0/3] x86/irq: slightly improve handle_irq Heiner Kallweit @ 2019-08-19 19:34 ` Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Improve " tip-bot2 for Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 2/3] x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 3/3] x86/irq: slightly improve do_IRQ Heiner Kallweit 2 siblings, 1 reply; 7+ messages in thread From: Heiner Kallweit @ 2019-08-19 19:34 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, x86 Cc: Linux Kernel Mailing List These values are used with IS_ERR(), so it's more intuitive to define them like a standard PTR_ERR() of a negative errno. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- arch/x86/include/asm/hw_irq.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index cbd97e22d..4154bc5f6 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -153,8 +153,8 @@ extern char irq_entries_start[]; extern char spurious_entries_start[]; #define VECTOR_UNUSED NULL -#define VECTOR_SHUTDOWN ((void *)~0UL) -#define VECTOR_RETRIGGERED ((void *)~1UL) +#define VECTOR_SHUTDOWN ((void *)-1L) +#define VECTOR_RETRIGGERED ((void *)-2L) typedef struct irq_desc* vector_irq_t[NR_VECTORS]; DECLARE_PER_CPU(vector_irq_t, vector_irq); -- 2.22.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [tip: x86/irq] x86/irq: Improve definition of VECTOR_SHUTDOWN et al 2019-08-19 19:34 ` [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al Heiner Kallweit @ 2019-08-23 1:55 ` tip-bot2 for Heiner Kallweit 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Heiner Kallweit @ 2019-08-23 1:55 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, Thomas Gleixner, Heiner Kallweit The following commit has been merged into the x86/irq branch of tip: Commit-ID: e30c44e2e59c98023997632815cbc5e273991c25 Gitweb: https://git.kernel.org/tip/e30c44e2e59c98023997632815cbc5e273991c25 Author: Heiner Kallweit <hkallweit1@gmail.com> AuthorDate: Mon, 19 Aug 2019 21:34:47 +02:00 Committer: Thomas Gleixner <tglx@linutronix.de> CommitterDate: Mon, 19 Aug 2019 23:19:06 +02:00 x86/irq: Improve definition of VECTOR_SHUTDOWN et al These values are used with IS_ERR(), so it's more intuitive to define them like a standard PTR_ERR() of a negative errno. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/146835e8-c086-4e85-7ece-bcba6795e6db@gmail.com --- arch/x86/include/asm/hw_irq.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index cbd97e2..4154bc5 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -153,8 +153,8 @@ extern char irq_entries_start[]; extern char spurious_entries_start[]; #define VECTOR_UNUSED NULL -#define VECTOR_SHUTDOWN ((void *)~0UL) -#define VECTOR_RETRIGGERED ((void *)~1UL) +#define VECTOR_SHUTDOWN ((void *)-1L) +#define VECTOR_RETRIGGERED ((void *)-2L) typedef struct irq_desc* vector_irq_t[NR_VECTORS]; DECLARE_PER_CPU(vector_irq_t, vector_irq); ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq 2019-08-19 19:33 [PATCH v2 0/3] x86/irq: slightly improve handle_irq Heiner Kallweit 2019-08-19 19:34 ` [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al Heiner Kallweit @ 2019-08-19 19:36 ` Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Move IS_ERR_OR_NULL() check into common do_IRQ() code tip-bot2 for Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 3/3] x86/irq: slightly improve do_IRQ Heiner Kallweit 2 siblings, 1 reply; 7+ messages in thread From: Heiner Kallweit @ 2019-08-19 19:36 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, x86 Cc: Linux Kernel Mailing List The code can be simplified a little by factoring out the IS_ERR_OR_NULL check from the platform-specific handle_irq implementations, and by inlining the remaining call to generic_handle_irq_desc for 64bit systems. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- v2: - add "likely" to if clause and reorder it - For 64bit, remove handle_irq and inline call to generic_handle_irq_desc --- arch/x86/include/asm/irq.h | 2 +- arch/x86/kernel/irq.c | 9 +++++++-- arch/x86/kernel/irq_32.c | 7 +------ arch/x86/kernel/irq_64.c | 9 --------- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 8f95686ec..a176f6165 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h @@ -34,7 +34,7 @@ extern __visible void smp_kvm_posted_intr_nested_ipi(struct pt_regs *regs); extern void (*x86_platform_ipi_callback)(void); extern void native_init_IRQ(void); -extern bool handle_irq(struct irq_desc *desc, struct pt_regs *regs); +extern void handle_irq(struct irq_desc *desc, struct pt_regs *regs); extern __visible unsigned int do_IRQ(struct pt_regs *regs); diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 4215653f8..f1c8f350d 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -243,8 +243,13 @@ __visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs) RCU_LOCKDEP_WARN(!rcu_is_watching(), "IRQ failed to wake up RCU"); desc = __this_cpu_read(vector_irq[vector]); - - if (!handle_irq(desc, regs)) { + if (likely(!IS_ERR_OR_NULL(desc))) { +#ifdef CONFIG_X86_32 + handle_irq(desc, regs); +#else + generic_handle_irq_desc(desc); +#endif + } else { ack_APIC_irq(); if (desc != VECTOR_RETRIGGERED && desc != VECTOR_SHUTDOWN) { diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index fc34816c6..a759ca97c 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c @@ -148,18 +148,13 @@ void do_softirq_own_stack(void) call_on_stack(__do_softirq, isp); } -bool handle_irq(struct irq_desc *desc, struct pt_regs *regs) +void handle_irq(struct irq_desc *desc, struct pt_regs *regs) { int overflow = check_stack_overflow(); - if (IS_ERR_OR_NULL(desc)) - return false; - if (user_mode(regs) || !execute_on_irq_stack(overflow, desc)) { if (unlikely(overflow)) print_stack_overflow(); generic_handle_irq_desc(desc); } - - return true; } diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 6bf6517a0..12df3a4ab 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c @@ -26,15 +26,6 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct irq_stack, irq_stack_backing_store) __visible; DECLARE_INIT_PER_CPU(irq_stack_backing_store); -bool handle_irq(struct irq_desc *desc, struct pt_regs *regs) -{ - if (IS_ERR_OR_NULL(desc)) - return false; - - generic_handle_irq_desc(desc); - return true; -} - #ifdef CONFIG_VMAP_STACK /* * VMAP the backing store with guard pages -- 2.22.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [tip: x86/irq] x86/irq: Move IS_ERR_OR_NULL() check into common do_IRQ() code 2019-08-19 19:36 ` [PATCH v2 2/3] x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq Heiner Kallweit @ 2019-08-23 1:55 ` tip-bot2 for Heiner Kallweit 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Heiner Kallweit @ 2019-08-23 1:55 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, Thomas Gleixner, Heiner Kallweit The following commit has been merged into the x86/irq branch of tip: Commit-ID: d6f83427ff422b3a65e4a6bd84c010f78d4a30a5 Gitweb: https://git.kernel.org/tip/d6f83427ff422b3a65e4a6bd84c010f78d4a30a5 Author: Heiner Kallweit <hkallweit1@gmail.com> AuthorDate: Mon, 19 Aug 2019 21:36:09 +02:00 Committer: Thomas Gleixner <tglx@linutronix.de> CommitterDate: Mon, 19 Aug 2019 23:19:06 +02:00 x86/irq: Move IS_ERR_OR_NULL() check into common do_IRQ() code Both the 64bit and the 32bit handle_irq() implementation check the irq descriptor pointer with IS_ERR_OR_NULL() and return failure. That can be done simpler in the common do_IRQ() code. This reduces the 64bit handle_irq() function to a wrapper around generic_handle_irq_desc(). Invoke it directly from do_IRQ() to spare the extra function call. [ tglx: Got rid of the #ifdef and massaged changelog ] Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/2ec758c7-9aaa-73ab-f083-cc44c86aa741@gmail.com --- arch/x86/include/asm/irq.h | 2 +- arch/x86/kernel/irq.c | 8 ++++++-- arch/x86/kernel/irq_32.c | 7 +------ arch/x86/kernel/irq_64.c | 9 --------- 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h index 8f95686..a176f61 100644 --- a/arch/x86/include/asm/irq.h +++ b/arch/x86/include/asm/irq.h @@ -34,7 +34,7 @@ extern __visible void smp_kvm_posted_intr_nested_ipi(struct pt_regs *regs); extern void (*x86_platform_ipi_callback)(void); extern void native_init_IRQ(void); -extern bool handle_irq(struct irq_desc *desc, struct pt_regs *regs); +extern void handle_irq(struct irq_desc *desc, struct pt_regs *regs); extern __visible unsigned int do_IRQ(struct pt_regs *regs); diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 4215653..3eae012 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -243,8 +243,12 @@ __visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs) RCU_LOCKDEP_WARN(!rcu_is_watching(), "IRQ failed to wake up RCU"); desc = __this_cpu_read(vector_irq[vector]); - - if (!handle_irq(desc, regs)) { + if (likely(!IS_ERR_OR_NULL(desc))) { + if (IS_ENABLED(CONFIG_X86_32)) + handle_irq(desc, regs); + else + generic_handle_irq_desc(desc); + } else { ack_APIC_irq(); if (desc != VECTOR_RETRIGGERED && desc != VECTOR_SHUTDOWN) { diff --git a/arch/x86/kernel/irq_32.c b/arch/x86/kernel/irq_32.c index fc34816..a759ca9 100644 --- a/arch/x86/kernel/irq_32.c +++ b/arch/x86/kernel/irq_32.c @@ -148,18 +148,13 @@ void do_softirq_own_stack(void) call_on_stack(__do_softirq, isp); } -bool handle_irq(struct irq_desc *desc, struct pt_regs *regs) +void handle_irq(struct irq_desc *desc, struct pt_regs *regs) { int overflow = check_stack_overflow(); - if (IS_ERR_OR_NULL(desc)) - return false; - if (user_mode(regs) || !execute_on_irq_stack(overflow, desc)) { if (unlikely(overflow)) print_stack_overflow(); generic_handle_irq_desc(desc); } - - return true; } diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c index 6bf6517..12df3a4 100644 --- a/arch/x86/kernel/irq_64.c +++ b/arch/x86/kernel/irq_64.c @@ -26,15 +26,6 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct irq_stack, irq_stack_backing_store) __visible; DECLARE_INIT_PER_CPU(irq_stack_backing_store); -bool handle_irq(struct irq_desc *desc, struct pt_regs *regs) -{ - if (IS_ERR_OR_NULL(desc)) - return false; - - generic_handle_irq_desc(desc); - return true; -} - #ifdef CONFIG_VMAP_STACK /* * VMAP the backing store with guard pages ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] x86/irq: slightly improve do_IRQ 2019-08-19 19:33 [PATCH v2 0/3] x86/irq: slightly improve handle_irq Heiner Kallweit 2019-08-19 19:34 ` [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 2/3] x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq Heiner Kallweit @ 2019-08-19 19:36 ` Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Check for VECTOR_UNUSED directly tip-bot2 for Heiner Kallweit 2 siblings, 1 reply; 7+ messages in thread From: Heiner Kallweit @ 2019-08-19 19:36 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, H. Peter Anvin, x86 Cc: Linux Kernel Mailing List It's simpler and more intuitive to directly check for VECTOR_UNUSED. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> --- arch/x86/kernel/irq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index f1c8f350d..857b4d7ae 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -252,7 +252,7 @@ __visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs) } else { ack_APIC_irq(); - if (desc != VECTOR_RETRIGGERED && desc != VECTOR_SHUTDOWN) { + if (desc == VECTOR_UNUSED) { pr_emerg_ratelimited("%s: %d.%d No irq handler for vector\n", __func__, smp_processor_id(), vector); -- 2.22.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [tip: x86/irq] x86/irq: Check for VECTOR_UNUSED directly 2019-08-19 19:36 ` [PATCH v2 3/3] x86/irq: slightly improve do_IRQ Heiner Kallweit @ 2019-08-23 1:55 ` tip-bot2 for Heiner Kallweit 0 siblings, 0 replies; 7+ messages in thread From: tip-bot2 for Heiner Kallweit @ 2019-08-23 1:55 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, Thomas Gleixner, Heiner Kallweit The following commit has been merged into the x86/irq branch of tip: Commit-ID: 8725fcd99a3084a7a15a6e70882bfa3fe7925f52 Gitweb: https://git.kernel.org/tip/8725fcd99a3084a7a15a6e70882bfa3fe7925f52 Author: Heiner Kallweit <hkallweit1@gmail.com> AuthorDate: Mon, 19 Aug 2019 21:36:39 +02:00 Committer: Thomas Gleixner <tglx@linutronix.de> CommitterDate: Mon, 19 Aug 2019 23:19:07 +02:00 x86/irq: Check for VECTOR_UNUSED directly It's simpler and more intuitive to directly check for VECTOR_UNUSED than checking whether the other error codes are not set. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/caeaca93-5ee1-cea1-8894-3aa0d5b19241@gmail.com --- arch/x86/kernel/irq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 3eae012..21efee3 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -251,7 +251,7 @@ __visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs) } else { ack_APIC_irq(); - if (desc != VECTOR_RETRIGGERED && desc != VECTOR_SHUTDOWN) { + if (desc == VECTOR_UNUSED) { pr_emerg_ratelimited("%s: %d.%d No irq handler for vector\n", __func__, smp_processor_id(), vector); ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-08-23 1:55 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-08-19 19:33 [PATCH v2 0/3] x86/irq: slightly improve handle_irq Heiner Kallweit 2019-08-19 19:34 ` [PATCH v2 1/3] x86/irq: improve definition of VECTOR_SHUTDOWN et al Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Improve " tip-bot2 for Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 2/3] x86/irq: factor out IS_ERR_OR_NULL check from platform-specific handle_irq Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Move IS_ERR_OR_NULL() check into common do_IRQ() code tip-bot2 for Heiner Kallweit 2019-08-19 19:36 ` [PATCH v2 3/3] x86/irq: slightly improve do_IRQ Heiner Kallweit 2019-08-23 1:55 ` [tip: x86/irq] x86/irq: Check for VECTOR_UNUSED directly tip-bot2 for Heiner Kallweit
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.