Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torvalds/linux.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Habets <habetsm.xilinx@gmail.com>2022-03-29 19:07:49 +0300
committerJakub Kicinski <kuba@kernel.org>2022-03-30 22:08:58 +0300
commitc9ad266bbef58dcbb6e74a6dbc5c4c2ed166e9b7 (patch)
tree5c63e1ffe9dbe0c2d815368467fc792baee47801 /drivers/net
parent8f0588e80e33273c2fa219da4622affab0cdd22f (diff)
sfc: Avoid NULL pointer dereference on systems without numa awareness
On such systems cpumask_of_node() returns NULL, which bitmap operations are not happy with. Fixes: c265b569a45f ("sfc: default config to 1 channel/core in local NUMA node only") Fixes: 09a99ab16c60 ("sfc: set affinity hints in local NUMA node only") Signed-off-by: Martin Habets <habetsm.xilinx@gmail.com> Reviewed-by: Íñigo Huguet <ihuguet@redhat.com> Link: https://lore.kernel.org/r/164857006953.8140.3265568858101821256.stgit@palantir17.mph.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/sfc/efx_channels.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/net/ethernet/sfc/efx_channels.c b/drivers/net/ethernet/sfc/efx_channels.c
index d6fdcdc530ca..f9064532beb6 100644
--- a/drivers/net/ethernet/sfc/efx_channels.c
+++ b/drivers/net/ethernet/sfc/efx_channels.c
@@ -91,11 +91,9 @@ static unsigned int count_online_cores(struct efx_nic *efx, bool local_node)
}
cpumask_copy(filter_mask, cpu_online_mask);
- if (local_node) {
- int numa_node = pcibus_to_node(efx->pci_dev->bus);
-
- cpumask_and(filter_mask, filter_mask, cpumask_of_node(numa_node));
- }
+ if (local_node)
+ cpumask_and(filter_mask, filter_mask,
+ cpumask_of_pcibus(efx->pci_dev->bus));
count = 0;
for_each_cpu(cpu, filter_mask) {
@@ -386,8 +384,7 @@ int efx_probe_interrupts(struct efx_nic *efx)
#if defined(CONFIG_SMP)
void efx_set_interrupt_affinity(struct efx_nic *efx)
{
- int numa_node = pcibus_to_node(efx->pci_dev->bus);
- const struct cpumask *numa_mask = cpumask_of_node(numa_node);
+ const struct cpumask *numa_mask = cpumask_of_pcibus(efx->pci_dev->bus);
struct efx_channel *channel;
unsigned int cpu;