|
@@ -499,6 +499,7 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev)
|
|
{
|
|
{
|
|
struct pci_dev *nb_ht;
|
|
struct pci_dev *nb_ht;
|
|
unsigned int devfn;
|
|
unsigned int devfn;
|
|
|
|
+ u32 node;
|
|
u32 val;
|
|
u32 val;
|
|
|
|
|
|
devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0);
|
|
devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0);
|
|
@@ -507,7 +508,13 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev)
|
|
return;
|
|
return;
|
|
|
|
|
|
pci_read_config_dword(nb_ht, 0x60, &val);
|
|
pci_read_config_dword(nb_ht, 0x60, &val);
|
|
- set_dev_node(&dev->dev, val & 7);
|
|
|
|
|
|
+ node = val & 7;
|
|
|
|
+ /*
|
|
|
|
+ * Some hardware may return an invalid node ID,
|
|
|
|
+ * so check it first:
|
|
|
|
+ */
|
|
|
|
+ if (node_online(node))
|
|
|
|
+ set_dev_node(&dev->dev, node);
|
|
pci_dev_put(nb_ht);
|
|
pci_dev_put(nb_ht);
|
|
}
|
|
}
|
|
|
|
|