mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@kernel.org>
To: "Benoît Monin" <benoit.monin@bootlin.com>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	"Daniel Lezcano" <daniel.lezcano@kernel.org>,
	"Dragan Mladjenovic" <dragan.mladjenovic@syrmia.com>,
	"Chao-ying Fu" <cfu@wavecomp.com>,
	"Aleksandar Rikalo" <arikalo@gmail.com>,
	"Paul Burton" <paulburton@kernel.org>,
	"Radu Rendec" <radu@rendec.net>
Cc: "Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>,
	"Gregory CLEMENT" <gregory.clement@bootlin.com>,
	"Théo Lebrun" <theo.lebrun@bootlin.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Benoît Monin" <benoit.monin@bootlin.com>
Subject: Re: [PATCH v3 0/5] MIPS: GIC clocksource/irqchip improvements and fixes for multi-cluster systems
Date: Sat, 19 Sep 2026 23:26:58 +0200	[thread overview]
Message-ID: <87o6dt6ifx.ffs@fw13> (raw)
In-Reply-To: <20260907-sync-gic-counters-v3-0-3d891ddabdaf@bootlin.com>

On Mon, Sep 07 2026 at 14:46, Benoît Monin wrote:

Can the MIPS people who care about this code spend some time on
reviewing this pile?

  https://lore.kernel.org/871pb9841j.ffs@fw13

> This series addresses multi-cluster MIPS GIC handling: it fixes a few
> cross-cluster and lock bugs, and allows the GIC timer to be used as a
> fast local clocksource on multi-cluster systems by synchronizing the
> per-cluster counters.
>
> If you are wondering how a single patch in version one turned into a
> five-patch series in version two, the answser is PROVE_LOCKING which
> found some issues that this series addresses.
>
> The first three patches are for the irq-mips-gic irqchip driver.
>
> The first patch fixes the for_each_online_cpu_gic() macro which
> was releasing an unheld per-CPU cm_core_lock on every invocation
> on multi-cluster hardware. Move both the acquire and release into
> __gic_with_next_online_cpu() so they stay balanced and the for_each
> macro accesses all VP on a multi-cluster system.
>
> The second patch fixes a recursive acquisition of gic_lock in
> gic_set_affinity() when moving interrupt SMP affinity across clusters,
> caused by a call to gic_set_type(). Split out a gic_set_type_locked()
> helper to resolve the issue.
>
> The third patch enables the interrupt when moving affinity across
> clusters. The interrupt mask is per-cluster, so after a cross-cluster
> affinity change the interrupt was left disabled in the destination
> cluster. Handle the mask explicitly on both the old and the new side.
>
> The last two patches are for the mips-gic-timer clocksource driver.
>
> The fourth patch is what changed from version 2 of the series. It
> simplifies gic_next_event() as it is guaranteed to be invoked on the
> same CPU of the event. And the flag CLOCK_EVT_FEAT_PERCPU is added to
> better document that guarantee.
>
> The last patch is the main functional change, carried over from v1. It
> synchronizes each secondary cluster's GIC counter to cluster 0's counter
> as its CPUs come online, and once every cluster is in sync, promote the
> clocksource back from the slow cross-cluster gic_hpt_read_multicluster()
> path to the fast local gic_hpt_read(), also re-enabling the GIC
> VDSO clock mode. On the dual-cluster Mobileye EyeQ6H SoC this makes
> clock_gettime(CLOCK_MONOTONIC) about four times faster on the secondary
> cluster and replaces the jiffies-based sched_clock with the high-precision
> GIC counter.
>
> This series was tested on Mobileye SoCs with different cluster
> configurations:
> * The EyeQ5 with two clusters but only one is equipped with VP
>   (VP topology {2,2,2,2},{} total 8).
> * The EyeQ6Lplus which is strictly single cluster
>   (VP topology {4,4} total 8).
> * The EyeQ6H with two identical clusters
>   (VP topology {4,4,4,4},{4,4,4,4} total 32).
>
> Although I am posting this as a single series since the patches
> are all related to the GIC, the changes to the irqchip driver and
> to the clocksource driver are independent from each other and can be
> merged in different trees. I can split the series in two if it helps
> reviewing/merging.
>
> Signed-off-by: Benoît Monin <benoit.monin@bootlin.com>
> ---
> Changes in v3:
> - Rebased on v7.3-rc1.
> - Simplified gic_next_event() as it is strictly per-CPU instead of fixing
>   unused code.
> - Link to v2: https://patch.msgid.link/20260810-sync-gic-counters-v2-0-dfe8b2c376b0@bootlin.com
>
> Changes in v2:
> - Four new patches described above fixing multi-cluster
>   handling in the GIC irqchip and clocksource drivers.
> - In the last patch, gic_clocksource_promote() is now deferred via a
>   workqueue instead of a CPUHP ONLINE callback, to avoid a lockdep
>   issue on clocksource_mutex.
> - Link to v1: https://patch.msgid.link/20260724-sync-gic-counters-v1-1-aa24fd0f30bf@bootlin.com
>
> To: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
> To: Thomas Gleixner <tglx@kernel.org>
> To: Dragan Mladjenovic <dragan.mladjenovic@syrmia.com>
> To: Chao-ying Fu <cfu@wavecomp.com>
> To: Aleksandar Rikalo <arikalo@gmail.com>
> To: Paul Burton <paulburton@kernel.org>
> To: Daniel Lezcano <daniel.lezcano@kernel.org>
> To: Radu Rendec <radu@rendec.net>
> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> Cc: linux-mips@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
>
> ---
> Benoît Monin (5):
>       irqchip/mips-gic: Fix unbalanced cm_core_lock in for_each_online_cpu_gic()
>       irqchip/mips-gic: Fix recursive acquisition of gic_lock in gic_set_affinity()
>       irqchip/mips-gic: Enable interrupt when moving affinity across clusters
>       clocksource: mips-gic-timer: Simplify gic_next_event() for per-cpu timer
>       clocksource: mips-gic-timer: Use local counter on synced multi-cluster systems
>
>  drivers/clocksource/mips-gic-timer.c | 127 +++++++++++++++++++++++++++++++----
>  drivers/irqchip/irq-mips-gic.c       |  51 ++++++++------
>  2 files changed, 144 insertions(+), 34 deletions(-)
> ---
> base-commit: cee9395acd8043be0644b25c34bfa86623f2b935
> change-id: 20260717-sync-gic-counters-1cd6b40b968e
>
> Best regards,
> --  
> Benoît Monin, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

      parent reply	other threads:[~2026-09-19 21:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07 12:46 Benoît Monin
2026-09-07 12:46 ` [PATCH v3 1/5] irqchip/mips-gic: Fix unbalanced cm_core_lock in for_each_online_cpu_gic() Benoît Monin
2026-09-07 12:46 ` [PATCH v3 2/5] irqchip/mips-gic: Fix recursive acquisition of gic_lock in gic_set_affinity() Benoît Monin
2026-09-07 12:46 ` [PATCH v3 3/5] irqchip/mips-gic: Enable interrupt when moving affinity across clusters Benoît Monin
2026-09-07 12:46 ` [PATCH v3 4/5] clocksource: mips-gic-timer: Simplify gic_next_event() for per-cpu timer Benoît Monin
2026-09-07 12:46 ` [PATCH v3 5/5] clocksource: mips-gic-timer: Use local counter on synced multi-cluster systems Benoît Monin
2026-09-19 21:26 ` Thomas Gleixner [this message]

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=87o6dt6ifx.ffs@fw13 \
    --to=tglx@kernel.org \
    --cc=arikalo@gmail.com \
    --cc=benoit.monin@bootlin.com \
    --cc=cfu@wavecomp.com \
    --cc=daniel.lezcano@kernel.org \
    --cc=dragan.mladjenovic@syrmia.com \
    --cc=gregory.clement@bootlin.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=paulburton@kernel.org \
    --cc=radu@rendec.net \
    --cc=tawfik.bayouk@mobileye.com \
    --cc=theo.lebrun@bootlin.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=vladimir.kondratiev@mobileye.com \
    /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

all inboxes | Powered by JetHome®