Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Interrupt handling #16

Open
urimashi opened this issue Feb 13, 2020 · 8 comments
Open

Interrupt handling #16

urimashi opened this issue Feb 13, 2020 · 8 comments

Comments

@urimashi
Copy link

Hardware: NXP SOC i.MX 8M Min
OS: Linux kernel 4.14.98 + mcp25xxfd-V8.2

The following error messages are generated during a trasnsmission attempt:
[ 43.425070] BUG: using __this_cpu_add() in preemptible [00000000] code: irq/70-
mcp25xxf/3073
[ 43.435474] caller is __this_cpu_preempt_check+0x18/0x20
[ 43.440821] CPU: 3 PID: 3073 Comm: irq/70-mcp25xxf Not tainted 4.14.98-06024-gefb8424cb055-dirty raspberrypi#19
[ 43.449954] Hardware name: CompuLab SB-UCM-iMX8 board (DT)
[ 43.455441] Call trace:
[ 43.457897] [] dump_backtrace+0x0/0x3c0
[ 43.463298] [] show_stack+0x14/0x20
[ 43.468354] [] dump_stack+0x8c/0xac
[ 43.473407] [] check_preemption_disabled+0xf8/0x100
[ 43.479850] [] __this_cpu_preempt_check+0x18/0x20
[ 43.486120] [] __netif_receive_skb_core+0x98/0x9f8
[ 43.492476] [] __netif_receive_skb+0x14/0x60
[ 43.498312] [] netif_receive_skb_internal+0x28/0x118
[ 43.504841] [] netif_receive_skb+0x1c/0xe0
[ 43.510523] [] mcp25xxfd_can_int+0x53c/0x9c0 [mcp25xxfd]
[ 43.517402] [] irq_thread_fn+0x28/0x88
[ 43.522716] [] irq_thread+0x108/0x180
[ 43.527944] [] kthread+0x130/0x138
[ 43.532910] [] ret_from_fork+0x10/0x18
[ 43.538556] mcp25xxfd spi0.0 can0: CAN Bus error experienced
[ 43.544283] BUG: using __this_cpu_add() in preemptible [00000000] code: irq/70-mcp25xxf/3073
[ 43.552757] caller is __this_cpu_preempt_check+0x18/0x20
[ 43.558097] CPU: 3 PID: 3073 Comm: irq/70-mcp25xxf Not tainted 4.14.98-06024-gefb8424cb055-dirty raspberrypi#19
[ 43.567230] Hardware name: CompuLab SB-UCM-iMX8 board (DT)
[ 43.572716] Call trace:
[ 43.575172] [] dump_backtrace+0x0/0x3c0
[ 43.580573] [] show_stack+0x14/0x20
[ 43.585628] [] dump_stack+0x8c/0xac
[ 43.590682] [] check_preemption_disabled+0xf8/0x100
[ 43.597124] [] __this_cpu_preempt_check+0x18/0x20
[ 43.603394] [] __netif_receive_skb_core+0x98/0x9f8
[ 43.609749] [] __netif_receive_skb+0x14/0x60
[ 43.615585] [] netif_receive_skb_internal+0x28/0x118
[ 43.622114] [] netif_receive_skb+0x1c/0xe0
[ 43.627796] [] mcp25xxfd_can_int+0x53c/0x9c0 [mcp25xxfd]
[ 43.634674] [] irq_thread_fn+0x28/0x88
[ 43.639988] [] irq_thread+0x108/0x180
[ 43.645216] [] kthread+0x130/0x138
[ 43.650183] [] ret_from_fork+0x10/0x18
[ 525.908095] audit: type=1006 audit(1581600601.680:3): pid=3079 uid=0 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=2 res=1

Device tree configuration:
can0: can@0 {
compatible = "microchip,mcp2517fd";
reg = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_can0>;
interrupt-parent = <&gpio1>;
interrupts = <8 IRQ_TYPE_EDGE_FALLING>;
spi-max-frequency = <20000000>;
clocks = <&clk40m>;
};

CAN bus port configuration:
ip link set can0 type can bitrate 500000

Please let me know if additional information is needed.

Thanks,
Uri

@marckleinebudde
Copy link

Hey @urimashi,

feel free to test my rewrite of the mcp25xxfd driver. It's available at:

https://github.com/marckleinebudde/linux/tree/v4.19-rpi/mcp25xxfd-20200211-17

@tayear
Copy link

tayear commented Jan 25, 2022

@marckleinebudde
Marc, sorry to disturb you, I got the same issue BUG: using __this_cpu_add() in preemptible [00000000] code: irq/70-
mcp25xxf/3073.

But when I port your v4.19-rpi/mcp25xxfd-20200429-46 brach, I got some problems such as:

drivers/net/can/spi/mcp25xxfd/mcp25xxfd-core.c:2462:41: error: 'const struct spi_device' has no member named 'controller'
const struct spi_controller *ctlr = spi->controller;
^
drivers/net/can/spi/mcp25xxfd/mcp25xxfd-core.c:2464:10: error: dereferencing pointer to incomplete type 'const struct spi_controller'
if (ctlr->flags & SPI_CONTROLLER_HALF_DUPLEX)
^
drivers/net/can/spi/mcp25xxfd/mcp25xxfd-core.c:2464:20: error: 'SPI_CONTROLLER_HALF_DUPLEX' undeclared (first use in this function)
if (ctlr->flags & SPI_CONTROLLER_HALF_DUPLEX)

My kernel version is 4.9.190.

According to this blog: https://www.spinics.net/lists/linux-can/msg01938.html , you have a patch which can solve this issue. Can you show me that?

Many thanks

@marckleinebudde
Copy link

marckleinebudde commented Jan 25, 2022

Hey @tayear,

if you are on a raspi, please use the latest Raspi OS, it contains the mcp251xfd driver. Otherwise upgrade to a recent kernel. v5.10 is the oldest one that includes the mcp251xfd driver.

If you want to use any kernel older than v5.10, some, probably a lot of patches need to be back ported, you are missing for example: marckleinebudde/linux@8caab75

Note: You have stated porting an old outdated driver, that never got mainline. It obviously has bugs. Please don't use that. Use the latest mainline kernel (v5.16) or a recent raspi OS.

@tayear
Copy link

tayear commented Jan 26, 2022

@marckleinebudde
Thank you for your reply.
My board is not raspi, and the manufacturer only provides this old version (4.9.170) kernel. If I update the kernel by myself, I'm afraid I cannot make it work.

It seems there are only two choices for me:
1, back port spi driver, including patches marckleinebudde/linux@8caab75 you mentioned.
2, modify mcp25xxfd driver by referencing a recent one.

@marckleinebudde
Copy link

Hey @tayear,

which SoC are you using? v4.9.170 is really, really old.

The mcp251xfd driver will not work out of the box on such old kernels and the old driver you picked is buggy. So you will have to do both, port SPI changes, a recent mcp251xfd driver and some CAN framework changes to your old kernel.

@tayear
Copy link

tayear commented Jan 27, 2022

Hi @marckleinebudde

I'm using AllWinner T507.
Well... I will contact the angent to check whether a newer kernel is available.
If not, can you give me some hints on how to make it? Each of these three parts seems hard for me...(lol).

@marckleinebudde
Copy link

Hello @tayear,

You start with a the mcp251xfd from mainline and back port all needed CAN and SPI patches, or you contact someone doing this professionally.

@tayear
Copy link

tayear commented Jan 28, 2022

Hi, @marckleinebudde
okay. Thank you very much.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants