On Tue, May 22, 2018 at 5:15 PM, Michael Clark <m...@sifive.com> wrote: > The address calculation for the pending bitfield had > a copy paste bug. This bug went unnoticed because the Linux > PLIC driver does not read the pending bitfield, rather it > reads pending interrupt numbers from the claim register > and writes acknowledgements back to the claim register. > > Cc: Palmer Dabbelt <pal...@sifive.com> > Cc: Sagar Karandikar <sag...@eecs.berkeley.edu> > Cc: Bastian Koppelmann <kbast...@mail.uni-paderborn.de> > Cc: Alistair Francis <alistair.fran...@wdc.com> > Reported-by: Vincent Siles <vincent.si...@ens-lyon.org> > Signed-off-by: Michael Clark <m...@sifive.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > hw/riscv/sifive_plic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/hw/riscv/sifive_plic.c b/hw/riscv/sifive_plic.c > index 28e28d932f7c..b81d29faff99 100644 > --- a/hw/riscv/sifive_plic.c > +++ b/hw/riscv/sifive_plic.c > @@ -215,7 +215,7 @@ static uint64_t sifive_plic_read(void *opaque, hwaddr > addr, unsigned size) > } else if (addr >= plic->pending_base && /* 1 bit per source */ > addr < plic->pending_base + (plic->num_sources >> 3)) > { > - uint32_t word = (addr - plic->priority_base) >> 2; > + uint32_t word = (addr - plic->pending_base) >> 2; > if (RISCV_DEBUG_PLIC) { > qemu_log("plic: read pending: word=%d value=%d\n", > word, plic->pending[word]); > -- > 2.7.0 > >