Patchwork qemu assertion failed with usb on current git master!

login
register
mail settings
Submitter Gerd Hoffmann
Date Feb. 27, 2012, 3:54 p.m.
Message ID <4F4BA735.7030607@redhat.com>
Download mbox | patch
Permalink /patch/143218/
State New
Headers show

Comments

Gerd Hoffmann - Feb. 27, 2012, 3:54 p.m.
Hi,

> I'm really sorry, but I don't understand what's happening - I copied the
> qemu executable on my target system before executing it, but gdb complains
> that the core file does not match the executable! But except the file paths
> they are identical.

> warning: core file may not match specified executable file.
> Core was generated by `/disc/qemu-system-x86_64 -machine kernel_irqchip=on
> -serial /dev/ttyS2 -usb -de'.
> Program terminated with signal 6, Aborted.
> #0  0xffffe424 in __kernel_vsyscall ()

Strange.  The backtrace is bogus too.

> I don't know how to proceed here.

Lets try plan b: add a printf right before the assert:



> Don't you run into this problem (crash on USB plug in) on your system?
> I tested it with a Linux guest, there it does not crash! Only with a
> Windows XP guest!

I test with Linux most of the time, but even with windows xp guest it
doesn't reproduce here.

cheers,
  Gerd
Erik Rull - Feb. 27, 2012, 4:53 p.m.
Gerd Hoffmann wrote:
>    Hi,
>
>> I'm really sorry, but I don't understand what's happening - I copied the
>> qemu executable on my target system before executing it, but gdb complains
>> that the core file does not match the executable! But except the file paths
>> they are identical.
>
>> warning: core file may not match specified executable file.
>> Core was generated by `/disc/qemu-system-x86_64 -machine kernel_irqchip=on
>> -serial /dev/ttyS2 -usb -de'.
>> Program terminated with signal 6, Aborted.
>> #0  0xffffe424 in __kernel_vsyscall ()
>
> Strange.  The backtrace is bogus too.
>
>> I don't know how to proceed here.
>
> Lets try plan b: add a printf right before the assert:
>
> --- a/hw/usb.c
> +++ b/hw/usb.c
> @@ -356,6 +356,7 @@ void usb_packet_complete(USBDevice *dev, USBPacket *p)
>
>       while (!QTAILQ_EMPTY(&ep->queue)) {
>           p = QTAILQ_FIRST(&ep->queue);
> +        fprintf(stderr, "%s: packet %p\n", __func__, p);
>           assert(p->state == USB_PACKET_QUEUED);
>           ret = usb_process_one(p);
>           if (ret == USB_RET_ASYNC) {
>
>
>> Don't you run into this problem (crash on USB plug in) on your system?
>> I tested it with a Linux guest, there it does not crash! Only with a
>> Windows XP guest!
>
> I test with Linux most of the time, but even with windows xp guest it
> doesn't reproduce here.
>
> cheers,
>    Gerd
>

That's a good idea - will test that tomorrow and send the new result file.
Have you ever tested a USB CD or DVD drive attached to your guests? I have 
issues with Windows XP (I get everything running and detected beside the 
drive letter in Windows Explorer) but it works fine for Linux.

Best regards,

Erik
Erik Rull - Feb. 28, 2012, 1:38 p.m.
On February 27, 2012 at 5:53 PM Erik Rull <erik.rull@rdsoftware.de> wrote:

> Gerd Hoffmann wrote:
> >    Hi,
> >
> >> I'm really sorry, but I don't understand what's happening - I copied
the
> >> qemu executable on my target system before executing it, but gdb
complains
> >> that the core file does not match the executable! But except the file
paths
> >> they are identical.
> >
> >> warning: core file may not match specified executable file.
> >> Core was generated by `/disc/qemu-system-x86_64 -machine
kernel_irqchip=on
> >> -serial /dev/ttyS2 -usb -de'.
> >> Program terminated with signal 6, Aborted.
> >> #0  0xffffe424 in __kernel_vsyscall ()
> >
> > Strange.  The backtrace is bogus too.
> >
> >> I don't know how to proceed here.
> >
> > Lets try plan b: add a printf right before the assert:
> >
> > --- a/hw/usb.c
> > +++ b/hw/usb.c
> > @@ -356,6 +356,7 @@ void usb_packet_complete(USBDevice *dev, USBPacket
*p)
> >
> >       while (!QTAILQ_EMPTY(&ep->queue)) {
> >           p = QTAILQ_FIRST(&ep->queue);
> > +        fprintf(stderr, "%s: packet %p\n", __func__, p);
> >           assert(p->state == USB_PACKET_QUEUED);
> >           ret = usb_process_one(p);
> >           if (ret == USB_RET_ASYNC) {
> >
> >
> >> Don't you run into this problem (crash on USB plug in) on your system?
> >> I tested it with a Linux guest, there it does not crash! Only with a
> >> Windows XP guest!
> >
> > I test with Linux most of the time, but even with windows xp guest it
> > doesn't reproduce here.
> >
> > cheers,
> >    Gerd
> >
>
> That's a good idea - will test that tomorrow and send the new result
file.
> Have you ever tested a USB CD or DVD drive attached to your guests? I
have
> issues with Windows XP (I get everything running and detected beside the
> drive letter in Windows Explorer) but it works fine for Linux.
>
> Best regards,
>
> Erik
>


Find attached the usb.txt => I gzip'ed it to reduce the transfer size.
I added the p->state to the fprintf, maybe this helps.
fprintf(stderr, "%s: packet: %p %d\n", __func__, p,p?p->state:-1);

Best regards,

Erik

Patch

--- a/hw/usb.c
+++ b/hw/usb.c
@@ -356,6 +356,7 @@  void usb_packet_complete(USBDevice *dev, USBPacket *p)

     while (!QTAILQ_EMPTY(&ep->queue)) {
         p = QTAILQ_FIRST(&ep->queue);
+        fprintf(stderr, "%s: packet %p\n", __func__, p);
         assert(p->state == USB_PACKET_QUEUED);
         ret = usb_process_one(p);
         if (ret == USB_RET_ASYNC) {