[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/3] x86/emul: Drop segment_attributes_t
>>> On 30.06.17 at 17:04, <andrew.cooper3@xxxxxxxxxx> wrote: > The amount of namespace resolution is unnecessarily large, as all code deals > in terms of struct segment_register. This removes the attr.fields part of all > references, and alters attr.bytes to just attr. Yeah, quite a bit easier to read and type this way. > @@ -256,7 +255,7 @@ int arch_set_info_hvm_guest(struct vcpu *v, const > vcpu_hvm_context_t *ctx) > v->arch.hvm_vcpu.guest_cr[4] = regs->cr4; > v->arch.hvm_vcpu.guest_efer = regs->efer; > > -#define SEG(l, a) (struct segment_register){ .limit = (l), .attr.bytes = (a) > } > +#define SEG(l, a) (struct segment_register){ 0, { (a) }, (l), 0 } The parens around a and l are pointless here. > @@ -3832,25 +3832,25 @@ void hvm_vcpu_reset_state(struct vcpu *v, uint16_t > cs, uint16_t ip) > reg.sel = cs; > reg.base = (uint32_t)reg.sel << 4; > reg.limit = 0xffff; > - reg.attr.bytes = 0x09b; > + reg.attr = 0x09b; > hvm_set_segment_register(v, x86_seg_cs, ®); > > reg.sel = reg.base = 0; > reg.limit = 0xffff; > - reg.attr.bytes = 0x093; > + reg.attr = 0x093; Could I talk you into at once dropping the stray inner zeros in both cases? > --- a/xen/arch/x86/x86_emulate/x86_emulate.h > +++ b/xen/arch/x86/x86_emulate/x86_emulate.h > @@ -83,33 +83,26 @@ struct x86_event { > unsigned long cr2; /* Only for TRAP_page_fault h/w exception > */ > }; > > -/* > - * Attribute for segment selector. This is a copy of bit 40:47 & 52:55 of the > - * segment descriptor. It happens to match the format of an AMD SVM VMCB. > - */ The reference to segment descriptors here helped understand what ... > -typedef union segment_attributes { > - uint16_t bytes; > - struct > - { > - uint16_t type:4; /* 0; Bit 40-43 */ > - uint16_t s: 1; /* 4; Bit 44 */ > - uint16_t dpl: 2; /* 5; Bit 45-46 */ > - uint16_t p: 1; /* 7; Bit 47 */ > - uint16_t avl: 1; /* 8; Bit 52 */ > - uint16_t l: 1; /* 9; Bit 53 */ > - uint16_t db: 1; /* 10; Bit 54 */ > - uint16_t g: 1; /* 11; Bit 55 */ ... the bit numbers here refer to. Hence I like to ask to either restore that reference or ... > /* > * Full state of a segment register (visible and hidden portions). > - * Again, this happens to match the format of an AMD SVM VMCB. > + * Chosen to match the format of an AMD SVM VMCB. > */ > struct segment_register { > uint16_t sel; > - segment_attributes_t attr; > + union { > + uint16_t attr; > + struct { > + uint16_t type:4; /* 0; Bit 40-43 */ > + uint16_t s: 1; /* 4; Bit 44 */ > + uint16_t dpl: 2; /* 5; Bit 45-46 */ > + uint16_t p: 1; /* 7; Bit 47 */ > + uint16_t avl: 1; /* 8; Bit 52 */ > + uint16_t l: 1; /* 9; Bit 53 */ > + uint16_t db: 1; /* 10; Bit 54 */ > + uint16_t g: 1; /* 11; Bit 55 */ ... drop the Bit NN comments here, as these aren't bit numbers inside the VMCB field layout afaict. With at least this last aspect taken care of Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |