]> xenbits.xensource.com Git - people/sstabellini/xen-unstable.git/.git/commitdiff
xen/arm: Misc improvements to do_common_cpu_on()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 24 Apr 2019 18:10:58 +0000 (19:10 +0100)
committerWei Liu <wei.liu2@citrix.com>
Mon, 13 May 2019 10:28:03 +0000 (11:28 +0100)
 * Use domain_vcpu() rather than opencoding the lookup.  Amongst other things,
   domain_vcpu() is spectre-v1-safe.
 * Unlock the domain immediately after arch_set_info_guest() completes.  There
   is no need for free_vcpu_guest_context() to be within the critical region,
   and moving the call simplifies the error case.

No practical change in functionality.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Julien Grall <julien.grall@arm.com>
xen/arch/arm/vpsci.c

index 9f4e5b8844ae88b05c904b5a382f4935f2aec345..c1e250be59676fc41e4f52c2a1f45c84f4d6c5ae 100644 (file)
@@ -33,7 +33,7 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
 
     vcpuid = vaffinity_to_vcpuid(target_cpu);
 
-    if ( vcpuid >= d->max_vcpus || (v = d->vcpu[vcpuid]) == NULL )
+    if ( (v = domain_vcpu(d, vcpuid)) == NULL )
         return PSCI_INVALID_PARAMETERS;
 
     /* THUMB set is not allowed with 64-bit domain */
@@ -82,14 +82,12 @@ static int do_common_cpu_on(register_t target_cpu, register_t entry_point,
 
     domain_lock(d);
     rc = arch_set_info_guest(v, ctxt);
+    domain_unlock(d);
+
     free_vcpu_guest_context(ctxt);
 
     if ( rc < 0 )
-    {
-        domain_unlock(d);
         return PSCI_DENIED;
-    }
-    domain_unlock(d);
 
     vcpu_wake(v);