Skip to content

Commit

Permalink
hw/intc/arm_gicv3_redist: Implement gicv3_redist_mov_vlpi()
Browse files Browse the repository at this point in the history
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
  • Loading branch information
pm215 committed Apr 22, 2022
1 parent ab6ef25 commit c6f797d
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions hw/intc/arm_gicv3_redist.c
Expand Up @@ -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)
Expand Down

0 comments on commit c6f797d

Please sign in to comment.