diff mbox series

hw/sd/pxa2xx_mmci: Disable reentrancy detection

Message ID 20231213014932.1748323-1-linux@roeck-us.net
State New
Headers show
Series hw/sd/pxa2xx_mmci: Disable reentrancy detection | expand

Commit Message

Guenter Roeck Dec. 13, 2023, 1:49 a.m. UTC
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(+)

Comments

Peter Maydell Dec. 13, 2023, 5:12 p.m. UTC | #1
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
Philippe Mathieu-Daudé Dec. 13, 2023, 5:19 p.m. UTC | #2
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?
Guenter Roeck Dec. 13, 2023, 5:55 p.m. UTC | #3
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
Guenter Roeck Dec. 13, 2023, 6:04 p.m. UTC | #4
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
Philippe Mathieu-Daudé Dec. 13, 2023, 7 p.m. UTC | #5
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.
diff mbox series

Patch

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");
 }