lkml.org 
[lkml]   [2009]   [Apr]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] pci: derive nearby CPUs from device's instead of bus' NUMA information
    In case of AMD CPU northbridge functions this NUMA information might
    differ.

    Here is an example from a 4-socket system.

    Currently Linux shows

    root@hagen:/sys/devices/pci0000:00/0000:00:1a.4# cat numa_node
    0
    root@hagen:/sys/devices/pci0000:00/0000:00:1a.4# cat local_cpu*
    0-3
    00000000,0000000f

    which is not correct for northbridge functions as the local CPUs
    are those of the same socket.

    With this patch and a quirk for AMD CPU NB functions Linux can
    do better and correctly show

    root@hagen:/sys/devices/pci0000:00/0000:00:1a.4# cat numa_node
    2
    root@hagen:/sys/devices/pci0000:00/0000:00:1a.4# cat local_cpu*
    8-11
    00000000,00000f00

    Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com>
    ---
    drivers/pci/pci-sysfs.c | 8 ++++++++
    1 files changed, 8 insertions(+), 0 deletions(-)

    The quirk for AMD CPU NB functions is contained in another patch
    that I'll send to x86-maintainers for inclusion into tip tree.

    Please apply.

    Thanks,
    Andreas

    diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
    index a7eb1b4..9360f3d 100644
    --- a/drivers/pci/pci-sysfs.c
    +++ b/drivers/pci/pci-sysfs.c
    @@ -74,7 +74,11 @@ static ssize_t local_cpus_show(struct device *dev,
    const struct cpumask *mask;
    int len;

    +#ifdef CONFIG_NUMA
    + mask = cpumask_of_node(dev_to_node(dev));
    +#else
    mask = cpumask_of_pcibus(to_pci_dev(dev)->bus);
    +#endif
    len = cpumask_scnprintf(buf, PAGE_SIZE-2, mask);
    buf[len++] = '\n';
    buf[len] = '\0';
    @@ -88,7 +92,11 @@ static ssize_t local_cpulist_show(struct device *dev,
    const struct cpumask *mask;
    int len;

    +#ifdef CONFIG_NUMA
    + mask = cpumask_of_node(dev_to_node(dev));
    +#else
    mask = cpumask_of_pcibus(to_pci_dev(dev)->bus);
    +#endif
    len = cpulist_scnprintf(buf, PAGE_SIZE-2, mask);
    buf[len++] = '\n';
    buf[len] = '\0';
    --
    1.6.2




    \
     
     \ /
      Last update: 2009-04-17 12:05    [W:0.024 / U:0.788 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site