diff for duplicates of <20160224162552.GC3305@pathway.suse.cz> diff --git a/a/1.txt b/N1/1.txt index fbc3225..3b17efb 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -17,165 +17,3 @@ On Tue 2016-02-23 01:33:12, kbuild test robot wrote: Please find below an updated version of the patch that fixes the above warnings: - - ->From 66fbe9142d4761a7010a73eeb69ef315053684cb Mon Sep 17 00:00:00 2001 -From: Petr Mladek <pmladek@suse.com> -Date: Mon, 22 Jun 2015 15:05:16 +0200 -Subject: [PATCH 10/10] kthread: Better support freezable kthread workers - -This patch allows to make kthread worker freezable via a new @flags -parameter. It will allow to avoid an init work in some kthreads. - -It currently does not affect the function of kthread_worker_fn() -but it might help to do some optimization or fixes eventually. - -I currently do not know about any other use for the @flags -parameter but I believe that we will want more flags -in the future. - -Finally, I hope that it will not cause confusion with @flags member -in struct kthread. Well, I guess that we will want to rework the -basic kthreads implementation once all kthreads are converted into -kthread workers or workqueues. It is possible that we will merge -the two structures. - -Signed-off-by: Petr Mladek <pmladek@suse.com> ---- - include/linux/kthread.h | 11 ++++++++--- - kernel/kthread.c | 20 ++++++++++++++------ - 2 files changed, 22 insertions(+), 9 deletions(-) - -diff --git a/include/linux/kthread.h b/include/linux/kthread.h -index 531730f8a8a7..b57786c40c2c 100644 ---- a/include/linux/kthread.h -+++ b/include/linux/kthread.h -@@ -65,7 +65,12 @@ struct kthread_work; - typedef void (*kthread_work_func_t)(struct kthread_work *work); - void delayed_kthread_work_timer_fn(unsigned long __data); - -+enum { -+ KTW_FREEZABLE = 1 << 2, /* freeze during suspend */ -+}; -+ - struct kthread_worker { -+ unsigned int flags; - spinlock_t lock; - struct list_head work_list; - struct list_head delayed_work_list; -@@ -154,12 +159,12 @@ extern void __init_kthread_worker(struct kthread_worker *worker, - - int kthread_worker_fn(void *worker_ptr); - --__printf(1, 2) -+__printf(2, 3) - struct kthread_worker * --create_kthread_worker(const char namefmt[], ...); -+create_kthread_worker(unsigned int flags, const char namefmt[], ...); - - struct kthread_worker * --create_kthread_worker_on_cpu(int cpu, const char namefmt[]); -+create_kthread_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[]); - - bool queue_kthread_work(struct kthread_worker *worker, - struct kthread_work *work); -diff --git a/kernel/kthread.c b/kernel/kthread.c -index 43b46daafb4d..4450474301c7 100644 ---- a/kernel/kthread.c -+++ b/kernel/kthread.c -@@ -556,11 +556,11 @@ void __init_kthread_worker(struct kthread_worker *worker, - const char *name, - struct lock_class_key *key) - { -+ memset(worker, 0, sizeof(struct kthread_worker)); - spin_lock_init(&worker->lock); - lockdep_set_class_and_name(&worker->lock, key, name); - INIT_LIST_HEAD(&worker->work_list); - INIT_LIST_HEAD(&worker->delayed_work_list); -- worker->task = NULL; - } - EXPORT_SYMBOL_GPL(__init_kthread_worker); - -@@ -590,6 +590,10 @@ int kthread_worker_fn(void *worker_ptr) - */ - WARN_ON(worker->task && worker->task != current); - worker->task = current; -+ -+ if (worker->flags & KTW_FREEZABLE) -+ set_freezable(); -+ - repeat: - set_current_state(TASK_INTERRUPTIBLE); /* mb paired w/ kthread_stop */ - -@@ -623,7 +627,8 @@ repeat: - EXPORT_SYMBOL_GPL(kthread_worker_fn); - - static struct kthread_worker * --__create_kthread_worker(int cpu, const char namefmt[], va_list args) -+__create_kthread_worker(int cpu, unsigned int flags, -+ const char namefmt[], va_list args) - { - struct kthread_worker *worker; - struct task_struct *task; -@@ -643,6 +648,7 @@ __create_kthread_worker(int cpu, const char namefmt[], va_list args) - if (IS_ERR(task)) - goto fail_task; - -+ worker->flags = flags; - worker->task = task; - wake_up_process(task); - return worker; -@@ -654,6 +660,7 @@ fail_task: - - /** - * create_kthread_worker - create a kthread worker -+ * @flags: flags modifying the default behavior of the worker - * @namefmt: printf-style name for the kthread worker (task). - * - * Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM) -@@ -661,13 +668,13 @@ fail_task: - * when the worker was SIGKILLed. - */ - struct kthread_worker * --create_kthread_worker(const char namefmt[], ...) -+create_kthread_worker(unsigned int flags, const char namefmt[], ...) - { - struct kthread_worker *worker; - va_list args; - - va_start(args, namefmt); -- worker = __create_kthread_worker(-1, namefmt, args); -+ worker = __create_kthread_worker(-1, flags, namefmt, args); - va_end(args); - - return worker; -@@ -678,6 +685,7 @@ EXPORT_SYMBOL(create_kthread_worker); - * create_kthread_worker_on_cpu - create a kthread worker and bind it - * it to a given CPU and the associated NUMA node. - * @cpu: CPU number -+ * @flags: flags modifying the default behavior of the worker - * @namefmt: printf-style name for the kthread worker (task). - * - * Use a valid CPU number if you want to bind the kthread worker -@@ -690,11 +698,11 @@ EXPORT_SYMBOL(create_kthread_worker); - * when the worker was SIGKILLed. - */ - struct kthread_worker * --create_kthread_worker_on_cpu(int cpu, const char namefmt[]) -+create_kthread_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[]) - { - va_list fake_args; - -- return __create_kthread_worker(cpu, namefmt, fake_args); -+ return __create_kthread_worker(cpu, flags, namefmt, fake_args); - } - EXPORT_SYMBOL(create_kthread_worker_on_cpu); - --- -1.8.5.6 - --- -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 72f4635..e353efd 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -42,168 +42,6 @@ "> kernel/kthread.c:700: warning: No description found for parameter 'flags'\n" "\n" "Please find below an updated version of the patch that fixes the above\n" - "warnings:\n" - "\n" - "\n" - ">From 66fbe9142d4761a7010a73eeb69ef315053684cb Mon Sep 17 00:00:00 2001\n" - "From: Petr Mladek <pmladek@suse.com>\n" - "Date: Mon, 22 Jun 2015 15:05:16 +0200\n" - "Subject: [PATCH 10/10] kthread: Better support freezable kthread workers\n" - "\n" - "This patch allows to make kthread worker freezable via a new @flags\n" - "parameter. It will allow to avoid an init work in some kthreads.\n" - "\n" - "It currently does not affect the function of kthread_worker_fn()\n" - "but it might help to do some optimization or fixes eventually.\n" - "\n" - "I currently do not know about any other use for the @flags\n" - "parameter but I believe that we will want more flags\n" - "in the future.\n" - "\n" - "Finally, I hope that it will not cause confusion with @flags member\n" - "in struct kthread. Well, I guess that we will want to rework the\n" - "basic kthreads implementation once all kthreads are converted into\n" - "kthread workers or workqueues. It is possible that we will merge\n" - "the two structures.\n" - "\n" - "Signed-off-by: Petr Mladek <pmladek@suse.com>\n" - "---\n" - " include/linux/kthread.h | 11 ++++++++---\n" - " kernel/kthread.c | 20 ++++++++++++++------\n" - " 2 files changed, 22 insertions(+), 9 deletions(-)\n" - "\n" - "diff --git a/include/linux/kthread.h b/include/linux/kthread.h\n" - "index 531730f8a8a7..b57786c40c2c 100644\n" - "--- a/include/linux/kthread.h\n" - "+++ b/include/linux/kthread.h\n" - "@@ -65,7 +65,12 @@ struct kthread_work;\n" - " typedef void (*kthread_work_func_t)(struct kthread_work *work);\n" - " void delayed_kthread_work_timer_fn(unsigned long __data);\n" - " \n" - "+enum {\n" - "+\tKTW_FREEZABLE\t\t= 1 << 2,\t/* freeze during suspend */\n" - "+};\n" - "+\n" - " struct kthread_worker {\n" - "+\tunsigned int\t\tflags;\n" - " \tspinlock_t\t\tlock;\n" - " \tstruct list_head\twork_list;\n" - " \tstruct list_head\tdelayed_work_list;\n" - "@@ -154,12 +159,12 @@ extern void __init_kthread_worker(struct kthread_worker *worker,\n" - " \n" - " int kthread_worker_fn(void *worker_ptr);\n" - " \n" - "-__printf(1, 2)\n" - "+__printf(2, 3)\n" - " struct kthread_worker *\n" - "-create_kthread_worker(const char namefmt[], ...);\n" - "+create_kthread_worker(unsigned int flags, const char namefmt[], ...);\n" - " \n" - " struct kthread_worker *\n" - "-create_kthread_worker_on_cpu(int cpu, const char namefmt[]);\n" - "+create_kthread_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[]);\n" - " \n" - " bool queue_kthread_work(struct kthread_worker *worker,\n" - " \t\t\tstruct kthread_work *work);\n" - "diff --git a/kernel/kthread.c b/kernel/kthread.c\n" - "index 43b46daafb4d..4450474301c7 100644\n" - "--- a/kernel/kthread.c\n" - "+++ b/kernel/kthread.c\n" - "@@ -556,11 +556,11 @@ void __init_kthread_worker(struct kthread_worker *worker,\n" - " \t\t\t\tconst char *name,\n" - " \t\t\t\tstruct lock_class_key *key)\n" - " {\n" - "+\tmemset(worker, 0, sizeof(struct kthread_worker));\n" - " \tspin_lock_init(&worker->lock);\n" - " \tlockdep_set_class_and_name(&worker->lock, key, name);\n" - " \tINIT_LIST_HEAD(&worker->work_list);\n" - " \tINIT_LIST_HEAD(&worker->delayed_work_list);\n" - "-\tworker->task = NULL;\n" - " }\n" - " EXPORT_SYMBOL_GPL(__init_kthread_worker);\n" - " \n" - "@@ -590,6 +590,10 @@ int kthread_worker_fn(void *worker_ptr)\n" - " \t */\n" - " \tWARN_ON(worker->task && worker->task != current);\n" - " \tworker->task = current;\n" - "+\n" - "+\tif (worker->flags & KTW_FREEZABLE)\n" - "+\t\tset_freezable();\n" - "+\n" - " repeat:\n" - " \tset_current_state(TASK_INTERRUPTIBLE);\t/* mb paired w/ kthread_stop */\n" - " \n" - "@@ -623,7 +627,8 @@ repeat:\n" - " EXPORT_SYMBOL_GPL(kthread_worker_fn);\n" - " \n" - " static struct kthread_worker *\n" - "-__create_kthread_worker(int cpu, const char namefmt[], va_list args)\n" - "+__create_kthread_worker(int cpu, unsigned int flags,\n" - "+\t\t\tconst char namefmt[], va_list args)\n" - " {\n" - " \tstruct kthread_worker *worker;\n" - " \tstruct task_struct *task;\n" - "@@ -643,6 +648,7 @@ __create_kthread_worker(int cpu, const char namefmt[], va_list args)\n" - " \tif (IS_ERR(task))\n" - " \t\tgoto fail_task;\n" - " \n" - "+\tworker->flags = flags;\n" - " \tworker->task = task;\n" - " \twake_up_process(task);\n" - " \treturn worker;\n" - "@@ -654,6 +660,7 @@ fail_task:\n" - " \n" - " /**\n" - " * create_kthread_worker - create a kthread worker\n" - "+ * @flags: flags modifying the default behavior of the worker\n" - " * @namefmt: printf-style name for the kthread worker (task).\n" - " *\n" - " * Returns a pointer to the allocated worker on success, ERR_PTR(-ENOMEM)\n" - "@@ -661,13 +668,13 @@ fail_task:\n" - " * when the worker was SIGKILLed.\n" - " */\n" - " struct kthread_worker *\n" - "-create_kthread_worker(const char namefmt[], ...)\n" - "+create_kthread_worker(unsigned int flags, const char namefmt[], ...)\n" - " {\n" - " \tstruct kthread_worker *worker;\n" - " \tva_list args;\n" - " \n" - " \tva_start(args, namefmt);\n" - "-\tworker = __create_kthread_worker(-1, namefmt, args);\n" - "+\tworker = __create_kthread_worker(-1, flags, namefmt, args);\n" - " \tva_end(args);\n" - " \n" - " \treturn worker;\n" - "@@ -678,6 +685,7 @@ EXPORT_SYMBOL(create_kthread_worker);\n" - " * create_kthread_worker_on_cpu - create a kthread worker and bind it\n" - " *\tit to a given CPU and the associated NUMA node.\n" - " * @cpu: CPU number\n" - "+ * @flags: flags modifying the default behavior of the worker\n" - " * @namefmt: printf-style name for the kthread worker (task).\n" - " *\n" - " * Use a valid CPU number if you want to bind the kthread worker\n" - "@@ -690,11 +698,11 @@ EXPORT_SYMBOL(create_kthread_worker);\n" - " * when the worker was SIGKILLed.\n" - " */\n" - " struct kthread_worker *\n" - "-create_kthread_worker_on_cpu(int cpu, const char namefmt[])\n" - "+create_kthread_worker_on_cpu(int cpu, unsigned int flags, const char namefmt[])\n" - " {\n" - " \tva_list fake_args;\n" - " \n" - "-\treturn __create_kthread_worker(cpu, namefmt, fake_args);\n" - "+\treturn __create_kthread_worker(cpu, flags, namefmt, fake_args);\n" - " }\n" - " EXPORT_SYMBOL(create_kthread_worker_on_cpu);\n" - " \n" - "-- \n" - "1.8.5.6\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>" + warnings: -839eb8c99b7912e6560d09b1ef08cc10c98f2a27088388d5a95522275b73f1f8 +d865abc1dd2c6200e786502ea83ea0fe08f4dc63bbdc6c06db710c249da9c05c
diff --git a/a/1.txt b/N2/1.txt index fbc3225..4eebd5e 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -173,9 +173,3 @@ index 43b46daafb4d..4450474301c7 100644 -- 1.8.5.6 - --- -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 72f4635..2f989ed 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -198,12 +198,6 @@ " EXPORT_SYMBOL(create_kthread_worker_on_cpu);\n" " \n" "-- \n" - "1.8.5.6\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.8.5.6 -839eb8c99b7912e6560d09b1ef08cc10c98f2a27088388d5a95522275b73f1f8 +8c79e1953d9acb27f5cfeb4fc6a532e7530ef55a96389d2dc98377745c57142f
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.