qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

Merge remote-tracking branch 'remotes/kraxel/tags/pull-ui-20170220-1' into staging

ui: opengl fixes, for spice and egl-helpers.

# gpg: Signature made Mon 20 Feb 2017 13:12:46 GMT
# gpg: using RSA key 0x4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
# Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138

* remotes/kraxel/tags/pull-ui-20170220-1:
egl-helpers: Support newer MESA versions
spice: allow to specify drm rendernode

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

+21 -7
+1 -2
include/ui/egl-helpers.h
··· 14 14 extern struct gbm_device *qemu_egl_rn_gbm_dev; 15 15 extern EGLContext qemu_egl_rn_ctx; 16 16 17 - int qemu_egl_rendernode_open(void); 18 - int egl_rendernode_init(void); 17 + int egl_rendernode_init(const char *rendernode); 19 18 int egl_get_fd_for_texture(uint32_t tex_id, EGLint *stride, EGLint *fourcc); 20 19 21 20 #endif
+5 -1
qemu-options.hx
··· 1066 1066 " [,streaming-video=[off|all|filter]][,disable-copy-paste]\n" 1067 1067 " [,disable-agent-file-xfer][,agent-mouse=[on|off]]\n" 1068 1068 " [,playback-compression=[on|off]][,seamless-migration=[on|off]]\n" 1069 - " [,gl=[on|off]]\n" 1069 + " [,gl=[on|off]][,rendernode=<file>]\n" 1070 1070 " enable spice\n" 1071 1071 " at least one of {port, tls-port} is mandatory\n", 1072 1072 QEMU_ARCH_ALL) ··· 1160 1160 1161 1161 @item gl=[on|off] 1162 1162 Enable/disable OpenGL context. Default is off. 1163 + 1164 + @item rendernode=<file> 1165 + DRM render node for OpenGL rendering. If not specified, it will pick 1166 + the first available. (Since 2.9) 1163 1167 1164 1168 @end table 1165 1169 ETEXI
+11 -3
ui/egl-helpers.c
··· 44 44 struct gbm_device *qemu_egl_rn_gbm_dev; 45 45 EGLContext qemu_egl_rn_ctx; 46 46 47 - int qemu_egl_rendernode_open(void) 47 + static int qemu_egl_rendernode_open(const char *rendernode) 48 48 { 49 49 DIR *dir; 50 50 struct dirent *e; 51 51 int r, fd; 52 52 char *p; 53 + 54 + if (rendernode) { 55 + return open(rendernode, O_RDWR | O_CLOEXEC | O_NOCTTY | O_NONBLOCK); 56 + } 53 57 54 58 dir = opendir("/dev/dri"); 55 59 if (!dir) { ··· 85 89 return fd; 86 90 } 87 91 88 - int egl_rendernode_init(void) 92 + int egl_rendernode_init(const char *rendernode) 89 93 { 90 94 qemu_egl_rn_fd = -1; 91 95 92 - qemu_egl_rn_fd = qemu_egl_rendernode_open(); 96 + qemu_egl_rn_fd = qemu_egl_rendernode_open(rendernode); 93 97 if (qemu_egl_rn_fd == -1) { 94 98 error_report("egl: no drm render node available"); 95 99 goto err; ··· 219 223 } 220 224 221 225 egl_dbg("eglGetDisplay (dpy %p) ...\n", dpy); 226 + #ifdef EGL_MESA_platform_gbm 227 + qemu_egl_display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_MESA, dpy, NULL); 228 + #else 222 229 qemu_egl_display = eglGetDisplay(dpy); 230 + #endif 223 231 if (qemu_egl_display == EGL_NO_DISPLAY) { 224 232 error_report("egl: eglGetDisplay failed"); 225 233 return -1;
+4 -1
ui/spice-core.c
··· 501 501 },{ 502 502 .name = "gl", 503 503 .type = QEMU_OPT_BOOL, 504 + },{ 505 + .name = "rendernode", 506 + .type = QEMU_OPT_STRING, 504 507 #endif 505 508 }, 506 509 { /* end of list */ } ··· 833 836 "incompatible with -spice port/tls-port"); 834 837 exit(1); 835 838 } 836 - if (egl_rendernode_init() != 0) { 839 + if (egl_rendernode_init(qemu_opt_get(opts, "rendernode")) != 0) { 837 840 error_report("Failed to initialize EGL render node for SPICE GL"); 838 841 exit(1); 839 842 }