]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
x86: Fix Xen boot on 8-node AMD machines
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 23 May 2008 10:16:44 +0000 (11:16 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 23 May 2008 10:16:44 +0000 (11:16 +0100)
In xen/arch/x86/cpu/amd.c the function disable_c1_ramping iterates
over the northbridges using NR_CPUS as an upper bound for the number
of nodes. If there are no more northbridges found, it stops iterating.
Sadly it just adds the northbridge number to 0x18 and uses this as a
PCI device number, so probing the 9th northbridge on an 8 node system
will be caught by the newly inserted assertion in pci_conf_read in current
unstable. We fix this by first querying the number of nodes from the
first northbridge to avoid the overflow.

Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Verified by Mark.Johnson@sun.com
xen-unstable changeset:   17712:5cc5b9c37c6d429502e75536822810219b23b033
xen-unstable date:        Fri May 23 11:15:19 2008 +0100

xen/arch/x86/cpu/amd.c

index 909a73f3fa8b11778dcd330e702d9e7868a01b92..5e68174a79bcfdd9509a864325ddfe77c8ca14d7 100644 (file)
@@ -86,9 +86,11 @@ static void pci_write_byte(u32 bus, u32 dev, u32 fn, u32 reg, u8 val)
 static void disable_c1_ramping(void) 
 {
        u8 pmm7;
-       int node;
+       int node, nr_nodes;
 
-       for (node=0; node < NR_CPUS; node++) {
+       /* Read the number of nodes from the first Northbridge. */
+       nr_nodes = ((pci_read_byte(0, 0x18, 0x0, 0x60)>>4)&0x07)+1;
+       for (node = 0; node < nr_nodes; node++) {
                /* PMM7: bus=0, dev=0x18+node, function=0x3, register=0x87. */
                pmm7 = pci_read_byte(0, 0x18+node, 0x3, 0x87);
                /* Invalid read means we've updated every Northbridge. */