[PATCH v3 02/19] arm64: initial support for GICv3
Christoffer Dall
christoffer.dall at linaro.org
Wed May 14 09:02:23 PDT 2014
On 12 May 2014 17:54, Marc Zyngier <marc.zyngier at arm.com> wrote:
> On Fri, May 09 2014 at 3:05:22 pm BST, Christoffer Dall <christoffer.dall at linaro.org> wrote:
>> On Wed, Apr 16, 2014 at 02:39:34PM +0100, Marc Zyngier wrote:
[...]
>>> +
>>> +static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
>>> + bool force)
>>> +{
>>> + unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask);
>>> + void __iomem *reg;
>>> + int enabled;
>>> + u64 val;
>>> +
>>> + if (gic_irq_in_rdist(d))
>>> + return -EINVAL;
>>> +
>>> + /* If interrupt was enabled, disable it first */
>>> + enabled = gic_peek_irq(d, GICD_ISENABLER);
>>> + if (enabled)
>>> + gic_mask_irq(d);
>>> +
>>> + reg = gic_dist_base(d) + GICD_IROUTER + (gic_irq(d) * 8);
>>> + val = gic_mpidr_to_affinity(cpu_logical_map(cpu));
>>> +
>>> + writeq_relaxed(val, reg);
>>> +
>>> + /*
>>> + * If the interrupt was enabled, enabled it again. Otherwise,
>>> + * just wait for the distributor to have digested our changes.
>>> + */
>>> + if (enabled)
>>> + gic_unmask_irq(d);
>>> + else
>>> + gic_dist_wait_for_rwp();
>>
>> If we don't need to wait for RWP when enabling the interrupt, why do we
>> need to wait if we're not going to enable it (presumably nothing ever
>> takes effect until someone later enables the interrupt, in which case
>> the effect would be the same? no?)?
>
> We do wait on the unmask path too (see gic_poke_irq).
>
got it, thanks.
[...]
>>
>> I noticed that you removed all the dist_lock locks here. I assume there
>> was some rationale behind this, and given you can share that explanation
>> with me and address the other tiny issues:
>
> The purpose of the lock was to avoid races between mask/unmask and
> set_type (both of which use the enable registers). But given that these
> registers can operate on a single bit (set/clear operations), and that
> the kernel won't try to do both at the same time, it is safe to get rid
> of the whole locking.
>
ok, thanks.
More information about the linux-arm-kernel
mailing list