From: Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>
To: Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Jiang Liu <jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 0/5] Partitioning per-cpu interrupts
Date: Thu, 28 Apr 2016 15:48:16 +0100 [thread overview]
Message-ID: <572222B0.8010608@arm.com> (raw)
In-Reply-To: <1460365075-7316-1-git-send-email-marc.zyngier-5wv7dgnIgG8@public.gmane.org>
On 11/04/16 09:57, Marc Zyngier wrote:
> We've unfortunately started seeing a situation where percpu interrupts
> are partitioned in the system: one arbitrary set of CPUs has an
> interrupt connected to a type of device, while another disjoint set of
> CPUs has the same interrupt connected to another type of device.
>
> This makes it impossible to have a device driver requesting this
> interrupt using the current percpu-interrupt abstraction, as the same
> interrupt number is now potentially claimed by at least two drivers,
> and we forbid interrupt sharing on per-cpu interrupt.
>
> A potential solution to this has been proposed by Will Deacon,
> expanding the handling in the core code:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2015-November/388800.html
>
> followed by a counter-proposal from Thomas Gleixner, which Will tried
> to implement, but ran into issues where the probing code was running
> in preemptible context, making the percpu-ness of interrupts difficult
> to guarantee.
>
> Another approach to this is to turn things upside down. Let's assume
> that our system describes all the possible partitions for a given
> interrupt, and give each of them a unique identifier. It is then
> possible to create a namespace where the affinity identifier itself is
> a form of interrupt number. At this point, it becomes easy to
> implement a set of partitions as a cascaded irqchip, each affinity
> identifier being the secondary HW irq, as outlined in the following
> example:
>
> Aff-0: { cpu0 cpu3 }
> Aff-1: { cpu1 cpu2 }
> Aff-2: { cpu4 cpu5 cpu6 cpu7 }
>
> Let's assume that HW interrupt 1 is partitioned over these 3
> affinities. When HW interrupt 1 fires on a given CPU, all it takes is
> to find out which affinity this CPU belongs to, which gives us a new
> HW interrupt number. Bingo. Of course, this only works as long as you
> don't have overlapping affinities (but if you do your system is broken
> anyway).
>
> This allows us to keep a number of nice properties:
>
> - Each partition results in a separate percpu-interrupt (with a
> restricted affinity), which keeps drivers happy. This alone
> garantees that we do not have to change the programming model for
> per-cpu interrupts.
>
> - Because the underlying interrupt is still per-cpu, the overhead of
> the indirection can be kept pretty minimal.
>
> - The core code can ignore most of that crap.
>
> For that purpose, we implement a small library that deals with some of
> the boilerplate code, relying on platform-specific drivers to provide
> a description of the affinity sets and a set of callbacks. This also
> relies on a small change in the irqdomain layer, and now offers a way
> for the affinity of a percpu interrupt to be retrieved by a driver.
>
> As an example, the GICv3 driver has been adapted to use this new
> feature. Patches on top of v4.6-r3, tested on an arm64 FVP model.
Any comment on this? The Rockchip dudes have confirmed that this solves
their problems (big-little system with PMUs using the same PPI).
I've also posted a proof of concept patch for the ARM PMU over there:
https://lkml.org/lkml/2016/4/25/227
Thanks,
M.
--
Jazz is not dead. It just smells funny...
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Jiang Liu <jiang.liu@linux.intel.com>,
Jason Cooper <jason@lakedaemon.net>,
Will Deacon <will.deacon@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Rob Herring <robh+dt@kernel.org>
Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 0/5] Partitioning per-cpu interrupts
Date: Thu, 28 Apr 2016 15:48:16 +0100 [thread overview]
Message-ID: <572222B0.8010608@arm.com> (raw)
In-Reply-To: <1460365075-7316-1-git-send-email-marc.zyngier@arm.com>
On 11/04/16 09:57, Marc Zyngier wrote:
> We've unfortunately started seeing a situation where percpu interrupts
> are partitioned in the system: one arbitrary set of CPUs has an
> interrupt connected to a type of device, while another disjoint set of
> CPUs has the same interrupt connected to another type of device.
>
> This makes it impossible to have a device driver requesting this
> interrupt using the current percpu-interrupt abstraction, as the same
> interrupt number is now potentially claimed by at least two drivers,
> and we forbid interrupt sharing on per-cpu interrupt.
>
> A potential solution to this has been proposed by Will Deacon,
> expanding the handling in the core code:
>
> http://lists.infradead.org/pipermail/linux-arm-kernel/2015-November/388800.html
>
> followed by a counter-proposal from Thomas Gleixner, which Will tried
> to implement, but ran into issues where the probing code was running
> in preemptible context, making the percpu-ness of interrupts difficult
> to guarantee.
>
> Another approach to this is to turn things upside down. Let's assume
> that our system describes all the possible partitions for a given
> interrupt, and give each of them a unique identifier. It is then
> possible to create a namespace where the affinity identifier itself is
> a form of interrupt number. At this point, it becomes easy to
> implement a set of partitions as a cascaded irqchip, each affinity
> identifier being the secondary HW irq, as outlined in the following
> example:
>
> Aff-0: { cpu0 cpu3 }
> Aff-1: { cpu1 cpu2 }
> Aff-2: { cpu4 cpu5 cpu6 cpu7 }
>
> Let's assume that HW interrupt 1 is partitioned over these 3
> affinities. When HW interrupt 1 fires on a given CPU, all it takes is
> to find out which affinity this CPU belongs to, which gives us a new
> HW interrupt number. Bingo. Of course, this only works as long as you
> don't have overlapping affinities (but if you do your system is broken
> anyway).
>
> This allows us to keep a number of nice properties:
>
> - Each partition results in a separate percpu-interrupt (with a
> restricted affinity), which keeps drivers happy. This alone
> garantees that we do not have to change the programming model for
> per-cpu interrupts.
>
> - Because the underlying interrupt is still per-cpu, the overhead of
> the indirection can be kept pretty minimal.
>
> - The core code can ignore most of that crap.
>
> For that purpose, we implement a small library that deals with some of
> the boilerplate code, relying on platform-specific drivers to provide
> a description of the affinity sets and a set of callbacks. This also
> relies on a small change in the irqdomain layer, and now offers a way
> for the affinity of a percpu interrupt to be retrieved by a driver.
>
> As an example, the GICv3 driver has been adapted to use this new
> feature. Patches on top of v4.6-r3, tested on an arm64 FVP model.
Any comment on this? The Rockchip dudes have confirmed that this solves
their problems (big-little system with PMUs using the same PPI).
I've also posted a proof of concept patch for the ARM PMU over there:
https://lkml.org/lkml/2016/4/25/227
Thanks,
M.
--
Jazz is not dead. It just smells funny...
next prev parent reply other threads:[~2016-04-28 14:48 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-11 8:57 [PATCH 0/5] Partitioning per-cpu interrupts Marc Zyngier
2016-04-11 8:57 ` Marc Zyngier
2016-04-11 8:57 ` [PATCH 3/5] irqchip: Add per-cpu interrupt partitioning library Marc Zyngier
2016-05-02 12:35 ` [tip:irq/core] " tip-bot for Marc Zyngier
[not found] ` <1460365075-7316-1-git-send-email-marc.zyngier-5wv7dgnIgG8@public.gmane.org>
2016-04-11 8:57 ` [PATCH 1/5] irqdomain: Allow domain matching on irq_fwspec Marc Zyngier
2016-04-11 8:57 ` Marc Zyngier
2016-05-02 12:34 ` [tip:irq/core] " tip-bot for Marc Zyngier
2016-04-11 8:57 ` [PATCH 2/5] genirq: Allow the affinity of a percpu interrupt to be set/retrieved Marc Zyngier
2016-04-11 8:57 ` Marc Zyngier
2016-05-02 12:34 ` [tip:irq/core] " tip-bot for Marc Zyngier
[not found] ` <1460365075-7316-3-git-send-email-marc.zyngier-5wv7dgnIgG8@public.gmane.org>
2016-05-19 11:08 ` [PATCH 2/5] " Geert Uytterhoeven
2016-05-19 11:08 ` Geert Uytterhoeven
[not found] ` <CAMuHMdW_QNM0c+u-pj3w8TOhr4s40B+OwxUAoQwqPxKeRrU4ZQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-05-19 13:13 ` Marc Zyngier
2016-05-19 13:13 ` Marc Zyngier
[not found] ` <573DBBFA.8020903-5wv7dgnIgG8@public.gmane.org>
2016-05-19 13:25 ` Geert Uytterhoeven
2016-05-19 13:25 ` Geert Uytterhoeven
2016-04-11 8:57 ` [PATCH 4/5] irqchip/gic-v3: Add support for partitioned PPIs Marc Zyngier
2016-04-11 8:57 ` Marc Zyngier
2016-05-02 12:35 ` [tip:irq/core] " tip-bot for Marc Zyngier
2016-04-11 8:57 ` [PATCH 5/5] DT: arm,gic-v3: Documment PPI partition support Marc Zyngier
2016-04-11 8:57 ` Marc Zyngier
[not found] ` <1460365075-7316-6-git-send-email-marc.zyngier-5wv7dgnIgG8@public.gmane.org>
2016-04-12 16:29 ` Rob Herring
2016-04-12 16:29 ` Rob Herring
2016-04-12 16:42 ` Marc Zyngier
2016-04-12 16:42 ` Marc Zyngier
[not found] ` <570D2585.5070801-5wv7dgnIgG8@public.gmane.org>
2016-04-12 18:31 ` Rob Herring
2016-04-12 18:31 ` Rob Herring
2016-05-02 12:36 ` [tip:irq/core] DT/arm,gic-v3: " tip-bot for Marc Zyngier
2016-04-28 14:48 ` Marc Zyngier [this message]
2016-04-28 14:48 ` [PATCH 0/5] Partitioning per-cpu interrupts Marc Zyngier
[not found] ` <572222B0.8010608-5wv7dgnIgG8@public.gmane.org>
2016-04-28 17:22 ` Thomas Gleixner
2016-04-28 17:22 ` Thomas Gleixner
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=572222B0.8010608@arm.com \
--to=marc.zyngier-5wv7dgnigg8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org \
--cc=jiang.liu-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
--cc=will.deacon-5wv7dgnIgG8@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.