[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3] passthrough: give XEN_DOMCTL_test_assign_device more sane semantics
On Wed, Aug 16, 2017 at 06:20:01AM -0600, Jan Beulich wrote: > So far callers of the libxc interface passed in a domain ID which was > then ignored in the hypervisor. Instead, make the hypervisor honor it > (accepting DOMID_INVALID to obtain original behavior), allowing to > query whether a device can be assigned to a particular domain. > > Drop XSM's test_assign_{,dt}device hooks as no longer being > individually useful. Can you also say in the commit message that you consolidate some code as well? Assuming the disagreement on the semantics of the call is settled: Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> > --- > v3: Drop test-assign XSM hooks. > v2: Alter the semantics to check whether the device can be assigned to > the passed in domain. > > --- a/xen/common/domctl.c > +++ b/xen/common/domctl.c > @@ -391,11 +391,15 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xe > > switch ( op->cmd ) > { > - case XEN_DOMCTL_createdomain: > case XEN_DOMCTL_test_assign_device: > + if ( op->domain == DOMID_INVALID ) > + { > + case XEN_DOMCTL_createdomain: > case XEN_DOMCTL_gdbsx_guestmemio: > - d = NULL; > - break; > + d = NULL; > + break; > + } > + /* fall through */ I know there is already code like this but I would rather not mix if and case labels. Anyway, that's just my personal taste and I won't block this patch because of that. > default: > d = rcu_lock_domain_by_id(op->domain); > if ( !d && op->cmd != XEN_DOMCTL_getdomaininfo ) > --- a/xen/drivers/passthrough/device_tree.c > +++ b/xen/drivers/passthrough/device_tree.c > @@ -143,12 +143,15 @@ int iommu_do_dt_domctl(struct xen_domctl > switch ( domctl->cmd ) > { > case XEN_DOMCTL_assign_device: > + ASSERT(d); > + /* fall through */ > + case XEN_DOMCTL_test_assign_device: > ret = -ENODEV; > if ( domctl->u.assign_device.dev != XEN_DOMCTL_DEV_DT ) > break; > > ret = -EINVAL; > - if ( d->is_dying || domctl->u.assign_device.flags ) > + if ( (d && d->is_dying) || domctl->u.assign_device.flags ) > break; > > ret = dt_find_node_by_gpath(domctl->u.assign_device.u.dt.path, > @@ -161,6 +164,17 @@ int iommu_do_dt_domctl(struct xen_domctl > if ( ret ) > break; > > + if ( domctl->cmd == XEN_DOMCTL_test_assign_device ) > + { > + if ( iommu_dt_device_is_assigned(dev) ) > + { > + printk(XENLOG_G_ERR "%s already assigned.\n", > + dt_node_full_name(dev)); > + ret = -EINVAL; > + } > + break; > + } > + Move the ASSERT(d) here? > ret = iommu_assign_dt_device(d, dev); > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |