[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v13 03/14] xen/arm: gic-v3: tolerate retained redistributor LPI state across CPU_OFF


  • To: Mykola Kvach <mykola_kvach@xxxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Tue, 10 Nov 2026 14:34:51 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=epam.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6+iP7e/TZoNND1LvqmFEhaAdfLTzMt27JLbgCxF7u7E=; b=hiLy020610JikiFi/O/MjsjfRSn4FelqZFYIKROKlyjGHVod3oFB1UrCfiTS9+13PeYCOqTfbHbMsRaZhOiVHEJ4U9U7W8t4Y6iW4bMbYWR7MPZJWJUOVg5ucRZ/Gz6JIKJ2flA+2ouoCwoxI+Y2DwAG8ufG6kbdPFzpG/0QjQvmvNojy5y9rAO9HhbaeeqjA6jD7cub3IwL6O7tLsvVhdMFOLUwL4DY9B9YtHuihrtqbiryK4Fi8I1dmcEOLlBIHBf28m6vDwsYgX7zbijxbSC7+Q3lKCZU2V2MQkpSKZru1kMFXikkp7whpqxAbtGgLvmx2NBQQmyHhtuwLKnAeg==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6+iP7e/TZoNND1LvqmFEhaAdfLTzMt27JLbgCxF7u7E=; b=X+ah3aglVJBOOXrcwZpRCoC9s9EefW9UaO1TNsVzxtVzBHcxfdo8aegAZApbi2C96KK33IYRihHUonVn3YMq3zRRaeP1OH8sifa2AgUnaNo0mrjM2zCN86TrH/rwv3GNS+ylevNHAdR37xaIOJZp8aohE1ssd/uwessgJueiWI6QzMVF0tZBVc+q+61cmS3MGoNyhC5y5eaKTVXgfsRnZ3WvnnHzGGZ0qF7R9dbDTAKZj0MmmHzIDHZQvYosTAmsGQDAFx2N/I5ZY/PKj7dT36Vo8F5iByLhZSIvfl5uzpHipkH/XeBirKBeDzE1HTFDxEs/hftHZDNyTBd1+HEvTA==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=b2AazJm1KOan7o3xcETTcXWkA6z6Tn6i2AhB0MRy0Ib+1hz1+YePlGzC4kLkDWwLxEM4s8f6m3W80xegRp/L4FMhRx98973rQRDdjKt6A4vtwABcakIQ4in+2H1P9cDze4rM7o4/p1X9MP/ecvvWH+1Y5FnJosZ6236/LIZ9ZmrDra4mv6BXF/xT74OVrEAfG4xrBypolTbyKm/IayWRHyAdShcdlyLCHGdyEqHMRXUqQxn9I6a4TUzmrXaNo/WVvgA2UPoMuCq03dFD/gXhxdl/neKp7FTYAcrfkmA9dKJlLFgxfBQTPpBciHCyaCk3QgVlZYcSkZ/sFan01/QusA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FmOJ2GOGAOw7geJXcopB490qcw+5GyzJtxePlUn1WyhzcRia8xv4Jzuy/5dzRHpntfizTGyhw3N3/xLRFmXpyrUxfySxRA0fBGVTUCjfENVHD6YXS3XPzheaRYuvYnMM83EeS+kgO87IvGIlft6iL6L+Dkc1bTjkHsCVQ2ztrUcU1MCZNnWzGXnLqw+7bAkW9pI8COBHs42vN7/z5MWRrTrlOOK7yKR2cO1lwdYOzK+srnmhlxb1+hB4BKx7W8wk1GUwlNtCzlh29VJZMDy6NeZfmX6h4kJgUm0c8R5yiPhQU93VxwLjTYVKrz8JAYHO4hxjVQGor25QWXIH3B+uKw==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results-original: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Luca Fancellu <Luca.Fancellu@xxxxxxx>
  • Delivery-date: Tue, 10 Nov 2026 14:35:38 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHdZlcH8ffpXAdblEmVMEzSma2NmbcndI+A
  • Thread-topic: [PATCH v13 03/14] xen/arm: gic-v3: tolerate retained redistributor LPI state across CPU_OFF

Hi Mykola,

> On 27 Oct 2026, at 22:05, Mykola Kvach <mykola_kvach@xxxxxxxx> wrote:
> 
> PSCI does not guarantee that a GICv3 redistributor is powered down across
> CPU_OFF -> CPU_ON.
> 
> DEN0022F.b says CPU_OFF powers down the calling core (5.5) and CPU_ON
> brings the core back with a defined initial CPU state (5.6, 6.4).
> However, PSCI leaves interrupt migration and GIC re-initialization to the
> supervisory software/firmware stack: the caller must migrate interrupts
> away before CPU_OFF (5.5.2), and the execution context that is lost in a
> powerdown state must be saved and restored by software (6.8). PSCI also
> calls out GIC management explicitly in 6.8, including retargeting SPIs,
> preventing PPIs/SGIs from targeting a powered down CPU, and reinitializing
> the CPU interface after CPU_ON.
> 
> This matches the GIC architecture. IHI0069H.b Chapter 11.1 requires the PE
> and CPU interface to share a power domain, but explicitly allows the
> associated redistributor, distributor, and ITS to remain powered while the
> PE and CPU interface are off. All other GIC power-management behavior is
> IMPLEMENTATION DEFINED. DEN0050D Chapter 4.2, "Generic Interrupt
> Controller (GIC)", says the GICv3 redistributor may live either in the AP
> core power domain or in a relatively always-on parent domain. So after
> CPU_OFF -> CPU_ON a secondary CPU can legitimately come back to a live
> redistributor with GICR_CTLR.EnableLPIs still set.
> 
> Handle that case in the LPI setup path instead of assuming a fully reset
> redistributor.
> 
> The LPI path needs special care because the GIC spec makes redistributor
> LPI state sticky and partially implementation defined. IHI0069H.b 5.1.1
> and 5.1.2 say that changing GICR_PROPBASER or GICR_PENDBASER while
> GICR_CTLR.EnableLPIs == 1 is UNPREDICTABLE. After clearing EnableLPIs,
> software must wait for GICR_CTLR.RWP == 0 before touching the pending
> table. The architecture also permits implementations where, once
> EnableLPIs has been set, clearing it again is not guaranteed to work.
> Where an ITS is present, the spec strongly recommends moving LPIs to
> another redistributor before clearing EnableLPIs.
> 
> Because of that, treat a retained EnableLPIs state as valid when the
> redistributor still points at Xen's expected PROPBASER/PENDBASER tables.
> Only try to clear EnableLPIs when the retained configuration does not
> match Xen's state, and wait for RWP before reprogramming the tables.
> 
> This is also consistent with platform firmware reality: PSCI and the GIC
> architecture allow platform-specific redistributor power handling, and not
> all platform firmware implementations force a full redistributor power-off
> through implementation-defined controls during CPU_OFF. Xen therefore needs
> to tolerate retained redistributor state on secondary CPU bring-up.
> 
> Keep gicv3_populate_rdist() resident as well, because gicv3_cpu_init()
> reuses it on secondary CPU bring-up after init.
> 
> Tested using Xen's non-boot CPU disable/enable path on Arm
> FVP_Base_RevC-2xAEMvA, both with and without:
> -C gic_distributor.allow-LPIEN-clear=1
> -C gic_distributor.GICR-clear-enable-supported=1
> and on Orange Pi 5.
> 
> Signed-off-by: Mykola Kvach <mykola_kvach@xxxxxxxx>
> Reviewed-by: Luca Fancellu <luca.fancellu@xxxxxxx>

Thanks for the added TODO comment.

Reviewed-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>

Cheers
Bertrand




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.