[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uni
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic |
Date: |
Thu, 8 Sep 2016 09:50:31 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 |
On 08/09/2016 04:04, David Gibson wrote:
> On Tue, Sep 06, 2016 at 03:17:56PM +0200, Laurent Vivier wrote:
>> And add support for ppc64.
>>
>> Signed-off-by: Laurent Vivier <address@hidden>
>
> Some of my coments may be obsoleted by the discussion with Greg.
>
>> ---
>> v2:
>> - remove useless parenthesis, inline
>>
>> tests/Makefile.include | 3 ++-
>> tests/libqos/libqos.h | 2 +-
>> tests/libqos/malloc-ppc64.c | 38 ++++++++++++++++++++++++++++++++++++++
>> tests/libqos/malloc-ppc64.h | 17 +++++++++++++++++
>> tests/libqos/malloc.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>> tests/libqos/malloc.h | 3 +++
>> 6 files changed, 103 insertions(+), 2 deletions(-)
>> create mode 100644 tests/libqos/malloc-ppc64.c
>> create mode 100644 tests/libqos/malloc-ppc64.h
>>
>> diff --git a/tests/Makefile.include b/tests/Makefile.include
>> index 14be491..a286848 100644
>> --- a/tests/Makefile.include
>> +++ b/tests/Makefile.include
>> @@ -557,8 +557,9 @@ tests/test-crypto-block$(EXESUF):
>> tests/test-crypto-block.o $(test-crypto-obj-y)
>>
>> libqos-obj-y = tests/libqos/pci.o tests/libqos/fw_cfg.o
>> tests/libqos/malloc.o
>> libqos-obj-y += tests/libqos/i2c.o tests/libqos/libqos.o
>> +libqos-obj-y += tests/libqos/malloc-ppc64.o tests/libqos/malloc-pc.o
>> libqos-pc-obj-y = $(libqos-obj-y) tests/libqos/pci-pc.o
>> -libqos-pc-obj-y += tests/libqos/malloc-pc.o tests/libqos/libqos-pc.o
>> +libqos-pc-obj-y += tests/libqos/libqos-pc.o
>> libqos-pc-obj-y += tests/libqos/ahci.o
>> libqos-omap-obj-y = $(libqos-obj-y) tests/libqos/i2c-omap.o
>> libqos-imx-obj-y = $(libqos-obj-y) tests/libqos/i2c-imx.o
>> diff --git a/tests/libqos/libqos.h b/tests/libqos/libqos.h
>> index 604980d..7b71607 100644
>> --- a/tests/libqos/libqos.h
>> +++ b/tests/libqos/libqos.h
>> @@ -3,7 +3,7 @@
>>
>> #include "libqtest.h"
>> #include "libqos/pci.h"
>> -#include "libqos/malloc-pc.h"
>> +#include "libqos/malloc.h"
>>
>> typedef struct QOSOps {
>> QGuestAllocator *(*init_allocator)(QAllocOpts);
>> diff --git a/tests/libqos/malloc-ppc64.c b/tests/libqos/malloc-ppc64.c
>> new file mode 100644
>> index 0000000..1b31e33
>> --- /dev/null
>> +++ b/tests/libqos/malloc-ppc64.c
>> @@ -0,0 +1,38 @@
>> +/*
>> + * libqos malloc support for PPC64
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "qemu/osdep.h"
>> +#include "libqos/malloc-ppc64.h"
>> +
>> +#include "qemu-common.h"
>> +
>> +#define PAGE_SIZE 4096
>> +
>> +/* Memory must be a multiple of 256 MB,
>> + * so we have at least 256MB
>> + */
>> +#define PPC64_MIN_SIZE 0x10000000
>
> So, this is really a "pseries" machine type fact rather than a ppc64
> fact. Is there a way to make this dependent on machine type rather
> than target architecture? Naming this based on machine type would
> seem to better match the "pc" things these are based on ("pc" rather
> than "i386" or "x86_64").
I've changed all my "ppc64" by "spapr". Is "pseries" better?
>> +
>> +void ppc64_alloc_uninit(QGuestAllocator *allocator)
>> +{
>> + alloc_uninit(allocator);
>> +}
>> +
>> +QGuestAllocator *ppc64_alloc_init_flags(QAllocOpts flags)
>> +{
>> + QGuestAllocator *s;
>> +
>> + s = alloc_init_flags(flags, 1 << 20, PPC64_MIN_SIZE);
>> + alloc_set_page_size(s, PAGE_SIZE);
>> +
>> + return s;
>> +}
>> +
>> +QGuestAllocator *ppc64_alloc_init(void)
>> +{
>> + return ppc64_alloc_init_flags(ALLOC_NO_FLAGS);
>> +}
>> diff --git a/tests/libqos/malloc-ppc64.h b/tests/libqos/malloc-ppc64.h
>> new file mode 100644
>> index 0000000..c2b2dff
>> --- /dev/null
>> +++ b/tests/libqos/malloc-ppc64.h
>> @@ -0,0 +1,17 @@
>> +/*
>> + * libqos malloc support for PPC64
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef LIBQOS_MALLOC_PPC64_H
>> +#define LIBQOS_MALLOC_PPC64_H
>> +
>> +#include "libqos/malloc.h"
>> +
>> +QGuestAllocator *ppc64_alloc_init(void);
>> +QGuestAllocator *ppc64_alloc_init_flags(QAllocOpts flags);
>> +void ppc64_alloc_uninit(QGuestAllocator *allocator);
>> +
>> +#endif
>> diff --git a/tests/libqos/malloc.c b/tests/libqos/malloc.c
>> index b8eff5f..6a02345 100644
>> --- a/tests/libqos/malloc.c
>> +++ b/tests/libqos/malloc.c
>> @@ -12,6 +12,9 @@
>>
>> #include "qemu/osdep.h"
>> #include "libqos/malloc.h"
>> +#include "libqos/malloc-pc.h"
>> +#include "libqos/malloc-ppc64.h"
>> +#include "libqtest.h"
>> #include "qemu-common.h"
>> #include "qemu/host-utils.h"
>>
>> @@ -375,3 +378,42 @@ void migrate_allocator(QGuestAllocator *src,
>> QTAILQ_INSERT_HEAD(src->free, node, MLIST_ENTNAME);
>> return;
>> }
>> +
>> +QGuestAllocator *machine_alloc_init(void)
>> +{
>> + const char *arch = qtest_get_arch();
>
> Maybe we need to add a qtest_get_machine_type().
I'm working on that...
>> + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
>> + return pc_alloc_init();
>> + }
>> + if (strcmp(arch, "ppc64") == 0) {
>> + return ppc64_alloc_init();
>> + }
>> + return NULL;
>> +}
>> +
>> +QGuestAllocator *machine_alloc_init_flags(QAllocOpts flags)
>> +{
>> + const char *arch = qtest_get_arch();
>> +
>> + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
>> + return pc_alloc_init_flags(flags);
>> + }
>> + if (strcmp(arch, "ppc64") == 0) {
>> + return ppc64_alloc_init_flags(flags);
>> + }
>> + return NULL;
>> +}
>> +
>> +void machine_alloc_uninit(QGuestAllocator *allocator)
>> +{
>> + const char *arch = qtest_get_arch();
>> +
>> + if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
>> + pc_alloc_uninit(allocator);
>> + return;
>> + }
>> + if (strcmp(arch, "ppc64") == 0) {
>> + ppc64_alloc_uninit(allocator);
>> + }
>> +}
>> diff --git a/tests/libqos/malloc.h b/tests/libqos/malloc.h
>> index ae9dac8..a5f4c63 100644
>> --- a/tests/libqos/malloc.h
>> +++ b/tests/libqos/malloc.h
>> @@ -37,4 +37,7 @@ QGuestAllocator *alloc_init_flags(QAllocOpts flags,
>> void alloc_set_page_size(QGuestAllocator *allocator, size_t page_size);
>> void alloc_set_flags(QGuestAllocator *allocator, QAllocOpts opts);
>>
>> +QGuestAllocator *machine_alloc_init(void);
>> +QGuestAllocator *machine_alloc_init_flags(QAllocOpts flags);
>> +void machine_alloc_uninit(QGuestAllocator *allocator);
>> #endif
>
Thanks,
Laurent
- Re: [Qemu-devel] [PATCH v4 3/3] tests: add RTAS command in the protocol, (continued)
Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Thomas Huth, 2016/09/06
Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, David Gibson, 2016/09/07
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic,
Laurent Vivier <=
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Greg Kurz, 2016/09/09
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Laurent Vivier, 2016/09/09
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, David Gibson, 2016/09/11
- Re: [Qemu-devel] [Qemu-ppc] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Greg Kurz, 2016/09/12
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Laurent Vivier, 2016/09/12
- Re: [Qemu-devel] [PATCH v4 2/3] tests: make pc_alloc_init/init_flags/uninit generic, Greg Kurz, 2016/09/12