mbox series

[0/5] qom: Allow object to be aligned

Message ID 20200915174635.2333553-1-richard.henderson@linaro.org
Headers show
Series qom: Allow object to be aligned | expand

Message

Richard Henderson Sept. 15, 2020, 5:46 p.m. UTC
I've seen some failures on arm and s390x hosts after
enabling host vector support.  It turns out that the
malloc for these hosts does not provide 16-byte alignment.

We already have a function that can alloc with alignment,
but we need to pass this down from the structure.  We also
don't want to use this function unconditionally, because
the windows version does page allocation, which would be
overkill for the vast majority of the objects allocated.


r~


Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Eduardo Habkost <ehabkost@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: David Gibson <david@gibson.dropbear.id.au>
Cc: Alistair Francis <Alistair.Francis@wdc.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Cornelia Huck <cohuck@redhat.com>
Cc: qemu-arm@nongnu.org
Cc: qemu-ppc@nongnu.org
Cc: qemu-riscv@nongnu.org
Cc: qemu-s390x@nongnu.org


Richard Henderson (5):
  qom: Allow objects to be allocated with increased alignment
  target/arm: Set instance_align on CPUARM TypeInfo
  target/ppc: Set instance_align on PowerPCCPU TypeInfo
  target/riscv: Set instance_align on RISCVCPU TypeInfo
  target/s390x: Set instance_align on S390CPU TypeInfo

 include/qom/object.h            |  4 ++++
 qom/object.c                    | 16 +++++++++++++---
 target/arm/cpu.c                |  2 ++
 target/riscv/cpu.c              |  1 +
 target/s390x/cpu.c              |  1 +
 target/ppc/translate_init.c.inc |  1 +
 6 files changed, 22 insertions(+), 3 deletions(-)

Comments

Richard Henderson Sept. 15, 2020, 10:47 p.m. UTC | #1
On 9/15/20 10:46 AM, Richard Henderson wrote:
> We already have a function that can alloc with alignment,

> but we need to pass this down from the structure.  We also

> don't want to use this function unconditionally, because

> the windows version does page allocation, which would be

> overkill for the vast majority of the objects allocated.


Stefan, why are we using VirtualAlloc in util/oslib-win32.c, qemu_try_memalign,
instead of _aligned_malloc?


r~
Stefan Weil Sept. 16, 2020, 3:25 a.m. UTC | #2
Am 16.09.20 um 00:47 schrieb Richard Henderson:

> On 9/15/20 10:46 AM, Richard Henderson wrote:

>> We already have a function that can alloc with alignment,

>> but we need to pass this down from the structure.  We also

>> don't want to use this function unconditionally, because

>> the windows version does page allocation, which would be

>> overkill for the vast majority of the objects allocated.

> Stefan, why are we using VirtualAlloc in util/oslib-win32.c, qemu_try_memalign,

> instead of _aligned_malloc?



I think we use it because Fabrice introduced VirtualAlloc in commit
6e4255f6a65091fbe7d17bfda546e2aa1b72f9a6 (with a comment "FIXME: this is
not exactly optimal solution [...]"). Maybe there was no _aligned_malloc
available 15 years ago. Commit 33f002714be2ed58ed05ae3870d5ea6915df4b47
then reused VirtualAlloc for qemu_try_memalign (without a FIXME comment).

Obviously nobody cared to find a better solution until now.

Stefan