[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC v4 1/2] x86/xen: add xen_is_preemptible_hypercall()
On 23/01/15 00:29, Luis R. Rodriguez wrote: > From: "Luis R. Rodriguez" <mcgrof@xxxxxxxx> > > On kernels with voluntary or no preemption we can run > into situations where a hypercall issued through userspace > will linger around as it addresses sub-operatiosn in kernel > context (multicalls). Such operations can trigger soft lockup > detection. > > We want to address a way to let the kernel voluntarily preempt > such calls even on non preempt kernels, to address this we first > need to distinguish which hypercalls fall under this category. > This implements xen_is_preemptible_hypercall() which lets us do > just that by adding a secondary hypercall page, calls made via > the new page may be preempted. [...] > --- a/arch/x86/include/asm/xen/hypercall.h > +++ b/arch/x86/include/asm/xen/hypercall.h > @@ -84,6 +84,22 @@ > > extern struct { char _entry[32]; } hypercall_page[]; > > +#ifndef CONFIG_PREEMPT > +extern struct { char _entry[32]; } preemptible_hypercall_page[]; > + > +static inline bool xen_is_preemptible_hypercall(struct pt_regs *regs) > +{ > + return !user_mode_vm(regs) && > + regs->ip >= (unsigned long)preemptible_hypercall_page && > + regs->ip < (unsigned long)preemptible_hypercall_page + > PAGE_SIZE; I think you can optimize this to: return (regs->ip >> PAGE_SHIFT) == preemptible_hypercall_pfn && !user_mode_vm(regs); David _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |