On 17.09.19 15:57, [email protected] wrote:
Hi Jan,
wow, that was a really quick response.
Does "testing latest rt release" mean that I also have to use a new Linux kernel version?
Currently I am running linux 4.14.71-rt44.
The most recent rt-patch for linux 4.14 seems to be "patch-4.14.137-rt66.patch"
Would you recommend to use that?

I would recommend v5.2.14-rt7 to cross-check if the issue is version-agnostic.

Jan

Thanks for your comments
Jochen
 >> Hello,
 >>
 >> I am running an Alchemy application (xenomai 3.0.9) over Linux
 >> prempt-rt on a dual core
 >> atom (E3930) and noticed a side effect of the Linux boot parameter
 >> "rcu_nocbs".
 >
 >To clarify: You are using Xenomai in mercury mode (userspace libs only) on a
 >stock preempt-rt kernel, right? Then a kernel splash is best reported to the
 >preempt-rt community. But first make sure to have tested also the latest 
release
 >to clarify if that is a stable -rt issue or a general one.
 >
 >Jan
 >
 >>
 >> Whenever the kernel bootparameter "rcu_nocbs=1" is set, I get the
 >> following Linux
 >> kernel warning, when the AlchemyTask (TestTask) is terminated.
 >>
 >>
 >> Sep 17 13:02:43 localhost kernel: [ 97.342398] ------------[ cut here
 >> ]------------
 >> Sep 17 13:02:43 localhost kernel: [ 97.342412] WARNING: CPU: 0 PID:
 >> 530 at
 >> /home/behnkjoc/prc2020/poky/build-tca5-32/tmp/work-shared/congatec-tca5
 >> -32/kernel-source/kernel/rcu/tree_plugin.h:310
 >> rcu_note_context_switch+0x2a0/0x4d0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342414] Modules linked in:
 >> ec_generic(O) ec_master(O) spidev nls_iso8859_1 cmdlinepart
 >> intel_spi_platform intel_spi spi_nor mtd spi_pxa2xx_platform joydev
 >> intel_rapl intel_powerclamp coretemp crc32_pclmul snd_hda_codec_hdmi
 >> pcbc aesni_intel aes_i586 crypto_simd cryptd intel_cstate
 >> intel_rapl_perf i2c_i801 lpc_ich pcspkr idma64 virt_dma intel_lpss_
 >> pci intel_lpss input_leds mac_hid i915 video snd_hda_intel
 >> drm_kms_helper snd_hda_codec snd_hda_core snd_hwdep snd_pcm
 >> hid_multitouch drm mei_me snd_timer fb_sys_fops syscopyarea sysfillrect
 >> snd
 >> mei sysimgblt soundcore shpchp sch_fq_codel nfsd autofs4
 >> Sep 17 13:02:43 localhost kernel: [ 97.342470] CPU: 0 PID: 530 Comm:
 >> TestTask Tainted: G O 4.14.71-rt44 #1
 >> Sep 17 13:02:43 localhost kernel: [ 97.342472] task: f3347300
 >> task.stack: f32ea000
 >> Sep 17 13:02:43 localhost kernel: [ 97.342476] EIP:
 >> rcu_note_context_switch+0x2a0/0x4d0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342478] EFLAGS: 00010002 CPU:
 >> 0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342480] EAX: 00000001 EBX:
 >> 00000000 ECX: 00000001 EDX: 00000000
 >> Sep 17 13:02:43 localhost kernel: [ 97.342482] ESI: 00000000 EDI:
 >> f3347300 EBP: f32ebeec ESP: f32ebed0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342485] DS: 007b ES: 007b FS:
 >> 00d8 GS: 00e0 SS: 0068
 >> Sep 17 13:02:43 localhost kernel: [ 97.342487] CR0: 80050033 CR2:
 >> 06338490 CR3: 332d4000 CR4: 003406d0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342489] Call Trace:
 >> Sep 17 13:02:43 localhost kernel: [ 97.342501] ?
 >> unpin_current_cpu+0x53/0x80
 >> Sep 17 13:02:43 localhost kernel: [ 97.342507] __schedule+0x85/0x700
 >> Sep 17 13:02:43 localhost kernel: [ 97.342511] ?
 >> _raw_spin_unlock_irqrestore+0x17/0x50
 >> Sep 17 13:02:43 localhost kernel: [ 97.342514] ?
 >> rt_spin_unlock+0x24/0x50
 >> Sep 17 13:02:43 localhost kernel: [ 97.342517] schedule+0x41/0xe0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342521]
 >> hrtimer_wait_for_timer+0x5d/0x90
 >> Sep 17 13:02:43 localhost kernel: [ 97.342525] ?
 >> wait_woken+0x70/0x70
 >> Sep 17 13:02:43 localhost kernel: [ 97.342530]
 >> timer_wait_for_callback+0x40/0x50
 >> Sep 17 13:02:43 localhost kernel: [ 97.342533]
 >> SyS_timer_delete+0x6b/0x140
 >> Sep 17 13:02:43 localhost kernel: [ 97.342538]
 >> do_int80_syscall_32+0x6b/0xf0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342542]
 >> entry_INT80_32+0x31/0x31
 >> Sep 17 13:02:43 localhost kernel: [ 97.342545] EIP: 0xb22c68d0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342546] EFLAGS: 00000282 CPU:
 >> 0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342548] EAX: ffffffda EBX:
 >> 00000002 ECX: 00000000 EDX: b1d00480
 >> Sep 17 13:02:43 localhost kernel: [ 97.342550] ESI: b1d005e0 EDI:
 >> b22cc000 EBP: b1fc7318 ESP: b1fc72b0
 >> Sep 17 13:02:43 localhost kernel: [ 97.342552] DS: 007b ES: 007b FS:
 >> 0000 GS: 0033 SS: 007b
 >> Sep 17 13:02:43 localhost kernel: [ 97.342556] Code: c3 83 e8 01 39
 >> c2 0f 85 27 02 00 00 83 f9 0f 8d 97 f8 02 00 00 0f 87 78 01 00 00 8b 04
 >> 8d f8 52 51 c3 e9 a4 9b 83 00 8d 74 26 00 <0f> 0b 80
 >> bf f4 02 00 00 00 0f 85 a6 fd ff ff e9 1c ff ff ff 8d
 >> Sep 17 13:02:43 localhost kernel: [ 97.342600] ---[ end trace
 >> 0000000000000002 ]---
 >> The issue can be reproduced with the following simple program
 >> ///////////////////////////////////////////////////////////////////////
 >> ////////
 >> // Test application
 >> ///////////////////////////////////////////////////////////////////////
 >> ////////
 >> #include <stdio.h>
 >> #include <unistd.h> // usleep
 >> #include <alchemy/task.h>
 >> #define CPU_AFFINITY_DEFAULT 0
 >> #define MAIN_TASK_NAME "MainTask"
 >> #define MAIN_TASK_PRIO 0
 >> #define MAIN_TASK_MODE 0
 >> #define TESTTASK_NAME "TestTask"
 >> #define TESTTASK_PRIO 10
 >> #define TESTTASK_MODE 0
 >> #define TESTTASK_STACKSIZE 0x100000l // 1 MB
 >> #define TESTTASK_PERIOD_NS (5* 1000000)
 >> typedef struct {
 >> RT_TASK TaskDescr;
 >> int nEndTask;
 >> int Period_ns;
 >> } TESTTASK_CONTEXT;
 >> RT_TASK g_MainTask;
 >> int g_nRun=1;
 >> void TestTask(void *pData) {
 >> TESTTASK_CONTEXT *pCtx = (TESTTASK_CONTEXT *)pData;
 >> unsigned long overrun;
 >> int nErr = 0;
 >> printf("TestTask starting...\n");
 >> nErr = rt_task_set_periodic(NULL, TM_NOW,
 >> rt_timer_ns2ticks(pCtx->Period_ns));
 >> while (!pCtx->nEndTask) {
 >> rt_task_wait_period(&overrun);
 >> }
 >> printf("TestTask terminating...\n");
 >> }
 >> int StartTestTask(TESTTASK_CONTEXT* pCtx)
 >> {
 >> printf("Starting TestTask...\n");
 >>
 >> int err;
 >> pCtx->nEndTask=0;
 >> pCtx->Period_ns=TESTTASK_PERIOD_NS;
 >> err = rt_task_spawn(&pCtx->TaskDescr, TESTTASK_NAME,
 >> TESTTASK_STACKSIZE, TESTTASK_PRIO, T_JOINABLE, TestTask, pCtx);
 >> if (err) {
 >> printf("Error in rt_task_spawn_() \n");
 >> return err;
 >> }
 >> return 0;
 >> }
 >> void StopTestTask(TESTTASK_CONTEXT* pCtx){
 >> printf("Stopping TestTask...\n");
 >> pCtx->nEndTask=1;
 >>
 >> RT_TASK_INFO ti;
 >> if (0 == rt_task_inquire(&pCtx->TaskDescr, &ti) ) {
 >> rt_task_join(&pCtx->TaskDescr);
 >> }
 >> }
 >>
 >> // Signalhandler für SIGTERM und SIGINT (Ctrl-C)
 >> void TerminationHandler(int sig) {
 >> if(sig==SIGTERM) {
 >> printf("##### Termination Signal Handler(%d) #####\n",sig);
 >> }
 >> if(sig==SIGINT) {
 >> printf("##### Signal Handler(%d) #####\n",sig);
 >> }
 >> g_nRun=0;
 >> return;
 >> }
 >> int main(int argc, char* argv[]){
 >> TESTTASK_CONTEXT ctxTestTask;
 >> signal(SIGTERM, TerminationHandler);
 >> signal(SIGINT, TerminationHandler);
 >> StartTestTask(&ctxTestTask);
 >> //--- Main Loop ---
 >> while(g_nRun != 0 ) {
 >> printf("main loop\n");
 >> usleep(1000000); // sleep 1 sec
 >> }
 >> StopTestTask(&ctxTestTask);
 >> printf("MainTask terminating\n");
 >> return 0;
 >> }
 >> ///////////////////////////////////////////////////////////////////////
 >> ////////
 >> // End: Test application
 >> ///////////////////////////////////////////////////////////////////////
 >> ////////
 >>
 >> Any ideas what could be the problem?
 >>
 >>
 >> Thanks in advance
 >> Jochen
 >>
 >
 >--
 >Siemens AG, Corporate Technology, CT RDA IOT SES-DE
 >Corporate Competence Center Embedded Linux
 >

--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

Reply via email to