libqos: Use explicit QTestState for fw_cfg operations

Drop one more client of global_qtest by teaching all fw_cfg test
functionality (invoked through alloc-pc) to pass in an explicit
QTestState, adjusting all callers.  In particular, fw_cfg-test
had to reorder things to create the test state prior to creating
the fw_cfg (and drop a pointless strdup in the meantime), but that
test now no longer depends on global_qtest.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
[thuth: Fixed conflict wrt pc_alloc_init() in vhost-user-test.c]
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Eric Blake 2017-09-11 12:19:57 -05:00 committed by Thomas Huth
parent e5d1730d1e
commit 05e520f1c7
14 changed files with 36 additions and 36 deletions

View File

@ -132,7 +132,7 @@ static void test_prep_boot_order(void)
static uint64_t read_boot_order_pmac(void) static uint64_t read_boot_order_pmac(void)
{ {
QFWCFG *fw_cfg = mm_fw_cfg_init(0xf0000510); QFWCFG *fw_cfg = mm_fw_cfg_init(global_qtest, 0xf0000510);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }
@ -157,7 +157,7 @@ static void test_pmac_newworld_boot_order(void)
static uint64_t read_boot_order_sun4m(void) static uint64_t read_boot_order_sun4m(void)
{ {
QFWCFG *fw_cfg = mm_fw_cfg_init(0xd00000510ULL); QFWCFG *fw_cfg = mm_fw_cfg_init(global_qtest, 0xd00000510ULL);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }
@ -169,7 +169,7 @@ static void test_sun4m_boot_order(void)
static uint64_t read_boot_order_sun4u(void) static uint64_t read_boot_order_sun4u(void)
{ {
QFWCFG *fw_cfg = io_fw_cfg_init(0x510); QFWCFG *fw_cfg = io_fw_cfg_init(global_qtest, 0x510);
return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE); return qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_DEVICE);
} }

View File

@ -392,7 +392,7 @@ static void data_test_init(e1000e_device *d)
qtest_start(cmdline); qtest_start(cmdline);
g_free(cmdline); g_free(cmdline);
test_alloc = pc_alloc_init(); test_alloc = pc_alloc_init(global_qtest);
g_assert_nonnull(test_alloc); g_assert_nonnull(test_alloc);
test_bus = qpci_init_pc(global_qtest, test_alloc); test_bus = qpci_init_pc(global_qtest, test_alloc);

View File

@ -102,12 +102,13 @@ static void test_fw_cfg_boot_menu(void)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
QTestState *s; QTestState *s;
char *cmdline;
int ret; int ret;
g_test_init(&argc, &argv, NULL); g_test_init(&argc, &argv, NULL);
fw_cfg = pc_fw_cfg_init(); s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8");
fw_cfg = pc_fw_cfg_init(s);
qtest_add_func("fw_cfg/signature", test_fw_cfg_signature); qtest_add_func("fw_cfg/signature", test_fw_cfg_signature);
qtest_add_func("fw_cfg/id", test_fw_cfg_id); qtest_add_func("fw_cfg/id", test_fw_cfg_id);
@ -125,15 +126,9 @@ int main(int argc, char **argv)
qtest_add_func("fw_cfg/numa", test_fw_cfg_numa); qtest_add_func("fw_cfg/numa", test_fw_cfg_numa);
qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu); qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu);
cmdline = g_strdup_printf("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8 ");
s = qtest_start(cmdline);
g_free(cmdline);
ret = g_test_run(); ret = g_test_run();
if (s) { qtest_quit(s);
qtest_quit(s);
}
return ret; return ret;
} }

View File

@ -132,7 +132,7 @@ static void ide_test_start(const char *cmdline_fmt, ...)
va_end(ap); va_end(ap);
qtest_start(cmdline); qtest_start(cmdline);
guest_malloc = pc_alloc_init(); guest_malloc = pc_alloc_init(global_qtest);
g_free(cmdline); g_free(cmdline);
} }

View File

@ -56,7 +56,7 @@ uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key)
static void mm_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key) static void mm_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
{ {
writew(fw_cfg->base, key); qtest_writew(fw_cfg->qts, fw_cfg->base, key);
} }
static void mm_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len) static void mm_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len)
@ -65,15 +65,16 @@ static void mm_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len)
int i; int i;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
ptr[i] = readb(fw_cfg->base + 2); ptr[i] = qtest_readb(fw_cfg->qts, fw_cfg->base + 2);
} }
} }
QFWCFG *mm_fw_cfg_init(uint64_t base) QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base)
{ {
QFWCFG *fw_cfg = g_malloc0(sizeof(*fw_cfg)); QFWCFG *fw_cfg = g_malloc0(sizeof(*fw_cfg));
fw_cfg->base = base; fw_cfg->base = base;
fw_cfg->qts = qts;
fw_cfg->select = mm_fw_cfg_select; fw_cfg->select = mm_fw_cfg_select;
fw_cfg->read = mm_fw_cfg_read; fw_cfg->read = mm_fw_cfg_read;
@ -82,7 +83,7 @@ QFWCFG *mm_fw_cfg_init(uint64_t base)
static void io_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key) static void io_fw_cfg_select(QFWCFG *fw_cfg, uint16_t key)
{ {
outw(fw_cfg->base, key); qtest_outw(fw_cfg->qts, fw_cfg->base, key);
} }
static void io_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len) static void io_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len)
@ -91,15 +92,16 @@ static void io_fw_cfg_read(QFWCFG *fw_cfg, void *data, size_t len)
int i; int i;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
ptr[i] = inb(fw_cfg->base + 1); ptr[i] = qtest_inb(fw_cfg->qts, fw_cfg->base + 1);
} }
} }
QFWCFG *io_fw_cfg_init(uint16_t base) QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base)
{ {
QFWCFG *fw_cfg = g_malloc0(sizeof(*fw_cfg)); QFWCFG *fw_cfg = g_malloc0(sizeof(*fw_cfg));
fw_cfg->base = base; fw_cfg->base = base;
fw_cfg->qts = qts;
fw_cfg->select = io_fw_cfg_select; fw_cfg->select = io_fw_cfg_select;
fw_cfg->read = io_fw_cfg_read; fw_cfg->read = io_fw_cfg_read;

View File

@ -13,12 +13,14 @@
#ifndef LIBQOS_FW_CFG_H #ifndef LIBQOS_FW_CFG_H
#define LIBQOS_FW_CFG_H #define LIBQOS_FW_CFG_H
#include "libqtest.h"
typedef struct QFWCFG QFWCFG; typedef struct QFWCFG QFWCFG;
struct QFWCFG struct QFWCFG
{ {
uint64_t base; uint64_t base;
QTestState *qts;
void (*select)(QFWCFG *fw_cfg, uint16_t key); void (*select)(QFWCFG *fw_cfg, uint16_t key);
void (*read)(QFWCFG *fw_cfg, void *data, size_t len); void (*read)(QFWCFG *fw_cfg, void *data, size_t len);
}; };
@ -30,12 +32,12 @@ uint16_t qfw_cfg_get_u16(QFWCFG *fw_cfg, uint16_t key);
uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key); uint32_t qfw_cfg_get_u32(QFWCFG *fw_cfg, uint16_t key);
uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key); uint64_t qfw_cfg_get_u64(QFWCFG *fw_cfg, uint16_t key);
QFWCFG *mm_fw_cfg_init(uint64_t base); QFWCFG *mm_fw_cfg_init(QTestState *qts, uint64_t base);
QFWCFG *io_fw_cfg_init(uint16_t base); QFWCFG *io_fw_cfg_init(QTestState *qts, uint16_t base);
static inline QFWCFG *pc_fw_cfg_init(void) static inline QFWCFG *pc_fw_cfg_init(QTestState *qts)
{ {
return io_fw_cfg_init(0x510); return io_fw_cfg_init(qts, 0x510);
} }
#endif #endif

View File

@ -24,7 +24,7 @@ QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap)
qs->qts = qtest_start(cmdline); qs->qts = qtest_start(cmdline);
qs->ops = ops; qs->ops = ops;
if (ops) { if (ops) {
qs->alloc = ops->init_allocator(ALLOC_NO_FLAGS); qs->alloc = ops->init_allocator(qs->qts, ALLOC_NO_FLAGS);
qs->pcibus = ops->qpci_init(qs->qts, qs->alloc); qs->pcibus = ops->qpci_init(qs->qts, qs->alloc);
} }

View File

@ -8,7 +8,7 @@
typedef struct QOSState QOSState; typedef struct QOSState QOSState;
typedef struct QOSOps { typedef struct QOSOps {
QGuestAllocator *(*init_allocator)(QAllocOpts); QGuestAllocator *(*init_allocator)(QTestState *qts, QAllocOpts);
void (*uninit_allocator)(QGuestAllocator *); void (*uninit_allocator)(QGuestAllocator *);
QPCIBus *(*qpci_init)(QTestState *qts, QGuestAllocator *alloc); QPCIBus *(*qpci_init)(QTestState *qts, QGuestAllocator *alloc);
void (*qpci_free)(QPCIBus *bus); void (*qpci_free)(QPCIBus *bus);

View File

@ -29,11 +29,11 @@ void pc_alloc_uninit(QGuestAllocator *allocator)
alloc_uninit(allocator); alloc_uninit(allocator);
} }
QGuestAllocator *pc_alloc_init_flags(QAllocOpts flags) QGuestAllocator *pc_alloc_init_flags(QTestState *qts, QAllocOpts flags)
{ {
QGuestAllocator *s; QGuestAllocator *s;
uint64_t ram_size; uint64_t ram_size;
QFWCFG *fw_cfg = pc_fw_cfg_init(); QFWCFG *fw_cfg = pc_fw_cfg_init(qts);
ram_size = qfw_cfg_get_u64(fw_cfg, FW_CFG_RAM_SIZE); ram_size = qfw_cfg_get_u64(fw_cfg, FW_CFG_RAM_SIZE);
s = alloc_init_flags(flags, 1 << 20, MIN(ram_size, 0xE0000000)); s = alloc_init_flags(flags, 1 << 20, MIN(ram_size, 0xE0000000));
@ -45,7 +45,7 @@ QGuestAllocator *pc_alloc_init_flags(QAllocOpts flags)
return s; return s;
} }
inline QGuestAllocator *pc_alloc_init(void) inline QGuestAllocator *pc_alloc_init(QTestState *qts)
{ {
return pc_alloc_init_flags(ALLOC_NO_FLAGS); return pc_alloc_init_flags(qts, ALLOC_NO_FLAGS);
} }

View File

@ -15,8 +15,8 @@
#include "libqos/malloc.h" #include "libqos/malloc.h"
QGuestAllocator *pc_alloc_init(void); QGuestAllocator *pc_alloc_init(QTestState *qts);
QGuestAllocator *pc_alloc_init_flags(QAllocOpts flags); QGuestAllocator *pc_alloc_init_flags(QTestState *qts, QAllocOpts flags);
void pc_alloc_uninit(QGuestAllocator *allocator); void pc_alloc_uninit(QGuestAllocator *allocator);
#endif #endif

View File

@ -22,7 +22,7 @@ void spapr_alloc_uninit(QGuestAllocator *allocator)
alloc_uninit(allocator); alloc_uninit(allocator);
} }
QGuestAllocator *spapr_alloc_init_flags(QAllocOpts flags) QGuestAllocator *spapr_alloc_init_flags(QTestState *qts, QAllocOpts flags)
{ {
QGuestAllocator *s; QGuestAllocator *s;
@ -34,5 +34,5 @@ QGuestAllocator *spapr_alloc_init_flags(QAllocOpts flags)
QGuestAllocator *spapr_alloc_init(void) QGuestAllocator *spapr_alloc_init(void)
{ {
return spapr_alloc_init_flags(ALLOC_NO_FLAGS); return spapr_alloc_init_flags(NULL, ALLOC_NO_FLAGS);
} }

View File

@ -11,7 +11,7 @@
#include "libqos/malloc.h" #include "libqos/malloc.h"
QGuestAllocator *spapr_alloc_init(void); QGuestAllocator *spapr_alloc_init(void);
QGuestAllocator *spapr_alloc_init_flags(QAllocOpts flags); QGuestAllocator *spapr_alloc_init_flags(QTestState *qts, QAllocOpts flags);
void spapr_alloc_uninit(QGuestAllocator *allocator); void spapr_alloc_uninit(QGuestAllocator *allocator);
#endif #endif

View File

@ -14,6 +14,7 @@
#define LIBQOS_MALLOC_H #define LIBQOS_MALLOC_H
#include "qemu/queue.h" #include "qemu/queue.h"
#include "libqtest.h"
typedef enum { typedef enum {
ALLOC_NO_FLAGS = 0x00, ALLOC_NO_FLAGS = 0x00,

View File

@ -191,7 +191,7 @@ static void init_virtio_dev(TestServer *s, uint32_t features_mask)
qvirtio_set_acknowledge(&s->dev->vdev); qvirtio_set_acknowledge(&s->dev->vdev);
qvirtio_set_driver(&s->dev->vdev); qvirtio_set_driver(&s->dev->vdev);
s->alloc = pc_alloc_init(); s->alloc = pc_alloc_init(global_qtest);
for (i = 0; i < s->queues * 2; i++) { for (i = 0; i < s->queues * 2; i++) {
s->vq[i] = qvirtqueue_setup(&s->dev->vdev, s->alloc, i); s->vq[i] = qvirtqueue_setup(&s->dev->vdev, s->alloc, i);