From: Anthony Liguori <aliguori@us.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>, qemu-devel@nongnu.org
Cc: mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH 00/15] qdev: make reset semantics more clear and consistent, reset qbuses under virtio devices
Date: Mon, 07 Jan 2013 13:10:04 -0600 [thread overview]
Message-ID: <877gnovmgj.fsf@codemonkey.ws> (raw)
In-Reply-To: <1355761490-10073-1-git-send-email-pbonzini@redhat.com>
Paolo Bonzini <pbonzini@redhat.com> writes:
> After discussion with mst on the topic of resetting virtio devices,
> here is a series that hopefully clarifies the semantics of bus and
> device resets.
>
> After this series, there are two kinds of resets:
>
> 1) device-level reset is the kind of reset that you get with a register
> write on the device. It will clear interrupts and DMAs among other things,
> but not any bus-level state, for example it will not clear PCI BARs and
> other configuration space data. It is done with qdev_reset_all.
>
> 2) bus-level reset is the kind of reset that you get with a register
> write on the device that exports the bus (including triggering a device-level
> reset on the device that exports the bus). It will do a device-level
> reset on the child, but also clear bus-level state such as PCI BARs and
> other configuration space data. It can be triggered for all devices
> on a bus with qbus_reset_all. There is still no API for a bus-level
> reset of a single device (like PCI FLR), this can be added later.
I don't really understand this dual abstraction. I suspect it's
overgeneralizing something that's the result of poor modeling.
Very often with PCI devices, you have an otherwise independent chipset
embedded on a PCI card There's a clear separate between the chipset and
the card.
It may be possible to poke the chipset directly to do a reset and that
may only affect state that's on the chipset but not any card-specific
state.
But this has nothing to do with busses, this is just about
encapsulation. IOW, what you have is:
E1000 is-a PCIDevice
has-a E1000 chipset
PCIDevice::reset()
-> calls chipset->reset()
But with the right register write, chipset->reset() can be called w/o
PCIDevice::reset(). But again, this has nothing to do with busses.
What I'm missing with this series is what problem are we trying to
solve? I don't think we model reset correctly today because I don't
think there's a single notion of reset.
I think reset really ought to just be a bus level concept with
individual implementations for each bus.
Regards,
Anthony Liguori
>
> Patches 1-5 are miscellaneous fixes to the reset paths.
>
> Patches 6-8 introduce qbus_reset_all and uses it.
>
> Patches 9-12 switch qdev_reset_all and qbus_reset_all from pre-order
> to post-order, and document the resulting semantics.
>
> Finally, patches 13-15 adjust the virtio implementations to use qdev
> device-level reset more extensively.
>
> Paolo Bonzini (15):
> qdev: do not reset a device until the parent has been initialized
> intel-hda: do not reset codecs from intel_hda_reset
> pci: clean up resetting of IRQs
> virtio-pci: reset device before PCI layer
> virtio-s390: add a reset function to virtio-s390 devices
> qdev: add qbus_reset_all
> pci: do not export pci_bus_reset
> lsi: use qbus_reset_all to reset SCSI bus
> qdev: allow both pre- and post-order vists in qdev walking functions
> qdev: switch reset to post-order
> qdev: remove device_reset
> qdev: document reset semantics
> virtio-pci: reset all qbuses too when writing to the status field
> virtio-s390: reset all qbuses too when writing to the status field
> virtio-serial: do not perform bus reset by hand
>
> hw/intel-hda.c | 1 -
> hw/lsi53c895a.c | 7 +----
> hw/pci.c | 16 ++++------
> hw/pci.h | 1 -
> hw/pci_bridge.c | 2 +-
> hw/qdev-core.h | 83 ++++++++++++++++++++++++++++++++++++++++++--------
> hw/qdev.c | 70 +++++++++++++++++++++++++++---------------
> hw/s390-virtio-bus.c | 16 +++++++++-
> hw/virtio-pci.c | 27 +++++++---------
> hw/virtio-serial-bus.c | 19 +++---------
> 10 files changed, 156 insertions(+), 86 deletions(-)
>
> --
> 1.8.0.2
next prev parent reply other threads:[~2013-01-07 19:10 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-17 16:24 [Qemu-devel] [PATCH 00/15] qdev: make reset semantics more clear and consistent, reset qbuses under virtio devices Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 01/15] qdev: do not reset a device until the parent has been initialized Paolo Bonzini
2012-12-17 16:52 ` Michael S. Tsirkin
2012-12-17 16:53 ` Michael S. Tsirkin
2012-12-17 17:06 ` Paolo Bonzini
2012-12-17 21:57 ` Andreas Färber
2012-12-17 16:24 ` [Qemu-devel] [PATCH 02/15] intel-hda: do not reset codecs from intel_hda_reset Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 03/15] pci: clean up resetting of IRQs Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 04/15] virtio-pci: reset device before PCI layer Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 05/15] virtio-s390: add a reset function to virtio-s390 devices Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 06/15] qdev: add qbus_reset_all Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 07/15] pci: do not export pci_bus_reset Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 08/15] lsi: use qbus_reset_all to reset SCSI bus Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 09/15] qdev: allow both pre- and post-order vists in qdev walking functions Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 10/15] qdev: switch reset to post-order Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 11/15] qdev: remove device_reset Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 12/15] qdev: document reset semantics Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 13/15] virtio-pci: reset all qbuses too when writing to the status field Paolo Bonzini
2012-12-17 16:48 ` Michael S. Tsirkin
2012-12-17 16:54 ` Paolo Bonzini
2012-12-17 17:08 ` Michael S. Tsirkin
2012-12-17 17:09 ` Paolo Bonzini
2012-12-17 16:24 ` [Qemu-devel] [PATCH 14/15] virtio-s390: " Paolo Bonzini
2012-12-17 16:29 ` Alexander Graf
2012-12-17 16:24 ` [Qemu-devel] [PATCH 15/15] virtio-serial: do not perform bus reset by hand Paolo Bonzini
2012-12-17 21:43 ` [Qemu-devel] [PATCH 00/15] qdev: make reset semantics more clear and consistent, reset qbuses under virtio devices Michael S. Tsirkin
2012-12-18 7:27 ` Paolo Bonzini
2012-12-18 8:35 ` Paolo Bonzini
2012-12-18 9:49 ` Michael S. Tsirkin
2012-12-18 11:40 ` Paolo Bonzini
2013-01-07 17:46 ` Michael S. Tsirkin
2013-01-07 19:10 ` Anthony Liguori [this message]
2013-01-07 19:57 ` Peter Maydell
2013-01-07 20:20 ` Anthony Liguori
2013-01-07 20:28 ` Peter Maydell
2013-01-07 20:51 ` Anthony Liguori
2013-01-09 9:33 ` Paolo Bonzini
2013-01-09 10:22 ` Michael S. Tsirkin
2013-01-09 10:53 ` Paolo Bonzini
2013-01-09 11:09 ` Michael S. Tsirkin
2013-01-09 11:12 ` Paolo Bonzini
2013-01-09 12:10 ` Michael S. Tsirkin
2013-01-09 17:46 ` Paolo Bonzini
2013-01-09 20:40 ` Anthony Liguori
2013-01-09 21:22 ` Paolo Bonzini
2013-01-09 21:40 ` Michael S. Tsirkin
2013-01-10 8:31 ` Paolo Bonzini
2013-01-10 11:32 ` Michael S. Tsirkin
2013-01-10 11:46 ` Peter Maydell
2013-01-10 11:47 ` Paolo Bonzini
2013-01-10 11:59 ` Peter Maydell
2013-01-10 12:12 ` Paolo Bonzini
2013-01-10 12:31 ` Peter Maydell
2013-01-10 12:45 ` Paolo Bonzini
2013-01-10 13:01 ` Peter Maydell
2013-01-10 13:32 ` Paolo Bonzini
2013-01-10 14:14 ` Anthony Liguori
2013-01-10 14:38 ` Paolo Bonzini
2013-01-10 15:01 ` Michael S. Tsirkin
2013-01-08 13:58 ` Michael S. Tsirkin
-- strict thread matches above, loose matches on Subject: below --
2013-01-03 2:18 Anthony Liguori
2013-01-02 18:23 ` Anthony Liguori
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=877gnovmgj.fsf@codemonkey.ws \
--to=aliguori@us.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--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.