From: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Ira Weiny <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Sebastian Sanchez
<sebastian.sanchez-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Tadeusz Struk
<tadeusz.struk-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: [PATCH 02/20] IB/hfi1: Remove hyper-thread siblings by walking CPU mask
Date: Sun, 09 Apr 2017 10:15:38 -0700 [thread overview]
Message-ID: <20170409171537.10579.68545.stgit@scvm10.sc.intel.com> (raw)
In-Reply-To: <20170409171329.10579.92775.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
From: Sebastian Sanchez <sebastian.sanchez-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
The driver expects that hyper-thread siblings are
allocated in blocks. This might not be a safe assumption.
Walk through the "real_cpu_mask" picking up CPUs and
removing its siblings instead of relying on the sibling
CPUs being contiguous in the CPU mask.
Reviewed-by: Tadeusz Struk <tadeusz.struk-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Reviewed-by: Ira Weiny <ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Sebastian Sanchez <sebastian.sanchez-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
drivers/infiniband/hw/hfi1/affinity.c | 52 +++++++++++++++------------------
drivers/infiniband/hw/hfi1/affinity.h | 4 +--
2 files changed, 25 insertions(+), 31 deletions(-)
diff --git a/drivers/infiniband/hw/hfi1/affinity.c b/drivers/infiniband/hw/hfi1/affinity.c
index e2cd2cd..3679959 100644
--- a/drivers/infiniband/hw/hfi1/affinity.c
+++ b/drivers/infiniband/hw/hfi1/affinity.c
@@ -1,5 +1,5 @@
/*
- * Copyright(c) 2015, 2016 Intel Corporation.
+ * Copyright(c) 2015-2017 Intel Corporation.
*
* This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license.
@@ -78,37 +78,32 @@ static inline void init_cpu_mask_set(struct cpu_mask_set *set)
}
/* Initialize non-HT cpu cores mask */
-void init_real_cpu_mask(void)
+static int init_real_cpu_mask(void)
{
- int possible, curr_cpu, i, ht;
+ int curr_cpu, ret;
+ cpumask_var_t sibling_mask;
+ struct cpumask *real_cpu_mask = &node_affinity.real_cpu_mask;
- cpumask_clear(&node_affinity.real_cpu_mask);
+ ret = zalloc_cpumask_var(&sibling_mask, GFP_KERNEL);
+ if (!ret)
+ return -ENOMEM;
- /* Start with cpu online mask as the real cpu mask */
- cpumask_copy(&node_affinity.real_cpu_mask, cpu_online_mask);
+ cpumask_clear(real_cpu_mask);
- /*
- * Remove HT cores from the real cpu mask. Do this in two steps below.
- */
- possible = cpumask_weight(&node_affinity.real_cpu_mask);
- ht = cpumask_weight(topology_sibling_cpumask(
- cpumask_first(&node_affinity.real_cpu_mask)));
- /*
- * Step 1. Skip over the first N HT siblings and use them as the
- * "real" cores. Assumes that HT cores are not enumerated in
- * succession (except in the single core case).
- */
- curr_cpu = cpumask_first(&node_affinity.real_cpu_mask);
- for (i = 0; i < possible / ht; i++)
- curr_cpu = cpumask_next(curr_cpu, &node_affinity.real_cpu_mask);
- /*
- * Step 2. Remove the remaining HT siblings. Use cpumask_next() to
- * skip any gaps.
- */
- for (; i < possible; i++) {
- cpumask_clear_cpu(curr_cpu, &node_affinity.real_cpu_mask);
- curr_cpu = cpumask_next(curr_cpu, &node_affinity.real_cpu_mask);
+ /* Start with cpu online mask as the real cpu mask */
+ cpumask_copy(real_cpu_mask, cpu_online_mask);
+
+ /* Remove HT cores from the real cpu mask */
+ curr_cpu = cpumask_first(real_cpu_mask);
+ while (curr_cpu < nr_cpu_ids) {
+ cpumask_copy(sibling_mask, topology_sibling_cpumask(curr_cpu));
+ cpumask_clear_cpu(curr_cpu, sibling_mask);
+ cpumask_andnot(real_cpu_mask, real_cpu_mask, sibling_mask);
+ curr_cpu = cpumask_next(curr_cpu, real_cpu_mask);
}
+
+ free_cpumask_var(sibling_mask);
+ return 0;
}
int node_affinity_init(void)
@@ -134,7 +129,8 @@ int node_affinity_init(void)
* initialized early. It is needed to calculate the number of user
* contexts in set_up_context_variables().
*/
- init_real_cpu_mask();
+ if (init_real_cpu_mask())
+ return -ENOMEM;
hfi1_per_node_cntr = kcalloc(node_affinity.num_possible_nodes,
sizeof(*hfi1_per_node_cntr), GFP_KERNEL);
diff --git a/drivers/infiniband/hw/hfi1/affinity.h b/drivers/infiniband/hw/hfi1/affinity.h
index e78c7aa..096866e 100644
--- a/drivers/infiniband/hw/hfi1/affinity.h
+++ b/drivers/infiniband/hw/hfi1/affinity.h
@@ -1,5 +1,5 @@
/*
- * Copyright(c) 2015, 2016 Intel Corporation.
+ * Copyright(c) 2015-2017 Intel Corporation.
*
* This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license.
@@ -72,8 +72,6 @@ struct cpu_mask_set {
struct hfi1_msix_entry;
-/* Initialize non-HT cpu cores mask */
-void init_real_cpu_mask(void);
/* Initialize driver affinity data */
int hfi1_dev_affinity_init(struct hfi1_devdata *);
/*
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-04-09 17:15 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-09 17:15 [PATCH 00/20] IB/hfi1,rdmavt,core: Patches for-next Dennis Dalessandro
2017-04-09 17:15 ` Dennis Dalessandro
[not found] ` <20170409171329.10579.92775.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2017-04-09 17:15 ` [PATCH 01/20] IB/core: If the MGID/MLID pair is not on the list return an error Dennis Dalessandro
2017-04-09 17:15 ` Dennis Dalessandro
2017-04-09 17:15 ` Dennis Dalessandro [this message]
[not found] ` <20170409171537.10579.68545.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2017-04-10 7:49 ` [PATCH 02/20] IB/hfi1: Remove hyper-thread siblings by walking CPU mask Christoph Hellwig
[not found] ` <20170410074904.GA26626-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2017-04-20 17:20 ` Sanchez, Sebastian
[not found] ` <5CDA63463B33C94CA80846587415F07704076B86-8oqHQFITsIGkrb+BlOpmy7fspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-04-20 17:34 ` Leon Romanovsky
[not found] ` <20170420173420.GR14088-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-04-21 10:48 ` Christoph Hellwig
2017-04-09 17:15 ` [PATCH 03/20] IB/hfi1: Correct MulticastMask/CollectiveMask info to SMA output Dennis Dalessandro
2017-04-09 17:15 ` [PATCH 04/20] IB/core: For multicast functions, verify that LIDs are multicast LIDs Dennis Dalessandro
2017-04-09 17:15 ` Dennis Dalessandro
2017-04-15 15:01 ` Leon Romanovsky
2017-04-09 17:15 ` [PATCH 05/20] IB/rdmavt/hfi1/qib: Use the MGID and MLID for multicast addressing Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 06/20] IB/hfi1: Validate the TID count before using it Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 07/20] IB/hfi1: Return SC2VL mappings to FM with VL15 instead of ILLEGAL_VL Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 08/20] IB/hfi1: Rename hdr2sc to hfi1_9B_get_sc5 Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 09/20] IB/hfi1: Add functions to parse 9B headers Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 10/20] IB/hfi1: Use defines from common headers Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 11/20] IB/hfi1: Prevent kernel QP post send hard lockups Dennis Dalessandro
2017-04-09 17:16 ` Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 12/20] IB/hfi1: Fix softlockup issue Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 13/20] IB/hfi1: Adjust high temperature warning for QSFP cable Dennis Dalessandro
[not found] ` <20170409171646.10579.73509.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2017-04-28 17:43 ` Doug Ledford
2017-04-09 17:16 ` [PATCH 14/20] IB/hfi1: Cache neighbor secure data after link up Dennis Dalessandro
2017-04-09 17:16 ` [PATCH 15/20] IB/hfi1: Permanently enable P_Key checking in HFI Dennis Dalessandro
[not found] ` <20170409171658.10579.67996.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2017-04-15 14:53 ` Leon Romanovsky
[not found] ` <20170415145317.GM1343-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-05-29 23:16 ` Dennis Dalessandro
2017-04-09 17:17 ` [PATCH 16/20] IB/hfi1: Fix misspelling in comment Dennis Dalessandro
2017-04-09 17:17 ` [PATCH 17/20] IB/hfi1: Convert %Lx to %llx Dennis Dalessandro
2017-04-09 17:17 ` [PATCH 18/20] IB/hfi1: Fix unbalanced braces around else Dennis Dalessandro
[not found] ` <20170409171717.10579.36147.stgit-9QXIwq+3FY+1XWohqUldA0EOCMrvLtNR@public.gmane.org>
2017-04-13 6:03 ` Leon Romanovsky
[not found] ` <20170413060343.GC1343-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-04-18 15:15 ` Dennis Dalessandro
2017-04-09 17:17 ` [PATCH 19/20] IB/hfi: Protect against writable mmap Dennis Dalessandro
2017-04-09 17:17 ` [PATCH 20/20] IB/hfi1: Use bool in process_ecn Dennis Dalessandro
2017-04-28 17:45 ` [PATCH 00/20] IB/hfi1,rdmavt,core: Patches for-next Doug Ledford
[not found] ` <1493401510.3041.164.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-04-28 17:50 ` Dennis Dalessandro
2017-04-28 17:50 ` Dennis Dalessandro
2017-04-28 18:09 ` Doug Ledford
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170409171537.10579.68545.stgit@scvm10.sc.intel.com \
--to=dennis.dalessandro-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=ira.weiny-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=sebastian.sanchez-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=tadeusz.struk-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.