LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] Prevent IDE boot ops on NUMA system in mainline
@ 2008-02-11  0:35 Andi Kleen
  2008-02-11 17:33 ` Linus Torvalds
  2008-02-11 19:26 ` Bartlomiej Zolnierkiewicz
  0 siblings, 2 replies; 6+ messages in thread
From: Andi Kleen @ 2008-02-11  0:35 UTC (permalink / raw)
  To: torvalds, bzolnier, linux-ide, linux-kernel


Without this patch a Opteron test system here oopses at boot with currentg git. 

Calling to_pci_dev() on a NULL pointer gives a negative value so the following NULL 
pointer check never triggers and then an illegal address is referenced. Check the 
unadjusted original device pointer for NULL instead.

Signed-off-by: Andi Kleen <ak@suse.de>

Index: linux/include/linux/ide.h
===================================================================
--- linux.orig/include/linux/ide.h
+++ linux/include/linux/ide.h
@@ -1294,7 +1294,7 @@ static inline void ide_dump_identify(u8 
 static inline int hwif_to_node(ide_hwif_t *hwif)
 {
 	struct pci_dev *dev = to_pci_dev(hwif->dev);
-	return dev ? pcibus_to_node(dev->bus) : -1;
+	return hwif->dev ? pcibus_to_node(dev->bus) : -1;
 }
 
 static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive)

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

* Re: [PATCH] Prevent IDE boot ops on NUMA system in mainline
  2008-02-11  0:35 [PATCH] Prevent IDE boot ops on NUMA system in mainline Andi Kleen
@ 2008-02-11 17:33 ` Linus Torvalds
  2008-02-11 17:37   ` Linus Torvalds
  2008-02-11 19:03   ` Andi Kleen
  2008-02-11 19:26 ` Bartlomiej Zolnierkiewicz
  1 sibling, 2 replies; 6+ messages in thread
From: Linus Torvalds @ 2008-02-11 17:33 UTC (permalink / raw)
  To: Andi Kleen; +Cc: bzolnier, linux-ide, linux-kernel



On Mon, 11 Feb 2008, Andi Kleen wrote:
> 
> Without this patch a Opteron test system here oopses at boot with currentg git. 
> 
> Calling to_pci_dev() on a NULL pointer gives a negative value so the following NULL 
> pointer check never triggers and then an illegal address is referenced. Check the 
> unadjusted original device pointer for NULL instead.
> 
> Signed-off-by: Andi Kleen <ak@suse.de>
> 
> Index: linux/include/linux/ide.h
> ===================================================================
> --- linux.orig/include/linux/ide.h
> +++ linux/include/linux/ide.h
> @@ -1294,7 +1294,7 @@ static inline void ide_dump_identify(u8 
>  static inline int hwif_to_node(ide_hwif_t *hwif)
>  {
>  	struct pci_dev *dev = to_pci_dev(hwif->dev);
> -	return dev ? pcibus_to_node(dev->bus) : -1;
> +	return hwif->dev ? pcibus_to_node(dev->bus) : -1;
>  }

Ok, I applied this, but it causes a *lot* of noise about "unused variable 
'dev'" because pcibus_to_node() is defined to be -1 when you don't do any 
strange NUMA thing (so that "dev->bus" usage thing is never even seen by 
the compiler.

So we should probably make pcibus_to_node() be an inline function for that 
case, or just make that thing be

	return hwif->dev ?
		pcibus_to_node(to_pci_dev(hwif->dev)->bus)
	       :
		-1;

or something. Because now things are really noisy.

Preferences, anybody? Bartlomiej?

		Linus

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

* Re: [PATCH] Prevent IDE boot ops on NUMA system in mainline
  2008-02-11 17:33 ` Linus Torvalds
@ 2008-02-11 17:37   ` Linus Torvalds
  2008-02-11 19:04     ` Andi Kleen
  2008-02-11 19:03   ` Andi Kleen
  1 sibling, 1 reply; 6+ messages in thread
From: Linus Torvalds @ 2008-02-11 17:37 UTC (permalink / raw)
  To: Andi Kleen; +Cc: bzolnier, linux-ide, linux-kernel



On Mon, 11 Feb 2008, Linus Torvalds wrote:
> 
> So we should probably make pcibus_to_node() be an inline function for that 
> case

Or, we could just do the ugliest patch ever, namely

	-#define pcibus_to_node(node)   (-1)
	+#define pcibus_to_node(node)   ((int)(long)(node),-1)

Wow. It's so ugly it's almost wraps around and comes out the other sides 
and looks pretty.

		Linus

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

* Re: [PATCH] Prevent IDE boot ops on NUMA system in mainline
  2008-02-11 17:33 ` Linus Torvalds
  2008-02-11 17:37   ` Linus Torvalds
@ 2008-02-11 19:03   ` Andi Kleen
  1 sibling, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2008-02-11 19:03 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Andi Kleen, bzolnier, linux-ide, linux-kernel

On Mon, Feb 11, 2008 at 09:33:14AM -0800, Linus Torvalds wrote:
> 
> 
> On Mon, 11 Feb 2008, Andi Kleen wrote:
> > 
> > Without this patch a Opteron test system here oopses at boot with currentg git. 
> > 
> > Calling to_pci_dev() on a NULL pointer gives a negative value so the following NULL 
> > pointer check never triggers and then an illegal address is referenced. Check the 
> > unadjusted original device pointer for NULL instead.
> > 
> > Signed-off-by: Andi Kleen <ak@suse.de>
> > 
> > Index: linux/include/linux/ide.h
> > ===================================================================
> > --- linux.orig/include/linux/ide.h
> > +++ linux/include/linux/ide.h
> > @@ -1294,7 +1294,7 @@ static inline void ide_dump_identify(u8 
> >  static inline int hwif_to_node(ide_hwif_t *hwif)
> >  {
> >  	struct pci_dev *dev = to_pci_dev(hwif->dev);
> > -	return dev ? pcibus_to_node(dev->bus) : -1;
> > +	return hwif->dev ? pcibus_to_node(dev->bus) : -1;
> >  }
> 
> Ok, I applied this, but it causes a *lot* of noise about "unused variable 
> 'dev'" because pcibus_to_node() is defined to be -1 when you don't do any 
> strange NUMA thing (so that "dev->bus" usage thing is never even seen by 
> the compiler.
> 
> So we should probably make pcibus_to_node() be an inline function for that 
> case, or just make that thing be
> 
> 	return hwif->dev ?
> 		pcibus_to_node(to_pci_dev(hwif->dev)->bus)
> 	       :
> 		-1;
> 
> or something. Because now things are really noisy.

Yes sorry; I only checked NUMA builds before sending it off. 
The easiest way is probably just the traditional (void) cast
I fixed most of the topology macros while I was at it.

-Andi

---

Make topology fallback macros reference their arguments.

This avoids warnings with unreferenced variables in the !NUMA case.

Signed-off-by: Andi Kleen <ak@suse.de>

Index: linux/include/asm-generic/topology.h
===================================================================
--- linux.orig/include/asm-generic/topology.h
+++ linux/include/asm-generic/topology.h
@@ -30,19 +30,19 @@
 /* Other architectures wishing to use this simple topology API should fill
    in the below functions as appropriate in their own <asm/topology.h> file. */
 #ifndef cpu_to_node
-#define cpu_to_node(cpu)	(0)
+#define cpu_to_node(cpu)	((void)(cpu),0)
 #endif
 #ifndef parent_node
-#define parent_node(node)	(0)
+#define parent_node(node)	((void)(node),0)
 #endif
 #ifndef node_to_cpumask
-#define node_to_cpumask(node)	(cpu_online_map)
+#define node_to_cpumask(node)	((void)node, cpu_online_map)
 #endif
 #ifndef node_to_first_cpu
-#define node_to_first_cpu(node)	(0)
+#define node_to_first_cpu(node)	((void)(node),0)
 #endif
 #ifndef pcibus_to_node
-#define pcibus_to_node(node)	(-1)
+#define pcibus_to_node(bus)	((void)(bus), -1)
 #endif
 
 #ifndef pcibus_to_cpumask

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

* Re: [PATCH] Prevent IDE boot ops on NUMA system in mainline
  2008-02-11 17:37   ` Linus Torvalds
@ 2008-02-11 19:04     ` Andi Kleen
  0 siblings, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2008-02-11 19:04 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Andi Kleen, bzolnier, linux-ide, linux-kernel

On Mon, Feb 11, 2008 at 09:37:18AM -0800, Linus Torvalds wrote:
> 
> 
> On Mon, 11 Feb 2008, Linus Torvalds wrote:
> > 
> > So we should probably make pcibus_to_node() be an inline function for that 
> > case
> 
> Or, we could just do the ugliest patch ever, namely
> 
> 	-#define pcibus_to_node(node)   (-1)
> 	+#define pcibus_to_node(node)   ((int)(long)(node),-1)
> 
> Wow. It's so ugly it's almost wraps around and comes out the other sides 
> and looks pretty.

(void)arg, ... is better. Trick originally from Jan Beulich I think
(his code is always a good source for useful new C tricks) 

-Andi


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

* Re: [PATCH] Prevent IDE boot ops on NUMA system in mainline
  2008-02-11  0:35 [PATCH] Prevent IDE boot ops on NUMA system in mainline Andi Kleen
  2008-02-11 17:33 ` Linus Torvalds
@ 2008-02-11 19:26 ` Bartlomiej Zolnierkiewicz
  1 sibling, 0 replies; 6+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2008-02-11 19:26 UTC (permalink / raw)
  To: Andi Kleen; +Cc: torvalds, linux-ide, linux-kernel

On Monday 11 February 2008, Andi Kleen wrote:
> 
> Without this patch a Opteron test system here oopses at boot with currentg git. 
> 
> Calling to_pci_dev() on a NULL pointer gives a negative value so the following NULL 
> pointer check never triggers and then an illegal address is referenced. Check the 
> unadjusted original device pointer for NULL instead.
> 
> Signed-off-by: Andi Kleen <ak@suse.de>

Thanks Andi!

This may explain+resolve ide_generic OOPS-es reported by Pavel/Kamalesh/Nish.

[ I also see that Linus has already merged the patch and you've followed
  up on pcibus_to_node() issue so there is nothing left for me to do...

  I really love when things turn out like this... ;) ]

> Index: linux/include/linux/ide.h
> ===================================================================
> --- linux.orig/include/linux/ide.h
> +++ linux/include/linux/ide.h
> @@ -1294,7 +1294,7 @@ static inline void ide_dump_identify(u8 
>  static inline int hwif_to_node(ide_hwif_t *hwif)
>  {
>  	struct pci_dev *dev = to_pci_dev(hwif->dev);
> -	return dev ? pcibus_to_node(dev->bus) : -1;
> +	return hwif->dev ? pcibus_to_node(dev->bus) : -1;
>  }
>  
>  static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive)

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

end of thread, other threads:[~2008-02-11 19:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-11  0:35 [PATCH] Prevent IDE boot ops on NUMA system in mainline Andi Kleen
2008-02-11 17:33 ` Linus Torvalds
2008-02-11 17:37   ` Linus Torvalds
2008-02-11 19:04     ` Andi Kleen
2008-02-11 19:03   ` Andi Kleen
2008-02-11 19:26 ` Bartlomiej Zolnierkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).