Skip to content

Commit

Permalink
list all waiting tasks in debug command, fixes #1961
Browse files Browse the repository at this point in the history
Before this patch, only the first waiting task will be listed in debug
command.
Now add the feature to list all waiting tasks for
sem/mutex/buf_queue/queue.
  • Loading branch information
YiluMao committed Jan 5, 2023
1 parent 8a1a486 commit 5a9359c
Showing 1 changed file with 85 additions and 71 deletions.
156 changes: 85 additions & 71 deletions components/debug/src/debug_overview.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,20 +191,16 @@ void debug_task_overview(int (*print_func)(const char *fmt, ...))
void debug_buf_queue_overview(int (*print_func)(const char *fmt, ...))
{
int i;
klist_t *listnode;
klist_t *blk_list_head;
klist_t *listnode, *task_listnode;
ktask_t *task;
kbuf_queue_t *buf_queue;
const name_t *task_name;
char s_buf_queue_overview[] = "0x 0x 0x 0x "
"0x \r\n";

print_func(
"------------------------------------------------------------------\r\n");
print_func(
"BufQueAddr TotalSize PeakNum CurrNum MinFreeSz TaskWaiting\r\n");
print_func(
"------------------------------------------------------------------\r\n");
print_func("------------------------------------------------------------------\r\n");
print_func("BufQueAddr TotalSize PeakNum CurrNum MinFreeSz TaskWaiting\r\n");
print_func("------------------------------------------------------------------\r\n");
for (listnode = g_kobj_list.buf_queue_head.next;
listnode != &g_kobj_list.buf_queue_head; listnode = listnode->next) {

Expand All @@ -222,27 +218,30 @@ void debug_buf_queue_overview(int (*print_func)(const char *fmt, ...))
k_int2str((int)buf_queue->cur_num, &s_buf_queue_overview[35]);
k_int2str((int)buf_queue->min_free_buf_size, &s_buf_queue_overview[46]);

/* set pending task name */
blk_list_head = &buf_queue->blk_obj.blk_list;
if (is_klist_empty(blk_list_head)) {
task_name = " ";
} else {
task = krhino_list_entry(blk_list_head->next, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
}
/* print */
print_func(s_buf_queue_overview);

for (i = 0; i < 20; i++) {
s_buf_queue_overview[55 + i] = ' ';
/* clear info */
for (i = 0; i < 75; i++) {
s_buf_queue_overview[i] = ' ';
}
for (i = 0; i < 20; i++) {
if (task_name[i] == '\0') {
break;

/* set pending task name */
for (task_listnode = buf_queue->blk_obj.blk_list.next;
task_listnode != &buf_queue->blk_obj.blk_list;
task_listnode = task_listnode->next) {
task = krhino_list_entry(task_listnode, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
for (i = 0; i < 20; i++) {
s_buf_queue_overview[55 + i] = ' ';
}
for (i = 0; (i < 20) && (i < strlen(task_name)); i++) {
s_buf_queue_overview[55 + i] = task_name[i];
}
s_buf_queue_overview[55 + i] = task_name[i];
}

/* print */
print_func(s_buf_queue_overview);
/* print */
print_func(s_buf_queue_overview);
}
}
}
#else
Expand All @@ -258,8 +257,7 @@ void debug_buf_queue_overview(int (*print_func)(const char *fmt, ...))
void debug_queue_overview(int (*print_func)(const char *fmt, ...))
{
int i;
klist_t *listnode;
klist_t *blk_list_head;
klist_t *listnode, *task_listnode;
ktask_t *task;
kqueue_t *queue;
const name_t *task_name;
Expand All @@ -285,27 +283,30 @@ void debug_queue_overview(int (*print_func)(const char *fmt, ...))
k_int2str((int)queue->msg_q.peak_num, &s_queue_overview[24]);
k_int2str((int)queue->msg_q.cur_num, &s_queue_overview[35]);

/* set pending task name */
blk_list_head = &queue->blk_obj.blk_list;
if (is_klist_empty(blk_list_head)) {
task_name = " ";
} else {
task = krhino_list_entry(blk_list_head->next, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
}
/* print */
print_func(s_queue_overview);

for (i = 0; i < 20; i++) {
s_queue_overview[44 + i] = ' ';
/* clear info */
for (i = 0; i < 64; i++) {
s_queue_overview[i] = ' ';
}
for (i = 0; i < 20; i++) {
if (task_name[i] == '\0') {
break;

/* set pending task name */
for (task_listnode = queue->blk_obj.blk_list.next;
task_listnode != &queue->blk_obj.blk_list;
task_listnode = task_listnode->next) {
task = krhino_list_entry(task_listnode, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
for (i = 0; i < 20; i++) {
s_queue_overview[44 + i] = ' ';
}
for (i = 0; (i < 20) && (i < strlen(task_name)); i++) {
s_queue_overview[44 + i] = task_name[i];
}
s_queue_overview[44 + i] = task_name[i];
}

/* print */
print_func(s_queue_overview);
/* print */
print_func(s_queue_overview);
}
}
}
#else
Expand All @@ -323,8 +324,7 @@ void debug_sem_overview(int (*print_func)(const char *fmt, ...))
int i, cnt = 0;
ksem_t *sem;
ktask_t *task;
klist_t *listnode;
klist_t *blk_list_head;
klist_t *listnode, *task_listnode;
const name_t *task_name;
char s_sem_overview[] =
"0x 0x 0x \r\n";
Expand All @@ -347,8 +347,8 @@ void debug_sem_overview(int (*print_func)(const char *fmt, ...))
}

/* only show sem waited by task */
blk_list_head = &sem->blk_obj.blk_list;
if (is_klist_empty(blk_list_head)) {
task_listnode = sem->blk_obj.blk_list.next;
if (task_listnode == &sem->blk_obj.blk_list) {
continue;
}

Expand All @@ -357,24 +357,30 @@ void debug_sem_overview(int (*print_func)(const char *fmt, ...))
k_int2str((int)sem->count, &s_sem_overview[13]);
k_int2str((int)sem->peak_count, &s_sem_overview[24]);

/* print */
print_func(s_sem_overview);

/* clear info */
for (i = 0; i < 53; i++) {
s_sem_overview[i] = ' ';
}

/* set pending task name */
blk_list_head = &sem->blk_obj.blk_list;
if (is_klist_empty(blk_list_head)) {
task_name = " ";
} else {
task = krhino_list_entry(blk_list_head->next, ktask_t, task_list);
for (task_listnode = sem->blk_obj.blk_list.next;
task_listnode != &sem->blk_obj.blk_list;
task_listnode = task_listnode->next) {
task = krhino_list_entry(task_listnode, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
}
for (i = 0; i < 20; i++) {
s_sem_overview[33 + i] = ' ';
}
for (i = 0; (i < 20) && (i < strlen(task_name)); i++) {
s_sem_overview[33 + i] = task_name[i];
}

for (i = 0; i < 20; i++) {
s_sem_overview[33 + i] = ' ';
/* print */
print_func(s_sem_overview);
}
for (i = 0; (i < 20) && i < strlen(task_name); i++) {
s_sem_overview[33 + i] = task_name[i];
}

/* print */
print_func(s_sem_overview);
}
k_int2str(cnt, &s_sem_total[9]);
print_func(s_sem_total);
Expand All @@ -393,8 +399,7 @@ void debug_mutex_overview(int (*print_func)(const char *fmt, ...))
int i, cnt = 0;
kmutex_t *mutex;
ktask_t *task;
klist_t *listnode;
klist_t *blk_list_head;
klist_t *listnode, *task_listnode;
const name_t *task_name;
char s_mutex_overview[] =
"0x 0x \r\n";
Expand Down Expand Up @@ -431,25 +436,34 @@ void debug_mutex_overview(int (*print_func)(const char *fmt, ...))
for (i = 0; i < 20; i++) {
s_mutex_overview[11 + i] = ' ';
}
for (i = 0; i <= strlen(task_name); i++) {
for (i = 0; i < strlen(task_name); i++) {
s_mutex_overview[11 + i] = task_name[i];
}

/* print */
print_func(s_mutex_overview);

/* clear info */
for (i = 0; i < 63; i++) {
s_mutex_overview[i] = ' ';
}

/* set pending task name */
blk_list_head = &mutex->blk_obj.blk_list;
if (!is_klist_empty(blk_list_head)) {
task = krhino_list_entry(blk_list_head->next, ktask_t, task_list);
for (task_listnode = mutex->blk_obj.blk_list.next;
task_listnode != &mutex->blk_obj.blk_list;
task_listnode = task_listnode->next) {
task = krhino_list_entry(task_listnode, ktask_t, task_list);
task_name = task->task_name == NULL ? "anonym" : task->task_name;
for (i = 0; i < 20; i++) {
s_mutex_overview[43 + i] = ' ';
}
for (i = 0; (i < 20) && (i < strlen(task_name)); i++) {
s_mutex_overview[43 + i] = task_name[i];
}
}

/* print */
print_func(s_mutex_overview);
/* print */
print_func(s_mutex_overview);
}
}

k_int2str(cnt, &s_mutex_total[9]);
Expand Down

0 comments on commit 5a9359c

Please sign in to comment.