diff options
author | Bryan O'Sullivan <bos@pathscale.com> | 2007-03-15 17:45:13 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-04-18 23:20:59 -0400 |
commit | f0810daf74c564a3615eba5002cc11c21a0949ba (patch) | |
tree | 18632304f226fbb060e52ff601939470eafa9aa1 /drivers/infiniband/hw/ipath | |
parent | 662af5813be9aadf95ca310b7b6d1d37070c9922 (diff) |
IB/ipath: Fix unit selection when all CPU affinity bits set
At some point things changed so that all the affinity bits can be set,
but cpus_full() macro is not true. This caused problems with the unit
selection logic on multi-unit (board) configurations.
Signed-off-by: Dave Olson <dave.olson@qlogic.com>
Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/hw/ipath')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_file_ops.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_file_ops.c b/drivers/infiniband/hw/ipath/ipath_file_ops.c index 9ca582b65fe9..1272aaf2a785 100644 --- a/drivers/infiniband/hw/ipath/ipath_file_ops.c +++ b/drivers/infiniband/hw/ipath/ipath_file_ops.c | |||
@@ -1592,15 +1592,16 @@ static int find_best_unit(struct file *fp, | |||
1592 | */ | 1592 | */ |
1593 | if (!cpus_empty(current->cpus_allowed) && | 1593 | if (!cpus_empty(current->cpus_allowed) && |
1594 | !cpus_full(current->cpus_allowed)) { | 1594 | !cpus_full(current->cpus_allowed)) { |
1595 | int ncpus = num_online_cpus(), curcpu = -1; | 1595 | int ncpus = num_online_cpus(), curcpu = -1, nset = 0; |
1596 | for (i = 0; i < ncpus; i++) | 1596 | for (i = 0; i < ncpus; i++) |
1597 | if (cpu_isset(i, current->cpus_allowed)) { | 1597 | if (cpu_isset(i, current->cpus_allowed)) { |
1598 | ipath_cdbg(PROC, "%s[%u] affinity set for " | 1598 | ipath_cdbg(PROC, "%s[%u] affinity set for " |
1599 | "cpu %d\n", current->comm, | 1599 | "cpu %d/%d\n", current->comm, |
1600 | current->pid, i); | 1600 | current->pid, i, ncpus); |
1601 | curcpu = i; | 1601 | curcpu = i; |
1602 | nset++; | ||
1602 | } | 1603 | } |
1603 | if (curcpu != -1) { | 1604 | if (curcpu != -1 && nset != ncpus) { |
1604 | if (npresent) { | 1605 | if (npresent) { |
1605 | prefunit = curcpu / (ncpus / npresent); | 1606 | prefunit = curcpu / (ncpus / npresent); |
1606 | ipath_cdbg(PROC,"%s[%u] %d chips, %d cpus, " | 1607 | ipath_cdbg(PROC,"%s[%u] %d chips, %d cpus, " |