Re: [PATCH v2 09/15] KVM: s390: move some gmap shadowing functions away from mm/gmap.c

Janosch Frank
2025-01-17T16:41:45Z

On 1/16/25 12:33 PM, 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>

[...]

> -/**
> - * gmap_mprotect_notify - change access rights for a range of ptes and
> - * call the notifier if any pte changes again
> - * @gmap: pointer to guest mapping meta data structure
> - * @gaddr: virtual address in the guest address space
> - * @len: size of area
> - * @prot: indicates access rights: PROT_NONE, PROT_READ or PROT_WRITE
> - *
> - * Returns 0 if for each page in the given range a gmap mapping exists,
> - * the new access rights could be set and the notifier could be armed.
> - * If the gmap mapping is missing for one or more pages -EFAULT is
> - * returned. If no memory could be allocated -ENOMEM is returned.
> - * This function establishes missing page table entries.
> - */
> -int gmap_mprotect_notify(struct gmap *gmap, unsigned long gaddr,
> - unsigned long len, int prot)
> -{
> - int rc;
> + if (!pmd_leaf(*pmdp)) {
> + rc = gmap_protect_pte(gmap, gaddr, pmdp, prot, bits);
> + } else {
> + rc = gmap_protect_pmd(gmap, gaddr, pmdp, prot, bits);
> + if (!rc)
> + rc = 1;

Instead of doing this, could you return PAGE_SIZE or HPAGE_SIZE if !rc?
That would also get rid of the ternary in the ALIGN() in
__kvm_s390_mprotect_many() which is also a thorn in my side.