Re: [PATCH v2 2/4] xen/arm: its: separate ITS and host LPI quirk scopes

"Orzel, Michal" <[email protected]> Fri, 31 Jul 2026 10:24:47 +0200
Newsgroups org.xenproject.lists.xen-devel
Message-ID <[email protected]>

On 28-May-26 02:25, Mykola Kvach wrote:
> From: Mykola Kvach <[email protected]>
> 
> ITS quirks can impose restrictions on memory accessed by the ITS itself and
> on shared host LPI/Redistributor state. These scopes are not identical, so
> a single global ITS quirk state makes the host LPI policy depend implicitly
> on the quirks seen while initializing host ITSes.
> 
> Add per-ITS quirk_flags to struct host_its and keep a separate
> host_lpi_flags state in the LPI code. The quirk table now records the
> ITS-private and host LPI scopes explicitly through its_flags and lpi_flags.
> The R-Car Gen4 quirk applies the same memory-related restrictions to both
> scopes, preserving the existing behavior without relying on an implicit
> aggregation step.
> 
> This also removes the old assumption that all host ITSes must expose the
> same quirk state. Host LPI restrictions are accumulated only from quirk
> entries that explicitly set lpi_flags.
> 
> Use per-ITS quirk_flags for GITS_CBASER, GITS_BASER<n> and ITT allocations.
> Use host_lpi_flags directly in gic-v3-lpi.c for GICR_PROPBASER and
> GICR_PENDBASER setup. Memory-related quirk bits are named GICV3_QUIRK_MEM_*
> and are translated by shared gicv3_mem_get_*() helpers.
> 
> Signed-off-by: Mykola Kvach <[email protected]>
I already gave R-b for this patch but noticed two issues:

[...]

>  
> -static void gicv3_its_enable_quirks(struct host_its *hw_its)
> +static void __init gicv3_its_collect_quirks(struct host_its *hw_its)
The only caller of gicv3_its_collect_quirks() is
gicv3_its_init_single_its(), which stays non-init until patch 4/4.
Please annotate the caller here as well.

[...]

> @@ -157,6 +164,7 @@ int gicv3_lpi_init_rdist(void __iomem * rdist_base);
>  /* Initialize the host structures for LPIs and the host ITSes. */
>  int gicv3_lpi_init_host_lpis(unsigned int host_lpi_bits);
>  int gicv3_its_init(void);
> +void __init gicv3_lpi_update_host_flags(uint32_t flags);
Please, do not add __init here for a prototype.

~Michal