diff options
Diffstat (limited to 'kernel/trace/trace.c')
-rw-r--r-- | kernel/trace/trace.c | 75 |
1 files changed, 34 insertions, 41 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index bbdfaa2cbdb9..5822ff4e5a3e 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
@@ -1402,27 +1402,25 @@ static enum print_line_t print_lat_fmt(struct trace_iterator *iter) | |||
1402 | unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); | 1402 | unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); |
1403 | struct trace_event *event; | 1403 | struct trace_event *event; |
1404 | struct trace_entry *entry = iter->ent; | 1404 | struct trace_entry *entry = iter->ent; |
1405 | int ret; | ||
1406 | 1405 | ||
1407 | test_cpu_buff_start(iter); | 1406 | test_cpu_buff_start(iter); |
1408 | 1407 | ||
1409 | event = ftrace_find_event(entry->type); | 1408 | event = ftrace_find_event(entry->type); |
1410 | 1409 | ||
1411 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | 1410 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { |
1412 | ret = trace_print_lat_context(iter); | 1411 | if (!trace_print_lat_context(iter)) |
1413 | if (ret) | 1412 | goto partial; |
1414 | return ret; | ||
1415 | } | 1413 | } |
1416 | 1414 | ||
1417 | if (event && event->latency_trace) { | 1415 | if (event && event->latency_trace) |
1418 | ret = event->latency_trace(iter, sym_flags); | 1416 | return event->latency_trace(iter, sym_flags); |
1419 | if (ret) | 1417 | |
1420 | return ret; | 1418 | if (!trace_seq_printf(s, "Unknown type %d\n", entry->type)) |
1421 | return TRACE_TYPE_HANDLED; | 1419 | goto partial; |
1422 | } | ||
1423 | 1420 | ||
1424 | trace_seq_printf(s, "Unknown type %d\n", entry->type); | ||
1425 | return TRACE_TYPE_HANDLED; | 1421 | return TRACE_TYPE_HANDLED; |
1422 | partial: | ||
1423 | return TRACE_TYPE_PARTIAL_LINE; | ||
1426 | } | 1424 | } |
1427 | 1425 | ||
1428 | static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | 1426 | static enum print_line_t print_trace_fmt(struct trace_iterator *iter) |
@@ -1431,7 +1429,6 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
1431 | unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); | 1429 | unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK); |
1432 | struct trace_entry *entry; | 1430 | struct trace_entry *entry; |
1433 | struct trace_event *event; | 1431 | struct trace_event *event; |
1434 | int ret; | ||
1435 | 1432 | ||
1436 | entry = iter->ent; | 1433 | entry = iter->ent; |
1437 | 1434 | ||
@@ -1440,22 +1437,19 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter) | |||
1440 | event = ftrace_find_event(entry->type); | 1437 | event = ftrace_find_event(entry->type); |
1441 | 1438 | ||
1442 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | 1439 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { |
1443 | ret = trace_print_context(iter); | 1440 | if (!trace_print_context(iter)) |
1444 | if (ret) | 1441 | goto partial; |
1445 | return ret; | ||
1446 | } | 1442 | } |
1447 | 1443 | ||
1448 | if (event && event->trace) { | 1444 | if (event && event->trace) |
1449 | ret = event->trace(iter, sym_flags); | 1445 | return event->trace(iter, sym_flags); |
1450 | if (ret) | 1446 | |
1451 | return ret; | 1447 | if (!trace_seq_printf(s, "Unknown type %d\n", entry->type)) |
1452 | return TRACE_TYPE_HANDLED; | 1448 | goto partial; |
1453 | } | ||
1454 | ret = trace_seq_printf(s, "Unknown type %d\n", entry->type); | ||
1455 | if (!ret) | ||
1456 | return TRACE_TYPE_PARTIAL_LINE; | ||
1457 | 1449 | ||
1458 | return TRACE_TYPE_HANDLED; | 1450 | return TRACE_TYPE_HANDLED; |
1451 | partial: | ||
1452 | return TRACE_TYPE_PARTIAL_LINE; | ||
1459 | } | 1453 | } |
1460 | 1454 | ||
1461 | static enum print_line_t print_raw_fmt(struct trace_iterator *iter) | 1455 | static enum print_line_t print_raw_fmt(struct trace_iterator *iter) |
@@ -1463,29 +1457,25 @@ static enum print_line_t print_raw_fmt(struct trace_iterator *iter) | |||
1463 | struct trace_seq *s = &iter->seq; | 1457 | struct trace_seq *s = &iter->seq; |
1464 | struct trace_entry *entry; | 1458 | struct trace_entry *entry; |
1465 | struct trace_event *event; | 1459 | struct trace_event *event; |
1466 | int ret; | ||
1467 | 1460 | ||
1468 | entry = iter->ent; | 1461 | entry = iter->ent; |
1469 | 1462 | ||
1470 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { | 1463 | if (trace_flags & TRACE_ITER_CONTEXT_INFO) { |
1471 | ret = trace_seq_printf(s, "%d %d %llu ", | 1464 | if (!trace_seq_printf(s, "%d %d %llu ", |
1472 | entry->pid, iter->cpu, iter->ts); | 1465 | entry->pid, iter->cpu, iter->ts)) |
1473 | if (!ret) | 1466 | goto partial; |
1474 | return TRACE_TYPE_PARTIAL_LINE; | ||
1475 | } | 1467 | } |
1476 | 1468 | ||
1477 | event = ftrace_find_event(entry->type); | 1469 | event = ftrace_find_event(entry->type); |
1478 | if (event && event->raw) { | 1470 | if (event && event->raw) |
1479 | ret = event->raw(iter, 0); | 1471 | return event->raw(iter, 0); |
1480 | if (ret) | 1472 | |
1481 | return ret; | 1473 | if (!trace_seq_printf(s, "%d ?\n", entry->type)) |
1482 | return TRACE_TYPE_HANDLED; | 1474 | goto partial; |
1483 | } | ||
1484 | ret = trace_seq_printf(s, "%d ?\n", entry->type); | ||
1485 | if (!ret) | ||
1486 | return TRACE_TYPE_PARTIAL_LINE; | ||
1487 | 1475 | ||
1488 | return TRACE_TYPE_HANDLED; | 1476 | return TRACE_TYPE_HANDLED; |
1477 | partial: | ||
1478 | return TRACE_TYPE_PARTIAL_LINE; | ||
1489 | } | 1479 | } |
1490 | 1480 | ||
1491 | static enum print_line_t print_hex_fmt(struct trace_iterator *iter) | 1481 | static enum print_line_t print_hex_fmt(struct trace_iterator *iter) |
@@ -1504,8 +1494,11 @@ static enum print_line_t print_hex_fmt(struct trace_iterator *iter) | |||
1504 | } | 1494 | } |
1505 | 1495 | ||
1506 | event = ftrace_find_event(entry->type); | 1496 | event = ftrace_find_event(entry->type); |
1507 | if (event && event->hex) | 1497 | if (event && event->hex) { |
1508 | event->hex(iter, 0); | 1498 | int ret = event->hex(iter, 0); |
1499 | if (ret != TRACE_TYPE_HANDLED) | ||
1500 | return ret; | ||
1501 | } | ||
1509 | 1502 | ||
1510 | SEQ_PUT_FIELD_RET(s, newline); | 1503 | SEQ_PUT_FIELD_RET(s, newline); |
1511 | 1504 | ||
@@ -1544,7 +1537,7 @@ static enum print_line_t print_bin_fmt(struct trace_iterator *iter) | |||
1544 | 1537 | ||
1545 | event = ftrace_find_event(entry->type); | 1538 | event = ftrace_find_event(entry->type); |
1546 | if (event && event->binary) | 1539 | if (event && event->binary) |
1547 | event->binary(iter, 0); | 1540 | return event->binary(iter, 0); |
1548 | 1541 | ||
1549 | return TRACE_TYPE_HANDLED; | 1542 | return TRACE_TYPE_HANDLED; |
1550 | } | 1543 | } |