All of lore.kernel.org
 help / color / mirror / Atom feed
* [rfc 0/2] x86,ioapic simplification,bugfix
@ 2009-08-01  7:47 Cyrill Gorcunov
  2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
  2009-08-01  7:48 ` [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference Cyrill Gorcunov
  0 siblings, 2 replies; 8+ messages in thread
From: Cyrill Gorcunov @ 2009-08-01  7:47 UTC (permalink / raw)
  To: yinghai, mingo, hpa, tglx; +Cc: linux-kernel

Hi,

the series has an idea to simplify io-apic list
handling and prevent from one possible NULL
dereference. See patches comments for details.

Yinghai, please take a closer look on new body
of add_pin_to_irq_node and __eoi_ioapic_irq.

I hope I didn't miss anything.

Please review. Comments are highly appreciated.

The patches on top of -tip tree commit

	| commit 160bc9d163b0ba927770056783b79a684b74acc6
	| Merge: d333597 d6c585a
	| Author: Ingo Molnar <mingo@elte.hu>
	| Date:   Sun Jul 26 14:32:39 2009 +0200
	|
	|    Merge branch 'x86/urgent'

Cyrill

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper
  2009-08-01  7:47 [rfc 0/2] x86,ioapic simplification,bugfix Cyrill Gorcunov
@ 2009-08-01  7:47 ` Cyrill Gorcunov
  2009-08-04 14:11   ` Ingo Molnar
                     ` (2 more replies)
  2009-08-01  7:48 ` [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference Cyrill Gorcunov
  1 sibling, 3 replies; 8+ messages in thread
From: Cyrill Gorcunov @ 2009-08-01  7:47 UTC (permalink / raw)
  To: yinghai, mingo, hpa, tglx; +Cc: linux-kernel, Cyrill Gorcunov

[-- Attachment #1: x86-ioapic-for-each --]
[-- Type: text/plain, Size: 3377 bytes --]

This allow us to save a few lines of code.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
---
 arch/x86/kernel/apic/io_apic.c |   43 ++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 28 deletions(-)

Index: linux-2.6.git/arch/x86/kernel/apic/io_apic.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6.git/arch/x86/kernel/apic/io_apic.c
@@ -66,6 +66,8 @@
 #include <asm/apic.h>
 
 #define __apicdebuginit(type) static type __init
+#define for_each_irq_pin(entry, head) \
+	for (entry = head; entry; entry = entry->next)
 
 /*
  *      Is the SiS APIC rmw bug present ?
@@ -410,7 +412,7 @@ static bool io_apic_level_ack_pending(st
 	unsigned long flags;
 
 	spin_lock_irqsave(&ioapic_lock, flags);
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		int pin;
 
@@ -490,22 +492,21 @@ static void ioapic_mask_entry(int apic, 
  */
 static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin)
 {
-	struct irq_pin_list **entryp, *entry;
+	struct irq_pin_list **last, *entry;
 
-	for (entryp = &cfg->irq_2_pin;
-	     *entryp != NULL;
-	     entryp = &(*entryp)->next) {
-		entry = *entryp;
-		/* not again, please */
+	/* don't allow duplicates */
+	last = &cfg->irq_2_pin;
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == apic && entry->pin == pin)
 			return;
+		last = &entry->next;
 	}
 
 	entry = get_one_free_irq_2_pin(node);
 	entry->apic = apic;
 	entry->pin = pin;
 
-	*entryp = entry;
+	*last = entry;
 }
 
 /*
@@ -517,7 +518,7 @@ static void __init replace_pin_at_irq_no
 {
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == oldapic && entry->pin == oldpin) {
 			entry->apic = newapic;
 			entry->pin = newpin;
@@ -537,7 +538,7 @@ static void io_apic_modify_irq(struct ir
 	int pin;
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		pin = entry->pin;
 		reg = io_apic_read(entry->apic, 0x10 + pin * 2);
@@ -1669,12 +1670,8 @@ __apicdebuginit(void) print_IO_APIC(void
 		if (!entry)
 			continue;
 		printk(KERN_DEBUG "IRQ%d ", irq);
-		for (;;) {
+		for_each_irq_pin(entry, cfg->irq_2_pin)
 			printk("-> %d:%d", entry->apic, entry->pin);
-			if (!entry->next)
-				break;
-			entry = entry->next;
-		}
 		printk("\n");
 	}
 
@@ -2227,7 +2224,7 @@ static void __target_IO_APIC_irq(unsigne
 	struct irq_pin_list *entry;
 	u8 vector = cfg->vector;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 
 		apic = entry->apic;
@@ -2556,20 +2553,10 @@ static void ack_apic_level(unsigned int 
 #ifdef CONFIG_INTR_REMAP
 static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
 {
-	int apic, pin;
 	struct irq_pin_list *entry;
 
-	entry = cfg->irq_2_pin;
-	for (;;) {
-
-		if (!entry)
-			break;
-
-		apic = entry->apic;
-		pin = entry->pin;
-		io_apic_eoi(apic, pin);
-		entry = entry->next;
-	}
+	for_each_irq_pin(entry, cfg->irq_2_pin)
+		io_apic_eoi(entry->apic, entry->pin);
 }
 
 static void


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference
  2009-08-01  7:47 [rfc 0/2] x86,ioapic simplification,bugfix Cyrill Gorcunov
  2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
@ 2009-08-01  7:48 ` Cyrill Gorcunov
  2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Throw " tip-bot for Cyrill Gorcunov
  2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  1 sibling, 2 replies; 8+ messages in thread
From: Cyrill Gorcunov @ 2009-08-01  7:48 UTC (permalink / raw)
  To: yinghai, mingo, hpa, tglx; +Cc: linux-kernel, Cyrill Gorcunov

[-- Attachment #1: x86-ioapic-NULL --]
[-- Type: text/plain, Size: 754 bytes --]

Instead of plain NULL deref we better throw error
message with a backtrace. Actually we need more
gracious error handling here. Meanwhile leave it
as is.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
---
 arch/x86/kernel/apic/io_apic.c |    4 ++++
 1 file changed, 4 insertions(+)

Index: linux-2.6.git/arch/x86/kernel/apic/io_apic.c
=====================================================================
--- linux-2.6.git.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6.git/arch/x86/kernel/apic/io_apic.c
@@ -503,6 +503,10 @@ static void add_pin_to_irq_node(struct i
 	}
 
 	entry = get_one_free_irq_2_pin(node);
+	if (!entry) {
+		printk(KERN_ERR "can not alloc irq_pin_list\n");
+		BUG_ON(1);
+	}
 	entry->apic = apic;
 	entry->pin = pin;
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper
  2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
@ 2009-08-04 14:11   ` Ingo Molnar
  2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Introduce for_each_irq_pin() helper tip-bot for Cyrill Gorcunov
  2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  2 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2009-08-04 14:11 UTC (permalink / raw)
  To: Cyrill Gorcunov; +Cc: yinghai, hpa, tglx, linux-kernel


* Cyrill Gorcunov <gorcunov@openvz.org> wrote:

> This allow us to save a few lines of code.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> ---
>  arch/x86/kernel/apic/io_apic.c |   43 ++++++++++++++---------------------------
>  1 file changed, 15 insertions(+), 28 deletions(-)

Nice cleanup! I'll queue it up and let you know if there's any 
problems with it in testing.

	Ingo

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [tip:x86/apic] x86, ioapic: Introduce for_each_irq_pin() helper
  2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
  2009-08-04 14:11   ` Ingo Molnar
@ 2009-08-04 14:16   ` tip-bot for Cyrill Gorcunov
  2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  2 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Cyrill Gorcunov @ 2009-08-04 14:16 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, gorcunov, tglx, mingo

Commit-ID:  a09204211bcf17eddfdbb5cb2ceb2173e0e3c0d0
Gitweb:     http://git.kernel.org/tip/a09204211bcf17eddfdbb5cb2ceb2173e0e3c0d0
Author:     Cyrill Gorcunov <gorcunov@openvz.org>
AuthorDate: Sat, 1 Aug 2009 11:47:59 +0400
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 4 Aug 2009 16:11:53 +0200

x86, ioapic: Introduce for_each_irq_pin() helper

This allow us to save a few lines of code.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: yinghai@kernel.org
LKML-Reference: <20090801075435.597863129@openvz.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |   43 ++++++++++++++--------------------------
 1 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 7e92a92..ffd8fdf 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -66,6 +66,8 @@
 #include <asm/apic.h>
 
 #define __apicdebuginit(type) static type __init
+#define for_each_irq_pin(entry, head) \
+	for (entry = head; entry; entry = entry->next)
 
 /*
  *      Is the SiS APIC rmw bug present ?
@@ -410,7 +412,7 @@ static bool io_apic_level_ack_pending(struct irq_cfg *cfg)
 	unsigned long flags;
 
 	spin_lock_irqsave(&ioapic_lock, flags);
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		int pin;
 
@@ -490,22 +492,21 @@ static void ioapic_mask_entry(int apic, int pin)
  */
 static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin)
 {
-	struct irq_pin_list **entryp, *entry;
+	struct irq_pin_list **last, *entry;
 
-	for (entryp = &cfg->irq_2_pin;
-	     *entryp != NULL;
-	     entryp = &(*entryp)->next) {
-		entry = *entryp;
-		/* not again, please */
+	/* don't allow duplicates */
+	last = &cfg->irq_2_pin;
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == apic && entry->pin == pin)
 			return;
+		last = &entry->next;
 	}
 
 	entry = get_one_free_irq_2_pin(node);
 	entry->apic = apic;
 	entry->pin = pin;
 
-	*entryp = entry;
+	*last = entry;
 }
 
 /*
@@ -517,7 +518,7 @@ static void __init replace_pin_at_irq_node(struct irq_cfg *cfg, int node,
 {
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == oldapic && entry->pin == oldpin) {
 			entry->apic = newapic;
 			entry->pin = newpin;
@@ -537,7 +538,7 @@ static void io_apic_modify_irq(struct irq_cfg *cfg,
 	int pin;
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		pin = entry->pin;
 		reg = io_apic_read(entry->apic, 0x10 + pin * 2);
@@ -1669,12 +1670,8 @@ __apicdebuginit(void) print_IO_APIC(void)
 		if (!entry)
 			continue;
 		printk(KERN_DEBUG "IRQ%d ", irq);
-		for (;;) {
+		for_each_irq_pin(entry, cfg->irq_2_pin)
 			printk("-> %d:%d", entry->apic, entry->pin);
-			if (!entry->next)
-				break;
-			entry = entry->next;
-		}
 		printk("\n");
 	}
 
@@ -2227,7 +2224,7 @@ static void __target_IO_APIC_irq(unsigned int irq, unsigned int dest, struct irq
 	struct irq_pin_list *entry;
 	u8 vector = cfg->vector;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 
 		apic = entry->apic;
@@ -2556,20 +2553,10 @@ static void ack_apic_level(unsigned int irq)
 #ifdef CONFIG_INTR_REMAP
 static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
 {
-	int apic, pin;
 	struct irq_pin_list *entry;
 
-	entry = cfg->irq_2_pin;
-	for (;;) {
-
-		if (!entry)
-			break;
-
-		apic = entry->apic;
-		pin = entry->pin;
-		io_apic_eoi(apic, pin);
-		entry = entry->next;
-	}
+	for_each_irq_pin(entry, cfg->irq_2_pin)
+		io_apic_eoi(entry->apic, entry->pin);
 }
 
 static void

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:x86/apic] x86, ioapic: Throw BUG instead of NULL dereference
  2009-08-01  7:48 ` [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference Cyrill Gorcunov
@ 2009-08-04 14:16   ` tip-bot for Cyrill Gorcunov
  2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Cyrill Gorcunov @ 2009-08-04 14:16 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, gorcunov, tglx, mingo

Commit-ID:  460ba8dfa8decb3885256fc4cbb3d2ee46a6466f
Gitweb:     http://git.kernel.org/tip/460ba8dfa8decb3885256fc4cbb3d2ee46a6466f
Author:     Cyrill Gorcunov <gorcunov@openvz.org>
AuthorDate: Sat, 1 Aug 2009 11:48:00 +0400
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 4 Aug 2009 16:11:54 +0200

x86, ioapic: Throw BUG instead of NULL dereference

Instead of plain NULL deref we better throw error
message with a backtrace. Actually we need more
gracious error handling here. Meanwhile leave it
as is.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: yinghai@kernel.org
LKML-Reference: <20090801075435.769301745@openvz.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index ffd8fdf..2a145d3 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -503,6 +503,10 @@ static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin
 	}
 
 	entry = get_one_free_irq_2_pin(node);
+	if (!entry) {
+		printk(KERN_ERR "can not alloc irq_pin_list\n");
+		BUG_ON(1);
+	}
 	entry->apic = apic;
 	entry->pin = pin;
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:x86/apic] x86, ioapic: Introduce for_each_irq_pin() helper
  2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
  2009-08-04 14:11   ` Ingo Molnar
  2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Introduce for_each_irq_pin() helper tip-bot for Cyrill Gorcunov
@ 2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  2 siblings, 0 replies; 8+ messages in thread
From: tip-bot for Cyrill Gorcunov @ 2009-08-05 10:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, gorcunov, tglx, mingo

Commit-ID:  2977fb3ffc8493a2f4f0a362e8660a6cde9f1bb9
Gitweb:     http://git.kernel.org/tip/2977fb3ffc8493a2f4f0a362e8660a6cde9f1bb9
Author:     Cyrill Gorcunov <gorcunov@openvz.org>
AuthorDate: Sat, 1 Aug 2009 11:47:59 +0400
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 5 Aug 2009 10:30:49 +0200

x86, ioapic: Introduce for_each_irq_pin() helper

This allow us to save a few lines of code.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: yinghai@kernel.org
LKML-Reference: <20090801075435.597863129@openvz.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |   43 ++++++++++++++--------------------------
 1 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 7e92a92..ffd8fdf 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -66,6 +66,8 @@
 #include <asm/apic.h>
 
 #define __apicdebuginit(type) static type __init
+#define for_each_irq_pin(entry, head) \
+	for (entry = head; entry; entry = entry->next)
 
 /*
  *      Is the SiS APIC rmw bug present ?
@@ -410,7 +412,7 @@ static bool io_apic_level_ack_pending(struct irq_cfg *cfg)
 	unsigned long flags;
 
 	spin_lock_irqsave(&ioapic_lock, flags);
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		int pin;
 
@@ -490,22 +492,21 @@ static void ioapic_mask_entry(int apic, int pin)
  */
 static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin)
 {
-	struct irq_pin_list **entryp, *entry;
+	struct irq_pin_list **last, *entry;
 
-	for (entryp = &cfg->irq_2_pin;
-	     *entryp != NULL;
-	     entryp = &(*entryp)->next) {
-		entry = *entryp;
-		/* not again, please */
+	/* don't allow duplicates */
+	last = &cfg->irq_2_pin;
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == apic && entry->pin == pin)
 			return;
+		last = &entry->next;
 	}
 
 	entry = get_one_free_irq_2_pin(node);
 	entry->apic = apic;
 	entry->pin = pin;
 
-	*entryp = entry;
+	*last = entry;
 }
 
 /*
@@ -517,7 +518,7 @@ static void __init replace_pin_at_irq_node(struct irq_cfg *cfg, int node,
 {
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		if (entry->apic == oldapic && entry->pin == oldpin) {
 			entry->apic = newapic;
 			entry->pin = newpin;
@@ -537,7 +538,7 @@ static void io_apic_modify_irq(struct irq_cfg *cfg,
 	int pin;
 	struct irq_pin_list *entry;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 		pin = entry->pin;
 		reg = io_apic_read(entry->apic, 0x10 + pin * 2);
@@ -1669,12 +1670,8 @@ __apicdebuginit(void) print_IO_APIC(void)
 		if (!entry)
 			continue;
 		printk(KERN_DEBUG "IRQ%d ", irq);
-		for (;;) {
+		for_each_irq_pin(entry, cfg->irq_2_pin)
 			printk("-> %d:%d", entry->apic, entry->pin);
-			if (!entry->next)
-				break;
-			entry = entry->next;
-		}
 		printk("\n");
 	}
 
@@ -2227,7 +2224,7 @@ static void __target_IO_APIC_irq(unsigned int irq, unsigned int dest, struct irq
 	struct irq_pin_list *entry;
 	u8 vector = cfg->vector;
 
-	for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) {
+	for_each_irq_pin(entry, cfg->irq_2_pin) {
 		unsigned int reg;
 
 		apic = entry->apic;
@@ -2556,20 +2553,10 @@ static void ack_apic_level(unsigned int irq)
 #ifdef CONFIG_INTR_REMAP
 static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg)
 {
-	int apic, pin;
 	struct irq_pin_list *entry;
 
-	entry = cfg->irq_2_pin;
-	for (;;) {
-
-		if (!entry)
-			break;
-
-		apic = entry->apic;
-		pin = entry->pin;
-		io_apic_eoi(apic, pin);
-		entry = entry->next;
-	}
+	for_each_irq_pin(entry, cfg->irq_2_pin)
+		io_apic_eoi(entry->apic, entry->pin);
 }
 
 static void

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [tip:x86/apic] x86, ioapic: Throw BUG instead of NULL dereference
  2009-08-01  7:48 ` [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference Cyrill Gorcunov
  2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Throw " tip-bot for Cyrill Gorcunov
@ 2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
  1 sibling, 0 replies; 8+ messages in thread
From: tip-bot for Cyrill Gorcunov @ 2009-08-05 10:55 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, gorcunov, tglx, mingo

Commit-ID:  a7428cd2ef77734465e36bceb43290e37e2a97c6
Gitweb:     http://git.kernel.org/tip/a7428cd2ef77734465e36bceb43290e37e2a97c6
Author:     Cyrill Gorcunov <gorcunov@openvz.org>
AuthorDate: Sat, 1 Aug 2009 11:48:00 +0400
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 5 Aug 2009 10:30:50 +0200

x86, ioapic: Throw BUG instead of NULL dereference

Instead of plain NULL deref we better throw error
message with a backtrace. Actually we need more
gracious error handling here. Meanwhile leave it
as is.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: yinghai@kernel.org
LKML-Reference: <20090801075435.769301745@openvz.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 arch/x86/kernel/apic/io_apic.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index ffd8fdf..2a145d3 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -503,6 +503,10 @@ static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin
 	}
 
 	entry = get_one_free_irq_2_pin(node);
+	if (!entry) {
+		printk(KERN_ERR "can not alloc irq_pin_list\n");
+		BUG_ON(1);
+	}
 	entry->apic = apic;
 	entry->pin = pin;
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-08-05 10:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-01  7:47 [rfc 0/2] x86,ioapic simplification,bugfix Cyrill Gorcunov
2009-08-01  7:47 ` [rfc 1/2] x86,ioapic: introduce for_each_irq_pin helper Cyrill Gorcunov
2009-08-04 14:11   ` Ingo Molnar
2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Introduce for_each_irq_pin() helper tip-bot for Cyrill Gorcunov
2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov
2009-08-01  7:48 ` [rfc 2/2] x86,ioapic: throw BUG instead of NULL dereference Cyrill Gorcunov
2009-08-04 14:16   ` [tip:x86/apic] x86, ioapic: Throw " tip-bot for Cyrill Gorcunov
2009-08-05 10:55   ` tip-bot for Cyrill Gorcunov

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.