diff options
-rw-r--r-- | kernel/trace/trace.c | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index d86e3252f300..803100518f11 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -1301,6 +1301,13 @@ lat_print_timestamp(struct trace_seq *s, u64 abs_usecs, | |||
1301 | 1301 | ||
1302 | static const char state_to_char[] = TASK_STATE_TO_CHAR_STR; | 1302 | static const char state_to_char[] = TASK_STATE_TO_CHAR_STR; |
1303 | 1303 | ||
1304 | static int task_state_char(unsigned long state) | ||
1305 | { | ||
1306 | int bit = state ? __ffs(state) + 1 : 0; | ||
1307 | |||
1308 | return bit < sizeof(state_to_char) - 1 ? state_to_char[bit] : '?'; | ||
1309 | } | ||
1310 | |||
1304 | /* | 1311 | /* |
1305 | * The message is supposed to contain an ending newline. | 1312 | * The message is supposed to contain an ending newline. |
1306 | * If the printing stops prematurely, try to add a newline of our own. | 1313 | * If the printing stops prematurely, try to add a newline of our own. |
@@ -1396,12 +1403,8 @@ print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu) | |||
1396 | 1403 | ||
1397 | trace_assign_type(field, entry); | 1404 | trace_assign_type(field, entry); |
1398 | 1405 | ||
1399 | T = field->next_state < sizeof(state_to_char) ? | 1406 | T = task_state_char(field->next_state); |
1400 | state_to_char[field->next_state] : 'X'; | 1407 | S = task_state_char(field->prev_state); |
1401 | |||
1402 | state = field->prev_state ? | ||
1403 | __ffs(field->prev_state) + 1 : 0; | ||
1404 | S = state < sizeof(state_to_char) - 1 ? state_to_char[state] : 'X'; | ||
1405 | comm = trace_find_cmdline(field->next_pid); | 1408 | comm = trace_find_cmdline(field->next_pid); |
1406 | trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", | 1409 | trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c %s\n", |
1407 | field->prev_pid, | 1410 | field->prev_pid, |
@@ -1519,10 +1522,8 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
1519 | 1522 | ||
1520 | trace_assign_type(field, entry); | 1523 | trace_assign_type(field, entry); |
1521 | 1524 | ||
1522 | S = field->prev_state < sizeof(state_to_char) ? | 1525 | T = task_state_char(field->next_state); |
1523 | state_to_char[field->prev_state] : 'X'; | 1526 | S = task_state_char(field->prev_state); |
1524 | T = field->next_state < sizeof(state_to_char) ? | ||
1525 | state_to_char[field->next_state] : 'X'; | ||
1526 | ret = trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c\n", | 1527 | ret = trace_seq_printf(s, " %5d:%3d:%c %s [%03d] %5d:%3d:%c\n", |
1527 | field->prev_pid, | 1528 | field->prev_pid, |
1528 | field->prev_prio, | 1529 | field->prev_prio, |
@@ -1621,12 +1622,9 @@ static enum print_line_t print_raw_fmt(struct trace_iterator *iter) | |||
1621 | 1622 | ||
1622 | trace_assign_type(field, entry); | 1623 | trace_assign_type(field, entry); |
1623 | 1624 | ||
1624 | S = field->prev_state < sizeof(state_to_char) ? | 1625 | T = task_state_char(field->next_state); |
1625 | state_to_char[field->prev_state] : 'X'; | 1626 | S = entry->type == TRACE_WAKE ? '+' : |
1626 | T = field->next_state < sizeof(state_to_char) ? | 1627 | task_state_char(field->prev_state); |
1627 | state_to_char[field->next_state] : 'X'; | ||
1628 | if (entry->type == TRACE_WAKE) | ||
1629 | S = '+'; | ||
1630 | ret = trace_seq_printf(s, "%d %d %c %d %d %d %c\n", | 1628 | ret = trace_seq_printf(s, "%d %d %c %d %d %d %c\n", |
1631 | field->prev_pid, | 1629 | field->prev_pid, |
1632 | field->prev_prio, | 1630 | field->prev_prio, |
@@ -1712,12 +1710,9 @@ static enum print_line_t print_hex_fmt(struct trace_iterator *iter) | |||
1712 | 1710 | ||
1713 | trace_assign_type(field, entry); | 1711 | trace_assign_type(field, entry); |
1714 | 1712 | ||
1715 | S = field->prev_state < sizeof(state_to_char) ? | 1713 | T = task_state_char(field->next_state); |
1716 | state_to_char[field->prev_state] : 'X'; | 1714 | S = entry->type == TRACE_WAKE ? '+' : |
1717 | T = field->next_state < sizeof(state_to_char) ? | 1715 | task_state_char(field->prev_state); |
1718 | state_to_char[field->next_state] : 'X'; | ||
1719 | if (entry->type == TRACE_WAKE) | ||
1720 | S = '+'; | ||
1721 | SEQ_PUT_HEX_FIELD_RET(s, field->prev_pid); | 1716 | SEQ_PUT_HEX_FIELD_RET(s, field->prev_pid); |
1722 | SEQ_PUT_HEX_FIELD_RET(s, field->prev_prio); | 1717 | SEQ_PUT_HEX_FIELD_RET(s, field->prev_prio); |
1723 | SEQ_PUT_HEX_FIELD_RET(s, S); | 1718 | SEQ_PUT_HEX_FIELD_RET(s, S); |