All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Damien Hedde <damien.hedde@greensocs.com>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, berrange@redhat.com,
	ehabkost@redhat.com, cohuck@redhat.com,
	mark.burton@greensocs.com, qemu-s390x@nongnu.org,
	edgari@xilinx.com, qemu-arm@nongnu.org, pbonzini@redhat.com,
	david@gibson.dropbear.id.au
Subject: Re: [PATCH v5 02/13] hw/core/qdev: add trace events to help with resettable transition
Date: Mon, 4 Nov 2019 15:33:28 +0100	[thread overview]
Message-ID: <e008dc9a-4a04-8183-3610-bbb3361a877c@redhat.com> (raw)
In-Reply-To: <984a87d7-0430-d777-0fe9-ce5cfea712a1@greensocs.com>

On 11/4/19 1:16 PM, Damien Hedde wrote:
> On 11/1/19 12:23 AM, Philippe Mathieu-Daudé wrote:
>> On 10/18/19 5:06 PM, Damien Hedde wrote:
>>> Adds trace events to reset procedure and when updating the parent
>>> bus of a device.
>>>
>>> Signed-off-by: Damien Hedde <damien.hedde@greensocs.com>
>>> ---
>>>    hw/core/qdev.c       | 27 ++++++++++++++++++++++++---
>>>    hw/core/trace-events |  9 +++++++++
>>>    2 files changed, 33 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
>>> index 60be2f2fef..f230063189 100644
>>> --- a/hw/core/qdev.c
>>> +++ b/hw/core/qdev.c
>>> @@ -38,6 +38,7 @@
>>>    #include "hw/boards.h"
>>>    #include "hw/sysbus.h"
>>>    #include "migration/vmstate.h"
>>> +#include "trace.h"
>>>      bool qdev_hotplug = false;
>>>    static bool qdev_hot_added = false;
>>> @@ -98,7 +99,9 @@ void qdev_set_parent_bus(DeviceState *dev, BusState
>>> *bus)
>>>        bool replugging = dev->parent_bus != NULL;
>>>          if (replugging) {
>>> -        /* Keep a reference to the device while it's not plugged into
>>> +        trace_qdev_update_parent_bus(dev, dev->parent_bus, bus);
>>
>> Nitpicking, if you respin, can you add object_get_typename(OBJECT(dev)))
>> and object_get_typename(OBJECT(bus)))?
> 
> sure. I was wondering if having some kind of qom object support to trace
> would be feasible. Because it's a bit tedious to add this each time. And
> IMO it would be more useful to have the path, but we can't reasonably
> compute it as a trace_..() arguments.

Meanwhile you can use:

   if (trace_event_get_state_backends(TRACE_QDEV_UPDATE_PARENT_BUS)) {
       ...

>>
>> With/without it:
>> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>>
>>> +        /*
>>> +         * Keep a reference to the device while it's not plugged into
>>>             * any bus, to avoid it potentially evaporating when it is
>>>             * dereffed in bus_remove_child().
>>>             */
>>> @@ -272,6 +275,18 @@ HotplugHandler
>>> *qdev_get_hotplug_handler(DeviceState *dev)
>>>        return hotplug_ctrl;
>>>    }
>>>    +static int qdev_prereset(DeviceState *dev, void *opaque)
>>> +{
>>> +    trace_qdev_reset_tree(dev, object_get_typename(OBJECT(dev)));
>>> +    return 0;
>>> +}
>>> +
>>> +static int qbus_prereset(BusState *bus, void *opaque)
>>> +{
>>> +    trace_qbus_reset_tree(bus, object_get_typename(OBJECT(bus)));
>>> +    return 0;
>>> +}
>>> +
>>>    static int qdev_reset_one(DeviceState *dev, void *opaque)
>>>    {
>>>        device_legacy_reset(dev);
>>> @@ -282,6 +297,7 @@ static int qdev_reset_one(DeviceState *dev, void
>>> *opaque)
>>>    static int qbus_reset_one(BusState *bus, void *opaque)
>>>    {
>>>        BusClass *bc = BUS_GET_CLASS(bus);
>>> +    trace_qbus_reset(bus, object_get_typename(OBJECT(bus)));
>>>        if (bc->reset) {
>>>            bc->reset(bus);
>>>        }
>>> @@ -290,7 +306,9 @@ static int qbus_reset_one(BusState *bus, void
>>> *opaque)
>>>      void qdev_reset_all(DeviceState *dev)
>>>    {
>>> -    qdev_walk_children(dev, NULL, NULL, qdev_reset_one,
>>> qbus_reset_one, NULL);
>>> +    trace_qdev_reset_all(dev, object_get_typename(OBJECT(dev)));
>>> +    qdev_walk_children(dev, qdev_prereset, qbus_prereset,
>>> +                       qdev_reset_one, qbus_reset_one, NULL);
>>>    }
>>>      void qdev_reset_all_fn(void *opaque)
>>> @@ -300,7 +318,9 @@ void qdev_reset_all_fn(void *opaque)
>>>      void qbus_reset_all(BusState *bus)
>>>    {
>>> -    qbus_walk_children(bus, NULL, NULL, qdev_reset_one,
>>> qbus_reset_one, NULL);
>>> +    trace_qbus_reset_all(bus, object_get_typename(OBJECT(bus)));
>>> +    qbus_walk_children(bus, qdev_prereset, qbus_prereset,
>>> +                       qdev_reset_one, qbus_reset_one, NULL);
>>>    }
>>>      void qbus_reset_all_fn(void *opaque)
>>> @@ -1108,6 +1128,7 @@ void device_legacy_reset(DeviceState *dev)
>>>    {
>>>        DeviceClass *klass = DEVICE_GET_CLASS(dev);
>>>    +    trace_qdev_reset(dev, object_get_typename(OBJECT(dev)));
>>>        if (klass->reset) {
>>>            klass->reset(dev);
>>>        }
>>> diff --git a/hw/core/trace-events b/hw/core/trace-events
>>> index fe47a9c8cb..1a669be0ea 100644
>>> --- a/hw/core/trace-events
>>> +++ b/hw/core/trace-events
>>> @@ -1,2 +1,11 @@
>>>    # loader.c
>>>    loader_write_rom(const char *name, uint64_t gpa, uint64_t size, bool
>>> isrom) "%s: @0x%"PRIx64" size=0x%"PRIx64" ROM=%d"
>>> +
>>> +# qdev.c
>>> +qdev_reset(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qdev_reset_all(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qdev_reset_tree(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qbus_reset(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qbus_reset_all(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qbus_reset_tree(void *obj, const char *objtype) "obj=%p(%s)"
>>> +qdev_update_parent_bus(void *obj, void *oldp, void *newp) "obj=%p
>>> old_parent=%p new_parent=%p"
>>>


  reply	other threads:[~2019-11-04 14:34 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-18 15:06 [PATCH v5 00/13] Multi-phase reset mechanism Damien Hedde
2019-10-18 15:06 ` [PATCH v5 01/13] add device_legacy_reset function to prepare for reset api change Damien Hedde
2019-10-19 17:35   ` Richard Henderson
2019-12-03 10:55   ` Cornelia Huck
2019-10-18 15:06 ` [PATCH v5 02/13] hw/core/qdev: add trace events to help with resettable transition Damien Hedde
2019-10-19 17:44   ` Richard Henderson
2019-10-31 23:23   ` Philippe Mathieu-Daudé
2019-11-04 12:16     ` Damien Hedde
2019-11-04 14:33       ` Philippe Mathieu-Daudé [this message]
2019-12-03 10:57   ` Cornelia Huck
2019-10-18 15:06 ` [PATCH v5 03/13] hw/core: create Resettable QOM interface Damien Hedde
2019-11-29 18:32   ` Peter Maydell
2019-12-02 11:07     ` Damien Hedde
2019-12-02 11:14       ` Peter Maydell
2019-12-03 11:16   ` Cornelia Huck
2019-10-18 15:06 ` [PATCH v5 04/13] hw/core: add Resettable support to BusClass and DeviceClass Damien Hedde
2019-10-19 18:49   ` Richard Henderson
2019-11-29 18:36   ` Peter Maydell
2019-12-02 11:38     ` Damien Hedde
2019-10-18 15:06 ` [PATCH v5 05/13] hw/core/resettable: add support for changing parent Damien Hedde
2019-11-29 18:38   ` Peter Maydell
2019-12-02 11:43     ` Damien Hedde
2019-10-18 15:06 ` [PATCH v5 06/13] hw/core/qdev: handle parent bus change regarding resettable Damien Hedde
2019-11-29 18:41   ` Peter Maydell
2019-12-03 11:37     ` Cornelia Huck
2019-10-18 15:06 ` [PATCH v5 07/13] hw/core/qdev: update hotplug reset " Damien Hedde
2019-11-08 15:14   ` Damien Hedde
2019-10-18 15:06 ` [PATCH v5 08/13] hw/core: deprecate old reset functions and introduce new ones Damien Hedde
2019-10-31 23:35   ` Philippe Mathieu-Daudé
2019-11-04 12:01     ` Damien Hedde
2019-11-04 15:42       ` Philippe Mathieu-Daudé
2019-11-29 18:42   ` Peter Maydell
2019-10-18 15:06 ` [PATCH v5 09/13] docs/devel/reset.txt: add doc about Resettable interface Damien Hedde
2019-11-29 19:00   ` Peter Maydell
2019-12-06 15:40     ` Damien Hedde
2019-12-06 16:21     ` Damien Hedde
2019-10-18 15:06 ` [PATCH v5 10/13] vl: replace deprecated qbus_reset_all registration Damien Hedde
2019-11-29 19:01   ` Peter Maydell
2019-10-18 15:06 ` [PATCH v5 11/13] hw/s390x/ipl: replace deprecated qdev_reset_all registration Damien Hedde
2019-10-31 23:38   ` Philippe Mathieu-Daudé
2019-11-29 19:02   ` Peter Maydell
2019-12-03 11:41   ` Cornelia Huck
2019-10-18 15:06 ` [PATCH v5 12/13] hw/gpio/bcm2835_gpio: Isolate sdbus reparenting Damien Hedde
2019-11-29 19:05   ` Peter Maydell
2019-12-02 12:27     ` Damien Hedde
2019-12-02 12:33       ` Peter Maydell
2019-12-02 13:05         ` Damien Hedde
2019-12-02 13:10           ` Peter Maydell
2019-10-18 15:06 ` [PATCH v5 13/13] hw/gpio/bcm2835_gpio: Update to resettable Damien Hedde
2019-11-29 19:02   ` Peter Maydell
2019-10-19  9:01 ` [PATCH v5 00/13] Multi-phase reset mechanism no-reply
2019-10-29 15:53 ` Damien Hedde
2019-11-08 15:26   ` Damien Hedde
2019-11-08 15:28     ` Peter Maydell
2019-11-08 15:58       ` Damien Hedde
2019-11-29 19:07 ` Peter Maydell
2019-12-03 11:44 ` Cornelia Huck

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=e008dc9a-4a04-8183-3610-bbb3361a877c@redhat.com \
    --to=philmd@redhat.com \
    --cc=berrange@redhat.com \
    --cc=cohuck@redhat.com \
    --cc=damien.hedde@greensocs.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=edgari@xilinx.com \
    --cc=ehabkost@redhat.com \
    --cc=mark.burton@greensocs.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@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.