[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC v1 55/74] xen/pvshim: forward evtchn ops between L0 Xen and L2 DomU
On Mon, Jan 08, 2018 at 09:05:40AM -0700, Jan Beulich wrote: > >>> On 04.01.18 at 14:06, <wei.liu2@xxxxxxxxxx> wrote: > > + unsigned long evtchn = xchg(&XEN_shared_info->evtchn_pending[l1], > > 0); > > + > > + __clear_bit(l1, &pending); > > + evtchn &= ~XEN_shared_info->evtchn_mask[l1]; > > + while ( evtchn ) > > + { > > + unsigned int port = ffsl(evtchn) - 1; > > + > > + __clear_bit(port, &evtchn); > > + port += l1 * BITS_PER_LONG; > > What about a 32-bit client? If that's not intended to be supported, > building of such a guest should be prevented (in dom0_build.c). 32bit client? You mean building a shim that runs in 32bit mode? If so I haven't really through of it, but in any case BITS_PER_LOG would be OK also in that case? > > + \ > > + if ( copy_from_guest(&op, arg, 1) != 0 ) \ > > + return -EFAULT; \ > > + \ > > + rc = xen_hypercall_event_channel_op(EVTCHNOP_##cmd, &op); \ > > + if ( rc ) \ > > + break; \ > > + \ > > + spin_lock(&d->event_lock); \ > > Would the lock better be acquired already before the hypercall > above? I'm not sure I see your point here, certainly L0 already must have it's own locking. AFAICT the shim just needs to lock event_lock when fiddling with event channel data of the guest. > > + case EVTCHNOP_unmask: { > > + struct evtchn_unmask unmask; > > + > > + if ( copy_from_guest(&unmask, arg, 1) != 0 ) > > + return -EFAULT; > > + > > + /* Unmask is handled in L1 */ > > + rc = evtchn_unmask(unmask.port); > > + > > + break; > > + } > > Is this really sufficient, without handing anything through to L0? > Perhaps it's fine as long as there's no pass-through support here. For the unmask operation? I think so, if there was a pending event the shim will already take care of injecting it to the guest. > > @@ -1030,6 +1055,11 @@ long do_event_channel_op(int cmd, > > XEN_GUEST_HANDLE_PARAM(void) arg) > > { > > long rc; > > > > +#ifdef CONFIG_X86 > > + if ( pv_shim ) > > + return pv_shim_event_channel_op(cmd, arg); > > +#endif > > Patch it right into the hypercall table instead? That would only work if the shim is a compile time option, but not a run time one, the hypercall table is ro. Thanks, Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |