Message ID | 20101105214030.31799.12838.stgit@s20.home |
---|---|
State | New |
Headers | show |
On Fri, Nov 5, 2010 at 9:40 PM, Alex Williamson
<alex.williamson@redhat.com> wrote:
> We can't let the compiler define the alignment for qemu_cfg data.
Actually, whole e820_table implementation seems to be buggy. The
structure may not be passed directly to fw_cfg interface without
endianness conversions, otherwise the emulation will not work on big
endian host.
On Sun, 2010-11-07 at 14:59 +0000, Blue Swirl wrote: > On Fri, Nov 5, 2010 at 9:40 PM, Alex Williamson > <alex.williamson@redhat.com> wrote: > > We can't let the compiler define the alignment for qemu_cfg data. > > Actually, whole e820_table implementation seems to be buggy. The > structure may not be passed directly to fw_cfg interface without > endianness conversions, otherwise the emulation will not work on big > endian host. I sent a patch for this a couple days ago: http://lists.nongnu.org/archive/html/qemu-devel/2010-11/msg00481.html I think that resolves your concern. Thanks, Alex
On 11/05/2010 04:40 PM, Alex Williamson wrote: > We can't let the compiler define the alignment for qemu_cfg data. > > Signed-off-by: Alex Williamson<alex.williamson@redhat.com> > Applied. Thanks. Regards, Anthony Liguori > --- > > hw/pc.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/hw/pc.c b/hw/pc.c > index 69b13bf..0264e3d 100644 > --- a/hw/pc.c > +++ b/hw/pc.c > @@ -75,12 +75,12 @@ struct e820_entry { > uint64_t address; > uint64_t length; > uint32_t type; > -}; > +} __attribute((__packed__, __aligned__(4))); > > struct e820_table { > uint32_t count; > struct e820_entry entry[E820_NR_ENTRIES]; > -}; > +} __attribute((__packed__, __aligned__(4))); > > static struct e820_table e820_table; > > > > >
diff --git a/hw/pc.c b/hw/pc.c index 69b13bf..0264e3d 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -75,12 +75,12 @@ struct e820_entry { uint64_t address; uint64_t length; uint32_t type; -}; +} __attribute((__packed__, __aligned__(4))); struct e820_table { uint32_t count; struct e820_entry entry[E820_NR_ENTRIES]; -}; +} __attribute((__packed__, __aligned__(4))); static struct e820_table e820_table;
We can't let the compiler define the alignment for qemu_cfg data. Signed-off-by: Alex Williamson <alex.williamson@redhat.com> --- hw/pc.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)