mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 13:30:52 +00:00
hw/intc/arm_gicv3_redist: Implement gicv3_redist_mov_vlpi()
Implement the gicv3_redist_mov_vlpi() function (previously left as a stub). This function handles the work of a VMOVI command: it marks the vLPI not-pending on the source and pending on the destination. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20220408141550.1271295-35-peter.maydell@linaro.org
This commit is contained in:
parent
ab6ef25179
commit
c6f797d519
@ -1067,9 +1067,25 @@ void gicv3_redist_mov_vlpi(GICv3CPUState *src, uint64_t src_vptaddr,
|
||||
int irq, int doorbell)
|
||||
{
|
||||
/*
|
||||
* The redistributor handling for moving a VLPI will be added
|
||||
* in a subsequent commit.
|
||||
* Move the specified vLPI's pending state from the source redistributor
|
||||
* to the destination.
|
||||
*/
|
||||
if (!set_pending_table_bit(src, src_vptaddr, irq, 0)) {
|
||||
/* Not pending on source, nothing to do */
|
||||
return;
|
||||
}
|
||||
if (vcpu_resident(src, src_vptaddr) && irq == src->hppvlpi.irq) {
|
||||
/*
|
||||
* Update src's cached highest-priority pending vLPI if we just made
|
||||
* it not-pending
|
||||
*/
|
||||
gicv3_redist_update_vlpi(src);
|
||||
}
|
||||
/*
|
||||
* Mark the vLPI pending on the destination (ringing the doorbell
|
||||
* if the vCPU isn't resident)
|
||||
*/
|
||||
gicv3_redist_process_vlpi(dest, irq, dest_vptaddr, doorbell, irq);
|
||||
}
|
||||
|
||||
void gicv3_redist_vinvall(GICv3CPUState *cs, uint64_t vptaddr)
|
||||
|
Loading…
Reference in New Issue
Block a user