On 12/12/19 9:48 AM, Thomas Hellström (VMware) wrote: > From: Thomas Hellstrom <thellstrom@xxxxxxxxxx> > > The TTM module today uses a hack to be able to set a different page > protection than struct vm_area_struct::vm_page_prot. To be able to do > this properly, add the needed vm functionality as vmf_insert_mixed_prot(). > > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > Cc: "Matthew Wilcox (Oracle)" <willy@xxxxxxxxxxxxx> > Cc: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> > Cc: Ralph Campbell <rcampbell@xxxxxxxxxx> > Cc: "Jérôme Glisse" <jglisse@xxxxxxxxxx> > Cc: "Christian König" <christian.koenig@xxxxxxx> > Signed-off-by: Thomas Hellstrom <thellstrom@xxxxxxxxxx> > Acked-by: Christian König <christian.koenig@xxxxxxx> > --- > include/linux/mm.h | 2 ++ > include/linux/mm_types.h | 7 ++++++- > mm/memory.c | 43 ++++++++++++++++++++++++++++++++++++---- > 3 files changed, 47 insertions(+), 5 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index cc292273e6ba..29575d3c1e47 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2548,6 +2548,8 @@ vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr, > unsigned long pfn, pgprot_t pgprot); > vm_fault_t vmf_insert_mixed(struct vm_area_struct *vma, unsigned long addr, > pfn_t pfn); > +vm_fault_t vmf_insert_mixed_prot(struct vm_area_struct *vma, unsigned long addr, > + pfn_t pfn, pgprot_t pgprot); > vm_fault_t vmf_insert_mixed_mkwrite(struct vm_area_struct *vma, > unsigned long addr, pfn_t pfn); > int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len); > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index 2222fa795284..ac96afdbb4bc 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -307,7 +307,12 @@ struct vm_area_struct { > /* Second cache line starts here. */ > > struct mm_struct *vm_mm; /* The address space we belong to. */ > - pgprot_t vm_page_prot; /* Access permissions of this VMA. */ > + > + /* > + * Access permissions of this VMA. > + * See vmf_insert_mixed() for discussion. Typo. will of course be vmf_insert_mixed_prot() in the final version.