qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 5/6] e1000: Choose which set of props to migr


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH v2 5/6] e1000: Choose which set of props to migrate
Date: Wed, 4 Apr 2018 17:58:23 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

On 28/03/2018 18:36, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
> 
> When we're using the subsection we migrate both
> the 'props' and 'tso_props' data; when we're not using
> the subsection (to migrate to 2.11 or old machine types) we've
> got to choose what to migrate in the main structure.
> 
> If we're using the subsection migrate 'props' in the main structure.
> If we're not using the subsection then migrate the last one
> that changed, which gives behaviour similar to the old behaviour.
> 
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
>  hw/net/e1000.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/net/e1000.c b/hw/net/e1000.c
> index 4e606d4b2a..13a9494a8d 100644
> --- a/hw/net/e1000.c
> +++ b/hw/net/e1000.c
> @@ -130,6 +130,7 @@ typedef struct E1000State_st {
>  #define E1000_FLAG_TSO (1 << E1000_FLAG_TSO_BIT)
>      uint32_t compat_flags;
>      bool received_tx_tso;
> +    bool use_tso_for_migration;
>      e1000x_txd_props mig_props;
>  } E1000State;
>  
> @@ -622,9 +623,11 @@ process_tx_desc(E1000State *s, struct e1000_tx_desc *dp)
>      if (dtype == E1000_TXD_CMD_DEXT) {    /* context descriptor */
>          if (le32_to_cpu(xp->cmd_and_length) & E1000_TXD_CMD_TSE) {
>              e1000x_read_tx_ctx_descr(xp, &tp->tso_props);
> +            s->use_tso_for_migration = 1;
>              tp->tso_frames = 0;
>          } else {
>              e1000x_read_tx_ctx_descr(xp, &tp->props);
> +            s->use_tso_for_migration = 0;
>          }
>          return;
>      } else if (dtype == (E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D)) {
> @@ -1366,7 +1369,20 @@ static int e1000_pre_save(void *opaque)
>          s->phy_reg[PHY_STATUS] |= MII_SR_AUTONEG_COMPLETE;
>      }
>  
> -    s->mig_props = s->tx.props;
> +    /* Decide which set of props to migrate in the main structure */
> +    if (chkflag(TSO) || !s->use_tso_for_migration) {
> +        /* Either we're migrating with the extra subsection, in which
> +         * case the mig_props is always 'props' OR
> +         * we've not got the subsection, but 'props' was the last
> +         * updated.
> +         */
> +        s->mig_props = s->tx.props;
> +    } else {
> +        /* We're not using the subsection, and 'tso_props' was
> +         * the last updated.
> +         */
> +        s->mig_props = s->tx.tso_props;
> +    }
>      return 0;
>  }

Looks good, thanks!

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]