From patchwork Tue Jul 10 11:43:26 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Fix xen pci passthrough Date: Tue, 10 Jul 2012 01:43:26 -0000 From: Wei Wang X-Patchwork-Id: 170149 Message-Id: <1341920606-11942-1-git-send-email-wei.wang2@amd.com> To: , Cc: Wei Wang , xen-devel@lists.xensource.com, qemu-devel@nongnu.org Hi, I find a passthrough issue in qemu when pci device has multiple mmio regions. In this case, the last few bytes of qmp response string are trimmed and then passthru fails with following output. *** glibc detected *** xl: realloc(): invalid pointer: 0x0000000002163f90 *** ======= Backtrace: ========= /lib64/libc.so.6(+0x74c06)[0x7f62970e4c06] /lib64/libc.so.6(+0x77d25)[0x7f62970e7d25] /lib/libxenlight.so.2.0(+0x28d02)[0x7f6297a78d02] /lib/libxenlight.so.2.0(+0x2eccf)[0x7f6297a7eccf] /lib/libxenlight.so.2.0(+0x2f2f6)[0x7f6297a7f2f6] /lib/libxenlight.so.2.0(+0x2fe18)[0x7f6297a7fe18] /lib/libxenlight.so.2.0(+0x20027)[0x7f6297a70027] /lib/libxenlight.so.2.0(+0x212a6)[0x7f6297a712a6] /lib/libxenlight.so.2.0(+0x19e82)[0x7f6297a69e82] /lib/libxenlight.so.2.0(+0x1c288)[0x7f6297a6c288] /lib/libxenlight.so.2.0(+0x1c2a8)[0x7f6297a6c2a8] /lib/libxenlight.so.2.0(+0x2657e)[0x7f6297a7657e] /lib/libxenlight.so.2.0(+0x34076)[0x7f6297a84076] /lib/libxenlight.so.2.0(libxl__fork_selfpipe_woken+0x92)[0x7f6297a84394] /lib/libxenlight.so.2.0(+0x3254a)[0x7f6297a8254a] /lib/libxenlight.so.2.0(+0x3276d)[0x7f6297a8276d] /lib/libxenlight.so.2.0(+0x33944)[0x7f6297a83944] /lib/libxenlight.so.2.0(+0x1c0a8)[0x7f6297a6c0a8] /lib/libxenlight.so.2.0(libxl_domain_create_new+0x14)[0x7f6297a6c14f] xl[0x40c1f2] xl[0x40fc94] xl[0x406c21] /lib64/libc.so.6(__libc_start_main+0xed)[0x7f629709123d] xl[0x406439] Attached patch can fix this issue. Thanks, Wei Signed-off-by: Wei Wang --- monitor.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/monitor.c b/monitor.c index f6107ba..9f30f5f 100644 --- a/monitor.c +++ b/monitor.c @@ -165,7 +165,7 @@ struct Monitor { int reset_seen; int flags; int suspend_cnt; - uint8_t outbuf[1024]; + uint8_t outbuf[2048]; int outbuf_index; ReadLineState *rs; MonitorControl *mc;