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:
Peter Maydell 2017-10-20 13:33:32 +01:00
commit 718757eca9
54 changed files with 1581 additions and 1168 deletions

View file

@ -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

View file

@ -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,

View file

@ -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);
}

View file

@ -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)

View file

@ -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);

View file

@ -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));

View file

@ -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.

View file

@ -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;
}

View file

@ -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))

View file

@ -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[])

View file

@ -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));

View file

@ -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);

View file

@ -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[] = {
{

View file

@ -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();

View file

@ -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)

View file

@ -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();
}

View file

@ -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();

View file

@ -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)