All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events
@ 2019-06-04  9:58 Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 1/3] vfio: Add a funtion to return a specific irq capabilities Tina Zhang
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Tina Zhang @ 2019-06-04  9:58 UTC (permalink / raw)
  To: intel-gvt-dev, qemu-devel
  Cc: kevin.tian, zhenyuw, Tina Zhang, alex.williamson, zhiyuan.lv,
	hang.yuan, zhi.a.wang, kraxel

This series shows the idea to refresh UI console depending on vGPU
page flip events.

Tina Zhang (3):
  vfio: Add a funtion to return a specific irq capabilities
  ui/console: Introduce two new APIs
  vfio/display: Refresh display depending on vGPU page flip events

 hw/vfio/common.c              |  78 +++++++++++
 hw/vfio/display.c             | 249 +++++++++++++++++++++++++++++-----
 include/hw/vfio/vfio-common.h |  11 ++
 include/ui/console.h          |   2 +
 ui/console.c                  |  35 +++++
 5 files changed, 343 insertions(+), 32 deletions(-)

-- 
2.17.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [RFC PATCH 1/3] vfio: Add a funtion to return a specific irq capabilities
  2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
@ 2019-06-04  9:58 ` Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 2/3] ui/console: Introduce two new APIs Tina Zhang
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Tina Zhang @ 2019-06-04  9:58 UTC (permalink / raw)
  To: intel-gvt-dev, qemu-devel
  Cc: kevin.tian, zhenyuw, Tina Zhang, alex.williamson, zhiyuan.lv,
	hang.yuan, zhi.a.wang, kraxel

vfio_get_dev_irq_info is introduced to return a specific irq
capabilities.

Signed-off-by: Tina Zhang <tina.zhang@intel.com>
---
 hw/vfio/common.c              | 78 +++++++++++++++++++++++++++++++++++
 include/hw/vfio/vfio-common.h |  3 ++
 2 files changed, 81 insertions(+)

diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index 4374cc6176..928ea54411 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -748,6 +748,25 @@ vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id)
     return NULL;
 }
 
+static struct vfio_info_cap_header *
+vfio_get_irq_info_cap(struct vfio_irq_info *info, uint16_t id)
+{
+    struct vfio_info_cap_header *hdr;
+    void *ptr = info;
+
+    if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
+        return NULL;
+    }
+
+    for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
+        if (hdr->id == id) {
+            return hdr;
+        }
+    }
+
+    return NULL;
+}
+
 static int vfio_setup_region_sparse_mmaps(VFIORegion *region,
                                           struct vfio_region_info *info)
 {
@@ -1539,6 +1558,33 @@ retry:
     return 0;
 }
 
+static int vfio_get_irq_info(VFIODevice *vbasedev, int index,
+                         struct vfio_irq_info **info)
+{
+    size_t argsz = sizeof(struct vfio_irq_info);
+
+    *info = g_malloc0(argsz);
+
+    (*info)->index = index;
+retry:
+    (*info)->argsz = argsz;
+
+    if (ioctl(vbasedev->fd, VFIO_DEVICE_GET_IRQ_INFO, *info)) {
+        g_free(*info);
+        *info = NULL;
+        return -errno;
+    }
+
+    if ((*info)->argsz > argsz) {
+        argsz = (*info)->argsz;
+        *info = g_realloc(*info, argsz);
+
+        goto retry;
+    }
+
+    return 0;
+}
+
 int vfio_get_dev_region_info(VFIODevice *vbasedev, uint32_t type,
                              uint32_t subtype, struct vfio_region_info **info)
 {
@@ -1574,6 +1620,38 @@ int vfio_get_dev_region_info(VFIODevice *vbasedev, uint32_t type,
     return -ENODEV;
 }
 
+int vfio_get_dev_irq_info(VFIODevice *vbasedev, uint32_t type,
+                             uint32_t subtype, struct vfio_irq_info **info)
+{
+    int i;
+
+    for (i = 0; i < vbasedev->num_irqs; i++) {
+        struct vfio_info_cap_header *hdr;
+        struct vfio_irq_info_cap_type *cap_type;
+
+        if (vfio_get_irq_info(vbasedev, i, info)) {
+            continue;
+        }
+
+        hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
+        if (!hdr) {
+            g_free(*info);
+            continue;
+        }
+
+        cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
+
+        if (cap_type->type == type && cap_type->subtype == subtype) {
+            return 0;
+        }
+
+        g_free(*info);
+    }
+
+    *info = NULL;
+    return -ENODEV;
+}
+
 bool vfio_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type)
 {
     struct vfio_region_info *info = NULL;
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index 1155b79678..5cab6a1b81 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -195,6 +195,9 @@ int vfio_get_dev_region_info(VFIODevice *vbasedev, uint32_t type,
 bool vfio_has_region_cap(VFIODevice *vbasedev, int region, uint16_t cap_type);
 struct vfio_info_cap_header *
 vfio_get_region_info_cap(struct vfio_region_info *info, uint16_t id);
+
+int vfio_get_dev_irq_info(VFIODevice *vbasedev, uint32_t type,
+                          uint32_t subtype, struct vfio_irq_info **info);
 #endif
 extern const MemoryListener vfio_prereg_listener;
 
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [RFC PATCH 2/3] ui/console: Introduce two new APIs
  2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 1/3] vfio: Add a funtion to return a specific irq capabilities Tina Zhang
@ 2019-06-04  9:58 ` Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 3/3] vfio/display: Refresh display depending on vGPU page flip events Tina Zhang
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Tina Zhang @ 2019-06-04  9:58 UTC (permalink / raw)
  To: intel-gvt-dev, qemu-devel
  Cc: kevin.tian, zhenyuw, Tina Zhang, alex.williamson, zhiyuan.lv,
	hang.yuan, zhi.a.wang, kraxel

graphic_hw_refresh is used by display to invoke console refresh.
dpy_update_interval is used by display to update gui timer interval.

Signed-off-by: Tina Zhang <tina.zhang@intel.com>
---
 include/ui/console.h |  2 ++
 ui/console.c         | 35 +++++++++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/include/ui/console.h b/include/ui/console.h
index fef900db76..3b46264efb 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -275,6 +275,7 @@ void register_displaychangelistener(DisplayChangeListener *dcl);
 void update_displaychangelistener(DisplayChangeListener *dcl,
                                   uint64_t interval);
 void unregister_displaychangelistener(DisplayChangeListener *dcl);
+void dpy_update_interval(QemuConsole *con, uint64_t interval);
 
 bool dpy_ui_info_supported(QemuConsole *con);
 int dpy_set_ui_info(QemuConsole *con, QemuUIInfo *info);
@@ -379,6 +380,7 @@ void graphic_console_set_hwops(QemuConsole *con,
 void graphic_console_close(QemuConsole *con);
 
 void graphic_hw_update(QemuConsole *con);
+void graphic_hw_refresh(QemuConsole *con);
 void graphic_hw_invalidate(QemuConsole *con);
 void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
 void graphic_hw_gl_block(QemuConsole *con, bool block);
diff --git a/ui/console.c b/ui/console.c
index 6d2282d3e9..3a02cea37d 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -268,6 +268,24 @@ void graphic_hw_update(QemuConsole *con)
     }
 }
 
+void graphic_hw_refresh(QemuConsole *con)
+{
+    DisplayState *ds;
+    DisplayChangeListener *dcl;
+
+    if (!con) {
+        con = active_console;
+    }
+
+    ds = con->ds;
+
+    QLIST_FOREACH(dcl, &ds->listeners, next) {
+        if (dcl->ops->dpy_refresh) {
+            dcl->ops->dpy_refresh(dcl);
+        }
+    }
+}
+
 void graphic_hw_gl_block(QemuConsole *con, bool block)
 {
     assert(con != NULL);
@@ -1480,6 +1498,23 @@ void update_displaychangelistener(DisplayChangeListener *dcl,
     }
 }
 
+void dpy_update_interval(QemuConsole *con, uint64_t interval)
+{
+    DisplayChangeListener *dcl;
+    DisplayState *ds;
+
+    if (!con) {
+        return;
+    }
+
+    ds = con->ds;
+
+    QLIST_FOREACH(dcl, &ds->listeners, next) {
+        update_displaychangelistener(dcl, interval);
+    }
+}
+
+
 void unregister_displaychangelistener(DisplayChangeListener *dcl)
 {
     DisplayState *ds = dcl->ds;
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [RFC PATCH 3/3] vfio/display: Refresh display depending on vGPU page flip events
  2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 1/3] vfio: Add a funtion to return a specific irq capabilities Tina Zhang
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 2/3] ui/console: Introduce two new APIs Tina Zhang
@ 2019-06-04  9:58 ` Tina Zhang
  2019-06-04 10:58 ` [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI " no-reply
  2019-06-04 11:18 ` no-reply
  4 siblings, 0 replies; 6+ messages in thread
From: Tina Zhang @ 2019-06-04  9:58 UTC (permalink / raw)
  To: intel-gvt-dev, qemu-devel
  Cc: kevin.tian, zhenyuw, Tina Zhang, alex.williamson, zhiyuan.lv,
	hang.yuan, zhi.a.wang, kraxel

Use vGPU plane page flip events to refresh display.

Signed-off-by: Tina Zhang <tina.zhang@intel.com>
---
 hw/vfio/display.c             | 249 +++++++++++++++++++++++++++++-----
 include/hw/vfio/vfio-common.h |   8 ++
 2 files changed, 225 insertions(+), 32 deletions(-)

diff --git a/hw/vfio/display.c b/hw/vfio/display.c
index 2c2d3e5b71..6ef383b5e8 100644
--- a/hw/vfio/display.c
+++ b/hw/vfio/display.c
@@ -288,44 +288,54 @@ static void vfio_display_dmabuf_update(void *opaque)
     VFIODMABuf *primary, *cursor;
     bool free_bufs = false, new_cursor = false;;
 
-    primary = vfio_display_get_dmabuf(vdev, DRM_PLANE_TYPE_PRIMARY);
-    if (primary == NULL) {
-        if (dpy->ramfb) {
-            ramfb_display_update(dpy->con, dpy->ramfb);
-        }
-        return;
+    if (dpy->event_flags & VFIO_IRQ_EVENT_ENABLE) {
+        dpy_update_interval(dpy->con, GUI_REFRESH_INTERVAL_IDLE);
     }
 
-    if (dpy->dmabuf.primary != primary) {
-        dpy->dmabuf.primary = primary;
-        qemu_console_resize(dpy->con,
-                            primary->buf.width, primary->buf.height);
-        dpy_gl_scanout_dmabuf(dpy->con, &primary->buf);
-        free_bufs = true;
-    }
+    if (!dpy->event_flags ||
+        (dpy->event_flags & VFIO_IRQ_EVENT_PRIMRAY_PLANE_FLIP)) {
+        primary = vfio_display_get_dmabuf(vdev, DRM_PLANE_TYPE_PRIMARY);
+        if (primary == NULL) {
+            if (dpy->ramfb) {
+                ramfb_display_update(dpy->con, dpy->ramfb);
+            }
+            return;
+        }
 
-    cursor = vfio_display_get_dmabuf(vdev, DRM_PLANE_TYPE_CURSOR);
-    if (dpy->dmabuf.cursor != cursor) {
-        dpy->dmabuf.cursor = cursor;
-        new_cursor = true;
-        free_bufs = true;
+        if (dpy->dmabuf.primary != primary) {
+            dpy->dmabuf.primary = primary;
+            qemu_console_resize(dpy->con,
+                                primary->buf.width, primary->buf.height);
+            dpy_gl_scanout_dmabuf(dpy->con, &primary->buf);
+            free_bufs = true;
+        }
     }
 
-    if (cursor && (new_cursor || cursor->hot_updates)) {
-        bool have_hot = (cursor->hot_x != 0xffffffff &&
-                         cursor->hot_y != 0xffffffff);
-        dpy_gl_cursor_dmabuf(dpy->con, &cursor->buf, have_hot,
-                             cursor->hot_x, cursor->hot_y);
-        cursor->hot_updates = 0;
-    } else if (!cursor && new_cursor) {
-        dpy_gl_cursor_dmabuf(dpy->con, NULL, false, 0, 0);
-    }
+    if (!dpy->event_flags ||
+        (dpy->event_flags & VFIO_IRQ_EVENT_CURSOR_PLANE_FLIP)) {
+        cursor = vfio_display_get_dmabuf(vdev, DRM_PLANE_TYPE_CURSOR);
+        if (dpy->dmabuf.cursor != cursor) {
+            dpy->dmabuf.cursor = cursor;
+            new_cursor = true;
+            free_bufs = true;
+        }
+
+        if (cursor && (new_cursor || cursor->hot_updates)) {
+            bool have_hot = (cursor->hot_x != 0xffffffff &&
+                             cursor->hot_y != 0xffffffff);
+            dpy_gl_cursor_dmabuf(dpy->con, &cursor->buf, have_hot,
+                                 cursor->hot_x, cursor->hot_y);
+            cursor->hot_updates = 0;
+        } else if (!cursor && new_cursor) {
+            dpy_gl_cursor_dmabuf(dpy->con, NULL, false, 0, 0);
+        }
 
-    if (cursor && cursor->pos_updates) {
-        dpy_gl_cursor_position(dpy->con,
-                               cursor->pos_x,
-                               cursor->pos_y);
-        cursor->pos_updates = 0;
+        if (cursor && cursor->pos_updates) {
+            dpy_gl_cursor_position(dpy->con,
+                                   cursor->pos_x,
+                                   cursor->pos_y);
+            cursor->pos_updates = 0;
+        }
     }
 
     dpy_gl_update(dpy->con, 0, 0, primary->buf.width, primary->buf.height);
@@ -340,6 +350,7 @@ static const GraphicHwOps vfio_display_dmabuf_ops = {
     .ui_info    = vfio_display_edid_ui_info,
 };
 
+static int vfio_register_display_notifier(VFIOPCIDevice *vdev);
 static int vfio_display_dmabuf_init(VFIOPCIDevice *vdev, Error **errp)
 {
     if (!display_opengl) {
@@ -355,6 +366,8 @@ static int vfio_display_dmabuf_init(VFIOPCIDevice *vdev, Error **errp)
         vdev->dpy->ramfb = ramfb_setup(DEVICE(vdev), errp);
     }
     vfio_display_edid_init(vdev);
+    vfio_register_display_notifier(vdev);
+
     return 0;
 }
 
@@ -495,6 +508,177 @@ static void vfio_display_region_exit(VFIODisplay *dpy)
 
 /* ---------------------------------------------------------------------- */
 
+static void primary_plane_update(void *opaque)
+{
+    VFIOPCIDevice *vdev = opaque;
+    VFIODisplay *dpy = vdev->dpy;
+
+    if (!event_notifier_test_and_clear(&dpy->pri_event_notifier)) {
+        return;
+    }
+
+    dpy->event_flags |= VFIO_IRQ_EVENT_PRIMRAY_PLANE_FLIP;
+    graphic_hw_refresh(dpy->con);
+    dpy->event_flags &= ~VFIO_IRQ_EVENT_PRIMRAY_PLANE_FLIP;
+}
+
+static void cursor_plane_update(void *opaque)
+{
+    VFIOPCIDevice *vdev = opaque;
+    VFIODisplay *dpy = vdev->dpy;
+    static int times;
+
+    if (!event_notifier_test_and_clear(&dpy->cur_event_notifier)) {
+        return;
+    }
+
+    /* Have to skip some cursor events due to performance impact */
+    if (times++ / 2) {
+        times = 0;
+        dpy->event_flags |= VFIO_IRQ_EVENT_CURSOR_PLANE_FLIP;
+        graphic_hw_refresh(dpy->con);
+        dpy->event_flags &= ~VFIO_IRQ_EVENT_CURSOR_PLANE_FLIP;
+    }
+}
+
+static int register_display_notifier(VFIOPCIDevice *vdev,
+                                     uint32_t type, uint32_t subtype,
+                                     EventNotifier *notifier,
+                                     void (*handler)(void *opaque))
+{
+    struct vfio_irq_info *irq;
+    struct vfio_irq_set *irq_set;
+    int argsz;
+    int32_t *pfd;
+    int ret;
+
+    ret = vfio_get_dev_irq_info(&vdev->vbasedev,
+                                type,
+                                subtype,
+                                &irq);
+    if (ret) {
+        goto out;
+    }
+
+    ret = event_notifier_init(notifier, 0);
+    if (ret) {
+        error_report("vfio: Unable to init event notifier for device request");
+        goto out;
+    }
+
+    argsz = sizeof(*irq_set) + sizeof(*pfd);
+
+    irq_set = g_malloc0(argsz);
+    irq_set->argsz = argsz;
+    irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |
+                     VFIO_IRQ_SET_ACTION_TRIGGER;
+    irq_set->index = irq->index;
+    irq_set->start = 0;
+    irq_set->count = 1;
+    pfd = (int32_t *)&irq_set->data;
+
+    *pfd = event_notifier_get_fd(notifier);
+    qemu_set_fd_handler(*pfd, handler, NULL, vdev);
+
+    ret = ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set);
+    if (ret) {
+        error_report("vfio: Failed to set up device request notification");
+        qemu_set_fd_handler(*pfd, NULL, NULL, vdev);
+        event_notifier_cleanup(notifier);
+    }
+
+    g_free(irq_set);
+
+out:
+    return ret;
+}
+
+static int vfio_register_display_notifier(VFIOPCIDevice *vdev)
+{
+    VFIODisplay *dpy = vdev->dpy;
+    int ret;
+
+    ret = register_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
+                                    VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP,
+                                    &dpy->pri_event_notifier,
+                                    primary_plane_update);
+
+    if (ret) {
+        goto out;
+    }
+
+    ret = register_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
+                                   VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP,
+                                   &dpy->cur_event_notifier,
+                                   cursor_plane_update);
+out:
+    if (ret) {
+        dpy->event_flags = 0;
+    } else {
+        dpy->event_flags = VFIO_IRQ_EVENT_ENABLE;
+    }
+
+    return ret;
+}
+
+static void unregister_display_notifier(VFIOPCIDevice *vdev,
+                                       uint32_t type, uint32_t subtype,
+                                       EventNotifier *notifier)
+{
+    VFIODisplay *dpy = vdev->dpy;
+    int argsz;
+    struct vfio_irq_info *irq;
+    struct vfio_irq_set *irq_set;
+    int32_t *pfd;
+    int ret;
+
+    if (!dpy->event_flags) {
+        return;
+    }
+
+    ret = vfio_get_dev_irq_info(&vdev->vbasedev,
+                                type,
+                                subtype,
+                                &irq);
+    if (ret) {
+        return ;
+    }
+
+    argsz = sizeof(*irq_set) + sizeof(*pfd);
+
+    irq_set = g_malloc0(argsz);
+    irq_set->argsz = argsz;
+    irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |
+                     VFIO_IRQ_SET_ACTION_TRIGGER;
+    irq_set->index = irq->index;
+    irq_set->start = 0;
+    irq_set->count = 1;
+    pfd = (int32_t *)&irq_set->data;
+    *pfd = -1;
+
+    if (ioctl(vdev->vbasedev.fd, VFIO_DEVICE_SET_IRQS, irq_set)) {
+        error_report("vfio: Failed to de-assign device request fd: %m");
+    }
+    g_free(irq_set);
+    qemu_set_fd_handler(event_notifier_get_fd(notifier),
+                        NULL, NULL, vdev);
+    event_notifier_cleanup(notifier);
+}
+
+static void vfio_unregister_display_notifier(VFIOPCIDevice *vdev)
+{
+    VFIODisplay *dpy = vdev->dpy;
+
+    unregister_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
+                                VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP,
+                                &dpy->pri_event_notifier);
+
+    unregister_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
+                                VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP,
+                                &dpy->cur_event_notifier);
+    dpy->event_flags = false;
+}
+
 int vfio_display_probe(VFIOPCIDevice *vdev, Error **errp)
 {
     struct vfio_device_gfx_plane_info probe;
@@ -531,6 +715,7 @@ void vfio_display_finalize(VFIOPCIDevice *vdev)
         return;
     }
 
+    vfio_unregister_display_notifier(vdev);
     graphic_console_close(vdev->dpy->con);
     vfio_display_dmabuf_exit(vdev->dpy);
     vfio_display_region_exit(vdev->dpy);
diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h
index 5cab6a1b81..a3f03b20e8 100644
--- a/include/hw/vfio/vfio-common.h
+++ b/include/hw/vfio/vfio-common.h
@@ -27,6 +27,7 @@
 #include "qemu/notify.h"
 #include "ui/console.h"
 #include "hw/display/ramfb.h"
+#include "qemu/event_notifier.h"
 #ifdef CONFIG_LINUX
 #include <linux/vfio.h>
 #endif
@@ -145,6 +146,10 @@ typedef struct VFIODMABuf {
     QTAILQ_ENTRY(VFIODMABuf) next;
 } VFIODMABuf;
 
+#define VFIO_IRQ_EVENT_ENABLE              (1 << 0)
+#define VFIO_IRQ_EVENT_PRIMRAY_PLANE_FLIP  (1 << 1)
+#define VFIO_IRQ_EVENT_CURSOR_PLANE_FLIP   (1 << 2)
+
 typedef struct VFIODisplay {
     QemuConsole *con;
     RAMFBState *ramfb;
@@ -152,6 +157,9 @@ typedef struct VFIODisplay {
     struct vfio_region_gfx_edid *edid_regs;
     uint8_t *edid_blob;
     QEMUTimer *edid_link_timer;
+    EventNotifier pri_event_notifier;
+    EventNotifier cur_event_notifier;
+    uint32_t event_flags;
     struct {
         VFIORegion buffer;
         DisplaySurface *surface;
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events
  2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
                   ` (2 preceding siblings ...)
  2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 3/3] vfio/display: Refresh display depending on vGPU page flip events Tina Zhang
@ 2019-06-04 10:58 ` no-reply
  2019-06-04 11:18 ` no-reply
  4 siblings, 0 replies; 6+ messages in thread
From: no-reply @ 2019-06-04 10:58 UTC (permalink / raw)
  To: tina.zhang
  Cc: kevin.tian, qemu-devel, zhenyuw, tina.zhang, alex.williamson,
	zhiyuan.lv, hang.yuan, intel-gvt-dev, zhi.a.wang, kraxel

Patchew URL: https://patchew.org/QEMU/20190604095847.10532-1-tina.zhang@intel.com/



Hi,

This series failed build test on s390x host. Please find the details below.

=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
set -e
CC=$HOME/bin/cc
INSTALL=$PWD/install
BUILD=$PWD/build
mkdir -p $BUILD $INSTALL
SRC=$PWD
cd $BUILD
$SRC/configure --cc=$CC --prefix=$INSTALL
make -j4
# XXX: we need reliable clean up
# make check -j4 V=1
make install

echo
echo "=== ENV ==="
env

echo
echo "=== PACKAGES ==="
rpm -qa
=== TEST SCRIPT END ===

  CC      aarch64-softmmu/hw/display/virtio-gpu.o
  CC      arm-softmmu/hw/display/virtio-gpu-pci.o
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_irq_info_cap’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: error: ‘VFIO_IRQ_INFO_FLAG_CAPS’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_FLAG_CAPS’?
  757 |     if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
      |                         VFIO_REGION_INFO_FLAG_CAPS
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: note: each undeclared identifier is reported only once for each function it appears in
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:761:26: error: ‘struct vfio_irq_info’ has no member named ‘cap_offset’
  761 |     for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
      |                          ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_dev_irq_info’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1636:44: error: ‘VFIO_IRQ_INFO_CAP_TYPE’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_CAP_TYPE’?
 1636 |         hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
      |                                            VFIO_REGION_INFO_CAP_TYPE
In file included from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:51,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:34: error: dereferencing pointer to incomplete type ‘struct vfio_irq_info_cap_type’
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                  ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
 1642 |         cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
      |                    ^~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:54: error: initialization of ‘const int *’ from incompatible pointer type ‘struct vfio_info_cap_header *’ [-Werror=incompatible-pointer-types]
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                                      ^
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/glib-compat.h:32,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:140,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:58:37: error: invalid use of undefined type ‘struct vfio_irq_info_cap_type’
   58 |         (type *) ((char *) __mptr - offsetof(type, member));})
      |                                     ^~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
  CC      aarch64-softmmu/hw/timer/digic-timer.o
  CC      aarch64-softmmu/hw/timer/allwinner-a10-pit.o
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_irq_info_cap’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: error: ‘VFIO_IRQ_INFO_FLAG_CAPS’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_FLAG_CAPS’?
  757 |     if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
      |                         VFIO_REGION_INFO_FLAG_CAPS
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: note: each undeclared identifier is reported only once for each function it appears in
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:761:26: error: ‘struct vfio_irq_info’ has no member named ‘cap_offset’
  761 |     for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
      |                          ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_dev_irq_info’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1636:44: error: ‘VFIO_IRQ_INFO_CAP_TYPE’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_CAP_TYPE’?
 1636 |         hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
      |                                            VFIO_REGION_INFO_CAP_TYPE
In file included from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:51,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:34: error: dereferencing pointer to incomplete type ‘struct vfio_irq_info_cap_type’
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                  ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
 1642 |         cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
      |                    ^~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:54: error: initialization of ‘const int *’ from incompatible pointer type ‘struct vfio_info_cap_header *’ [-Werror=incompatible-pointer-types]
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                                      ^
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/glib-compat.h:32,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:140,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:58:37: error: invalid use of undefined type ‘struct vfio_irq_info_cap_type’
   58 |         (type *) ((char *) __mptr - offsetof(type, member));})
      |                                     ^~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
  CC      aarch64-softmmu/hw/vfio/common.o
  CC      aarch64-softmmu/hw/vfio/spapr.o
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_irq_info_cap’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: error: ‘VFIO_IRQ_INFO_FLAG_CAPS’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_FLAG_CAPS’?
  757 |     if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
      |                         VFIO_REGION_INFO_FLAG_CAPS
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: note: each undeclared identifier is reported only once for each function it appears in
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:761:26: error: ‘struct vfio_irq_info’ has no member named ‘cap_offset’
  761 |     for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
      |                          ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_dev_irq_info’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1636:44: error: ‘VFIO_IRQ_INFO_CAP_TYPE’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_CAP_TYPE’?
 1636 |         hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
      |                                            VFIO_REGION_INFO_CAP_TYPE
In file included from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:51,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:34: error: dereferencing pointer to incomplete type ‘struct vfio_irq_info_cap_type’
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                  ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
 1642 |         cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
      |                    ^~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:54: error: initialization of ‘const int *’ from incompatible pointer type ‘struct vfio_info_cap_header *’ [-Werror=incompatible-pointer-types]
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                                      ^
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/glib-compat.h:32,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:140,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:58:37: error: invalid use of undefined type ‘struct vfio_irq_info_cap_type’
   58 |         (type *) ((char *) __mptr - offsetof(type, member));})
      |                                     ^~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
      |                    ^~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_irq_info_cap’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: error: ‘VFIO_IRQ_INFO_FLAG_CAPS’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_FLAG_CAPS’?
  757 |     if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
      |                         ^~~~~~~~~~~~~~~~~~~~~~~
      |                         VFIO_REGION_INFO_FLAG_CAPS
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:757:25: note: each undeclared identifier is reported only once for each function it appears in
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:761:26: error: ‘struct vfio_irq_info’ has no member named ‘cap_offset’
  761 |     for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
      |                          ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c: In function ‘vfio_get_dev_irq_info’:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1636:44: error: ‘VFIO_IRQ_INFO_CAP_TYPE’ undeclared (first use in this function); did you mean ‘VFIO_REGION_INFO_CAP_TYPE’?
 1636 |         hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
      |                                            VFIO_REGION_INFO_CAP_TYPE
In file included from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:51,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:34: error: dereferencing pointer to incomplete type ‘struct vfio_irq_info_cap_type’
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                  ^~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
 1642 |         cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
      |                    ^~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:57:54: error: initialization of ‘const int *’ from incompatible pointer type ‘struct vfio_info_cap_header *’ [-Werror=incompatible-pointer-types]
   57 |         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
      |                                                      ^
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’
---
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/glib-compat.h:32,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/osdep.h:140,
                 from /var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:21:
/var/tmp/patchew-tester-tmp-ymcno5d3/src/include/qemu/compiler.h:58:37: error: invalid use of undefined type ‘struct vfio_irq_info_cap_type’
   58 |         (type *) ((char *) __mptr - offsetof(type, member));})
      |                                     ^~~~~~~~
/var/tmp/patchew-tester-tmp-ymcno5d3/src/hw/vfio/common.c:1642:20: note: in expansion of macro ‘container_of’


The full log is available at
http://patchew.org/logs/20190604095847.10532-1-tina.zhang@intel.com/testing.s390x/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events
  2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
                   ` (3 preceding siblings ...)
  2019-06-04 10:58 ` [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI " no-reply
@ 2019-06-04 11:18 ` no-reply
  4 siblings, 0 replies; 6+ messages in thread
From: no-reply @ 2019-06-04 11:18 UTC (permalink / raw)
  To: tina.zhang
  Cc: kevin.tian, qemu-devel, zhenyuw, tina.zhang, alex.williamson,
	zhiyuan.lv, hang.yuan, intel-gvt-dev, zhi.a.wang, kraxel

Patchew URL: https://patchew.org/QEMU/20190604095847.10532-1-tina.zhang@intel.com/



Hi,

This series failed the asan build test. Please find the testing commands and
their output below. If you have Docker installed, you can probably reproduce it
locally.

=== TEST SCRIPT BEGIN ===
#!/bin/bash
time make docker-test-debug@fedora TARGET_LIST=x86_64-softmmu J=14 NETWORK=1
=== TEST SCRIPT END ===

  CC      x86_64-softmmu/qapi/qapi-visit-target.o
  CC      x86_64-softmmu/qapi/qapi-visit.o
  CC      x86_64-softmmu/qapi/qapi-events-target.o
/tmp/qemu-test/src/hw/vfio/display.c:295:9: error: variable 'primary' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
    if (!dpy->event_flags ||
        ^~~~~~~~~~~~~~~~~~~~
/tmp/qemu-test/src/hw/vfio/display.c:341:35: note: uninitialized use occurs here
---
    VFIODMABuf *primary, *cursor;
                       ^
                        = NULL
/tmp/qemu-test/src/hw/vfio/display.c:601:43: error: use of undeclared identifier 'VFIO_IRQ_TYPE_GFX'
    ret = register_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
                                          ^
/tmp/qemu-test/src/hw/vfio/display.c:602:37: error: use of undeclared identifier 'VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP'
                                    VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP,
                                    ^
/tmp/qemu-test/src/hw/vfio/display.c:610:43: error: use of undeclared identifier 'VFIO_IRQ_TYPE_GFX'
    ret = register_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
                                          ^
/tmp/qemu-test/src/hw/vfio/display.c:611:36: error: use of undeclared identifier 'VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP'
                                   VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP,
                                   ^
/tmp/qemu-test/src/hw/vfio/display.c:672:39: error: use of undeclared identifier 'VFIO_IRQ_TYPE_GFX'
    unregister_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
                                      ^
/tmp/qemu-test/src/hw/vfio/display.c:673:33: error: use of undeclared identifier 'VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP'
                                VFIO_IRQ_SUBTYPE_GFX_PRI_PLANE_FLIP,
                                ^
/tmp/qemu-test/src/hw/vfio/display.c:676:39: error: use of undeclared identifier 'VFIO_IRQ_TYPE_GFX'
    unregister_display_notifier(vdev, VFIO_IRQ_TYPE_GFX,
                                      ^
/tmp/qemu-test/src/hw/vfio/display.c:677:33: error: use of undeclared identifier 'VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP'
                                VFIO_IRQ_SUBTYPE_GFX_CUR_PLANE_FLIP,
                                ^
9 errors generated.
/tmp/qemu-test/src/hw/vfio/common.c:757:25: error: use of undeclared identifier 'VFIO_IRQ_INFO_FLAG_CAPS'
    if (!(info->flags & VFIO_IRQ_INFO_FLAG_CAPS)) {
                        ^
/tmp/qemu-test/src/hw/vfio/common.c:761:28: error: no member named 'cap_offset' in 'struct vfio_irq_info'
    for (hdr = ptr + info->cap_offset; hdr != ptr; hdr = ptr + hdr->next) {
                     ~~~~  ^
/tmp/qemu-test/src/hw/vfio/common.c:1636:44: error: use of undeclared identifier 'VFIO_IRQ_INFO_CAP_TYPE'
        hdr = vfio_get_irq_info_cap(*info, VFIO_IRQ_INFO_CAP_TYPE);
                                           ^
/tmp/qemu-test/src/hw/vfio/common.c:1642:20: error: incomplete definition of type 'struct vfio_irq_info_cap_type'
        cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/qemu-test/src/include/qemu/compiler.h:57:34: note: expanded from macro 'container_of'
---
/tmp/qemu-test/src/hw/vfio/common.c:1630:16: note: forward declaration of 'struct vfio_irq_info_cap_type'
        struct vfio_irq_info_cap_type *cap_type;
               ^
/tmp/qemu-test/src/hw/vfio/common.c:1642:20: error: offsetof of incomplete type 'struct vfio_irq_info_cap_type'
        cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
                   ^                 ~~~~~~
/tmp/qemu-test/src/include/qemu/compiler.h:58:37: note: expanded from macro 'container_of'
---
/tmp/qemu-test/src/hw/vfio/common.c:1630:16: note: forward declaration of 'struct vfio_irq_info_cap_type'
        struct vfio_irq_info_cap_type *cap_type;
               ^
/tmp/qemu-test/src/hw/vfio/common.c:1642:18: error: assigning to 'struct vfio_irq_info_cap_type *' from incompatible type 'void'
        cap_type = container_of(hdr, struct vfio_irq_info_cap_type, header);
                 ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/qemu-test/src/hw/vfio/common.c:1644:21: error: incomplete definition of type 'struct vfio_irq_info_cap_type'
        if (cap_type->type == type && cap_type->subtype == subtype) {
            ~~~~~~~~^
/tmp/qemu-test/src/hw/vfio/common.c:1630:16: note: forward declaration of 'struct vfio_irq_info_cap_type'
        struct vfio_irq_info_cap_type *cap_type;
               ^
/tmp/qemu-test/src/hw/vfio/common.c:1644:47: error: incomplete definition of type 'struct vfio_irq_info_cap_type'
        if (cap_type->type == type && cap_type->subtype == subtype) {
                                      ~~~~~~~~^
/tmp/qemu-test/src/hw/vfio/common.c:1630:16: note: forward declaration of 'struct vfio_irq_info_cap_type'


The full log is available at
http://patchew.org/logs/20190604095847.10532-1-tina.zhang@intel.com/testing.asan/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-06-05 15:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-04  9:58 [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI depending on vGPU page flip events Tina Zhang
2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 1/3] vfio: Add a funtion to return a specific irq capabilities Tina Zhang
2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 2/3] ui/console: Introduce two new APIs Tina Zhang
2019-06-04  9:58 ` [Qemu-devel] [RFC PATCH 3/3] vfio/display: Refresh display depending on vGPU page flip events Tina Zhang
2019-06-04 10:58 ` [Qemu-devel] [RFC PATCH 0/3] hw/display: Refresh UI " no-reply
2019-06-04 11:18 ` no-reply

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.