All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: Greg Kurz <groug@kaod.org>, qemu-devel@nongnu.org
Cc: Daniel Henrique Barboza <danielhb@linux.ibm.com>,
	qemu-ppc@nongnu.org, David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH 3/6] spapr: Introduce spapr_drc_reset_all()
Date: Mon, 21 Dec 2020 17:35:47 -0300	[thread overview]
Message-ID: <09c16282-941c-a9d1-3fef-1cedf5e08ecd@gmail.com> (raw)
In-Reply-To: <20201218103400.689660-4-groug@kaod.org>



On 12/18/20 7:33 AM, Greg Kurz wrote:
> No need to expose the way DRCs are traversed outside of spapr_drc.c.
> 
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---

Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>

>   include/hw/ppc/spapr_drc.h |  6 ++++++
>   hw/ppc/spapr_drc.c         | 31 +++++++++++++++++++++++++++++
>   hw/ppc/spapr_hcall.c       | 40 ++++++--------------------------------
>   3 files changed, 43 insertions(+), 34 deletions(-)
> 
> diff --git a/include/hw/ppc/spapr_drc.h b/include/hw/ppc/spapr_drc.h
> index 5d80019f82e2..8982927d5c24 100644
> --- a/include/hw/ppc/spapr_drc.h
> +++ b/include/hw/ppc/spapr_drc.h
> @@ -245,6 +245,12 @@ int spapr_dt_drc(void *fdt, int offset, Object *owner, uint32_t drc_type_mask);
>   void spapr_drc_attach(SpaprDrc *drc, DeviceState *d);
>   void spapr_drc_detach(SpaprDrc *drc);
>   
> +/*
> + * Reset all DRCs, causing pending hot-plug/unplug requests to complete.
> + * Safely handles potential DRC removal (eg. PHBs or PCI bridges).
> + */
> +void spapr_drc_reset_all(struct SpaprMachineState *spapr);
> +
>   static inline bool spapr_drc_unplug_requested(SpaprDrc *drc)
>   {
>       return drc->unplug_requested;
> diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
> index 5b5e2ac58a7e..a4d2608017c5 100644
> --- a/hw/ppc/spapr_drc.c
> +++ b/hw/ppc/spapr_drc.c
> @@ -949,6 +949,37 @@ out:
>       return ret;
>   }
>   
> +void spapr_drc_reset_all(SpaprMachineState *spapr)
> +{
> +    Object *drc_container;
> +    ObjectProperty *prop;
> +    ObjectPropertyIterator iter;
> +
> +    drc_container = container_get(object_get_root(), DRC_CONTAINER_PATH);
> +restart:
> +    object_property_iter_init(&iter, drc_container);
> +    while ((prop = object_property_iter_next(&iter))) {
> +        SpaprDrc *drc;
> +
> +        if (!strstart(prop->type, "link<", NULL)) {
> +            continue;
> +        }
> +        drc = SPAPR_DR_CONNECTOR(object_property_get_link(drc_container,
> +                                                          prop->name,
> +                                                          &error_abort));
> +
> +        /*
> +         * This will complete any pending plug/unplug requests.
> +         * In case of a unplugged PHB or PCI bridge, this will
> +         * cause some DRCs to be destroyed and thus potentially
> +         * invalidate the iterator.
> +         */
> +        if (spapr_drc_reset(drc)) {
> +            goto restart;
> +        }
> +    }
> +}
> +
>   /*
>    * RTAS calls
>    */
> diff --git a/hw/ppc/spapr_hcall.c b/hw/ppc/spapr_hcall.c
> index aa22830ac4bd..e5dfc1ba7acc 100644
> --- a/hw/ppc/spapr_hcall.c
> +++ b/hw/ppc/spapr_hcall.c
> @@ -1632,39 +1632,6 @@ static uint32_t cas_check_pvr(PowerPCCPU *cpu, uint32_t max_compat,
>       return best_compat;
>   }
>   
> -static void spapr_handle_transient_dev_before_cas(SpaprMachineState *spapr)
> -{
> -    Object *drc_container;
> -    ObjectProperty *prop;
> -    ObjectPropertyIterator iter;
> -
> -    drc_container = container_get(object_get_root(), "/dr-connector");
> -restart:
> -    object_property_iter_init(&iter, drc_container);
> -    while ((prop = object_property_iter_next(&iter))) {
> -        SpaprDrc *drc;
> -
> -        if (!strstart(prop->type, "link<", NULL)) {
> -            continue;
> -        }
> -        drc = SPAPR_DR_CONNECTOR(object_property_get_link(drc_container,
> -                                                          prop->name,
> -                                                          &error_abort));
> -
> -        /*
> -         * This will complete any pending plug/unplug requests.
> -         * In case of a unplugged PHB or PCI bridge, this will
> -         * cause some DRCs to be destroyed and thus potentially
> -         * invalidate the iterator.
> -         */
> -        if (spapr_drc_reset(drc)) {
> -            goto restart;
> -        }
> -    }
> -
> -    spapr_clear_pending_hotplug_events(spapr);
> -}
> -
>   target_ulong do_client_architecture_support(PowerPCCPU *cpu,
>                                               SpaprMachineState *spapr,
>                                               target_ulong vec,
> @@ -1822,7 +1789,12 @@ target_ulong do_client_architecture_support(PowerPCCPU *cpu,
>   
>       spapr_irq_update_active_intc(spapr);
>   
> -    spapr_handle_transient_dev_before_cas(spapr);
> +    /*
> +     * Process all pending hot-plug/unplug requests now. An updated full
> +     * rendered FDT will be returned to the guest.
> +     */
> +    spapr_drc_reset_all(spapr);
> +    spapr_clear_pending_hotplug_events(spapr);
>   
>       /*
>        * If spapr_machine_reset() did not set up a HPT but one is necessary
> 


  reply	other threads:[~2020-12-21 20:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-18 10:33 [PATCH 0/6] spapr: Fix visibility and traversal of DR connectors Greg Kurz
2020-12-18 10:33 ` [PATCH 1/6] spapr: Call spapr_drc_reset() for all DRCs at CAS Greg Kurz
2020-12-21 18:24   ` Daniel Henrique Barboza
2020-12-28  7:20   ` David Gibson
2020-12-18 10:33 ` [PATCH 2/6] spapr: Fix reset of transient DR connectors Greg Kurz
2020-12-21 20:34   ` Daniel Henrique Barboza
2020-12-28  7:24   ` David Gibson
2020-12-18 10:33 ` [PATCH 3/6] spapr: Introduce spapr_drc_reset_all() Greg Kurz
2020-12-21 20:35   ` Daniel Henrique Barboza [this message]
2020-12-28  7:26   ` David Gibson
2020-12-18 10:33 ` [PATCH 4/6] spapr: Use spapr_drc_reset_all() at machine reset Greg Kurz
2020-12-21 20:36   ` Daniel Henrique Barboza
2020-12-28  7:29   ` David Gibson
2020-12-18 10:33 ` [PATCH 5/6] spapr: Add drc_ prefix to the DRC realize and unrealize functions Greg Kurz
2020-12-21 20:37   ` Daniel Henrique Barboza
2020-12-28  7:31   ` David Gibson
2020-12-18 10:34 ` [PATCH 6/6] spapr: Model DR connectors as simple objects Greg Kurz
2020-12-21 20:45   ` Daniel Henrique Barboza
2020-12-28  8:28   ` David Gibson
2021-01-06 18:15     ` Greg Kurz
2021-02-08  6:30       ` David Gibson
2020-12-22 10:14 ` [PATCH 0/6] spapr: Fix visibility and traversal of DR connectors Daniel Henrique Barboza

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=09c16282-941c-a9d1-3fef-1cedf5e08ecd@gmail.com \
    --to=danielhb413@gmail.com \
    --cc=danielhb@linux.ibm.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=groug@kaod.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@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.