Lustre: get rid of deprecated cpumask calls
cover Lustre: get rid of deprecated cpumask calls
From: Oleg Drokin <[email protected]>
A recent crash report with CONFIG_CPUMASK_OFFSTACK enabled set off a chain of emails through which I learned that cpus_* functions are deprecated and should not be really used to operate on cpumasks.
These two patches do just that, replacing cpus_* and cpu_* calls with cpumask_ equivalents, getting rid of a sizable number or NR_CPUS references
please consider.
Oleg Drokin (2):
staging/lustre/ptlrpc: Do not use deprecated cpus_* functions staging/lustre/libcfs: replace deprecated cpus_ calls with cpumask_
.../staging/lustre/lustre/libcfs/linux/linux-cpu.c | 78 +++++++++++----------- drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c | 8 +-- drivers/staging/lustre/lustre/ptlrpc/service.c | 9 +-- 3 files changed, 46 insertions(+), 49 deletions(-)
Signature · 1 line
2.1.0
PATCH 1/2 staging/lustre/ptlrpc: Do not use deprecated cpus_* functions
From: Oleg Drokin <[email protected]>
As per Rusty Russel, cpus_* functions are deprecated. When mixing cpumask_copy with cpus_weight, they operate on different sized masks if CPUMASK_OFFSTACK is enabled, causing an immediate assertion failure.
Copying of cpumasks by assignment is also not allowed now.
Additionally, in ptlrpc/service.c avoid the cpumask copies, since we only use it to check how many siblings are there for core #0 and nothing else.
--- drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c | 8 ++++---- drivers/staging/lustre/lustre/ptlrpc/service.c | 9 +++------ 2 files changed, 7 insertions(+), 10 deletions(-)
drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c +4 -4
@@ -511,10 +511,10 @@ static int ptlrpcd_bind(int index, int max)#if defined(CONFIG_NUMA ) {int i; - mask = *cpumask_of_node (cpu_to_node (index)); +cpumask_copy (&mask,cpumask_of_node (cpu_to_node (index)));for (i = max; i <num_online_cpus (); i++) -cpu_clear (i, mask); - pc->pc_npartners =cpus_weight (mask) -1 ; +cpumask_clear_cpu (i, &mask); + pc->pc_npartners =cpumask_weight (&mask) -1 ;set_bit (LIOD_BIND , &pc->pc_flags); }#else
@@ -554,7 +554,7 @@ static int ptlrpcd_bind(int index, int max)* that are already initialized */ for (pidx =0 , i =0 ; i < index; i++) { -if (cpu_isset (i, mask)) { +if (cpumask_test_cpu (i, &mask)) { ppc = &ptlrpcds->pd_threads[i]; pc->pc_partners[pidx++] = ppc; ppc->pc_partners[ppc->
drivers/staging/lustre/lustre/ptlrpc/service.c +3 -6
@@ -543,7 +543,6 @@ ptlrpc_server_nthreads_check(struct ptlrpc_service *svc,if (tc->tc_thr_factor !=0 ) {int factor = tc->tc_thr_factor;const int fade =4 ; -cpumask_t mask;/* * User wants to increase number of threads with for
@@ -557,8 +556,8 @@ ptlrpc_server_nthreads_check(struct ptlrpc_service *svc,* have too many threads no matter how many cores/HTs * there are. */ -cpumask_copy (&mask,topology_thread_cpumask (0 )); -if (cpus_weight (mask) >1 ) {/* weight is # of HTs */ +/* weight is # of HTs */ +if (cpumask_weight (topology_thread_cpumask (0 )) >1 ) {/* depress thread factor for hyper-thread */ factor = factor - (factor >>1 ) + (factor >>3 ); }
@@ -2752,7 +2751,6 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)int ptlrpc_hr_init (void ) { -cpumask_t mask;struct ptlrpc_hr_partition *hrp;struct ptlrpc_hr_thread *hrt;int rc;
@@ -2770,8 +2768,7 @@ int ptlrpc_hr_init(void)init_waitqueue_head (&ptlrpc_hr.hr_waitq); -cpumask_copy (&mask,topology_thread_cpumask (0 )); - weight =cpus_weight (mask); + weight =cpumask_weight (topology_thread_cpumask (0 ));cfs_percpt_for_each (hrp, i, ptlrpc_hr.hr_partitions) { hrp->hrp_cpt = i;
Signature · 1 line
2.1.0
PATCH 2/2 staging/lustre/libcfs: replace deprecated cpus_ calls with cpumask_
In reply to [email protected]From: Oleg Drokin <[email protected]>
Rusty Russel advises that cpus_* functions are deprecated to work on cpumasks and cpumask_* functions should be called instead, otherwise problems with CPUMASK_OFFSTACK arise.
--- .../staging/lustre/lustre/libcfs/linux/linux-cpu.c | 78 +++++++++++----------- 1 file changed, 39 insertions(+), 39 deletions(-)
drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c +39 -39
@@ -240,8 +240,8 @@ cfs_cpt_weight(struct cfs_cpt_table *cptab, int cpt)LASSERT (cpt ==CFS_CPT_ANY || (cpt >=0 && cpt < cptab->ctb_nparts));return cpt ==CFS_CPT_ANY ? -cpus_weight (*cptab->ctb_cpumask) : -cpus_weight (*cptab->ctb_parts[cpt].cpt_cpumask); +cpumask_weight (cptab->ctb_cpumask) : +cpumask_weight (cptab->ctb_parts[cpt].cpt_cpumask); }EXPORT_SYMBOL (cfs_cpt_weight);
@@ -251,8 +251,8 @@ cfs_cpt_online(struct cfs_cpt_table *cptab, int cpt)LASSERT (cpt ==CFS_CPT_ANY || (cpt >=0 && cpt < cptab->ctb_nparts));return cpt ==CFS_CPT_ANY ? -any_online_cpu (*cptab->ctb_cpumask) !=NR_CPUS : -any_online_cpu (*cptab->ctb_parts[cpt].cpt_cpumask) !=NR_CPUS ; +any_online_cpu (*cptab->ctb_cpumask) < nr_cpu_ids : +any_online_cpu (*cptab->ctb_parts[cpt].cpt_cpumask) < nr_cpu_ids; }EXPORT_SYMBOL (cfs_cpt_online);
@@ -283,7 +283,7 @@ cfs_cpt_set_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu)LASSERT (cpt >=0 && cpt < cptab->ctb_nparts); -if (cpu <0 || cpu >=NR_CPUS || !cpu_online (cpu)) { +if (cpu <0 || cpu >= nr_cpu_ids || !cpu_online (cpu)) {CDEBUG (D_INFO ,"CPU %d is invalid or it's offline\n" , cpu);return 0 ; }
@@ -296,11 +296,11 @@ cfs_cpt_set_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu) cptab->ctb_cpu2cpt[cpu] = cpt; -LASSERT (!cpu_isset (cpu, *cptab->ctb_cpumask)); -LASSERT (!cpu_isset (cpu, *cptab->ctb_parts[cpt].cpt_cpumask)); +LASSERT (!cpumask_test_cpu (cpu, cptab->ctb_cpumask)); +LASSERT (!cpumask_test_cpu (cpu, cptab->ctb_parts[cpt].cpt_cpumask)); -cpu_set (cpu, *cptab->ctb_cpumask); -cpu_set (cpu, *cptab->ctb_parts[cpt].cpt_cpumask); +cpumask_set_cpu (cpu, cptab->ctb_cpumask); +cpumask_set_cpu (cpu, cptab->ctb_parts[cpt].cpt_cpumask); node =cpu_to_node (cpu);
@@ -324,7 +324,7 @@ cfs_cpt_unset_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu)LASSERT (cpt ==CFS_CPT_ANY || (cpt >=0 && cpt < cptab->ctb_nparts)); -if (cpu <0 || cpu >=NR_CPUS ) { +if (cpu <0 || cpu >= nr_cpu_ids) {CDEBUG (D_INFO ,"Invalid CPU id %d\n" , cpu);return ; }
@@ -344,11 +344,11 @@ cfs_cpt_unset_cpu(struct cfs_cpt_table *cptab, int cpt, int cpu)return ; } -LASSERT (cpu_isset (cpu, *cptab->ctb_parts[cpt].cpt_cpumask)); -LASSERT (cpu_isset (cpu, *cptab->ctb_cpumask)); +LASSERT (cpumask_test_cpu (cpu, cptab->ctb_parts[cpt].cpt_cpumask)); +LASSERT (cpumask_test_cpu (cpu, cptab->ctb_cpumask)); -cpu_clear (cpu, *cptab->ctb_parts[cpt].cpt_cpumask); -cpu_clear (cpu, *cptab->ctb_cpumask); +cpumask_clear_cpu (cpu, cptab->ctb_parts[cpt].cpt_cpumask); +cpumask_clear_cpu (cpu, cptab->ctb_cpumask); cptab->ctb_cpu2cpt[cpu] =-1 ; node =cpu_to_node (cpu);
@@ -383,7 +383,7 @@ cfs_cpt_set_cpumask(struct cfs_cpt_table *cptab, int cpt, cpumask_t *mask) {int i; -if (cpus_weight (*mask) ==0 ||any_online_cpu (*mask) ==NR_CPUS ) { +if (cpumask_weight (mask) ==0 ||any_online_cpu (*mask) >= nr_cpu_ids) {CDEBUG (D_INFO ,"No online CPU is found in the CPU mask for CPU partition %d\n" , cpt);return 0 ;
@@ -554,7 +554,7 @@ EXPORT_SYMBOL(cfs_cpt_current);int cfs_cpt_of_cpu (struct cfs_cpt_table *cptab,int cpu) { -LASSERT (cpu >=0 && cpu <NR_CPUS ); +LASSERT (cpu >=0 && cpu < nr_cpu_ids);return cptab->ctb_cpu2cpt[cpu]; }
@@ -578,14 +578,14 @@ cfs_cpt_bind(struct cfs_cpt_table *cptab, int cpt) nodemask = cptab->ctb_parts[cpt].cpt_nodemask; } -if (any_online_cpu (*cpumask) ==NR_CPUS ) { +if (any_online_cpu (*cpumask) >= nr_cpu_ids) {CERROR ("No online CPU found in CPU partition %d, did someone do CPU hotplug on system? You might need to reload Lustre modules to keep system working well.\n" , cpt);return -EINVAL ; }for_each_online_cpu (i) { -if (cpu_isset (i, *cpumask)) +if (cpumask_test_cpu (i, cpumask))continue ; rc =set_cpus_allowed_ptr (current, cpumask);
@@ -616,14 +616,14 @@ cfs_cpt_choose_ncpus(struct cfs_cpt_table *cptab, int cpt,LASSERT (number >0 ); -if (number >=cpus_weight (*node)) { -while (!cpus_empty (*node)) { - cpu =first_cpu (*node); +if (number >=cpumask_weight (node)) { +while (!cpumask_empty (node)) { + cpu =cpumask_first (node); rc =cfs_cpt_set_cpu (cptab, cpt, cpu);if (!rc)return -EINVAL ; -cpu_clear (cpu, *node); +cpumask_clear_cpu (cpu, node); }return 0 ; }
@@ -636,27 +636,27 @@ cfs_cpt_choose_ncpus(struct cfs_cpt_table *cptab, int cpt, goto out; } -while (!cpus_empty (*node)) { - cpu =first_cpu (*node); +while (!cpumask_empty (node)) { + cpu =cpumask_first (node);/* get cpumask for cores in the same socket */ cfs_cpu_core_siblings (cpu, socket); -cpus_and (*socket, *socket, *node); +cpumask_and (socket, socket, node); -LASSERT (!cpus_empty (*socket)); +LASSERT (!cpumask_empty (socket)); -while (!cpus_empty (*socket)) { +while (!cpumask_empty (socket)) {int i;/* get cpumask for hts in the same core */ cfs_cpu_ht_siblings (cpu, core); -cpus_and (*core, *core, *node); +cpumask_and (core, core, node); -LASSERT (!cpus_empty (*core)); +LASSERT (!cpumask_empty (core));for_each_cpu_mask (i, *core) { -cpu_clear (i, *socket); -cpu_clear (i, *node); +cpumask_clear_cpu (i, socket); +cpumask_clear_cpu (i, node); rc =cfs_cpt_set_cpu (cptab, cpt, i);if (!rc) {
@@ -667,7 +667,7 @@ cfs_cpt_choose_ncpus(struct cfs_cpt_table *cptab, int cpt,if (--number ==0 ) goto out; } - cpu =first_cpu (*socket); + cpu =cpumask_first (socket); } }
@@ -767,7 +767,7 @@ cfs_cpt_table_create(int ncpt)for_each_online_node (i) {cfs_node_to_cpumask (i, mask); -while (!cpus_empty (*mask)) { +while (!cpumask_empty (mask)) {struct cfs_cpu_partition *part;int n;
@@ -776,24 +776,24 @@ cfs_cpt_table_create(int ncpt) part = &cptab->ctb_parts[cpt]; - n = num -cpus_weight (*part->cpt_cpumask); + n = num -cpumask_weight (part->cpt_cpumask);LASSERT (n >0 ); rc =cfs_cpt_choose_ncpus (cptab, cpt, mask, n);if (rc <0 ) goto failed; -LASSERT (num >=cpus_weight (*part->cpt_cpumask)); -if (num ==cpus_weight (*part->cpt_cpumask)) +LASSERT (num >=cpumask_weight (part->cpt_cpumask)); +if (num ==cpumask_weight (part->cpt_cpumask)) cpt++; } }if (cpt != ncpt || - num !=cpus_weight (*cptab->ctb_parts[ncpt -1 ].cpt_cpumask)) { + num !=cpumask_weight (cptab->ctb_parts[ncpt -1 ].cpt_cpumask)) {CERROR ("Expect %d(%d) CPU partitions but got %d(%d), CPU hotplug/unplug while setting?\n" , cptab->ctb_nparts, num, cpt, -cpus_weight (*cptab->ctb_parts[ncpt -1 ].cpt_cpumask)); +cpumask_weight (cptab->ctb_parts[ncpt -1 ].cpt_cpumask)); goto failed; }
@@ -845,7 +845,7 @@ cfs_cpt_table_create_pattern(char *pattern)return NULL ; } - high = node ?MAX_NUMNODES -1 :NR_CPUS -1 ; + high = node ?MAX_NUMNODES -1 : nr_cpu_ids -1 ; cptab =cfs_cpt_table_alloc (ncpt);if (cptab ==NULL ) {
Signature · 1 line
2.1.0