sched/note: unify the data format
Signed-off-by: chao.an <anchao@xiaomi.com>
This commit is contained in:
parent
16c1fec99d
commit
0dc716d426
@ -83,6 +83,36 @@ static FAR const char *g_statenames[] =
|
||||
* Private Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: trace_dump_unflatten
|
||||
************************************************************************************/
|
||||
|
||||
static void trace_dump_unflatten(FAR void *dst,
|
||||
FAR uint8_t *src, size_t len)
|
||||
{
|
||||
switch (len)
|
||||
{
|
||||
#ifdef CONFIG_HAVE_LONG_LONG
|
||||
case 8:
|
||||
*(uint64_t *)dst = ((uint64_t)src[7] << 56)
|
||||
+ ((uint64_t)src[6] << 48)
|
||||
+ ((uint64_t)src[5] << 40)
|
||||
+ ((uint64_t)src[4] << 32);
|
||||
#endif
|
||||
case 4:
|
||||
*(uint32_t *)dst = ((uint64_t)src[3] << 24)
|
||||
+ ((uint64_t)src[2] << 16);
|
||||
case 2:
|
||||
*(uint16_t *)dst = ((uint64_t)src[1] << 8);
|
||||
case 1:
|
||||
*(uint8_t *)dst = src[0];
|
||||
break;
|
||||
default:
|
||||
DEBUGASSERT(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: dump_notes
|
||||
************************************************************************************/
|
||||
@ -103,22 +133,14 @@ static void dump_notes(size_t nread)
|
||||
while (offset < nread)
|
||||
{
|
||||
note = (FAR struct note_common_s *)&g_note_buffer[offset];
|
||||
pid = (pid_t)note->nc_pid[0] +
|
||||
((pid_t)note->nc_pid[1] << 8);
|
||||
trace_dump_unflatten(&pid, note->note->nc_pid, sizeof(pid));
|
||||
#ifdef CONFIG_SCHED_INSTRUMENTATION_HIRES
|
||||
systime_nsec = (uint32_t)note->nc_systime_nsec[0] +
|
||||
(uint32_t)(note->nc_systime_nsec[1] << 8) +
|
||||
(uint32_t)(note->nc_systime_nsec[2] << 16) +
|
||||
(uint32_t)(note->nc_systime_nsec[3] << 24);
|
||||
systime_sec = (uint32_t)note->nc_systime_sec[0] +
|
||||
(uint32_t)(note->nc_systime_sec[1] << 8) +
|
||||
(uint32_t)(note->nc_systime_sec[2] << 16) +
|
||||
(uint32_t)(note->nc_systime_sec[3] << 24);
|
||||
trace_dump_unflatten(&systime_nsec,
|
||||
note->nc_systime_nsec, sizeof(systime_nsec));
|
||||
trace_dump_unflatten(&systime_sec,
|
||||
note->nc_systime_sec, sizeof(systime_sec));
|
||||
#else
|
||||
systime = (uint32_t) note->nc_systime[0] +
|
||||
(uint32_t)(note->nc_systime[1] << 8) +
|
||||
(uint32_t)(note->nc_systime[2] << 16) +
|
||||
(uint32_t)(note->nc_systime[3] << 24);
|
||||
trace_dump_unflatten(&systime, note->nc_systime, sizeof(systime));
|
||||
#endif
|
||||
|
||||
switch (note->nc_type)
|
||||
@ -395,8 +417,7 @@ static void dump_notes(size_t nread)
|
||||
return;
|
||||
}
|
||||
|
||||
count = (uint16_t) note_preempt->npr_count[0] +
|
||||
(uint16_t)(note_preempt->npr_count[1] << 8);
|
||||
trace_dump_unflatten(&count, note_preempt->npr_count, sizeof(count));
|
||||
|
||||
if (note->nc_type == NOTE_PREEMPT_LOCK)
|
||||
{
|
||||
@ -452,8 +473,7 @@ static void dump_notes(size_t nread)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
count = (uint16_t) note_csection->ncs_count[0] +
|
||||
(uint16_t)(note_csection->ncs_count[1] << 8);
|
||||
trace_dump_unflatten(&count, note_csection->ncs_count, sizeof(count));
|
||||
|
||||
if (note->nc_type == NOTE_CSECTION_ENTER)
|
||||
{
|
||||
@ -509,20 +529,9 @@ static void dump_notes(size_t nread)
|
||||
return;
|
||||
}
|
||||
|
||||
spinlock = (FAR void *)
|
||||
((uintptr_t)note_spinlock->nsp_spinlock[0]
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[1] << 8)
|
||||
#if UINTPTR_MAX > UINT16_MAX
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[2] << 16)
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[3] << 24)
|
||||
#if UINTPTR_MAX > UINT32_MAX
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[4] << 32)
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[5] << 40)
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[6] << 48)
|
||||
+ ((uintptr_t)note_spinlock->nsp_spinlock[7] << 56)
|
||||
#endif
|
||||
#endif
|
||||
);
|
||||
trace_dump_unflatten(&spinlock,
|
||||
note_spinlock->nsp_spinlock,
|
||||
sizeof(spinlock));
|
||||
|
||||
switch (note->nc_type)
|
||||
{
|
||||
@ -666,19 +675,9 @@ static void dump_notes(size_t nread)
|
||||
return;
|
||||
}
|
||||
|
||||
result = (uintptr_t)note_sysleave->nsc_result[0]
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[1] << 8)
|
||||
#if UINTPTR_MAX > UINT16_MAX
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[2] << 16)
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[3] << 24)
|
||||
#if UINTPTR_MAX > UINT32_MAX
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[4] << 32)
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[5] << 40)
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[6] << 48)
|
||||
+ ((uintptr_t)note_sysleave->nsc_result[7] << 56)
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
trace_dump_unflatten(&result,
|
||||
note_sysleave->nsc_result,
|
||||
sizeof(result));
|
||||
|
||||
syslog_time(LOG_INFO,
|
||||
"Task %u Leave SYSCALL %d: %" PRIdPTR "\n",
|
||||
@ -738,6 +737,7 @@ static void dump_notes(size_t nread)
|
||||
{
|
||||
FAR struct note_binary_s *note_binary =
|
||||
(FAR struct note_binary_s *)note;
|
||||
uint32_t module;
|
||||
char out[1280];
|
||||
int count;
|
||||
int ret = 0;
|
||||
@ -758,15 +758,15 @@ static void dump_notes(size_t nread)
|
||||
ret += sprintf(&out[ret], " 0x%x", note_binary->nbi_data[i]);
|
||||
}
|
||||
|
||||
trace_dump_unflatten(&module,
|
||||
note_binary->nbi_module,
|
||||
sizeof(module));
|
||||
|
||||
syslog_time(LOG_INFO,
|
||||
"Task %u priority %u, binary:module=%c%c%c%c "
|
||||
"Task %u priority %u, binary:module=%lx "
|
||||
"event=%u count=%u%s\n",
|
||||
(unsigned int)pid,
|
||||
(unsigned int)note->nc_priority,
|
||||
note_binary->nbi_module[0],
|
||||
note_binary->nbi_module[1],
|
||||
note_binary->nbi_module[2],
|
||||
note_binary->nbi_module[3],
|
||||
(unsigned int)note->nc_priority, module,
|
||||
note_binary->nbi_event,
|
||||
count,
|
||||
out);
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <inttypes.h>
|
||||
@ -99,6 +100,36 @@ struct trace_dump_context_s
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: trace_dump_unflatten
|
||||
****************************************************************************/
|
||||
|
||||
static void trace_dump_unflatten(FAR void *dst,
|
||||
FAR uint8_t *src, size_t len)
|
||||
{
|
||||
switch (len)
|
||||
{
|
||||
#ifdef CONFIG_HAVE_LONG_LONG
|
||||
case 8:
|
||||
*(uint64_t *)dst = ((uint64_t)src[7] << 56)
|
||||
+ ((uint64_t)src[6] << 48)
|
||||
+ ((uint64_t)src[5] << 40)
|
||||
+ ((uint64_t)src[4] << 32);
|
||||
#endif
|
||||
case 4:
|
||||
*(uint32_t *)dst = ((uint64_t)src[3] << 24)
|
||||
+ ((uint64_t)src[2] << 16);
|
||||
case 2:
|
||||
*(uint16_t *)dst = ((uint64_t)src[1] << 8);
|
||||
case 1:
|
||||
*(uint8_t *)dst = src[0];
|
||||
break;
|
||||
default:
|
||||
DEBUGASSERT(FALSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: note_ioctl
|
||||
****************************************************************************/
|
||||
@ -270,19 +301,15 @@ static void trace_dump_header(FAR FILE *out,
|
||||
{
|
||||
pid_t pid;
|
||||
#ifdef CONFIG_SCHED_INSTRUMENTATION_HIRES
|
||||
uint32_t nsec = note->nc_systime_nsec[0] +
|
||||
(note->nc_systime_nsec[1] << 8) +
|
||||
(note->nc_systime_nsec[2] << 16) +
|
||||
(note->nc_systime_nsec[3] << 24);
|
||||
uint32_t sec = note->nc_systime_sec[0] +
|
||||
(note->nc_systime_sec[1] << 8) +
|
||||
(note->nc_systime_sec[2] << 16) +
|
||||
(note->nc_systime_sec[3] << 24);
|
||||
uint32_t nsec;
|
||||
uint32_t sec;
|
||||
|
||||
trace_dump_unflatten(&nsec, note->nc_systime_nsec, sizeof(nsec));
|
||||
trace_dump_unflatten(&sec, note->nc_systime_sec, sizeof(sec));
|
||||
#else
|
||||
uint32_t systime = note->nc_systime[0] +
|
||||
(note->nc_systime[1] << 8) +
|
||||
(note->nc_systime[2] << 16) +
|
||||
(note->nc_systime[3] << 24);
|
||||
uint32_t systime;
|
||||
|
||||
trace_dump_unflatten(&systime, note->nc_systime, sizeof(systime));
|
||||
#endif
|
||||
#ifdef CONFIG_SMP
|
||||
int cpu = note->nc_cpu;
|
||||
@ -357,7 +384,7 @@ static int trace_dump_one(FAR FILE *out,
|
||||
#endif
|
||||
|
||||
cctx = &ctx->cpu[cpu];
|
||||
pid = note->nc_pid[0] + (note->nc_pid[1] << 8);
|
||||
trace_dump_unflatten(&pid, note->nc_pid, sizeof(pid));
|
||||
|
||||
if (cctx->current_pid < 0)
|
||||
{
|
||||
@ -486,18 +513,7 @@ static int trace_dump_one(FAR FILE *out,
|
||||
|
||||
for (i = j = 0; i < nsc->nsc_argc; i++)
|
||||
{
|
||||
arg = (uintptr_t)nsc->nsc_args[j++];
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 8;
|
||||
#if UINTPTR_MAX > UINT16_MAX
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 16;
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 24;
|
||||
#if UINTPTR_MAX > UINT32_MAX
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 32;
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 40;
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 48;
|
||||
arg |= (uintptr_t)nsc->nsc_args[j++] << 56;
|
||||
#endif
|
||||
#endif
|
||||
trace_dump_unflatten(&arg, nsc->nsc_args, sizeof(arg));
|
||||
if (i == 0)
|
||||
{
|
||||
fprintf(out, "arg%d: 0x%" PRIxPTR, i, arg);
|
||||
@ -549,21 +565,7 @@ static int trace_dump_one(FAR FILE *out,
|
||||
}
|
||||
|
||||
trace_dump_header(out, note, ctx);
|
||||
|
||||
result = (uintptr_t)nsc->nsc_result[0]
|
||||
+ ((uintptr_t)nsc->nsc_result[1] << 8)
|
||||
#if UINTPTR_MAX > UINT16_MAX
|
||||
+ ((uintptr_t)nsc->nsc_result[2] << 16)
|
||||
+ ((uintptr_t)nsc->nsc_result[3] << 24)
|
||||
#if UINTPTR_MAX > UINT32_MAX
|
||||
+ ((uintptr_t)nsc->nsc_result[4] << 32)
|
||||
+ ((uintptr_t)nsc->nsc_result[5] << 40)
|
||||
+ ((uintptr_t)nsc->nsc_result[6] << 48)
|
||||
+ ((uintptr_t)nsc->nsc_result[7] << 56)
|
||||
#endif
|
||||
#endif
|
||||
;
|
||||
|
||||
trace_dump_unflatten(&result, nsc->nsc_result, sizeof(result));
|
||||
fprintf(out, "sys_%s -> 0x%" PRIxPTR "\n",
|
||||
g_funcnames[nsc->nsc_nr - CONFIG_SYS_RESERVED],
|
||||
result);
|
||||
@ -624,16 +626,20 @@ static int trace_dump_one(FAR FILE *out,
|
||||
case NOTE_DUMP_BINARY:
|
||||
{
|
||||
FAR struct note_binary_s *nbi;
|
||||
uint32_t module;
|
||||
uint8_t count;
|
||||
int i;
|
||||
|
||||
nbi = (FAR struct note_binary_s *)p;
|
||||
trace_dump_header(out, note, ctx);
|
||||
count = note->nc_length - sizeof(struct note_binary_s) + 1;
|
||||
fprintf(out, "dump_binary: module=%c%c%c%c event=%u count=%u",
|
||||
nbi->nbi_module[0], nbi->nbi_module[1],
|
||||
nbi->nbi_module[2], nbi->nbi_module[3],
|
||||
nbi->nbi_event, count);
|
||||
|
||||
trace_dump_unflatten(&module,
|
||||
note_binary->nbi_module,
|
||||
sizeof(module));
|
||||
|
||||
fprintf(out, "dump_binary: module=%lx event=%u count=%u",
|
||||
module, nbi->nbi_event, count);
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
fprintf(out, " 0x%x", nbi->nbi_data[i]);
|
||||
|
Loading…
x
Reference in New Issue
Block a user