Messages in this thread | | | Subject | Re: [RFC v2 12/14] arm64/lib: asid: Allow user to update the context under the lock | From | Julien Grall <> | Date | Mon, 15 Jul 2019 15:38:42 +0100 |
| |
On 03/07/2019 18:35, James Morse wrote: > Hi Julien,
Hi James,
> On 20/06/2019 14:06, Julien Grall wrote: >> Some users of the ASID allocator (e.g VMID) will require to update the >> context when a new ASID is generated. This has to be protected by a lock >> to prevent concurrent modification. >> >> Rather than introducing yet another lock, it is possible to re-use the >> allocator lock for that purpose. This patch introduces a new callback >> that will be call when updating the context. > > You're using this later in the series to mask out the generation from the atomic64 to > leave just the vmid.
You are right.
> > Where does this concurrent modification happen? The value is only written if we have a > rollover, and while its active the only bits that could change are the generation. > (subsequent vCPUs that take the slow path for the same VM will see the updated generation > and skip the new_context call) > > If we did the generation filtering in update_vmid() after the call to > asid_check_context(), what would go wrong? > It happens more often than is necessary and would need a WRITE_ONCE(), but the vmid can't > change until we become preemptible and another vCPU gets a chance to make its vmid active.
I think I was over cautious. Pre-filtering after asid_check_context() is equally fine as long as update_vttbr() is called from preemptible context.
Cheers,
-- Julien Grall
| |