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

From: Sasha Levin
Date: Thu Oct 25 2012 - 13:23:56 EST


On 10/25/2012 10:39 AM, Peter Zijlstra wrote:
> On Thu, 2012-10-25 at 14:19 +0200, Peter Zijlstra wrote:
>> On Wed, 2012-10-24 at 17:08 -0700, David Rientjes wrote:
>>> 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 from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/