[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