qemu-s390x
[Top][All Lists]
Advanced

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

Re: [RFC PATCH] s390: kvm: reduce frequency of CPU syncs of diag318 info


From: Collin Walling
Subject: Re: [RFC PATCH] s390: kvm: reduce frequency of CPU syncs of diag318 info
Date: Mon, 22 Nov 2021 17:43:06 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.1.0

On 11/22/21 17:33, Collin Walling wrote:
> DIAGNOSE 0318 is invoked only once during IPL. As such, the
> diag318 info will only change once initially and during resets.
> Let's only sync the register to convey the info to KVM if and
> only if the diag318 info has changed. Only set the dirty bit
> flag for diag318 whenever it must be updated.
> 
> The migration handler will invoke the set_diag318 helper on
> post_load to ensure the info is set on the destination machine.
> 
> Signed-off-by: Collin Walling <walling@linux.ibm.com>

This is a long-overdue response to this thread:
https://www.spinics.net/lists/kvm/msg258071.html

> ---
>  target/s390x/kvm/kvm.c |  5 -----
>  target/s390x/machine.c | 14 ++++++++++++++
>  2 files changed, 14 insertions(+), 5 deletions(-)
> 
> diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c
> index 6acf14d5ec..6a141399f7 100644
> --- a/target/s390x/kvm/kvm.c
> +++ b/target/s390x/kvm/kvm.c
> @@ -599,11 +599,6 @@ int kvm_arch_put_registers(CPUState *cs, int level)
>          cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_ETOKEN;
>      }
>  
> -    if (can_sync_regs(cs, KVM_SYNC_DIAG318)) {
> -        cs->kvm_run->s.regs.diag318 = env->diag318_info;
> -        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_DIAG318;
> -    }
> -
>      /* Finally the prefix */
>      if (can_sync_regs(cs, KVM_SYNC_PREFIX)) {
>          cs->kvm_run->s.regs.prefix = env->psa;
> diff --git a/target/s390x/machine.c b/target/s390x/machine.c
> index 37a076858c..a5d113ce3a 100644
> --- a/target/s390x/machine.c
> +++ b/target/s390x/machine.c
> @@ -234,6 +234,19 @@ const VMStateDescription vmstate_etoken = {
>      }
>  };
>  
> +static int diag318_post_load(void *opaque, int version_id)
> +{
> +    S390CPU *cpu = opaque;
> +    CPUState *cs = CPU(cpu);
> +    CPUS390XState *env = &S390_CPU(cs)->env;
> +
> +    if (kvm_enabled()) {
> +        kvm_s390_set_diag318(cs, env->diag318_info);
> +    }
> +
> +    return 0;
> +}
> +
>  static bool diag318_needed(void *opaque)
>  {
>      return s390_has_feat(S390_FEAT_DIAG_318);
> @@ -243,6 +256,7 @@ const VMStateDescription vmstate_diag318 = {
>      .name = "cpu/diag318",
>      .version_id = 1,
>      .minimum_version_id = 1,
> +    .post_load = diag318_post_load,
>      .needed = diag318_needed,
>      .fields = (VMStateField[]) {
>          VMSTATE_UINT64(env.diag318_info, S390CPU),
> 


-- 
Regards,
Collin

Stay safe and stay healthy



reply via email to

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