qemu assertion failed with usb on current git master!

Submitted by Gerd Hoffmann on Feb. 27, 2012, 3:54 p.m.

Details

Message ID 4F4BA735.7030607@redhat.com
State New
Headers show

Commit Message

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

Comments

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 hide | download patch | download mbox

--- 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) {