I'd still vote for turning this into a "KVM: s390x: " patch or splitting the gmap parts off. > 8. Other capabilities. > ---------------------- > > diff --git a/arch/s390/include/asm/mmu.h b/arch/s390/include/asm/mmu.h > index f5ff9dbad8ac..652cd658e242 100644 > --- a/arch/s390/include/asm/mmu.h > +++ b/arch/s390/include/asm/mmu.h > @@ -24,6 +24,8 @@ typedef struct { > unsigned int uses_skeys:1; > /* The mmu context uses CMM. */ > unsigned int uses_cmm:1; > + /* The gmap associated with this context uses huge pages. */ > + unsigned int uses_gmap_hpage:1; Didn't we discuss that something like "allow_gmap_1mb_hpage" or similar would be more appropriate? The "uses" part can easily be wrong. > #include <linux/kernel.h> > @@ -589,8 +591,8 @@ int __gmap_link(struct gmap *gmap, unsigned long gaddr, unsigned long vmaddr) > return -EFAULT; > pmd = pmd_offset(pud, vmaddr); > VM_BUG_ON(pmd_none(*pmd)); > - /* large pmds cannot yet be handled */ > - if (pmd_large(*pmd)) > + /* Are we allowed to use huge pages? */ > + if (pmd_large(*pmd) && !gmap->mm->context.uses_gmap_hpage) > return -EFAULT; > /* Link gmap segment table entry location to page table. */ > rc = radix_tree_preload(GFP_KERNEL); > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index b6270a3b38e9..b955b986b341 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -949,6 +949,7 @@ struct kvm_ppc_resize_hpt { > #define KVM_CAP_GET_MSR_FEATURES 153 > #define KVM_CAP_HYPERV_EVENTFD 154 > #define KVM_CAP_HYPERV_TLBFLUSH 155 > +#define KVM_CAP_S390_HPAGE_1M 156 > > #ifdef KVM_CAP_IRQ_ROUTING > > I was wondering if we should add some safety net for gmap shadows when hitting a huge pmd. Or when trying to create a shadow for a gmap with huge pmds enabled (add a check in gmap_shadow()). So the GMAP kernel interface remains consistent. Apart from that, looks good to me! -- Thanks, David / dhildenb