|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 RFC 2/4] x86/PV: support data breakpoint extension registers
>>> On 27.03.14 at 16:28, <Ian.Campbell@xxxxxxxxxx> wrote:
> On Wed, 2014-03-26 at 14:13 +0000, Jan Beulich wrote:
>> Introducing an extension to XEN_DOMCTL_[gs]et_ext_vcpucontext similar
>> to the generic MSR save/restore logic recently added for HVM.
>
> "x86: generic MSRs save/restore" I guess?
>
> Is the intention here that the extvcpu context is a blob of opaque data
> from the pov of the migration tools?
No, these tools will need to know about the structure of the data
(as seen in the patch).
> Do the protocol docs in xg_save_restore need updating due to this
> change?
Not sure about that - this doesn't seem to talk about what's inside
the "bodies".
> How does N->N+1 migration work out?
Since the structure size grows, and that size is embedded in the
structure, input coming from N will be treated as not having any
MSRs.
>> @@ -2130,9 +2162,25 @@ int xc_domain_restore(xc_interface *xch,
>> goto vcpu_ext_state_restore;
>> memcpy(&domctl.u.ext_vcpucontext, vcpup, 128);
>> vcpup += 128;
>> + if ( domctl.u.ext_vcpucontext.msr_count )
>> + {
>> + size_t sz = domctl.u.ext_vcpucontext.msr_count * sizeof(*msrs);
>> +
>> + msrs = xc_hypercall_buffer_alloc(xch, msrs, sz);
>> + if ( !msrs )
>> + {
>> + PERROR("No memory for vcpu%d MSRs", i);
>> + goto out;
>> + }
>> + memcpy(msrs, vcpup, sz);
>
> This seems to be opencoding the hypercall bounce buffer stuff to some
> extent.
Just like in the xstate logic. Aiui there's no way currently for
do_domctl() to know that in some cases embedded handles need
following. Or at least I didn't spot it, so if there is a mechanism to
avoid this open coding, please point me at it.
>> + vcpup += sz;
>> + set_xen_guest_handle(domctl.u.ext_vcpucontext.msrs, msrs);
>> + }
>> domctl.cmd = XEN_DOMCTL_set_ext_vcpucontext;
>> domctl.domain = dom;
>> frc = xc_domctl(xch, &domctl);
>> + if ( msrs )
>> + xc_hypercall_buffer_free(xch, msrs);
>
> I think you don't need the if ( msrs ) here.
Ah, right - I saw xc__hypercall_buffer_free() dereference its argument,
not paying close enough attention that what gets passed here is the
address of an on-stack variable. Will drop.
>> @@ -563,6 +563,16 @@ typedef struct xen_domctl_pin_mem_cachea
>> DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t);
>>
>>
>> +#if defined(__i386__) || defined(__x86_64__)
>> +struct xen_domctl_ext_vcpu_msr {
>> + uint32_t index;
>> + uint32_t reserved;
>> + uint64_aligned_t value;
>> +};
>
> Maybe this is just me forgetting x86 stuff but are these "data
> breakpoint extension registers" actually MSRs?
Yes, they are (and they're AMD-specific).
> If so why is this not part of the generic MSR support which you
> referenced earlier? At least at the domctl level it seems to be generic
> here too?
Because that was HVM-only. Here a similar extensible mechanism is
being introduced for PV.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |