将数据传输到 ram 或磁盘中的加密分区时,出现以下错误
caam_jr 30903000 .jr:swiotlb 缓冲区已满(sz:512字节),总计32768 (插槽),已使用32768 (插槽)
caam_jr 30903000.jr:无法映射源
以下是可用于重现问题的代码。
mkdir /tmp
mkdir /data
mount -o size=1G -t tmpfs none /tmp/
dd if=/dev/zero of=/tmp/disk bs=1024 count=200000
losetup /dev/loop1 /tmp/disk
caam-keygen create randomkey ecb -s 16
cat /uboot/caam/randomkey | keyctl padd logon logkey: @u
DM_DISABLE_UDEV=1 dmsetup -v create encrypted --table "0 400000 crypt capi:tk(cbc(aes))-plain :36:logon:logkey: 0 /dev/loop1 0 1 sector_size:512"
mkfs.ext4 /dev/mapper/encrypted
mount /dev/mapper/encrypted /data
dd if=/dev/zero of=/data/crap bs=1024 count=100000
我们正在使用 Yocto Kirkstone 分支和
linux-fscl-imx 5 。15 。87 - 2 。2 . 0 +g8a1a87989b6a。 该问题也存在于 linux-imx 内核分支中。
CAAM 在 Dunfell yocto 版本上运行良好,或者如果我们在 uboot 中使用 bootargs=3072M 强制使用 3GB 的 ram 而不是 4GB。
CAAM 驱动程序/DMA/swiotlb 反弹缓冲区似乎是问题所在。