KSM needs a cond_resched() for CONFIG_PREEMPT_NONE, in its unbounded
search of the unstable tree. The stable tree cases already have one,
and originally there was one down inside get_user_pages();
but I missed it when I converted to follow_page() instead.
Signed-off-by: Hugh Dickins <[email protected]>
---
mm/ksm.c | 1 +
1 file changed, 1 insertion(+)
--- 2.6.32-rc6/mm/ksm.c 2009-10-12 00:26:43.000000000 +0100
+++ linux/mm/ksm.c 2009-11-07 14:44:58.000000000 +0000
@@ -1012,6 +1012,7 @@ static struct rmap_item *unstable_tree_s
struct rmap_item *tree_rmap_item;
int ret;
+ cond_resched();
tree_rmap_item = rb_entry(*new, struct rmap_item, node);
page2[0] = get_mergeable_page(tree_rmap_item);
if (!page2[0])
On 11/09/2009 05:58 PM, Hugh Dickins wrote:
> KSM needs a cond_resched() for CONFIG_PREEMPT_NONE, in its unbounded
> search of the unstable tree. The stable tree cases already have one,
> and originally there was one down inside get_user_pages();
> but I missed it when I converted to follow_page() instead.
>
> Signed-off-by: Hugh Dickins<[email protected]>
> ---
>
> mm/ksm.c | 1 +
> 1 file changed, 1 insertion(+)
>
> --- 2.6.32-rc6/mm/ksm.c 2009-10-12 00:26:43.000000000 +0100
> +++ linux/mm/ksm.c 2009-11-07 14:44:58.000000000 +0000
> @@ -1012,6 +1012,7 @@ static struct rmap_item *unstable_tree_s
> struct rmap_item *tree_rmap_item;
> int ret;
>
> + cond_resched();
> tree_rmap_item = rb_entry(*new, struct rmap_item, node);
> page2[0] = get_mergeable_page(tree_rmap_item);
> if (!page2[0])
>
ACK.
Low risk patch - we are for sure at sleepable context there.