| 1 | diff -Naur xenomai-2.2.3/config.log xenomai-2.2.3-good/config.log |
| 2 | --- xenomai-2.2.3/config.log 2006-12-07 17:17:36.000000000 -0500 |
| 3 | +++ xenomai-2.2.3-good/config.log 2006-12-07 11:09:13.000000000 -0500 |
| 4 | @@ -954,6 +954,7 @@ |
| 5 | config.status:894: creating doc/docbook/custom-stylesheets/xsl/html/onechunk.xsl |
| 6 | config.status:894: creating doc/docbook/xenomai/Makefile |
| 7 | config.status:960: creating src/include/xeno_config.h |
| 8 | +config.status:1092: src/include/xeno_config.h is unchanged |
| 9 | config.status:1171: linking ./include/asm-i386 to src/include/asm/xenomai |
| 10 | config.status:1171: linking ./include/asm-generic to src/include/asm-generic/xenomai |
| 11 | config.status:1408: executing depfiles commands |
| 12 | diff -Naur xenomai-2.2.3/include/nucleus/ltt.h xenomai-2.2.3-good/include/nucleus/ltt.h |
| 13 | --- xenomai-2.2.3/include/nucleus/ltt.h 2006-07-18 09:18:51.000000000 -0400 |
| 14 | +++ xenomai-2.2.3-good/include/nucleus/ltt.h 2006-11-14 10:01:40.000000000 -0500 |
| 15 | @@ -96,11 +96,13 @@ |
| 16 | |
| 17 | extern int xnltt_filter; |
| 18 | |
| 19 | -#define xnltt_log_event(ev, args...) \ |
| 20 | +#define xnltt_log_event(ev, args...) ; |
| 21 | +/* |
| 22 | do { \ |
| 23 | if (xnltt_evtable[ev].ltt_filter & xnltt_filter) \ |
| 24 | ltt_log_std_formatted_event(xnltt_evtable[ev].ltt_evid, ##args); \ |
| 25 | } while(0) |
| 26 | +*/ |
| 27 | |
| 28 | static inline void xnltt_set_filter (int mask) |
| 29 | { |
| 30 | diff -Naur xenomai-2.2.3/include/nucleus/synch.h xenomai-2.2.3-good/include/nucleus/synch.h |
| 31 | --- xenomai-2.2.3/include/nucleus/synch.h 2006-08-13 15:42:27.000000000 -0400 |
| 32 | +++ xenomai-2.2.3-good/include/nucleus/synch.h 2006-11-14 10:01:40.000000000 -0500 |
| 33 | @@ -17,6 +17,12 @@ |
| 34 | * 02111-1307, USA. |
| 35 | */ |
| 36 | |
| 37 | +/**************************************************** |
| 38 | + * JOV - XenoLTT - 2006-10-24 |
| 39 | + * To enable LTTng tracing functions on Xenomai synch |
| 40 | + ****************************************************/ |
| 41 | +#include <linux/ltt/ltt-facility-xenoltt.h> |
| 42 | + |
| 43 | #ifndef _XENO_NUCLEUS_SYNCH_H |
| 44 | #define _XENO_NUCLEUS_SYNCH_H |
| 45 | |
| 46 | @@ -89,6 +95,12 @@ |
| 47 | |
| 48 | static inline void xnsynch_set_owner (xnsynch_t *synch, struct xnthread *thread) |
| 49 | { |
| 50 | +/************************************************************** |
| 51 | + * JOV - XenoLTT - 2006-10-24 |
| 52 | + * Here we place the tracing call for the set owner function |
| 53 | + * Args: synch object, thread |
| 54 | + **************************************************************/ |
| 55 | + trace_xenoltt_xeno_synch_set_owner(thread,synch); |
| 56 | synch->owner = thread; |
| 57 | } |
| 58 | |
| 59 | diff -Naur xenomai-2.2.3/ksrc/nucleus/intr.c xenomai-2.2.3-good/ksrc/nucleus/intr.c |
| 60 | --- xenomai-2.2.3/ksrc/nucleus/intr.c 2006-07-18 09:19:03.000000000 -0400 |
| 61 | +++ xenomai-2.2.3-good/ksrc/nucleus/intr.c 2006-11-14 10:01:18.000000000 -0500 |
| 62 | @@ -389,7 +389,7 @@ |
| 63 | xnarch_memory_barrier(); |
| 64 | |
| 65 | xnltt_log_event(xeno_ev_ienter, irq); |
| 66 | - |
| 67 | + |
| 68 | ++sched->inesting; |
| 69 | s = intr->isr(intr); |
| 70 | ++intr->hits; |
| 71 | @@ -476,7 +476,7 @@ |
| 72 | xnarch_memory_barrier(); |
| 73 | |
| 74 | xnltt_log_event(xeno_ev_ienter, irq); |
| 75 | - |
| 76 | + |
| 77 | ++sched->inesting; |
| 78 | |
| 79 | xnintr_shirq_lock(shirq); |
| 80 | @@ -521,7 +521,7 @@ |
| 81 | xnarch_memory_barrier(); |
| 82 | |
| 83 | xnltt_log_event(xeno_ev_ienter, irq); |
| 84 | - |
| 85 | + |
| 86 | ++sched->inesting; |
| 87 | |
| 88 | xnintr_shirq_lock(shirq); |
| 89 | diff -Naur xenomai-2.2.3/ksrc/nucleus/ltt.c xenomai-2.2.3-good/ksrc/nucleus/ltt.c |
| 90 | --- xenomai-2.2.3/ksrc/nucleus/ltt.c 2006-07-18 09:19:03.000000000 -0400 |
| 91 | +++ xenomai-2.2.3-good/ksrc/nucleus/ltt.c 2006-11-14 10:01:18.000000000 -0500 |
| 92 | @@ -34,8 +34,7 @@ |
| 93 | va_start(ap, fmt); |
| 94 | vsnprintf(markbuf, sizeof(markbuf), fmt, ap); |
| 95 | va_end(ap); |
| 96 | - ltt_log_std_formatted_event(xnltt_evtable[xeno_ev_mark]. |
| 97 | - ltt_evid, markbuf); |
| 98 | +// ltt_log_std_formatted_event(xnltt_evtable[xeno_ev_mark]. ltt_evid, markbuf); |
| 99 | } |
| 100 | } |
| 101 | |
| 102 | @@ -46,13 +45,15 @@ |
| 103 | /* Create all custom LTT events we need. */ |
| 104 | |
| 105 | for (ev = 0; xnltt_evtable[ev].ltt_label != NULL; ev++) { |
| 106 | +/* |
| 107 | evid = ltt_create_event(xnltt_evtable[ev].ltt_label, |
| 108 | xnltt_evtable[ev].ltt_format, |
| 109 | LTT_CUSTOM_EV_FORMAT_TYPE_STR, NULL); |
| 110 | +*/ |
| 111 | if (evid < 0) { |
| 112 | while (--ev >= 0) { |
| 113 | xnltt_evtable[ev].ltt_evid = -1; |
| 114 | - ltt_destroy_event(xnltt_evtable[ev].ltt_evid); |
| 115 | +// ltt_destroy_event(xnltt_evtable[ev].ltt_evid); |
| 116 | } |
| 117 | |
| 118 | return evid; |
| 119 | @@ -81,9 +82,10 @@ |
| 120 | void __exit xnltt_umount(void) |
| 121 | { |
| 122 | int ev; |
| 123 | - |
| 124 | +/* |
| 125 | for (ev = 0; xnltt_evtable[ev].ltt_evid != -1; ev++) |
| 126 | ltt_destroy_event(xnltt_evtable[ev].ltt_evid); |
| 127 | +*/ |
| 128 | } |
| 129 | |
| 130 | struct xnltt_evmap xnltt_evtable[] = { |
| 131 | diff -Naur xenomai-2.2.3/ksrc/nucleus/pod.c xenomai-2.2.3-good/ksrc/nucleus/pod.c |
| 132 | --- xenomai-2.2.3/ksrc/nucleus/pod.c 2006-09-03 09:45:41.000000000 -0400 |
| 133 | +++ xenomai-2.2.3-good/ksrc/nucleus/pod.c 2006-12-08 09:03:25.000000000 -0500 |
| 134 | @@ -44,6 +44,12 @@ |
| 135 | #include <nucleus/module.h> |
| 136 | #include <nucleus/ltt.h> |
| 137 | |
| 138 | +/**************************************************** |
| 139 | + * JOV - XenoLTT - 2006-09-25 |
| 140 | + * To enable LTTng tracing functions on Xenomai task |
| 141 | + ****************************************************/ |
| 142 | +#include <linux/ltt/ltt-facility-xenoltt.h> |
| 143 | + |
| 144 | /* NOTE: We need to initialize the globals: remember that this code |
| 145 | also runs over user-space VMs... */ |
| 146 | |
| 147 | @@ -227,6 +233,7 @@ |
| 148 | void xnpod_schedule_handler(void) |
| 149 | { |
| 150 | xnltt_log_event(xeno_ev_smpsched); |
| 151 | + |
| 152 | xnsched_set_resched(xnpod_current_sched()); |
| 153 | xnpod_schedule(); |
| 154 | } |
| 155 | @@ -814,6 +821,13 @@ |
| 156 | return err; |
| 157 | |
| 158 | xnltt_log_event(xeno_ev_thrinit, thread->name, flags); |
| 159 | + |
| 160 | +/************************************************************* |
| 161 | + * JOV - XenoLTT - 2006-09-25 |
| 162 | + * Here we place the tracing call for the thread init function |
| 163 | + * Args: Name, address, flags, priority |
| 164 | + *************************************************************/ |
| 165 | + trace_xenoltt_xeno_thread_init(thread->name,thread,flags,prio); |
| 166 | |
| 167 | xnlock_get_irqsave(&nklock, s); |
| 168 | thread->sched = xnpod_current_sched(); |
| 169 | @@ -947,6 +961,13 @@ |
| 170 | |
| 171 | xnltt_log_event(xeno_ev_thrstart, thread->name); |
| 172 | |
| 173 | +/************************************************************** |
| 174 | + * JOV - XenoLTT - 2006-09-25 |
| 175 | + * Here we place the tracing call for the thread start function |
| 176 | + * Args: Name, address |
| 177 | + **************************************************************/ |
| 178 | + trace_xenoltt_xeno_thread_start(thread->name,thread); |
| 179 | + |
| 180 | #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE) |
| 181 | if (testbits(thread->status, XNSHADOW)) { |
| 182 | xnlock_put_irqrestore(&nklock, s); |
| 183 | @@ -1027,7 +1048,14 @@ |
| 184 | xnlock_get_irqsave(&nklock, s); |
| 185 | |
| 186 | xnltt_log_event(xeno_ev_threstart, thread->name); |
| 187 | +/*************************************************************** |
| 188 | + * JOV - XenoLTT - 2006-10-05 |
| 189 | + * Here we place the tracing call for the thread restart function |
| 190 | + * Args: Name, address |
| 191 | + ***************************************************************/ |
| 192 | + trace_xenoltt_xeno_thread_restart(thread->name,thread); |
| 193 | |
| 194 | + |
| 195 | /* Break the thread out of any wait it is currently in. */ |
| 196 | xnpod_unblock_thread(thread); |
| 197 | |
| 198 | @@ -1226,6 +1254,14 @@ |
| 199 | |
| 200 | xnltt_log_event(xeno_ev_thrdelete, thread->name); |
| 201 | |
| 202 | +/*************************************************************** |
| 203 | + * JOV - XenoLTT - 2006-09-25 |
| 204 | + * Here we place the tracing call for the thread delete function |
| 205 | + * Args: Name, address |
| 206 | + ***************************************************************/ |
| 207 | + trace_xenoltt_xeno_thread_delete(thread->name,thread); |
| 208 | + |
| 209 | + |
| 210 | sched = thread->sched; |
| 211 | |
| 212 | removeq(&nkpod->threadq, &thread->glink); |
| 213 | @@ -1375,6 +1411,14 @@ |
| 214 | |
| 215 | xnltt_log_event(xeno_ev_thrsuspend, thread->name, mask, timeout, wchan); |
| 216 | |
| 217 | +/**************************************************************** |
| 218 | + * JOV - XenoLTT - 2006-09-25 |
| 219 | + * Here we place the tracing call for the thread suspend function |
| 220 | + * Args: Name, address, address of a pended resource |
| 221 | + ****************************************************************/ |
| 222 | + trace_xenoltt_xeno_thread_suspend(thread->name,thread,mask,timeout,wchan); |
| 223 | + |
| 224 | + |
| 225 | sched = thread->sched; |
| 226 | |
| 227 | if (thread == sched->runthread) { |
| 228 | @@ -1552,6 +1596,14 @@ |
| 229 | xnlock_get_irqsave(&nklock, s); |
| 230 | |
| 231 | xnltt_log_event(xeno_ev_thresume, thread->name, mask); |
| 232 | + |
| 233 | +/*************************************************************** |
| 234 | + * JOV - XenoLTT - 2006-09-25 |
| 235 | + * Here we place the tracing call for the thread resume function |
| 236 | + * Args: Name, address, start time, period |
| 237 | + ***************************************************************/ |
| 238 | + trace_xenoltt_xeno_thread_resume(thread->name,thread,mask); |
| 239 | + |
| 240 | xnarch_trace_pid(xnthread_user_task(thread) ? |
| 241 | xnarch_user_pid(xnthread_archtcb(thread)) : -1, |
| 242 | xnthread_current_priority(thread)); |
| 243 | @@ -1701,6 +1753,12 @@ |
| 244 | xnlock_get_irqsave(&nklock, s); |
| 245 | |
| 246 | xnltt_log_event(xeno_ev_thrunblock, thread->name, thread->status); |
| 247 | +/*************************************************************** |
| 248 | + * JOV - XenoLTT - 2006-09-25 |
| 249 | + * Here we place the tracing call for the thread unblock function |
| 250 | + * Args: Name, address, start time, period |
| 251 | + ***************************************************************/ |
| 252 | + trace_xenoltt_xeno_thread_unblock(thread->name,thread,thread->status); |
| 253 | |
| 254 | if (testbits(thread->status, XNDELAY)) |
| 255 | xnpod_resume_thread(thread, XNDELAY); |
| 256 | @@ -1785,6 +1843,13 @@ |
| 257 | |
| 258 | xnltt_log_event(xeno_ev_threnice, thread->name, prio); |
| 259 | |
| 260 | +/*************************************************************** |
| 261 | + * JOV - XenoLTT - 2006-09-25 |
| 262 | + * Here we place the tracing call for the thread renice function |
| 263 | + * Args: Name, address, priority |
| 264 | + ***************************************************************/ |
| 265 | + trace_xenoltt_xeno_thread_renice(thread->name,thread,prio); |
| 266 | + |
| 267 | oldprio = thread->cprio; |
| 268 | |
| 269 | /* Change the thread priority, taking in account an undergoing PIP |
| 270 | @@ -2316,11 +2381,11 @@ |
| 271 | #ifdef CONFIG_XENO_OPT_PERVASIVE |
| 272 | int shadow; |
| 273 | #endif /* CONFIG_XENO_OPT_PERVASIVE */ |
| 274 | - |
| 275 | if (xnarch_escalate()) |
| 276 | return; |
| 277 | |
| 278 | xnltt_log_event(xeno_ev_resched); |
| 279 | + |
| 280 | #endif /* __KERNEL__ */ |
| 281 | |
| 282 | /* No immediate rescheduling is possible if an ISR or callout |
| 283 | @@ -2419,6 +2484,13 @@ |
| 284 | |
| 285 | xnltt_log_event(xeno_ev_switch, threadout->name, threadin->name); |
| 286 | |
| 287 | +/************************************************************** |
| 288 | + * JOV - XenoLTT - 2006-11-09 |
| 289 | + * Here we place the tracing call for the thread switch fonction |
| 290 | + * Args: Name, address, thread out name, address |
| 291 | + **************************************************************/ |
| 292 | + trace_xenoltt_xeno_thread_switch(threadin->name,threadin,threadout->name,threadout); |
| 293 | + |
| 294 | #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE) |
| 295 | shadow = testbits(threadout->status, XNSHADOW); |
| 296 | #endif /* __KERNEL__ && CONFIG_XENO_OPT_PERVASIVE */ |
| 297 | @@ -2526,6 +2598,7 @@ |
| 298 | xnthread_t *runthread = sched->runthread, *threadin; |
| 299 | |
| 300 | xnltt_log_event(xeno_ev_fastsched); |
| 301 | + |
| 302 | xnarch_trace_pid(xnthread_user_task(runthread) ? |
| 303 | xnarch_user_pid(xnthread_archtcb(runthread)) : -1, |
| 304 | xnthread_current_priority(runthread)); |
| 305 | @@ -3245,7 +3318,7 @@ |
| 306 | xnlock_get(&nklock); |
| 307 | |
| 308 | xnltt_log_event(xeno_ev_tmtick, xnpod_current_thread()->name); |
| 309 | - |
| 310 | + |
| 311 | #ifdef CONFIG_XENO_OPT_WATCHDOG |
| 312 | if (xnarch_get_cpu_tsc() >= sched->watchdog_trigger) { |
| 313 | if (!xnpod_root_p() && sched->watchdog_armed) { |
| 314 | @@ -3371,6 +3444,13 @@ |
| 315 | |
| 316 | xnltt_log_event(xeno_ev_thrperiodic, thread->name, idate, period); |
| 317 | |
| 318 | +/************************************************************** |
| 319 | + * JOV - XenoLTT - 2006-09-25 |
| 320 | + * Here we place the tracing call for the set periodic function |
| 321 | + * Args: Name, address, start time, period |
| 322 | + **************************************************************/ |
| 323 | + trace_xenoltt_xeno_thread_set_period(thread->name,thread,idate,period,&thread->ptimer); |
| 324 | + |
| 325 | if (period == XN_INFINITE) { |
| 326 | if (xntimer_running_p(&thread->ptimer)) |
| 327 | xntimer_stop(&thread->ptimer); |
| 328 | @@ -3392,6 +3472,7 @@ |
| 329 | thread->pexpect = |
| 330 | xntimer_get_raw_expiry(&thread->ptimer) |
| 331 | + xntimer_interval(&thread->ptimer); |
| 332 | + |
| 333 | xnpod_suspend_thread(thread, XNDELAY, XN_INFINITE, |
| 334 | NULL); |
| 335 | } else |
| 336 | @@ -3466,6 +3547,13 @@ |
| 337 | |
| 338 | xnltt_log_event(xeno_ev_thrwait, thread->name); |
| 339 | |
| 340 | +/************************************************************** |
| 341 | + * JOV - XenoLTT - 2006-09-25 |
| 342 | + * Here we place the tracing call for the wait perdiod function |
| 343 | + * Args: Name, address |
| 344 | + **************************************************************/ |
| 345 | + trace_xenoltt_xeno_thread_wait_period(thread->name,thread); |
| 346 | + |
| 347 | now = xntimer_get_rawclock(); /* Work with either TSC or periodic ticks. */ |
| 348 | |
| 349 | if (likely(now < thread->pexpect)) { |
| 350 | @@ -3500,7 +3588,13 @@ |
| 351 | #endif /* BITS_PER_LONG < 64 */ |
| 352 | thread->pexpect += period * overruns; |
| 353 | err = -ETIMEDOUT; |
| 354 | - } |
| 355 | +/************************************************************** |
| 356 | + * JOV - XenoLTT - 2006-10-16 |
| 357 | + * Here we place the tracing call for the event of period exceed |
| 358 | + * Args: Name, address, number of periods exceeded |
| 359 | + **************************************************************/ |
| 360 | + trace_xenoltt_xeno_thread_missed_period(thread->name,thread,overruns); |
| 361 | + } |
| 362 | |
| 363 | thread->pexpect += period; |
| 364 | |
| 365 | diff -Naur xenomai-2.2.3/ksrc/nucleus/synch.c xenomai-2.2.3-good/ksrc/nucleus/synch.c |
| 366 | --- xenomai-2.2.3/ksrc/nucleus/synch.c 2006-09-03 12:44:10.000000000 -0400 |
| 367 | +++ xenomai-2.2.3-good/ksrc/nucleus/synch.c 2006-11-14 10:01:18.000000000 -0500 |
| 368 | @@ -37,6 +37,11 @@ |
| 369 | #include <nucleus/module.h> |
| 370 | #include <nucleus/ltt.h> |
| 371 | |
| 372 | +/**************************************************** |
| 373 | + * JOV - XenoLTT - 2006-10-17 |
| 374 | + * To enable LTTng tracing functions on Xenomai synch |
| 375 | + ****************************************************/ |
| 376 | +#include <linux/ltt/ltt-facility-xenoltt.h> |
| 377 | /*! |
| 378 | * \fn void xnsynch_init(xnsynch_t *synch, xnflags_t flags); |
| 379 | * \brief Initialize a synchronization object. |
| 380 | @@ -89,6 +94,7 @@ |
| 381 | { |
| 382 | initph(&synch->link); |
| 383 | |
| 384 | + |
| 385 | if (flags & XNSYNCH_PIP) |
| 386 | flags |= XNSYNCH_PRIO; /* Obviously... */ |
| 387 | |
| 388 | @@ -109,7 +115,13 @@ |
| 389 | |
| 390 | static inline void xnsynch_renice_thread(xnthread_t *thread, int prio) |
| 391 | { |
| 392 | - thread->cprio = prio; |
| 393 | +/************************************************************** |
| 394 | + * JOV - XenoLTT - 2006-10-24 |
| 395 | + * Here we place the tracing call for the set renice function |
| 396 | + * Args: thread, priority |
| 397 | + **************************************************************/ |
| 398 | + trace_xenoltt_xeno_synch_renice_thread(thread->name,thread,prio); |
| 399 | + thread->cprio = prio; |
| 400 | |
| 401 | if (thread->wchan) |
| 402 | /* Ignoring the XNSYNCH_DREORD flag on purpose here. */ |
| 403 | @@ -168,6 +180,12 @@ |
| 404 | xnlock_get_irqsave(&nklock, s); |
| 405 | |
| 406 | xnltt_log_event(xeno_ev_sleepon, thread->name, synch); |
| 407 | +/************************************************************** |
| 408 | + * JOV - XenoLTT - 2006-10-17 |
| 409 | + * Here we place the tracing call for the sleepon synch function |
| 410 | + * Args: Name, address, synch |
| 411 | + **************************************************************/ |
| 412 | + trace_xenoltt_xeno_synch_sleepon(thread->name,thread,synch); |
| 413 | |
| 414 | if (!testbits(synch->status, XNSYNCH_PRIO)) { /* i.e. FIFO */ |
| 415 | appendpq(&synch->pendq, &thread->plink); |
| 416 | @@ -373,7 +391,14 @@ |
| 417 | |
| 418 | xnlock_get_irqsave(&nklock, s); |
| 419 | |
| 420 | - holder = getpq(&synch->pendq); |
| 421 | +/************************************************************** |
| 422 | + * JOV - XenoLTT - 2006-10-30 |
| 423 | + * Here we place the tracing call for the unblock function |
| 424 | + * Args: Last Owner Name, address, synch |
| 425 | + **************************************************************/ |
| 426 | + trace_xenoltt_xeno_synch_unlock(lastowner->name,lastowner,synch); |
| 427 | + |
| 428 | + holder = getpq(&synch->pendq); |
| 429 | |
| 430 | if (holder) { |
| 431 | thread = link2thread(holder, plink); |
| 432 | @@ -381,7 +406,14 @@ |
| 433 | synch->owner = thread; |
| 434 | __setbits(thread->status, XNWAKEN); |
| 435 | xnltt_log_event(xeno_ev_wakeup1, thread->name, synch); |
| 436 | - xnpod_resume_thread(thread, XNPEND); |
| 437 | +/************************************************************** |
| 438 | + * JOV - XenoLTT - 2006-10-17 |
| 439 | + * Here we place the tracing call for the wakeup synch function |
| 440 | + * Args: Name, address, synch |
| 441 | + **************************************************************/ |
| 442 | + trace_xenoltt_xeno_synch_wakeup1(thread->name,thread,synch); |
| 443 | + |
| 444 | + xnpod_resume_thread(thread, XNPEND); |
| 445 | } else |
| 446 | synch->owner = NULL; |
| 447 | |
| 448 | @@ -452,7 +484,14 @@ |
| 449 | synch->owner = thread; |
| 450 | __setbits(thread->status, XNWAKEN); |
| 451 | xnltt_log_event(xeno_ev_wakeupx, thread->name, synch); |
| 452 | - xnpod_resume_thread(thread, XNPEND); |
| 453 | +/************************************************************** |
| 454 | + * JOV - XenoLTT - 2006-10-17 |
| 455 | + * Here we place the tracing call for the wakeup synch function |
| 456 | + * Args: Name, address, synch |
| 457 | + **************************************************************/ |
| 458 | + trace_xenoltt_xeno_synch_wakeupx(thread->name,thread,synch); |
| 459 | + |
| 460 | + xnpod_resume_thread(thread, XNPEND); |
| 461 | |
| 462 | if (testbits(synch->status, XNSYNCH_CLAIMED)) |
| 463 | xnsynch_clear_boost(synch, lastowner); |
| 464 | @@ -522,6 +561,12 @@ |
| 465 | xnlock_get_irqsave(&nklock, s); |
| 466 | |
| 467 | xnltt_log_event(xeno_ev_syncflush, synch, reason); |
| 468 | +/************************************************************** |
| 469 | + * JOV - XenoLTT - 2006-10-17 |
| 470 | + * Here we place the tracing call for the wakeup synch function |
| 471 | + * Args: Name, address, synch |
| 472 | + **************************************************************/ |
| 473 | + trace_xenoltt_xeno_synch_syncflush(synch,reason); |
| 474 | |
| 475 | status = emptypq_p(&synch->pendq) ? XNSYNCH_DONE : XNSYNCH_RESCHED; |
| 476 | |
| 477 | @@ -568,7 +613,13 @@ |
| 478 | xnsynch_t *synch = thread->wchan; |
| 479 | |
| 480 | xnltt_log_event(xeno_ev_syncforget, thread->name, synch); |
| 481 | - |
| 482 | +/************************************************************** |
| 483 | + * JOV - XenoLTT - 2006-10-17 |
| 484 | + * Here we place the tracing call for the forget synch call |
| 485 | + * Args: Name, address, synch |
| 486 | + **************************************************************/ |
| 487 | + trace_xenoltt_xeno_synch_syncforget(thread->name, thread, synch); |
| 488 | + |
| 489 | __clrbits(thread->status, XNPEND); |
| 490 | thread->wchan = NULL; |
| 491 | removepq(&synch->pendq, &thread->plink); |
| 492 | diff -Naur xenomai-2.2.3/ksrc/nucleus/timer.c xenomai-2.2.3-good/ksrc/nucleus/timer.c |
| 493 | --- xenomai-2.2.3/ksrc/nucleus/timer.c 2006-08-27 06:45:08.000000000 -0400 |
| 494 | +++ xenomai-2.2.3-good/ksrc/nucleus/timer.c 2006-11-14 10:01:18.000000000 -0500 |
| 495 | @@ -48,6 +48,12 @@ |
| 496 | #include <nucleus/thread.h> |
| 497 | #include <nucleus/timer.h> |
| 498 | |
| 499 | +/**************************************************** |
| 500 | + * JOV - XenoLTT - 2006-10-18 |
| 501 | + * To enable LTTng tracing functions on Xenomai task |
| 502 | + ****************************************************/ |
| 503 | +#include <linux/ltt/ltt-facility-xenoltt.h> |
| 504 | + |
| 505 | static inline void xntimer_enqueue_aperiodic(xntimer_t *timer) |
| 506 | { |
| 507 | xntimerq_t *q = &timer->sched->timerqueue; |
| 508 | @@ -202,22 +208,30 @@ |
| 509 | xnsched_t *sched = xnpod_current_sched(); |
| 510 | xntimerq_t *timerq = &sched->timerqueue; |
| 511 | xntimerh_t *holder; |
| 512 | - xntimer_t *timer; |
| 513 | - |
| 514 | + xntimer_t *timer; |
| 515 | + |
| 516 | while ((holder = xntimerq_head(timerq)) != NULL) { |
| 517 | timer = aplink2timer(holder); |
| 518 | |
| 519 | if (xntimerh_date(&timer->aplink) - nkschedlat > |
| 520 | - xnarch_get_cpu_tsc()) |
| 521 | + xnarch_get_cpu_tsc()) |
| 522 | /* No need to continue in aperiodic mode since timeout |
| 523 | dates are ordered by increasing values. */ |
| 524 | break; |
| 525 | + |
| 526 | |
| 527 | xntimer_dequeue_aperiodic(timer); |
| 528 | |
| 529 | if (timer != &nkpod->htimer) { |
| 530 | if (!testbits(nkpod->status, XNTLOCK)) { |
| 531 | - timer->handler(timer->cookie); |
| 532 | + /************************************************************** |
| 533 | + * JOV - XenoLTT - 2006-10-18 |
| 534 | + * Here we place the tracing call for the current thread timer tick |
| 535 | + * Args: Name, Address |
| 536 | + **************************************************************/ |
| 537 | + trace_xenoltt_xeno_timer_tick("1",holder); |
| 538 | + |
| 539 | + timer->handler(timer->cookie); |
| 540 | |
| 541 | if (timer->interval == XN_INFINITE || |
| 542 | !testbits(timer->status, XNTIMER_DEQUEUED) |
| 543 | @@ -234,12 +248,13 @@ |
| 544 | nkpod->htimer.interval; |
| 545 | continue; |
| 546 | } |
| 547 | + |
| 548 | } else |
| 549 | - /* By postponing the propagation of the low-priority host |
| 550 | + /* By postponing the propagation of the low-priority host |
| 551 | tick to the interrupt epilogue (see |
| 552 | xnintr_irq_handler()), we save some I-cache, which |
| 553 | translates into precious microsecs on low-end hw. */ |
| 554 | - __setbits(sched->status, XNHTICK); |
| 555 | + __setbits(sched->status, XNHTICK); |
| 556 | |
| 557 | xntimerh_date(&timer->aplink) += timer->interval; |
| 558 | xntimer_enqueue_aperiodic(timer); |
| 559 | @@ -379,7 +394,8 @@ |
| 560 | xntlholder_t *holder; |
| 561 | xnqueue_t *timerq; |
| 562 | xntimer_t *timer; |
| 563 | - |
| 564 | + |
| 565 | + |
| 566 | /* Update the periodic clocks keeping the things strictly |
| 567 | monotonous (this routine is run on every cpu, but only CPU |
| 568 | XNTIMER_KEEPER_ID should do this). */ |
| 569 | @@ -389,7 +405,7 @@ |
| 570 | timerq = &sched->timerwheel[nkpod->jiffies & XNTIMER_WHEELMASK]; |
| 571 | |
| 572 | while ((holder = xntlist_head(timerq)) != NULL) { |
| 573 | - timer = plink2timer(holder); |
| 574 | + timer = plink2timer(holder); |
| 575 | |
| 576 | if (xntlholder_date(&timer->plink) > nkpod->jiffies) |
| 577 | break; |
| 578 | @@ -398,7 +414,14 @@ |
| 579 | |
| 580 | if (timer != &nkpod->htimer) { |
| 581 | if (!testbits(nkpod->status, XNTLOCK)) { |
| 582 | - timer->handler(timer->cookie); |
| 583 | + /************************************************************** |
| 584 | + * JOV - XenoLTT - 2006-10-18 |
| 585 | + * Here we place the tracing call for the current thread timer tick |
| 586 | + * Args: Name, Address |
| 587 | + **************************************************************/ |
| 588 | + trace_xenoltt_xeno_timer_tick("2",holder); |
| 589 | + |
| 590 | + timer->handler(timer->cookie); |
| 591 | |
| 592 | if (timer->interval == XN_INFINITE || |
| 593 | !testbits(timer->status, XNTIMER_DEQUEUED) |
| 594 | @@ -409,8 +432,8 @@ |
| 595 | nkpod->jiffies + nkpod->htimer.interval; |
| 596 | continue; |
| 597 | } |
| 598 | - } else |
| 599 | - __setbits(sched->status, XNHTICK); |
| 600 | + } else |
| 601 | + __setbits(sched->status, XNHTICK); |
| 602 | |
| 603 | xntlholder_date(&timer->plink) = |
| 604 | nkpod->jiffies + timer->interval; |
| 605 | diff -Naur xenomai-2.2.3/src/skins/native/libnative_la-alarm.loT xenomai-2.2.3-good/src/skins/native/libnative_la-alarm.loT |
| 606 | --- xenomai-2.2.3/src/skins/native/libnative_la-alarm.loT 1969-12-31 19:00:00.000000000 -0500 |
| 607 | +++ xenomai-2.2.3-good/src/skins/native/libnative_la-alarm.loT 2006-12-07 11:09:26.000000000 -0500 |
| 608 | @@ -0,0 +1,7 @@ |
| 609 | +# libnative_la-alarm.lo - a libtool object file |
| 610 | +# Generated by ltmain.sh - GNU libtool 1.5.6 (1.1220.2.95 2004/04/11 05:50:42) Debian: 224 $ |
| 611 | +# |
| 612 | +# Please DO NOT delete this file! |
| 613 | +# It is necessary for linking the library. |
| 614 | + |
| 615 | +# Name of the PIC object. |