> > +/* > + * gmap_protect_pmd - remove access rights to memory and set pmd notification bits > + * @pmdp: pointer to the pmd to be protected > + * @prot: indicates access rights: PROT_NONE, PROT_READ or PROT_WRITE > + * @bits: notification bits to set > + * > + * Returns 0 if successfully protected, -ENOMEM if out of memory and > + * -EAGAIN if a fixup is needed. Might want to document -EINVAL; (also maybe for the relevant vsie callers) > + * > + * Expected to be called with sg->mm->mmap_sem in read and > + * guest_table_lock held. > + */ > +static int gmap_protect_pmd(struct gmap *gmap, unsigned long gaddr, > + pmd_t *pmdp, int prot, unsigned long bits) > +{ > + int pmd_i = pmd_val(*pmdp) & _SEGMENT_ENTRY_INVALID; > + int pmd_p = pmd_val(*pmdp) & _SEGMENT_ENTRY_PROTECT; > + > + /* Fixup needed */ > + if ((pmd_i && (prot != PROT_NONE)) || (pmd_p && (prot == PROT_WRITE))) Only if you have to resend: You can drop the inner parentheses around the prot checks. > + return -EAGAIN; > + > + if (bits & GMAP_NOTIFY_MPROT) > + pmd_val(*pmdp) |= _SEGMENT_ENTRY_GMAP_IN; > + > + /* Shadow GMAP protection needs split PMDs */ > + if (bits & GMAP_NOTIFY_SHADOW) > + return -EINVAL; > + > + return 0; > +} > + > /* > * gmap_protect_pte - remove access rights to memory and set pgste bits Reviewed-by: David Hildenbrand <david@xxxxxxxxxx> -- Thanks, David / dhildenb