diff options
| -rw-r--r-- | arch/x86/kernel/quirks.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/x86/kernel/quirks.c b/arch/x86/kernel/quirks.c index 6c3b2c6fd772..18093d7498f0 100644 --- a/arch/x86/kernel/quirks.c +++ b/arch/x86/kernel/quirks.c | |||
| @@ -499,6 +499,7 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev) | |||
| 499 | { | 499 | { |
| 500 | struct pci_dev *nb_ht; | 500 | struct pci_dev *nb_ht; |
| 501 | unsigned int devfn; | 501 | unsigned int devfn; |
| 502 | u32 node; | ||
| 502 | u32 val; | 503 | u32 val; |
| 503 | 504 | ||
| 504 | devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); | 505 | devfn = PCI_DEVFN(PCI_SLOT(dev->devfn), 0); |
| @@ -507,7 +508,13 @@ static void __init quirk_amd_nb_node(struct pci_dev *dev) | |||
| 507 | return; | 508 | return; |
| 508 | 509 | ||
| 509 | pci_read_config_dword(nb_ht, 0x60, &val); | 510 | pci_read_config_dword(nb_ht, 0x60, &val); |
| 510 | set_dev_node(&dev->dev, val & 7); | 511 | node = val & 7; |
| 512 | /* | ||
| 513 | * Some hardware may return an invalid node ID, | ||
| 514 | * so check it first: | ||
| 515 | */ | ||
| 516 | if (node_online(node)) | ||
| 517 | set_dev_node(&dev->dev, node); | ||
| 511 | pci_dev_put(nb_ht); | 518 | pci_dev_put(nb_ht); |
| 512 | } | 519 | } |
| 513 | 520 | ||
