forked from luck/tmp_suning_uos_patched
IB/hfi1: Fix memory leak in exception path in get_irq_affinity()
When IRQ affinity is set and the interrupt type is unknown, a cpu mask allocated within the function is never freed. Fix this memory leak by allocating memory within the scope where it is used. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: Sebastian Sanchez <sebastian.sanchez@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
e9777ad439
commit
59482a1491
|
@ -412,7 +412,6 @@ static void hfi1_cleanup_sdma_notifier(struct hfi1_msix_entry *msix)
|
|||
static int get_irq_affinity(struct hfi1_devdata *dd,
|
||||
struct hfi1_msix_entry *msix)
|
||||
{
|
||||
int ret;
|
||||
cpumask_var_t diff;
|
||||
struct hfi1_affinity_node *entry;
|
||||
struct cpu_mask_set *set = NULL;
|
||||
|
@ -424,10 +423,6 @@ static int get_irq_affinity(struct hfi1_devdata *dd,
|
|||
extra[0] = '\0';
|
||||
cpumask_clear(&msix->mask);
|
||||
|
||||
ret = zalloc_cpumask_var(&diff, GFP_KERNEL);
|
||||
if (!ret)
|
||||
return -ENOMEM;
|
||||
|
||||
entry = node_affinity_lookup(dd->node);
|
||||
|
||||
switch (msix->type) {
|
||||
|
@ -458,6 +453,9 @@ static int get_irq_affinity(struct hfi1_devdata *dd,
|
|||
* finds its CPU here.
|
||||
*/
|
||||
if (cpu == -1 && set) {
|
||||
if (!zalloc_cpumask_var(&diff, GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
|
||||
if (cpumask_equal(&set->mask, &set->used)) {
|
||||
/*
|
||||
* We've used up all the CPUs, bump up the generation
|
||||
|
@ -469,6 +467,8 @@ static int get_irq_affinity(struct hfi1_devdata *dd,
|
|||
cpumask_andnot(diff, &set->mask, &set->used);
|
||||
cpu = cpumask_first(diff);
|
||||
cpumask_set_cpu(cpu, &set->used);
|
||||
|
||||
free_cpumask_var(diff);
|
||||
}
|
||||
|
||||
cpumask_set_cpu(cpu, &msix->mask);
|
||||
|
@ -482,7 +482,6 @@ static int get_irq_affinity(struct hfi1_devdata *dd,
|
|||
hfi1_setup_sdma_notifier(msix);
|
||||
}
|
||||
|
||||
free_cpumask_var(diff);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user