infiniband, ipath: convert old cpumask api into new one
PATCH 1/1 infiniband, ipath: convert old cpumask api into new one
Adapt new api. we plan to remove old one later. Almost change are trivial. but there is one real fix. following code is unsafe.
int ncpus = num_online_cpus()
for (i = 0; i < ncpus; i++) {
..
}because 1) we don't guarantee last bit of online cpus is equal to num_online_cpus(). some arch assign sparse cpu number.
2) cpu hotplugging may change cpu_online_mask at same time. we need to pin it by get_online_cpus().
--- drivers/infiniband/hw/ipath/ipath_file_ops.c | 11 +++++++---- 1 files changed, 7 insertions(+), 4 deletions(-)
drivers/infiniband/hw/ipath/ipath_file_ops.c +7 -4
@@ -40,6 +40,7 @@#include <linux/highmem.h> #include <linux/io.h> #include <linux/jiffies.h> +#include <linux/cpu.h> #include <asm/pgtable.h> #include "ipath_kernel.h"
@@ -1684,17 +1685,19 @@ static int find_best_unit(struct file *fp,* information. There may be some issues with dual core numbering * as well. This needs more work prior to release. */ -if (!cpumask_empty (¤t->cpus_allowed) && - !cpumask_full (¤t->cpus_allowed)) { +if (!cpumask_empty (tsk_cpus_allowed (current)) && + !cpumask_full (tsk_cpus_allowed (current))) {int ncpus =num_online_cpus (), curcpu =-1 , nset =0 ; -for (i =0 ; i < ncpus; i++) -if (cpumask_test_cpu (i, ¤t->cpus_allowed)) { +get_online_cpus (); +for_each_online_cpu (i) +if (cpumask_test_cpu (i,tsk_cpus_allowed (current))) {ipath_cdbg (PROC ,"%s[%u] affinity set for " "cpu %d/%d\n" , current->comm, current->pid, i, ncpus); curcpu = i; nset++; } +put_online_cpus ();if (curcpu !=-1 && nset != ncpus) {if (npresent) { prefunit = curcpu / (ncpus / npresent);
Signature · 7 lines
1.7.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 11 lines
Subject: [PATCH] infiniband, ipath: convert old cpumask api into new one
Adapt new api. we plan to remove old one later. Almost change are trivial. but there is one real fix. following code is unsafe.
int ncpus = num_online_cpus() for (i = 0; i < ncpus; i++) { .. }
Thanks for the patch!
This message and any attached documents contain information from QLogic Corporation or its wholly-owned subsidiaries that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html