diff options
author | Shannon Nelson <snelson@pensando.io> | 2020-03-06 17:04:03 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-03-09 19:34:04 -0700 |
commit | b7f55b81f2ac40e52c5a56e22c80488eac531c91 (patch) | |
tree | bf522e46e520e5edf6a66116ba0d158a1a558de9 /drivers/net/ethernet/pensando | |
parent | 5dca69c425bcd9b6a9295156e2ba716e42a78557 (diff) | |
download | linux-b7f55b81f2ac40e52c5a56e22c80488eac531c91.tar.gz |
ionic: improve irq numa locality
Spreading the interrupts across the CPU cores is good for load
balancing, but not necessarily as good when using a CPU/core
that is not part of the NUMA local CPU. If it can be localized,
the kernel's cpumask_local_spread() service will pick a core
that is on the node close to the PCI device.
Signed-off-by: Shannon Nelson <snelson@pensando.io>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/pensando')
-rw-r--r-- | drivers/net/ethernet/pensando/ionic/ionic_lif.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c index 1b7e18fe83db..7df49b433ae5 100644 --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c @@ -424,8 +424,9 @@ static int ionic_qcq_alloc(struct ionic_lif *lif, unsigned int type, ionic_intr_mask_assert(idev->intr_ctrl, new->intr.index, IONIC_INTR_MASK_SET); - new->intr.cpu = new->intr.index % num_online_cpus(); - if (cpu_online(new->intr.cpu)) + new->intr.cpu = cpumask_local_spread(new->intr.index, + dev_to_node(dev)); + if (new->intr.cpu != -1) cpumask_set_cpu(new->intr.cpu, &new->intr.affinity_mask); } else { |