Jan Kiszka wrote:
> Add proper marks for the end of Xenomai's syscall handling, just like
> LTTng provides for Linux syscall. That is helpful to keep the overview
> of current context and the time spent there. And it allows to track the
> return code.
>
> Signed-off-by: Jan Kiszka <[email protected]>
> ---
>
> 0 files changed, 0 insertions(+), 0 deletions(-)
What a marvelous patch: improvement without changes...
ksrc/nucleus/shadow.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
(stgit bug: don't call "stg mail" while in an untracked directory)
>
> diff --git a/ksrc/nucleus/shadow.c b/ksrc/nucleus/shadow.c
> index e2f2968..b9303b2 100644
> --- a/ksrc/nucleus/shadow.c
> +++ b/ksrc/nucleus/shadow.c
> @@ -1924,7 +1924,7 @@ static inline int do_hisyscall_event(unsigned event,
> unsigned domid, void *data)
> muxid = __xn_mux_id(regs);
> muxop = __xn_mux_op(regs);
>
> - trace_mark(xn_nucleus, syscall_histage,
> + trace_mark(xn_nucleus, syscall_histage_entry,
> "thread %p thread_name %s muxid %d muxop %d",
> thread, thread ? xnthread_name(thread) : NULL,
> muxid, muxop);
> @@ -1932,14 +1932,14 @@ static inline int do_hisyscall_event(unsigned event,
> unsigned domid, void *data)
> if (muxid < 0 || muxid > XENOMAI_MUX_NR ||
> muxop < 0 || muxop >= muxtable[muxid].props->nrcalls) {
> __xn_error_return(regs, -ENOSYS);
> - return RTHAL_EVENT_STOP;
> + goto ret_handled;
> }
>
> sysflags = muxtable[muxid].props->systab[muxop].flags;
>
> if ((sysflags & __xn_exec_shadow) != 0 && !thread) {
> __xn_error_return(regs, -EPERM);
> - return RTHAL_EVENT_STOP;
> + goto ret_handled;
> }
>
> if ((sysflags & __xn_exec_conforming) != 0)
> @@ -2018,6 +2018,10 @@ static inline int do_hisyscall_event(unsigned event,
> unsigned domid, void *data)
> else if ((sysflags & __xn_exec_switchback) != 0 && switched)
> xnshadow_harden(); /* -EPERM will be trapped later if
> needed. */
>
> + ret_handled:
> +
> + trace_mark(xn_nucleus, syscall_histage_exit,
> + "ret %ld", __xn_reg_rval(regs));
> return RTHAL_EVENT_STOP;
>
> linux_syscall:
> @@ -2115,7 +2119,7 @@ static inline int do_losyscall_event(unsigned event,
> unsigned domid, void *data)
> muxid = __xn_mux_id(regs);
> muxop = __xn_mux_op(regs);
>
> - trace_mark(xn_nucleus, syscall_lostage,
> + trace_mark(xn_nucleus, syscall_lostage_entry,
> "thread %p thread_name %s muxid %d muxop %d",
> xnpod_active_p() ? xnpod_current_thread() : NULL,
> xnpod_active_p() ? xnthread_name(xnpod_current_thread()) :
> NULL,
> @@ -2137,7 +2141,7 @@ static inline int do_losyscall_event(unsigned event,
> unsigned domid, void *data)
> syscall. */
> if ((err = xnshadow_harden()) != 0) {
> __xn_error_return(regs, err);
> - return RTHAL_EVENT_STOP;
> + goto ret_handled;
> }
>
> switched = 1;
> @@ -2165,6 +2169,9 @@ static inline int do_losyscall_event(unsigned event,
> unsigned domid, void *data)
> else if ((sysflags & __xn_exec_switchback) != 0 && switched)
> xnshadow_relax(0);
>
> + ret_handled:
> + trace_mark(xn_nucleus, syscall_lostage_exit,
> + "ret %ld", __xn_reg_rval(regs));
> return RTHAL_EVENT_STOP;
> }
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
_______________________________________________
Xenomai-core mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-core