Commit ebb7f616 authored by Li Zhong's avatar Li Zhong Committed by Benjamin Herrenschmidt

powerpc: Fix unpaired __trace_hcall_entry and __trace_hcall_exit

 Unpaired calling of __trace_hcall_entry and __trace_hcall_exit could
 cause incorrect preempt count. And it might happen as the global
 variable hcall_tracepoint_refcount is checked separately before calling
 them.

 Instead, store the value that was used on entry in the stack frame
 and retreive it from there after the call
Reported-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarLi Zhong <zhong@linux.vnet.ibm.com>
Tested-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent a5ccfee0
...@@ -36,6 +36,7 @@ BEGIN_FTR_SECTION; \ ...@@ -36,6 +36,7 @@ BEGIN_FTR_SECTION; \
b 1f; \ b 1f; \
END_FTR_SECTION(0, 1); \ END_FTR_SECTION(0, 1); \
ld r12,hcall_tracepoint_refcount@toc(r2); \ ld r12,hcall_tracepoint_refcount@toc(r2); \
std r12,32(r1); \
cmpdi r12,0; \ cmpdi r12,0; \
beq+ 1f; \ beq+ 1f; \
mflr r0; \ mflr r0; \
...@@ -74,7 +75,7 @@ END_FTR_SECTION(0, 1); \ ...@@ -74,7 +75,7 @@ END_FTR_SECTION(0, 1); \
BEGIN_FTR_SECTION; \ BEGIN_FTR_SECTION; \
b 1f; \ b 1f; \
END_FTR_SECTION(0, 1); \ END_FTR_SECTION(0, 1); \
ld r12,hcall_tracepoint_refcount@toc(r2); \ ld r12,32(r1); \
cmpdi r12,0; \ cmpdi r12,0; \
beq+ 1f; \ beq+ 1f; \
mflr r0; \ mflr r0; \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment