irqchip/gic-v4.1: Use readx_poll_timeout_atomic() to fix sleep in atomic
readx_poll_timeout() can sleep if @sleep_us is specified by the caller,
and is therefore unsafe to be used inside the atomic context, which is
this case when we use it to poll the GICR_VPENDBASER.Dirty bit in
irq_set_vcpu_affinity() callback.
Let's convert to its atomic version instead which helps to get the v4.1
board back to life!
Fixes: 96806229ca
("irqchip/gic-v4.1: Add support for VPENDBASER's Dirty+Valid signaling")
Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200605052345.1494-1-yuzenghui@huawei.com
This commit is contained in:
parent
a23df9a4bd
commit
31dbb6b1d0
@ -3797,10 +3797,10 @@ static void its_wait_vpt_parse_complete(void)
|
|||||||
if (!gic_rdists->has_vpend_valid_dirty)
|
if (!gic_rdists->has_vpend_valid_dirty)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
WARN_ON_ONCE(readq_relaxed_poll_timeout(vlpi_base + GICR_VPENDBASER,
|
WARN_ON_ONCE(readq_relaxed_poll_timeout_atomic(vlpi_base + GICR_VPENDBASER,
|
||||||
val,
|
val,
|
||||||
!(val & GICR_VPENDBASER_Dirty),
|
!(val & GICR_VPENDBASER_Dirty),
|
||||||
10, 500));
|
10, 500));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void its_vpe_schedule(struct its_vpe *vpe)
|
static void its_vpe_schedule(struct its_vpe *vpe)
|
||||||
|
Loading…
Reference in New Issue
Block a user