Messages in this thread | | | Date | Wed, 26 Sep 2012 13:30:02 +0530 | From | "Srivatsa S. Bhat" <> | Subject | Re: [PATCH] x86/fixup_irq: Clean the offlining CPU from the irq affinity mask |
| |
On 09/26/2012 12:22 PM, Liu, Chuansheng wrote: >>> + } else if (cpumask_test_cpu(cpu, data->affinity)) >>> + cpumask_clear_cpu(cpu, data->affinity); >>> >> >> You meant to use 'affinity' (instead of data->affinity) in the above 2 statements >> right? Note that we do chip->irq_set_affinity(data, affinity, true); further down. >> > > Yes, I have noticed it, used data->affinity here is just for avoiding compile warning. > in fact affinity == data->affinity, but affinity pointer is const type, > And cpumask_clear_cpu needs non-const type,so here I am using data->affinity, > instead of changing code "const struct cpumask *affinity;" >
Hmm.. Then what happens to error handling in the case that you can't set the affinity?
ie., if we take the 'else' branch in: if (chip->irq_set_affinity) chip->irq_set_affinity(data, affinity, true); else if (!(warned++)) set_affinity = 0;
In that case, we would end up with an incorrect data->affinity right?
Btw, on a slightly different note, I'm also rather surprised that the above code doesn't care about the return value of chip->irq_set_affinity() .. Shouldn't we warn if that fails?
Regards, Srivatsa S. Bhat
| |