IB/hfi1: Avoid credit return allocation for cpu-less NUMA nodes
Do not allocate credit return base and DMA memory for NUMA nodes without CPUs. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
0771da5a6e
commit
9d8145a604
@ -125,6 +125,7 @@ int node_affinity_init(void)
|
|||||||
cpumask_weight(topology_sibling_cpumask(
|
cpumask_weight(topology_sibling_cpumask(
|
||||||
cpumask_first(&node_affinity.proc.mask)
|
cpumask_first(&node_affinity.proc.mask)
|
||||||
));
|
));
|
||||||
|
node_affinity.num_possible_nodes = num_possible_nodes();
|
||||||
node_affinity.num_online_nodes = num_online_nodes();
|
node_affinity.num_online_nodes = num_online_nodes();
|
||||||
node_affinity.num_online_cpus = num_online_cpus();
|
node_affinity.num_online_cpus = num_online_cpus();
|
||||||
|
|
||||||
@ -135,7 +136,7 @@ int node_affinity_init(void)
|
|||||||
*/
|
*/
|
||||||
init_real_cpu_mask();
|
init_real_cpu_mask();
|
||||||
|
|
||||||
hfi1_per_node_cntr = kcalloc(num_possible_nodes(),
|
hfi1_per_node_cntr = kcalloc(node_affinity.num_possible_nodes,
|
||||||
sizeof(*hfi1_per_node_cntr), GFP_KERNEL);
|
sizeof(*hfi1_per_node_cntr), GFP_KERNEL);
|
||||||
if (!hfi1_per_node_cntr)
|
if (!hfi1_per_node_cntr)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -111,6 +111,7 @@ struct hfi1_affinity_node_list {
|
|||||||
struct cpumask real_cpu_mask;
|
struct cpumask real_cpu_mask;
|
||||||
struct cpu_mask_set proc;
|
struct cpu_mask_set proc;
|
||||||
int num_core_siblings;
|
int num_core_siblings;
|
||||||
|
int num_possible_nodes;
|
||||||
int num_online_nodes;
|
int num_online_nodes;
|
||||||
int num_online_cpus;
|
int num_online_cpus;
|
||||||
struct mutex lock; /* protects affinity nodes */
|
struct mutex lock; /* protects affinity nodes */
|
||||||
|
@ -2036,21 +2036,10 @@ freesc15:
|
|||||||
int init_credit_return(struct hfi1_devdata *dd)
|
int init_credit_return(struct hfi1_devdata *dd)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int num_numa;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
num_numa = num_online_nodes();
|
|
||||||
/* enforce the expectation that the numas are compact */
|
|
||||||
for (i = 0; i < num_numa; i++) {
|
|
||||||
if (!node_online(i)) {
|
|
||||||
dd_dev_err(dd, "NUMA nodes are not compact\n");
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dd->cr_base = kcalloc(
|
dd->cr_base = kcalloc(
|
||||||
num_numa,
|
node_affinity.num_possible_nodes,
|
||||||
sizeof(struct credit_return_base),
|
sizeof(struct credit_return_base),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!dd->cr_base) {
|
if (!dd->cr_base) {
|
||||||
@ -2058,7 +2047,7 @@ int init_credit_return(struct hfi1_devdata *dd)
|
|||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
for (i = 0; i < num_numa; i++) {
|
for_each_node_with_cpus(i) {
|
||||||
int bytes = TXE_NUM_CONTEXTS * sizeof(struct credit_return);
|
int bytes = TXE_NUM_CONTEXTS * sizeof(struct credit_return);
|
||||||
|
|
||||||
set_dev_node(&dd->pcidev->dev, i);
|
set_dev_node(&dd->pcidev->dev, i);
|
||||||
@ -2085,14 +2074,11 @@ done:
|
|||||||
|
|
||||||
void free_credit_return(struct hfi1_devdata *dd)
|
void free_credit_return(struct hfi1_devdata *dd)
|
||||||
{
|
{
|
||||||
int num_numa;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!dd->cr_base)
|
if (!dd->cr_base)
|
||||||
return;
|
return;
|
||||||
|
for (i = 0; i < node_affinity.num_possible_nodes; i++) {
|
||||||
num_numa = num_online_nodes();
|
|
||||||
for (i = 0; i < num_numa; i++) {
|
|
||||||
if (dd->cr_base[i].va) {
|
if (dd->cr_base[i].va) {
|
||||||
dma_free_coherent(&dd->pcidev->dev,
|
dma_free_coherent(&dd->pcidev->dev,
|
||||||
TXE_NUM_CONTEXTS *
|
TXE_NUM_CONTEXTS *
|
||||||
|
Loading…
Reference in New Issue
Block a user