From: Ming Lei <ming.lei@redhat.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 11/14] irq: add support for allocating (and affinitizing) sets of IRQs
Date: Tue, 30 Oct 2018 17:25:11 +0800 [thread overview]
Message-ID: <20181030092510.GB13582@ming.t460p> (raw)
In-Reply-To: <20181029163738.10172-12-axboe@kernel.dk>
On Mon, Oct 29, 2018 at 10:37:35AM -0600, Jens Axboe wrote:
> A driver may have a need to allocate multiple sets of MSI/MSI-X
> interrupts, and have them appropriately affinitized. Add support for
> defining a number of sets in the irq_affinity structure, of varying
> sizes, and get each set affinitized correctly across the machine.
>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: linux-kernel@vger.kernel.org
> Reviewed-by: Hannes Reinecke <hare@suse.com>
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> ---
> include/linux/interrupt.h | 4 ++++
> kernel/irq/affinity.c | 40 ++++++++++++++++++++++++++++++---------
> 2 files changed, 35 insertions(+), 9 deletions(-)
>
> diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
> index 1d6711c28271..ca397ff40836 100644
> --- a/include/linux/interrupt.h
> +++ b/include/linux/interrupt.h
> @@ -247,10 +247,14 @@ struct irq_affinity_notify {
> * the MSI(-X) vector space
> * @post_vectors: Don't apply affinity to @post_vectors at end of
> * the MSI(-X) vector space
> + * @nr_sets: Length of passed in *sets array
> + * @sets: Number of affinitized sets
> */
> struct irq_affinity {
> int pre_vectors;
> int post_vectors;
> + int nr_sets;
> + int *sets;
> };
>
> #if defined(CONFIG_SMP)
> diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c
> index f4f29b9d90ee..2046a0f0f0f1 100644
> --- a/kernel/irq/affinity.c
> +++ b/kernel/irq/affinity.c
> @@ -180,6 +180,7 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
> int curvec, usedvecs;
> cpumask_var_t nmsk, npresmsk, *node_to_cpumask;
> struct cpumask *masks = NULL;
> + int i, nr_sets;
>
> /*
> * If there aren't any vectors left after applying the pre/post
> @@ -210,10 +211,23 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd)
> get_online_cpus();
> build_node_to_cpumask(node_to_cpumask);
>
> - /* Spread on present CPUs starting from affd->pre_vectors */
> - usedvecs = irq_build_affinity_masks(affd, curvec, affvecs,
> - node_to_cpumask, cpu_present_mask,
> - nmsk, masks);
> + /*
> + * Spread on present CPUs starting from affd->pre_vectors. If we
> + * have multiple sets, build each sets affinity mask separately.
> + */
> + nr_sets = affd->nr_sets;
> + if (!nr_sets)
> + nr_sets = 1;
> +
> + for (i = 0, usedvecs = 0; i < nr_sets; i++) {
> + int this_vecs = affd->sets ? affd->sets[i] : affvecs;
> + int nr;
> +
> + nr = irq_build_affinity_masks(affd, curvec, this_vecs,
> + node_to_cpumask, cpu_present_mask,
> + nmsk, masks + usedvecs);
> + usedvecs += nr;
> + }
>
> /*
> * Spread on non present CPUs starting from the next vector to be
> @@ -258,13 +272,21 @@ int irq_calc_affinity_vectors(int minvec, int maxvec, const struct irq_affinity
> {
> int resv = affd->pre_vectors + affd->post_vectors;
> int vecs = maxvec - resv;
> - int ret;
> + int set_vecs;
>
> if (resv > minvec)
> return 0;
>
> - get_online_cpus();
> - ret = min_t(int, cpumask_weight(cpu_possible_mask), vecs) + resv;
> - put_online_cpus();
> - return ret;
> + if (affd->nr_sets) {
> + int i;
> +
> + for (i = 0, set_vecs = 0; i < affd->nr_sets; i++)
> + set_vecs += affd->sets[i];
> + } else {
> + get_online_cpus();
> + set_vecs = cpumask_weight(cpu_possible_mask);
> + put_online_cpus();
> + }
> +
> + return resv + min(set_vecs, vecs);
> }
> --
> 2.17.1
>
Looks fine:
Reviewed-by: Ming Lei <ming.lei@redhat.com>
--
Ming
next prev parent reply other threads:[~2018-10-30 9:25 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-29 16:37 [PATCHSET v2 0/14] blk-mq: Add support for multiple queue maps Jens Axboe
2018-10-29 16:37 ` [PATCH 01/14] blk-mq: kill q->mq_map Jens Axboe
2018-10-29 16:46 ` Bart Van Assche
2018-10-29 16:51 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 02/14] blk-mq: abstract out queue map Jens Axboe
2018-10-29 18:33 ` Bart Van Assche
2018-10-29 16:37 ` [PATCH 03/14] blk-mq: provide dummy blk_mq_map_queue_type() helper Jens Axboe
2018-10-29 17:22 ` Bart Van Assche
2018-10-29 17:27 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 04/14] blk-mq: pass in request/bio flags to queue mapping Jens Axboe
2018-10-29 17:30 ` Bart Van Assche
2018-10-29 17:33 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 05/14] blk-mq: allow software queue to map to multiple hardware queues Jens Axboe
2018-10-29 17:34 ` Bart Van Assche
2018-10-29 17:35 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 06/14] blk-mq: add 'type' attribute to the sysfs hctx directory Jens Axboe
2018-10-29 17:40 ` Bart Van Assche
2018-10-29 16:37 ` [PATCH 07/14] blk-mq: support multiple hctx maps Jens Axboe
2018-10-29 18:15 ` Bart Van Assche
2018-10-29 19:24 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 08/14] blk-mq: separate number of hardware queues from nr_cpu_ids Jens Axboe
2018-10-29 18:31 ` Bart Van Assche
2018-10-29 16:37 ` [PATCH 09/14] blk-mq: ensure that plug lists don't straddle hardware queues Jens Axboe
2018-10-29 19:27 ` Bart Van Assche
2018-10-29 19:30 ` Jens Axboe
2018-10-29 19:49 ` Jens Axboe
2018-10-30 8:08 ` Ming Lei
2018-10-30 17:22 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 10/14] blk-mq: initial support for multiple queue maps Jens Axboe
2018-10-29 19:40 ` Bart Van Assche
2018-10-29 19:53 ` Jens Axboe
2018-10-29 20:00 ` Bart Van Assche
2018-10-29 20:09 ` Jens Axboe
2018-10-29 20:25 ` Bart Van Assche
2018-10-29 20:29 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 11/14] irq: add support for allocating (and affinitizing) sets of IRQs Jens Axboe
2018-10-29 17:08 ` Thomas Gleixner
2018-10-29 17:09 ` Jens Axboe
2018-10-30 9:25 ` Ming Lei [this message]
2018-10-30 14:26 ` Keith Busch
2018-10-30 14:36 ` Jens Axboe
2018-10-30 14:45 ` Keith Busch
2018-10-30 14:53 ` Jens Axboe
2018-10-30 15:08 ` Keith Busch
2018-10-30 15:18 ` Jens Axboe
2018-10-30 16:02 ` Keith Busch
2018-10-30 16:42 ` Jens Axboe
2018-10-30 17:09 ` Jens Axboe
2018-10-30 17:22 ` Keith Busch
2018-10-30 17:33 ` Jens Axboe
2018-10-30 17:35 ` Keith Busch
2018-10-30 17:25 ` Thomas Gleixner
2018-10-30 17:34 ` Jens Axboe
2018-10-30 17:43 ` Jens Axboe
2018-10-30 17:46 ` Thomas Gleixner
2018-10-30 17:47 ` Jens Axboe
2018-10-29 16:37 ` [PATCH 12/14] nvme: utilize two queue maps, one for reads and one for writes Jens Axboe
2018-10-29 16:37 ` [PATCH 13/14] block: add REQ_HIPRI and inherit it from IOCB_HIPRI Jens Axboe
2018-10-29 16:37 ` [PATCH 14/14] nvme: add separate poll queue map Jens Axboe
[not found] <20181025211626.12692-1-axboe@kernel.dk>
2018-10-25 21:16 ` [PATCH 11/14] irq: add support for allocating (and affinitizing) sets of IRQs Jens Axboe
2018-10-25 21:52 ` Keith Busch
2018-10-25 23:07 ` Jens Axboe
2018-10-29 7:43 ` Hannes Reinecke
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=20181030092510.GB13582@ming.t460p \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).