Messages in this thread Patch in this message | | | From | Zenghui Yu <> | Subject | [PATCH] irqchip/gic-v3-its: Don't confuse get_vlpi_map() by writing DB config | Date | Wed, 22 Jan 2020 16:56:09 +0800 |
| |
When we're writing config for the doorbell interrupt, get_vlpi_map() will get confused by doorbell's d->parent_data hack and find the wrong its_dev as chip data and the wrong event.
Fix this issue by making sure no doorbells will be involved before invoking get_vlpi_map(), which restore some of the logic in lpi_write_config().
Fixes: c1d4d5cd203c ("irqchip/gic-v3-its: Add its_vlpi_map helpers") Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> ---
This is based on mainline and can't be directly applied to the current irqchip-next.
drivers/irqchip/irq-gic-v3-its.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index e05673bcd52b..cc8a4fcbd6d6 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1181,12 +1181,13 @@ static struct its_vlpi_map *get_vlpi_map(struct irq_data *d) static void lpi_write_config(struct irq_data *d, u8 clr, u8 set) { - struct its_vlpi_map *map = get_vlpi_map(d); irq_hw_number_t hwirq; void *va; u8 *cfg; - if (map) { + if (irqd_is_forwarded_to_vcpu(d)) { + struct its_vlpi_map *map = get_vlpi_map(d); + va = page_address(map->vm->vprop_page); hwirq = map->vintid; -- 2.19.1
| |