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

Re: [PATCH v2] x86/vmx: save guest non-register state in hvm_hw_cpu


  • To: Tamas K Lengyel <tamas.k.lengyel@xxxxxxxxx>
  • From: Jan Beulich <jbeulich@xxxxxxxx>
  • Date: Mon, 21 Mar 2022 15:58:31 +0100
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9r+U0XApU4WbDqM9gwZ0V+Z3ubX3aUJQu9n9vtYWtgs=; b=Udm4EkcyD78o5ZPqrVsXLESJVOq0fqHyjq6rX7/im8s9IcBIdTqZ3kRoBMDhc/oVMxDkSMOP9PVeUwd4cZKbrr/dDhvbzy7a8LR3wVzpHFGOh4ImlTWl6J8BnTQr7TYDnR1ILNZbcZDljR7DCiaE3AlcYEQG66oCnc+HFq/LOWhHzBk2Ys/b47TGiXO3GOZWsEaQ/L5rBfGjqq4UfycYbN5xxey7rn4B6/EwtR5gMTWblnloA8G6xYN9fkn06vgJR1OrLqhdpjIAPZ/EKVtdb6u7hhJDpmSTrPvDpDu3KAczMhdVfJM8uNp8DWrcIC2Y3+WeoE0uv6/6lNYmfIxZbg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TkaAdAIo+DXfu4rNtmG2/assHgJu5w4LLY3BBU97t5PZH/98H39+GHV0eVcCfFNGOM2Gl8qZwmZQfESim+be5bjx6yKcX/QfPZZ4gCfHJxQkAq/AWrp5jyNKI5PasHcAGSqZ3HIj4Zebi+F/blf8UJmrVo5gwuuA6ZZczzMYfI7e9PlGSwAWuHCu41e2TnCH0ZAAdUMxKnblsich2IsHWktTKbbWCn335KltrKTSvtK0DJAqftsvVk6/yPIXGVSOFoJmu8sbC7TpyBHGLbPQl/cw1zzZnkjxMDyjNn/9tm8wOm2qV1innwXJdT3SsbAg3jgYhN36Fs2f5I1deqyfxQ==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
  • Cc: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>, Jun Nakajima <jun.nakajima@xxxxxxxxx>, Kevin Tian <kevin.tian@xxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Mon, 21 Mar 2022 14:58:57 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 21.03.2022 15:39, Tamas K Lengyel wrote:
> On Mon, Mar 21, 2022 at 8:16 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>> On 17.03.2022 16:57, Tamas K Lengyel wrote:
>>> @@ -166,6 +167,11 @@ struct hvm_hw_cpu {
>>>  #define XEN_X86_FPU_INITIALISED         (1U<<_XEN_X86_FPU_INITIALISED)
>>>      uint32_t flags;
>>>      uint32_t pad0;
>>> +
>>> +    /* non-register state */
>>> +    uint32_t activity_state;
>>> +    uint32_t interruptibility_state;
>>> +    uint64_t pending_dbg;
>>>  };
>>
>> ... these fields now represent vendor state in a supposedly vendor
>> independent structure. Besides my wish to see this represented in
>> field naming (thus at least making provisions for SVM to gain
>> similar support; perhaps easiest would be to include these in a
>> sub-structure with a field name of "vmx"), I wonder in how far cross-
>> vendor migration was taken into consideration. As long as the fields
>> are zero / ignored, things wouldn't be worse than before your
>> change, but I think it wants spelling out that the SVM counterpart(s)
>> may not be added by way of making a VMX/SVM union.
> 
> I wasn't aware cross-vendor migration is even a thing.

It used to be a thing long ago; it may not work right now for no-one
testing it.

> But adding a
> vmx sub-structure seems to me a workable route, we would perhaps just
> need an extra field that specifies where the fields were taken
> (vmx/svm) and ignore them if the place where the restore is taking
> place doesn't match where the save happened. That would be equivalent
> to how migration works today. Thoughts?

I don't think such a field is needed, at least not right away, as
long as the respectively other vendor's fields are left zero when
storing the data. These fields being zero matches current behavior
of not communicating the values at all. A separate flag might be
needed if the receiving side would want to "emulate" settings from
incoming values from the respectively other vendor. Yet even then
only one of the two sets of fields could potentially be non-zero
(both being non-zero is an error imo); both fields being zero
would be compatible both ways. Hence it would be possible to
determine the source vendor without an extra field even then, I
would think.

A separate flag would of course be needed if we meant to overlay
the vendors' data in a union. But as per my earlier reply I think
we're better off not using a union in this case.

Jan




 


Rackspace

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