All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Claudio Bley <cbley@av-test.de>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] lsi_soft_reset: Assertion `!s->current' failed with Windows XP setup
Date: Tue, 30 Apr 2013 15:44:37 +0200	[thread overview]
Message-ID: <517FCAC5.8060601@redhat.com> (raw)
In-Reply-To: <874neop42m.wl%cbley@av-test.de>

Il 30/04/2013 14:59, Claudio Bley ha scritto:
> At Mon, 29 Apr 2013 17:54:37 +0200,
> Paolo Bonzini wrote:
>>
>> Il 12/04/2013 16:02, Claudio Bley ha scritto:
>>> Hi.
>>>
>>> I'm using the latest qemu release 1.4.0 and libvirt 1.0.4.
>>>
>>> The host system is a Ubuntu 12.04 LTS system, Intel Xeon processor,
>>> 4GB RAM.
>>>
>>> When trying to install Windows XP I constantly receive this error
>>> (usually right before the graphical Setup is started). Once, I've seen
>>> this error too:
>>>
>>> hw/lsi53c895a.c:351: lsi_soft_reset: Assertion `((&s->queue)->tqh_first == ((void *)0))' failed.
>>>
>>> I found the thread here
>>> http://lists.gnu.org/archive/html/qemu-devel/2012-11/msg00518.html but
>>> it didn't led me nowhere. 
>>>
>>> I recompiled with DEBUG_SCSI and DEBUG_LSI enabled. Here's the command
>>> libvirt put together and the last few lines of output. I can provide
>>> the complete log if you need it.
>>
>> Hi, sorry---I just read this now.
>>
>> Can you please try the patches at
>> http://cache.gmane.org//gmane/comp/emulators/qemu/208057-001.bin?
> 
> I gave it a shot and this fixed the bug for me.

Thanks very much.  It is late for 1.5 now, but these will be in 1.5.1
and 1.6.

Paolo

> I've applied the patches to git tag v1.4.1 with minor modifications:
> 
> - skipped patch 1 and 2 since they already had been applied upstream
>   in the meantime, AFAICS
> 
> - s/vists/visits/ in subject line of patch 3
> 
> - updated patch 3 and 4 in order to adjust for moved-around files and
>   some code changes since 1.3.0
> 
> Thanks!
> 
> Here are the updated patches:
> 
> ------- >8 ---------------------------------------------
> From e33168365eae0d6610762ebafd22f26a7a6168e1 Mon Sep 17 00:00:00 2001
> From: Paolo Bonzini <pbonzini@redhat.com>
> Date: Mon, 17 Dec 2012 10:37:02 +0100
> Subject: [PATCH 1/2] qdev: allow both pre- and post-order visits in qdev
>  walking functions
> 
> 
> Resetting should be done in post-order, not pre-order.  However,
> qdev_walk_children and qbus_walk_children do not allow this.  Fix
> it by adding two extra arguments to the functions.
> 
> ---
>  hw/qdev-core.h |   13 +++++++++----
>  hw/qdev.c      |   45 +++++++++++++++++++++++++++++++++------------
>  2 files changed, 42 insertions(+), 16 deletions(-)
> 
> diff --git a/hw/qdev-core.h b/hw/qdev-core.h
> index 2486f36..a0d05ca 100644
> --- a/hw/qdev-core.h
> +++ b/hw/qdev-core.h
> @@ -237,10 +237,15 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam
>  /* Returns > 0 if either devfn or busfn skip walk somewhere in cursion,
>   *         < 0 if either devfn or busfn terminate walk somewhere in cursion,
>   *           0 otherwise. */
> -int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn,
> -                       qbus_walkerfn *busfn, void *opaque);
> -int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn,
> -                       qbus_walkerfn *busfn, void *opaque);
> +int qbus_walk_children(BusState *bus,
> +                       qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
> +                       qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
> +                       void *opaque);
> +int qdev_walk_children(DeviceState *dev,
> +                       qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
> +                       qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
> +                       void *opaque);
> +
>  void qdev_reset_all(DeviceState *dev);
>  
>  /**
> diff --git a/hw/qdev.c b/hw/qdev.c
> index 689cd54..772cfe0 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -224,12 +224,12 @@ static int qbus_reset_one(BusState *bus, void *opaque)
>  
>  void qdev_reset_all(DeviceState *dev)
>  {
> -    qdev_walk_children(dev, qdev_reset_one, qbus_reset_one, NULL);
> +    qdev_walk_children(dev, qdev_reset_one, qbus_reset_one, NULL, NULL, NULL);
>  }
>  
>  void qbus_reset_all(BusState *bus)
>  {
> -    qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL);
> +    qbus_walk_children(bus, qdev_reset_one, qbus_reset_one, NULL, NULL, NULL);
>  }
>  
>  void qbus_reset_all_fn(void *opaque)
> @@ -327,49 +327,70 @@ BusState *qdev_get_child_bus(DeviceState *dev, const char *name)
>      return NULL;
>  }
>  
> -int qbus_walk_children(BusState *bus, qdev_walkerfn *devfn,
> -                       qbus_walkerfn *busfn, void *opaque)
> +int qbus_walk_children(BusState *bus,
> +                       qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
> +                       qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
> +                       void *opaque)
>  {
>      BusChild *kid;
>      int err;
>  
> -    if (busfn) {
> -        err = busfn(bus, opaque);
> +    if (pre_busfn) {
> +        err = pre_busfn(bus, opaque);
>          if (err) {
>              return err;
>          }
>      }
>  
>      QTAILQ_FOREACH(kid, &bus->children, sibling) {
> -        err = qdev_walk_children(kid->child, devfn, busfn, opaque);
> +        err = qdev_walk_children(kid->child,
> +                                 pre_devfn, pre_busfn,
> +                                 post_devfn, post_busfn, opaque);
>          if (err < 0) {
>              return err;
>          }
>      }
>  
> +    if (post_busfn) {
> +        err = post_busfn(bus, opaque);
> +        if (err) {
> +            return err;
> +        }
> +    }
> +
>      return 0;
>  }
>  
> -int qdev_walk_children(DeviceState *dev, qdev_walkerfn *devfn,
> -                       qbus_walkerfn *busfn, void *opaque)
> +int qdev_walk_children(DeviceState *dev,
> +                       qdev_walkerfn *pre_devfn, qbus_walkerfn *pre_busfn,
> +                       qdev_walkerfn *post_devfn, qbus_walkerfn *post_busfn,
> +                       void *opaque)
>  {
>      BusState *bus;
>      int err;
>  
> -    if (devfn) {
> -        err = devfn(dev, opaque);
> +    if (pre_devfn) {
> +        err = pre_devfn(dev, opaque);
>          if (err) {
>              return err;
>          }
>      }
>  
>      QLIST_FOREACH(bus, &dev->child_bus, sibling) {
> -        err = qbus_walk_children(bus, devfn, busfn, opaque);
> +        err = qbus_walk_children(bus, pre_devfn, pre_busfn,
> +                                 post_devfn, post_busfn, opaque);
>          if (err < 0) {
>              return err;
>          }
>      }
>  
> +    if (post_devfn) {
> +        err = post_devfn(dev, opaque);
> +        if (err) {
> +            return err;
> +        }
> +    }
> +
>      return 0;
>  }
>  
> 

  reply	other threads:[~2013-04-30 13:45 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-12 14:02 [Qemu-devel] lsi_soft_reset: Assertion `!s->current' failed with Windows XP setup Claudio Bley
2013-04-29 15:54 ` Paolo Bonzini
2013-04-30 12:59   ` Claudio Bley
2013-04-30 13:44     ` Paolo Bonzini [this message]
2013-05-02 17:20     ` Paolo Bonzini
2013-07-29 13:31       ` Claudio Bley
     [not found]         ` <51F6797F.9060007@redhat.com>
2013-10-10 13:41           ` Claudio Bley
2013-10-10 13:42             ` Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=517FCAC5.8060601@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=cbley@av-test.de \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.