Open CiaranWoodward opened 7 years ago
After a modification to prevent the shutting down of the driver upon the "too many retries!", the driver still becomes unresponsive after the error. Furthermore, the radio does not acknowledge any incoming frames, and the chip appears unresponsive.
Potentially related is the repeated NACKing for the IRQ receive:
[ 7265.953383] ca8210 spi0.0: retried spi write
[ 7265.954759] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7265.973335] ca8210 spi0.0: retried spi write
[ 7265.974690] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7265.993335] ca8210 spi0.0: retried spi write
[ 7266.006893] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7266.023352] ca8210 spi0.0: retried spi write
[ 7269.002268] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.002292] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.018349] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.018364] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.036682] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.036697] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.061907] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.061921] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.099989] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.100003] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.124940] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.124954] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.168631] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.168645] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.193488] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.193502] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7269.801988] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7269.802003] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7270.658351] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7270.658374] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7271.036737] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.053355] ca8210 spi0.0: retried spi write
[ 7271.054041] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.083359] ca8210 spi0.0: retried spi write
[ 7271.084041] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.123360] ca8210 spi0.0: retried spi write
[ 7271.124043] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.173398] ca8210 spi0.0: retried spi write
[ 7271.174083] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.174100] ca8210 spi0.0: too many retries!
[ 7271.443242] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7271.443259] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7272.193868] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7272.193883] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7272.999612] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7272.999630] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7273.913557] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7273.913575] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7273.929356] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7273.929370] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7274.553595] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7274.553614] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7275.491626] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7275.491643] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7275.963377] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7275.963392] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7276.243669] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7276.243687] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7276.713523] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7276.713538] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7277.569844] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7277.569860] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7278.322741] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7278.322758] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7278.678308] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7278.678323] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7279.426954] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7279.426972] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7279.999780] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7279.999798] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7280.896271] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7280.896288] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7280.912069] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7280.912085] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7281.487444] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7281.487463] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7282.490267] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7282.490286] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7283.404944] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7283.404963] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7283.420744] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7283.420759] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7284.154093] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7284.154109] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7285.707971] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7285.707991] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7286.782928] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7286.782949] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7286.798730] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7286.798746] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7288.092557] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7288.092575] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
[ 7288.340990] ca8210 spi0.0: ca8210 was busy during attempted write
[ 7288.341006] ca8210 spi0.0: IRQ servicing NACKd, dropping transfer
Occasionally the driver will attempt SPI writes too many times and fail with the "too many retries" error message. This will cause the driver to remove itself, however attempting to reattach the driver will fail with no error, and attempting to remove the module will crash the kernel.
Also, under heavy traffic, this can happen extremely quickly, so a softer recovery path would be preferred.
Crash:
Kernel error if attempt to remove again: