KVM/riscv fixes for 6.9, take #1
- Fix spelling mistake in arch_timer selftest - Remove redundant semicolon in num_isa_ext_regs() - Fix APLIC setipnum_le/be write emulation - Fix APLIC in_clrip[x] read emulation -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEZdn75s5e6LHDQ+f/rUjsVaLHLAcFAmYMHVcACgkQrUjsVaLH LAfr4A//QWRQv6QzoFSN/yEcOtB/03rQOGOmWyW04eD3mZDpRX7sKc7PfW4cSpuU MdqH2nPJLni0R0ltlc+KV88oo3q7jCfI0PjTm8MwTRl+Q1xh/J7I1O4euTtr3aJ0 f6Et7mOAFZgEnaAB1XAJwdmdAx6uz6hPqFmnZ4CVtos/7WWID8vpImZdnQ0zHA6w csaUzy3WOVwRUnYuU9Lc6wFBnE954MvugvCFiFLD8xEJm0WWWD0EXIWvXP04giD/ TetxC5MAjL0ab0eM+MI6nimepjzLvahZcHzbaY3+tznxa1CCjsfqZaWVfVv8dano 7oNOdc7rt+m0phRZeCcl9aNAQ80/b1i2IZhmrul5GwDV5oieSMYjtnNxaDHhkEfq 5ERRzXY2OUCfYE7G5ZWpJ0G80Mm5dQ4HFExrG0nVU2RRm6OXwrnj5ZPa03XJpLfP ing6fw0N0ylYP7WGvStWqgSLc2XKXyhFhUgtMtt35rqDpR0SEId/7JUyT1eg6UW7 OqjwCZ/IdXL50MdgSS0TEks0uBTanOFzojJzNRs2bc4zywuDyrPDELeT1SdoQ4W9 WkPKdM2rHSaQMGA4atp9BJ6wCFU5TwReiDzHrrVzOEWxKcvczygyKzLhQU/ROUE5 ucVr5q6h6W4/btGasg3q/AZXI9/e8SXeIYZgsIA79kL7qsvZxtY= =EJ+2 -----END PGP SIGNATURE----- Merge tag 'kvm-riscv-fixes-6.9-1' of https://github.com/kvm-riscv/linux into HEAD KVM/riscv fixes for 6.9, take #1 - Fix spelling mistake in arch_timer selftest - Remove redundant semicolon in num_isa_ext_regs() - Fix APLIC setipnum_le/be write emulation - Fix APLIC in_clrip[x] read emulation
This commit is contained in:
commit
9bc60f7338
@ -137,11 +137,21 @@ static void aplic_write_pending(struct aplic *aplic, u32 irq, bool pending)
|
|||||||
raw_spin_lock_irqsave(&irqd->lock, flags);
|
raw_spin_lock_irqsave(&irqd->lock, flags);
|
||||||
|
|
||||||
sm = irqd->sourcecfg & APLIC_SOURCECFG_SM_MASK;
|
sm = irqd->sourcecfg & APLIC_SOURCECFG_SM_MASK;
|
||||||
if (!pending &&
|
if (sm == APLIC_SOURCECFG_SM_INACTIVE)
|
||||||
((sm == APLIC_SOURCECFG_SM_LEVEL_HIGH) ||
|
|
||||||
(sm == APLIC_SOURCECFG_SM_LEVEL_LOW)))
|
|
||||||
goto skip_write_pending;
|
goto skip_write_pending;
|
||||||
|
|
||||||
|
if (sm == APLIC_SOURCECFG_SM_LEVEL_HIGH ||
|
||||||
|
sm == APLIC_SOURCECFG_SM_LEVEL_LOW) {
|
||||||
|
if (!pending)
|
||||||
|
goto skip_write_pending;
|
||||||
|
if ((irqd->state & APLIC_IRQ_STATE_INPUT) &&
|
||||||
|
sm == APLIC_SOURCECFG_SM_LEVEL_LOW)
|
||||||
|
goto skip_write_pending;
|
||||||
|
if (!(irqd->state & APLIC_IRQ_STATE_INPUT) &&
|
||||||
|
sm == APLIC_SOURCECFG_SM_LEVEL_HIGH)
|
||||||
|
goto skip_write_pending;
|
||||||
|
}
|
||||||
|
|
||||||
if (pending)
|
if (pending)
|
||||||
irqd->state |= APLIC_IRQ_STATE_PENDING;
|
irqd->state |= APLIC_IRQ_STATE_PENDING;
|
||||||
else
|
else
|
||||||
@ -187,16 +197,31 @@ static void aplic_write_enabled(struct aplic *aplic, u32 irq, bool enabled)
|
|||||||
|
|
||||||
static bool aplic_read_input(struct aplic *aplic, u32 irq)
|
static bool aplic_read_input(struct aplic *aplic, u32 irq)
|
||||||
{
|
{
|
||||||
bool ret;
|
u32 sourcecfg, sm, raw_input, irq_inverted;
|
||||||
unsigned long flags;
|
|
||||||
struct aplic_irq *irqd;
|
struct aplic_irq *irqd;
|
||||||
|
unsigned long flags;
|
||||||
|
bool ret = false;
|
||||||
|
|
||||||
if (!irq || aplic->nr_irqs <= irq)
|
if (!irq || aplic->nr_irqs <= irq)
|
||||||
return false;
|
return false;
|
||||||
irqd = &aplic->irqs[irq];
|
irqd = &aplic->irqs[irq];
|
||||||
|
|
||||||
raw_spin_lock_irqsave(&irqd->lock, flags);
|
raw_spin_lock_irqsave(&irqd->lock, flags);
|
||||||
ret = (irqd->state & APLIC_IRQ_STATE_INPUT) ? true : false;
|
|
||||||
|
sourcecfg = irqd->sourcecfg;
|
||||||
|
if (sourcecfg & APLIC_SOURCECFG_D)
|
||||||
|
goto skip;
|
||||||
|
|
||||||
|
sm = sourcecfg & APLIC_SOURCECFG_SM_MASK;
|
||||||
|
if (sm == APLIC_SOURCECFG_SM_INACTIVE)
|
||||||
|
goto skip;
|
||||||
|
|
||||||
|
raw_input = (irqd->state & APLIC_IRQ_STATE_INPUT) ? 1 : 0;
|
||||||
|
irq_inverted = (sm == APLIC_SOURCECFG_SM_LEVEL_LOW ||
|
||||||
|
sm == APLIC_SOURCECFG_SM_EDGE_FALL) ? 1 : 0;
|
||||||
|
ret = !!(raw_input ^ irq_inverted);
|
||||||
|
|
||||||
|
skip:
|
||||||
raw_spin_unlock_irqrestore(&irqd->lock, flags);
|
raw_spin_unlock_irqrestore(&irqd->lock, flags);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -986,7 +986,7 @@ static int copy_isa_ext_reg_indices(const struct kvm_vcpu *vcpu,
|
|||||||
|
|
||||||
static inline unsigned long num_isa_ext_regs(const struct kvm_vcpu *vcpu)
|
static inline unsigned long num_isa_ext_regs(const struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
return copy_isa_ext_reg_indices(vcpu, NULL);;
|
return copy_isa_ext_reg_indices(vcpu, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int copy_sbi_ext_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
|
static int copy_sbi_ext_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices)
|
||||||
|
@ -136,7 +136,7 @@ static void guest_run_stage(struct test_vcpu_shared_data *shared_data,
|
|||||||
irq_iter = READ_ONCE(shared_data->nr_iter);
|
irq_iter = READ_ONCE(shared_data->nr_iter);
|
||||||
__GUEST_ASSERT(config_iter + 1 == irq_iter,
|
__GUEST_ASSERT(config_iter + 1 == irq_iter,
|
||||||
"config_iter + 1 = 0x%x, irq_iter = 0x%x.\n"
|
"config_iter + 1 = 0x%x, irq_iter = 0x%x.\n"
|
||||||
" Guest timer interrupt was not trigged within the specified\n"
|
" Guest timer interrupt was not triggered within the specified\n"
|
||||||
" interval, try to increase the error margin by [-e] option.\n",
|
" interval, try to increase the error margin by [-e] option.\n",
|
||||||
config_iter + 1, irq_iter);
|
config_iter + 1, irq_iter);
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ static void guest_run(struct test_vcpu_shared_data *shared_data)
|
|||||||
irq_iter = READ_ONCE(shared_data->nr_iter);
|
irq_iter = READ_ONCE(shared_data->nr_iter);
|
||||||
__GUEST_ASSERT(config_iter + 1 == irq_iter,
|
__GUEST_ASSERT(config_iter + 1 == irq_iter,
|
||||||
"config_iter + 1 = 0x%x, irq_iter = 0x%x.\n"
|
"config_iter + 1 = 0x%x, irq_iter = 0x%x.\n"
|
||||||
" Guest timer interrupt was not trigged within the specified\n"
|
" Guest timer interrupt was not triggered within the specified\n"
|
||||||
" interval, try to increase the error margin by [-e] option.\n",
|
" interval, try to increase the error margin by [-e] option.\n",
|
||||||
config_iter + 1, irq_iter);
|
config_iter + 1, irq_iter);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user