[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH v3 01/33] Create Resettable QOM int
Re: [Qemu-block] [Qemu-devel] [PATCH v3 01/33] Create Resettable QOM interface
Mon, 12 Aug 2019 20:27:24 +1000
On Thu, Aug 01, 2019 at 11:35:20AM +0200, Damien Hedde wrote:
> On 7/31/19 7:46 AM, David Gibson wrote:
> > On Tue, Jul 30, 2019 at 04:08:59PM +0200, Damien Hedde wrote:
> >> On 7/30/19 3:59 PM, Peter Maydell wrote:
> >>> On Tue, 30 Jul 2019 at 14:56, Cornelia Huck <address@hidden> wrote:
> >>>> On Tue, 30 Jul 2019 14:44:21 +0100
> >>>> Peter Maydell <address@hidden> wrote:
> >>>>> On Tue, 30 Jul 2019 at 14:42, Cornelia Huck <address@hidden> wrote:
> >>>>>> I'm having a hard time figuring out what a 'cold' or a 'warm' reset is
> >>>>>> supposed to be... can you add a definition/guideline somewhere?
> >>>>> Generally "cold" reset is "power on" and "warm" is "we were already
> >>>>> powered-on, but somebody flipped a reset line somewhere".
> >>>> Ok, that makes sense... my main concern is to distinguish that in a
> >>>> generic way, as it is a generic interface. What about adding something
> >>>> like:
> >>>> "A 'cold' reset means that the object to be reset is initially reset; a
> >>>> 'warm'
> >>>> reset means that the object to be reset has already been initialized."
> >>>> Or is that again too generic?
> >>> I think it doesn't quite capture the idea -- an object can have already
> >>> been reset and then get a 'cold' reset: this is like having a powered-on
> >>> machine and then power-cycling it.
> >>> The 'warm' reset is the vaguer one, because the specific behaviour
> >>> is somewhat device-dependent (many devices might not have any
> >>> difference from 'cold' reset, for those that do the exact detail
> >>> of what doesn't get reset on warm-reset will vary). But every
> >>> device should have some kind of "as if you power-cycled it" (or
> >>> for QEMU, "go back to the same state as if you just started QEMU on the
> >>> command line"). Our current "reset" method is really cold-reset.
> >> Exactly. In the following patches, I've tried to replace existing reset
> >> calls by cold or warm reset depending on whether:
> >> + it is called through the main system reset -> cold
> >> + it is called during normal life-time -> warm
> >> But I definitely can add some docs/comments to better explain that.
> > Hrm, that helps, but it still seems pretty vague to me.
> > It's not really my call, but building the concept of warm versus cold
> > resets into such a generic interface seems pretty dubios to me. While
> > it's moderately common for things to have a notion of warm versus cold
> > reset it's certainly not universal. There are many devices where
> > there's no meaningful difference between the two. There are some
> > devices where there are > 2 different types of reset suitable for
> > various different situations.
> > Is there any way this could work with it usually just presenting the
> > cold reset (which is the closest to a universal concept), and any warm
> > or additional resets are handled buy a different instance of the
> > Resettable interface?
> In my current implementation, cold/warm is only a question of setting a
> flag before calling the reset methods. I rely and the reset methods to
> check that flag if necessary. The feature can be added/removed without
> pain (if we stick with device_reset to do a cold one). So if it's
> better, I can put it aside for now.
> IMO handling warm reset with another interface is probably not a good
> idea because it will need another load of methods.
I was thinking of a different instance of the same interface, not a
new interface. But on consideration that probably means dummy objects
so that's also ugly.
Here's another way to look at things though: I can see why a common
interface for cold resets is useful; we use it during system resets
and bus resets and so forth. But AIUI, in order to do a warm reset
whatever is initiating it is going to need to know what a warm reset
means for this device - in which case it doesn't really need a uniform
interface for it.
So, would we be better off with helper functions to make implementing
a multi-phase reset easy for devices that do have one or more notions
of a warm reset.
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
Description: PGP signature