projects
/
wrapfs-5.3.y.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
cc51beb
)
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
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Thu, 9 Jan 2020 09:20:04 +0000
(10:20 +0100)
commit
91a063c956084fb21cf2523bce6892514e3f1799
upstream.
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
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/mm/slice.c
patch
|
blob
|
history
diff --git
a/arch/powerpc/mm/slice.c
b/arch/powerpc/mm/slice.c
index 42bbcd47cc85ffb1f6900a3ec045db5a2561138d..dffe1a45b6ed4df131f8e18c6cbe851bd1b3fded 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;