Re: [PATCH v6 16/24] mm: Protect mm_rb tree with a rwlock
From: Laurent Dufour <hidden>
Date: 2018-01-15 17:42:29
Also in:
linux-mm, lkml
Hi Matthew, Thanks for reviewing this series. On 12/01/2018 19:48, Matthew Wilcox wrote:
On Fri, Jan 12, 2018 at 06:26:00PM +0100, Laurent Dufour wrote:quoted
-static void __vma_rb_erase(struct vm_area_struct *vma, struct rb_root *root) +static void __vma_rb_erase(struct vm_area_struct *vma, struct mm_struct *mm) { + struct rb_root *root = &mm->mm_rb; /* * Note rb_erase_augmented is a fairly large inline function, * so make sure we instantiate it only once with our desired * augmented rbtree callbacks. */ +#ifdef CONFIG_SPF + write_lock(&mm->mm_rb_lock); +#endif rb_erase_augmented(&vma->vm_rb, root, &vma_gap_callbacks); +#ifdef CONFIG_SPF + write_unlock(&mm->mm_rb_lock); /* wmb */ +#endifI can't say I love this. Have you considered: #ifdef CONFIG_SPF #define vma_rb_write_lock(mm) write_lock(&mm->mm_rb_lock) #define vma_rb_write_unlock(mm) write_unlock(&mm->mm_rb_lock) #else #define vma_rb_write_lock(mm) do { } while (0) #define vma_rb_write_unlock(mm) do { } while (0) #endif
I haven't consider this, but this sounds to be smarter. I'll do that.
Also, SPF is kind of uninformative. CONFIG_MM_SPF might be better? Or perhaps even CONFIG_SPECULATIVE_PAGE_FAULT, just to make it really painful to do these one-liner ifdefs that make the code so hard to read.
Thomas also complained about that, and I agree, SPF is quite cryptic. This being said, I don't think that CONFIG_MM_SPF will be far better, so I'll change this define to CONFIG_SPECULATIVE_PAGE_FAULT, even if it's longer, it should not be too much present in the code. Thanks, Laurent.