guest_from_compat_handle(data, op->u.microcode.data);
- /*
- * alloc_vcpu() will access data which is modified during
- * microcode update
- */
- while ( !spin_trylock(&vcpu_alloc_lock) )
- {
- if ( hypercall_preempt_check() )
- {
- ret = hypercall_create_continuation(
- __HYPERVISOR_platform_op, "h", u_xenpf_op);
- goto out;
- }
- }
-
ret = microcode_update(
guest_handle_to_param(data, const_void),
op->u.microcode.length);
- spin_unlock(&vcpu_alloc_lock);
}
break;
#include <xsm/xsm.h>
static DEFINE_SPINLOCK(domctl_lock);
-DEFINE_SPINLOCK(vcpu_alloc_lock);
static int bitmap_to_xenctl_bitmap(struct xenctl_bitmap *xenctl_bitmap,
const unsigned long *bitmap,
/* Needed, for example, to ensure writable p.t. state is synced. */
domain_pause(d);
- /*
- * Certain operations (e.g. CPU microcode updates) modify data which is
- * used during VCPU allocation/initialization
- */
- while ( !spin_trylock(&vcpu_alloc_lock) )
- {
- if ( hypercall_preempt_check() )
- {
- ret = hypercall_create_continuation(
- __HYPERVISOR_domctl, "h", u_domctl);
- goto maxvcpu_out_novcpulock;
- }
- }
-
ret = -ENOMEM;
online = cpupool_domain_cpumask(d);
ret = 0;
maxvcpu_out:
- spin_unlock(&vcpu_alloc_lock);
-
- maxvcpu_out_novcpulock:
domain_unpause(d);
break;
}
int arch_vcpu_reset(struct vcpu *);
-extern spinlock_t vcpu_alloc_lock;
bool_t domctl_lock_acquire(void);
void domctl_lock_release(void);