[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Dom0 crash with old style AMD NUMA detection



On Mon, Sep 17, 2012 at 09:29:22AM +0200, Andre Przywara wrote:
> On 09/14/2012 08:58 PM, Konrad Rzeszutek Wilk wrote:
> >>>>[    0.000000] Kernel panic - not syncing: Attempted to kill the idle 
> >>>>task!
> >>>>(XEN) Domain 0 crashed: 'noreboot' set - not rebooting.
> >>>>
> >>>>
> >>>>
> >>>>The obvious solution would be to explicitly deny northbridge scanning
> >>>>when running as Dom0, though I am not sure how to implement this without
> >>>>upsetting the other kernel folks about "that crappy Xen thing" again ;-)
> >>>
> >>>Heh.
> >>>Is there a numa=0 option that could be used to override it to turn it
> >>>off?
> >>
> >>Not compile tested.. but was thinking something like this:
> >
> >ping?
> 
> That looks good to me - at least for the time being.

OK, can I've your Tested-by/Acked-by on it pls?

> I just want to check how this interacts with upcoming Dom0 NUMA
> support. It wouldn't be too clever if we deliberately disable NUMA

We can always revert this patch in future versions of Linux.
> and future Xen version will allow us to use it. So let me check if I
> can confine this turn-off to the fallback K8 northbridge reading.

This potentially could work, but I would prefer to not do it for 3.6.

diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index a4790bf..b4edce4 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -17,6 +17,7 @@
 #include <asm/e820.h>
 #include <asm/setup.h>
 #include <asm/acpi.h>
+#include <asm/numa.h>
 #include <asm/xen/hypervisor.h>
 #include <asm/xen/hypercall.h>
 
@@ -483,7 +484,32 @@ void __cpuinit xen_enable_sysenter(void)
        if(ret != 0)
                setup_clear_cpu_cap(sysenter_feature);
 }
+#ifdef CONFIG_AMD_NUMA
+int __cpuinit xen_amd_k8(void)
+{
+       int num;
+
+       if (boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
+               return -ENOENT;
+
+       for (num = 0; num < 32; num++) {
+               u32 header;
+
+               header = read_pci_config(0, num, 0, 0x00);
+               if (header != (PCI_VENDOR_ID_AMD | (0x1100<<16)) &&
+                       header != (PCI_VENDOR_ID_AMD | (0x1200<<16)) &&
+                       header != (PCI_VENDOR_ID_AMD | (0x1300<<16)))
+                       continue;
 
+               header = read_pci_config(0, num, 1, 0x00);
+               if (header != (PCI_VENDOR_ID_AMD | (0x1101<<16)) &&
+                       header != (PCI_VENDOR_ID_AMD | (0x1201<<16)) &&
+                       header != (PCI_VENDOR_ID_AMD | (0x1301<<16)))
+                       continue;
+               return num;
+       }
+       return -ENOENT;
+#endif
 void __cpuinit xen_enable_syscall(void)
 {
 #ifdef CONFIG_X86_64
@@ -542,4 +568,8 @@ void __init xen_arch_setup(void)
        disable_cpufreq();
        WARN_ON(set_pm_idle_to_default());
        fiddle_vdso();
+#ifdef CONFIG_AMD_NUMA
+       if (xen_amd_k8() >= 0)
+               numa_off=1;
+#endif
 }

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.