mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-03-30 10:55:03 +00:00
padata: Rearrange set_cpumask functions
padata_set_cpumask needs to be protected by a lock. We make __padata_set_cpumasks unlocked and static. So this function can be used by the exported and locked padata_set_cpumask and padata_set_cpumasks functions. Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
e6cc117076
commit
65ff577e6b
2 changed files with 73 additions and 56 deletions
|
@ -178,9 +178,9 @@ extern int padata_get_cpumask(struct padata_instance *pinst,
|
||||||
int cpumask_type, struct cpumask *out_mask);
|
int cpumask_type, struct cpumask *out_mask);
|
||||||
extern int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
|
extern int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
|
||||||
cpumask_var_t cpumask);
|
cpumask_var_t cpumask);
|
||||||
extern int __padata_set_cpumasks(struct padata_instance *pinst,
|
extern int padata_set_cpumasks(struct padata_instance *pinst,
|
||||||
cpumask_var_t pcpumask,
|
cpumask_var_t pcpumask,
|
||||||
cpumask_var_t cbcpumask);
|
cpumask_var_t cbcpumask);
|
||||||
extern int padata_add_cpu(struct padata_instance *pinst, int cpu, int mask);
|
extern int padata_add_cpu(struct padata_instance *pinst, int cpu, int mask);
|
||||||
extern int padata_remove_cpu(struct padata_instance *pinst, int cpu, int mask);
|
extern int padata_remove_cpu(struct padata_instance *pinst, int cpu, int mask);
|
||||||
extern int padata_start(struct padata_instance *pinst);
|
extern int padata_start(struct padata_instance *pinst);
|
||||||
|
|
123
kernel/padata.c
123
kernel/padata.c
|
@ -623,55 +623,12 @@ int padata_get_cpumask(struct padata_instance *pinst,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(padata_get_cpumask);
|
EXPORT_SYMBOL(padata_get_cpumask);
|
||||||
|
|
||||||
/**
|
static int __padata_set_cpumasks(struct padata_instance *pinst,
|
||||||
* padata_set_cpumask: Sets specified by @cpumask_type cpumask to the value
|
cpumask_var_t pcpumask,
|
||||||
* equivalent to @cpumask.
|
cpumask_var_t cbcpumask)
|
||||||
*
|
|
||||||
* @pinst: padata instance
|
|
||||||
* @cpumask_type: PADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding
|
|
||||||
* to parallel and serial cpumasks respectively.
|
|
||||||
* @cpumask: the cpumask to use
|
|
||||||
*/
|
|
||||||
int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
|
|
||||||
cpumask_var_t cpumask)
|
|
||||||
{
|
|
||||||
struct cpumask *serial_mask, *parallel_mask;
|
|
||||||
|
|
||||||
switch (cpumask_type) {
|
|
||||||
case PADATA_CPU_PARALLEL:
|
|
||||||
serial_mask = pinst->cpumask.cbcpu;
|
|
||||||
parallel_mask = cpumask;
|
|
||||||
break;
|
|
||||||
case PADATA_CPU_SERIAL:
|
|
||||||
parallel_mask = pinst->cpumask.pcpu;
|
|
||||||
serial_mask = cpumask;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return __padata_set_cpumasks(pinst, parallel_mask, serial_mask);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(padata_set_cpumask);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* __padata_set_cpumasks - Set both parallel and serial cpumasks. The first
|
|
||||||
* one is used by parallel workers and the second one
|
|
||||||
* by the wokers doing serialization.
|
|
||||||
*
|
|
||||||
* @pinst: padata instance
|
|
||||||
* @pcpumask: the cpumask to use for parallel workers
|
|
||||||
* @cbcpumask: the cpumsak to use for serial workers
|
|
||||||
*/
|
|
||||||
int __padata_set_cpumasks(struct padata_instance *pinst,
|
|
||||||
cpumask_var_t pcpumask, cpumask_var_t cbcpumask)
|
|
||||||
{
|
{
|
||||||
int valid;
|
int valid;
|
||||||
int err = 0;
|
struct parallel_data *pd;
|
||||||
struct parallel_data *pd = NULL;
|
|
||||||
|
|
||||||
mutex_lock(&pinst->lock);
|
|
||||||
get_online_cpus();
|
|
||||||
|
|
||||||
valid = padata_validate_cpumask(pinst, pcpumask);
|
valid = padata_validate_cpumask(pinst, pcpumask);
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
|
@ -685,10 +642,8 @@ int __padata_set_cpumasks(struct padata_instance *pinst,
|
||||||
|
|
||||||
out_replace:
|
out_replace:
|
||||||
pd = padata_alloc_pd(pinst, pcpumask, cbcpumask);
|
pd = padata_alloc_pd(pinst, pcpumask, cbcpumask);
|
||||||
if (!pd) {
|
if (!pd)
|
||||||
err = -ENOMEM;
|
return -ENOMEM;
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpumask_copy(pinst->cpumask.pcpu, pcpumask);
|
cpumask_copy(pinst->cpumask.pcpu, pcpumask);
|
||||||
cpumask_copy(pinst->cpumask.cbcpu, cbcpumask);
|
cpumask_copy(pinst->cpumask.cbcpu, cbcpumask);
|
||||||
|
@ -698,14 +653,76 @@ out_replace:
|
||||||
if (valid)
|
if (valid)
|
||||||
__padata_start(pinst);
|
__padata_start(pinst);
|
||||||
|
|
||||||
out:
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* padata_set_cpumasks - Set both parallel and serial cpumasks. The first
|
||||||
|
* one is used by parallel workers and the second one
|
||||||
|
* by the wokers doing serialization.
|
||||||
|
*
|
||||||
|
* @pinst: padata instance
|
||||||
|
* @pcpumask: the cpumask to use for parallel workers
|
||||||
|
* @cbcpumask: the cpumsak to use for serial workers
|
||||||
|
*/
|
||||||
|
int padata_set_cpumasks(struct padata_instance *pinst, cpumask_var_t pcpumask,
|
||||||
|
cpumask_var_t cbcpumask)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
mutex_lock(&pinst->lock);
|
||||||
|
get_online_cpus();
|
||||||
|
|
||||||
|
err = __padata_set_cpumasks(pinst, pcpumask, cbcpumask);
|
||||||
|
|
||||||
put_online_cpus();
|
put_online_cpus();
|
||||||
mutex_unlock(&pinst->lock);
|
mutex_unlock(&pinst->lock);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(__padata_set_cpumasks);
|
EXPORT_SYMBOL(padata_set_cpumasks);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* padata_set_cpumask: Sets specified by @cpumask_type cpumask to the value
|
||||||
|
* equivalent to @cpumask.
|
||||||
|
*
|
||||||
|
* @pinst: padata instance
|
||||||
|
* @cpumask_type: PADATA_CPU_SERIAL or PADATA_CPU_PARALLEL corresponding
|
||||||
|
* to parallel and serial cpumasks respectively.
|
||||||
|
* @cpumask: the cpumask to use
|
||||||
|
*/
|
||||||
|
int padata_set_cpumask(struct padata_instance *pinst, int cpumask_type,
|
||||||
|
cpumask_var_t cpumask)
|
||||||
|
{
|
||||||
|
struct cpumask *serial_mask, *parallel_mask;
|
||||||
|
int err = -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&pinst->lock);
|
||||||
|
get_online_cpus();
|
||||||
|
|
||||||
|
switch (cpumask_type) {
|
||||||
|
case PADATA_CPU_PARALLEL:
|
||||||
|
serial_mask = pinst->cpumask.cbcpu;
|
||||||
|
parallel_mask = cpumask;
|
||||||
|
break;
|
||||||
|
case PADATA_CPU_SERIAL:
|
||||||
|
parallel_mask = pinst->cpumask.pcpu;
|
||||||
|
serial_mask = cpumask;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = __padata_set_cpumasks(pinst, parallel_mask, serial_mask);
|
||||||
|
|
||||||
|
out:
|
||||||
|
put_online_cpus();
|
||||||
|
mutex_unlock(&pinst->lock);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(padata_set_cpumask);
|
||||||
|
|
||||||
static int __padata_add_cpu(struct padata_instance *pinst, int cpu)
|
static int __padata_add_cpu(struct padata_instance *pinst, int cpu)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue