From 76dfdc4e06d8caadfd3ef18b50fd22ce5cecd84c Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Fri, 27 Jul 2018 16:03:31 +0100 Subject: [PATCH] irqchip/gic-v3-its: Check that all RDs have the same property table mainline inclusion from 4.20-rc1 commit: f842ca8e9c8a80d07f5589536311250d7d6018f9 category: kdump bugzilla: 5272 CVE: NA This 10 patches is used for secondary kernel using LPI. [PATCH 01/10] irqchip/gic-v3-its: Change initialization ordering for LPIs [PATCH 02/10] irqchip/gic-v3-its: Simplify LPI_PENDBASE_SZ usage [PATCH 03/10] irqchip/gic-v3-its: Split property table clearing from allocation [PATCH 04/10] irqchip/gic-v3-its: Move pending table allocation to init time [PATCH 05/10] irqchip/gic-v3-its: Keep track of property table's PA and VA [PATCH 06/10] irqchip/gic-v3-its: Allow use of pre-programmed LPI tables [PATCH 07/10] irqchip/gic-v3-its: Use pre-programmed redistributor tables with kdump kernels [PATCH 08/10] irqchip/gic-v3-its: Check that all RDs have the same property table [PATCH 09/10] irqchip/gic-v3-its: Register LPI tables with EFI config table [PATCH 10/10] irqchip/gic-v3-its: Allow use of LPI tables in reserved memory -------------------------------------- If booting with LPIs enabled, all the redistributors must have the exact same property table. No ifs, no buts. Tested-by: Jeremy Linton Tested-by: Bhupesh Sharma Tested-by: Lei Zhang Signed-off-by: Marc Zyngier Signed-off-by: Yang Yingliang Reviewed-by: Hanjun Guo --- drivers/irqchip/irq-gic-v3-its.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 83d5573f56e9..828af1a68b8e 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -2029,6 +2029,15 @@ static void its_cpu_init_lpis(void) val = readl_relaxed(rbase + GICR_CTLR); if ((gic_rdists->flags & RDIST_FLAGS_RD_TABLES_PREALLOCATED) && (val & GICR_CTLR_ENABLE_LPIS)) { + /* + * Check that we get the same property table on all + * RDs. If we don't, this is hopeless. + */ + paddr = gicr_read_propbaser(rbase + GICR_PROPBASER); + paddr &= GENMASK_ULL(51, 12); + if (WARN_ON(gic_rdists->prop_table_pa != paddr)) + add_taint(TAINT_CRAP, LOCKDEP_STILL_OK); + paddr = gicr_read_pendbaser(rbase + GICR_PENDBASER); paddr &= GENMASK_ULL(51, 16); -- GitLab