[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 14/22] x86/traps: Extend struct cpu_user_regs/cpu_info with FRED fields
On 08.08.2025 22:23, Andrew Cooper wrote: > @@ -42,17 +46,76 @@ struct cpu_user_regs > */ > > union { uint64_t rip; uint32_t eip; uint16_t ip; }; > - uint16_t cs, _pad0[1]; > - uint8_t saved_upcall_mask; /* PV (v)rflags.IF == !saved_upcall_mask */ > - uint8_t _pad1[3]; > + union { > + struct { > + uint16_t cs; > + unsigned long :16; > + uint8_t saved_upcall_mask; /* PV (v)rflags.IF == > !saved_upcall_mask */ Would this better be reproduced ... > + }; > + unsigned long csx; > + struct { > + /* > + * Bits 0 thru 31 control ERET{U,S} behaviour, and is state of > the > + * interrupted context. > + */ > + uint16_t cs; > + unsigned int sl:2; /* Stack Level */ > + bool wfe:1; /* Wait-for-ENDBRANCH state */ ... here as well, just like you reproduce "cs"? > + } fred_cs; > + }; > union { uint64_t rflags; uint32_t eflags; uint16_t flags; }; > union { uint64_t rsp; uint32_t esp; uint16_t sp; uint8_t spl; }; > - uint16_t ss, _pad2[3]; > + union { > + uint16_t ss; > + unsigned long ssx; What use do you foresee for this and "csx"? > + struct { > + /* > + * Bits 0 thru 31 control ERET{U,S} behaviour, and is state about > + * the event which occured. > + */ > + uint16_t ss; > + bool sti:1; /* Was blocked-by-STI, and not > cancelled */ > + bool swint:1; /* Was a SYSCALL/SYSENTER/INT $N */ > + bool nmi:1; /* Was an NMI. */ > + unsigned long :13; > + > + /* > + * Bits 32 thru 63 are ignored by ERET{U,S} and are informative > + * only. > + */ > + uint8_t vector; > + unsigned long :8; > + unsigned int type:4; /* X86_ET_* */ > + unsigned long :4; > + bool enclave:1; /* Event taken in SGX mode */ > + bool lm:1; /* Was in Long Mode */ The bit indicates 64-bit mode aiui, not long mode (without which FRED isn't even available). > --- a/xen/arch/x86/include/asm/current.h > +++ b/xen/arch/x86/include/asm/current.h > @@ -38,6 +38,8 @@ struct vcpu; > > struct cpu_info { > struct cpu_user_regs guest_cpu_user_regs; > + struct fred_info _fred; /* Only used when FRED is active. */ Any particular need for the leading underscore? Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |