[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH 3/6] spapr: Split DRC release from DRC detach
From: |
Greg Kurz |
Subject: |
Re: [Qemu-ppc] [PATCH 3/6] spapr: Split DRC release from DRC detach |
Date: |
Mon, 19 Jun 2017 12:14:47 +0200 |
On Thu, 8 Jun 2017 15:09:27 +1000
David Gibson <address@hidden> wrote:
> spapr_drc_detach() is called when qemu generic code requests a device be
> unplugged. It makes a number of tests, which could well delay further
> action until later, before actually detach the device from the DRC.
>
> This splits out the part which actually removes the device from the DRC
> into spapr_drc_release(). This will be useful for further cleanups.
>
> Signed-off-by: David Gibson <address@hidden>
> ---
Reviewed-by: Greg Kurz <address@hidden>
> hw/ppc/spapr_drc.c | 54
> ++++++++++++++++++++++++++++++------------------------
> 1 file changed, 30 insertions(+), 24 deletions(-)
>
> diff --git a/hw/ppc/spapr_drc.c b/hw/ppc/spapr_drc.c
> index afd68f4..dc4ac77 100644
> --- a/hw/ppc/spapr_drc.c
> +++ b/hw/ppc/spapr_drc.c
> @@ -326,31 +326,9 @@ void spapr_drc_attach(sPAPRDRConnector *drc, DeviceState
> *d, void *fdt,
> NULL, 0, NULL);
> }
>
> -void spapr_drc_detach(sPAPRDRConnector *drc, DeviceState *d, Error **errp)
> -{
> - trace_spapr_drc_detach(spapr_drc_index(drc));
> -
> - if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
> - trace_spapr_drc_awaiting_isolated(spapr_drc_index(drc));
> - drc->awaiting_release = true;
> - return;
> - }
> -
> - if (spapr_drc_type(drc) != SPAPR_DR_CONNECTOR_TYPE_PCI &&
> - drc->allocation_state != SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
> - trace_spapr_drc_awaiting_unusable(spapr_drc_index(drc));
> - drc->awaiting_release = true;
> - return;
> - }
> -
> - if (drc->awaiting_allocation) {
> - if (!drc->awaiting_allocation_skippable) {
> - drc->awaiting_release = true;
> - trace_spapr_drc_awaiting_allocation(spapr_drc_index(drc));
> - return;
> - }
> - }
>
> +static void spapr_drc_release(sPAPRDRConnector *drc)
> +{
> drc->dr_indicator = SPAPR_DR_INDICATOR_INACTIVE;
>
> /* Calling release callbacks based on spapr_drc_type(drc). */
> @@ -379,6 +357,34 @@ void spapr_drc_detach(sPAPRDRConnector *drc, DeviceState
> *d, Error **errp)
> drc->dev = NULL;
> }
>
> +void spapr_drc_detach(sPAPRDRConnector *drc, DeviceState *d, Error **errp)
> +{
> + trace_spapr_drc_detach(spapr_drc_index(drc));
> +
> + if (drc->isolation_state != SPAPR_DR_ISOLATION_STATE_ISOLATED) {
> + trace_spapr_drc_awaiting_isolated(spapr_drc_index(drc));
> + drc->awaiting_release = true;
> + return;
> + }
> +
> + if (spapr_drc_type(drc) != SPAPR_DR_CONNECTOR_TYPE_PCI &&
> + drc->allocation_state != SPAPR_DR_ALLOCATION_STATE_UNUSABLE) {
> + trace_spapr_drc_awaiting_unusable(spapr_drc_index(drc));
> + drc->awaiting_release = true;
> + return;
> + }
> +
> + if (drc->awaiting_allocation) {
> + if (!drc->awaiting_allocation_skippable) {
> + drc->awaiting_release = true;
> + trace_spapr_drc_awaiting_allocation(spapr_drc_index(drc));
> + return;
> + }
> + }
> +
> + spapr_drc_release(drc);
> +}
> +
> static bool release_pending(sPAPRDRConnector *drc)
> {
> return drc->awaiting_release;
pgpv2FJtCnAWg.pgp
Description: OpenPGP digital signature
- [Qemu-ppc] [PATCH 0/6] spapr: DRC cleanups (part IV), David Gibson, 2017/06/08
- [Qemu-ppc] [PATCH 2/6] spapr: Eliminate DRC 'signalled' state variable, David Gibson, 2017/06/08
- [Qemu-ppc] [PATCH 3/6] spapr: Split DRC release from DRC detach, David Gibson, 2017/06/08
- Re: [Qemu-ppc] [PATCH 3/6] spapr: Split DRC release from DRC detach,
Greg Kurz <=
- [Qemu-ppc] [PATCH 4/6] spapr: Make DRC reset force DRC into known state, David Gibson, 2017/06/08
- [Qemu-ppc] [PATCH 5/6] spapr: Clean up DRC set_allocation_state path, David Gibson, 2017/06/08
- [Qemu-ppc] [PATCH 1/6] spapr: Start hotplugged PCI devices in ISOLATED state, David Gibson, 2017/06/08
- [Qemu-ppc] [PATCH 6/6] spapr: Clean up DRC set_isolation_state() path, David Gibson, 2017/06/08