mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge remote-tracking branch 'remotes/elmarco/tags/leak-pull-request' into staging
# gpg: Signature made Wed 01 Mar 2017 09:02:53 GMT # gpg: using RSA key 0xDAE8E10975969CE5 # gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" # gpg: aka "Marc-André Lureau <marcandre.lureau@gmail.com>" # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 87A9 BD93 3F87 C606 D276 F62D DAE8 E109 7596 9CE5 * remotes/elmarco/tags/leak-pull-request: (28 commits) tests: fix virtio-blk-test leaks tests: add specialized device_find function tests: fix usb-test leaks tests: allows to run single test in usb-hcd-ehci-test usb: release the created buses bus: do not unref hotplug handler tests: fix virtio-9p-test leaks tests: fix virtio-scsi-test leak tests: fix e1000e leaks tests: fix i440fx-test leaks tests: fix e1000-test leak tests: fix tco-test leaks tests: fix eepro100-test leak pc: pcihp: avoid adding ACPI_PCIHP_PROP_BSEL twice tests: fix ipmi-bt-test leak tests: fix ipmi-kcs-test leak tests: fix bios-tables-test leak tests: fix hd-geo-test leaks tests: fix ide-test leaks tests: fix vhost-user-test leaks ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -49,7 +49,6 @@
|
||||
|
||||
#define ACPI_PCIHP_ADDR 0xae00
|
||||
#define ACPI_PCIHP_SIZE 0x0014
|
||||
#define ACPI_PCIHP_LEGACY_SIZE 0x000f
|
||||
#define PCI_UP_BASE 0x0000
|
||||
#define PCI_DOWN_BASE 0x0004
|
||||
#define PCI_EJ_BASE 0x0008
|
||||
@@ -302,16 +301,6 @@ void acpi_pcihp_init(Object *owner, AcpiPciHpState *s, PCIBus *root_bus,
|
||||
s->root= root_bus;
|
||||
s->legacy_piix = !bridges_enabled;
|
||||
|
||||
if (s->legacy_piix) {
|
||||
unsigned *bus_bsel = g_malloc(sizeof *bus_bsel);
|
||||
|
||||
s->io_len = ACPI_PCIHP_LEGACY_SIZE;
|
||||
|
||||
*bus_bsel = ACPI_PCIHP_BSEL_DEFAULT;
|
||||
object_property_add_uint32_ptr(OBJECT(root_bus), ACPI_PCIHP_PROP_BSEL,
|
||||
bus_bsel, NULL);
|
||||
}
|
||||
|
||||
memory_region_init_io(&s->io, owner, &acpi_pcihp_io_ops, s,
|
||||
"acpi-pci-hotplug", s->io_len);
|
||||
memory_region_add_subregion(address_space_io, s->io_base, &s->io);
|
||||
|
||||
@@ -440,6 +440,8 @@ static void piix4_update_bus_hotplug(PCIBus *pci_bus, void *opaque)
|
||||
{
|
||||
PIIX4PMState *s = opaque;
|
||||
|
||||
/* pci_bus cannot outlive PIIX4PMState, because /machine keeps it alive
|
||||
* and it's not hot-unpluggable */
|
||||
qbus_set_hotplug_handler(BUS(pci_bus), DEVICE(s), &error_abort);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ static void qbus_initfn(Object *obj)
|
||||
TYPE_HOTPLUG_HANDLER,
|
||||
(Object **)&bus->hotplug_handler,
|
||||
object_property_allow_set_link,
|
||||
OBJ_PROP_LINK_UNREF_ON_RELEASE,
|
||||
0,
|
||||
NULL);
|
||||
object_property_add_bool(obj, "realized",
|
||||
bus_get_realized, bus_set_realized, NULL);
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "qemu/host-utils.h"
|
||||
#include "sysemu/replay.h"
|
||||
#include "sysemu/qtest.h"
|
||||
#include "block/aio.h"
|
||||
|
||||
#define DELTA_ADJUST 1
|
||||
#define DELTA_NO_ADJUST -1
|
||||
@@ -353,3 +354,10 @@ ptimer_state *ptimer_init(QEMUBH *bh, uint8_t policy_mask)
|
||||
s->policy_mask = policy_mask;
|
||||
return s;
|
||||
}
|
||||
|
||||
void ptimer_free(ptimer_state *s)
|
||||
{
|
||||
qemu_bh_delete(s->bh);
|
||||
timer_free(s->timer);
|
||||
g_free(s);
|
||||
}
|
||||
|
||||
@@ -462,7 +462,7 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque)
|
||||
|
||||
*bus_bsel = (*bsel_alloc)++;
|
||||
object_property_add_uint32_ptr(OBJECT(bus), ACPI_PCIHP_PROP_BSEL,
|
||||
bus_bsel, NULL);
|
||||
bus_bsel, &error_abort);
|
||||
}
|
||||
|
||||
return bsel_alloc;
|
||||
@@ -471,7 +471,7 @@ static void *acpi_set_bsel(PCIBus *bus, void *opaque)
|
||||
static void acpi_set_pci_info(void)
|
||||
{
|
||||
PCIBus *bus = find_i440fx(); /* TODO: Q35 support */
|
||||
unsigned bsel_alloc = 0;
|
||||
unsigned bsel_alloc = ACPI_PCIHP_BSEL_DEFAULT;
|
||||
|
||||
if (bus) {
|
||||
/* Scan all PCI buses. Set property to enable acpi based hotplug. */
|
||||
|
||||
@@ -589,6 +589,13 @@ static const struct SCSIBusInfo usb_msd_scsi_info_bot = {
|
||||
.load_request = usb_msd_load_request,
|
||||
};
|
||||
|
||||
static void usb_msd_unrealize_storage(USBDevice *dev, Error **errp)
|
||||
{
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
|
||||
object_unref(OBJECT(&s->bus));
|
||||
}
|
||||
|
||||
static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
|
||||
{
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
@@ -639,6 +646,13 @@ static void usb_msd_realize_storage(USBDevice *dev, Error **errp)
|
||||
s->scsi_dev = scsi_dev;
|
||||
}
|
||||
|
||||
static void usb_msd_unrealize_bot(USBDevice *dev, Error **errp)
|
||||
{
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
|
||||
object_unref(OBJECT(&s->bus));
|
||||
}
|
||||
|
||||
static void usb_msd_realize_bot(USBDevice *dev, Error **errp)
|
||||
{
|
||||
MSDState *s = USB_STORAGE_DEV(dev);
|
||||
@@ -759,6 +773,7 @@ static void usb_msd_class_initfn_storage(ObjectClass *klass, void *data)
|
||||
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
|
||||
|
||||
uc->realize = usb_msd_realize_storage;
|
||||
uc->unrealize = usb_msd_unrealize_storage;
|
||||
dc->props = msd_properties;
|
||||
}
|
||||
|
||||
@@ -821,6 +836,7 @@ static void usb_msd_class_initfn_bot(ObjectClass *klass, void *data)
|
||||
USBDeviceClass *uc = USB_DEVICE_CLASS(klass);
|
||||
|
||||
uc->realize = usb_msd_realize_bot;
|
||||
uc->unrealize = usb_msd_unrealize_bot;
|
||||
uc->attached_settable = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -896,6 +896,8 @@ static void usb_uas_unrealize(USBDevice *dev, Error **errp)
|
||||
UASDevice *uas = USB_UAS(dev);
|
||||
|
||||
qemu_bh_delete(uas->status_bh);
|
||||
|
||||
object_unref(OBJECT(&uas->bus));
|
||||
}
|
||||
|
||||
static void usb_uas_realize(USBDevice *dev, Error **errp)
|
||||
|
||||
@@ -328,4 +328,25 @@ static inline void g_source_set_name_by_id(guint tag, const char *name)
|
||||
#define g_test_subprocess() (0)
|
||||
#endif
|
||||
|
||||
|
||||
#if !GLIB_CHECK_VERSION(2, 34, 0)
|
||||
static inline void
|
||||
g_test_add_data_func_full(const char *path,
|
||||
gpointer data,
|
||||
gpointer fn,
|
||||
gpointer data_free_func)
|
||||
{
|
||||
#if GLIB_CHECK_VERSION(2, 26, 0)
|
||||
/* back-compat casts, remove this once we can require new-enough glib */
|
||||
g_test_add_vtable(path, 0, data, NULL,
|
||||
(GTestFixtureFunc)fn, (GTestFixtureFunc) data_free_func);
|
||||
#else
|
||||
/* back-compat casts, remove this once we can require new-enough glib */
|
||||
g_test_add_vtable(path, 0, data, NULL,
|
||||
(void (*)(void)) fn, (void (*)(void)) data_free_func);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -60,6 +60,7 @@ typedef struct ptimer_state ptimer_state;
|
||||
typedef void (*ptimer_cb)(void *opaque);
|
||||
|
||||
ptimer_state *ptimer_init(QEMUBH *bh, uint8_t policy_mask);
|
||||
void ptimer_free(ptimer_state *s);
|
||||
void ptimer_set_period(ptimer_state *s, int64_t period);
|
||||
void ptimer_set_freq(ptimer_state *s, uint32_t freq);
|
||||
uint64_t ptimer_get_limit(ptimer_state *s);
|
||||
|
||||
@@ -610,7 +610,10 @@ void timer_deinit(QEMUTimer *ts);
|
||||
*
|
||||
* Free a timer (it must not be on the active list)
|
||||
*/
|
||||
void timer_free(QEMUTimer *ts);
|
||||
static inline void timer_free(QEMUTimer *ts)
|
||||
{
|
||||
g_free(ts);
|
||||
}
|
||||
|
||||
/**
|
||||
* timer_del:
|
||||
|
||||
@@ -240,6 +240,7 @@ static void GCC_FMT_ATTR(2, 3) qtest_sendf(CharBackend *chr,
|
||||
va_start(ap, fmt);
|
||||
buffer = g_strdup_vprintf(fmt, ap);
|
||||
qtest_send(chr, buffer);
|
||||
g_free(buffer);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,7 +144,7 @@ static void free_test_data(test_data *data)
|
||||
g_free(temp->asl_file);
|
||||
}
|
||||
|
||||
g_array_free(data->tables, false);
|
||||
g_array_free(data->tables, true);
|
||||
}
|
||||
|
||||
static uint8_t acpi_checksum(const uint8_t *data, int len)
|
||||
|
||||
@@ -44,6 +44,7 @@ int main(int argc, char **argv)
|
||||
|
||||
path = g_strdup_printf("e1000/%s", models[i]);
|
||||
qtest_add_data_func(path, models[i], test_device);
|
||||
g_free(path);
|
||||
}
|
||||
|
||||
return g_test_run();
|
||||
|
||||
+5
-1
@@ -99,7 +99,10 @@ static QPCIBus *test_bus;
|
||||
|
||||
static void e1000e_pci_foreach_callback(QPCIDevice *dev, int devfn, void *data)
|
||||
{
|
||||
*(QPCIDevice **) data = dev;
|
||||
QPCIDevice **res = data;
|
||||
|
||||
g_assert_null(*res);
|
||||
*res = dev;
|
||||
}
|
||||
|
||||
static QPCIDevice *e1000e_device_find(QPCIBus *bus)
|
||||
@@ -403,6 +406,7 @@ static void data_test_clear(e1000e_device *d)
|
||||
e1000e_device_clear(test_bus, d);
|
||||
close(test_sockets[0]);
|
||||
pc_alloc_uninit(test_alloc);
|
||||
g_free(d->pci_dev);
|
||||
qpci_free_pc(test_bus);
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ int main(int argc, char **argv)
|
||||
|
||||
path = g_strdup_printf("eepro100/%s", models[i]);
|
||||
qtest_add_data_func(path, models[i], test_device);
|
||||
g_free(path);
|
||||
}
|
||||
|
||||
return g_test_run();
|
||||
|
||||
@@ -295,14 +295,17 @@ int main(int argc, char **argv)
|
||||
path = g_strdup_printf("endianness/%s",
|
||||
test_cases[i].machine);
|
||||
qtest_add_data_func(path, &test_cases[i], test_endianness);
|
||||
g_free(path);
|
||||
|
||||
path = g_strdup_printf("endianness/split/%s",
|
||||
test_cases[i].machine);
|
||||
qtest_add_data_func(path, &test_cases[i], test_endianness_split);
|
||||
g_free(path);
|
||||
|
||||
path = g_strdup_printf("endianness/combine/%s",
|
||||
test_cases[i].machine);
|
||||
qtest_add_data_func(path, &test_cases[i], test_endianness_combine);
|
||||
g_free(path);
|
||||
}
|
||||
|
||||
return g_test_run();
|
||||
|
||||
+35
-16
@@ -19,6 +19,8 @@
|
||||
#include "qemu-common.h"
|
||||
#include "libqtest.h"
|
||||
|
||||
#define ARGV_SIZE 256
|
||||
|
||||
static char *create_test_img(int secs)
|
||||
{
|
||||
char *template = strdup("/tmp/qtest.XXXXXX");
|
||||
@@ -66,7 +68,7 @@ static const CHST hd_chst[backend_last][mbr_last] = {
|
||||
},
|
||||
};
|
||||
|
||||
static const char *img_file_name[backend_last];
|
||||
static char *img_file_name[backend_last];
|
||||
|
||||
static const CHST *cur_ide[4];
|
||||
|
||||
@@ -234,28 +236,36 @@ static int setup_ide(int argc, char *argv[], int argv_sz,
|
||||
*/
|
||||
static void test_ide_none(void)
|
||||
{
|
||||
char *argv[256];
|
||||
char **argv = g_new0(char *, ARGV_SIZE);
|
||||
char *args;
|
||||
|
||||
setup_common(argv, ARRAY_SIZE(argv));
|
||||
qtest_start(g_strjoinv(" ", argv));
|
||||
setup_common(argv, ARGV_SIZE);
|
||||
args = g_strjoinv(" ", argv);
|
||||
qtest_start(args);
|
||||
g_strfreev(argv);
|
||||
g_free(args);
|
||||
test_cmos();
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
static void test_ide_mbr(bool use_device, MBRcontents mbr)
|
||||
{
|
||||
char *argv[256];
|
||||
char **argv = g_new0(char *, ARGV_SIZE);
|
||||
char *args;
|
||||
int argc;
|
||||
Backend i;
|
||||
const char *dev;
|
||||
|
||||
argc = setup_common(argv, ARRAY_SIZE(argv));
|
||||
argc = setup_common(argv, ARGV_SIZE);
|
||||
for (i = 0; i < backend_last; i++) {
|
||||
cur_ide[i] = &hd_chst[i][mbr];
|
||||
dev = use_device ? (is_hd(cur_ide[i]) ? "ide-hd" : "ide-cd") : NULL;
|
||||
argc = setup_ide(argc, argv, ARRAY_SIZE(argv), i, dev, i, mbr, "");
|
||||
argc = setup_ide(argc, argv, ARGV_SIZE, i, dev, i, mbr, "");
|
||||
}
|
||||
qtest_start(g_strjoinv(" ", argv));
|
||||
args = g_strjoinv(" ", argv);
|
||||
qtest_start(args);
|
||||
g_strfreev(argv);
|
||||
g_free(args);
|
||||
test_cmos();
|
||||
qtest_end();
|
||||
}
|
||||
@@ -310,12 +320,13 @@ static void test_ide_device_mbr_chs(void)
|
||||
|
||||
static void test_ide_drive_user(const char *dev, bool trans)
|
||||
{
|
||||
char *argv[256], *opts;
|
||||
char **argv = g_new0(char *, ARGV_SIZE);
|
||||
char *args, *opts;
|
||||
int argc;
|
||||
int secs = img_secs[backend_small];
|
||||
const CHST expected_chst = { secs / (4 * 32) , 4, 32, trans };
|
||||
|
||||
argc = setup_common(argv, ARRAY_SIZE(argv));
|
||||
argc = setup_common(argv, ARGV_SIZE);
|
||||
opts = g_strdup_printf("%s,%s%scyls=%d,heads=%d,secs=%d",
|
||||
dev ?: "",
|
||||
trans && dev ? "bios-chs-" : "",
|
||||
@@ -323,11 +334,14 @@ static void test_ide_drive_user(const char *dev, bool trans)
|
||||
expected_chst.cyls, expected_chst.heads,
|
||||
expected_chst.secs);
|
||||
cur_ide[0] = &expected_chst;
|
||||
argc = setup_ide(argc, argv, ARRAY_SIZE(argv),
|
||||
argc = setup_ide(argc, argv, ARGV_SIZE,
|
||||
0, dev ? opts : NULL, backend_small, mbr_chs,
|
||||
dev ? "" : opts);
|
||||
g_free(opts);
|
||||
qtest_start(g_strjoinv(" ", argv));
|
||||
args = g_strjoinv(" ", argv);
|
||||
qtest_start(args);
|
||||
g_strfreev(argv);
|
||||
g_free(args);
|
||||
test_cmos();
|
||||
qtest_end();
|
||||
}
|
||||
@@ -369,18 +383,22 @@ static void test_ide_device_user_chst(void)
|
||||
*/
|
||||
static void test_ide_drive_cd_0(void)
|
||||
{
|
||||
char *argv[256];
|
||||
char **argv = g_new0(char *, ARGV_SIZE);
|
||||
char *args;
|
||||
int argc, ide_idx;
|
||||
Backend i;
|
||||
|
||||
argc = setup_common(argv, ARRAY_SIZE(argv));
|
||||
argc = setup_common(argv, ARGV_SIZE);
|
||||
for (i = 0; i <= backend_empty; i++) {
|
||||
ide_idx = backend_empty - i;
|
||||
cur_ide[ide_idx] = &hd_chst[i][mbr_blank];
|
||||
argc = setup_ide(argc, argv, ARRAY_SIZE(argv),
|
||||
argc = setup_ide(argc, argv, ARGV_SIZE,
|
||||
ide_idx, NULL, i, mbr_blank, "");
|
||||
}
|
||||
qtest_start(g_strjoinv(" ", argv));
|
||||
args = g_strjoinv(" ", argv);
|
||||
qtest_start(args);
|
||||
g_strfreev(argv);
|
||||
g_free(args);
|
||||
test_cmos();
|
||||
qtest_end();
|
||||
}
|
||||
@@ -418,6 +436,7 @@ int main(int argc, char **argv)
|
||||
for (i = 0; i < backend_last; i++) {
|
||||
if (img_file_name[i]) {
|
||||
unlink(img_file_name[i]);
|
||||
free(img_file_name[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -134,6 +134,8 @@ static void test_i440fx_defaults(gconstpointer opaque)
|
||||
/* 3.2.26 */
|
||||
g_assert_cmpint(qpci_config_readb(dev, 0x93), ==, 0x00); /* TRC */
|
||||
|
||||
g_free(dev);
|
||||
qpci_free_pc(bus);
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
@@ -270,6 +272,9 @@ static void test_i440fx_pam(gconstpointer opaque)
|
||||
/* Verify the area is not our new mask */
|
||||
g_assert(!verify_area(pam_area[i].start, pam_area[i].end, 0x82));
|
||||
}
|
||||
|
||||
g_free(dev);
|
||||
qpci_free_pc(bus);
|
||||
qtest_end();
|
||||
}
|
||||
|
||||
|
||||
@@ -339,6 +339,7 @@ static void test_bmdma_simple_rw(void)
|
||||
g_assert(memcmp(buf, cmpbuf, len) == 0);
|
||||
|
||||
|
||||
free_pci_device(dev);
|
||||
g_free(buf);
|
||||
g_free(cmpbuf);
|
||||
}
|
||||
@@ -369,6 +370,7 @@ static void test_bmdma_short_prdt(void)
|
||||
prdt, ARRAY_SIZE(prdt), NULL);
|
||||
g_assert_cmphex(status, ==, 0);
|
||||
assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR);
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_bmdma_one_sector_short_prdt(void)
|
||||
@@ -398,6 +400,7 @@ static void test_bmdma_one_sector_short_prdt(void)
|
||||
prdt, ARRAY_SIZE(prdt), NULL);
|
||||
g_assert_cmphex(status, ==, 0);
|
||||
assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR);
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_bmdma_long_prdt(void)
|
||||
@@ -426,6 +429,7 @@ static void test_bmdma_long_prdt(void)
|
||||
prdt, ARRAY_SIZE(prdt), NULL);
|
||||
g_assert_cmphex(status, ==, BM_STS_INTR);
|
||||
assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR);
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_bmdma_no_busmaster(void)
|
||||
@@ -449,6 +453,7 @@ static void test_bmdma_no_busmaster(void)
|
||||
* in practice. At least we want to be aware of any changes. */
|
||||
g_assert_cmphex(status, ==, BM_STS_ACTIVE | BM_STS_INTR);
|
||||
assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR);
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_bmdma_setup(void)
|
||||
@@ -525,6 +530,7 @@ static void test_identify(void)
|
||||
assert_bit_set(buf[85], 0x20);
|
||||
|
||||
ide_test_quit();
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -563,6 +569,7 @@ static void make_dirty(uint8_t device)
|
||||
assert_bit_clear(qpci_io_readb(dev, ide_bar, reg_status), DF | ERR);
|
||||
|
||||
g_free(buf);
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_flush(void)
|
||||
@@ -609,6 +616,7 @@ static void test_flush(void)
|
||||
assert_bit_clear(data, BSY | DF | ERR | DRQ);
|
||||
|
||||
ide_test_quit();
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_retry_flush(const char *machine)
|
||||
@@ -659,6 +667,7 @@ static void test_retry_flush(const char *machine)
|
||||
assert_bit_clear(data, BSY | DF | ERR | DRQ);
|
||||
|
||||
ide_test_quit();
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_flush_nodev(void)
|
||||
@@ -676,6 +685,7 @@ static void test_flush_nodev(void)
|
||||
|
||||
/* Just testing that qemu doesn't crash... */
|
||||
|
||||
free_pci_device(dev);
|
||||
ide_test_quit();
|
||||
}
|
||||
|
||||
@@ -742,6 +752,7 @@ static uint8_t ide_wait_clear(uint8_t flag)
|
||||
while (true) {
|
||||
data = qpci_io_readb(dev, ide_bar, reg_status);
|
||||
if (!(data & flag)) {
|
||||
free_pci_device(dev);
|
||||
return data;
|
||||
}
|
||||
if (difftime(time(NULL), st) > 5.0) {
|
||||
@@ -851,6 +862,7 @@ static void cdrom_pio_impl(int nblocks)
|
||||
g_free(pattern);
|
||||
g_free(rx);
|
||||
test_bmdma_teardown();
|
||||
free_pci_device(dev);
|
||||
}
|
||||
|
||||
static void test_cdrom_pio(void)
|
||||
|
||||
@@ -420,6 +420,7 @@ int main(int argc, char **argv)
|
||||
" -device ipmi-bmc-extern,chardev=ipmi0,id=bmc0"
|
||||
" -device isa-ipmi-bt,bmc=bmc0", emu_port);
|
||||
qtest_start(cmdline);
|
||||
g_free(cmdline);
|
||||
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);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user