Thread (59 messages) 59 messages, 10 authors, 2012-11-21

Re: [patch for-3.7] mm, mempolicy: fix printing stack contents in numa_maps

From: Sasha Levin <hidden>
Date: 2012-10-25 17:24:06
Also in: lkml

On 10/25/2012 10:39 AM, Peter Zijlstra wrote:
On Thu, 2012-10-25 at 14:19 +0200, Peter Zijlstra wrote:
quoted
On Wed, 2012-10-24 at 17:08 -0700, David Rientjes wrote:
quoted
Ok, this looks the same but it's actually a different issue: 
mpol_misplaced(), which now only exists in linux-next and not in 3.7-rc2, 
calls get_vma_policy() which may take the shared policy mutex.  This 
happens while holding page_table_lock from do_huge_pmd_numa_page() but 
also from do_numa_page() while holding a spinlock on the ptl, which is 
coming from the sched/numa branch.

Is there anyway that we can avoid changing the shared policy mutex back 
into a spinlock (it was converted in b22d127a39dd ["mempolicy: fix a race 
in shared_policy_replace()"])?

Adding Peter, Rik, and Mel to the cc. 
Urgh, crud I totally missed that.

So the problem is that we need to compute if the current page is placed
'right' while holding pte_lock in order to avoid multiple pte_lock
acquisitions on the 'fast' path.

I'll look into this in a bit, but one thing that comes to mind is having
both a spnilock and a mutex and require holding both for modification
while either one is sufficient for read.

That would allow sp_lookup() to use the spinlock, while insert and
replace can hold both.

Not sure it will work for this, need to stare at this code a little
more.
So I think the below should work, we hold the spinlock over both rb-tree
modification as sp free, this makes mpol_shared_policy_lookup() which
returns the policy with an incremented refcount work with just the
spinlock.

Comments?

---
It made the warnings I've reported go away.


Thanks,
Sasha

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help