mirror of
https://github.com/torvalds/linux.git
synced 2026-09-26 10:02:02 +02:00
KVM: arm64: vgic-its: Point saved ITEs at the next valid entry
An ITE whose collection was dropped is saved as an invalid entry, and vgic_its_restore_ite() has no offset to follow from one, so the scan steps a single entry at a time until it reaches a valid entry or the end of the ITT. Compute the offset to the next ITE that is saved as valid instead. Suggested-by: Oliver Upton <oupton@kernel.org> Signed-off-by: Fuad Tabba <fuad.tabba@linux.dev> Link: https://patch.msgid.link/20260807104102.2410744-5-fuad.tabba@linux.dev Signed-off-by: Oliver Upton <oupton@kernel.org>
This commit is contained in:
parent
9b10fb74e4
commit
ad1e686e23
|
|
@ -2024,15 +2024,16 @@ static u32 compute_next_devid_offset(struct list_head *h,
|
|||
|
||||
static u32 compute_next_eventid_offset(struct list_head *h, struct its_ite *ite)
|
||||
{
|
||||
struct its_ite *next;
|
||||
u32 next_offset;
|
||||
struct its_ite *next = ite;
|
||||
|
||||
if (list_is_last(&ite->ite_list, h))
|
||||
return 0;
|
||||
next = list_next_entry(ite, ite_list);
|
||||
next_offset = next->event_id - ite->event_id;
|
||||
/* Point at the next ITE that vgic_its_save_ite() stores as valid. */
|
||||
list_for_each_entry_continue(next, h, ite_list) {
|
||||
if (next->collection)
|
||||
return min_t(u32, next->event_id - ite->event_id,
|
||||
VITS_ITE_MAX_EVENTID_OFFSET);
|
||||
}
|
||||
|
||||
return min_t(u32, next_offset, VITS_ITE_MAX_EVENTID_OFFSET);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user