Error "swiotlb buffer is full" when reading 8 channels using AD7923 driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

When I enable all 8 channels from an AD7927 chip using the AD7923 driver I get the following kernel error:

[   98.429633] imx-sdma 30bd0000.dma-controller: swiotlb buffer is full (sz: 32768 bytes), total 32768 (slots), used 32736 (slots)
[   98.431413] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
[   98.431425] Mem abort info:
[   98.431427]   ESR = 0x96000004
[   98.431430]   EC = 0x25: DABT (current EL), IL = 32 bits
[   98.431434]   SET = 0, FnV = 0
[   98.431437]   EA = 0, S1PTW = 0
[   98.431439]   FSC = 0x04: level 0 translation fault
[   98.431442] Data abort info:
[   98.431444]   ISV = 0, ISS = 0x00000004
[   98.431446]   CM = 0, WnR = 0
[   98.431448] user pgtable: 4k pages, 48-bit VAs, pgdp=00000001073a1000
[   98.431453] [0000000000000008] pgd=0000000000000000, p4d=0000000000000000
[   98.431461] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[   98.437036] Modules linked in: cfg80211 fsl_jr_uio caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine rng_core authenc libdes crct10dif_ce snd_soc_fsl_sai rtc_ds1307 imx_sdma extcon_ptn5150 snd_soc_wm8904 caam secvio error fuse overlay
[   98.459228] CPU: 2 PID: 517 Comm: irq/233-ad7928_ Not tainted 5.15.60+ge9858f40abc9 #1
[   98.467145] Hardware name: Variscite DART-MX8M-PLUS
[   98.474799] pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[   98.481761] pc : _raw_write_lock_irqsave+0x254/0x318
[   98.486732] lr : complete+0x24/0x64
[   98.490220] sp : ffff80000b43bbe0
[   98.493534] x29: ffff80000b43bbe0 x28: 0000000000000000 x27: 0000000000000000
[   98.500674] x26: ffff0000c0f179b8 x25: ffff0000c6154338 x24: ffff0000c198c370
[   98.507813] x23: ffff8000089f8b20 x22: ffff0000c6154410 x21: ffff0000c0f17978
[   98.514949] x20: 0000000000000008 x19: 0000000000000000 x18: ffffffffffffffff
[   98.522090] x17: 3233203a7a732820 x16: 6c6c756620736920 x15: 0000000000000000
[   98.529228] x14: 0009201c149cb862 x13: 0000000000000000 x12: 0000000000000003
[   98.536365] x11: 0000000000000000 x10: 000000000000021f x9 : 0000000000000000
[   98.543502] x8 : 0000000000000001 x7 : 0000000000000003 x6 : 0000000000000000
[   98.550642] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000008
[   98.557781] x2 : 0000000000000001 x1 : 0000000000000000 x0 : 0000000000000001
[   98.564923] Call trace:
[   98.567368]  _raw_write_lock_irqsave+0x254/0x318
[   98.571990]  complete+0x24/0x64
[   98.575130]  spi_complete+0x10/0x20
[   98.578622]  spi_finalize_current_message+0x168/0x1f0
[   98.583672]  __spi_pump_messages+0x48c/0x5b0
[   98.587945]  __spi_sync+0x234/0x26c
[   98.591434]  spi_sync+0x30/0x54
[   98.594578]  ad7923_trigger_handler+0x24/0x8c
[   98.598934]  irq_thread_fn+0x2c/0x9c
[   98.602512]  irq_thread+0x178/0x2c0
[   98.605998]  kthread+0x150/0x160
[   98.609227]  ret_from_fork+0x10/0x20
[   98.612808] Code: 17fffeba d5384613 521b0a60 f9800071 (885ffc60)
[   98.618901] ---[ end trace 9fd562a23b7ff000 ]---
[   98.623517] note: irq/233-ad7928_[517] exited with preempt_count 1
[   98.629757] genirq: exiting task "irq/233-ad7928_" (517) is an active IRQ thread (irq 233)


Six channels work fine. Increasing the swiotlb buffer to 262144 does not help. All slots are still used.

To reproduce, I run the following commands:

TRIGGER_NAME=trigger
IIO_DEVICE=/sys/bus/iio/devices/iio\:device0
TRIGGER_DEVICE=/sys/bus/iio/devices/trigger0
SAMPLING_FREQUENCY=1
mkdir -p /sys/kernel/config/iio/triggers/hrtimer/$TRIGGER_NAME
echo $TRIGGER_NAME > $IIO_DEVICE/trigger/current_trigger
echo $SAMPLING_FREQUENCY > $TRIGGER_DEVICE/sampling_frequency
echo 1 > $IIO_DEVICE/scan_elements/in_voltage0_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage1_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage2_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage3_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage4_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage5_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage6_en
echo 1 > $IIO_DEVICE/scan_elements/in_voltage7_en
echo 1 > $IIO_DEVICE/buffer/enable


The error message appears immediately after the last command.
Kernel version is 5.15.60 (https://github.com/varigit/linux-imx/tree/5.15-2.0.x-imx_var01)

Best regards,
Hein Gustavsen




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux