* [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver
@ 2016-02-01 16:20 marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument marcandre.lureau
` (8 more replies)
0 siblings, 9 replies; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This is a ivshmem series with various bits:
- add a test for msi=off regression (the fix is included in the series
but was sent separatly to cc -stable)
- get rid of CharDriver usage for eventfd & fix regression introduced
by d0d7708ba by Daniel Berrange
- fix some test leaks
- simplify event callback
v1->v2: after Markus Armbruster review,
- add a few comments to commit messages
- fix !msi with nvectors==0 regression
- comment in commit message that the status register is set to 1 when
an interrupt occurs, following the ivshmem specification
- found out that getting rid of CharDriver also fixed regression from
d0d7708ba
- rebase
Marc-André Lureau (8):
ivshmem: no need for opaque argument
ivshmem: remove redundant assignment, fix crash with msi=off
ivshmem-test: leak fixes
libqos: remove some leaks
ivshmem-test: test both msi & irq cases
ivshmem: generalize ivshmem_setup_interrupts
ivshmem: use a single eventfd callback, get rid of CharDriver
char: remove qemu_chr_open_eventfd
hw/misc/ivshmem.c | 84 +++++++++++++++++++++------------------------------
include/sysemu/char.h | 3 --
qemu-char.c | 13 --------
tests/ivshmem-test.c | 81 ++++++++++++++++++++++++++++++++-----------------
tests/libqos/pci.c | 2 ++
5 files changed, 90 insertions(+), 93 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:33 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 2/8] ivshmem: remove redundant assignment, fix crash with msi=off marcandre.lureau
` (7 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/misc/ivshmem.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index d5c89ae..358df24 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -350,11 +350,11 @@ static void ivshmem_vector_poll(PCIDevice *dev,
}
}
-static CharDriverState* create_eventfd_chr_device(void * opaque, EventNotifier *n,
+static CharDriverState* create_eventfd_chr_device(IVShmemState *s,
+ EventNotifier *n,
int vector)
{
/* create a event character device based on the passed eventfd */
- IVShmemState *s = opaque;
PCIDevice *pdev = PCI_DEVICE(s);
int eventfd = event_notifier_get_fd(n);
CharDriverState *chr;
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 2/8] ivshmem: remove redundant assignment, fix crash with msi=off
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes marcandre.lureau
` (6 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Fix crash when msi=false introduced in 660c97ee (msi_vectors is NULL in
this case)
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
---
hw/misc/ivshmem.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 358df24..5029789 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -355,12 +355,9 @@ static CharDriverState* create_eventfd_chr_device(IVShmemState *s,
int vector)
{
/* create a event character device based on the passed eventfd */
- PCIDevice *pdev = PCI_DEVICE(s);
int eventfd = event_notifier_get_fd(n);
CharDriverState *chr;
- s->msi_vectors[vector].pdev = pdev;
-
chr = qemu_chr_open_eventfd(eventfd);
if (chr == NULL) {
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 2/8] ivshmem: remove redundant assignment, fix crash with msi=off marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks marcandre.lureau
` (5 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Add a cleanup_vm() function to free QPCIDevice & QPCIBus when cleaning
up the IVState.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/ivshmem-test.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c
index 03c7b96..d544d5e 100644
--- a/tests/ivshmem-test.c
+++ b/tests/ivshmem-test.c
@@ -34,12 +34,10 @@ static void save_fn(QPCIDevice *dev, int devfn, void *data)
*pdev = dev;
}
-static QPCIDevice *get_device(void)
+static QPCIDevice *get_device(QPCIBus *pcibus)
{
QPCIDevice *dev;
- QPCIBus *pcibus;
- pcibus = qpci_init_pc();
dev = NULL;
qpci_device_foreach(pcibus, 0x1af4, 0x1110, save_fn, &dev);
g_assert(dev != NULL);
@@ -50,6 +48,7 @@ static QPCIDevice *get_device(void)
typedef struct _IVState {
QTestState *qtest;
void *reg_base, *mem_base;
+ QPCIBus *pcibus;
QPCIDevice *dev;
} IVState;
@@ -100,13 +99,20 @@ static inline void out_reg(IVState *s, enum Reg reg, unsigned v)
global_qtest = qtest;
}
+static void cleanup_vm(IVState *s)
+{
+ g_free(s->dev);
+ qpci_free_pc(s->pcibus);
+ qtest_quit(s->qtest);
+}
+
static void setup_vm_cmd(IVState *s, const char *cmd, bool msix)
{
uint64_t barsize;
s->qtest = qtest_start(cmd);
-
- s->dev = get_device();
+ s->pcibus = qpci_init_pc();
+ s->dev = get_device(s->pcibus);
/* FIXME: other bar order fails, mappings changes */
s->mem_base = qpci_iomap(s->dev, 2, &barsize);
@@ -173,7 +179,7 @@ static void test_ivshmem_single(void)
g_assert_cmpuint(data[i], ==, i);
}
- qtest_quit(s->qtest);
+ cleanup_vm(s);
}
static void test_ivshmem_pair(void)
@@ -218,8 +224,8 @@ static void test_ivshmem_pair(void)
g_assert_cmpuint(data[i], ==, 0x44);
}
- qtest_quit(s1->qtest);
- qtest_quit(s2->qtest);
+ cleanup_vm(s1);
+ cleanup_vm(s2);
g_free(data);
}
@@ -356,8 +362,8 @@ static void test_ivshmem_server(void)
} while (ret == 0 && g_get_monotonic_time() < end_time);
g_assert_cmpuint(ret, !=, 0);
- qtest_quit(s2->qtest);
- qtest_quit(s1->qtest);
+ cleanup_vm(s2);
+ cleanup_vm(s1);
if (qemu_write_full(thread.pipe[1], "q", 1) != 1) {
g_error("qemu_write_full: %s", g_strerror(errno));
@@ -395,7 +401,7 @@ static void test_ivshmem_memdev(void)
setup_vm_cmd(&state, "-object memory-backend-ram,size=1M,id=mb1"
" -device ivshmem,x-memdev=mb1", false);
- qtest_quit(state.qtest);
+ cleanup_vm(&state);
}
static void cleanup(void)
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (2 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases marcandre.lureau
` (4 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
qpci_device_find() returns allocated data, don't leak it.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/libqos/pci.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/libqos/pci.c b/tests/libqos/pci.c
index 4e630c2..80b1a21 100644
--- a/tests/libqos/pci.c
+++ b/tests/libqos/pci.c
@@ -34,11 +34,13 @@ void qpci_device_foreach(QPCIBus *bus, int vendor_id, int device_id,
if (vendor_id != -1 &&
qpci_config_readw(dev, PCI_VENDOR_ID) != vendor_id) {
+ g_free(dev);
continue;
}
if (device_id != -1 &&
qpci_config_readw(dev, PCI_DEVICE_ID) != device_id) {
+ g_free(dev);
continue;
}
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (3 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts marcandre.lureau
` (3 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Recent commit 660c97ee introduced a regression in irq case, make
sure this code path is also tested.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
tests/ivshmem-test.c | 53 ++++++++++++++++++++++++++++++++++++----------------
1 file changed, 37 insertions(+), 16 deletions(-)
diff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c
index d544d5e..705fece 100644
--- a/tests/ivshmem-test.c
+++ b/tests/ivshmem-test.c
@@ -277,18 +277,18 @@ static void *server_thread(void *data)
return NULL;
}
-static void setup_vm_with_server(IVState *s, int nvectors)
+static void setup_vm_with_server(IVState *s, int nvectors, bool msi)
{
char *cmd = g_strdup_printf("-chardev socket,id=chr0,path=%s,nowait "
- "-device ivshmem,size=1M,chardev=chr0,vectors=%d",
- tmpserver, nvectors);
+ "-device ivshmem,size=1M,chardev=chr0,vectors=%d,msi=%s",
+ tmpserver, nvectors, msi ? "true" : "false");
- setup_vm_cmd(s, cmd, true);
+ setup_vm_cmd(s, cmd, msi);
g_free(cmd);
}
-static void test_ivshmem_server(void)
+static void test_ivshmem_server(bool msi)
{
IVState state1, state2, *s1, *s2;
ServerThread thread;
@@ -306,9 +306,9 @@ static void test_ivshmem_server(void)
ret = ivshmem_server_start(&server);
g_assert_cmpint(ret, ==, 0);
- setup_vm_with_server(&state1, nvectors);
+ setup_vm_with_server(&state1, nvectors, msi);
s1 = &state1;
- setup_vm_with_server(&state2, nvectors);
+ setup_vm_with_server(&state2, nvectors, msi);
s2 = &state2;
g_assert_cmpuint(in_reg(s1, IVPOSITION), ==, 0xffffffff);
@@ -338,27 +338,37 @@ static void test_ivshmem_server(void)
g_assert_cmpuint(vm1, !=, vm2);
global_qtest = s1->qtest;
- ret = qpci_msix_table_size(s1->dev);
- g_assert_cmpuint(ret, ==, nvectors);
+ if (msi) {
+ ret = qpci_msix_table_size(s1->dev);
+ g_assert_cmpuint(ret, ==, nvectors);
+ }
/* ping vm2 -> vm1 */
- ret = qpci_msix_pending(s1->dev, 0);
- g_assert_cmpuint(ret, ==, 0);
+ if (msi) {
+ ret = qpci_msix_pending(s1->dev, 0);
+ g_assert_cmpuint(ret, ==, 0);
+ } else {
+ out_reg(s1, INTRSTATUS, 0);
+ }
out_reg(s2, DOORBELL, vm1 << 16);
do {
g_usleep(10000);
- ret = qpci_msix_pending(s1->dev, 0);
+ ret = msi ? qpci_msix_pending(s1->dev, 0) : in_reg(s1, INTRSTATUS);
} while (ret == 0 && g_get_monotonic_time() < end_time);
g_assert_cmpuint(ret, !=, 0);
/* ping vm1 -> vm2 */
global_qtest = s2->qtest;
- ret = qpci_msix_pending(s2->dev, 0);
- g_assert_cmpuint(ret, ==, 0);
+ if (msi) {
+ ret = qpci_msix_pending(s2->dev, 0);
+ g_assert_cmpuint(ret, ==, 0);
+ } else {
+ out_reg(s2, INTRSTATUS, 0);
+ }
out_reg(s1, DOORBELL, vm2 << 16);
do {
g_usleep(10000);
- ret = qpci_msix_pending(s2->dev, 0);
+ ret = msi ? qpci_msix_pending(s2->dev, 0) : in_reg(s2, INTRSTATUS);
} while (ret == 0 && g_get_monotonic_time() < end_time);
g_assert_cmpuint(ret, !=, 0);
@@ -376,6 +386,16 @@ static void test_ivshmem_server(void)
close(thread.pipe[0]);
}
+static void test_ivshmem_server_msi(void)
+{
+ test_ivshmem_server(true);
+}
+
+static void test_ivshmem_server_irq(void)
+{
+ test_ivshmem_server(false);
+}
+
#define PCI_SLOT_HP 0x06
static void test_ivshmem_hotplug(void)
@@ -489,7 +509,8 @@ int main(int argc, char **argv)
qtest_add_func("/ivshmem/memdev", test_ivshmem_memdev);
if (g_test_slow()) {
qtest_add_func("/ivshmem/pair", test_ivshmem_pair);
- qtest_add_func("/ivshmem/server", test_ivshmem_server);
+ qtest_add_func("/ivshmem/server-msi", test_ivshmem_server_msi);
+ qtest_add_func("/ivshmem/server-irq", test_ivshmem_server_irq);
}
ret = g_test_run();
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (4 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver marcandre.lureau
` (2 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Call ivshmem_setup_interrupts() with or without MSI, always allocate
msi_vectors that is going to be used in all case in the following patch.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/misc/ivshmem.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index 5029789..c601a8a 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -769,18 +769,25 @@ static void ivshmem_reset(DeviceState *d)
ivshmem_use_msix(s);
}
-static int ivshmem_setup_msi(IVShmemState * s)
+static int ivshmem_setup_interrupts(IVShmemState *s)
{
- if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
- return -1;
+ /* allocate QEMU callback data for receiving interrupts */
+ if (s->vectors > 0) {
+ s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
+ if (!s->msi_vectors) {
+ return -1;
+ }
}
- IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
+ if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
+ if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
+ return -1;
+ }
- /* allocate QEMU char devices for receiving interrupts */
- s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
+ IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
+ ivshmem_use_msix(s);
+ }
- ivshmem_use_msix(s);
return 0;
}
@@ -947,9 +954,8 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error **errp)
IVSHMEM_DPRINTF("using shared memory server (socket = %s)\n",
s->server_chr->filename);
- if (ivshmem_has_feature(s, IVSHMEM_MSI) &&
- ivshmem_setup_msi(s)) {
- error_setg(errp, "msix initialization failed");
+ if (ivshmem_setup_interrupts(s) < 0) {
+ error_setg(errp, "failed to initialize interrupts");
return;
}
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (5 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd marcandre.lureau
2016-02-02 8:37 ` [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver Markus Armbruster
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Simplify the interrupt handling by having a single callback on irq&msi
cases. Remove usage of CharDriver, replace it with
qemu_set_fd_handler(). Use event_notifier_test_and_clear() to read the
eventfd.
Before this patch, ivshmem writes the first byte received to
s->intrstatus. But ivshmem_device_spec.txt says "The status register is
set to 1 when an interrupt occurs." After this commit, follows the
specification, set to 1 when an interrupt occurs.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/misc/ivshmem.c | 55 ++++++++++++++++++-------------------------------------
1 file changed, 18 insertions(+), 37 deletions(-)
diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
index c601a8a..3d8a854 100644
--- a/hw/misc/ivshmem.c
+++ b/hw/misc/ivshmem.c
@@ -263,15 +263,6 @@ static const MemoryRegionOps ivshmem_mmio_ops = {
},
};
-static void ivshmem_receive(void *opaque, const uint8_t *buf, int size)
-{
- IVShmemState *s = opaque;
-
- IVSHMEM_DPRINTF("ivshmem_receive 0x%02x size: %d\n", *buf, size);
-
- ivshmem_IntrStatus_write(s, *buf);
-}
-
static int ivshmem_can_receive(void * opaque)
{
return sizeof(int64_t);
@@ -282,15 +273,24 @@ static void ivshmem_event(void *opaque, int event)
IVSHMEM_DPRINTF("ivshmem_event %d\n", event);
}
-static void fake_irqfd(void *opaque, const uint8_t *buf, int size) {
-
+static void ivshmem_vector_notify(void *opaque)
+{
MSIVector *entry = opaque;
PCIDevice *pdev = entry->pdev;
IVShmemState *s = IVSHMEM(pdev);
int vector = entry - s->msi_vectors;
+ EventNotifier *n = &s->peers[s->vm_id].eventfds[vector];
+
+ if (!event_notifier_test_and_clear(n)) {
+ return;
+ }
IVSHMEM_DPRINTF("interrupt on vector %p %d\n", pdev, vector);
- msix_notify(pdev, vector);
+ if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
+ msix_notify(pdev, vector);
+ } else {
+ ivshmem_IntrStatus_write(s, 1);
+ }
}
static int ivshmem_vector_unmask(PCIDevice *dev, unsigned vector,
@@ -350,35 +350,16 @@ static void ivshmem_vector_poll(PCIDevice *dev,
}
}
-static CharDriverState* create_eventfd_chr_device(IVShmemState *s,
- EventNotifier *n,
- int vector)
+static void watch_vector_notifier(IVShmemState *s, EventNotifier *n,
+ int vector)
{
- /* create a event character device based on the passed eventfd */
int eventfd = event_notifier_get_fd(n);
- CharDriverState *chr;
-
- chr = qemu_chr_open_eventfd(eventfd);
-
- if (chr == NULL) {
- error_report("creating chardriver for eventfd %d failed", eventfd);
- return NULL;
- }
- qemu_chr_fe_claim_no_fail(chr);
/* if MSI is supported we need multiple interrupts */
- if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
- s->msi_vectors[vector].pdev = PCI_DEVICE(s);
-
- qemu_chr_add_handlers(chr, ivshmem_can_receive, fake_irqfd,
- ivshmem_event, &s->msi_vectors[vector]);
- } else {
- qemu_chr_add_handlers(chr, ivshmem_can_receive, ivshmem_receive,
- ivshmem_event, s);
- }
-
- return chr;
+ s->msi_vectors[vector].pdev = PCI_DEVICE(s);
+ qemu_set_fd_handler(eventfd, ivshmem_vector_notify,
+ NULL, &s->msi_vectors[vector]);
}
static int check_shm_size(IVShmemState *s, int fd, Error **errp)
@@ -588,7 +569,7 @@ static void setup_interrupt(IVShmemState *s, int vector)
if (!with_irqfd) {
IVSHMEM_DPRINTF("with eventfd");
- s->eventfd_chr[vector] = create_eventfd_chr_device(s, n, vector);
+ watch_vector_notifier(s, n, vector);
} else if (msix_enabled(pdev)) {
IVSHMEM_DPRINTF("with irqfd");
if (ivshmem_add_kvm_msi_virq(s, vector) < 0) {
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (6 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver marcandre.lureau
@ 2016-02-01 16:20 ` marcandre.lureau
2016-02-02 8:35 ` Markus Armbruster
2016-02-02 8:37 ` [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver Markus Armbruster
8 siblings, 1 reply; 20+ messages in thread
From: marcandre.lureau @ 2016-02-01 16:20 UTC (permalink / raw)
To: qemu-devel; +Cc: claudio.fontana, armbru, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Broken since d0d7708ba29cbc, since the backend is NULL.
And now no longer needed by ivshmem.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/sysemu/char.h | 3 ---
qemu-char.c | 13 -------------
2 files changed, 16 deletions(-)
diff --git a/include/sysemu/char.h b/include/sysemu/char.h
index 598dd2b..e035d1c 100644
--- a/include/sysemu/char.h
+++ b/include/sysemu/char.h
@@ -360,9 +360,6 @@ void register_char_driver(const char *name, ChardevBackendKind kind,
CharDriverState *(*create)(const char *id, ChardevBackend *backend,
ChardevReturn *ret, Error **errp));
-/* add an eventfd to the qemu devices that are polled */
-CharDriverState *qemu_chr_open_eventfd(int eventfd);
-
extern int term_escape_char;
CharDriverState *qemu_char_get_next_serial(void);
diff --git a/qemu-char.c b/qemu-char.c
index ca53e8c..1605b30 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -2838,19 +2838,6 @@ static int tcp_chr_sync_read(CharDriverState *chr, const uint8_t *buf, int len)
return size;
}
-#ifndef _WIN32
-CharDriverState *qemu_chr_open_eventfd(int eventfd)
-{
- CharDriverState *chr = qemu_chr_open_fd(eventfd, eventfd, NULL, NULL);
-
- if (chr) {
- chr->avail_connections = 1;
- }
-
- return chr;
-}
-#endif
-
static void tcp_chr_connect(void *opaque)
{
CharDriverState *chr = opaque;
--
2.5.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument marcandre.lureau
@ 2016-02-02 8:33 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:33 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes marcandre.lureau
@ 2016-02-02 8:34 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:34 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Add a cleanup_vm() function to free QPCIDevice & QPCIBus when cleaning
> up the IVState.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks marcandre.lureau
@ 2016-02-02 8:34 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:34 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> qpci_device_find() returns allocated data, don't leak it.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases marcandre.lureau
@ 2016-02-02 8:34 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:34 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Recent commit 660c97ee introduced a regression in irq case, make
> sure this code path is also tested.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts marcandre.lureau
@ 2016-02-02 8:34 ` Markus Armbruster
2016-02-02 10:24 ` Marc-André Lureau
0 siblings, 1 reply; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:34 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Call ivshmem_setup_interrupts() with or without MSI, always allocate
> msi_vectors that is going to be used in all case in the following patch.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/misc/ivshmem.c | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> index 5029789..c601a8a 100644
> --- a/hw/misc/ivshmem.c
> +++ b/hw/misc/ivshmem.c
> @@ -769,18 +769,25 @@ static void ivshmem_reset(DeviceState *d)
> ivshmem_use_msix(s);
> }
>
> -static int ivshmem_setup_msi(IVShmemState * s)
> +static int ivshmem_setup_interrupts(IVShmemState *s)
> {
> - if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
> - return -1;
> + /* allocate QEMU callback data for receiving interrupts */
> + if (s->vectors > 0) {
> + s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
> + if (!s->msi_vectors) {
Can't happen; s->vectors * sizeof(MSIVector) != 0.
> + return -1;
> + }
> }
>
> - IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
> + if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
> + if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
> + return -1;
> + }
>
> - /* allocate QEMU char devices for receiving interrupts */
> - s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
> + IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
> + ivshmem_use_msix(s);
> + }
>
> - ivshmem_use_msix(s);
> return 0;
> }
>
> @@ -947,9 +954,8 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error **errp)
> IVSHMEM_DPRINTF("using shared memory server (socket = %s)\n",
> s->server_chr->filename);
>
> - if (ivshmem_has_feature(s, IVSHMEM_MSI) &&
> - ivshmem_setup_msi(s)) {
> - error_setg(errp, "msix initialization failed");
> + if (ivshmem_setup_interrupts(s) < 0) {
> + error_setg(errp, "failed to initialize interrupts");
> return;
> }
With the useless conditional dropped:
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver marcandre.lureau
@ 2016-02-02 8:34 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:34 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Simplify the interrupt handling by having a single callback on irq&msi
> cases. Remove usage of CharDriver, replace it with
> qemu_set_fd_handler(). Use event_notifier_test_and_clear() to read the
> eventfd.
>
> Before this patch, ivshmem writes the first byte received to
> s->intrstatus. But ivshmem_device_spec.txt says "The status register is
> set to 1 when an interrupt occurs."
Suggest to add: Fortunately, the byte usually comes from another ivshmem
device, and those always write 1.
> After this commit, follows the
> specification, set to 1 when an interrupt occurs.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd marcandre.lureau
@ 2016-02-02 8:35 ` Markus Armbruster
0 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:35 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Broken since d0d7708ba29cbc, since the backend is NULL.
>
> And now no longer needed by ivshmem.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
` (7 preceding siblings ...)
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd marcandre.lureau
@ 2016-02-02 8:37 ` Markus Armbruster
8 siblings, 0 replies; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 8:37 UTC (permalink / raw)
To: marcandre.lureau; +Cc: claudio.fontana, qemu-devel
marcandre.lureau@redhat.com writes:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> This is a ivshmem series with various bits:
> - add a test for msi=off regression (the fix is included in the series
> but was sent separatly to cc -stable)
> - get rid of CharDriver usage for eventfd & fix regression introduced
> by d0d7708ba by Daniel Berrange
> - fix some test leaks
> - simplify event callback
>
> v1->v2: after Markus Armbruster review,
> - add a few comments to commit messages
> - fix !msi with nvectors==0 regression
> - comment in commit message that the status register is set to 1 when
> an interrupt occurs, following the ivshmem specification
> - found out that getting rid of CharDriver also fixed regression from
> d0d7708ba
> - rebase
The two nits I found seem harmless enough to me to sneak into the pull
request rather than post a full v3 first. Use your judgement.
Thanks!
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts
2016-02-02 8:34 ` Markus Armbruster
@ 2016-02-02 10:24 ` Marc-André Lureau
2016-02-02 11:53 ` Markus Armbruster
0 siblings, 1 reply; 20+ messages in thread
From: Marc-André Lureau @ 2016-02-02 10:24 UTC (permalink / raw)
To: Markus Armbruster; +Cc: marcandre lureau, claudio fontana, qemu-devel
Hi
----- Original Message -----
> marcandre.lureau@redhat.com writes:
>
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Call ivshmem_setup_interrupts() with or without MSI, always allocate
> > msi_vectors that is going to be used in all case in the following patch.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > hw/misc/ivshmem.c | 26 ++++++++++++++++----------
> > 1 file changed, 16 insertions(+), 10 deletions(-)
> >
> > diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> > index 5029789..c601a8a 100644
> > --- a/hw/misc/ivshmem.c
> > +++ b/hw/misc/ivshmem.c
> > @@ -769,18 +769,25 @@ static void ivshmem_reset(DeviceState *d)
> > ivshmem_use_msix(s);
> > }
> >
> > -static int ivshmem_setup_msi(IVShmemState * s)
> > +static int ivshmem_setup_interrupts(IVShmemState *s)
> > {
> > - if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
> > - return -1;
> > + /* allocate QEMU callback data for receiving interrupts */
> > + if (s->vectors > 0) {
> > + s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
> > + if (!s->msi_vectors) {
>
> Can't happen; s->vectors * sizeof(MSIVector) != 0.
It can't happen on allocation failure?
> > + return -1;
> > + }
> > }
> >
> > - IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
> > + if (ivshmem_has_feature(s, IVSHMEM_MSI)) {
> > + if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
> > + return -1;
> > + }
> >
> > - /* allocate QEMU char devices for receiving interrupts */
> > - s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
> > + IVSHMEM_DPRINTF("msix initialized (%d vectors)\n", s->vectors);
> > + ivshmem_use_msix(s);
> > + }
> >
> > - ivshmem_use_msix(s);
> > return 0;
> > }
> >
> > @@ -947,9 +954,8 @@ static void pci_ivshmem_realize(PCIDevice *dev, Error
> > **errp)
> > IVSHMEM_DPRINTF("using shared memory server (socket = %s)\n",
> > s->server_chr->filename);
> >
> > - if (ivshmem_has_feature(s, IVSHMEM_MSI) &&
> > - ivshmem_setup_msi(s)) {
> > - error_setg(errp, "msix initialization failed");
> > + if (ivshmem_setup_interrupts(s) < 0) {
> > + error_setg(errp, "failed to initialize interrupts");
> > return;
> > }
>
> With the useless conditional dropped:
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts
2016-02-02 10:24 ` Marc-André Lureau
@ 2016-02-02 11:53 ` Markus Armbruster
2016-02-02 11:55 ` Marc-André Lureau
0 siblings, 1 reply; 20+ messages in thread
From: Markus Armbruster @ 2016-02-02 11:53 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: marcandre lureau, claudio fontana, qemu-devel
Marc-André Lureau <mlureau@redhat.com> writes:
> Hi
>
> ----- Original Message -----
>> marcandre.lureau@redhat.com writes:
>>
>> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
>> >
>> > Call ivshmem_setup_interrupts() with or without MSI, always allocate
>> > msi_vectors that is going to be used in all case in the following patch.
>> >
>> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> > ---
>> > hw/misc/ivshmem.c | 26 ++++++++++++++++----------
>> > 1 file changed, 16 insertions(+), 10 deletions(-)
>> >
>> > diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
>> > index 5029789..c601a8a 100644
>> > --- a/hw/misc/ivshmem.c
>> > +++ b/hw/misc/ivshmem.c
>> > @@ -769,18 +769,25 @@ static void ivshmem_reset(DeviceState *d)
>> > ivshmem_use_msix(s);
>> > }
>> >
>> > -static int ivshmem_setup_msi(IVShmemState * s)
>> > +static int ivshmem_setup_interrupts(IVShmemState *s)
>> > {
>> > - if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
>> > - return -1;
>> > + /* allocate QEMU callback data for receiving interrupts */
>> > + if (s->vectors > 0) {
>> > + s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
>> > + if (!s->msi_vectors) {
>>
>> Can't happen; s->vectors * sizeof(MSIVector) != 0.
>
> It can't happen on allocation failure?
Nope.
Compare g_malloc0() and g_try_malloc0() at
https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html
We generally use the "try" variants only for memory allocations that can
execute during operation and can be "big".
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts
2016-02-02 11:53 ` Markus Armbruster
@ 2016-02-02 11:55 ` Marc-André Lureau
0 siblings, 0 replies; 20+ messages in thread
From: Marc-André Lureau @ 2016-02-02 11:55 UTC (permalink / raw)
To: Markus Armbruster; +Cc: marcandre lureau, claudio fontana, qemu-devel
Hi
----- Original Message -----
> Marc-André Lureau <mlureau@redhat.com> writes:
>
> > Hi
> >
> > ----- Original Message -----
> >> marcandre.lureau@redhat.com writes:
> >>
> >> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >> >
> >> > Call ivshmem_setup_interrupts() with or without MSI, always allocate
> >> > msi_vectors that is going to be used in all case in the following patch.
> >> >
> >> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> >> > ---
> >> > hw/misc/ivshmem.c | 26 ++++++++++++++++----------
> >> > 1 file changed, 16 insertions(+), 10 deletions(-)
> >> >
> >> > diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c
> >> > index 5029789..c601a8a 100644
> >> > --- a/hw/misc/ivshmem.c
> >> > +++ b/hw/misc/ivshmem.c
> >> > @@ -769,18 +769,25 @@ static void ivshmem_reset(DeviceState *d)
> >> > ivshmem_use_msix(s);
> >> > }
> >> >
> >> > -static int ivshmem_setup_msi(IVShmemState * s)
> >> > +static int ivshmem_setup_interrupts(IVShmemState *s)
> >> > {
> >> > - if (msix_init_exclusive_bar(PCI_DEVICE(s), s->vectors, 1)) {
> >> > - return -1;
> >> > + /* allocate QEMU callback data for receiving interrupts */
> >> > + if (s->vectors > 0) {
> >> > + s->msi_vectors = g_malloc0(s->vectors * sizeof(MSIVector));
> >> > + if (!s->msi_vectors) {
> >>
> >> Can't happen; s->vectors * sizeof(MSIVector) != 0.
> >
> > It can't happen on allocation failure?
>
> Nope.
>
> Compare g_malloc0() and g_try_malloc0() at
> https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html
>
> We generally use the "try" variants only for memory allocations that can
> execute during operation and can be "big".
oops, that was too obvious ;)
thanks
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2016-02-02 11:55 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-01 16:20 [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 1/8] ivshmem: no need for opaque argument marcandre.lureau
2016-02-02 8:33 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 2/8] ivshmem: remove redundant assignment, fix crash with msi=off marcandre.lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 3/8] ivshmem-test: leak fixes marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 4/8] libqos: remove some leaks marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 5/8] ivshmem-test: test both msi & irq cases marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 6/8] ivshmem: generalize ivshmem_setup_interrupts marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-02 10:24 ` Marc-André Lureau
2016-02-02 11:53 ` Markus Armbruster
2016-02-02 11:55 ` Marc-André Lureau
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 7/8] ivshmem: use a single eventfd callback, get rid of CharDriver marcandre.lureau
2016-02-02 8:34 ` Markus Armbruster
2016-02-01 16:20 ` [Qemu-devel] [PATCH v2 8/8] char: remove qemu_chr_open_eventfd marcandre.lureau
2016-02-02 8:35 ` Markus Armbruster
2016-02-02 8:37 ` [Qemu-devel] [PATCH v2 0/8] ivshmem: test msi=off, fix regressions, remove CharDriver Markus Armbruster
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).