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 | } |
