drm/amdgpu: flush pending RCU callbacks on module unload
Call rcu_barrier() in module exit to wait for outstanding call_rcu() callbacks
before freeing module text, preventing late callback execution in freed memory.
BUG: unable to handle page fault for address:
ffffffffc1d59c40
PGD
6a12067 P4D
6a12067 PUD
6a14067 PMD
13698b067 PTE 0
Oops: 0010 [#1] SMP NOPTI
RIP: 0010:0xffffffffc1d59c40
Code: Unable to access opcode bytes at RIP 0xffffffffc1d59c16.
RSP: 0018:
ffffc900198c0f28 EFLAGS:
00010286
RAX:
ffffffffc1d59c40 RBX:
ffff897c7d6b61c0 RCX:
ffff88826aff4590
RDX:
ffff8884d8b35490 RSI:
ffffc900198c0f30 RDI:
ffff88812af67290
RBP:
000000000000000a (DONE segment entries) R08:
0000000000000000 R09:
0000000000000100
R10:
0000000000000000 R11:
ffffffff82a06100 R12:
ffff88811a4e3700
R13:
0000000000000000 R14:
ffff897c7d6b6270 R15:
0000000000000000
FS:
0000000000000000(0000) GS:
ffff897c7d680000(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
ffffffffc1d59c16 CR3:
00000104a980a001 CR4:
0000000002770ee0
DR0:
0000000000000000 DR1:
0000000000000000 DR2:
0000000000000000
DR3:
0000000000000000 DR6:
00000000fffe07f0 DR7:
0000000000000400
PKRU:
55555554
Call Trace:
<IRQ>
? rcu_do_batch+0x163/0x450
? rcu_core+0x177/0x1c0
? __do_softirq+0xc1/0x280
? asm_call_irq_on_stack+0xf/0x20
</IRQ>
? do_softirq_own_stack+0x37/0x50
? irq_exit_rcu+0xc4/0x100
? sysvec_apic_timer_interrupt+0x36/0x80
? asm_sysvec_apic_timer_interrupt+0x12/0x20
? cpuidle_enter_state+0xd4/0x360
? cpuidle_enter+0x29/0x40
? cpuidle_idle_call+0x108/0x1a0
? do_idle+0x77/0xf0
? cpu_startup_entry+0x19/0x20
? secondary_startup_64_no_verify+0xbf/0xcb
Signed-off-by: Perry Yuan <perry.yuan@amd.com>
Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit
feaa5039f6c12acc9aa934c2d45dcd251a12c69f)