|
[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 25.08.17 at 17:25, <wei.liu2@xxxxxxxxxx> wrote:
> 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?
Am I consolidating code beyond what is reasonable to achieve
the intended effect? I don't view the merging of the two case
blocks
> 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.
Understood. I, otoh, prefer this style to limit code duplication.
>> --- 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?
That would be a possibility, but personally I think it's better placed
where it is now. It helps, for example, understanding why there is
a NULL check of d somewhere in the middle. In a domctl handler d
being NULL isn't a usual thing.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |