[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] tools: Delete XEN_DOMCTL_disable_migrate



On 14/09/2020 09:43, Jan Beulich wrote:
> On 11.09.2020 21:06, Andrew Cooper wrote:
>> It is conceptually wrong for this information to exist in the hypervisor in
>> the first place.  Only the toolstack is capable of correctly reasoning about
>> the non-migrateability of guests.
> But isn't it the purpose of the domctl to tell Xen about the tool
> stack's decision in this regard?

There is nothing (not even ITSC handling, which was buggy) which Xen can
legitimately do with the information.

It is conceptually wrong, and a layering violation, for Xen to have this
information, or to be making any assumptions about it.

>> This hypercall has only ever existed to control the visibility of the
>> Invariant TSC flag to the guest.  Now that we have properly disentanged that
>> and moved ITSC into the guests CPUID policy, delete this hypercall.
>>
>> Furthermore, this fixes a corner case where Xen would override the toolstacks
>> choice of ITSC for a xenstore stubdomain.
> I'm afraid I don't fully understand: A xenstore stubdom can't be
> migrated (or at least it isn't supposed to be), can it?

That is some very wild assumptions.

What if someone is trying to debug a time related issue, and wants to
turn itsc off?

> In which
> case - what's wrong with exposing to it even by default a feature
> it may be able to make use of?

Because silently trampling the configuration chosen by the toolstack
isn't acceptable.

>  IOW ...
>
>> --- a/xen/arch/x86/cpuid.c
>> +++ b/xen/arch/x86/cpuid.c
>> @@ -708,7 +708,8 @@ int init_domain_cpuid_policy(struct domain *d)
>>      if ( !p )
>>          return -ENOMEM;
>>  
>> -    if ( d->disable_migrate )
>> +    /* The hardware domain can't migrate.  Give it ITSC if available. */
>> +    if ( is_hardware_domain(d) )
>>          p->extd.itsc = cpu_has_itsc;
> ... why not include is_xenstore_domain() here that you remove from
> ...
>
>> @@ -452,9 +451,6 @@ struct domain *domain_create(domid_t domid,
>>          watchdog_domain_init(d);
>>          init_status |= INIT_watchdog;
>>  
>> -        if ( is_xenstore_domain(d) )
>> -            d->disable_migrate = true;
> ... here? On the tool stack side the change here only deletes code,
> i.e. I don't see you taking care of the default enabling there
> either. Am I overlooking any logic that now causes the feature to
> be requested for the xenstore domain without you needing to add
> any code?

The toolstack (legitimately) has knowledge of nomigrate, and will even
implicitly turn on ITSC as a side effect, but will also honour explicit
requests to turn it on or off.

>> --- a/xen/include/public/domctl.h
>> +++ b/xen/include/public/domctl.h
>> @@ -730,11 +730,6 @@ struct xen_domctl_hvmcontext_partial {
>>      XEN_GUEST_HANDLE_64(uint8) buffer;  /* OUT: buffer to write record into 
>> */
>>  };
>>  
>> -/* XEN_DOMCTL_disable_migrate */
>> -struct xen_domctl_disable_migrate {
>> -    uint32_t disable; /* IN: 1: disable migration and restore */
>> -};
>> -
>>  
>>  /* XEN_DOMCTL_gettscinfo */
>>  /* XEN_DOMCTL_settscinfo */
>> @@ -1191,7 +1186,7 @@ struct xen_domctl {
>>  #define XEN_DOMCTL_gethvmcontext_partial         55
>>  #define XEN_DOMCTL_vm_event_op                   56
>>  #define XEN_DOMCTL_mem_sharing_op                57
>> -#define XEN_DOMCTL_disable_migrate               58
>> +/* #define XEN_DOMCTL_disable_migrate            58 - Obsolete */
>>  #define XEN_DOMCTL_gettscinfo                    59
>>  #define XEN_DOMCTL_settscinfo                    60
>>  #define XEN_DOMCTL_getpageframeinfo3             61
>> @@ -1242,7 +1237,6 @@ struct xen_domctl {
>>          struct xen_domctl_ioport_permission ioport_permission;
>>          struct xen_domctl_hypercall_init    hypercall_init;
>>          struct xen_domctl_settimeoffset     settimeoffset;
>> -        struct xen_domctl_disable_migrate   disable_migrate;
>>          struct xen_domctl_tsc_info          tsc_info;
>>          struct xen_domctl_hvmcontext        hvmcontext;
>>          struct xen_domctl_hvmcontext_partial hvmcontext_partial;
> Deletion of sub-ops, just like their modification, requires the
> interface version to get bumped if it wasn't already during a
> release cycle. I know you dislike the underlying concept, but as
> long as the interface version continues to exist (with its
> present meaning) I'm afraid it needs bumping for any backwards-
> incompatible change.

I can fix it on commit.  I don't waste time tracking whether it has had
its conditional bump.

~Andrew



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.