mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
KVM: arm64: vgic: Get rid of the LPI linked-list
All readers of LPI configuration have been transitioned to use the LPI xarray. Get rid of the linked-list altogether. Reviewed-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20240221054253.3848076-6-oliver.upton@linux.dev Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
This commit is contained in:
parent
2798683b8c
commit
9880835af7
@ -53,7 +53,6 @@ void kvm_vgic_early_init(struct kvm *kvm)
|
||||
{
|
||||
struct vgic_dist *dist = &kvm->arch.vgic;
|
||||
|
||||
INIT_LIST_HEAD(&dist->lpi_list_head);
|
||||
INIT_LIST_HEAD(&dist->lpi_translation_cache);
|
||||
raw_spin_lock_init(&dist->lpi_list_lock);
|
||||
xa_init_flags(&dist->lpi_xa, XA_FLAGS_LOCK_IRQ);
|
||||
|
@ -58,7 +58,6 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
INIT_LIST_HEAD(&irq->lpi_list);
|
||||
INIT_LIST_HEAD(&irq->ap_list);
|
||||
raw_spin_lock_init(&irq->irq_lock);
|
||||
|
||||
@ -74,10 +73,8 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
|
||||
* There could be a race with another vgic_add_lpi(), so we need to
|
||||
* check that we don't add a second list entry with the same LPI.
|
||||
*/
|
||||
list_for_each_entry(oldirq, &dist->lpi_list_head, lpi_list) {
|
||||
if (oldirq->intid != intid)
|
||||
continue;
|
||||
|
||||
oldirq = xa_load(&dist->lpi_xa, intid);
|
||||
if (oldirq) {
|
||||
/* Someone was faster with adding this LPI, lets use that. */
|
||||
kfree(irq);
|
||||
irq = oldirq;
|
||||
@ -99,7 +96,6 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid,
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
list_add_tail(&irq->lpi_list, &dist->lpi_list_head);
|
||||
dist->lpi_list_count++;
|
||||
|
||||
out_unlock:
|
||||
|
@ -122,7 +122,6 @@ void __vgic_put_lpi_locked(struct kvm *kvm, struct vgic_irq *irq)
|
||||
if (!kref_put(&irq->refcount, vgic_irq_release))
|
||||
return;
|
||||
|
||||
list_del(&irq->lpi_list);
|
||||
xa_erase(&dist->lpi_xa, irq->intid);
|
||||
dist->lpi_list_count--;
|
||||
|
||||
|
@ -117,7 +117,6 @@ struct irq_ops {
|
||||
|
||||
struct vgic_irq {
|
||||
raw_spinlock_t irq_lock; /* Protects the content of the struct */
|
||||
struct list_head lpi_list; /* Used to link all LPIs together */
|
||||
struct list_head ap_list;
|
||||
|
||||
struct kvm_vcpu *vcpu; /* SGIs and PPIs: The VCPU
|
||||
@ -277,7 +276,6 @@ struct vgic_dist {
|
||||
/* Protects the lpi_list and the count value below. */
|
||||
raw_spinlock_t lpi_list_lock;
|
||||
struct xarray lpi_xa;
|
||||
struct list_head lpi_list_head;
|
||||
int lpi_list_count;
|
||||
|
||||
/* LPI translation cache */
|
||||
|
Loading…
Reference in New Issue
Block a user