Skip to content

Commit bdcd93e

Browse files
committed
csky: Add context tracking support
This patch support context tracking with no hz full. Here is the test result with dynticks-testing (see tick_stop): cat /sys/kernel/debug/tracing/per_cpu/cpu0/trace tracer: nop entries-in-buffer/entries-written: 356/356 #P:1 _-----=> irqs-off / _----=> need-resched | / _---=> hardirq/softirq || / _--=> preempt-depth ||| / delay TASK-PID CPU# |||| TIMESTAMP FUNCTION | | | |||| | | ... sleep-192 [000] d.h. 167.088270: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=166436355700 sleep-192 [000] d.h. 167.092279: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=166440365700 <idle>-0 [000] d.h2 167.096492: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=166444578400 <idle>-0 [000] d..1 167.097876: tick_stop: success=1 dependency=NONE ^^^^^^^^^ <idle>-0 [000] d.h1 168.818206: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=168166280900 kworker/u2:0-7 [000] .... 168.821760: workqueue_execute_start: work struct (ptrval): function wb_workfn kworker/u2:0-7 [000] d.h1 168.824464: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=168172547100 kworker/0:1-18 [000] .... 168.825053: workqueue_execute_start: work struct (ptrval): function vmstat_update kworker/0:1-18 [000] .... 168.825238: workqueue_execute_start: work struct (ptrval): function vmstat_shepherd kworker/0:1-18 [000] .... 168.825516: workqueue_execute_start: work struct (ptrval): function neigh_periodic_work <idle>-0 [000] d..1 168.826121: tick_stop: success=1 dependency=NONE kworker/u2:0-7 [000] .... 169.377327: workqueue_execute_start: work struct (ptrval): function flush_to_ldisc <idle>-0 [000] d..1 169.379832: tick_stop: success=1 dependency=NONE kworker/u2:0-7 [000] .... 169.607935: workqueue_execute_start: work struct (ptrval): function flush_to_ldisc kworker/u2:0-7 [000] d.h1 169.608148: hrtimer_expire_entry: hrtimer=(ptrval) function=tick_sched_timer now=168956235500 <idle>-0 [000] d..1 169.608654: tick_stop: success=1 dependency=NONE Signed-off-by: Guo Ren <[email protected]> Cc: Greentime Hu <[email protected]> Cc: Arnd Bergmann <[email protected]>
1 parent e6169c4 commit bdcd93e

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

arch/csky/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ config CSKY
4242
select HAVE_ARCH_MMAP_RND_BITS
4343
select HAVE_ARCH_SECCOMP_FILTER
4444
select HAVE_COPY_THREAD_TLS
45+
select HAVE_CONTEXT_TRACKING
46+
select HAVE_VIRT_CPU_ACCOUNTING_GEN
4547
select HAVE_DEBUG_BUGVERBOSE
4648
select HAVE_DYNAMIC_FTRACE
4749
select HAVE_DYNAMIC_FTRACE_WITH_REGS

arch/csky/kernel/entry.S

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,24 @@
2323
#endif
2424
.endm
2525

26+
.macro context_tracking
27+
#ifdef CONFIG_CONTEXT_TRACKING
28+
mfcr a0, epsr
29+
btsti a0, 31
30+
bt 1f
31+
jbsr context_tracking_user_exit
32+
ldw a0, (sp, LSAVE_A0)
33+
ldw a1, (sp, LSAVE_A1)
34+
ldw a2, (sp, LSAVE_A2)
35+
ldw a3, (sp, LSAVE_A3)
36+
#if defined(__CSKYABIV1__)
37+
ldw r6, (sp, LSAVE_A4)
38+
ldw r7, (sp, LSAVE_A5)
39+
#endif
40+
1:
41+
#endif
42+
.endm
43+
2644
.macro tlbop_begin name, val0, val1, val2
2745
ENTRY(csky_\name)
2846
mtcr a3, ss2
@@ -103,6 +121,7 @@ ENTRY(csky_\name)
103121
.endm
104122
.macro tlbop_end is_write
105123
zero_fp
124+
context_tracking
106125
RD_MEH a2
107126
psrset ee, ie
108127
mov a0, sp
@@ -128,6 +147,7 @@ tlbop_end 1
128147
ENTRY(csky_systemcall)
129148
SAVE_ALL TRAP0_SIZE
130149
zero_fp
150+
context_tracking
131151
psrset ee, ie
132152

133153
lrw r9, __NR_syscalls
@@ -237,6 +257,9 @@ ret_from_exception:
237257
and r10, r9
238258
cmpnei r10, 0
239259
bt exit_work
260+
#ifdef CONFIG_CONTEXT_TRACKING
261+
jbsr context_tracking_user_enter
262+
#endif
240263
1:
241264
#ifdef CONFIG_PREEMPTION
242265
mov r9, sp
@@ -277,6 +300,7 @@ work_resched:
277300
ENTRY(csky_trap)
278301
SAVE_ALL 0
279302
zero_fp
303+
context_tracking
280304
psrset ee
281305
mov a0, sp /* Push Stack pointer arg */
282306
jbsr trap_c /* Call C-level trap handler */
@@ -311,6 +335,7 @@ ENTRY(csky_get_tls)
311335
ENTRY(csky_irq)
312336
SAVE_ALL 0
313337
zero_fp
338+
context_tracking
314339
psrset ee
315340

316341
#ifdef CONFIG_TRACE_IRQFLAGS

0 commit comments

Comments
 (0)