Commit fc849ba4 authored by Yiwen Jiang's avatar Yiwen Jiang Committed by Zheng Zengkai
Browse files

kvm: arm/arm64: add irqsave for lpi_cache_lock

euleros inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I4J0W7


CVE: NA

-------------------------------------------------

lpi_cache_lock can be called in irq context,
so it should use irqsave spinlock.

Signed-off-by: default avatarYiwen Jiang <jiangyiwen@huawei.com>
Reviewed-by: default avatarHailiang Zhang <zhang.zhanghailiang@huawei.com>
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: default avatarChaochao Xing <xingchaochao@huawei.com>
Reviewed-by: default avatarXiangyou Xie <xiexiangyou@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent c89f1e49
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -593,15 +593,16 @@ static struct vgic_irq *vgic_its_check_cache(struct kvm *kvm, phys_addr_t db,
{
	struct vgic_dist *dist = &kvm->arch.vgic;
	struct vgic_irq *irq;
	unsigned long flags;
	int cpu;
	int cacheid;

	cpu = smp_processor_id();
	cacheid = cpu % LPI_TRANS_CACHES_NUM;

	raw_spin_lock(&dist->lpi_translation_cache[cacheid].lpi_cache_lock);
	raw_spin_lock_irqsave(&dist->lpi_translation_cache[cacheid].lpi_cache_lock, flags);
	irq = __vgic_its_check_cache(dist, db, devid, eventid, cacheid);
	raw_spin_unlock(&dist->lpi_translation_cache[cacheid].lpi_cache_lock);
	raw_spin_unlock_irqrestore(&dist->lpi_translation_cache[cacheid].lpi_cache_lock, flags);

	return irq;
}