Patchwork Fix xen pci passthrough

login
register
mail settings
Submitter Wei Wang
Date July 10, 2012, 11:43 a.m.
Message ID <1341920606-11942-1-git-send-email-wei.wang2@amd.com>
Download mbox | patch
Permalink /patch/170149/
State New
Headers show

Comments

Wei Wang - July 10, 2012, 11:43 a.m.
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 ***
Anthony PERARD - July 10, 2012, 1:05 p.m.
On 10/07/12 12:43, Wei Wang wrote:
> 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.

Could you compile libxl with DEBUG_RECEIVED (uncomment the #define in 
tools/libxl/libxl_qmp.c) and then give the output of `xl -vvv create ...`.

Thanks,

> *** 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 <wei.wang2@amd.com>
>
> ---
>   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;
>
Wei Wang - July 10, 2012, 1:35 p.m.
On 07/10/2012 03:05 PM, Anthony PERARD wrote:
> On 10/07/12 12:43, Wei Wang wrote:
>> 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.
>
> Could you compile libxl with DEBUG_RECEIVED (uncomment the #define in
> tools/libxl/libxl_qmp.c) and then give the output of `xl -vvv create ...`.
>
> Thanks,

Hi, Log file has been attached. Please check them.
Thanks,
Wei



>> *** 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 <wei.wang2@amd.com>
>>
>> ---
>> 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;
>>
>
>

Patch

======= 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 <wei.wang2@amd.com>

---
 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;