Skip to content

Commit b4a4bd0

Browse files
author
Marc Zyngier
committed
irqchip/gic-v4.1: Add VPE INVALL callback
GICv4.1 redistributors have a VPE-aware INVALL register. Progress! We can now emulate a guest-requested INVALL without emiting a VINVALL command. Signed-off-by: Marc Zyngier <[email protected]> Reviewed-by: Zenghui Yu <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent e64fab1 commit b4a4bd0

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

drivers/irqchip/irq-gic-v3-its.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3669,6 +3669,19 @@ static void its_vpe_4_1_deschedule(struct its_vpe *vpe,
36693669
}
36703670
}
36713671

3672+
static void its_vpe_4_1_invall(struct its_vpe *vpe)
3673+
{
3674+
void __iomem *rdbase;
3675+
u64 val;
3676+
3677+
val = GICR_INVALLR_V;
3678+
val |= FIELD_PREP(GICR_INVALLR_VPEID, vpe->vpe_id);
3679+
3680+
/* Target the redistributor this vPE is currently known on */
3681+
rdbase = per_cpu_ptr(gic_rdists->rdist, vpe->col_idx)->rd_base;
3682+
gic_write_lpir(val, rdbase + GICR_INVALLR);
3683+
}
3684+
36723685
static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
36733686
{
36743687
struct its_vpe *vpe = irq_data_get_irq_chip_data(d);
@@ -3684,6 +3697,7 @@ static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
36843697
return 0;
36853698

36863699
case INVALL_VPE:
3700+
its_vpe_4_1_invall(vpe);
36873701
return 0;
36883702

36893703
default:

include/linux/irqchip/arm-gic-v3.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,12 @@
247247
#define GICR_TYPER_COMMON_LPI_AFF GENMASK_ULL(25, 24)
248248
#define GICR_TYPER_AFFINITY GENMASK_ULL(63, 32)
249249

250+
#define GICR_INVLPIR_VPEID GENMASK_ULL(47, 32)
251+
#define GICR_INVLPIR_V GENMASK_ULL(63, 63)
252+
253+
#define GICR_INVALLR_VPEID GICR_INVLPIR_VPEID
254+
#define GICR_INVALLR_V GICR_INVLPIR_V
255+
250256
#define GIC_V3_REDIST_SIZE 0x20000
251257

252258
#define LPI_PROP_GROUP1 (1 << 1)

0 commit comments

Comments
 (0)