projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
46cf053
)
powerpc/mm: Mark get_slice_psize() & slice_addr_is_low() as notrace
author
Michael Ellerman
<mpe@ellerman.id.au>
Sat, 21 Dec 2019 03:16:54 +0000
(14:16 +1100)
committer
Michael Ellerman
<mpe@ellerman.id.au>
Mon, 23 Dec 2019 10:12:51 +0000
(21:12 +1100)
These slice routines are called from the SLB miss handler, which can
lead to warnings from the IRQ code, because we have not reconciled the
IRQ state properly:
WARNING: CPU: 72 PID: 30150 at arch/powerpc/kernel/irq.c:258 arch_local_irq_restore.part.0+0xcc/0x100
Modules linked in:
CPU: 72 PID: 30150 Comm: ftracetest Not tainted
5.5.0-rc2-gcc9x-g7e0165b2f1a9
#1
NIP:
c00000000001d83c
LR:
c00000000029ab90
CTR:
c00000000026cf90
REGS:
c0000007eee3b960
TRAP: 0700 Not tainted (
5.5.0-rc2-gcc9x-g7e0165b2f1a9
)
MSR:
8000000000021033
<SF,ME,IR,DR,RI,LE> CR:
22242844
XER:
20000000
CFAR:
c00000000001d780
IRQMASK: 0
...
NIP arch_local_irq_restore.part.0+0xcc/0x100
LR trace_graph_entry+0x270/0x340
Call Trace:
trace_graph_entry+0x254/0x340 (unreliable)
function_graph_enter+0xe4/0x1a0
prepare_ftrace_return+0xa0/0x130
ftrace_graph_caller+0x44/0x94 # (get_slice_psize())
slb_allocate_user+0x7c/0x100
do_slb_fault+0xf8/0x300
instruction_access_slb_common+0x140/0x180
Fixes:
48e7b7695745
("powerpc/64s/hash: Convert SLB miss handlers to C")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link:
https://lore.kernel.org/r/20191221121337.4894-1-mpe@ellerman.id.au
arch/powerpc/mm/slice.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/mm/slice.c
b/arch/powerpc/mm/slice.c
index
42bbcd4
..
dffe1a4
100644
(file)
--- a/
arch/powerpc/mm/slice.c
+++ b/
arch/powerpc/mm/slice.c
@@
-50,7
+50,7
@@
static void slice_print_mask(const char *label, const struct slice_mask *mask) {
#endif
-static inline bool slice_addr_is_low(unsigned long addr)
+static inline
notrace
bool slice_addr_is_low(unsigned long addr)
{
u64 tmp = (u64)addr;
@@
-659,7
+659,7
@@
unsigned long arch_get_unmapped_area_topdown(struct file *filp,
mm_ctx_user_psize(¤t->mm->context), 1);
}
-unsigned int get_slice_psize(struct mm_struct *mm, unsigned long addr)
+unsigned int
notrace
get_slice_psize(struct mm_struct *mm, unsigned long addr)
{
unsigned char *psizes;
int index, mask_index;