Message ID | 20220927061225.3566554-4-yangxiaojuan@loongson.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add memmap and fix bugs for LoongArch | expand |
On 9/26/22 23:12, Xiaojuan Yang wrote: > In ipi_send function, it should not to set irq before > writing data to dest cpu iocsr space, as the irq will > trigger after data writing. > > Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> > --- > hw/intc/loongarch_ipi.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c > index 4f3c58f872..aa4bf9eb74 100644 > --- a/hw/intc/loongarch_ipi.c > +++ b/hw/intc/loongarch_ipi.c > @@ -88,7 +88,6 @@ static void ipi_send(uint64_t val) > cs = qemu_get_cpu(cpuid); > cpu = LOONGARCH_CPU(cs); > env = &cpu->env; > - loongarch_cpu_set_irq(cpu, IRQ_IPI, 1); > address_space_stl(&env->address_space_iocsr, 0x1008, > data, MEMTXATTRS_UNSPECIFIED, NULL); > Did you mean to move the call below the set? Otherwise, where does the irq get raised? r~
在 2022/9/29 上午10:42, Richard Henderson 写道: > On 9/26/22 23:12, Xiaojuan Yang wrote: >> In ipi_send function, it should not to set irq before >> writing data to dest cpu iocsr space, as the irq will >> trigger after data writing. >> >> Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> >> --- >> hw/intc/loongarch_ipi.c | 1 - >> 1 file changed, 1 deletion(-) >> >> diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c >> index 4f3c58f872..aa4bf9eb74 100644 >> --- a/hw/intc/loongarch_ipi.c >> +++ b/hw/intc/loongarch_ipi.c >> @@ -88,7 +88,6 @@ static void ipi_send(uint64_t val) >> cs = qemu_get_cpu(cpuid); >> cpu = LOONGARCH_CPU(cs); >> env = &cpu->env; >> - loongarch_cpu_set_irq(cpu, IRQ_IPI, 1); >> address_space_stl(&env->address_space_iocsr, 0x1008, >> data, MEMTXATTRS_UNSPECIFIED, NULL); > > Did you mean to move the call below the set? > Otherwise, where does the irq get raised? > When call this function 'address_space_stl(&env->address_space_iocsr, 0x1008, ... ...)', it will trigger loongarch_ipi_writel(), the addr arg is 0x1008 ('CORE_SET_OFFSET'), and qemu_irq_raise will be called in this case. Thanks. Xiaojuan Yang
On 9/28/22 20:23, yangxiaojuan wrote: > > 在 2022/9/29 上午10:42, Richard Henderson 写道: >> On 9/26/22 23:12, Xiaojuan Yang wrote: >>> In ipi_send function, it should not to set irq before >>> writing data to dest cpu iocsr space, as the irq will >>> trigger after data writing. >>> >>> Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> >>> --- >>> hw/intc/loongarch_ipi.c | 1 - >>> 1 file changed, 1 deletion(-) >>> >>> diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c >>> index 4f3c58f872..aa4bf9eb74 100644 >>> --- a/hw/intc/loongarch_ipi.c >>> +++ b/hw/intc/loongarch_ipi.c >>> @@ -88,7 +88,6 @@ static void ipi_send(uint64_t val) >>> cs = qemu_get_cpu(cpuid); >>> cpu = LOONGARCH_CPU(cs); >>> env = &cpu->env; >>> - loongarch_cpu_set_irq(cpu, IRQ_IPI, 1); >>> address_space_stl(&env->address_space_iocsr, 0x1008, >>> data, MEMTXATTRS_UNSPECIFIED, NULL); >> >> Did you mean to move the call below the set? >> Otherwise, where does the irq get raised? >> > When call this function 'address_space_stl(&env->address_space_iocsr, 0x1008, ... ...)', > it will trigger loongarch_ipi_writel(), the addr arg is 0x1008 ('CORE_SET_OFFSET'), and > qemu_irq_raise will be called in this case. Ah, I see now, connected to qdev_connect_gpio_out(ipi, cpu, qdev_get_gpio_in(cpudev, IRQ_IPI)); Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c index 4f3c58f872..aa4bf9eb74 100644 --- a/hw/intc/loongarch_ipi.c +++ b/hw/intc/loongarch_ipi.c @@ -88,7 +88,6 @@ static void ipi_send(uint64_t val) cs = qemu_get_cpu(cpuid); cpu = LOONGARCH_CPU(cs); env = &cpu->env; - loongarch_cpu_set_irq(cpu, IRQ_IPI, 1); address_space_stl(&env->address_space_iocsr, 0x1008, data, MEMTXATTRS_UNSPECIFIED, NULL);
In ipi_send function, it should not to set irq before writing data to dest cpu iocsr space, as the irq will trigger after data writing. Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> --- hw/intc/loongarch_ipi.c | 1 - 1 file changed, 1 deletion(-)