Message ID | 20180612143915.68065-2-kirill.shutemov@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/12/2018 07:38 AM, Kirill A. Shutemov wrote: > VMAs with different KeyID do not mix together. Only VMAs with the same > KeyID are compatible. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > --- > include/linux/mm.h | 7 +++++++ > mm/mmap.c | 3 ++- > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 02a616e2f17d..1c3c15f37ed6 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -1492,6 +1492,13 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) > return !vma->vm_ops; > } > > +#ifndef vma_keyid > +static inline int vma_keyid(struct vm_area_struct *vma) > +{ > + return 0; > +} > +#endif I'm generally not a fan of this #ifdef'ing method. It makes it hard to figure out who is supposed to define it, and it's also substantially more fragile in the face of #include ordering. I'd much rather see some Kconfig involvement, like CONFIG_ARCH_HAS_MEM_ENCRYPTION or something.
On Wed, Jun 13, 2018 at 05:45:24PM +0000, Dave Hansen wrote: > On 06/12/2018 07:38 AM, Kirill A. Shutemov wrote: > > VMAs with different KeyID do not mix together. Only VMAs with the same > > KeyID are compatible. > > > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> > > --- > > include/linux/mm.h | 7 +++++++ > > mm/mmap.c | 3 ++- > > 2 files changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/include/linux/mm.h b/include/linux/mm.h > > index 02a616e2f17d..1c3c15f37ed6 100644 > > --- a/include/linux/mm.h > > +++ b/include/linux/mm.h > > @@ -1492,6 +1492,13 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) > > return !vma->vm_ops; > > } > > > > +#ifndef vma_keyid > > +static inline int vma_keyid(struct vm_area_struct *vma) > > +{ > > + return 0; > > +} > > +#endif > > I'm generally not a fan of this #ifdef'ing method. It makes it hard to > figure out who is supposed to define it, and it's also substantially > more fragile in the face of #include ordering. > > I'd much rather see some Kconfig involvement, like > CONFIG_ARCH_HAS_MEM_ENCRYPTION or something. Well, it's matter of taste, I guess. I do prefer per-function #ifdef'ing. It seems more flexible to me. I can rework it if maintainers prefer to see config option instead.
diff --git a/include/linux/mm.h b/include/linux/mm.h index 02a616e2f17d..1c3c15f37ed6 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -1492,6 +1492,13 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) return !vma->vm_ops; } +#ifndef vma_keyid +static inline int vma_keyid(struct vm_area_struct *vma) +{ + return 0; +} +#endif + #ifdef CONFIG_SHMEM /* * The vma_is_shmem is not inline because it is used only by slow diff --git a/mm/mmap.c b/mm/mmap.c index d817764a9974..3ff89fc1752b 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1217,7 +1217,8 @@ static int anon_vma_compatible(struct vm_area_struct *a, struct vm_area_struct * mpol_equal(vma_policy(a), vma_policy(b)) && a->vm_file == b->vm_file && !((a->vm_flags ^ b->vm_flags) & ~(VM_READ|VM_WRITE|VM_EXEC|VM_SOFTDIRTY)) && - b->vm_pgoff == a->vm_pgoff + ((b->vm_start - a->vm_start) >> PAGE_SHIFT); + b->vm_pgoff == a->vm_pgoff + ((b->vm_start - a->vm_start) >> PAGE_SHIFT) && + vma_keyid(a) == vma_keyid(b); } /*
VMAs with different KeyID do not mix together. Only VMAs with the same KeyID are compatible. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> --- include/linux/mm.h | 7 +++++++ mm/mmap.c | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-)