There is no point in specializing the resolution of clock_gettime() in
the vDSO on a per-arch basis. This is mostly generic code with only a
couple of arch-specific identifiers we need, which we can leave into
the arch/ area.
Move the bulk of the symbol resolution code to the generic init
routine, adding asm/evl/vdso.h for storing the few arch-specific bits
such code still depends on.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
_FORTIFY_SOURCE requires the optimizer to be enabled. Make sure to
force the former off when we disable the latter.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
-ENXIO is the conventional error code signaling that the caller has
issued a syscall without being attached to the core. Make sure
evl_open_sem() detects this and bails out early.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Use the preset values of CC, CXX, LD, AR if already defined in the
environment.
This is typically required for building libevl with the Yocto SDK,
with the settings sourced from the environment-setup script.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Address this warning from the 'find' command used in the evl-test
script:
"find: warning: you have specified the global option -maxdepth after
the argument -type, but global options are not positional, i.e.,
-maxdepth affects tests specified before it as well as those specified
after it. Please specify global options before other arguments."
A receiver could get a spurious empty tube status, due to
receive_tube() racing with send_tube(). See the added comments into
the code for details about the resolution.
At this chance, guard against load/store tearing on shared pointers.
Pending issue: we still have a potential connectivity issue between
the prep and finish ops when pushing to a tube.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Enabling the ftrace infrastructure causes runtime overhead which is
noticeable in latmus figures, even with dynamic tracepoints
disabled. Warn about CONFIG_FTRACE being enabled.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
It comes in handy to be able to enable a set of related tracepoints
for specific tracing purposes.
The -e option can now take an optional parameter specifying a
pre-defined group of related tracepoints to enable, so far:
irq = pipeline_entry, pipeline_exit, handler_entry, handler_exit
timer = tracepoints related to timer event handling with latmus (used in
chasing latency in the timer handling path)
evl = all core tracepoints
all = all tracepoints ftrace knows about
-eall is identical to -f.
-E<tracepoint_file> enables the tracepoints mentioned in the
user-provided <file>.
-t can be passed to dry-run the enable command, getting the list of
ftrace settings which would have been set without this option when
enabling the trace.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Having a predictable sequence for testing and listing is handy. In
addition, ensure that shim tests are listed last.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Refrain from inlining core services, so that interposing on them via
dynamic linking tricks is made easier.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
evl_get_current() contains implementation details which are definitely
not part of the API and the way this works should not be exposed.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Refrain from inlining core services, so that interposing on them via
dynamic linking tricks is made easier.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
What evl_read_clock() does is non-trivial, enough to call for an out
of line implementation.
In general, refrain from inlining core services, so that interposing
on them via dynamic linking tricks is made easier.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
We have no more in-tree users of these. Besides, let's assume that the
CPU's branch predictor always has better clues than we might have when
assessing the likeliness of a condition.
Bonus: this clears a recurring source of namespace clashes with C++
frameworks like Boost.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
In user-space at least, we'd be better off trusting the CPU's branch
predictor, instead of relying on our limited perception when it comes
to determining the likeliness of a condition, or every compiler to do
the right thing with respect to efficient branching.
We only have a couple of likely predictions in-tree on straightforward
conditions from the tube implementation code, which we can remove
safely.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
When evl_attach_thread() was called, a local stack variable *attrs* will copy-
from-user to linux-evl. The problem is that *attrs* initializes only two of its
members:attrs.sched_policy and attrs.sched_priority, but none of the other
members are initialized.
These uninitialized may be "zero" or any other random values, for example:
attrs->sched_rr_quantum may be some none-zero value when the threads under
discussion is a SCHED_RR task.
In this case, *attrs* copyed to linux-evl in *thread_common_ioctl()*, and
attrs->sched_rr_quantum is none-zero value; then fllowed call *set_time_slice*
will lead to a -EINVAL return for meet *quantum <= evl_get_clock_gravity()*.
This patch will initialize all members of *attrs* to zero.
Signed-off-by: lio <liu.hailong6@zte.com.cn>
Libevl use *-Wshadow=local* flags in config.mk. However this flag is
only valid when version >=7, otherwise gcc will complain :
"unrecognized command line option ‘-Wshadow=local’; did you mean
‘-Wshadow-ivar’?"
and compile will be failed.
This patch fix this probelm.
Signed-off-by: lio <liu.hailong6@zte.com.cn>
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Kernel entry instrumentation/debug code has to run in the hot path by
definition, add it to the list of settings which may increase
latency. This feature is only available for x86 as of kernel 5.8, but
it is likely going to spread all over the place in the future, so
register it as generic.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
Add back a 1s warm-up time, making sure not to include the delta
values collected during this period in the histogram distribution this
time.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>
We may not get back to the test sitter upon signal (SIGINT/SIGALRM),
so move the code parsing the last data bulk behind the sigwait() call
instead.
Signed-off-by: Philippe Gerum <rpm@xenomai.org>