diff options
Diffstat (limited to 'drivers/net/sfc/efx.c')
| -rw-r--r-- | drivers/net/sfc/efx.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index ab0e09bf154d..847e9bb0098f 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
| @@ -854,20 +854,27 @@ static void efx_fini_io(struct efx_nic *efx) | |||
| 854 | * interrupts across them. */ | 854 | * interrupts across them. */ |
| 855 | static int efx_wanted_rx_queues(void) | 855 | static int efx_wanted_rx_queues(void) |
| 856 | { | 856 | { |
| 857 | cpumask_t core_mask; | 857 | cpumask_var_t core_mask; |
| 858 | int count; | 858 | int count; |
| 859 | int cpu; | 859 | int cpu; |
| 860 | 860 | ||
| 861 | cpus_clear(core_mask); | 861 | if (!alloc_cpumask_var(&core_mask, GFP_KERNEL)) { |
| 862 | printk(KERN_WARNING | ||
| 863 | "efx.c: allocation failure, irq balancing hobbled\n"); | ||
| 864 | return 1; | ||
| 865 | } | ||
| 866 | |||
| 867 | cpumask_clear(core_mask); | ||
| 862 | count = 0; | 868 | count = 0; |
| 863 | for_each_online_cpu(cpu) { | 869 | for_each_online_cpu(cpu) { |
| 864 | if (!cpu_isset(cpu, core_mask)) { | 870 | if (!cpumask_test_cpu(cpu, core_mask)) { |
| 865 | ++count; | 871 | ++count; |
| 866 | cpus_or(core_mask, core_mask, | 872 | cpumask_or(core_mask, core_mask, |
| 867 | topology_core_siblings(cpu)); | 873 | topology_core_cpumask(cpu)); |
| 868 | } | 874 | } |
| 869 | } | 875 | } |
| 870 | 876 | ||
| 877 | free_cpumask_var(core_mask); | ||
| 871 | return count; | 878 | return count; |
| 872 | } | 879 | } |
| 873 | 880 | ||
