All of lore.kernel.org
 help / color / mirror / Atom feed
* [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

* [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

* [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

* [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

* [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

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.