All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@kernel.dk>,
	Christoph Hellwig <hch@infradead.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org
Cc: linux-block@vger.kernel.org,
	Laurence Oberman <loberman@redhat.com>,
	Ming Lei <ming.lei@redhat.com>
Subject: [PATCH V3 3/4] genirq/affinity: support to do irq vectors spread starting from any vector
Date: Thu,  8 Mar 2018 18:53:57 +0800	[thread overview]
Message-ID: <20180308105358.1506-4-ming.lei@redhat.com> (raw)
In-Reply-To: <20180308105358.1506-1-ming.lei@redhat.com>

Now two parameters(start_vec, affv) are introduced to irq_build_affinity_masks(),
then this helper can build the affinity of each irq vector starting from
the irq vector of 'start_vec', and handle at most 'affv' vectors.

This way is required to do 2-stages irq vectors spread among all
possible CPUs.

Cc: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
 kernel/irq/affinity.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
index e119e86bed48..616f040c5d02 100644
--- a/kernel/irq/affinity.c
+++ b/kernel/irq/affinity.c
@@ -94,17 +94,17 @@ static int get_nodes_in_cpumask(cpumask_var_t *node_to_cpumask,
 	return nodes;
 }
 
-static int irq_build_affinity_masks(int nvecs, const struct irq_affinity *affd,
+static int irq_build_affinity_masks(const struct irq_affinity *affd,
+				    int start_vec, int affv,
 				    cpumask_var_t *node_to_cpumask,
 				    const struct cpumask *cpu_mask,
 				    struct cpumask *nmsk,
 				    struct cpumask *masks)
 {
-	int affv = nvecs - affd->pre_vectors - affd->post_vectors;
 	int last_affv = affv + affd->pre_vectors;
-	int curvec = affd->pre_vectors;
+	int curvec = start_vec;
 	nodemask_t nodemsk = NODE_MASK_NONE;
-	int n, nodes, cpus_per_vec, extra_vecs;
+	int n, nodes, cpus_per_vec, extra_vecs, done = 0;
 
 	nodes = get_nodes_in_cpumask(node_to_cpumask, cpu_mask, &nodemsk);
 
@@ -116,8 +116,10 @@ static int irq_build_affinity_masks(int nvecs, const struct irq_affinity *affd,
 		for_each_node_mask(n, nodemsk) {
 			cpumask_copy(masks + curvec,
 				     node_to_cpumask[n]);
-			if (++curvec == last_affv)
+			if (++done == affv)
 				break;
+			if (++curvec == last_affv)
+				curvec = affd->pre_vectors;
 		}
 		goto out;
 	}
@@ -150,13 +152,16 @@ static int irq_build_affinity_masks(int nvecs, const struct irq_affinity *affd,
 			irq_spread_init_one(masks + curvec, nmsk, cpus_per_vec);
 		}
 
-		if (curvec >= last_affv)
+		done += v;
+		if (done >= affv)
 			break;
+		if (curvec >= last_affv)
+			curvec = affd->pre_vectors;
 		--nodes;
 	}
 
 out:
-	return curvec - affd->pre_vectors;
+	return done;
 }
 
 /**
@@ -169,6 +174,7 @@ static int irq_build_affinity_masks(int nvecs, const struct irq_affinity *affd,
 struct cpumask *
 irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
 {
+	int affv = nvecs - affd->pre_vectors - affd->post_vectors;
 	int curvec;
 	struct cpumask *masks;
 	cpumask_var_t nmsk, *node_to_cpumask;
@@ -198,7 +204,8 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
 	/* Stabilize the cpumasks */
 	get_online_cpus();
 	build_node_to_cpumask(node_to_cpumask);
-	curvec += irq_build_affinity_masks(nvecs, affd, node_to_cpumask,
+	curvec += irq_build_affinity_masks(affd, curvec, affv,
+					   node_to_cpumask,
 					   cpu_possible_mask, nmsk, masks);
 	put_online_cpus();
 
-- 
2.9.5

  parent reply	other threads:[~2018-03-08 10:53 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-08 10:53 [PATCH V3 0/4] genirq/affinity: irq vector spread among online CPUs as far as possible Ming Lei
2018-03-08 10:53 ` [PATCH V3 1/4] genirq/affinity: rename *node_to_possible_cpumask as *node_to_cpumask Ming Lei
2018-04-06 21:52   ` [tip:irq/core] genirq/affinity: Rename " tip-bot for Ming Lei
2018-03-08 10:53 ` [PATCH V3 2/4] genirq/affinity: move actual irq vector spread into one helper Ming Lei
2018-04-06 21:53   ` [tip:irq/core] genirq/affinity: Move actual irq vector spreading into a helper function tip-bot for Ming Lei
2018-03-08 10:53 ` Ming Lei [this message]
2018-04-06 21:53   ` [tip:irq/core] genirq/affinity: Allow irq spreading from a given starting point tip-bot for Ming Lei
2018-03-08 10:53 ` [PATCH V3 4/4] genirq/affinity: irq vector spread among online CPUs as far as possible Ming Lei
2018-04-03 13:32   ` Thomas Gleixner
2018-04-03 16:00     ` Ming Lei
2018-04-04  8:25       ` Thomas Gleixner
2018-04-04 12:45         ` Thomas Gleixner
2018-04-04 15:20           ` Ming Lei
2018-04-05 10:12             ` Thomas Gleixner
2018-04-04 15:08         ` Ming Lei
2018-04-04 19:38           ` Thomas Gleixner
2018-04-06  9:13             ` Ming Lei
2018-04-06  9:46               ` Thomas Gleixner
2018-04-06 21:49                 ` Thomas Gleixner
2018-04-08  3:19                   ` Ming Lei
2018-04-06 21:54   ` [tip:irq/core] genirq/affinity: Spread irq vectors among present " tip-bot for Ming Lei
2018-03-08 13:18 ` [PATCH V3 0/4] genirq/affinity: irq vector spread among online " Artem Bityutskiy
2018-03-08 13:25   ` Artem Bityutskiy
2018-03-08 13:34   ` Ming Lei
2018-03-08 23:20     ` Thomas Gleixner
2018-03-09  1:24       ` Ming Lei
2018-03-09  7:00         ` Artem Bityutskiy
2018-03-09  7:33           ` Ming Lei
2018-03-09 10:08         ` Thomas Gleixner
2018-03-09 12:08           ` Ming Lei
2018-03-09 15:08             ` Thomas Gleixner
2018-03-13  3:11               ` Dou Liyang
2018-03-13  7:38                 ` Artem Bityutskiy
2018-03-13  7:38                   ` Artem Bityutskiy
2018-03-13  8:35                   ` Ming Lei
2018-03-13  8:39                     ` Artem Bityutskiy
2018-03-13  8:39                       ` Artem Bityutskiy
2018-03-13  9:35                       ` Rafael J. Wysocki
2018-03-14  3:29                         ` Dou Liyang
2018-03-14  4:11                           ` Dou Liyang
2018-03-14  9:07                             ` Artem Bityutskiy
2018-03-14  9:47                               ` Dou Liyang
2018-03-13  9:25                 ` Rafael J. Wysocki
2018-03-14  3:30                   ` Dou Liyang
2018-03-30  3:15               ` Ming Lei
2018-04-03 12:55                 ` Thomas Gleixner
2018-03-26  8:39   ` Thorsten Leemhuis
2018-03-28  6:15     ` Artem Bityutskiy

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=20180308105358.1506-4-ming.lei@redhat.com \
    --to=ming.lei@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loberman@redhat.com \
    --cc=tglx@linutronix.de \
    /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.