Re: [PATCH v2] dma-pool: Fix too large DMA pools on medium systems
From: Guenter Roeck
Date: Sun Jun 21 2020 - 09:11:46 EST
On 6/21/20 1:35 AM, Geert Uytterhoeven wrote:
> Hi GÃnter,
>
> On Sat, Jun 20, 2020 at 10:09 PM Guenter Roeck <linux@xxxxxxxxxxxx> wrote:
>> On Mon, Jun 08, 2020 at 03:22:17PM +0200, Geert Uytterhoeven wrote:
>>> On systems with at least 32 MiB, but less than 32 GiB of RAM, the DMA
>>> memory pools are much larger than intended (e.g. 2 MiB instead of 128
>>> KiB on a 256 MiB system).
>>>
>>> Fix this by correcting the calculation of the number of GiBs of RAM in
>>> the system. Invert the order of the min/max operations, to keep on
>>> calculating in pages until the last step, which aids readability.
>>>
>>> Fixes: 1d659236fb43c4d2 ("dma-pool: scale the default DMA coherent pool size with memory capacity")
>>> Signed-off-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
>>> Acked-by: David Rientjes <rientjes@xxxxxxxxxx>
>>
>> This patch results in a boot failure in some of my powerpc boot tests,
>> specifically those testing boots from mptsas1068 devices. Error message:
>>
>> mptsas 0000:00:02.0: enabling device (0000 -> 0002)
>> mptbase: ioc0: Initiating bringup
>> ioc0: LSISAS1068 A0: Capabilities={Initiator}
>> mptbase: ioc0: ERROR - Unable to allocate Reply, Request, Chain Buffers!
>> mptbase: ioc0: ERROR - didn't initialize properly! (-3)
>> mptsas: probe of 0000:00:02.0 failed with error -3
>>
>> Configuration is bamboo:44x/bamboo_defconfig plus various added drivers.
>> Qemu command line is
>>
>> qemu-system-ppc -kernel vmlinux -M bamboo \
>> -m 256 -no-reboot -snapshot -device mptsas1068,id=scsi \
>> -device scsi-hd,bus=scsi.0,drive=d0,wwn=0x5000c50015ea71ac -drive \
>> file=rootfs.ext2,format=raw,if=none,id=d0 \
>> --append "panic=-1 slub_debug=FZPUA root=/dev/sda mem=256M console=ttyS0" \
>> -monitor none -nographic
>>
>> canyonlands_defconfig with sam460ex machine and otherwise similar command line
>> fails as well.
>>
>> Reverting this patch fixes the problem.
>
> This looks like the minimum value of 128 KiB is not sufficient, and the
> bug is in the intention of 1d659236fb43c4d2 ("dma-pool: scale the
> default DMA coherent pool size with memory capacity")?
> Before, there was a single pool of (fixed) 256 KiB size, now there are
> up to three coherent pools (DMA, DMA32, and kernel), albeit of smaller
> size (128 KiB each).
>
> Can you print the requested size in drivers/message/fusion/mptbase.c:
> PrimeIocFifos()?
172928 bytes
> Does replacing all SZ_128K by SZ_256K in my patch help?
Yes, it does.
Guenter