All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christoph Schlameuss" <schlameuss@linux.ibm.com>
To: "Claudio Imbrenda" <imbrenda@linux.ibm.com>, <kvm@vger.kernel.org>
Cc: <linux-s390@vger.kernel.org>, <frankja@linux.ibm.com>,
	<borntraeger@de.ibm.com>, <david@redhat.com>,
	<willy@infradead.org>, <hca@linux.ibm.com>, <svens@linux.ibm.com>,
	<agordeev@linux.ibm.com>, <gor@linux.ibm.com>,
	<nrb@linux.ibm.com>, <nsg@linux.ibm.com>, <seanjc@google.com>,
	<seiden@linux.ibm.com>
Subject: Re: [PATCH v3 09/15] KVM: s390: move some gmap shadowing functions away from mm/gmap.c
Date: Wed, 22 Jan 2025 13:50:29 +0100	[thread overview]
Message-ID: <D78M5FNORE1Y.1SJAXHNVZS9GL@linux.ibm.com> (raw)
In-Reply-To: <20250117190938.93793-10-imbrenda@linux.ibm.com>

On Fri Jan 17, 2025 at 8:09 PM CET, Claudio Imbrenda wrote:
> Move some gmap shadowing functions from mm/gmap.c to kvm/kvm-s390.c and
> the newly created kvm/gmap-vsie.c
>
> This is a step toward removing gmap from mm.
>
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> ---
>  arch/s390/include/asm/gmap.h |   9 +-
>  arch/s390/kvm/Makefile       |   2 +-
>  arch/s390/kvm/gmap-vsie.c    | 142 +++++++++++++++++++++
>  arch/s390/kvm/gmap.h         |  20 +++
>  arch/s390/kvm/kvm-s390.c     |  62 ++++++++-
>  arch/s390/kvm/kvm-s390.h     |   2 +
>  arch/s390/kvm/vsie.c         |   2 +
>  arch/s390/mm/gmap.c          | 238 +++++------------------------------
>  8 files changed, 259 insertions(+), 218 deletions(-)
>  create mode 100644 arch/s390/kvm/gmap-vsie.c
>

[...]

> diff --git a/arch/s390/kvm/gmap-vsie.c b/arch/s390/kvm/gmap-vsie.c
> new file mode 100644
> index 000000000000..90427f114995
> --- /dev/null
> +++ b/arch/s390/kvm/gmap-vsie.c
> @@ -0,0 +1,142 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * Guest memory management for KVM/s390 nested VMs.
> + *
> + * Copyright IBM Corp. 2008, 2020, 2024
> + *
> + *    Author(s): Claudio Imbrenda <imbrenda@linux.ibm.com>
> + *               Martin Schwidefsky <schwidefsky@de.ibm.com>
> + *               David Hildenbrand <david@redhat.com>
> + *               Janosch Frank <frankja@linux.vnet.ibm.com>
> + */
> +
> +#include <linux/compiler.h>
> +#include <linux/kvm.h>
> +#include <linux/kvm_host.h>
> +#include <linux/pgtable.h>
> +#include <linux/pagemap.h>
> +#include <linux/mman.h>
> +
> +#include <asm/lowcore.h>
> +#include <asm/gmap.h>
> +#include <asm/uv.h>
> +
> +#include "kvm-s390.h"
> +#include "gmap.h"
> +
> +/**
> + * gmap_find_shadow - find a specific asce in the list of shadow tables
> + * @parent: pointer to the parent gmap
> + * @asce: ASCE for which the shadow table is created
> + * @edat_level: edat level to be used for the shadow translation
> + *
> + * Returns the pointer to a gmap if a shadow table with the given asce is
> + * already available, ERR_PTR(-EAGAIN) if another one is just being created,
> + * otherwise NULL
> + */
> +static struct gmap *gmap_find_shadow(struct gmap *parent, unsigned long asce,
> +				     int edat_level)
> +{
> +	struct gmap *sg;
> +
> +	list_for_each_entry(sg, &parent->children, list) {
> +		if (sg->orig_asce != asce || sg->edat_level != edat_level ||
> +		    sg->removed)

This is just:

if !gmap_shadow_valid(sg, asce, edat_level)

> +			continue;
> +		if (!sg->initialized)
> +			return ERR_PTR(-EAGAIN);
> +		refcount_inc(&sg->ref_count);
> +		return sg;
> +	}
> +	return NULL;
> +}

[...]

> diff --git a/arch/s390/kvm/gmap.h b/arch/s390/kvm/gmap.h
> index f2b52ce29be3..978f541059f0 100644
> --- a/arch/s390/kvm/gmap.h
> +++ b/arch/s390/kvm/gmap.h
> @@ -13,5 +13,25 @@
>  int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb);
>  int gmap_convert_to_secure(struct gmap *gmap, unsigned long gaddr);
>  int gmap_destroy_page(struct gmap *gmap, unsigned long gaddr);
> +struct gmap *gmap_shadow(struct gmap *parent, unsigned long asce, int edat_level);
> +
> +/**
> + * gmap_shadow_valid - check if a shadow guest address space matches the
> + *                     given properties and is still valid
> + * @sg: pointer to the shadow guest address space structure
> + * @asce: ASCE for which the shadow table is requested
> + * @edat_level: edat level to be used for the shadow translation
> + *
> + * Returns 1 if the gmap shadow is still valid and matches the given
> + * properties, the caller can continue using it. Returns 0 otherwise, the
> + * caller has to request a new shadow gmap in this case.
> + *
> + */
> +static inline int gmap_shadow_valid(struct gmap *sg, unsigned long asce, int edat_level)
> +{
> +	if (sg->removed)
> +		return 0;
> +	return sg->orig_asce == asce && sg->edat_level == edat_level;

This can simply be a single return:

return !sg->removed && sg->orig_asce == asce && sg->edat_level == edat_level;

> +}
>  
>  #endif
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index b626c87480ed..482f0968abfa 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
> @@ -4509,6 +4509,63 @@ static bool ibs_enabled(struct kvm_vcpu *vcpu)
>  	return kvm_s390_test_cpuflags(vcpu, CPUSTAT_IBS);
>  }

[...]


  parent reply	other threads:[~2025-01-22 12:50 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-17 19:09 [PATCH v3 00/15] KVM: s390: Stop using page->index and other things Claudio Imbrenda
2025-01-17 19:09 ` [PATCH v3 01/15] KVM: Do not restrict the size of KVM-internal memory regions Claudio Imbrenda
2025-01-20 12:06   ` David Hildenbrand
2025-01-17 19:09 ` [PATCH v3 02/15] KVM: s390: wrapper for KVM_BUG Claudio Imbrenda
2025-01-20 12:07   ` David Hildenbrand
2025-01-17 19:09 ` [PATCH v3 03/15] KVM: s390: fake memslot for ucontrol VMs Claudio Imbrenda
2025-01-20 12:09   ` David Hildenbrand
2025-01-20 15:27   ` Christoph Schlameuss
2025-01-21 16:33     ` Claudio Imbrenda
2025-01-21 12:23   ` Janosch Frank
2025-01-17 19:09 ` [PATCH v3 04/15] KVM: s390: selftests: fix ucontrol memory region test Claudio Imbrenda
2025-01-20 12:12   ` David Hildenbrand
2025-01-20 12:25     ` Claudio Imbrenda
2025-01-20 15:40       ` Christoph Schlameuss
2025-01-17 19:09 ` [PATCH v3 05/15] KVM: s390: move pv gmap functions into kvm Claudio Imbrenda
2025-01-21 10:55   ` Christoph Schlameuss
2025-01-21 12:54   ` Janosch Frank
2025-01-17 19:09 ` [PATCH v3 06/15] KVM: s390: use __kvm_faultin_pfn() Claudio Imbrenda
2025-01-21 15:11   ` Christoph Schlameuss
2025-01-17 19:09 ` [PATCH v3 07/15] KVM: s390: get rid of gmap_fault() Claudio Imbrenda
2025-01-22  9:44   ` Christoph Schlameuss
2025-01-17 19:09 ` [PATCH v3 08/15] KVM: s390: get rid of gmap_translate() Claudio Imbrenda
2025-01-22  9:59   ` Christoph Schlameuss
2025-01-17 19:09 ` [PATCH v3 09/15] KVM: s390: move some gmap shadowing functions away from mm/gmap.c Claudio Imbrenda
2025-01-21 13:30   ` Janosch Frank
2025-01-22 12:50   ` Christoph Schlameuss [this message]
2025-01-22 15:05     ` Janosch Frank
2025-01-17 19:09 ` [PATCH v3 10/15] KVM: s390: stop using page->index for non-shadow gmaps Claudio Imbrenda
2025-01-21 13:41   ` Janosch Frank
2025-01-17 19:09 ` [PATCH v3 11/15] KVM: s390: stop using lists to keep track of used dat tables Claudio Imbrenda
2025-01-20 15:10   ` Steffen Eiden
2025-01-20 15:29     ` Claudio Imbrenda
2025-01-21 14:09   ` Janosch Frank
2025-01-22 16:13   ` Christoph Schlameuss
2025-01-22 16:19     ` Claudio Imbrenda
2025-01-17 19:09 ` [PATCH v3 12/15] KVM: s390: move gmap_shadow_pgt_lookup() into kvm Claudio Imbrenda
2025-01-21 14:23   ` Janosch Frank
2025-01-17 19:09 ` [PATCH v3 13/15] KVM: s390: remove useless page->index usage Claudio Imbrenda
2025-01-17 19:09 ` [PATCH v3 14/15] KVM: s390: move PGSTE softbits Claudio Imbrenda
2025-01-17 19:09 ` [PATCH v3 15/15] KVM: s390: remove the last user of page->index Claudio Imbrenda
2025-01-21 14:44   ` Janosch Frank
2025-01-21 14:48     ` Claudio Imbrenda

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=D78M5FNORE1Y.1SJAXHNVZS9GL@linux.ibm.com \
    --to=schlameuss@linux.ibm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=nrb@linux.ibm.com \
    --cc=nsg@linux.ibm.com \
    --cc=seanjc@google.com \
    --cc=seiden@linux.ibm.com \
    --cc=svens@linux.ibm.com \
    --cc=willy@infradead.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.