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 <guoren@linux.alibaba.com> Cc: Greentime Hu <greentime.hu@sifive.com> Cc: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
e6169c4b44
commit
bdcd93ef9a
|
@ -42,6 +42,8 @@ config CSKY
|
||||||
select HAVE_ARCH_MMAP_RND_BITS
|
select HAVE_ARCH_MMAP_RND_BITS
|
||||||
select HAVE_ARCH_SECCOMP_FILTER
|
select HAVE_ARCH_SECCOMP_FILTER
|
||||||
select HAVE_COPY_THREAD_TLS
|
select HAVE_COPY_THREAD_TLS
|
||||||
|
select HAVE_CONTEXT_TRACKING
|
||||||
|
select HAVE_VIRT_CPU_ACCOUNTING_GEN
|
||||||
select HAVE_DEBUG_BUGVERBOSE
|
select HAVE_DEBUG_BUGVERBOSE
|
||||||
select HAVE_DYNAMIC_FTRACE
|
select HAVE_DYNAMIC_FTRACE
|
||||||
select HAVE_DYNAMIC_FTRACE_WITH_REGS
|
select HAVE_DYNAMIC_FTRACE_WITH_REGS
|
||||||
|
|
|
@ -23,6 +23,24 @@
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro context_tracking
|
||||||
|
#ifdef CONFIG_CONTEXT_TRACKING
|
||||||
|
mfcr a0, epsr
|
||||||
|
btsti a0, 31
|
||||||
|
bt 1f
|
||||||
|
jbsr context_tracking_user_exit
|
||||||
|
ldw a0, (sp, LSAVE_A0)
|
||||||
|
ldw a1, (sp, LSAVE_A1)
|
||||||
|
ldw a2, (sp, LSAVE_A2)
|
||||||
|
ldw a3, (sp, LSAVE_A3)
|
||||||
|
#if defined(__CSKYABIV1__)
|
||||||
|
ldw r6, (sp, LSAVE_A4)
|
||||||
|
ldw r7, (sp, LSAVE_A5)
|
||||||
|
#endif
|
||||||
|
1:
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
.macro tlbop_begin name, val0, val1, val2
|
.macro tlbop_begin name, val0, val1, val2
|
||||||
ENTRY(csky_\name)
|
ENTRY(csky_\name)
|
||||||
mtcr a3, ss2
|
mtcr a3, ss2
|
||||||
|
@ -103,6 +121,7 @@ ENTRY(csky_\name)
|
||||||
.endm
|
.endm
|
||||||
.macro tlbop_end is_write
|
.macro tlbop_end is_write
|
||||||
zero_fp
|
zero_fp
|
||||||
|
context_tracking
|
||||||
RD_MEH a2
|
RD_MEH a2
|
||||||
psrset ee, ie
|
psrset ee, ie
|
||||||
mov a0, sp
|
mov a0, sp
|
||||||
|
@ -128,6 +147,7 @@ tlbop_end 1
|
||||||
ENTRY(csky_systemcall)
|
ENTRY(csky_systemcall)
|
||||||
SAVE_ALL TRAP0_SIZE
|
SAVE_ALL TRAP0_SIZE
|
||||||
zero_fp
|
zero_fp
|
||||||
|
context_tracking
|
||||||
psrset ee, ie
|
psrset ee, ie
|
||||||
|
|
||||||
lrw r9, __NR_syscalls
|
lrw r9, __NR_syscalls
|
||||||
|
@ -237,6 +257,9 @@ ret_from_exception:
|
||||||
and r10, r9
|
and r10, r9
|
||||||
cmpnei r10, 0
|
cmpnei r10, 0
|
||||||
bt exit_work
|
bt exit_work
|
||||||
|
#ifdef CONFIG_CONTEXT_TRACKING
|
||||||
|
jbsr context_tracking_user_enter
|
||||||
|
#endif
|
||||||
1:
|
1:
|
||||||
#ifdef CONFIG_PREEMPTION
|
#ifdef CONFIG_PREEMPTION
|
||||||
mov r9, sp
|
mov r9, sp
|
||||||
|
@ -277,6 +300,7 @@ work_resched:
|
||||||
ENTRY(csky_trap)
|
ENTRY(csky_trap)
|
||||||
SAVE_ALL 0
|
SAVE_ALL 0
|
||||||
zero_fp
|
zero_fp
|
||||||
|
context_tracking
|
||||||
psrset ee
|
psrset ee
|
||||||
mov a0, sp /* Push Stack pointer arg */
|
mov a0, sp /* Push Stack pointer arg */
|
||||||
jbsr trap_c /* Call C-level trap handler */
|
jbsr trap_c /* Call C-level trap handler */
|
||||||
|
@ -311,6 +335,7 @@ ENTRY(csky_get_tls)
|
||||||
ENTRY(csky_irq)
|
ENTRY(csky_irq)
|
||||||
SAVE_ALL 0
|
SAVE_ALL 0
|
||||||
zero_fp
|
zero_fp
|
||||||
|
context_tracking
|
||||||
psrset ee
|
psrset ee
|
||||||
|
|
||||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||||
|
|
Loading…
Reference in New Issue