diff options
Diffstat (limited to 'drivers/infiniband/hw/hfi1/affinity.c')
-rw-r--r-- | drivers/infiniband/hw/hfi1/affinity.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c index 79575ee873f2..0566393e5aba 100644 --- a/drivers/infiniband/hw/hfi1/affinity.c +++ b/drivers/infiniband/hw/hfi1/affinity.c | |||
@@ -47,7 +47,6 @@ | |||
47 | #include <linux/topology.h> | 47 | #include <linux/topology.h> |
48 | #include <linux/cpumask.h> | 48 | #include <linux/cpumask.h> |
49 | #include <linux/module.h> | 49 | #include <linux/module.h> |
50 | #include <linux/cpumask.h> | ||
51 | 50 | ||
52 | #include "hfi.h" | 51 | #include "hfi.h" |
53 | #include "affinity.h" | 52 | #include "affinity.h" |
@@ -682,7 +681,7 @@ int hfi1_set_sdma_affinity(struct hfi1_devdata *dd, const char *buf, | |||
682 | size_t count) | 681 | size_t count) |
683 | { | 682 | { |
684 | struct hfi1_affinity_node *entry; | 683 | struct hfi1_affinity_node *entry; |
685 | struct cpumask mask; | 684 | cpumask_var_t mask; |
686 | int ret, i; | 685 | int ret, i; |
687 | 686 | ||
688 | spin_lock(&node_affinity.lock); | 687 | spin_lock(&node_affinity.lock); |
@@ -692,19 +691,24 @@ int hfi1_set_sdma_affinity(struct hfi1_devdata *dd, const char *buf, | |||
692 | if (!entry) | 691 | if (!entry) |
693 | return -EINVAL; | 692 | return -EINVAL; |
694 | 693 | ||
695 | ret = cpulist_parse(buf, &mask); | 694 | ret = zalloc_cpumask_var(&mask, GFP_KERNEL); |
695 | if (!ret) | ||
696 | return -ENOMEM; | ||
697 | |||
698 | ret = cpulist_parse(buf, mask); | ||
696 | if (ret) | 699 | if (ret) |
697 | return ret; | 700 | goto out; |
698 | 701 | ||
699 | if (!cpumask_subset(&mask, cpu_online_mask) || cpumask_empty(&mask)) { | 702 | if (!cpumask_subset(mask, cpu_online_mask) || cpumask_empty(mask)) { |
700 | dd_dev_warn(dd, "Invalid CPU mask\n"); | 703 | dd_dev_warn(dd, "Invalid CPU mask\n"); |
701 | return -EINVAL; | 704 | ret = -EINVAL; |
705 | goto out; | ||
702 | } | 706 | } |
703 | 707 | ||
704 | mutex_lock(&sdma_affinity_mutex); | 708 | mutex_lock(&sdma_affinity_mutex); |
705 | /* reset the SDMA interrupt affinity details */ | 709 | /* reset the SDMA interrupt affinity details */ |
706 | init_cpu_mask_set(&entry->def_intr); | 710 | init_cpu_mask_set(&entry->def_intr); |
707 | cpumask_copy(&entry->def_intr.mask, &mask); | 711 | cpumask_copy(&entry->def_intr.mask, mask); |
708 | /* | 712 | /* |
709 | * Reassign the affinity for each SDMA interrupt. | 713 | * Reassign the affinity for each SDMA interrupt. |
710 | */ | 714 | */ |
@@ -720,8 +724,9 @@ int hfi1_set_sdma_affinity(struct hfi1_devdata *dd, const char *buf, | |||
720 | if (ret) | 724 | if (ret) |
721 | break; | 725 | break; |
722 | } | 726 | } |
723 | |||
724 | mutex_unlock(&sdma_affinity_mutex); | 727 | mutex_unlock(&sdma_affinity_mutex); |
728 | out: | ||
729 | free_cpumask_var(mask); | ||
725 | return ret ? ret : strnlen(buf, PAGE_SIZE); | 730 | return ret ? ret : strnlen(buf, PAGE_SIZE); |
726 | } | 731 | } |
727 | 732 | ||