Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-13 Thread Andrea Arcangeli
Hello! On Mon, Feb 13, 2017 at 01:59:06PM +0300, Kirill A. Shutemov wrote: > On Sun, Feb 12, 2017 at 06:25:09PM -0600, Zi Yan wrote: > > Since in mm/compaction.c, the kernel does not down_read(mmap_sem) during > > memory > > compaction. Namely, base page migrations do not hold down_read(mmap_sem)

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-13 Thread Kirill A. Shutemov
On Sun, Feb 12, 2017 at 06:25:09PM -0600, Zi Yan wrote: > Hi Kirill, > > The crash scenario I guess is like: > 1. A huge page pmd entry is in the middle of being changed into either a > pmd_protnone or a pmd_migration_entry. It is cleared to pmd_none. > > 2. At the same ti

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-12 Thread Zi Yan
Hi Kirill, The crash scenario I guess is like: 1. A huge page pmd entry is in the middle of being changed into either a pmd_protnone or a pmd_migration_entry. It is cleared to pmd_none. 2. At the same time, the application frees the vma this page belongs to. >>> >>> Em...

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Kirill A. Shutemov
On Tue, Feb 07, 2017 at 11:14:56AM -0600, Zi Yan wrote: > > > Kirill A. Shutemov wrote: > > On Tue, Feb 07, 2017 at 09:11:05AM -0600, Zi Yan wrote: > This causes memory leak or kernel crashing, if VM_BUG_ON() is enabled. > >>> The problem is that numabalancing calls change_huge_pmd() under >

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Zi Yan
Kirill A. Shutemov wrote: > On Tue, Feb 07, 2017 at 09:11:05AM -0600, Zi Yan wrote: This causes memory leak or kernel crashing, if VM_BUG_ON() is enabled. >>> The problem is that numabalancing calls change_huge_pmd() under >>> down_read(mmap_sem), not down_write(mmap_sem) as the rest of user

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Kirill A. Shutemov
On Tue, Feb 07, 2017 at 09:11:05AM -0600, Zi Yan wrote: > >> This causes memory leak or kernel crashing, if VM_BUG_ON() is enabled. > > > > The problem is that numabalancing calls change_huge_pmd() under > > down_read(mmap_sem), not down_write(mmap_sem) as the rest of users do. > > It makes numaba

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Zi Yan
Hi Kirill, Kirill A. Shutemov wrote: > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: >> From: Zi Yan >> >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. >> This can cause pmd_protnone entry not being freed. >> >> Because there are two steps in changing a pmd entr

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Kirill A. Shutemov
On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: > From: Zi Yan > > Originally, zap_pmd_range() checks pmd value without taking pmd lock. > This can cause pmd_protnone entry not being freed. > > Because there are two steps in changing a pmd entry to a pmd_protnone > entry. First, the pmd

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-07 Thread Aneesh Kumar K.V
"Kirill A. Shutemov" writes: > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: >> From: Zi Yan >> >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. >> This can cause pmd_protnone entry not being freed. >> >> Because there are two steps in changing a pmd entry to

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-06 Thread Naoya Horiguchi
On Mon, Feb 06, 2017 at 07:02:41AM -0600, Zi Yan wrote: > On 6 Feb 2017, at 1:43, Naoya Horiguchi wrote: > > > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: > >> From: Zi Yan > >> > >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. > >> This can cause pmd_protnone

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-06 Thread Kirill A. Shutemov
On Mon, Feb 06, 2017 at 10:32:10AM -0600, Zi Yan wrote: > On 6 Feb 2017, at 10:07, Kirill A. Shutemov wrote: > > > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: > >> From: Zi Yan > >> > >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. > >> This can cause pmd_prot

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-06 Thread Zi Yan
On 6 Feb 2017, at 10:07, Kirill A. Shutemov wrote: > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: >> From: Zi Yan >> >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. >> This can cause pmd_protnone entry not being freed. >> >> Because there are two steps in chang

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-06 Thread Kirill A. Shutemov
On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: > From: Zi Yan > > Originally, zap_pmd_range() checks pmd value without taking pmd lock. > This can cause pmd_protnone entry not being freed. > > Because there are two steps in changing a pmd entry to a pmd_protnone > entry. First, the pmd

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-06 Thread Zi Yan
On 6 Feb 2017, at 1:43, Naoya Horiguchi wrote: > On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: >> From: Zi Yan >> >> Originally, zap_pmd_range() checks pmd value without taking pmd lock. >> This can cause pmd_protnone entry not being freed. >> >> Because there are two steps in changing

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-05 Thread Naoya Horiguchi
On Sun, Feb 05, 2017 at 11:12:41AM -0500, Zi Yan wrote: > From: Zi Yan > > Originally, zap_pmd_range() checks pmd value without taking pmd lock. > This can cause pmd_protnone entry not being freed. > > Because there are two steps in changing a pmd entry to a pmd_protnone > entry. First, the pmd

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-05 Thread Zi Yan
On 5 Feb 2017, at 22:02, Hillf Danton wrote: > On February 06, 2017 12:13 AM Zi Yan wrote: >> >> @@ -1233,33 +1233,31 @@ static inline unsigned long zap_pmd_range(struct >> mmu_gather *tlb, >> struct zap_details *details) >> { >> pmd_t *pmd; >> +spinlock_t *

Re: [PATCH v3 03/14] mm: use pmd lock instead of racy checks in zap_pmd_range()

2017-02-05 Thread Hillf Danton
On February 06, 2017 12:13 AM Zi Yan wrote: > > @@ -1233,33 +1233,31 @@ static inline unsigned long zap_pmd_range(struct > mmu_gather *tlb, > struct zap_details *details) > { > pmd_t *pmd; > + spinlock_t *ptl; > unsigned long next; > > pmd =