[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] kexec: Add spinlock for the whole hypercall
On Tue, Apr 11, 2017 at 01:46:37AM -0600, Jan Beulich wrote: > >>> On 10.04.17 at 21:44, <eric.devolder@xxxxxxxxxx> wrote: > > Please don't forget Cc-ing the maintainer(s) of the code being modified. > > > @@ -1187,12 +1182,22 @@ static int do_kexec_op_internal(unsigned long op, > > XEN_GUEST_HANDLE_PARAM(void) uarg, > > bool_t compat) > > { > > + static DEFINE_SPINLOCK(kexec_lock); > > int ret = -EINVAL; > > > > ret = xsm_kexec(XSM_PRIV); > > if ( ret ) > > return ret; > > > > + /* > > + * Because we write directly to the reserved memory > > + * region when loading crash kernels we need a spinlock here to > > + * prevent multiple crash kernels from attempting to load > > + * simultaneously, and to prevent a crash kernel from loading > > + * over the top of a in use crash kernel. > > + */ > > + spin_lock(&kexec_lock); > > + > > switch ( op ) > > { > > case KEXEC_CMD_kexec_get_range: > > @@ -1227,6 +1232,8 @@ static int do_kexec_op_internal(unsigned long op, > > break; > > } > > > > + spin_unlock(&kexec_lock); > > + > > return ret; > > } > > How long can a kexec-op take? Are you putting systems at risk of > the watchdog firing? Even if you don't, you put all sorts of > operations inside a lock now which preferably should run outside > of atomic context (memory allocation, guest memory accesses). Facepalm! I forgot about that. > If such a global locking approach is really necessary (i.e. if we Potentially no but otherwise we will further complicate sufficiently complicated code now. So, I would like to have one sync place. > can't expect the - privileged - caller to synchronize calls properly), > wouldn't it be better to handle this with a static state variable, > which gets checked/set atomically, and which if already set simply > leads to a continuation being arranged for? Do you think about something like that: if ( test_bit(KEXEC_FLAG_IN_PROGRESS, &kexec_flags) && hypercall_preempt_check() ) return hypercall_create_continuation(__HYPERVISOR_kexec_op, "h", uarg); > Furthermore - are there problems also with e.g. loading a > default and a crash kernel in parallel? I.e. aren't you doing more No it should not be any issue there. > synchronization than really necessary? I do not think that it is very big issue here but if you wish we can fix it that too. Daniel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |