2020-07-02 15:56:40

by Nico Pache

[permalink] [raw]
Subject: [PATCH v2] Remove __init from padata_do_multithreaded and padata_mt_helper.

Allow padata_do_multithreaded function to be called after bootstrap.

v2: removed __init from padata_work_alloc_mt and padata_works_free

Signed-off-by: Nico Pache <[email protected]>
---
include/linux/padata.h | 2 +-
kernel/padata.c | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/include/linux/padata.h b/include/linux/padata.h
index 7302efff5..2e7d92e80 100644
--- a/include/linux/padata.h
+++ b/include/linux/padata.h
@@ -201,7 +201,7 @@ extern void padata_free_shell(struct padata_shell *ps);
extern int padata_do_parallel(struct padata_shell *ps,
struct padata_priv *padata, int *cb_cpu);
extern void padata_do_serial(struct padata_priv *padata);
-extern void __init padata_do_multithreaded(struct padata_mt_job *job);
+extern void padata_do_multithreaded(struct padata_mt_job *job);
extern int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
cpumask_var_t cpumask);
extern int padata_start(struct padata_instance *pinst);
diff --git a/kernel/padata.c b/kernel/padata.c
index 4373f7ada..c067b1339 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -58,7 +58,7 @@ struct padata_mt_job_state {
};

static void padata_free_pd(struct parallel_data *pd);
-static void __init padata_mt_helper(struct work_struct *work);
+static void padata_mt_helper(struct work_struct *work);

static int padata_index_to_cpu(struct parallel_data *pd, int cpu_index)
{
@@ -106,7 +106,7 @@ static void padata_work_init(struct padata_work *pw, work_func_t work_fn,
pw->pw_data = data;
}

-static int __init padata_work_alloc_mt(int nworks, void *data,
+static int padata_work_alloc_mt(int nworks, void *data,
struct list_head *head)
{
int i;
@@ -132,7 +132,7 @@ static void padata_work_free(struct padata_work *pw)
list_add(&pw->pw_list, &padata_free_works);
}

-static void __init padata_works_free(struct list_head *works)
+static void padata_works_free(struct list_head *works)
{
struct padata_work *cur, *next;

@@ -463,7 +463,7 @@ static int pd_setup_cpumasks(struct parallel_data *pd,
return err;
}

-static void __init padata_mt_helper(struct work_struct *w)
+static void padata_mt_helper(struct work_struct *w)
{
struct padata_work *pw = container_of(w, struct padata_work, pw_work);
struct padata_mt_job_state *ps = pw->pw_data;
@@ -503,7 +503,7 @@ static void __init padata_mt_helper(struct work_struct *w)
*
* See the definition of struct padata_mt_job for more details.
*/
-void __init padata_do_multithreaded(struct padata_mt_job *job)
+void padata_do_multithreaded(struct padata_mt_job *job)
{
/* In case threads finish at different times. */
static const unsigned long load_balance_factor = 4;
--
2.18.1


2020-10-28 21:36:46

by Daniel Jordan

[permalink] [raw]
Subject: Re: [PATCH v2] Remove __init from padata_do_multithreaded and padata_mt_helper.

On 10/27/20 12:46 AM, Nico Pache wrote:
> On Wed, Jul 08, 2020 at 03:51:40PM -0400, Daniel Jordan wrote:
> > (I was away for a while)
> >
> > On Thu, Jul 02, 2020 at 11:55:48AM -0400, Nico Pache wrote:
> > > Allow padata_do_multithreaded function to be called after bootstrap.
> >
> > The functions are __init because they're currently only needed during boot, and
> > using __init allows the text to be freed once it's over, saving some memory.
> >
> > So this change, in isolation, doesn't make sense. If there were an enhancement
> > you were thinking of making, this patch could then be bundled with it so the
> > change is made only when it's used.
> >
> > However, there's still work that needs to be merged before
> > padata_do_multithreaded can be called after boot. See the parts about priority
> > adjustments (MAX_NICE/renicing) and concurrency limits in this branch
> >
> > https://oss.oracle.com/git/gitweb.cgi?p=linux-dmjordan.git;a=shortlog;h=refs/heads/padata-mt-wip-v0.5
> >
> > and the ktask discussions from linux-mm/lkml where concerns about these issues
> > were raised. I plan to post these parts fairly soon and can include you if you
> > want.
>
> I really like the speed benefits I've been able to achieve by using your
> padata multithreaded interface in the branch you linked me to. Do you
> still have plans on moving forward with this upstream?

Yes, I'm still planning to push these patches upstream, but it's going to take
some time with all the prerequisites. I'm working on remote charging in the
CPU controller now, which is the biggest unfinished task. A little background
on that here:

https://lore.kernel.org/linux-mm/[email protected]/