mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
The last big chunk of s390x changes:
- (experimental) smp support under tcg - provide the virtio-input devices for virtio-ccw - improve error handling in the css code - enable some simple virtio tests for s390x - low-address protection in tcg - some more cleanups and fixes -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJZ6eLCAAoJEN7Pa5PG8C+vWaMP/jpZKKp1EeHqj7HE53i7rEU0 w8tbeT1LttqpVo8n/FO1rP5+BaMSVENZs9h51sp8gXuZs7atr1c+TgAIMZ+4tsAc pMBhwgMxNJUYnLD6IhTvisXY7O0wjZyaY4VwWmjyMjcIpvekkwZnQl4SxoRzLIKz OWFmEomGFU3jxa4S6nr6CY1iu8Gi0jtigcjia/N7TC9w79ejRSAQbcNUL02E0ozq jd8pKokjCXHy7psc8XsQkTjZ6tEhrtGR/1NF4hFnhqj+GNz2Bsf+FB/0WS3xLlv/ jQpsajHs5utJFi8PhG8RF5V3Q0gz3MD4u1mqU7LiRlgmeLAsdyb1FY5YWEfwLfbw k6m2SuI29tFWMgy1Hl+ctLKnZ7kNrMy6zgurJJKt9ZaTXLJxx6NV7neKvFy/B1s8 bQV/1Q3ZvkIJeZLWc+TmEv7jujEglLEtVYKMndcWqagiUYLi94jQlVTrHS69j7WQ oZKq8DIVRz5ZEtHzHZTqXYGtId/zUW9zngslVSLr5FKhA06zFSijoMCUFaOAQlAQ RSumwYOOiDKQ9OTjOJ1u6eiMw4c+HHQGF20LBF7LSwRCGmBkJcd3kN9j5VirIfFJ 581mJ1yxR2vj802f0WKDeDsSbvvY6QD4ASBYXsXM5uya/K/4hfdgt9672MJkhzwd dNYI+cdSyQYKxEVvVBU5 =VaIB -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20171020' into staging The last big chunk of s390x changes: - (experimental) smp support under tcg - provide the virtio-input devices for virtio-ccw - improve error handling in the css code - enable some simple virtio tests for s390x - low-address protection in tcg - some more cleanups and fixes # gpg: Signature made Fri 20 Oct 2017 12:49:22 BST # gpg: using RSA key 0xDECF6B93C6F02FAF # gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>" # gpg: aka "Cornelia Huck <huckc@linux.vnet.ibm.com>" # gpg: aka "Cornelia Huck <cornelia.huck@de.ibm.com>" # gpg: aka "Cornelia Huck <cohuck@kernel.org>" # gpg: aka "Cornelia Huck <cohuck@redhat.com>" # Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0 18CE DECF 6B93 C6F0 2FAF * remotes/cohuck/tags/s390x-20171020: (46 commits) s390x/tcg: low-address protection support accel/tcg: allow to invalidate a write TLB entry immediately tests: Enable the very simple virtio tests on s390x, too libqtest: Add qtest_[v]startf() s390x: refactor error handling for MSCH handler s390x: refactor error handling for HSCH handler s390x: refactor error handling for CSCH handler s390x: refactor error handling for XSCH handler s390x: improve error handling for SSCH and RSCH s390x/css: IO instr handler ending control s390x: move s390x_new_cpu() into board code s390x: fix cpu object referrence leak in s390x_new_cpu() s390x/event-facility: variable-length event masks s390x/MAINTAINERS: add mailing list virtio-ccw: Add the virtio-input devices for CCW bus target/s390x: special handling when starting a CPU with WAIT PSW s390x/tcg: refactor stfl(e) to use s390_get_feat_block() s390x/tcg: unlock NMI s390x/cpumodel: allow to enable SENSE RUNNING STATUS for qemu s390x/tcg: switch to new SIGP handling code ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
718757eca9
54 changed files with 1581 additions and 1168 deletions
|
@ -367,6 +367,9 @@ check-qtest-s390x-$(CONFIG_SLIRP) += tests/test-netfilter$(EXESUF)
|
|||
check-qtest-s390x-$(CONFIG_POSIX) += tests/test-filter-mirror$(EXESUF)
|
||||
check-qtest-s390x-$(CONFIG_POSIX) += tests/test-filter-redirector$(EXESUF)
|
||||
check-qtest-s390x-y += tests/drive_del-test$(EXESUF)
|
||||
check-qtest-s390x-y += tests/virtio-balloon-test$(EXESUF)
|
||||
check-qtest-s390x-y += tests/virtio-console-test$(EXESUF)
|
||||
check-qtest-s390x-y += tests/virtio-serial-test$(EXESUF)
|
||||
|
||||
check-qtest-generic-y += tests/qom-test$(EXESUF)
|
||||
check-qtest-generic-y += tests/test-hmp$(EXESUF)
|
||||
|
@ -754,14 +757,14 @@ tests/vmxnet3-test$(EXESUF): tests/vmxnet3-test.o
|
|||
tests/ne2000-test$(EXESUF): tests/ne2000-test.o
|
||||
tests/wdt_ib700-test$(EXESUF): tests/wdt_ib700-test.o
|
||||
tests/tco-test$(EXESUF): tests/tco-test.o $(libqos-pc-obj-y)
|
||||
tests/virtio-balloon-test$(EXESUF): tests/virtio-balloon-test.o
|
||||
tests/virtio-balloon-test$(EXESUF): tests/virtio-balloon-test.o $(libqos-virtio-obj-y)
|
||||
tests/virtio-blk-test$(EXESUF): tests/virtio-blk-test.o $(libqos-virtio-obj-y)
|
||||
tests/virtio-net-test$(EXESUF): tests/virtio-net-test.o $(libqos-pc-obj-y) $(libqos-virtio-obj-y)
|
||||
tests/virtio-rng-test$(EXESUF): tests/virtio-rng-test.o $(libqos-pc-obj-y)
|
||||
tests/virtio-scsi-test$(EXESUF): tests/virtio-scsi-test.o $(libqos-virtio-obj-y)
|
||||
tests/virtio-9p-test$(EXESUF): tests/virtio-9p-test.o $(libqos-virtio-obj-y)
|
||||
tests/virtio-serial-test$(EXESUF): tests/virtio-serial-test.o
|
||||
tests/virtio-console-test$(EXESUF): tests/virtio-console-test.o
|
||||
tests/virtio-serial-test$(EXESUF): tests/virtio-serial-test.o $(libqos-virtio-obj-y)
|
||||
tests/virtio-console-test$(EXESUF): tests/virtio-console-test.o $(libqos-virtio-obj-y)
|
||||
tests/tpci200-test$(EXESUF): tests/tpci200-test.o
|
||||
tests/display-vga-test$(EXESUF): tests/display-vga-test.o
|
||||
tests/ipoctal232-test$(EXESUF): tests/ipoctal232-test.o
|
||||
|
|
|
@ -28,14 +28,12 @@ static void test_a_boot_order(const char *machine,
|
|||
uint64_t expected_boot,
|
||||
uint64_t expected_reboot)
|
||||
{
|
||||
char *args;
|
||||
uint64_t actual;
|
||||
|
||||
args = g_strdup_printf("-nodefaults%s%s %s",
|
||||
machine ? " -M " : "",
|
||||
machine ?: "",
|
||||
test_args);
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-nodefaults%s%s %s",
|
||||
machine ? " -M " : "",
|
||||
machine ?: "",
|
||||
test_args);
|
||||
actual = read_boot_order();
|
||||
g_assert_cmphex(actual, ==, expected_boot);
|
||||
qmp_discard_response("{ 'execute': 'system_reset' }");
|
||||
|
@ -47,7 +45,6 @@ static void test_a_boot_order(const char *machine,
|
|||
actual = read_boot_order();
|
||||
g_assert_cmphex(actual, ==, expected_reboot);
|
||||
qtest_quit(global_qtest);
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
static void test_boot_orders(const char *machine,
|
||||
|
|
|
@ -71,7 +71,6 @@ done:
|
|||
static void test_machine(const void *data)
|
||||
{
|
||||
const testdef_t *test = data;
|
||||
char *args;
|
||||
char tmpname[] = "/tmp/qtest-boot-serial-XXXXXX";
|
||||
int fd;
|
||||
|
||||
|
@ -82,18 +81,15 @@ static void test_machine(const void *data)
|
|||
* Make sure that this test uses tcg if available: It is used as a
|
||||
* fast-enough smoketest for that.
|
||||
*/
|
||||
args = g_strdup_printf("-M %s,accel=tcg:kvm "
|
||||
"-chardev file,id=serial0,path=%s "
|
||||
"-no-shutdown -serial chardev:serial0 %s",
|
||||
test->machine, tmpname, test->extra);
|
||||
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M %s,accel=tcg:kvm "
|
||||
"-chardev file,id=serial0,path=%s "
|
||||
"-no-shutdown -serial chardev:serial0 %s",
|
||||
test->machine, tmpname, test->extra);
|
||||
unlink(tmpname);
|
||||
|
||||
check_guest_output(test, fd);
|
||||
qtest_quit(global_qtest);
|
||||
|
||||
g_free(args);
|
||||
close(fd);
|
||||
}
|
||||
|
||||
|
|
|
@ -114,13 +114,11 @@ static void isa_outl(const TestCase *test, uint16_t addr, uint32_t value)
|
|||
static void test_endianness(gconstpointer data)
|
||||
{
|
||||
const TestCase *test = data;
|
||||
char *args;
|
||||
|
||||
args = g_strdup_printf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
isa_outl(test, 0xe0, 0x87654321);
|
||||
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321);
|
||||
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);
|
||||
|
@ -183,19 +181,16 @@ static void test_endianness(gconstpointer data)
|
|||
g_assert_cmphex(isa_inb(test, 0xe1), ==, 0x43);
|
||||
g_assert_cmphex(isa_inb(test, 0xe0), ==, 0x21);
|
||||
qtest_quit(global_qtest);
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
static void test_endianness_split(gconstpointer data)
|
||||
{
|
||||
const TestCase *test = data;
|
||||
char *args;
|
||||
|
||||
args = g_strdup_printf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
isa_outl(test, 0xe8, 0x87654321);
|
||||
g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321);
|
||||
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);
|
||||
|
@ -230,19 +225,16 @@ static void test_endianness_split(gconstpointer data)
|
|||
g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);
|
||||
g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321);
|
||||
qtest_quit(global_qtest);
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
static void test_endianness_combine(gconstpointer data)
|
||||
{
|
||||
const TestCase *test = data;
|
||||
char *args;
|
||||
|
||||
args = g_strdup_printf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M %s%s%s -device pc-testdev",
|
||||
test->machine,
|
||||
test->superio ? " -device " : "",
|
||||
test->superio ?: "");
|
||||
isa_outl(test, 0xe0, 0x87654321);
|
||||
g_assert_cmphex(isa_inl(test, 0xe8), ==, 0x87654321);
|
||||
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765);
|
||||
|
@ -277,7 +269,6 @@ static void test_endianness_combine(gconstpointer data)
|
|||
g_assert_cmphex(isa_inw(test, 0xea), ==, 0x8765);
|
||||
g_assert_cmphex(isa_inw(test, 0xe8), ==, 0x4321);
|
||||
qtest_quit(global_qtest);
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
|
|
@ -401,7 +401,6 @@ static void open_socket(void)
|
|||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *arch = qtest_get_arch();
|
||||
char *cmdline;
|
||||
int ret;
|
||||
|
||||
/* Check architecture */
|
||||
|
@ -415,12 +414,10 @@ int main(int argc, char **argv)
|
|||
/* Run the tests */
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
cmdline = g_strdup_printf(
|
||||
" -chardev socket,id=ipmi0,host=localhost,port=%d,reconnect=10"
|
||||
" -device ipmi-bmc-extern,chardev=ipmi0,id=bmc0"
|
||||
" -device isa-ipmi-bt,bmc=bmc0", emu_port);
|
||||
qtest_start(cmdline);
|
||||
g_free(cmdline);
|
||||
global_qtest = qtest_startf(
|
||||
" -chardev socket,id=ipmi0,host=localhost,port=%d,reconnect=10"
|
||||
" -device ipmi-bmc-extern,chardev=ipmi0,id=bmc0"
|
||||
" -device isa-ipmi-bt,bmc=bmc0", emu_port);
|
||||
qtest_irq_intercept_in(global_qtest, "ioapic");
|
||||
qtest_add_func("/ipmi/extern/connect", test_connect);
|
||||
qtest_add_func("/ipmi/extern/bt_base", test_bt_base);
|
||||
|
|
|
@ -244,6 +244,28 @@ QTestState *qtest_init(const char *extra_args)
|
|||
return s;
|
||||
}
|
||||
|
||||
QTestState *qtest_vstartf(const char *fmt, va_list ap)
|
||||
{
|
||||
char *args = g_strdup_vprintf(fmt, ap);
|
||||
QTestState *s;
|
||||
|
||||
s = qtest_start(args);
|
||||
g_free(args);
|
||||
global_qtest = NULL;
|
||||
return s;
|
||||
}
|
||||
|
||||
QTestState *qtest_startf(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
QTestState *s;
|
||||
|
||||
va_start(ap, fmt);
|
||||
s = qtest_vstartf(fmt, ap);
|
||||
va_end(ap);
|
||||
return s;
|
||||
}
|
||||
|
||||
void qtest_quit(QTestState *s)
|
||||
{
|
||||
g_hook_destroy_link(&abrt_hooks, g_hook_find_data(&abrt_hooks, TRUE, s));
|
||||
|
|
|
@ -23,6 +23,31 @@ typedef struct QTestState QTestState;
|
|||
|
||||
extern QTestState *global_qtest;
|
||||
|
||||
/**
|
||||
* qtest_startf:
|
||||
* @fmt...: Format for creating other arguments to pass to QEMU, formatted
|
||||
* like sprintf().
|
||||
*
|
||||
* Start QEMU and return the resulting #QTestState (but unlike qtest_start(),
|
||||
* #global_qtest is left at NULL).
|
||||
*
|
||||
* Returns: #QTestState instance.
|
||||
*/
|
||||
QTestState *qtest_startf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
|
||||
|
||||
/**
|
||||
* qtest_vstartf:
|
||||
* @fmt: Format for creating other arguments to pass to QEMU, formatted
|
||||
* like vsprintf().
|
||||
* @ap: Format arguments.
|
||||
*
|
||||
* Start QEMU and return the resulting #QTestState (but unlike qtest_start(),
|
||||
* #global_qtest is left at NULL).
|
||||
*
|
||||
* Returns: #QTestState instance.
|
||||
*/
|
||||
QTestState *qtest_vstartf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
|
||||
|
||||
/**
|
||||
* qtest_init:
|
||||
* @extra_args: other arguments to pass to QEMU.
|
||||
|
|
|
@ -354,7 +354,6 @@ int main(int argc, char **argv)
|
|||
{
|
||||
int ret;
|
||||
int fd;
|
||||
char *args;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
|
||||
|
@ -364,10 +363,9 @@ int main(int argc, char **argv)
|
|||
g_assert(ret == 0);
|
||||
close(fd);
|
||||
|
||||
args = g_strdup_printf("-m 256 -machine palmetto-bmc "
|
||||
"-drive file=%s,format=raw,if=mtd",
|
||||
tmp_path);
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-m 256 -machine palmetto-bmc "
|
||||
"-drive file=%s,format=raw,if=mtd",
|
||||
tmp_path);
|
||||
|
||||
qtest_add_func("/m25p80/read_jedec", test_read_jedec);
|
||||
qtest_add_func("/m25p80/erase_sector", test_erase_sector);
|
||||
|
@ -380,6 +378,5 @@ int main(int argc, char **argv)
|
|||
|
||||
qtest_quit(global_qtest);
|
||||
unlink(tmp_path);
|
||||
g_free(args);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -81,16 +81,12 @@ static void test_xscom_cfam_id(const PnvChip *chip)
|
|||
|
||||
static void test_cfam_id(const void *data)
|
||||
{
|
||||
char *args;
|
||||
const PnvChip *chip = data;
|
||||
|
||||
args = g_strdup_printf("-M powernv,accel=tcg -cpu %s", chip->cpu_model);
|
||||
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M powernv,accel=tcg -cpu %s",
|
||||
chip->cpu_model);
|
||||
test_xscom_cfam_id(chip);
|
||||
qtest_quit(global_qtest);
|
||||
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
#define PNV_XSCOM_EX_CORE_BASE(chip, i) \
|
||||
|
@ -109,16 +105,12 @@ static void test_xscom_core(const PnvChip *chip)
|
|||
|
||||
static void test_core(const void *data)
|
||||
{
|
||||
char *args;
|
||||
const PnvChip *chip = data;
|
||||
|
||||
args = g_strdup_printf("-M powernv,accel=tcg -cpu %s", chip->cpu_model);
|
||||
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M powernv,accel=tcg -cpu %s",
|
||||
chip->cpu_model);
|
||||
test_xscom_core(chip);
|
||||
qtest_quit(global_qtest);
|
||||
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
static void add_test(const char *name, void (*test)(const void *data))
|
||||
|
|
|
@ -44,21 +44,18 @@ static void check_guest_memory(void)
|
|||
|
||||
static void test_machine(const void *machine)
|
||||
{
|
||||
char *args;
|
||||
const char *extra_args;
|
||||
|
||||
/* The pseries firmware boots much faster without the default devices */
|
||||
extra_args = strcmp(machine, "pseries") == 0 ? "-nodefaults" : "";
|
||||
|
||||
args = g_strdup_printf("-M %s,accel=tcg %s -prom-env 'use-nvramrc?=true' "
|
||||
"-prom-env 'nvramrc=%x %x l!' ",
|
||||
(const char *)machine, extra_args, MAGIC, ADDRESS);
|
||||
|
||||
qtest_start(args);
|
||||
global_qtest = qtest_startf("-M %s,accel=tcg %s "
|
||||
"-prom-env 'use-nvramrc?=true' "
|
||||
"-prom-env 'nvramrc=%x %x l!' ",
|
||||
(const char *)machine, extra_args,
|
||||
MAGIC, ADDRESS);
|
||||
check_guest_memory();
|
||||
qtest_quit(global_qtest);
|
||||
|
||||
g_free(args);
|
||||
}
|
||||
|
||||
static void add_tests(const char *machines[])
|
||||
|
|
|
@ -55,14 +55,12 @@ static void test_end(TestData *d)
|
|||
static void test_init(TestData *d)
|
||||
{
|
||||
QTestState *qs;
|
||||
char *s;
|
||||
|
||||
s = g_strdup_printf("-machine q35 %s %s",
|
||||
d->noreboot ? "" : "-global ICH9-LPC.noreboot=false",
|
||||
!d->args ? "" : d->args);
|
||||
qs = qtest_start(s);
|
||||
qs = qtest_startf("-machine q35 %s %s",
|
||||
d->noreboot ? "" : "-global ICH9-LPC.noreboot=false",
|
||||
!d->args ? "" : d->args);
|
||||
global_qtest = qs;
|
||||
qtest_irq_intercept_in(qs, "ioapic");
|
||||
g_free(s);
|
||||
|
||||
d->bus = qpci_init_pc(NULL);
|
||||
d->dev = qpci_device_find(d->bus, QPCI_DEVFN(0x1f, 0x00));
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
static void test_mirror(void)
|
||||
{
|
||||
int send_sock[2], recv_sock;
|
||||
char *cmdline;
|
||||
uint32_t ret = 0, len = 0;
|
||||
char send_buf[] = "Hello! filter-mirror~";
|
||||
char sock_path[] = "filter-mirror.XXXXXX";
|
||||
|
@ -37,13 +36,12 @@ static void test_mirror(void)
|
|||
ret = mkstemp(sock_path);
|
||||
g_assert_cmpint(ret, !=, -1);
|
||||
|
||||
cmdline = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=mirror0,path=%s,server,nowait "
|
||||
"-object filter-mirror,id=qtest-f0,netdev=qtest-bn0,queue=tx,outdev=mirror0 "
|
||||
, send_sock[1], devstr, sock_path);
|
||||
qtest_start(cmdline);
|
||||
g_free(cmdline);
|
||||
global_qtest = qtest_startf(
|
||||
"-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=mirror0,path=%s,server,nowait "
|
||||
"-object filter-mirror,id=qtest-f0,netdev=qtest-bn0,queue=tx,outdev=mirror0 "
|
||||
, send_sock[1], devstr, sock_path);
|
||||
|
||||
recv_sock = unix_connect(sock_path, NULL);
|
||||
g_assert_cmpint(recv_sock, !=, -1);
|
||||
|
|
|
@ -70,7 +70,6 @@ static const char *get_devstr(void)
|
|||
static void test_redirector_tx(void)
|
||||
{
|
||||
int backend_sock[2], recv_sock;
|
||||
char *cmdline;
|
||||
uint32_t ret = 0, len = 0;
|
||||
char send_buf[] = "Hello!!";
|
||||
char sock_path0[] = "filter-redirector0.XXXXXX";
|
||||
|
@ -87,20 +86,19 @@ static void test_redirector_tx(void)
|
|||
ret = mkstemp(sock_path1);
|
||||
g_assert_cmpint(ret, !=, -1);
|
||||
|
||||
cmdline = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=redirector0,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector1,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector2,path=%s,nowait "
|
||||
"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"
|
||||
"queue=tx,outdev=redirector0 "
|
||||
"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"
|
||||
"queue=tx,indev=redirector2 "
|
||||
"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"
|
||||
"queue=tx,outdev=redirector1 ", backend_sock[1], get_devstr(),
|
||||
sock_path0, sock_path1, sock_path0);
|
||||
qtest_start(cmdline);
|
||||
g_free(cmdline);
|
||||
global_qtest = qtest_startf(
|
||||
"-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=redirector0,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector1,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector2,path=%s,nowait "
|
||||
"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"
|
||||
"queue=tx,outdev=redirector0 "
|
||||
"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"
|
||||
"queue=tx,indev=redirector2 "
|
||||
"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"
|
||||
"queue=tx,outdev=redirector1 ", backend_sock[1], get_devstr(),
|
||||
sock_path0, sock_path1, sock_path0);
|
||||
|
||||
recv_sock = unix_connect(sock_path1, NULL);
|
||||
g_assert_cmpint(recv_sock, !=, -1);
|
||||
|
@ -141,7 +139,6 @@ static void test_redirector_tx(void)
|
|||
static void test_redirector_rx(void)
|
||||
{
|
||||
int backend_sock[2], send_sock;
|
||||
char *cmdline;
|
||||
uint32_t ret = 0, len = 0;
|
||||
char send_buf[] = "Hello!!";
|
||||
char sock_path0[] = "filter-redirector0.XXXXXX";
|
||||
|
@ -158,20 +155,19 @@ static void test_redirector_rx(void)
|
|||
ret = mkstemp(sock_path1);
|
||||
g_assert_cmpint(ret, !=, -1);
|
||||
|
||||
cmdline = g_strdup_printf("-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=redirector0,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector1,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector2,path=%s,nowait "
|
||||
"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"
|
||||
"queue=rx,indev=redirector0 "
|
||||
"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"
|
||||
"queue=rx,outdev=redirector2 "
|
||||
"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"
|
||||
"queue=rx,indev=redirector1 ", backend_sock[1], get_devstr(),
|
||||
sock_path0, sock_path1, sock_path0);
|
||||
qtest_start(cmdline);
|
||||
g_free(cmdline);
|
||||
global_qtest = qtest_startf(
|
||||
"-netdev socket,id=qtest-bn0,fd=%d "
|
||||
"-device %s,netdev=qtest-bn0,id=qtest-e0 "
|
||||
"-chardev socket,id=redirector0,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector1,path=%s,server,nowait "
|
||||
"-chardev socket,id=redirector2,path=%s,nowait "
|
||||
"-object filter-redirector,id=qtest-f0,netdev=qtest-bn0,"
|
||||
"queue=rx,indev=redirector0 "
|
||||
"-object filter-redirector,id=qtest-f1,netdev=qtest-bn0,"
|
||||
"queue=rx,outdev=redirector2 "
|
||||
"-object filter-redirector,id=qtest-f2,netdev=qtest-bn0,"
|
||||
"queue=rx,indev=redirector1 ", backend_sock[1], get_devstr(),
|
||||
sock_path0, sock_path1, sock_path0);
|
||||
|
||||
struct iovec iov[] = {
|
||||
{
|
||||
|
|
|
@ -9,9 +9,10 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "libqtest.h"
|
||||
#include "libqos/virtio.h"
|
||||
|
||||
/* Tests only initialization so far. TODO: Replace with functional tests */
|
||||
static void pci_nop(void)
|
||||
static void balloon_nop(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -20,9 +21,10 @@ int main(int argc, char **argv)
|
|||
int ret;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
qtest_add_func("/virtio/balloon/pci/nop", pci_nop);
|
||||
qtest_add_func("/virtio/balloon/nop", balloon_nop);
|
||||
|
||||
qtest_start("-device virtio-balloon-pci");
|
||||
global_qtest = qtest_startf("-device virtio-balloon-%s",
|
||||
qvirtio_get_dev_type());
|
||||
ret = g_test_run();
|
||||
|
||||
qtest_end();
|
||||
|
|
|
@ -84,19 +84,16 @@ static QOSState *pci_test_start(void)
|
|||
|
||||
static void arm_test_start(void)
|
||||
{
|
||||
char *cmdline;
|
||||
char *tmp_path;
|
||||
|
||||
tmp_path = drive_create();
|
||||
|
||||
cmdline = g_strdup_printf("-machine virt "
|
||||
global_qtest = qtest_startf("-machine virt "
|
||||
"-drive if=none,id=drive0,file=%s,format=raw "
|
||||
"-device virtio-blk-device,drive=drive0",
|
||||
tmp_path);
|
||||
qtest_start(cmdline);
|
||||
unlink(tmp_path);
|
||||
g_free(tmp_path);
|
||||
g_free(cmdline);
|
||||
}
|
||||
|
||||
static void test_end(void)
|
||||
|
|
|
@ -9,27 +9,30 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "libqtest.h"
|
||||
#include "libqos/virtio.h"
|
||||
|
||||
/* Tests only initialization so far. TODO: Replace with functional tests */
|
||||
static void console_pci_nop(void)
|
||||
static void console_nop(void)
|
||||
{
|
||||
qtest_start("-device virtio-serial-pci,id=vser0 "
|
||||
"-device virtconsole,bus=vser0.0");
|
||||
global_qtest = qtest_startf("-device virtio-serial-%s,id=vser0 "
|
||||
"-device virtconsole,bus=vser0.0",
|
||||
qvirtio_get_dev_type());
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
static void serialport_pci_nop(void)
|
||||
static void serialport_nop(void)
|
||||
{
|
||||
qtest_start("-device virtio-serial-pci,id=vser0 "
|
||||
"-device virtserialport,bus=vser0.0");
|
||||
global_qtest = qtest_startf("-device virtio-serial-%s,id=vser0 "
|
||||
"-device virtserialport,bus=vser0.0",
|
||||
qvirtio_get_dev_type());
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
qtest_add_func("/virtio/console/pci/nop", console_pci_nop);
|
||||
qtest_add_func("/virtio/serialport/pci/nop", serialport_pci_nop);
|
||||
qtest_add_func("/virtio/console/nop", console_nop);
|
||||
qtest_add_func("/virtio/serialport/nop", serialport_nop);
|
||||
|
||||
return g_test_run();
|
||||
}
|
||||
|
|
|
@ -9,9 +9,10 @@
|
|||
|
||||
#include "qemu/osdep.h"
|
||||
#include "libqtest.h"
|
||||
#include "libqos/virtio.h"
|
||||
|
||||
/* Tests only initialization so far. TODO: Replace with functional tests */
|
||||
static void pci_nop(void)
|
||||
static void virtio_serial_nop(void)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -27,10 +28,11 @@ int main(int argc, char **argv)
|
|||
int ret;
|
||||
|
||||
g_test_init(&argc, &argv, NULL);
|
||||
qtest_add_func("/virtio/serial/pci/nop", pci_nop);
|
||||
qtest_add_func("/virtio/serial/pci/hotplug", hotplug);
|
||||
qtest_add_func("/virtio/serial/nop", virtio_serial_nop);
|
||||
qtest_add_func("/virtio/serial/hotplug", hotplug);
|
||||
|
||||
qtest_start("-device virtio-serial-pci");
|
||||
global_qtest = qtest_startf("-device virtio-serial-%s",
|
||||
qvirtio_get_dev_type());
|
||||
ret = g_test_run();
|
||||
|
||||
qtest_end();
|
||||
|
|
|
@ -130,41 +130,32 @@ static void read_guid_from_monitor(QemuUUID *guid)
|
|||
|
||||
static char disk[] = "tests/vmgenid-test-disk-XXXXXX";
|
||||
|
||||
static char *guid_cmd_strdup(const char *guid)
|
||||
{
|
||||
return g_strdup_printf("-machine accel=kvm:tcg "
|
||||
"-device vmgenid,id=testvgid,guid=%s "
|
||||
"-drive id=hd0,if=none,file=%s,format=raw "
|
||||
"-device ide-hd,drive=hd0 ",
|
||||
guid, disk);
|
||||
}
|
||||
|
||||
#define GUID_CMD(guid) \
|
||||
"-machine accel=kvm:tcg " \
|
||||
"-device vmgenid,id=testvgid,guid=%s " \
|
||||
"-drive id=hd0,if=none,file=%s,format=raw " \
|
||||
"-device ide-hd,drive=hd0 ", guid, disk
|
||||
|
||||
static void vmgenid_set_guid_test(void)
|
||||
{
|
||||
QemuUUID expected, measured;
|
||||
gchar *cmd;
|
||||
|
||||
g_assert(qemu_uuid_parse(VGID_GUID, &expected) == 0);
|
||||
|
||||
cmd = guid_cmd_strdup(VGID_GUID);
|
||||
qtest_start(cmd);
|
||||
global_qtest = qtest_startf(GUID_CMD(VGID_GUID));
|
||||
|
||||
/* Read the GUID from accessing guest memory */
|
||||
read_guid_from_memory(&measured);
|
||||
g_assert(memcmp(measured.data, expected.data, sizeof(measured.data)) == 0);
|
||||
|
||||
qtest_quit(global_qtest);
|
||||
g_free(cmd);
|
||||
}
|
||||
|
||||
static void vmgenid_set_guid_auto_test(void)
|
||||
{
|
||||
char *cmd;
|
||||
QemuUUID measured;
|
||||
|
||||
cmd = guid_cmd_strdup("auto");
|
||||
qtest_start(cmd);
|
||||
global_qtest = qtest_startf(GUID_CMD("auto"));
|
||||
|
||||
read_guid_from_memory(&measured);
|
||||
|
||||
|
@ -172,25 +163,21 @@ static void vmgenid_set_guid_auto_test(void)
|
|||
g_assert(!qemu_uuid_is_null(&measured));
|
||||
|
||||
qtest_quit(global_qtest);
|
||||
g_free(cmd);
|
||||
}
|
||||
|
||||
static void vmgenid_query_monitor_test(void)
|
||||
{
|
||||
QemuUUID expected, measured;
|
||||
gchar *cmd;
|
||||
|
||||
g_assert(qemu_uuid_parse(VGID_GUID, &expected) == 0);
|
||||
|
||||
cmd = guid_cmd_strdup(VGID_GUID);
|
||||
qtest_start(cmd);
|
||||
global_qtest = qtest_startf(GUID_CMD(VGID_GUID));
|
||||
|
||||
/* Read the GUID via the monitor */
|
||||
read_guid_from_monitor(&measured);
|
||||
g_assert(memcmp(measured.data, expected.data, sizeof(measured.data)) == 0);
|
||||
|
||||
qtest_quit(global_qtest);
|
||||
g_free(cmd);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue