[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Getting the XSAVE size from userspace
Hello, I need to get the XSAVE size from userspace. The easiest way seems to be to use the XEN_DOMCTL_getvcpuextstate hypercall, but that hypercall is not public / there's no xenctrl.h wrapper for it. There's also struct hvm_hw_cpu_xsave, which I can get to, but it doesn't have a size member: 542 /* 543 * The save area of XSAVE/XRSTOR. 544 */ 545 546 struct hvm_hw_cpu_xsave { 547 uint64_t xfeature_mask; /* Ignored */ 548 uint64_t xcr0; /* Updated by XSETBV */ 549 uint64_t xcr0_accum; /* Updated by XSETBV */ 550 struct { 551 struct { char x[512]; } fpu_sse; 552 553 struct { 554 uint64_t xstate_bv; /* Updated by XRSTOR */ 555 uint64_t reserved[7]; 556 } xsave_hdr; /* The 64-byte header */ 557 558 struct { char x[0]; } ymm; /* YMM */ 559 } save_area; 560 }; I see that in the hypervisor code the length is computed by using the HVM_CPU_XSAVE_SIZE() macro: 2126 #define HVM_CPU_XSAVE_SIZE(xcr0) (offsetof(struct hvm_hw_cpu_xsave, \ 2127 save_area) + \ 2128 xstate_ctxt_size(xcr0)) where: 256 static unsigned int _xstate_ctxt_size(u64 xcr0) 257 { 258 u64 act_xcr0 = get_xcr0(); 259 u32 eax, ebx = 0, ecx, edx; 260 bool_t ok = set_xcr0(xcr0); 261 262 ASSERT(ok); 263 cpuid_count(XSTATE_CPUID, 0, &eax, &ebx, &ecx, &edx); 264 ASSERT(ebx <= ecx); 265 ok = set_xcr0(act_xcr0); 266 ASSERT(ok); 267 268 return ebx; 269 } 270 271 /* Fastpath for common xstate size requests, avoiding reloads of xcr0. */ 272 unsigned int xstate_ctxt_size(u64 xcr0) 273 { 274 if ( xcr0 == xfeature_mask ) 275 return xsave_cntxt_size; 276 277 if ( xcr0 == 0 ) 278 return 0; 279 280 return _xstate_ctxt_size(xcr0); 281 } But that doesn't seem to translate cleanly to userspace code. I had hoped that I would be able to get this with no custom Xen patches, is there a simpler way I'm not aware of to get to this information? And if there isn't, would you prefer a libxc patch that exposes XEN_DOMCTL_getvcpuextstate, or one that adds a size member to struct hvm_hw_cpu_xsave (I'd guess the latter)? Thanks, Razvan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |