All of lore.kernel.org
 help / color / mirror / Atom feed
From: Janosch Frank <frankja@linux.ibm.com>
To: Claudio Imbrenda <imbrenda@linux.ibm.com>, kvm@vger.kernel.org
Cc: linux-s390@vger.kernel.org, borntraeger@de.ibm.com,
	nsg@linux.ibm.com, nrb@linux.ibm.com, seiden@linux.ibm.com,
	schlameuss@linux.ibm.com, hca@linux.ibm.com, svens@linux.ibm.com,
	agordeev@linux.ibm.com, david@redhat.com,
	gerald.schaefer@linux.ibm.com
Subject: Re: [PATCH v2 09/20] KVM: s390: KVM page table management functions: clear and replace
Date: Thu, 11 Sep 2025 14:57:40 +0200	[thread overview]
Message-ID: <91f044a5-803f-4672-960b-cd83f725af44@linux.ibm.com> (raw)
In-Reply-To: <20250910180746.125776-10-imbrenda@linux.ibm.com>

On 9/10/25 8:07 PM, Claudio Imbrenda wrote:
> Add page table management functions to be used for KVM guest (gmap)
> page tables.
> 
> This patch adds functions to clear, replace or exchange DAT table
> entries.
> 
> Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
> ---
>   arch/s390/kvm/dat.c | 120 ++++++++++++++++++++++++++++++++++++++++++++
>   arch/s390/kvm/dat.h |  40 +++++++++++++++
>   2 files changed, 160 insertions(+)
> 
> diff --git a/arch/s390/kvm/dat.c b/arch/s390/kvm/dat.c
> index 326be78adcda..f26e3579bd77 100644
> --- a/arch/s390/kvm/dat.c
> +++ b/arch/s390/kvm/dat.c
> @@ -89,3 +89,123 @@ void dat_free_level(struct crst_table *table, bool owns_ptes)
>   	}
>   	dat_free_crst(table);
>   }
> +
> +/**
> + * dat_crstep_xchg - exchange a guest CRST with another
> + * @crstep: pointer to the CRST entry
> + * @new: replacement entry
> + * @gfn: the affected guest address
> + * @asce: the ASCE of the address space
> + *
> + * This function is assumed to be called with the guest_table_lock
> + * held.
> + */
> +void dat_crstep_xchg(union crste *crstep, union crste new, gfn_t gfn, union asce asce)
> +{
> +	if (crstep->h.i) {
> +		WRITE_ONCE(*crstep, new);
> +		return;
> +	} else if (cpu_has_edat2()) {
> +		crdte_crste(crstep, *crstep, new, gfn, asce);
> +		return;
> +	}
> +
> +	if (machine_has_tlb_guest())
> +		idte_crste(crstep, gfn, IDTE_GUEST_ASCE, asce, IDTE_GLOBAL);
> +	else if (cpu_has_idte())
> +		idte_crste(crstep, gfn, 0, NULL_ASCE, IDTE_GLOBAL);
> +	else
> +		csp_invalidate_crste(crstep);

I'm wondering if we can make stfle 3 (DTE) a requirement for KVM or 
Linux as a whole since it was introduced with z990 AFAIK.

> +	WRITE_ONCE(*crstep, new);
> +}
> +
> +/**
> + * dat_crstep_xchg_atomic - exchange a gmap pmd with another
> + * @crstep: pointer to the crste entry
> + * @old: expected old value
> + * @new: replacement entry
> + * @gfn: the affected guest address
> + * @asce: the asce of the address space
> + *
> + * This function should only be called on invalid crstes, or on crstes with
> + * FC = 1, as that guarantees the presence of CSPG.
> + *
> + * Return: true if the exchange was successful.
> + */
> +bool dat_crstep_xchg_atomic(union crste *crstep, union crste old, union crste new, gfn_t gfn,
> +			    union asce asce)
> +{
> +	if (old.h.i)
> +		return arch_try_cmpxchg((long *)crstep, &old.val, new.val);
> +	if (cpu_has_edat2())
> +		return crdte_crste(crstep, old, new, gfn, asce);
> +	if (cpu_has_idte())
> +		return cspg_crste(crstep, old, new);
> +
> +	WARN_ONCE(1, "Machine does not have CSPG and DAT table was not invalid.");
> +	return false;
> +}

  reply	other threads:[~2025-09-11 12:57 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-10 18:07 [PATCH v2 00/20] KVM: s390: gmap rewrite, the real deal Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 01/20] KVM: s390: add P bit in table entry bitfields, move union vaddress Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 02/20] s390: Move sske_frame() to a header Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 03/20] KVM: s390: Add gmap_helper_set_unused() Claudio Imbrenda
2025-09-11  8:38   ` Nico Boehr
2025-09-12  9:17   ` Nina Schoetterl-Glausch
2025-09-15 11:33     ` Claudio Imbrenda
2025-10-27 18:00       ` Nina Schoetterl-Glausch
2025-09-10 18:07 ` [PATCH v2 04/20] KVM: s390: Enable KVM_GENERIC_MMU_NOTIFIER Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 05/20] KVM: s390: Add helper functions for fault handling Claudio Imbrenda
2025-09-12 17:56   ` Nina Schoetterl-Glausch
2025-09-15 11:49     ` Claudio Imbrenda
2025-09-18 14:19   ` Alexander Gordeev
2025-09-18 14:46     ` Claudio Imbrenda
2025-09-18 14:41   ` Alexander Gordeev
2025-09-18 15:10     ` Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 06/20] KVM: s390: Rename some functions in gaccess.c Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 07/20] KVM: s390: KVM-specific bitfields and helper functions Claudio Imbrenda
2025-09-17 12:18   ` Heiko Carstens
2025-09-17 12:51     ` Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 08/20] KVM: s390: KVM page table management functions: allocation Claudio Imbrenda
2025-09-11  8:22   ` Janosch Frank
2025-09-11  8:43     ` Claudio Imbrenda
2025-09-16 16:26   ` Heiko Carstens
2025-09-16 16:47     ` Claudio Imbrenda
2025-09-16 17:01       ` Christian Borntraeger
2025-09-16 17:05         ` Claudio Imbrenda
2025-09-16 17:06           ` Christian Borntraeger
2025-09-16 17:36             ` Heiko Carstens
2025-09-17  7:27               ` Heiko Carstens
2025-09-17 11:25                 ` Claudio Imbrenda
2025-09-17 12:30                   ` Heiko Carstens
2025-09-17 13:11                     ` Claudio Imbrenda
2025-09-17 13:26                       ` Christian Borntraeger
2025-09-17 14:00                         ` Claudio Imbrenda
2025-09-17 14:05                           ` Christian Borntraeger
2025-09-17 14:11                             ` Claudio Imbrenda
2025-09-17 17:08                             ` Claudio Imbrenda
2025-09-17 13:31                       ` Heiko Carstens
2025-09-17 14:00                         ` Claudio Imbrenda
2025-09-17 12:12               ` Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 09/20] KVM: s390: KVM page table management functions: clear and replace Claudio Imbrenda
2025-09-11 12:57   ` Janosch Frank [this message]
2025-09-11 13:19     ` Claudio Imbrenda
2025-09-11 13:27       ` Janosch Frank
2025-09-16 15:56         ` Heiko Carstens
2025-09-16 16:47   ` Heiko Carstens
2025-09-16 17:04     ` Claudio Imbrenda
2025-09-16 17:27       ` Heiko Carstens
2025-09-10 18:07 ` [PATCH v2 10/20] KVM: s390: KVM page table management functions: walks Claudio Imbrenda
2025-09-11 12:56   ` Janosch Frank
2025-09-11 13:14     ` Claudio Imbrenda
2025-09-12  5:47       ` Gerd Bayer
2025-09-16 16:22   ` Heiko Carstens
2025-09-16 16:48     ` Claudio Imbrenda
2025-09-16 17:24       ` Heiko Carstens
2025-09-17 11:14         ` Claudio Imbrenda
2025-09-17 12:55   ` Heiko Carstens
2025-09-17 13:13     ` Claudio Imbrenda
2025-09-17 13:24       ` Heiko Carstens
2025-09-17 14:01         ` Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 11/20] KVM: s390: KVM page table management functions: storage keys Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 12/20] KVM: s390: KVM page table management functions: lifecycle management Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 13/20] KVM: s390: KVM page table management functions: CMMA Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 14/20] KVM: s390: New gmap code Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 15/20] KVM: s390: Stop using CONFIG_PGSTE Claudio Imbrenda
2025-09-16  7:45   ` Steffen Eiden
2025-09-10 18:07 ` [PATCH v2 16/20] KVM: s390: Switch to new gmap Claudio Imbrenda
2025-09-17 13:20   ` Heiko Carstens
2025-09-10 18:07 ` [PATCH v2 17/20] KVM: s390: Remove gmap from s390/mm Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 18/20] KVM: S390: Remove PGSTE code from linux/s390 mm Claudio Imbrenda
2025-09-16  7:30   ` Steffen Eiden
2025-09-16  9:24     ` Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 19/20] KVM: s390: Enable 1M pages for gmap Claudio Imbrenda
2025-09-10 18:07 ` [PATCH v2 20/20] KVM: s390: Storage key manipulation IOCTL 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=91f044a5-803f-4672-960b-cd83f725af44@linux.ibm.com \
    --to=frankja@linux.ibm.com \
    --cc=agordeev@linux.ibm.com \
    --cc=borntraeger@de.ibm.com \
    --cc=david@redhat.com \
    --cc=gerald.schaefer@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=schlameuss@linux.ibm.com \
    --cc=seiden@linux.ibm.com \
    --cc=svens@linux.ibm.com \
    /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.