未验证 提交 aa2c8813 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!1646 Fixed extioi hardware emulation bugs on loongarch

Merge Pull Request from: @lixianglai 
 
ISSU:  #I7QOYY 
 
Link:https://gitee.com/openeuler/kernel/pulls/1646 

Reviewed-by: Kevin Zhu <zhukeqian1@huawei.com> 
Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com> 
......@@ -347,8 +347,6 @@ static int kvm_iocsr_common_set(struct kvm_run *run, struct kvm_vcpu *vcpu,
static int kvm_misc_set(struct kvm_run *run, struct kvm_vcpu *vcpu, u32 addr,
u64 val)
{
if ((val & KVM_IOCSRF_MISC_FUNC_EXT_IOI_EN) && vcpu->vcpu_id == 0)
kvm_setup_ls3a_extirq(vcpu->kvm);
return kvm_iocsr_common_set(run, vcpu, addr, val);
}
......@@ -653,9 +651,6 @@ int _kvm_set_iocsr(struct kvm *kvm, struct kvm_iocsr_entry *__user argp)
}
spin_unlock(&kvm->arch.iocsr_lock);
if (tmp.addr == KVM_IOCSR_MISC_FUNC)
kvm_enable_ls3a_extirq(kvm, tmp.data & KVM_IOCSRF_MISC_FUNC_EXT_IOI_EN);
out:
return r;
}
......
......@@ -110,9 +110,6 @@ void msi_irq_handler(struct kvm *kvm, int irq, int level)
struct ls3a_kvm_extirq *s = ls3a_ext_irqchip(kvm);
struct kvm_ls3a_extirq_state *state = &(s->ls3a_ext_irq);
if (!atomic64_read(&s->enabled))
return;
kvm_debug("ext_irq_handler:irq = %d,level = %d\n", irq, level);
ls3a_ext_irq_lock(s, flags);
......@@ -731,7 +728,6 @@ int kvm_create_ls3a_ext_irq(struct kvm *kvm)
memset((void *)&s->ls3a_ext_irq, 0x0, sizeof(struct kvm_ls3a_extirq_state));
spin_lock_init(&s->lock);
atomic64_set(&s->enabled, 0);
s->kvm = kvm;
/*
......@@ -872,18 +868,6 @@ int kvm_setup_ls3a_extirq(struct kvm *kvm)
memset(extirq_state, 0, sizeof(struct kvm_ls3a_extirq_state));
ls3a_ext_irq_unlock(v_extirq, flags);
atomic64_set(&v_extirq->enabled, 1);
return 0;
}
int kvm_enable_ls3a_extirq(struct kvm *kvm, bool enable)
{
struct ls3a_kvm_extirq *v_extirq = ls3a_ext_irqchip(kvm);
if (v_extirq)
atomic64_set(&v_extirq->enabled, enable);
return 0;
}
......@@ -891,7 +875,7 @@ void kvm_dump_ls3a_extirq_state(struct seq_file *s,
struct ls3a_kvm_extirq *irqchip)
{
struct kvm_ls3a_extirq_state *extirq;
int i = 0, j = 0;
int i, j = 0;
unsigned long flags;
seq_puts(s, "LS3A ext irqchip state:\n");
......@@ -901,8 +885,7 @@ void kvm_dump_ls3a_extirq_state(struct seq_file *s,
extirq = &(irqchip->ls3a_ext_irq);
ls3a_ext_irq_lock(irqchip, flags);
i = (int)atomic64_read(&irqchip->enabled);
seq_printf(s, "ext irq enabled:%d", i);
seq_puts(s, "ext irq enabled");
seq_puts(s, "\nenabled:(Not Enabled)");
for (i = 0; i < EXTIOI_IRQS; i++) {
if (!test_bit(i, (void *)&extirq->ext_en))
......
......@@ -98,7 +98,6 @@ typedef struct kvm_ls3a_extirq_state {
struct ls3a_kvm_extirq {
spinlock_t lock;
struct kvm *kvm;
atomic64_t enabled;
struct kvm_io_device device;
struct kvm_ls3a_extirq_state ls3a_ext_irq;
};
......@@ -126,6 +125,5 @@ int kvm_set_ls3a_extirq(struct kvm *kvm,
void kvm_destroy_ls3a_ext_irq(struct kvm *kvm);
void msi_irq_handler(struct kvm *kvm, int irq, int level);
int kvm_setup_ls3a_extirq(struct kvm *kvm);
int kvm_enable_ls3a_extirq(struct kvm *kvm, bool enable);
void kvm_dump_ls3a_extirq_state(struct seq_file *m, struct ls3a_kvm_extirq *irqchip);
#endif
......@@ -973,7 +973,7 @@ static int _kvm_set_one_reg(struct kvm_vcpu *vcpu,
case KVM_REG_LOONGARCH_VCPU_RESET:
kvm_reset_timer(vcpu);
if (vcpu->vcpu_id == 0)
kvm_enable_ls3a_extirq(vcpu->kvm, false);
kvm_setup_ls3a_extirq(vcpu->kvm);
memset(&vcpu->arch.irq_pending, 0, sizeof(vcpu->arch.irq_pending));
memset(&vcpu->arch.irq_clear, 0, sizeof(vcpu->arch.irq_clear));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册