diff for duplicates of <20100713101810.2835.45256.sendpatchset@danny.redhat> diff --git a/a/1.txt b/N1/1.txt index f10948c..270d1ee 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -91,9 +91,3 @@ index b9989c5..4b1fa10 100644 -- 1.7.1.1 - --- -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> diff --git a/a/content_digest b/N1/content_digest index 352edd1..686f4f5 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -108,12 +108,6 @@ " \t}\n" " \n" "-- \n" - "1.7.1.1\n" - "\n" - "--\n" - "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n" - "the body to majordomo@kvack.org. For more info on Linux MM,\n" - "see: http://www.linux-mm.org/ .\n" - "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>" + 1.7.1.1 -29f519b352da2362cf8003e20629e98dafe503c76baa680d97e15cd9c5785a01 +c1e91687005eeec38b58fa28178814ad853c88276ef533b9d46c1172a9666f93
diff --git a/a/1.txt b/N2/1.txt index f10948c..8b13789 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -1,99 +1 @@ ->From 32f474cffc76551ddb792454845bd473634219b5 Mon Sep 17 00:00:00 2001 -From: Xiaotian Feng <dfeng@redhat.com> -Date: Tue, 13 Jul 2010 10:41:53 +0800 -Subject: [PATCH 07/30] mm: allow PF_MEMALLOC from softirq context -This is needed to allow network softirq packet processing to make use of -PF_MEMALLOC. - -Currently softirq context cannot use PF_MEMALLOC due to it not being associated -with a task, and therefore not having task flags to fiddle with - thus the gfp -to alloc flag mapping ignores the task flags when in interrupts (hard or soft) -context. - -Allowing softirqs to make use of PF_MEMALLOC therefore requires some trickery. -We basically borrow the task flags from whatever process happens to be -preempted by the softirq. - -So we modify the gfp to alloc flags mapping to not exclude task flags in -softirq context, and modify the softirq code to save, clear and restore the -PF_MEMALLOC flag. - -The save and clear, ensures the preempted task's PF_MEMALLOC flag doesn't -leak into the softirq. The restore ensures a softirq's PF_MEMALLOC flag cannot -leak back into the preempted process. - -Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> -Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de> -Signed-off-by: Xiaotian Feng <dfeng@redhat.com> ---- - include/linux/sched.h | 7 +++++++ - kernel/softirq.c | 3 +++ - mm/page_alloc.c | 7 ++++--- - 3 files changed, 14 insertions(+), 3 deletions(-) - -diff --git a/include/linux/sched.h b/include/linux/sched.h -index 1f25798..85b74b0 100644 ---- a/include/linux/sched.h -+++ b/include/linux/sched.h -@@ -1765,6 +1765,13 @@ static inline void rcu_copy_process(struct task_struct *p) - - #endif - -+static inline void tsk_restore_flags(struct task_struct *p, -+ unsigned long pflags, unsigned long mask) -+{ -+ p->flags &= ~mask; -+ p->flags |= pflags & mask; -+} -+ - #ifdef CONFIG_SMP - extern int set_cpus_allowed_ptr(struct task_struct *p, - const struct cpumask *new_mask); -diff --git a/kernel/softirq.c b/kernel/softirq.c -index 07b4f1b..0770e78 100644 ---- a/kernel/softirq.c -+++ b/kernel/softirq.c -@@ -194,6 +194,8 @@ asmlinkage void __do_softirq(void) - __u32 pending; - int max_restart = MAX_SOFTIRQ_RESTART; - int cpu; -+ unsigned long pflags = current->flags; -+ current->flags &= ~PF_MEMALLOC; - - pending = local_softirq_pending(); - account_system_vtime(current); -@@ -246,6 +248,7 @@ restart: - - account_system_vtime(current); - _local_bh_enable(); -+ tsk_restore_flags(current, pflags, PF_MEMALLOC); - } - - #ifndef __ARCH_HAS_DO_SOFTIRQ -diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index b9989c5..4b1fa10 100644 ---- a/mm/page_alloc.c -+++ b/mm/page_alloc.c -@@ -1928,9 +1928,10 @@ int gfp_to_alloc_flags(gfp_t gfp_mask) - alloc_flags |= ALLOC_HARDER; - - if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) { -- if (!in_interrupt() && -- ((p->flags & PF_MEMALLOC) || -- unlikely(test_thread_flag(TIF_MEMDIE)))) -+ if (!in_irq() && (p->flags & PF_MEMALLOC)) -+ alloc_flags |= ALLOC_NO_WATERMARKS; -+ else if (!in_interrupt() && -+ unlikely(test_thread_flag(TIF_MEMDIE))) - alloc_flags |= ALLOC_NO_WATERMARKS; - } - --- -1.7.1.1 - --- -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> diff --git a/a/content_digest b/N2/content_digest index 352edd1..4dabac6 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -16,104 +16,5 @@ " davem@davemloft.net\0" "\00:1\0" "b\0" - ">From 32f474cffc76551ddb792454845bd473634219b5 Mon Sep 17 00:00:00 2001\n" - "From: Xiaotian Feng <dfeng@redhat.com>\n" - "Date: Tue, 13 Jul 2010 10:41:53 +0800\n" - "Subject: [PATCH 07/30] mm: allow PF_MEMALLOC from softirq context\n" - "\n" - "This is needed to allow network softirq packet processing to make use of\n" - "PF_MEMALLOC.\n" - "\n" - "Currently softirq context cannot use PF_MEMALLOC due to it not being associated\n" - "with a task, and therefore not having task flags to fiddle with - thus the gfp\n" - "to alloc flag mapping ignores the task flags when in interrupts (hard or soft)\n" - "context.\n" - "\n" - "Allowing softirqs to make use of PF_MEMALLOC therefore requires some trickery.\n" - "We basically borrow the task flags from whatever process happens to be\n" - "preempted by the softirq.\n" - "\n" - "So we modify the gfp to alloc flags mapping to not exclude task flags in\n" - "softirq context, and modify the softirq code to save, clear and restore the\n" - "PF_MEMALLOC flag.\n" - "\n" - "The save and clear, ensures the preempted task's PF_MEMALLOC flag doesn't\n" - "leak into the softirq. The restore ensures a softirq's PF_MEMALLOC flag cannot\n" - "leak back into the preempted process.\n" - "\n" - "Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>\n" - "Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>\n" - "Signed-off-by: Xiaotian Feng <dfeng@redhat.com>\n" - "---\n" - " include/linux/sched.h | 7 +++++++\n" - " kernel/softirq.c | 3 +++\n" - " mm/page_alloc.c | 7 ++++---\n" - " 3 files changed, 14 insertions(+), 3 deletions(-)\n" - "\n" - "diff --git a/include/linux/sched.h b/include/linux/sched.h\n" - "index 1f25798..85b74b0 100644\n" - "--- a/include/linux/sched.h\n" - "+++ b/include/linux/sched.h\n" - "@@ -1765,6 +1765,13 @@ static inline void rcu_copy_process(struct task_struct *p)\n" - " \n" - " #endif\n" - " \n" - "+static inline void tsk_restore_flags(struct task_struct *p,\n" - "+\t\t\t\t unsigned long pflags, unsigned long mask)\n" - "+{\n" - "+\tp->flags &= ~mask;\n" - "+\tp->flags |= pflags & mask;\n" - "+}\n" - "+\n" - " #ifdef CONFIG_SMP\n" - " extern int set_cpus_allowed_ptr(struct task_struct *p,\n" - " \t\t\t\tconst struct cpumask *new_mask);\n" - "diff --git a/kernel/softirq.c b/kernel/softirq.c\n" - "index 07b4f1b..0770e78 100644\n" - "--- a/kernel/softirq.c\n" - "+++ b/kernel/softirq.c\n" - "@@ -194,6 +194,8 @@ asmlinkage void __do_softirq(void)\n" - " \t__u32 pending;\n" - " \tint max_restart = MAX_SOFTIRQ_RESTART;\n" - " \tint cpu;\n" - "+\tunsigned long pflags = current->flags;\n" - "+\tcurrent->flags &= ~PF_MEMALLOC;\n" - " \n" - " \tpending = local_softirq_pending();\n" - " \taccount_system_vtime(current);\n" - "@@ -246,6 +248,7 @@ restart:\n" - " \n" - " \taccount_system_vtime(current);\n" - " \t_local_bh_enable();\n" - "+\ttsk_restore_flags(current, pflags, PF_MEMALLOC);\n" - " }\n" - " \n" - " #ifndef __ARCH_HAS_DO_SOFTIRQ\n" - "diff --git a/mm/page_alloc.c b/mm/page_alloc.c\n" - "index b9989c5..4b1fa10 100644\n" - "--- a/mm/page_alloc.c\n" - "+++ b/mm/page_alloc.c\n" - "@@ -1928,9 +1928,10 @@ int gfp_to_alloc_flags(gfp_t gfp_mask)\n" - " \t\talloc_flags |= ALLOC_HARDER;\n" - " \n" - " \tif (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {\n" - "-\t\tif (!in_interrupt() &&\n" - "-\t\t ((p->flags & PF_MEMALLOC) ||\n" - "-\t\t unlikely(test_thread_flag(TIF_MEMDIE))))\n" - "+\t\tif (!in_irq() && (p->flags & PF_MEMALLOC))\n" - "+\t\t\talloc_flags |= ALLOC_NO_WATERMARKS;\n" - "+\t\telse if (!in_interrupt() &&\n" - "+\t\t\t\tunlikely(test_thread_flag(TIF_MEMDIE)))\n" - " \t\t\talloc_flags |= ALLOC_NO_WATERMARKS;\n" - " \t}\n" - " \n" - "-- \n" - "1.7.1.1\n" - "\n" - "--\n" - "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n" - "the body to majordomo@kvack.org. For more info on Linux MM,\n" - "see: http://www.linux-mm.org/ .\n" - "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>" -29f519b352da2362cf8003e20629e98dafe503c76baa680d97e15cd9c5785a01 +65a4a7e1eaee97b345d0935b0e910158808923aaa589468e1a7226c1409e7336
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.