From: Long Li <longli@xxxxxxxxxxxxx> When the kernel boots with parameters restricting the number of cpus or NUMA nodes, e.g. maxcpus=X or numa=off, the vPCI driver should only set to the NUMA node to a value that is valid in the current running kernel. Signed-off-by: Long Li <longli@xxxxxxxxxxxxx> --- drivers/pci/controller/pci-hyperv.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c index fc1a29acadbb..8686343eff4c 100644 --- a/drivers/pci/controller/pci-hyperv.c +++ b/drivers/pci/controller/pci-hyperv.c @@ -1835,8 +1835,21 @@ static void hv_pci_assign_numa_node(struct hv_pcibus_device *hbus) if (!hv_dev) continue; - if (hv_dev->desc.flags & HV_PCI_DEVICE_FLAG_NUMA_AFFINITY) - set_dev_node(&dev->dev, hv_dev->desc.virtual_numa_node); + if (hv_dev->desc.flags & HV_PCI_DEVICE_FLAG_NUMA_AFFINITY) { + int cpu; + bool found_node = false; + + for_each_possible_cpu(cpu) + if (cpu_to_node(cpu) == + hv_dev->desc.virtual_numa_node) { + found_node = true; + break; + } + + if (found_node) + set_dev_node(&dev->dev, + hv_dev->desc.virtual_numa_node); + } put_pcichild(hv_dev); } -- 2.25.1