[PATCH] lsi53c895a: disable reentrancy detection for MMIO region, too

Thomas Huth posted 1 patch 11 months, 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230516090556.553813-1-thuth@redhat.com
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Fam Zheng <fam@euphon.net>
hw/scsi/lsi53c895a.c | 1 +
1 file changed, 1 insertion(+)
[PATCH] lsi53c895a: disable reentrancy detection for MMIO region, too
Posted by Thomas Huth 11 months, 2 weeks ago
While trying to use a SCSI disk on the LSI controller with an
older version of Fedora (25), I'm getting:

 qemu: warning: Blocked re-entrant IO on MemoryRegion: lsi-mmio at addr: 0x34

and the SCSI controller is not usable. Seems like we have to
disable the reentrancy checker for the MMIO region, too, to
get this working again.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 hw/scsi/lsi53c895a.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
index db27872963..048436352b 100644
--- a/hw/scsi/lsi53c895a.c
+++ b/hw/scsi/lsi53c895a.c
@@ -2307,6 +2307,7 @@ static void lsi_scsi_realize(PCIDevice *dev, Error **errp)
      * re-entrancy guard.
      */
     s->ram_io.disable_reentrancy_guard = true;
+    s->mmio_io.disable_reentrancy_guard = true;
 
     address_space_init(&s->pci_io_as, pci_address_space_io(dev), "lsi-pci-io");
     qdev_init_gpio_out(d, &s->ext_irq, 1);
-- 
2.31.1
Re: [PATCH] lsi53c895a: disable reentrancy detection for MMIO region, too
Posted by Alexander Bulekov 11 months, 2 weeks ago
On 230516 1105, Thomas Huth wrote:
> While trying to use a SCSI disk on the LSI controller with an
> older version of Fedora (25), I'm getting:
> 
>  qemu: warning: Blocked re-entrant IO on MemoryRegion: lsi-mmio at addr: 0x34

Do you have a gdb backtrace for this one or is there some easy way to
reproduce with just a LiveCD or something? Marking mmio_io re-entrancy
safe would bring back https://gitlab.com/qemu-project/qemu/-/issues/1563
Maybe there is some other workaround here?
-Alex

> 
> and the SCSI controller is not usable. Seems like we have to
> disable the reentrancy checker for the MMIO region, too, to
> get this working again.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  hw/scsi/lsi53c895a.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
> index db27872963..048436352b 100644
> --- a/hw/scsi/lsi53c895a.c
> +++ b/hw/scsi/lsi53c895a.c
> @@ -2307,6 +2307,7 @@ static void lsi_scsi_realize(PCIDevice *dev, Error **errp)
>       * re-entrancy guard.
>       */
>      s->ram_io.disable_reentrancy_guard = true;
> +    s->mmio_io.disable_reentrancy_guard = true;
>  
>      address_space_init(&s->pci_io_as, pci_address_space_io(dev), "lsi-pci-io");
>      qdev_init_gpio_out(d, &s->ext_irq, 1);
> -- 
> 2.31.1
>
Re: [PATCH] lsi53c895a: disable reentrancy detection for MMIO region, too
Posted by Thomas Huth 11 months, 2 weeks ago
On 16/05/2023 11.27, Alexander Bulekov wrote:
> On 230516 1105, Thomas Huth wrote:
>> While trying to use a SCSI disk on the LSI controller with an
>> older version of Fedora (25), I'm getting:
>>
>>   qemu: warning: Blocked re-entrant IO on MemoryRegion: lsi-mmio at addr: 0x34
> 
> Do you have a gdb backtrace for this one or is there some easy way to
> reproduce with just a LiveCD or something?

I reproduced it like this:

./qemu-system-x86_64 -accel kvm -m 2G -machine q35 \
  -device lsi53c810,id=lsi1 -device scsi-hd,drive=d0 \
  -drive if=none,id=d0,file=.../somedisk.qcow2 \
  -cdrom Fedora-Everything-netinst-i386-25-1.3.iso

Where somedisk.qcow2 is an image that contains already some partitions and 
file systems.

In the boot menu of Fedora, go to "Troubleshooting" -> "Rescue a Fedora 
system" -> "3) Skip to shell"

Then check "dmesg | grep -i 53c" for failure messages, and try to mount a 
partition from somedisk.qcow2

> Marking mmio_io re-entrancy
> safe would bring back https://gitlab.com/qemu-project/qemu/-/issues/1563
> Maybe there is some other workaround here?

I think we manually have to disallow endless reentrancy in 
lsi_execute_script() ... I'm currently doing some experiments there...

  Thomas