On Mon, 2024-07-15 at 14:26 +0300, Bitterblue Smith wrote: > > On 15/07/2024 14:05, Bitterblue Smith wrote: > > Hi, > > > > To reproduce the problem, you need a computer with two wifi > > devices supported by rtw88. It's especially easy to notice > > the problem if one of the devices is USB and the other is PCI, > > because the PCI device will have various values in the > > registers 0x300..0x3ff, but the USB device will have all > > 0xeaeaeaea there. > > > > 1. Let's assume the driver for the PCI device is already loaded. > > I have RTL8822CE. > > > > 2. Mount debugfs: > > > > # mount -t debugfs none /sys/kernel/debug > > > > 3. Check page 0x300: > > > > # cat /sys/kernel/debug/ieee80211/phy0/rtw88/mac_3 > > 00000300 f7138000 33330000 ffffb000 00000000 > > ..... > > > > 4. Plug the USB device. I used RTL8811CU. > > > > 5. Check page 0x300 again: > > > > # cat /sys/kernel/debug/ieee80211/phy0/rtw88/mac_3 > > 00000300 eaeaeaea eaeaeaea eaeaeaea eaeaeaea > > ..... > > > > 6. Bonus: unload rtw88_8821cu and check page 0x300 again to get > > a null pointer dereference: > > > > # rmmod rtw88_8821cu > > # cat /sys/kernel/debug/ieee80211/phy0/rtw88/mac_3 > > I forgot to say: my kernel is 6.9.8-arch1-1 from Arch Linux. > The problem also happens with kernel 6.9.8 plus rtw88 from > rtw-next. This limitation is existing since initial driver. To read a range of large registers area, for example, we need to a range via write operation and store as a private data, and then use read operation with private data to read registers. The limitation is because the private data is static variable. A possible solution is to duplicate static variable into rtwdev. Not sure if it is worth to adjust codes for debug purpose only. Another easier solution is to avoid creating debugfs for second adapter. How do you think?