[PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection

Guenter Roeck posted 1 patch 2 years ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231213014932.1748323-1-linux@roeck-us.net
Maintainers: Peter Maydell <peter.maydell@linaro.org>
hw/sd/pxa2xx_mmci.c | 2 ++
1 file changed, 2 insertions(+)
[PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Guenter Roeck 2 years ago
All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
dma-reentracy issues"). Disable reentrancy guard to fix the problem.

Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 hw/sd/pxa2xx_mmci.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
index 5e8ea69188..27ae8f2888 100644
--- a/hw/sd/pxa2xx_mmci.c
+++ b/hw/sd/pxa2xx_mmci.c
@@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
     qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
     qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
 
+    s->iomem.disable_reentrancy_guard = true;
+
     qbus_init(&s->sdbus, sizeof(s->sdbus),
               TYPE_PXA2XX_MMCI_BUS, DEVICE(obj), "sd-bus");
 }
-- 
2.39.2
Re: [PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Peter Maydell 2 years ago
On Wed, 13 Dec 2023 at 01:49, Guenter Roeck <linux@roeck-us.net> wrote:
>
> All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
> such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
> dma-reentracy issues"). Disable reentrancy guard to fix the problem.
>
> Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
>  hw/sd/pxa2xx_mmci.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
> index 5e8ea69188..27ae8f2888 100644
> --- a/hw/sd/pxa2xx_mmci.c
> +++ b/hw/sd/pxa2xx_mmci.c
> @@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>      qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
>      qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
>
> +    s->iomem.disable_reentrancy_guard = true;
> +

All patches that set this flag should include a comment which
explains what the device access path that triggers the reentrancy
is, please.

thanks
-- PMM
Re: [PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Guenter Roeck 2 years ago
On 12/13/23 09:12, Peter Maydell wrote:
> On Wed, 13 Dec 2023 at 01:49, Guenter Roeck <linux@roeck-us.net> wrote:
>>
>> All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
>> such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
>> dma-reentracy issues"). Disable reentrancy guard to fix the problem.
>>
>> Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>>   hw/sd/pxa2xx_mmci.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
>> index 5e8ea69188..27ae8f2888 100644
>> --- a/hw/sd/pxa2xx_mmci.c
>> +++ b/hw/sd/pxa2xx_mmci.c
>> @@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>>       qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
>>       qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
>>
>> +    s->iomem.disable_reentrancy_guard = true;
>> +
> 
> All patches that set this flag should include a comment which
> explains what the device access path that triggers the reentrancy
> is, please.
> 

No idea what that would be, sorry. I noticed that the reentrancy guard
causes the affected emulations to fail, but I have no understanding or
knowledge of the code itself. NP if this is insufficient to apply the patch.
I am carrying it locally anyway, so for me it doesn't make a difference.
Maybe someone with better understanding of the underlying code can pick
it up at some point in the future and provide the necessary context.

Thanks,
Guenter
Re: [PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Philippe Mathieu-Daudé 2 years ago
Hi Guenter,

On 13/12/23 18:12, Peter Maydell wrote:
> On Wed, 13 Dec 2023 at 01:49, Guenter Roeck <linux@roeck-us.net> wrote:
>>
>> All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
>> such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
>> dma-reentracy issues"). Disable reentrancy guard to fix the problem.
>>
>> Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>> ---
>>   hw/sd/pxa2xx_mmci.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
>> index 5e8ea69188..27ae8f2888 100644
>> --- a/hw/sd/pxa2xx_mmci.c
>> +++ b/hw/sd/pxa2xx_mmci.c
>> @@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>>       qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
>>       qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
>>
>> +    s->iomem.disable_reentrancy_guard = true;
>> +
> 
> All patches that set this flag should include a comment which
> explains what the device access path that triggers the reentrancy
> is, please.

Can we get a reproducer or backtrace please?
Re: [PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Guenter Roeck 2 years ago
On 12/13/23 09:19, Philippe Mathieu-Daudé wrote:
> Hi Guenter,
> 
> On 13/12/23 18:12, Peter Maydell wrote:
>> On Wed, 13 Dec 2023 at 01:49, Guenter Roeck <linux@roeck-us.net> wrote:
>>>
>>> All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
>>> such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
>>> dma-reentracy issues"). Disable reentrancy guard to fix the problem.
>>>
>>> Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
>>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>>> ---
>>>   hw/sd/pxa2xx_mmci.c | 2 ++
>>>   1 file changed, 2 insertions(+)
>>>
>>> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
>>> index 5e8ea69188..27ae8f2888 100644
>>> --- a/hw/sd/pxa2xx_mmci.c
>>> +++ b/hw/sd/pxa2xx_mmci.c
>>> @@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>>>       qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
>>>       qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
>>>
>>> +    s->iomem.disable_reentrancy_guard = true;
>>> +
>>
>> All patches that set this flag should include a comment which
>> explains what the device access path that triggers the reentrancy
>> is, please.
> 
> Can we get a reproducer or backtrace please?

qemu-system-arm: warning: Blocked re-entrant IO on MemoryRegion: pxa2xx-mmci at addr: 0x40
[    0.770246] mmc0: invalid bus width
[    0.770962] mmc0: error -22 whilst initialising SD card
[    0.828179] mmc0: invalid bus width
[    0.828445] mmc0: error -22 whilst initialising SD card

with:

qemu-system-arm -M borzoi -kernel arch/arm/boot/zImage -no-reboot -snapshot \
	-device sd-card,drive=d0 -drive file=/tmp/flash,format=raw,if=none,id=d0 \
	-usb -device usb-net,netdev=net0 -netdev user,id=net0 \
	--append "root=/dev/mmcblk0 rootwait console=ttyS0"

Guenter


Re: [PATCH] hw/sd/pxa2xx_mmci: Disable reentrancy detection
Posted by Philippe Mathieu-Daudé 2 years ago
On 13/12/23 19:04, Guenter Roeck wrote:
> On 12/13/23 09:19, Philippe Mathieu-Daudé wrote:
>> Hi Guenter,
>>
>> On 13/12/23 18:12, Peter Maydell wrote:
>>> On Wed, 13 Dec 2023 at 01:49, Guenter Roeck <linux@roeck-us.net> wrote:
>>>>
>>>> All tests using pxa2xx_mmc to access mmc cards on pxa2xx platforms
>>>> such as borzoi fail starting with commit a2e1753b80 ("memory: prevent
>>>> dma-reentracy issues"). Disable reentrancy guard to fix the problem.
>>>>
>>>> Fixes: a2e1753b80 ("memory: prevent dma-reentracy issues")
>>>> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
>>>> ---
>>>>   hw/sd/pxa2xx_mmci.c | 2 ++
>>>>   1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
>>>> index 5e8ea69188..27ae8f2888 100644
>>>> --- a/hw/sd/pxa2xx_mmci.c
>>>> +++ b/hw/sd/pxa2xx_mmci.c
>>>> @@ -555,6 +555,8 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>>>>       qdev_init_gpio_out_named(dev, &s->rx_dma, "rx-dma", 1);
>>>>       qdev_init_gpio_out_named(dev, &s->tx_dma, "tx-dma", 1);
>>>>
>>>> +    s->iomem.disable_reentrancy_guard = true;
>>>> +
>>>
>>> All patches that set this flag should include a comment which
>>> explains what the device access path that triggers the reentrancy
>>> is, please.
>>
>> Can we get a reproducer or backtrace please?
> 
> qemu-system-arm: warning: Blocked re-entrant IO on MemoryRegion: 
> pxa2xx-mmci at addr: 0x40
> [    0.770246] mmc0: invalid bus width
> [    0.770962] mmc0: error -22 whilst initialising SD card
> [    0.828179] mmc0: invalid bus width
> [    0.828445] mmc0: error -22 whilst initialising SD card
> 
> with:
> 
> qemu-system-arm -M borzoi -kernel arch/arm/boot/zImage -no-reboot 
> -snapshot \
>      -device sd-card,drive=d0 -drive 
> file=/tmp/flash,format=raw,if=none,id=d0 \
>      -usb -device usb-net,netdev=net0 -netdev user,id=net0 \
>      --append "root=/dev/mmcblk0 rootwait console=ttyS0"

Thank you, I'll have a look after Christmas.

Regards,

Phil.