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)
|
int irq, int doorbell)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* The redistributor handling for moving a VLPI will be added
|
* Move the specified vLPI's pending state from the source redistributor
|
||||||
* in a subsequent commit.
|
* 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)
|
void gicv3_redist_vinvall(GICv3CPUState *cs, uint64_t vptaddr)
|
||||||
|
Loading…
Reference in New Issue
Block a user