[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/7] x86/vioapic: introduce a internal vIO APIC structure
>>> On 27.03.17 at 12:18, <roger.pau@xxxxxxxxxx> wrote: > The reason to expand the hvm_vioapic structure instead of the hvm_hw_vioapic > one is that the variable number of pins functionality is only going to be used > by the hardware domain, so no modifications are needed to the save format. As you say here you expand an existing structure, so the title isn't really correct. > @@ -426,38 +426,43 @@ void vioapic_update_EOI(struct domain *d, u8 vector) > > static int ioapic_save(struct domain *d, hvm_domain_context_t *h) > { > - struct hvm_hw_vioapic *s = domain_vioapic(d); > + struct hvm_vioapic *s = domain_vioapic(d); > > if ( !has_vioapic(d) ) > return 0; > > - return hvm_save_entry(IOAPIC, 0, h, s); > + BUILD_BUG_ON(sizeof(struct hvm_hw_vioapic) != > + sizeof(struct hvm_vioapic) - > + offsetof(struct hvm_vioapic, base_address)); This is too weak a check for my taste, and ... > + return hvm_save_entry(IOAPIC, 0, h, &s->base_address); ... this too fragile a use. See also below. > --- a/xen/include/asm-x86/hvm/vioapic.h > +++ b/xen/include/asm-x86/hvm/vioapic.h > @@ -48,13 +48,16 @@ > #define VIOAPIC_REG_RTE0 0x10 > > struct hvm_vioapic { > - struct hvm_hw_vioapic hvm_hw_vioapic; > struct domain *domain; > + /* Layout below must match hvm_hw_vioapic. */ > + uint64_t base_address; > + uint32_t ioregsel; > + uint32_t id; > + union vioapic_redir_entry redirtbl[VIOAPIC_NUM_PINS]; > }; It is mere luck that last old and first new fields aren't both 32-bit ones, or else this approach would not have worked at all. I think we need some better approach here, but the absolute minimum would be to also add a comment on the other side. One possible approach would be to move the entire set of field declarations of struct hvm_hw_vioapic into a macro, using it both there and here. Which would then leave making sure there are no alignment effects because of fields added ahead of that macro's use (perhaps via BUILD_BUG_ON(), or maybe even better by making this an unnamed structure member inside struct hvm_ioapic). The macro should then be #undef-ed in the header, except in the __XEN__ case. Perhaps the macro would also want to be given a parameter right away for the invoking site to specify the number of pins. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |