diff options
34 files changed, 1195 insertions, 628 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index da2ccf142358..102160ff5c66 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c | |||
| @@ -978,67 +978,90 @@ static int prepare_kprobe(struct kprobe *p) | |||
| 978 | } | 978 | } |
| 979 | 979 | ||
| 980 | /* Caller must lock kprobe_mutex */ | 980 | /* Caller must lock kprobe_mutex */ |
| 981 | static void arm_kprobe_ftrace(struct kprobe *p) | 981 | static int arm_kprobe_ftrace(struct kprobe *p) |
| 982 | { | 982 | { |
| 983 | int ret; | 983 | int ret = 0; |
| 984 | 984 | ||
| 985 | ret = ftrace_set_filter_ip(&kprobe_ftrace_ops, | 985 | ret = ftrace_set_filter_ip(&kprobe_ftrace_ops, |
| 986 | (unsigned long)p->addr, 0, 0); | 986 | (unsigned long)p->addr, 0, 0); |
| 987 | WARN(ret < 0, "Failed to arm kprobe-ftrace at %p (%d)\n", p->addr, ret); | 987 | if (ret) { |
| 988 | kprobe_ftrace_enabled++; | 988 | pr_debug("Failed to arm kprobe-ftrace at %p (%d)\n", p->addr, ret); |
| 989 | if (kprobe_ftrace_enabled == 1) { | 989 | return ret; |
| 990 | } | ||
| 991 | |||
| 992 | if (kprobe_ftrace_enabled == 0) { | ||
| 990 | ret = register_ftrace_function(&kprobe_ftrace_ops); | 993 | ret = register_ftrace_function(&kprobe_ftrace_ops); |
| 991 | WARN(ret < 0, "Failed to init kprobe-ftrace (%d)\n", ret); | 994 | if (ret) { |
| 995 | pr_debug("Failed to init kprobe-ftrace (%d)\n", ret); | ||
| 996 | goto err_ftrace; | ||
| 997 | } | ||
| 992 | } | 998 | } |
| 999 | |||
| 1000 | kprobe_ftrace_enabled++; | ||
| 1001 | return ret; | ||
| 1002 | |||
| 1003 | err_ftrace: | ||
| 1004 | /* | ||
| 1005 | * Note: Since kprobe_ftrace_ops has IPMODIFY set, and ftrace requires a | ||
| 1006 | * non-empty filter_hash for IPMODIFY ops, we're safe from an accidental | ||
| 1007 | * empty filter_hash which would undesirably trace all functions. | ||
| 1008 | */ | ||
| 1009 | ftrace_set_filter_ip(&kprobe_ftrace_ops, (unsigned long)p->addr, 1, 0); | ||
| 1010 | return ret; | ||
| 993 | } | 1011 | } |
| 994 | 1012 | ||
| 995 | /* Caller must lock kprobe_mutex */ | 1013 | /* Caller must lock kprobe_mutex */ |
| 996 | static void disarm_kprobe_ftrace(struct kprobe *p) | 1014 | static int disarm_kprobe_ftrace(struct kprobe *p) |
| 997 | { | 1015 | { |
| 998 | int ret; | 1016 | int ret = 0; |
| 999 | 1017 | ||
| 1000 | kprobe_ftrace_enabled--; | 1018 | if (kprobe_ftrace_enabled == 1) { |
| 1001 | if (kprobe_ftrace_enabled == 0) { | ||
| 1002 | ret = unregister_ftrace_function(&kprobe_ftrace_ops); | 1019 | ret = unregister_ftrace_function(&kprobe_ftrace_ops); |
| 1003 | WARN(ret < 0, "Failed to init kprobe-ftrace (%d)\n", ret); | 1020 | if (WARN(ret < 0, "Failed to unregister kprobe-ftrace (%d)\n", ret)) |
| 1021 | return ret; | ||
| 1004 | } | 1022 | } |
| 1023 | |||
| 1024 | kprobe_ftrace_enabled--; | ||
| 1025 | |||
| 1005 | ret = ftrace_set_filter_ip(&kprobe_ftrace_ops, | 1026 | ret = ftrace_set_filter_ip(&kprobe_ftrace_ops, |
| 1006 | (unsigned long)p->addr, 1, 0); | 1027 | (unsigned long)p->addr, 1, 0); |
| 1007 | WARN(ret < 0, "Failed to disarm kprobe-ftrace at %p (%d)\n", p->addr, ret); | 1028 | WARN(ret < 0, "Failed to disarm kprobe-ftrace at %p (%d)\n", p->addr, ret); |
| 1029 | return ret; | ||
| 1008 | } | 1030 | } |
| 1009 | #else /* !CONFIG_KPROBES_ON_FTRACE */ | 1031 | #else /* !CONFIG_KPROBES_ON_FTRACE */ |
| 1010 | #define prepare_kprobe(p) arch_prepare_kprobe(p) | 1032 | #define prepare_kprobe(p) arch_prepare_kprobe(p) |
| 1011 | #define arm_kprobe_ftrace(p) do {} while (0) | 1033 | #define arm_kprobe_ftrace(p) (-ENODEV) |
| 1012 | #define disarm_kprobe_ftrace(p) do {} while (0) | 1034 | #define disarm_kprobe_ftrace(p) (-ENODEV) |
| 1013 | #endif | 1035 | #endif |
| 1014 | 1036 | ||
| 1015 | /* Arm a kprobe with text_mutex */ | 1037 | /* Arm a kprobe with text_mutex */ |
| 1016 | static void arm_kprobe(struct kprobe *kp) | 1038 | static int arm_kprobe(struct kprobe *kp) |
| 1017 | { | 1039 | { |
| 1018 | if (unlikely(kprobe_ftrace(kp))) { | 1040 | if (unlikely(kprobe_ftrace(kp))) |
| 1019 | arm_kprobe_ftrace(kp); | 1041 | return arm_kprobe_ftrace(kp); |
| 1020 | return; | 1042 | |
| 1021 | } | ||
| 1022 | cpus_read_lock(); | 1043 | cpus_read_lock(); |
| 1023 | mutex_lock(&text_mutex); | 1044 | mutex_lock(&text_mutex); |
| 1024 | __arm_kprobe(kp); | 1045 | __arm_kprobe(kp); |
| 1025 | mutex_unlock(&text_mutex); | 1046 | mutex_unlock(&text_mutex); |
| 1026 | cpus_read_unlock(); | 1047 | cpus_read_unlock(); |
| 1048 | |||
| 1049 | return 0; | ||
| 1027 | } | 1050 | } |
| 1028 | 1051 | ||
| 1029 | /* Disarm a kprobe with text_mutex */ | 1052 | /* Disarm a kprobe with text_mutex */ |
| 1030 | static void disarm_kprobe(struct kprobe *kp, bool reopt) | 1053 | static int disarm_kprobe(struct kprobe *kp, bool reopt) |
| 1031 | { | 1054 | { |
| 1032 | if (unlikely(kprobe_ftrace(kp))) { | 1055 | if (unlikely(kprobe_ftrace(kp))) |
| 1033 | disarm_kprobe_ftrace(kp); | 1056 | return disarm_kprobe_ftrace(kp); |
| 1034 | return; | ||
| 1035 | } | ||
| 1036 | 1057 | ||
| 1037 | cpus_read_lock(); | 1058 | cpus_read_lock(); |
| 1038 | mutex_lock(&text_mutex); | 1059 | mutex_lock(&text_mutex); |
| 1039 | __disarm_kprobe(kp, reopt); | 1060 | __disarm_kprobe(kp, reopt); |
| 1040 | mutex_unlock(&text_mutex); | 1061 | mutex_unlock(&text_mutex); |
| 1041 | cpus_read_unlock(); | 1062 | cpus_read_unlock(); |
| 1063 | |||
| 1064 | return 0; | ||
| 1042 | } | 1065 | } |
| 1043 | 1066 | ||
| 1044 | /* | 1067 | /* |
| @@ -1362,9 +1385,15 @@ out: | |||
| 1362 | 1385 | ||
| 1363 | if (ret == 0 && kprobe_disabled(ap) && !kprobe_disabled(p)) { | 1386 | if (ret == 0 && kprobe_disabled(ap) && !kprobe_disabled(p)) { |
| 1364 | ap->flags &= ~KPROBE_FLAG_DISABLED; | 1387 | ap->flags &= ~KPROBE_FLAG_DISABLED; |
| 1365 | if (!kprobes_all_disarmed) | 1388 | if (!kprobes_all_disarmed) { |
| 1366 | /* Arm the breakpoint again. */ | 1389 | /* Arm the breakpoint again. */ |
| 1367 | arm_kprobe(ap); | 1390 | ret = arm_kprobe(ap); |
| 1391 | if (ret) { | ||
| 1392 | ap->flags |= KPROBE_FLAG_DISABLED; | ||
| 1393 | list_del_rcu(&p->list); | ||
| 1394 | synchronize_sched(); | ||
| 1395 | } | ||
| 1396 | } | ||
| 1368 | } | 1397 | } |
| 1369 | return ret; | 1398 | return ret; |
| 1370 | } | 1399 | } |
| @@ -1573,8 +1602,14 @@ int register_kprobe(struct kprobe *p) | |||
| 1573 | hlist_add_head_rcu(&p->hlist, | 1602 | hlist_add_head_rcu(&p->hlist, |
| 1574 | &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]); | 1603 | &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]); |
| 1575 | 1604 | ||
| 1576 | if (!kprobes_all_disarmed && !kprobe_disabled(p)) | 1605 | if (!kprobes_all_disarmed && !kprobe_disabled(p)) { |
| 1577 | arm_kprobe(p); | 1606 | ret = arm_kprobe(p); |
| 1607 | if (ret) { | ||
| 1608 | hlist_del_rcu(&p->hlist); | ||
| 1609 | synchronize_sched(); | ||
| 1610 | goto out; | ||
| 1611 | } | ||
| 1612 | } | ||
| 1578 | 1613 | ||
| 1579 | /* Try to optimize kprobe */ | 1614 | /* Try to optimize kprobe */ |
| 1580 | try_to_optimize_kprobe(p); | 1615 | try_to_optimize_kprobe(p); |
| @@ -1608,11 +1643,12 @@ static int aggr_kprobe_disabled(struct kprobe *ap) | |||
| 1608 | static struct kprobe *__disable_kprobe(struct kprobe *p) | 1643 | static struct kprobe *__disable_kprobe(struct kprobe *p) |
| 1609 | { | 1644 | { |
| 1610 | struct kprobe *orig_p; | 1645 | struct kprobe *orig_p; |
| 1646 | int ret; | ||
| 1611 | 1647 | ||
| 1612 | /* Get an original kprobe for return */ | 1648 | /* Get an original kprobe for return */ |
| 1613 | orig_p = __get_valid_kprobe(p); | 1649 | orig_p = __get_valid_kprobe(p); |
| 1614 | if (unlikely(orig_p == NULL)) | 1650 | if (unlikely(orig_p == NULL)) |
| 1615 | return NULL; | 1651 | return ERR_PTR(-EINVAL); |
| 1616 | 1652 | ||
| 1617 | if (!kprobe_disabled(p)) { | 1653 | if (!kprobe_disabled(p)) { |
| 1618 | /* Disable probe if it is a child probe */ | 1654 | /* Disable probe if it is a child probe */ |
| @@ -1626,8 +1662,13 @@ static struct kprobe *__disable_kprobe(struct kprobe *p) | |||
| 1626 | * should have already been disarmed, so | 1662 | * should have already been disarmed, so |
| 1627 | * skip unneed disarming process. | 1663 | * skip unneed disarming process. |
| 1628 | */ | 1664 | */ |
| 1629 | if (!kprobes_all_disarmed) | 1665 | if (!kprobes_all_disarmed) { |
| 1630 | disarm_kprobe(orig_p, true); | 1666 | ret = disarm_kprobe(orig_p, true); |
| 1667 | if (ret) { | ||
| 1668 | p->flags &= ~KPROBE_FLAG_DISABLED; | ||
| 1669 | return ERR_PTR(ret); | ||
| 1670 | } | ||
| 1671 | } | ||
| 1631 | orig_p->flags |= KPROBE_FLAG_DISABLED; | 1672 | orig_p->flags |= KPROBE_FLAG_DISABLED; |
| 1632 | } | 1673 | } |
| 1633 | } | 1674 | } |
| @@ -1644,8 +1685,8 @@ static int __unregister_kprobe_top(struct kprobe *p) | |||
| 1644 | 1685 | ||
| 1645 | /* Disable kprobe. This will disarm it if needed. */ | 1686 | /* Disable kprobe. This will disarm it if needed. */ |
| 1646 | ap = __disable_kprobe(p); | 1687 | ap = __disable_kprobe(p); |
| 1647 | if (ap == NULL) | 1688 | if (IS_ERR(ap)) |
| 1648 | return -EINVAL; | 1689 | return PTR_ERR(ap); |
| 1649 | 1690 | ||
| 1650 | if (ap == p) | 1691 | if (ap == p) |
| 1651 | /* | 1692 | /* |
| @@ -2078,12 +2119,14 @@ static void kill_kprobe(struct kprobe *p) | |||
| 2078 | int disable_kprobe(struct kprobe *kp) | 2119 | int disable_kprobe(struct kprobe *kp) |
| 2079 | { | 2120 | { |
| 2080 | int ret = 0; | 2121 | int ret = 0; |
| 2122 | struct kprobe *p; | ||
| 2081 | 2123 | ||
| 2082 | mutex_lock(&kprobe_mutex); | 2124 | mutex_lock(&kprobe_mutex); |
| 2083 | 2125 | ||
| 2084 | /* Disable this kprobe */ | 2126 | /* Disable this kprobe */ |
| 2085 | if (__disable_kprobe(kp) == NULL) | 2127 | p = __disable_kprobe(kp); |
| 2086 | ret = -EINVAL; | 2128 | if (IS_ERR(p)) |
| 2129 | ret = PTR_ERR(p); | ||
| 2087 | 2130 | ||
| 2088 | mutex_unlock(&kprobe_mutex); | 2131 | mutex_unlock(&kprobe_mutex); |
| 2089 | return ret; | 2132 | return ret; |
| @@ -2116,7 +2159,9 @@ int enable_kprobe(struct kprobe *kp) | |||
| 2116 | 2159 | ||
| 2117 | if (!kprobes_all_disarmed && kprobe_disabled(p)) { | 2160 | if (!kprobes_all_disarmed && kprobe_disabled(p)) { |
| 2118 | p->flags &= ~KPROBE_FLAG_DISABLED; | 2161 | p->flags &= ~KPROBE_FLAG_DISABLED; |
| 2119 | arm_kprobe(p); | 2162 | ret = arm_kprobe(p); |
| 2163 | if (ret) | ||
| 2164 | p->flags |= KPROBE_FLAG_DISABLED; | ||
| 2120 | } | 2165 | } |
| 2121 | out: | 2166 | out: |
| 2122 | mutex_unlock(&kprobe_mutex); | 2167 | mutex_unlock(&kprobe_mutex); |
| @@ -2407,11 +2452,12 @@ static const struct file_operations debugfs_kprobe_blacklist_ops = { | |||
| 2407 | .release = seq_release, | 2452 | .release = seq_release, |
| 2408 | }; | 2453 | }; |
| 2409 | 2454 | ||
| 2410 | static void arm_all_kprobes(void) | 2455 | static int arm_all_kprobes(void) |
| 2411 | { | 2456 | { |
| 2412 | struct hlist_head *head; | 2457 | struct hlist_head *head; |
| 2413 | struct kprobe *p; | 2458 | struct kprobe *p; |
| 2414 | unsigned int i; | 2459 | unsigned int i, total = 0, errors = 0; |
| 2460 | int err, ret = 0; | ||
| 2415 | 2461 | ||
| 2416 | mutex_lock(&kprobe_mutex); | 2462 | mutex_lock(&kprobe_mutex); |
| 2417 | 2463 | ||
| @@ -2428,46 +2474,74 @@ static void arm_all_kprobes(void) | |||
| 2428 | /* Arming kprobes doesn't optimize kprobe itself */ | 2474 | /* Arming kprobes doesn't optimize kprobe itself */ |
| 2429 | for (i = 0; i < KPROBE_TABLE_SIZE; i++) { | 2475 | for (i = 0; i < KPROBE_TABLE_SIZE; i++) { |
| 2430 | head = &kprobe_table[i]; | 2476 | head = &kprobe_table[i]; |
| 2431 | hlist_for_each_entry_rcu(p, head, hlist) | 2477 | /* Arm all kprobes on a best-effort basis */ |
| 2432 | if (!kprobe_disabled(p)) | 2478 | hlist_for_each_entry_rcu(p, head, hlist) { |
| 2433 | arm_kprobe(p); | 2479 | if (!kprobe_disabled(p)) { |
| 2480 | err = arm_kprobe(p); | ||
| 2481 | if (err) { | ||
| 2482 | errors++; | ||
| 2483 | ret = err; | ||
| 2484 | } | ||
| 2485 | total++; | ||
| 2486 | } | ||
| 2487 | } | ||
| 2434 | } | 2488 | } |
| 2435 | 2489 | ||
| 2436 | printk(KERN_INFO "Kprobes globally enabled\n"); | 2490 | if (errors) |
| 2491 | pr_warn("Kprobes globally enabled, but failed to arm %d out of %d probes\n", | ||
| 2492 | errors, total); | ||
| 2493 | else | ||
| 2494 | pr_info("Kprobes globally enabled\n"); | ||
| 2437 | 2495 | ||
| 2438 | already_enabled: | 2496 | already_enabled: |
| 2439 | mutex_unlock(&kprobe_mutex); | 2497 | mutex_unlock(&kprobe_mutex); |
| 2440 | return; | 2498 | return ret; |
| 2441 | } | 2499 | } |
| 2442 | 2500 | ||
| 2443 | static void disarm_all_kprobes(void) | 2501 | static int disarm_all_kprobes(void) |
| 2444 | { | 2502 | { |
| 2445 | struct hlist_head *head; | 2503 | struct hlist_head *head; |
| 2446 | struct kprobe *p; | 2504 | struct kprobe *p; |
| 2447 | unsigned int i; | 2505 | unsigned int i, total = 0, errors = 0; |
| 2506 | int err, ret = 0; | ||
| 2448 | 2507 | ||
| 2449 | mutex_lock(&kprobe_mutex); | 2508 | mutex_lock(&kprobe_mutex); |
| 2450 | 2509 | ||
| 2451 | /* If kprobes are already disarmed, just return */ | 2510 | /* If kprobes are already disarmed, just return */ |
| 2452 | if (kprobes_all_disarmed) { | 2511 | if (kprobes_all_disarmed) { |
| 2453 | mutex_unlock(&kprobe_mutex); | 2512 | mutex_unlock(&kprobe_mutex); |
| 2454 | return; | 2513 | return 0; |
| 2455 | } | 2514 | } |
| 2456 | 2515 | ||
| 2457 | kprobes_all_disarmed = true; | 2516 | kprobes_all_disarmed = true; |
| 2458 | printk(KERN_INFO "Kprobes globally disabled\n"); | ||
| 2459 | 2517 | ||
| 2460 | for (i = 0; i < KPROBE_TABLE_SIZE; i++) { | 2518 | for (i = 0; i < KPROBE_TABLE_SIZE; i++) { |
| 2461 | head = &kprobe_table[i]; | 2519 | head = &kprobe_table[i]; |
| 2520 | /* Disarm all kprobes on a best-effort basis */ | ||
| 2462 | hlist_for_each_entry_rcu(p, head, hlist) { | 2521 | hlist_for_each_entry_rcu(p, head, hlist) { |
| 2463 | if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p)) | 2522 | if (!arch_trampoline_kprobe(p) && !kprobe_disabled(p)) { |
| 2464 | disarm_kprobe(p, false); | 2523 | err = disarm_kprobe(p, false); |
| 2524 | if (err) { | ||
| 2525 | errors++; | ||
| 2526 | ret = err; | ||
| 2527 | } | ||
| 2528 | total++; | ||
| 2529 | } | ||
| 2465 | } | 2530 | } |
| 2466 | } | 2531 | } |
| 2532 | |||
| 2533 | if (errors) | ||
| 2534 | pr_warn("Kprobes globally disabled, but failed to disarm %d out of %d probes\n", | ||
| 2535 | errors, total); | ||
| 2536 | else | ||
| 2537 | pr_info("Kprobes globally disabled\n"); | ||
| 2538 | |||
| 2467 | mutex_unlock(&kprobe_mutex); | 2539 | mutex_unlock(&kprobe_mutex); |
| 2468 | 2540 | ||
| 2469 | /* Wait for disarming all kprobes by optimizer */ | 2541 | /* Wait for disarming all kprobes by optimizer */ |
| 2470 | wait_for_kprobe_optimizer(); | 2542 | wait_for_kprobe_optimizer(); |
| 2543 | |||
| 2544 | return ret; | ||
| 2471 | } | 2545 | } |
| 2472 | 2546 | ||
| 2473 | /* | 2547 | /* |
| @@ -2494,6 +2568,7 @@ static ssize_t write_enabled_file_bool(struct file *file, | |||
| 2494 | { | 2568 | { |
| 2495 | char buf[32]; | 2569 | char buf[32]; |
| 2496 | size_t buf_size; | 2570 | size_t buf_size; |
| 2571 | int ret = 0; | ||
| 2497 | 2572 | ||
| 2498 | buf_size = min(count, (sizeof(buf)-1)); | 2573 | buf_size = min(count, (sizeof(buf)-1)); |
| 2499 | if (copy_from_user(buf, user_buf, buf_size)) | 2574 | if (copy_from_user(buf, user_buf, buf_size)) |
| @@ -2504,17 +2579,20 @@ static ssize_t write_enabled_file_bool(struct file *file, | |||
| 2504 | case 'y': | 2579 | case 'y': |
| 2505 | case 'Y': | 2580 | case 'Y': |
| 2506 | case '1': | 2581 | case '1': |
| 2507 | arm_all_kprobes(); | 2582 | ret = arm_all_kprobes(); |
| 2508 | break; | 2583 | break; |
| 2509 | case 'n': | 2584 | case 'n': |
| 2510 | case 'N': | 2585 | case 'N': |
| 2511 | case '0': | 2586 | case '0': |
| 2512 | disarm_all_kprobes(); | 2587 | ret = disarm_all_kprobes(); |
| 2513 | break; | 2588 | break; |
| 2514 | default: | 2589 | default: |
| 2515 | return -EINVAL; | 2590 | return -EINVAL; |
| 2516 | } | 2591 | } |
| 2517 | 2592 | ||
| 2593 | if (ret) | ||
| 2594 | return ret; | ||
| 2595 | |||
| 2518 | return count; | 2596 | return count; |
| 2519 | } | 2597 | } |
| 2520 | 2598 | ||
diff --git a/tools/arch/powerpc/include/uapi/asm/kvm.h b/tools/arch/powerpc/include/uapi/asm/kvm.h index 637b7263cb86..833ed9a16adf 100644 --- a/tools/arch/powerpc/include/uapi/asm/kvm.h +++ b/tools/arch/powerpc/include/uapi/asm/kvm.h | |||
| @@ -632,6 +632,8 @@ struct kvm_ppc_cpu_char { | |||
| 632 | #define KVM_REG_PPC_TIDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc) | 632 | #define KVM_REG_PPC_TIDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc) |
| 633 | #define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd) | 633 | #define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd) |
| 634 | 634 | ||
| 635 | #define KVM_REG_PPC_DEC_EXPIRY (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe) | ||
| 636 | |||
| 635 | /* Transactional Memory checkpointed state: | 637 | /* Transactional Memory checkpointed state: |
| 636 | * This is all GPRs, all VSX regs and a subset of SPRs | 638 | * This is all GPRs, all VSX regs and a subset of SPRs |
| 637 | */ | 639 | */ |
diff --git a/tools/arch/s390/include/uapi/asm/unistd.h b/tools/arch/s390/include/uapi/asm/unistd.h deleted file mode 100644 index 725120939051..000000000000 --- a/tools/arch/s390/include/uapi/asm/unistd.h +++ /dev/null | |||
| @@ -1,412 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | /* | ||
| 3 | * S390 version | ||
| 4 | * | ||
| 5 | * Derived from "include/asm-i386/unistd.h" | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef _UAPI_ASM_S390_UNISTD_H_ | ||
| 9 | #define _UAPI_ASM_S390_UNISTD_H_ | ||
| 10 | |||
| 11 | /* | ||
| 12 | * This file contains the system call numbers. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #define __NR_exit 1 | ||
| 16 | #define __NR_fork 2 | ||
| 17 | #define __NR_read 3 | ||
| 18 | #define __NR_write 4 | ||
| 19 | #define __NR_open 5 | ||
| 20 | #define __NR_close 6 | ||
| 21 | #define __NR_restart_syscall 7 | ||
| 22 | #define __NR_creat 8 | ||
| 23 | #define __NR_link 9 | ||
| 24 | #define __NR_unlink 10 | ||
| 25 | #define __NR_execve 11 | ||
| 26 | #define __NR_chdir 12 | ||
| 27 | #define __NR_mknod 14 | ||
| 28 | #define __NR_chmod 15 | ||
| 29 | #define __NR_lseek 19 | ||
| 30 | #define __NR_getpid 20 | ||
| 31 | #define __NR_mount 21 | ||
| 32 | #define __NR_umount 22 | ||
| 33 | #define __NR_ptrace 26 | ||
| 34 | #define __NR_alarm 27 | ||
| 35 | #define __NR_pause 29 | ||
| 36 | #define __NR_utime 30 | ||
| 37 | #define __NR_access 33 | ||
| 38 | #define __NR_nice 34 | ||
| 39 | #define __NR_sync 36 | ||
| 40 | #define __NR_kill 37 | ||
| 41 | #define __NR_rename 38 | ||
| 42 | #define __NR_mkdir 39 | ||
| 43 | #define __NR_rmdir 40 | ||
| 44 | #define __NR_dup 41 | ||
| 45 | #define __NR_pipe 42 | ||
| 46 | #define __NR_times 43 | ||
| 47 | #define __NR_brk 45 | ||
| 48 | #define __NR_signal 48 | ||
| 49 | #define __NR_acct 51 | ||
| 50 | #define __NR_umount2 52 | ||
| 51 | #define __NR_ioctl 54 | ||
| 52 | #define __NR_fcntl 55 | ||
| 53 | #define __NR_setpgid 57 | ||
| 54 | #define __NR_umask 60 | ||
| 55 | #define __NR_chroot 61 | ||
| 56 | #define __NR_ustat 62 | ||
| 57 | #define __NR_dup2 63 | ||
| 58 | #define __NR_getppid 64 | ||
| 59 | #define __NR_getpgrp 65 | ||
| 60 | #define __NR_setsid 66 | ||
| 61 | #define __NR_sigaction 67 | ||
| 62 | #define __NR_sigsuspend 72 | ||
| 63 | #define __NR_sigpending 73 | ||
| 64 | #define __NR_sethostname 74 | ||
| 65 | #define __NR_setrlimit 75 | ||
| 66 | #define __NR_getrusage 77 | ||
| 67 | #define __NR_gettimeofday 78 | ||
| 68 | #define __NR_settimeofday 79 | ||
| 69 | #define __NR_symlink 83 | ||
| 70 | #define __NR_readlink 85 | ||
| 71 | #define __NR_uselib 86 | ||
| 72 | #define __NR_swapon 87 | ||
| 73 | #define __NR_reboot 88 | ||
| 74 | #define __NR_readdir 89 | ||
| 75 | #define __NR_mmap 90 | ||
| 76 | #define __NR_munmap 91 | ||
| 77 | #define __NR_truncate 92 | ||
| 78 | #define __NR_ftruncate 93 | ||
| 79 | #define __NR_fchmod 94 | ||
| 80 | #define __NR_getpriority 96 | ||
| 81 | #define __NR_setpriority 97 | ||
| 82 | #define __NR_statfs 99 | ||
| 83 | #define __NR_fstatfs 100 | ||
| 84 | #define __NR_socketcall 102 | ||
| 85 | #define __NR_syslog 103 | ||
| 86 | #define __NR_setitimer 104 | ||
| 87 | #define __NR_getitimer 105 | ||
| 88 | #define __NR_stat 106 | ||
| 89 | #define __NR_lstat 107 | ||
| 90 | #define __NR_fstat 108 | ||
| 91 | #define __NR_lookup_dcookie 110 | ||
| 92 | #define __NR_vhangup 111 | ||
| 93 | #define __NR_idle 112 | ||
| 94 | #define __NR_wait4 114 | ||
| 95 | #define __NR_swapoff 115 | ||
| 96 | #define __NR_sysinfo 116 | ||
| 97 | #define __NR_ipc 117 | ||
| 98 | #define __NR_fsync 118 | ||
| 99 | #define __NR_sigreturn 119 | ||
| 100 | #define __NR_clone 120 | ||
| 101 | #define __NR_setdomainname 121 | ||
| 102 | #define __NR_uname 122 | ||
| 103 | #define __NR_adjtimex 124 | ||
| 104 | #define __NR_mprotect 125 | ||
| 105 | #define __NR_sigprocmask 126 | ||
| 106 | #define __NR_create_module 127 | ||
| 107 | #define __NR_init_module 128 | ||
| 108 | #define __NR_delete_module 129 | ||
| 109 | #define __NR_get_kernel_syms 130 | ||
| 110 | #define __NR_quotactl 131 | ||
| 111 | #define __NR_getpgid 132 | ||
| 112 | #define __NR_fchdir 133 | ||
| 113 | #define __NR_bdflush 134 | ||
| 114 | #define __NR_sysfs 135 | ||
| 115 | #define __NR_personality 136 | ||
| 116 | #define __NR_afs_syscall 137 /* Syscall for Andrew File System */ | ||
| 117 | #define __NR_getdents 141 | ||
| 118 | #define __NR_flock 143 | ||
| 119 | #define __NR_msync 144 | ||
| 120 | #define __NR_readv 145 | ||
| 121 | #define __NR_writev 146 | ||
| 122 | #define __NR_getsid 147 | ||
| 123 | #define __NR_fdatasync 148 | ||
| 124 | #define __NR__sysctl 149 | ||
| 125 | #define __NR_mlock 150 | ||
| 126 | #define __NR_munlock 151 | ||
| 127 | #define __NR_mlockall 152 | ||
| 128 | #define __NR_munlockall 153 | ||
| 129 | #define __NR_sched_setparam 154 | ||
| 130 | #define __NR_sched_getparam 155 | ||
| 131 | #define __NR_sched_setscheduler 156 | ||
| 132 | #define __NR_sched_getscheduler 157 | ||
| 133 | #define __NR_sched_yield 158 | ||
| 134 | #define __NR_sched_get_priority_max 159 | ||
| 135 | #define __NR_sched_get_priority_min 160 | ||
| 136 | #define __NR_sched_rr_get_interval 161 | ||
| 137 | #define __NR_nanosleep 162 | ||
| 138 | #define __NR_mremap 163 | ||
| 139 | #define __NR_query_module 167 | ||
| 140 | #define __NR_poll 168 | ||
| 141 | #define __NR_nfsservctl 169 | ||
| 142 | #define __NR_prctl 172 | ||
| 143 | #define __NR_rt_sigreturn 173 | ||
| 144 | #define __NR_rt_sigaction 174 | ||
| 145 | #define __NR_rt_sigprocmask 175 | ||
| 146 | #define __NR_rt_sigpending 176 | ||
| 147 | #define __NR_rt_sigtimedwait 177 | ||
| 148 | #define __NR_rt_sigqueueinfo 178 | ||
| 149 | #define __NR_rt_sigsuspend 179 | ||
| 150 | #define __NR_pread64 180 | ||
| 151 | #define __NR_pwrite64 181 | ||
| 152 | #define __NR_getcwd 183 | ||
| 153 | #define __NR_capget 184 | ||
| 154 | #define __NR_capset 185 | ||
| 155 | #define __NR_sigaltstack 186 | ||
| 156 | #define __NR_sendfile 187 | ||
| 157 | #define __NR_getpmsg 188 | ||
| 158 | #define __NR_putpmsg 189 | ||
| 159 | #define __NR_vfork 190 | ||
| 160 | #define __NR_pivot_root 217 | ||
| 161 | #define __NR_mincore 218 | ||
| 162 | #define __NR_madvise 219 | ||
| 163 | #define __NR_getdents64 220 | ||
| 164 | #define __NR_readahead 222 | ||
| 165 | #define __NR_setxattr 224 | ||
| 166 | #define __NR_lsetxattr 225 | ||
| 167 | #define __NR_fsetxattr 226 | ||
| 168 | #define __NR_getxattr 227 | ||
| 169 | #define __NR_lgetxattr 228 | ||
| 170 | #define __NR_fgetxattr 229 | ||
| 171 | #define __NR_listxattr 230 | ||
| 172 | #define __NR_llistxattr 231 | ||
| 173 | #define __NR_flistxattr 232 | ||
| 174 | #define __NR_removexattr 233 | ||
| 175 | #define __NR_lremovexattr 234 | ||
| 176 | #define __NR_fremovexattr 235 | ||
| 177 | #define __NR_gettid 236 | ||
| 178 | #define __NR_tkill 237 | ||
| 179 | #define __NR_futex 238 | ||
| 180 | #define __NR_sched_setaffinity 239 | ||
| 181 | #define __NR_sched_getaffinity 240 | ||
| 182 | #define __NR_tgkill 241 | ||
| 183 | /* Number 242 is reserved for tux */ | ||
| 184 | #define __NR_io_setup 243 | ||
| 185 | #define __NR_io_destroy 244 | ||
| 186 | #define __NR_io_getevents 245 | ||
| 187 | #define __NR_io_submit 246 | ||
| 188 | #define __NR_io_cancel 247 | ||
| 189 | #define __NR_exit_group 248 | ||
| 190 | #define __NR_epoll_create 249 | ||
| 191 | #define __NR_epoll_ctl 250 | ||
| 192 | #define __NR_epoll_wait 251 | ||
| 193 | #define __NR_set_tid_address 252 | ||
| 194 | #define __NR_fadvise64 253 | ||
| 195 | #define __NR_timer_create 254 | ||
| 196 | #define __NR_timer_settime 255 | ||
| 197 | #define __NR_timer_gettime 256 | ||
| 198 | #define __NR_timer_getoverrun 257 | ||
| 199 | #define __NR_timer_delete 258 | ||
| 200 | #define __NR_clock_settime 259 | ||
| 201 | #define __NR_clock_gettime 260 | ||
| 202 | #define __NR_clock_getres 261 | ||
| 203 | #define __NR_clock_nanosleep 262 | ||
| 204 | /* Number 263 is reserved for vserver */ | ||
| 205 | #define __NR_statfs64 265 | ||
| 206 | #define __NR_fstatfs64 266 | ||
| 207 | #define __NR_remap_file_pages 267 | ||
| 208 | #define __NR_mbind 268 | ||
| 209 | #define __NR_get_mempolicy 269 | ||
| 210 | #define __NR_set_mempolicy 270 | ||
| 211 | #define __NR_mq_open 271 | ||
| 212 | #define __NR_mq_unlink 272 | ||
| 213 | #define __NR_mq_timedsend 273 | ||
| 214 | #define __NR_mq_timedreceive 274 | ||
| 215 | #define __NR_mq_notify 275 | ||
| 216 | #define __NR_mq_getsetattr 276 | ||
| 217 | #define __NR_kexec_load 277 | ||
| 218 | #define __NR_add_key 278 | ||
| 219 | #define __NR_request_key 279 | ||
| 220 | #define __NR_keyctl 280 | ||
| 221 | #define __NR_waitid 281 | ||
| 222 | #define __NR_ioprio_set 282 | ||
| 223 | #define __NR_ioprio_get 283 | ||
| 224 | #define __NR_inotify_init 284 | ||
| 225 | #define __NR_inotify_add_watch 285 | ||
| 226 | #define __NR_inotify_rm_watch 286 | ||
| 227 | #define __NR_migrate_pages 287 | ||
| 228 | #define __NR_openat 288 | ||
| 229 | #define __NR_mkdirat 289 | ||
| 230 | #define __NR_mknodat 290 | ||
| 231 | #define __NR_fchownat 291 | ||
| 232 | #define __NR_futimesat 292 | ||
| 233 | #define __NR_unlinkat 294 | ||
| 234 | #define __NR_renameat 295 | ||
| 235 | #define __NR_linkat 296 | ||
| 236 | #define __NR_symlinkat 297 | ||
| 237 | #define __NR_readlinkat 298 | ||
| 238 | #define __NR_fchmodat 299 | ||
| 239 | #define __NR_faccessat 300 | ||
| 240 | #define __NR_pselect6 301 | ||
| 241 | #define __NR_ppoll 302 | ||
| 242 | #define __NR_unshare 303 | ||
| 243 | #define __NR_set_robust_list 304 | ||
| 244 | #define __NR_get_robust_list 305 | ||
| 245 | #define __NR_splice 306 | ||
| 246 | #define __NR_sync_file_range 307 | ||
| 247 | #define __NR_tee 308 | ||
| 248 | #define __NR_vmsplice 309 | ||
| 249 | #define __NR_move_pages 310 | ||
| 250 | #define __NR_getcpu 311 | ||
| 251 | #define __NR_epoll_pwait 312 | ||
| 252 | #define __NR_utimes 313 | ||
| 253 | #define __NR_fallocate 314 | ||
| 254 | #define __NR_utimensat 315 | ||
| 255 | #define __NR_signalfd 316 | ||
| 256 | #define __NR_timerfd 317 | ||
| 257 | #define __NR_eventfd 318 | ||
| 258 | #define __NR_timerfd_create 319 | ||
| 259 | #define __NR_timerfd_settime 320 | ||
| 260 | #define __NR_timerfd_gettime 321 | ||
| 261 | #define __NR_signalfd4 322 | ||
| 262 | #define __NR_eventfd2 323 | ||
| 263 | #define __NR_inotify_init1 324 | ||
| 264 | #define __NR_pipe2 325 | ||
| 265 | #define __NR_dup3 326 | ||
| 266 | #define __NR_epoll_create1 327 | ||
| 267 | #define __NR_preadv 328 | ||
| 268 | #define __NR_pwritev 329 | ||
| 269 | #define __NR_rt_tgsigqueueinfo 330 | ||
| 270 | #define __NR_perf_event_open 331 | ||
| 271 | #define __NR_fanotify_init 332 | ||
| 272 | #define __NR_fanotify_mark 333 | ||
| 273 | #define __NR_prlimit64 334 | ||
| 274 | #define __NR_name_to_handle_at 335 | ||
| 275 | #define __NR_open_by_handle_at 336 | ||
| 276 | #define __NR_clock_adjtime 337 | ||
| 277 | #define __NR_syncfs 338 | ||
| 278 | #define __NR_setns 339 | ||
| 279 | #define __NR_process_vm_readv 340 | ||
| 280 | #define __NR_process_vm_writev 341 | ||
| 281 | #define __NR_s390_runtime_instr 342 | ||
| 282 | #define __NR_kcmp 343 | ||
| 283 | #define __NR_finit_module 344 | ||
| 284 | #define __NR_sched_setattr 345 | ||
| 285 | #define __NR_sched_getattr 346 | ||
| 286 | #define __NR_renameat2 347 | ||
| 287 | #define __NR_seccomp 348 | ||
| 288 | #define __NR_getrandom 349 | ||
| 289 | #define __NR_memfd_create 350 | ||
| 290 | #define __NR_bpf 351 | ||
| 291 | #define __NR_s390_pci_mmio_write 352 | ||
| 292 | #define __NR_s390_pci_mmio_read 353 | ||
| 293 | #define __NR_execveat 354 | ||
| 294 | #define __NR_userfaultfd 355 | ||
| 295 | #define __NR_membarrier 356 | ||
| 296 | #define __NR_recvmmsg 357 | ||
| 297 | #define __NR_sendmmsg 358 | ||
| 298 | #define __NR_socket 359 | ||
| 299 | #define __NR_socketpair 360 | ||
| 300 | #define __NR_bind 361 | ||
| 301 | #define __NR_connect 362 | ||
| 302 | #define __NR_listen 363 | ||
| 303 | #define __NR_accept4 364 | ||
| 304 | #define __NR_getsockopt 365 | ||
| 305 | #define __NR_setsockopt 366 | ||
| 306 | #define __NR_getsockname 367 | ||
| 307 | #define __NR_getpeername 368 | ||
| 308 | #define __NR_sendto 369 | ||
| 309 | #define __NR_sendmsg 370 | ||
| 310 | #define __NR_recvfrom 371 | ||
| 311 | #define __NR_recvmsg 372 | ||
| 312 | #define __NR_shutdown 373 | ||
| 313 | #define __NR_mlock2 374 | ||
| 314 | #define __NR_copy_file_range 375 | ||
| 315 | #define __NR_preadv2 376 | ||
| 316 | #define __NR_pwritev2 377 | ||
| 317 | #define __NR_s390_guarded_storage 378 | ||
| 318 | #define __NR_statx 379 | ||
| 319 | #define __NR_s390_sthyi 380 | ||
| 320 | #define NR_syscalls 381 | ||
| 321 | |||
| 322 | /* | ||
| 323 | * There are some system calls that are not present on 64 bit, some | ||
| 324 | * have a different name although they do the same (e.g. __NR_chown32 | ||
| 325 | * is __NR_chown on 64 bit). | ||
| 326 | */ | ||
| 327 | #ifndef __s390x__ | ||
| 328 | |||
| 329 | #define __NR_time 13 | ||
| 330 | #define __NR_lchown 16 | ||
| 331 | #define __NR_setuid 23 | ||
| 332 | #define __NR_getuid 24 | ||
| 333 | #define __NR_stime 25 | ||
| 334 | #define __NR_setgid 46 | ||
| 335 | #define __NR_getgid 47 | ||
| 336 | #define __NR_geteuid 49 | ||
| 337 | #define __NR_getegid 50 | ||
| 338 | #define __NR_setreuid 70 | ||
| 339 | #define __NR_setregid 71 | ||
| 340 | #define __NR_getrlimit 76 | ||
| 341 | #define __NR_getgroups 80 | ||
| 342 | #define __NR_setgroups 81 | ||
| 343 | #define __NR_fchown 95 | ||
| 344 | #define __NR_ioperm 101 | ||
| 345 | #define __NR_setfsuid 138 | ||
| 346 | #define __NR_setfsgid 139 | ||
| 347 | #define __NR__llseek 140 | ||
| 348 | #define __NR__newselect 142 | ||
| 349 | #define __NR_setresuid 164 | ||
| 350 | #define __NR_getresuid 165 | ||
| 351 | #define __NR_setresgid 170 | ||
| 352 | #define __NR_getresgid 171 | ||
| 353 | #define __NR_chown 182 | ||
| 354 | #define __NR_ugetrlimit 191 /* SuS compliant getrlimit */ | ||
| 355 | #define __NR_mmap2 192 | ||
| 356 | #define __NR_truncate64 193 | ||
| 357 | #define __NR_ftruncate64 194 | ||
| 358 | #define __NR_stat64 195 | ||
| 359 | #define __NR_lstat64 196 | ||
| 360 | #define __NR_fstat64 197 | ||
| 361 | #define __NR_lchown32 198 | ||
| 362 | #define __NR_getuid32 199 | ||
| 363 | #define __NR_getgid32 200 | ||
| 364 | #define __NR_geteuid32 201 | ||
| 365 | #define __NR_getegid32 202 | ||
| 366 | #define __NR_setreuid32 203 | ||
| 367 | #define __NR_setregid32 204 | ||
| 368 | #define __NR_getgroups32 205 | ||
| 369 | #define __NR_setgroups32 206 | ||
| 370 | #define __NR_fchown32 207 | ||
| 371 | #define __NR_setresuid32 208 | ||
| 372 | #define __NR_getresuid32 209 | ||
| 373 | #define __NR_setresgid32 210 | ||
| 374 | #define __NR_getresgid32 211 | ||
| 375 | #define __NR_chown32 212 | ||
| 376 | #define __NR_setuid32 213 | ||
| 377 | #define __NR_setgid32 214 | ||
| 378 | #define __NR_setfsuid32 215 | ||
| 379 | #define __NR_setfsgid32 216 | ||
| 380 | #define __NR_fcntl64 221 | ||
| 381 | #define __NR_sendfile64 223 | ||
| 382 | #define __NR_fadvise64_64 264 | ||
| 383 | #define __NR_fstatat64 293 | ||
| 384 | |||
| 385 | #else | ||
| 386 | |||
| 387 | #define __NR_select 142 | ||
| 388 | #define __NR_getrlimit 191 /* SuS compliant getrlimit */ | ||
| 389 | #define __NR_lchown 198 | ||
| 390 | #define __NR_getuid 199 | ||
| 391 | #define __NR_getgid 200 | ||
| 392 | #define __NR_geteuid 201 | ||
| 393 | #define __NR_getegid 202 | ||
| 394 | #define __NR_setreuid 203 | ||
| 395 | #define __NR_setregid 204 | ||
| 396 | #define __NR_getgroups 205 | ||
| 397 | #define __NR_setgroups 206 | ||
| 398 | #define __NR_fchown 207 | ||
| 399 | #define __NR_setresuid 208 | ||
| 400 | #define __NR_getresuid 209 | ||
| 401 | #define __NR_setresgid 210 | ||
| 402 | #define __NR_getresgid 211 | ||
| 403 | #define __NR_chown 212 | ||
| 404 | #define __NR_setuid 213 | ||
| 405 | #define __NR_setgid 214 | ||
| 406 | #define __NR_setfsuid 215 | ||
| 407 | #define __NR_setfsgid 216 | ||
| 408 | #define __NR_newfstatat 293 | ||
| 409 | |||
| 410 | #endif | ||
| 411 | |||
| 412 | #endif /* _UAPI_ASM_S390_UNISTD_H_ */ | ||
diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h index 1d9199e1c2ad..0dfe4d3f74e2 100644 --- a/tools/arch/x86/include/asm/cpufeatures.h +++ b/tools/arch/x86/include/asm/cpufeatures.h | |||
| @@ -210,6 +210,7 @@ | |||
| 210 | 210 | ||
| 211 | #define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ | 211 | #define X86_FEATURE_MBA ( 7*32+18) /* Memory Bandwidth Allocation */ |
| 212 | #define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */ | 212 | #define X86_FEATURE_RSB_CTXSW ( 7*32+19) /* "" Fill RSB on context switches */ |
| 213 | #define X86_FEATURE_SEV ( 7*32+20) /* AMD Secure Encrypted Virtualization */ | ||
| 213 | 214 | ||
| 214 | #define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */ | 215 | #define X86_FEATURE_USE_IBPB ( 7*32+21) /* "" Indirect Branch Prediction Barrier enabled */ |
| 215 | 216 | ||
diff --git a/tools/include/uapi/drm/i915_drm.h b/tools/include/uapi/drm/i915_drm.h index ac3c6503ca27..536ee4febd74 100644 --- a/tools/include/uapi/drm/i915_drm.h +++ b/tools/include/uapi/drm/i915_drm.h | |||
| @@ -86,6 +86,62 @@ enum i915_mocs_table_index { | |||
| 86 | I915_MOCS_CACHED, | 86 | I915_MOCS_CACHED, |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
| 89 | /* | ||
| 90 | * Different engines serve different roles, and there may be more than one | ||
| 91 | * engine serving each role. enum drm_i915_gem_engine_class provides a | ||
| 92 | * classification of the role of the engine, which may be used when requesting | ||
| 93 | * operations to be performed on a certain subset of engines, or for providing | ||
| 94 | * information about that group. | ||
| 95 | */ | ||
| 96 | enum drm_i915_gem_engine_class { | ||
| 97 | I915_ENGINE_CLASS_RENDER = 0, | ||
| 98 | I915_ENGINE_CLASS_COPY = 1, | ||
| 99 | I915_ENGINE_CLASS_VIDEO = 2, | ||
| 100 | I915_ENGINE_CLASS_VIDEO_ENHANCE = 3, | ||
| 101 | |||
| 102 | I915_ENGINE_CLASS_INVALID = -1 | ||
| 103 | }; | ||
| 104 | |||
| 105 | /** | ||
| 106 | * DOC: perf_events exposed by i915 through /sys/bus/event_sources/drivers/i915 | ||
| 107 | * | ||
| 108 | */ | ||
| 109 | |||
| 110 | enum drm_i915_pmu_engine_sample { | ||
| 111 | I915_SAMPLE_BUSY = 0, | ||
| 112 | I915_SAMPLE_WAIT = 1, | ||
| 113 | I915_SAMPLE_SEMA = 2 | ||
| 114 | }; | ||
| 115 | |||
| 116 | #define I915_PMU_SAMPLE_BITS (4) | ||
| 117 | #define I915_PMU_SAMPLE_MASK (0xf) | ||
| 118 | #define I915_PMU_SAMPLE_INSTANCE_BITS (8) | ||
| 119 | #define I915_PMU_CLASS_SHIFT \ | ||
| 120 | (I915_PMU_SAMPLE_BITS + I915_PMU_SAMPLE_INSTANCE_BITS) | ||
| 121 | |||
| 122 | #define __I915_PMU_ENGINE(class, instance, sample) \ | ||
| 123 | ((class) << I915_PMU_CLASS_SHIFT | \ | ||
| 124 | (instance) << I915_PMU_SAMPLE_BITS | \ | ||
| 125 | (sample)) | ||
| 126 | |||
| 127 | #define I915_PMU_ENGINE_BUSY(class, instance) \ | ||
| 128 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_BUSY) | ||
| 129 | |||
| 130 | #define I915_PMU_ENGINE_WAIT(class, instance) \ | ||
| 131 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_WAIT) | ||
| 132 | |||
| 133 | #define I915_PMU_ENGINE_SEMA(class, instance) \ | ||
| 134 | __I915_PMU_ENGINE(class, instance, I915_SAMPLE_SEMA) | ||
| 135 | |||
| 136 | #define __I915_PMU_OTHER(x) (__I915_PMU_ENGINE(0xff, 0xff, 0xf) + 1 + (x)) | ||
| 137 | |||
| 138 | #define I915_PMU_ACTUAL_FREQUENCY __I915_PMU_OTHER(0) | ||
| 139 | #define I915_PMU_REQUESTED_FREQUENCY __I915_PMU_OTHER(1) | ||
| 140 | #define I915_PMU_INTERRUPTS __I915_PMU_OTHER(2) | ||
| 141 | #define I915_PMU_RC6_RESIDENCY __I915_PMU_OTHER(3) | ||
| 142 | |||
| 143 | #define I915_PMU_LAST I915_PMU_RC6_RESIDENCY | ||
| 144 | |||
| 89 | /* Each region is a minimum of 16k, and there are at most 255 of them. | 145 | /* Each region is a minimum of 16k, and there are at most 255 of them. |
| 90 | */ | 146 | */ |
| 91 | #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use | 147 | #define I915_NR_TEX_REGIONS 255 /* table size 2k - maximum due to use |
| @@ -450,6 +506,27 @@ typedef struct drm_i915_irq_wait { | |||
| 450 | */ | 506 | */ |
| 451 | #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 | 507 | #define I915_PARAM_HAS_EXEC_FENCE_ARRAY 49 |
| 452 | 508 | ||
| 509 | /* | ||
| 510 | * Query whether every context (both per-file default and user created) is | ||
| 511 | * isolated (insofar as HW supports). If this parameter is not true, then | ||
| 512 | * freshly created contexts may inherit values from an existing context, | ||
| 513 | * rather than default HW values. If true, it also ensures (insofar as HW | ||
| 514 | * supports) that all state set by this context will not leak to any other | ||
| 515 | * context. | ||
| 516 | * | ||
| 517 | * As not every engine across every gen support contexts, the returned | ||
| 518 | * value reports the support of context isolation for individual engines by | ||
| 519 | * returning a bitmask of each engine class set to true if that class supports | ||
| 520 | * isolation. | ||
| 521 | */ | ||
| 522 | #define I915_PARAM_HAS_CONTEXT_ISOLATION 50 | ||
| 523 | |||
| 524 | /* Frequency of the command streamer timestamps given by the *_TIMESTAMP | ||
| 525 | * registers. This used to be fixed per platform but from CNL onwards, this | ||
| 526 | * might vary depending on the parts. | ||
| 527 | */ | ||
| 528 | #define I915_PARAM_CS_TIMESTAMP_FREQUENCY 51 | ||
| 529 | |||
| 453 | typedef struct drm_i915_getparam { | 530 | typedef struct drm_i915_getparam { |
| 454 | __s32 param; | 531 | __s32 param; |
| 455 | /* | 532 | /* |
diff --git a/tools/include/uapi/linux/if_link.h b/tools/include/uapi/linux/if_link.h index 8616131e2c61..6d9447700e18 100644 --- a/tools/include/uapi/linux/if_link.h +++ b/tools/include/uapi/linux/if_link.h | |||
| @@ -163,6 +163,7 @@ enum { | |||
| 163 | IFLA_IF_NETNSID, | 163 | IFLA_IF_NETNSID, |
| 164 | IFLA_CARRIER_UP_COUNT, | 164 | IFLA_CARRIER_UP_COUNT, |
| 165 | IFLA_CARRIER_DOWN_COUNT, | 165 | IFLA_CARRIER_DOWN_COUNT, |
| 166 | IFLA_NEW_IFINDEX, | ||
| 166 | __IFLA_MAX | 167 | __IFLA_MAX |
| 167 | }; | 168 | }; |
| 168 | 169 | ||
diff --git a/tools/include/uapi/linux/kvm.h b/tools/include/uapi/linux/kvm.h index 8fb90a0819c3..0fb5ef939732 100644 --- a/tools/include/uapi/linux/kvm.h +++ b/tools/include/uapi/linux/kvm.h | |||
| @@ -1362,6 +1362,96 @@ struct kvm_s390_ucas_mapping { | |||
| 1362 | /* Available with KVM_CAP_S390_CMMA_MIGRATION */ | 1362 | /* Available with KVM_CAP_S390_CMMA_MIGRATION */ |
| 1363 | #define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log) | 1363 | #define KVM_S390_GET_CMMA_BITS _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log) |
| 1364 | #define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log) | 1364 | #define KVM_S390_SET_CMMA_BITS _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log) |
| 1365 | /* Memory Encryption Commands */ | ||
| 1366 | #define KVM_MEMORY_ENCRYPT_OP _IOWR(KVMIO, 0xba, unsigned long) | ||
| 1367 | |||
| 1368 | struct kvm_enc_region { | ||
| 1369 | __u64 addr; | ||
| 1370 | __u64 size; | ||
| 1371 | }; | ||
| 1372 | |||
| 1373 | #define KVM_MEMORY_ENCRYPT_REG_REGION _IOR(KVMIO, 0xbb, struct kvm_enc_region) | ||
| 1374 | #define KVM_MEMORY_ENCRYPT_UNREG_REGION _IOR(KVMIO, 0xbc, struct kvm_enc_region) | ||
| 1375 | |||
| 1376 | /* Secure Encrypted Virtualization command */ | ||
| 1377 | enum sev_cmd_id { | ||
| 1378 | /* Guest initialization commands */ | ||
| 1379 | KVM_SEV_INIT = 0, | ||
| 1380 | KVM_SEV_ES_INIT, | ||
| 1381 | /* Guest launch commands */ | ||
| 1382 | KVM_SEV_LAUNCH_START, | ||
| 1383 | KVM_SEV_LAUNCH_UPDATE_DATA, | ||
| 1384 | KVM_SEV_LAUNCH_UPDATE_VMSA, | ||
| 1385 | KVM_SEV_LAUNCH_SECRET, | ||
| 1386 | KVM_SEV_LAUNCH_MEASURE, | ||
| 1387 | KVM_SEV_LAUNCH_FINISH, | ||
| 1388 | /* Guest migration commands (outgoing) */ | ||
| 1389 | KVM_SEV_SEND_START, | ||
| 1390 | KVM_SEV_SEND_UPDATE_DATA, | ||
| 1391 | KVM_SEV_SEND_UPDATE_VMSA, | ||
| 1392 | KVM_SEV_SEND_FINISH, | ||
| 1393 | /* Guest migration commands (incoming) */ | ||
| 1394 | KVM_SEV_RECEIVE_START, | ||
| 1395 | KVM_SEV_RECEIVE_UPDATE_DATA, | ||
| 1396 | KVM_SEV_RECEIVE_UPDATE_VMSA, | ||
| 1397 | KVM_SEV_RECEIVE_FINISH, | ||
| 1398 | /* Guest status and debug commands */ | ||
| 1399 | KVM_SEV_GUEST_STATUS, | ||
| 1400 | KVM_SEV_DBG_DECRYPT, | ||
| 1401 | KVM_SEV_DBG_ENCRYPT, | ||
| 1402 | /* Guest certificates commands */ | ||
| 1403 | KVM_SEV_CERT_EXPORT, | ||
| 1404 | |||
| 1405 | KVM_SEV_NR_MAX, | ||
| 1406 | }; | ||
| 1407 | |||
| 1408 | struct kvm_sev_cmd { | ||
| 1409 | __u32 id; | ||
| 1410 | __u64 data; | ||
| 1411 | __u32 error; | ||
| 1412 | __u32 sev_fd; | ||
| 1413 | }; | ||
| 1414 | |||
| 1415 | struct kvm_sev_launch_start { | ||
| 1416 | __u32 handle; | ||
| 1417 | __u32 policy; | ||
| 1418 | __u64 dh_uaddr; | ||
| 1419 | __u32 dh_len; | ||
| 1420 | __u64 session_uaddr; | ||
| 1421 | __u32 session_len; | ||
| 1422 | }; | ||
| 1423 | |||
| 1424 | struct kvm_sev_launch_update_data { | ||
| 1425 | __u64 uaddr; | ||
| 1426 | __u32 len; | ||
| 1427 | }; | ||
| 1428 | |||
| 1429 | |||
| 1430 | struct kvm_sev_launch_secret { | ||
| 1431 | __u64 hdr_uaddr; | ||
| 1432 | __u32 hdr_len; | ||
| 1433 | __u64 guest_uaddr; | ||
| 1434 | __u32 guest_len; | ||
| 1435 | __u64 trans_uaddr; | ||
| 1436 | __u32 trans_len; | ||
| 1437 | }; | ||
| 1438 | |||
| 1439 | struct kvm_sev_launch_measure { | ||
| 1440 | __u64 uaddr; | ||
| 1441 | __u32 len; | ||
| 1442 | }; | ||
| 1443 | |||
| 1444 | struct kvm_sev_guest_status { | ||
| 1445 | __u32 handle; | ||
| 1446 | __u32 policy; | ||
| 1447 | __u32 state; | ||
| 1448 | }; | ||
| 1449 | |||
| 1450 | struct kvm_sev_dbg { | ||
| 1451 | __u64 src_uaddr; | ||
| 1452 | __u64 dst_uaddr; | ||
| 1453 | __u32 len; | ||
| 1454 | }; | ||
| 1365 | 1455 | ||
| 1366 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) | 1456 | #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) |
| 1367 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) | 1457 | #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) |
diff --git a/tools/perf/Documentation/perf-data.txt b/tools/perf/Documentation/perf-data.txt index f0796a47dfa3..90bb4aabe4f8 100644 --- a/tools/perf/Documentation/perf-data.txt +++ b/tools/perf/Documentation/perf-data.txt | |||
| @@ -30,6 +30,10 @@ OPTIONS for 'convert' | |||
| 30 | -i:: | 30 | -i:: |
| 31 | Specify input perf data file path. | 31 | Specify input perf data file path. |
| 32 | 32 | ||
| 33 | -f:: | ||
| 34 | --force:: | ||
| 35 | Don't complain, do it. | ||
| 36 | |||
| 33 | -v:: | 37 | -v:: |
| 34 | --verbose:: | 38 | --verbose:: |
| 35 | Be more verbose (show counter open errors, etc). | 39 | Be more verbose (show counter open errors, etc). |
diff --git a/tools/perf/arch/s390/Makefile b/tools/perf/arch/s390/Makefile index 48228de415d0..dfa6e3103437 100644 --- a/tools/perf/arch/s390/Makefile +++ b/tools/perf/arch/s390/Makefile | |||
| @@ -10,15 +10,19 @@ PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1 | |||
| 10 | 10 | ||
| 11 | out := $(OUTPUT)arch/s390/include/generated/asm | 11 | out := $(OUTPUT)arch/s390/include/generated/asm |
| 12 | header := $(out)/syscalls_64.c | 12 | header := $(out)/syscalls_64.c |
| 13 | sysdef := $(srctree)/tools/arch/s390/include/uapi/asm/unistd.h | 13 | syskrn := $(srctree)/arch/s390/kernel/syscalls/syscall.tbl |
| 14 | sysprf := $(srctree)/tools/perf/arch/s390/entry/syscalls/ | 14 | sysprf := $(srctree)/tools/perf/arch/s390/entry/syscalls |
| 15 | sysdef := $(sysprf)/syscall.tbl | ||
| 15 | systbl := $(sysprf)/mksyscalltbl | 16 | systbl := $(sysprf)/mksyscalltbl |
| 16 | 17 | ||
| 17 | # Create output directory if not already present | 18 | # Create output directory if not already present |
| 18 | _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') | 19 | _dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') |
| 19 | 20 | ||
| 20 | $(header): $(sysdef) $(systbl) | 21 | $(header): $(sysdef) $(systbl) |
| 21 | $(Q)$(SHELL) '$(systbl)' '$(CC)' $(sysdef) > $@ | 22 | @(test -d ../../kernel -a -d ../../tools -a -d ../perf && ( \ |
| 23 | (diff -B $(sysdef) $(syskrn) >/dev/null) \ | ||
| 24 | || echo "Warning: Kernel ABI header at '$(sysdef)' differs from latest version at '$(syskrn)'" >&2 )) || true | ||
| 25 | $(Q)$(SHELL) '$(systbl)' $(sysdef) > $@ | ||
| 22 | 26 | ||
| 23 | clean:: | 27 | clean:: |
| 24 | $(call QUIET_CLEAN, s390) $(RM) $(header) | 28 | $(call QUIET_CLEAN, s390) $(RM) $(header) |
diff --git a/tools/perf/arch/s390/entry/syscalls/mksyscalltbl b/tools/perf/arch/s390/entry/syscalls/mksyscalltbl index 7fa0d0abd419..72ecbb676370 100755 --- a/tools/perf/arch/s390/entry/syscalls/mksyscalltbl +++ b/tools/perf/arch/s390/entry/syscalls/mksyscalltbl | |||
| @@ -3,25 +3,23 @@ | |||
| 3 | # | 3 | # |
| 4 | # Generate system call table for perf | 4 | # Generate system call table for perf |
| 5 | # | 5 | # |
| 6 | # | 6 | # Copyright IBM Corp. 2017, 2018 |
| 7 | # Copyright IBM Corp. 2017 | ||
| 8 | # Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> | 7 | # Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> |
| 9 | # | 8 | # |
| 10 | 9 | ||
| 11 | gcc=$1 | 10 | SYSCALL_TBL=$1 |
| 12 | input=$2 | ||
| 13 | 11 | ||
| 14 | if ! test -r $input; then | 12 | if ! test -r $SYSCALL_TBL; then |
| 15 | echo "Could not read input file" >&2 | 13 | echo "Could not read input file" >&2 |
| 16 | exit 1 | 14 | exit 1 |
| 17 | fi | 15 | fi |
| 18 | 16 | ||
| 19 | create_table() | 17 | create_table() |
| 20 | { | 18 | { |
| 21 | local max_nr | 19 | local max_nr nr abi sc discard |
| 22 | 20 | ||
| 23 | echo 'static const char *syscalltbl_s390_64[] = {' | 21 | echo 'static const char *syscalltbl_s390_64[] = {' |
| 24 | while read sc nr; do | 22 | while read nr abi sc discard; do |
| 25 | printf '\t[%d] = "%s",\n' $nr $sc | 23 | printf '\t[%d] = "%s",\n' $nr $sc |
| 26 | max_nr=$nr | 24 | max_nr=$nr |
| 27 | done | 25 | done |
| @@ -29,8 +27,6 @@ create_table() | |||
| 29 | echo "#define SYSCALLTBL_S390_64_MAX_ID $max_nr" | 27 | echo "#define SYSCALLTBL_S390_64_MAX_ID $max_nr" |
| 30 | } | 28 | } |
| 31 | 29 | ||
| 32 | 30 | grep -E "^[[:digit:]]+[[:space:]]+(common|64)" $SYSCALL_TBL \ | |
| 33 | $gcc -m64 -E -dM -x c $input \ | 31 | |sort -k1 -n \ |
| 34 | |sed -ne 's/^#define __NR_//p' \ | ||
| 35 | |sort -t' ' -k2 -nu \ | ||
| 36 | |create_table | 32 | |create_table |
diff --git a/tools/perf/arch/s390/entry/syscalls/syscall.tbl b/tools/perf/arch/s390/entry/syscalls/syscall.tbl new file mode 100644 index 000000000000..b38d48464368 --- /dev/null +++ b/tools/perf/arch/s390/entry/syscalls/syscall.tbl | |||
| @@ -0,0 +1,390 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note | ||
| 2 | # | ||
| 3 | # System call table for s390 | ||
| 4 | # | ||
| 5 | # Format: | ||
| 6 | # | ||
| 7 | # <nr> <abi> <syscall> <entry-64bit> <compat-entry> | ||
| 8 | # | ||
| 9 | # where <abi> can be common, 64, or 32 | ||
| 10 | |||
| 11 | 1 common exit sys_exit sys_exit | ||
| 12 | 2 common fork sys_fork sys_fork | ||
| 13 | 3 common read sys_read compat_sys_s390_read | ||
| 14 | 4 common write sys_write compat_sys_s390_write | ||
| 15 | 5 common open sys_open compat_sys_open | ||
| 16 | 6 common close sys_close sys_close | ||
| 17 | 7 common restart_syscall sys_restart_syscall sys_restart_syscall | ||
| 18 | 8 common creat sys_creat compat_sys_creat | ||
| 19 | 9 common link sys_link compat_sys_link | ||
| 20 | 10 common unlink sys_unlink compat_sys_unlink | ||
| 21 | 11 common execve sys_execve compat_sys_execve | ||
| 22 | 12 common chdir sys_chdir compat_sys_chdir | ||
| 23 | 13 32 time - compat_sys_time | ||
| 24 | 14 common mknod sys_mknod compat_sys_mknod | ||
| 25 | 15 common chmod sys_chmod compat_sys_chmod | ||
| 26 | 16 32 lchown - compat_sys_s390_lchown16 | ||
| 27 | 19 common lseek sys_lseek compat_sys_lseek | ||
| 28 | 20 common getpid sys_getpid sys_getpid | ||
| 29 | 21 common mount sys_mount compat_sys_mount | ||
| 30 | 22 common umount sys_oldumount compat_sys_oldumount | ||
| 31 | 23 32 setuid - compat_sys_s390_setuid16 | ||
| 32 | 24 32 getuid - compat_sys_s390_getuid16 | ||
| 33 | 25 32 stime - compat_sys_stime | ||
| 34 | 26 common ptrace sys_ptrace compat_sys_ptrace | ||
| 35 | 27 common alarm sys_alarm sys_alarm | ||
| 36 | 29 common pause sys_pause sys_pause | ||
| 37 | 30 common utime sys_utime compat_sys_utime | ||
| 38 | 33 common access sys_access compat_sys_access | ||
| 39 | 34 common nice sys_nice sys_nice | ||
| 40 | 36 common sync sys_sync sys_sync | ||
| 41 | 37 common kill sys_kill sys_kill | ||
| 42 | 38 common rename sys_rename compat_sys_rename | ||
| 43 | 39 common mkdir sys_mkdir compat_sys_mkdir | ||
| 44 | 40 common rmdir sys_rmdir compat_sys_rmdir | ||
| 45 | 41 common dup sys_dup sys_dup | ||
| 46 | 42 common pipe sys_pipe compat_sys_pipe | ||
| 47 | 43 common times sys_times compat_sys_times | ||
| 48 | 45 common brk sys_brk compat_sys_brk | ||
| 49 | 46 32 setgid - compat_sys_s390_setgid16 | ||
| 50 | 47 32 getgid - compat_sys_s390_getgid16 | ||
| 51 | 48 common signal sys_signal compat_sys_signal | ||
| 52 | 49 32 geteuid - compat_sys_s390_geteuid16 | ||
| 53 | 50 32 getegid - compat_sys_s390_getegid16 | ||
| 54 | 51 common acct sys_acct compat_sys_acct | ||
| 55 | 52 common umount2 sys_umount compat_sys_umount | ||
| 56 | 54 common ioctl sys_ioctl compat_sys_ioctl | ||
| 57 | 55 common fcntl sys_fcntl compat_sys_fcntl | ||
| 58 | 57 common setpgid sys_setpgid sys_setpgid | ||
| 59 | 60 common umask sys_umask sys_umask | ||
| 60 | 61 common chroot sys_chroot compat_sys_chroot | ||
| 61 | 62 common ustat sys_ustat compat_sys_ustat | ||
| 62 | 63 common dup2 sys_dup2 sys_dup2 | ||
| 63 | 64 common getppid sys_getppid sys_getppid | ||
| 64 | 65 common getpgrp sys_getpgrp sys_getpgrp | ||
| 65 | 66 common setsid sys_setsid sys_setsid | ||
| 66 | 67 common sigaction sys_sigaction compat_sys_sigaction | ||
| 67 | 70 32 setreuid - compat_sys_s390_setreuid16 | ||
| 68 | 71 32 setregid - compat_sys_s390_setregid16 | ||
| 69 | 72 common sigsuspend sys_sigsuspend compat_sys_sigsuspend | ||
| 70 | 73 common sigpending sys_sigpending compat_sys_sigpending | ||
| 71 | 74 common sethostname sys_sethostname compat_sys_sethostname | ||
| 72 | 75 common setrlimit sys_setrlimit compat_sys_setrlimit | ||
| 73 | 76 32 getrlimit - compat_sys_old_getrlimit | ||
| 74 | 77 common getrusage sys_getrusage compat_sys_getrusage | ||
| 75 | 78 common gettimeofday sys_gettimeofday compat_sys_gettimeofday | ||
| 76 | 79 common settimeofday sys_settimeofday compat_sys_settimeofday | ||
| 77 | 80 32 getgroups - compat_sys_s390_getgroups16 | ||
| 78 | 81 32 setgroups - compat_sys_s390_setgroups16 | ||
| 79 | 83 common symlink sys_symlink compat_sys_symlink | ||
| 80 | 85 common readlink sys_readlink compat_sys_readlink | ||
| 81 | 86 common uselib sys_uselib compat_sys_uselib | ||
| 82 | 87 common swapon sys_swapon compat_sys_swapon | ||
| 83 | 88 common reboot sys_reboot compat_sys_reboot | ||
| 84 | 89 common readdir - compat_sys_old_readdir | ||
| 85 | 90 common mmap sys_old_mmap compat_sys_s390_old_mmap | ||
| 86 | 91 common munmap sys_munmap compat_sys_munmap | ||
| 87 | 92 common truncate sys_truncate compat_sys_truncate | ||
| 88 | 93 common ftruncate sys_ftruncate compat_sys_ftruncate | ||
| 89 | 94 common fchmod sys_fchmod sys_fchmod | ||
| 90 | 95 32 fchown - compat_sys_s390_fchown16 | ||
| 91 | 96 common getpriority sys_getpriority sys_getpriority | ||
| 92 | 97 common setpriority sys_setpriority sys_setpriority | ||
| 93 | 99 common statfs sys_statfs compat_sys_statfs | ||
| 94 | 100 common fstatfs sys_fstatfs compat_sys_fstatfs | ||
| 95 | 101 32 ioperm - - | ||
| 96 | 102 common socketcall sys_socketcall compat_sys_socketcall | ||
| 97 | 103 common syslog sys_syslog compat_sys_syslog | ||
| 98 | 104 common setitimer sys_setitimer compat_sys_setitimer | ||
| 99 | 105 common getitimer sys_getitimer compat_sys_getitimer | ||
| 100 | 106 common stat sys_newstat compat_sys_newstat | ||
| 101 | 107 common lstat sys_newlstat compat_sys_newlstat | ||
| 102 | 108 common fstat sys_newfstat compat_sys_newfstat | ||
| 103 | 110 common lookup_dcookie sys_lookup_dcookie compat_sys_lookup_dcookie | ||
| 104 | 111 common vhangup sys_vhangup sys_vhangup | ||
| 105 | 112 common idle - - | ||
| 106 | 114 common wait4 sys_wait4 compat_sys_wait4 | ||
| 107 | 115 common swapoff sys_swapoff compat_sys_swapoff | ||
| 108 | 116 common sysinfo sys_sysinfo compat_sys_sysinfo | ||
| 109 | 117 common ipc sys_s390_ipc compat_sys_s390_ipc | ||
| 110 | 118 common fsync sys_fsync sys_fsync | ||
| 111 | 119 common sigreturn sys_sigreturn compat_sys_sigreturn | ||
| 112 | 120 common clone sys_clone compat_sys_clone | ||
| 113 | 121 common setdomainname sys_setdomainname compat_sys_setdomainname | ||
| 114 | 122 common uname sys_newuname compat_sys_newuname | ||
| 115 | 124 common adjtimex sys_adjtimex compat_sys_adjtimex | ||
| 116 | 125 common mprotect sys_mprotect compat_sys_mprotect | ||
| 117 | 126 common sigprocmask sys_sigprocmask compat_sys_sigprocmask | ||
| 118 | 127 common create_module - - | ||
| 119 | 128 common init_module sys_init_module compat_sys_init_module | ||
| 120 | 129 common delete_module sys_delete_module compat_sys_delete_module | ||
| 121 | 130 common get_kernel_syms - - | ||
| 122 | 131 common quotactl sys_quotactl compat_sys_quotactl | ||
| 123 | 132 common getpgid sys_getpgid sys_getpgid | ||
| 124 | 133 common fchdir sys_fchdir sys_fchdir | ||
| 125 | 134 common bdflush sys_bdflush compat_sys_bdflush | ||
| 126 | 135 common sysfs sys_sysfs compat_sys_sysfs | ||
| 127 | 136 common personality sys_s390_personality sys_s390_personality | ||
| 128 | 137 common afs_syscall - - | ||
| 129 | 138 32 setfsuid - compat_sys_s390_setfsuid16 | ||
| 130 | 139 32 setfsgid - compat_sys_s390_setfsgid16 | ||
| 131 | 140 32 _llseek - compat_sys_llseek | ||
| 132 | 141 common getdents sys_getdents compat_sys_getdents | ||
| 133 | 142 32 _newselect - compat_sys_select | ||
| 134 | 142 64 select sys_select - | ||
| 135 | 143 common flock sys_flock sys_flock | ||
| 136 | 144 common msync sys_msync compat_sys_msync | ||
| 137 | 145 common readv sys_readv compat_sys_readv | ||
| 138 | 146 common writev sys_writev compat_sys_writev | ||
| 139 | 147 common getsid sys_getsid sys_getsid | ||
| 140 | 148 common fdatasync sys_fdatasync sys_fdatasync | ||
| 141 | 149 common _sysctl sys_sysctl compat_sys_sysctl | ||
| 142 | 150 common mlock sys_mlock compat_sys_mlock | ||
| 143 | 151 common munlock sys_munlock compat_sys_munlock | ||
| 144 | 152 common mlockall sys_mlockall sys_mlockall | ||
| 145 | 153 common munlockall sys_munlockall sys_munlockall | ||
| 146 | 154 common sched_setparam sys_sched_setparam compat_sys_sched_setparam | ||
| 147 | 155 common sched_getparam sys_sched_getparam compat_sys_sched_getparam | ||
| 148 | 156 common sched_setscheduler sys_sched_setscheduler compat_sys_sched_setscheduler | ||
| 149 | 157 common sched_getscheduler sys_sched_getscheduler sys_sched_getscheduler | ||
| 150 | 158 common sched_yield sys_sched_yield sys_sched_yield | ||
| 151 | 159 common sched_get_priority_max sys_sched_get_priority_max sys_sched_get_priority_max | ||
| 152 | 160 common sched_get_priority_min sys_sched_get_priority_min sys_sched_get_priority_min | ||
| 153 | 161 common sched_rr_get_interval sys_sched_rr_get_interval compat_sys_sched_rr_get_interval | ||
| 154 | 162 common nanosleep sys_nanosleep compat_sys_nanosleep | ||
| 155 | 163 common mremap sys_mremap compat_sys_mremap | ||
| 156 | 164 32 setresuid - compat_sys_s390_setresuid16 | ||
| 157 | 165 32 getresuid - compat_sys_s390_getresuid16 | ||
| 158 | 167 common query_module - - | ||
| 159 | 168 common poll sys_poll compat_sys_poll | ||
| 160 | 169 common nfsservctl - - | ||
| 161 | 170 32 setresgid - compat_sys_s390_setresgid16 | ||
| 162 | 171 32 getresgid - compat_sys_s390_getresgid16 | ||
| 163 | 172 common prctl sys_prctl compat_sys_prctl | ||
| 164 | 173 common rt_sigreturn sys_rt_sigreturn compat_sys_rt_sigreturn | ||
| 165 | 174 common rt_sigaction sys_rt_sigaction compat_sys_rt_sigaction | ||
| 166 | 175 common rt_sigprocmask sys_rt_sigprocmask compat_sys_rt_sigprocmask | ||
| 167 | 176 common rt_sigpending sys_rt_sigpending compat_sys_rt_sigpending | ||
| 168 | 177 common rt_sigtimedwait sys_rt_sigtimedwait compat_sys_rt_sigtimedwait | ||
| 169 | 178 common rt_sigqueueinfo sys_rt_sigqueueinfo compat_sys_rt_sigqueueinfo | ||
| 170 | 179 common rt_sigsuspend sys_rt_sigsuspend compat_sys_rt_sigsuspend | ||
| 171 | 180 common pread64 sys_pread64 compat_sys_s390_pread64 | ||
| 172 | 181 common pwrite64 sys_pwrite64 compat_sys_s390_pwrite64 | ||
| 173 | 182 32 chown - compat_sys_s390_chown16 | ||
| 174 | 183 common getcwd sys_getcwd compat_sys_getcwd | ||
| 175 | 184 common capget sys_capget compat_sys_capget | ||
| 176 | 185 common capset sys_capset compat_sys_capset | ||
| 177 | 186 common sigaltstack sys_sigaltstack compat_sys_sigaltstack | ||
| 178 | 187 common sendfile sys_sendfile64 compat_sys_sendfile | ||
| 179 | 188 common getpmsg - - | ||
| 180 | 189 common putpmsg - - | ||
| 181 | 190 common vfork sys_vfork sys_vfork | ||
| 182 | 191 32 ugetrlimit - compat_sys_getrlimit | ||
| 183 | 191 64 getrlimit sys_getrlimit - | ||
| 184 | 192 32 mmap2 - compat_sys_s390_mmap2 | ||
| 185 | 193 32 truncate64 - compat_sys_s390_truncate64 | ||
| 186 | 194 32 ftruncate64 - compat_sys_s390_ftruncate64 | ||
| 187 | 195 32 stat64 - compat_sys_s390_stat64 | ||
| 188 | 196 32 lstat64 - compat_sys_s390_lstat64 | ||
| 189 | 197 32 fstat64 - compat_sys_s390_fstat64 | ||
| 190 | 198 32 lchown32 - compat_sys_lchown | ||
| 191 | 198 64 lchown sys_lchown - | ||
| 192 | 199 32 getuid32 - sys_getuid | ||
| 193 | 199 64 getuid sys_getuid - | ||
| 194 | 200 32 getgid32 - sys_getgid | ||
| 195 | 200 64 getgid sys_getgid - | ||
| 196 | 201 32 geteuid32 - sys_geteuid | ||
| 197 | 201 64 geteuid sys_geteuid - | ||
| 198 | 202 32 getegid32 - sys_getegid | ||
| 199 | 202 64 getegid sys_getegid - | ||
| 200 | 203 32 setreuid32 - sys_setreuid | ||
| 201 | 203 64 setreuid sys_setreuid - | ||
| 202 | 204 32 setregid32 - sys_setregid | ||
| 203 | 204 64 setregid sys_setregid - | ||
| 204 | 205 32 getgroups32 - compat_sys_getgroups | ||
| 205 | 205 64 getgroups sys_getgroups - | ||
| 206 | 206 32 setgroups32 - compat_sys_setgroups | ||
| 207 | 206 64 setgroups sys_setgroups - | ||
| 208 | 207 32 fchown32 - sys_fchown | ||
| 209 | 207 64 fchown sys_fchown - | ||
| 210 | 208 32 setresuid32 - sys_setresuid | ||
| 211 | 208 64 setresuid sys_setresuid - | ||
| 212 | 209 32 getresuid32 - compat_sys_getresuid | ||
| 213 | 209 64 getresuid sys_getresuid - | ||
| 214 | 210 32 setresgid32 - sys_setresgid | ||
| 215 | 210 64 setresgid sys_setresgid - | ||
| 216 | 211 32 getresgid32 - compat_sys_getresgid | ||
| 217 | 211 64 getresgid sys_getresgid - | ||
| 218 | 212 32 chown32 - compat_sys_chown | ||
| 219 | 212 64 chown sys_chown - | ||
| 220 | 213 32 setuid32 - sys_setuid | ||
| 221 | 213 64 setuid sys_setuid - | ||
| 222 | 214 32 setgid32 - sys_setgid | ||
| 223 | 214 64 setgid sys_setgid - | ||
| 224 | 215 32 setfsuid32 - sys_setfsuid | ||
| 225 | 215 64 setfsuid sys_setfsuid - | ||
| 226 | 216 32 setfsgid32 - sys_setfsgid | ||
| 227 | 216 64 setfsgid sys_setfsgid - | ||
| 228 | 217 common pivot_root sys_pivot_root compat_sys_pivot_root | ||
| 229 | 218 common mincore sys_mincore compat_sys_mincore | ||
| 230 | 219 common madvise sys_madvise compat_sys_madvise | ||
| 231 | 220 common getdents64 sys_getdents64 compat_sys_getdents64 | ||
| 232 | 221 32 fcntl64 - compat_sys_fcntl64 | ||
| 233 | 222 common readahead sys_readahead compat_sys_s390_readahead | ||
| 234 | 223 32 sendfile64 - compat_sys_sendfile64 | ||
| 235 | 224 common setxattr sys_setxattr compat_sys_setxattr | ||
| 236 | 225 common lsetxattr sys_lsetxattr compat_sys_lsetxattr | ||
| 237 | 226 common fsetxattr sys_fsetxattr compat_sys_fsetxattr | ||
| 238 | 227 common getxattr sys_getxattr compat_sys_getxattr | ||
| 239 | 228 common lgetxattr sys_lgetxattr compat_sys_lgetxattr | ||
| 240 | 229 common fgetxattr sys_fgetxattr compat_sys_fgetxattr | ||
| 241 | 230 common listxattr sys_listxattr compat_sys_listxattr | ||
| 242 | 231 common llistxattr sys_llistxattr compat_sys_llistxattr | ||
| 243 | 232 common flistxattr sys_flistxattr compat_sys_flistxattr | ||
| 244 | 233 common removexattr sys_removexattr compat_sys_removexattr | ||
| 245 | 234 common lremovexattr sys_lremovexattr compat_sys_lremovexattr | ||
| 246 | 235 common fremovexattr sys_fremovexattr compat_sys_fremovexattr | ||
| 247 | 236 common gettid sys_gettid sys_gettid | ||
| 248 | 237 common tkill sys_tkill sys_tkill | ||
| 249 | 238 common futex sys_futex compat_sys_futex | ||
| 250 | 239 common sched_setaffinity sys_sched_setaffinity compat_sys_sched_setaffinity | ||
| 251 | 240 common sched_getaffinity sys_sched_getaffinity compat_sys_sched_getaffinity | ||
| 252 | 241 common tgkill sys_tgkill sys_tgkill | ||
| 253 | 243 common io_setup sys_io_setup compat_sys_io_setup | ||
| 254 | 244 common io_destroy sys_io_destroy compat_sys_io_destroy | ||
| 255 | 245 common io_getevents sys_io_getevents compat_sys_io_getevents | ||
| 256 | 246 common io_submit sys_io_submit compat_sys_io_submit | ||
| 257 | 247 common io_cancel sys_io_cancel compat_sys_io_cancel | ||
| 258 | 248 common exit_group sys_exit_group sys_exit_group | ||
| 259 | 249 common epoll_create sys_epoll_create sys_epoll_create | ||
| 260 | 250 common epoll_ctl sys_epoll_ctl compat_sys_epoll_ctl | ||
| 261 | 251 common epoll_wait sys_epoll_wait compat_sys_epoll_wait | ||
| 262 | 252 common set_tid_address sys_set_tid_address compat_sys_set_tid_address | ||
| 263 | 253 common fadvise64 sys_fadvise64_64 compat_sys_s390_fadvise64 | ||
| 264 | 254 common timer_create sys_timer_create compat_sys_timer_create | ||
| 265 | 255 common timer_settime sys_timer_settime compat_sys_timer_settime | ||
| 266 | 256 common timer_gettime sys_timer_gettime compat_sys_timer_gettime | ||
| 267 | 257 common timer_getoverrun sys_timer_getoverrun sys_timer_getoverrun | ||
| 268 | 258 common timer_delete sys_timer_delete sys_timer_delete | ||
| 269 | 259 common clock_settime sys_clock_settime compat_sys_clock_settime | ||
| 270 | 260 common clock_gettime sys_clock_gettime compat_sys_clock_gettime | ||
| 271 | 261 common clock_getres sys_clock_getres compat_sys_clock_getres | ||
| 272 | 262 common clock_nanosleep sys_clock_nanosleep compat_sys_clock_nanosleep | ||
| 273 | 264 32 fadvise64_64 - compat_sys_s390_fadvise64_64 | ||
| 274 | 265 common statfs64 sys_statfs64 compat_sys_statfs64 | ||
| 275 | 266 common fstatfs64 sys_fstatfs64 compat_sys_fstatfs64 | ||
| 276 | 267 common remap_file_pages sys_remap_file_pages compat_sys_remap_file_pages | ||
| 277 | 268 common mbind sys_mbind compat_sys_mbind | ||
| 278 | 269 common get_mempolicy sys_get_mempolicy compat_sys_get_mempolicy | ||
| 279 | 270 common set_mempolicy sys_set_mempolicy compat_sys_set_mempolicy | ||
| 280 | 271 common mq_open sys_mq_open compat_sys_mq_open | ||
| 281 | 272 common mq_unlink sys_mq_unlink compat_sys_mq_unlink | ||
| 282 | 273 common mq_timedsend sys_mq_timedsend compat_sys_mq_timedsend | ||
| 283 | 274 common mq_timedreceive sys_mq_timedreceive compat_sys_mq_timedreceive | ||
| 284 | 275 common mq_notify sys_mq_notify compat_sys_mq_notify | ||
| 285 | 276 common mq_getsetattr sys_mq_getsetattr compat_sys_mq_getsetattr | ||
| 286 | 277 common kexec_load sys_kexec_load compat_sys_kexec_load | ||
| 287 | 278 common add_key sys_add_key compat_sys_add_key | ||
| 288 | 279 common request_key sys_request_key compat_sys_request_key | ||
| 289 | 280 common keyctl sys_keyctl compat_sys_keyctl | ||
| 290 | 281 common waitid sys_waitid compat_sys_waitid | ||
| 291 | 282 common ioprio_set sys_ioprio_set sys_ioprio_set | ||
| 292 | 283 common ioprio_get sys_ioprio_get sys_ioprio_get | ||
| 293 | 284 common inotify_init sys_inotify_init sys_inotify_init | ||
| 294 | 285 common inotify_add_watch sys_inotify_add_watch compat_sys_inotify_add_watch | ||
| 295 | 286 common inotify_rm_watch sys_inotify_rm_watch sys_inotify_rm_watch | ||
| 296 | 287 common migrate_pages sys_migrate_pages compat_sys_migrate_pages | ||
| 297 | 288 common openat sys_openat compat_sys_openat | ||
| 298 | 289 common mkdirat sys_mkdirat compat_sys_mkdirat | ||
| 299 | 290 common mknodat sys_mknodat compat_sys_mknodat | ||
| 300 | 291 common fchownat sys_fchownat compat_sys_fchownat | ||
| 301 | 292 common futimesat sys_futimesat compat_sys_futimesat | ||
| 302 | 293 32 fstatat64 - compat_sys_s390_fstatat64 | ||
| 303 | 293 64 newfstatat sys_newfstatat - | ||
| 304 | 294 common unlinkat sys_unlinkat compat_sys_unlinkat | ||
| 305 | 295 common renameat sys_renameat compat_sys_renameat | ||
| 306 | 296 common linkat sys_linkat compat_sys_linkat | ||
| 307 | 297 common symlinkat sys_symlinkat compat_sys_symlinkat | ||
| 308 | 298 common readlinkat sys_readlinkat compat_sys_readlinkat | ||
| 309 | 299 common fchmodat sys_fchmodat compat_sys_fchmodat | ||
| 310 | 300 common faccessat sys_faccessat compat_sys_faccessat | ||
| 311 | 301 common pselect6 sys_pselect6 compat_sys_pselect6 | ||
| 312 | 302 common ppoll sys_ppoll compat_sys_ppoll | ||
| 313 | 303 common unshare sys_unshare compat_sys_unshare | ||
| 314 | 304 common set_robust_list sys_set_robust_list compat_sys_set_robust_list | ||
| 315 | 305 common get_robust_list sys_get_robust_list compat_sys_get_robust_list | ||
| 316 | 306 common splice sys_splice compat_sys_splice | ||
| 317 | 307 common sync_file_range sys_sync_file_range compat_sys_s390_sync_file_range | ||
| 318 | 308 common tee sys_tee compat_sys_tee | ||
| 319 | 309 common vmsplice sys_vmsplice compat_sys_vmsplice | ||
| 320 | 310 common move_pages sys_move_pages compat_sys_move_pages | ||
| 321 | 311 common getcpu sys_getcpu compat_sys_getcpu | ||
| 322 | 312 common epoll_pwait sys_epoll_pwait compat_sys_epoll_pwait | ||
| 323 | 313 common utimes sys_utimes compat_sys_utimes | ||
| 324 | 314 common fallocate sys_fallocate compat_sys_s390_fallocate | ||
| 325 | 315 common utimensat sys_utimensat compat_sys_utimensat | ||
| 326 | 316 common signalfd sys_signalfd compat_sys_signalfd | ||
| 327 | 317 common timerfd - - | ||
| 328 | 318 common eventfd sys_eventfd sys_eventfd | ||
| 329 | 319 common timerfd_create sys_timerfd_create sys_timerfd_create | ||
| 330 | 320 common timerfd_settime sys_timerfd_settime compat_sys_timerfd_settime | ||
| 331 | 321 common timerfd_gettime sys_timerfd_gettime compat_sys_timerfd_gettime | ||
| 332 | 322 common signalfd4 sys_signalfd4 compat_sys_signalfd4 | ||
| 333 | 323 common eventfd2 sys_eventfd2 sys_eventfd2 | ||
| 334 | 324 common inotify_init1 sys_inotify_init1 sys_inotify_init1 | ||
| 335 | 325 common pipe2 sys_pipe2 compat_sys_pipe2 | ||
| 336 | 326 common dup3 sys_dup3 sys_dup3 | ||
| 337 | 327 common epoll_create1 sys_epoll_create1 sys_epoll_create1 | ||
| 338 | 328 common preadv sys_preadv compat_sys_preadv | ||
| 339 | 329 common pwritev sys_pwritev compat_sys_pwritev | ||
| 340 | 330 common rt_tgsigqueueinfo sys_rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo | ||
| 341 | 331 common perf_event_open sys_perf_event_open compat_sys_perf_event_open | ||
| 342 | 332 common fanotify_init sys_fanotify_init sys_fanotify_init | ||
| 343 | 333 common fanotify_mark sys_fanotify_mark compat_sys_fanotify_mark | ||
| 344 | 334 common prlimit64 sys_prlimit64 compat_sys_prlimit64 | ||
| 345 | 335 common name_to_handle_at sys_name_to_handle_at compat_sys_name_to_handle_at | ||
| 346 | 336 common open_by_handle_at sys_open_by_handle_at compat_sys_open_by_handle_at | ||
| 347 | 337 common clock_adjtime sys_clock_adjtime compat_sys_clock_adjtime | ||
| 348 | 338 common syncfs sys_syncfs sys_syncfs | ||
| 349 | 339 common setns sys_setns sys_setns | ||
| 350 | 340 common process_vm_readv sys_process_vm_readv compat_sys_process_vm_readv | ||
| 351 | 341 common process_vm_writev sys_process_vm_writev compat_sys_process_vm_writev | ||
| 352 | 342 common s390_runtime_instr sys_s390_runtime_instr sys_s390_runtime_instr | ||
| 353 | 343 common kcmp sys_kcmp compat_sys_kcmp | ||
| 354 | 344 common finit_module sys_finit_module compat_sys_finit_module | ||
| 355 | 345 common sched_setattr sys_sched_setattr compat_sys_sched_setattr | ||
| 356 | 346 common sched_getattr sys_sched_getattr compat_sys_sched_getattr | ||
| 357 | 347 common renameat2 sys_renameat2 compat_sys_renameat2 | ||
| 358 | 348 common seccomp sys_seccomp compat_sys_seccomp | ||
| 359 | 349 common getrandom sys_getrandom compat_sys_getrandom | ||
| 360 | 350 common memfd_create sys_memfd_create compat_sys_memfd_create | ||
| 361 | 351 common bpf sys_bpf compat_sys_bpf | ||
| 362 | 352 common s390_pci_mmio_write sys_s390_pci_mmio_write compat_sys_s390_pci_mmio_write | ||
| 363 | 353 common s390_pci_mmio_read sys_s390_pci_mmio_read compat_sys_s390_pci_mmio_read | ||
| 364 | 354 common execveat sys_execveat compat_sys_execveat | ||
| 365 | 355 common userfaultfd sys_userfaultfd sys_userfaultfd | ||
| 366 | 356 common membarrier sys_membarrier sys_membarrier | ||
| 367 | 357 common recvmmsg sys_recvmmsg compat_sys_recvmmsg | ||
| 368 | 358 common sendmmsg sys_sendmmsg compat_sys_sendmmsg | ||
| 369 | 359 common socket sys_socket sys_socket | ||
| 370 | 360 common socketpair sys_socketpair compat_sys_socketpair | ||
| 371 | 361 common bind sys_bind compat_sys_bind | ||
| 372 | 362 common connect sys_connect compat_sys_connect | ||
| 373 | 363 common listen sys_listen sys_listen | ||
| 374 | 364 common accept4 sys_accept4 compat_sys_accept4 | ||
| 375 | 365 common getsockopt sys_getsockopt compat_sys_getsockopt | ||
| 376 | 366 common setsockopt sys_setsockopt compat_sys_setsockopt | ||
| 377 | 367 common getsockname sys_getsockname compat_sys_getsockname | ||
| 378 | 368 common getpeername sys_getpeername compat_sys_getpeername | ||
| 379 | 369 common sendto sys_sendto compat_sys_sendto | ||
| 380 | 370 common sendmsg sys_sendmsg compat_sys_sendmsg | ||
| 381 | 371 common recvfrom sys_recvfrom compat_sys_recvfrom | ||
| 382 | 372 common recvmsg sys_recvmsg compat_sys_recvmsg | ||
| 383 | 373 common shutdown sys_shutdown sys_shutdown | ||
| 384 | 374 common mlock2 sys_mlock2 compat_sys_mlock2 | ||
| 385 | 375 common copy_file_range sys_copy_file_range compat_sys_copy_file_range | ||
| 386 | 376 common preadv2 sys_preadv2 compat_sys_preadv2 | ||
| 387 | 377 common pwritev2 sys_pwritev2 compat_sys_pwritev2 | ||
| 388 | 378 common s390_guarded_storage sys_s390_guarded_storage compat_sys_s390_guarded_storage | ||
| 389 | 379 common statx sys_statx compat_sys_statx | ||
| 390 | 380 common s390_sthyi sys_s390_sthyi compat_sys_s390_sthyi | ||
diff --git a/tools/perf/builtin-c2c.c b/tools/perf/builtin-c2c.c index c0815a37fdb5..539c3d460158 100644 --- a/tools/perf/builtin-c2c.c +++ b/tools/perf/builtin-c2c.c | |||
| @@ -2245,7 +2245,7 @@ static int perf_c2c__browse_cacheline(struct hist_entry *he) | |||
| 2245 | c2c_browser__update_nr_entries(browser); | 2245 | c2c_browser__update_nr_entries(browser); |
| 2246 | 2246 | ||
| 2247 | while (1) { | 2247 | while (1) { |
| 2248 | key = hist_browser__run(browser, "? - help"); | 2248 | key = hist_browser__run(browser, "? - help", true); |
| 2249 | 2249 | ||
| 2250 | switch (key) { | 2250 | switch (key) { |
| 2251 | case 's': | 2251 | case 's': |
| @@ -2314,7 +2314,7 @@ static int perf_c2c__hists_browse(struct hists *hists) | |||
| 2314 | c2c_browser__update_nr_entries(browser); | 2314 | c2c_browser__update_nr_entries(browser); |
| 2315 | 2315 | ||
| 2316 | while (1) { | 2316 | while (1) { |
| 2317 | key = hist_browser__run(browser, "? - help"); | 2317 | key = hist_browser__run(browser, "? - help", true); |
| 2318 | 2318 | ||
| 2319 | switch (key) { | 2319 | switch (key) { |
| 2320 | case 'q': | 2320 | case 'q': |
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 42a52dcc41cd..4ad5dc649716 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c | |||
| @@ -530,7 +530,8 @@ static int report__browse_hists(struct report *rep) | |||
| 530 | case 1: | 530 | case 1: |
| 531 | ret = perf_evlist__tui_browse_hists(evlist, help, NULL, | 531 | ret = perf_evlist__tui_browse_hists(evlist, help, NULL, |
| 532 | rep->min_percent, | 532 | rep->min_percent, |
| 533 | &session->header.env); | 533 | &session->header.env, |
| 534 | true); | ||
| 534 | /* | 535 | /* |
| 535 | * Usually "ret" is the last pressed key, and we only | 536 | * Usually "ret" is the last pressed key, and we only |
| 536 | * care if the key notifies us to switch data file. | 537 | * care if the key notifies us to switch data file. |
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index c6ccda52117d..b7c823ba8374 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
| @@ -283,8 +283,9 @@ static void perf_top__print_sym_table(struct perf_top *top) | |||
| 283 | 283 | ||
| 284 | printf("%-*.*s\n", win_width, win_width, graph_dotted_line); | 284 | printf("%-*.*s\n", win_width, win_width, graph_dotted_line); |
| 285 | 285 | ||
| 286 | if (hists->stats.nr_lost_warned != | 286 | if (!top->record_opts.overwrite && |
| 287 | hists->stats.nr_events[PERF_RECORD_LOST]) { | 287 | (hists->stats.nr_lost_warned != |
| 288 | hists->stats.nr_events[PERF_RECORD_LOST])) { | ||
| 288 | hists->stats.nr_lost_warned = | 289 | hists->stats.nr_lost_warned = |
| 289 | hists->stats.nr_events[PERF_RECORD_LOST]; | 290 | hists->stats.nr_events[PERF_RECORD_LOST]; |
| 290 | color_fprintf(stdout, PERF_COLOR_RED, | 291 | color_fprintf(stdout, PERF_COLOR_RED, |
| @@ -611,7 +612,8 @@ static void *display_thread_tui(void *arg) | |||
| 611 | 612 | ||
| 612 | perf_evlist__tui_browse_hists(top->evlist, help, &hbt, | 613 | perf_evlist__tui_browse_hists(top->evlist, help, &hbt, |
| 613 | top->min_percent, | 614 | top->min_percent, |
| 614 | &top->session->header.env); | 615 | &top->session->header.env, |
| 616 | !top->record_opts.overwrite); | ||
| 615 | 617 | ||
| 616 | done = 1; | 618 | done = 1; |
| 617 | return NULL; | 619 | return NULL; |
| @@ -807,15 +809,23 @@ static void perf_event__process_sample(struct perf_tool *tool, | |||
| 807 | 809 | ||
| 808 | static void perf_top__mmap_read_idx(struct perf_top *top, int idx) | 810 | static void perf_top__mmap_read_idx(struct perf_top *top, int idx) |
| 809 | { | 811 | { |
| 812 | struct record_opts *opts = &top->record_opts; | ||
| 813 | struct perf_evlist *evlist = top->evlist; | ||
| 810 | struct perf_sample sample; | 814 | struct perf_sample sample; |
| 811 | struct perf_evsel *evsel; | 815 | struct perf_evsel *evsel; |
| 816 | struct perf_mmap *md; | ||
| 812 | struct perf_session *session = top->session; | 817 | struct perf_session *session = top->session; |
| 813 | union perf_event *event; | 818 | union perf_event *event; |
| 814 | struct machine *machine; | 819 | struct machine *machine; |
| 820 | u64 end, start; | ||
| 815 | int ret; | 821 | int ret; |
| 816 | 822 | ||
| 817 | while ((event = perf_evlist__mmap_read(top->evlist, idx)) != NULL) { | 823 | md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx]; |
| 818 | ret = perf_evlist__parse_sample(top->evlist, event, &sample); | 824 | if (perf_mmap__read_init(md, opts->overwrite, &start, &end) < 0) |
| 825 | return; | ||
| 826 | |||
| 827 | while ((event = perf_mmap__read_event(md, opts->overwrite, &start, end)) != NULL) { | ||
| 828 | ret = perf_evlist__parse_sample(evlist, event, &sample); | ||
| 819 | if (ret) { | 829 | if (ret) { |
| 820 | pr_err("Can't parse sample, err = %d\n", ret); | 830 | pr_err("Can't parse sample, err = %d\n", ret); |
| 821 | goto next_event; | 831 | goto next_event; |
| @@ -869,16 +879,120 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx) | |||
| 869 | } else | 879 | } else |
| 870 | ++session->evlist->stats.nr_unknown_events; | 880 | ++session->evlist->stats.nr_unknown_events; |
| 871 | next_event: | 881 | next_event: |
| 872 | perf_evlist__mmap_consume(top->evlist, idx); | 882 | perf_mmap__consume(md, opts->overwrite); |
| 873 | } | 883 | } |
| 884 | |||
| 885 | perf_mmap__read_done(md); | ||
| 874 | } | 886 | } |
| 875 | 887 | ||
| 876 | static void perf_top__mmap_read(struct perf_top *top) | 888 | static void perf_top__mmap_read(struct perf_top *top) |
| 877 | { | 889 | { |
| 890 | bool overwrite = top->record_opts.overwrite; | ||
| 891 | struct perf_evlist *evlist = top->evlist; | ||
| 892 | unsigned long long start, end; | ||
| 878 | int i; | 893 | int i; |
| 879 | 894 | ||
| 895 | start = rdclock(); | ||
| 896 | if (overwrite) | ||
| 897 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_DATA_PENDING); | ||
| 898 | |||
| 880 | for (i = 0; i < top->evlist->nr_mmaps; i++) | 899 | for (i = 0; i < top->evlist->nr_mmaps; i++) |
| 881 | perf_top__mmap_read_idx(top, i); | 900 | perf_top__mmap_read_idx(top, i); |
| 901 | |||
| 902 | if (overwrite) { | ||
| 903 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_EMPTY); | ||
| 904 | perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_RUNNING); | ||
| 905 | } | ||
| 906 | end = rdclock(); | ||
| 907 | |||
| 908 | if ((end - start) > (unsigned long long)top->delay_secs * NSEC_PER_SEC) | ||
| 909 | ui__warning("Too slow to read ring buffer.\n" | ||
| 910 | "Please try increasing the period (-c) or\n" | ||
| 911 | "decreasing the freq (-F) or\n" | ||
| 912 | "limiting the number of CPUs (-C)\n"); | ||
| 913 | } | ||
| 914 | |||
| 915 | /* | ||
| 916 | * Check per-event overwrite term. | ||
| 917 | * perf top should support consistent term for all events. | ||
| 918 | * - All events don't have per-event term | ||
| 919 | * E.g. "cpu/cpu-cycles/,cpu/instructions/" | ||
| 920 | * Nothing change, return 0. | ||
| 921 | * - All events have same per-event term | ||
| 922 | * E.g. "cpu/cpu-cycles,no-overwrite/,cpu/instructions,no-overwrite/ | ||
| 923 | * Using the per-event setting to replace the opts->overwrite if | ||
| 924 | * they are different, then return 0. | ||
| 925 | * - Events have different per-event term | ||
| 926 | * E.g. "cpu/cpu-cycles,overwrite/,cpu/instructions,no-overwrite/" | ||
| 927 | * Return -1 | ||
| 928 | * - Some of the event set per-event term, but some not. | ||
| 929 | * E.g. "cpu/cpu-cycles/,cpu/instructions,no-overwrite/" | ||
| 930 | * Return -1 | ||
| 931 | */ | ||
| 932 | static int perf_top__overwrite_check(struct perf_top *top) | ||
| 933 | { | ||
| 934 | struct record_opts *opts = &top->record_opts; | ||
| 935 | struct perf_evlist *evlist = top->evlist; | ||
| 936 | struct perf_evsel_config_term *term; | ||
| 937 | struct list_head *config_terms; | ||
| 938 | struct perf_evsel *evsel; | ||
| 939 | int set, overwrite = -1; | ||
| 940 | |||
| 941 | evlist__for_each_entry(evlist, evsel) { | ||
| 942 | set = -1; | ||
| 943 | config_terms = &evsel->config_terms; | ||
| 944 | list_for_each_entry(term, config_terms, list) { | ||
| 945 | if (term->type == PERF_EVSEL__CONFIG_TERM_OVERWRITE) | ||
| 946 | set = term->val.overwrite ? 1 : 0; | ||
| 947 | } | ||
| 948 | |||
| 949 | /* no term for current and previous event (likely) */ | ||
| 950 | if ((overwrite < 0) && (set < 0)) | ||
| 951 | continue; | ||
| 952 | |||
| 953 | /* has term for both current and previous event, compare */ | ||
| 954 | if ((overwrite >= 0) && (set >= 0) && (overwrite != set)) | ||
| 955 | return -1; | ||
| 956 | |||
| 957 | /* no term for current event but has term for previous one */ | ||
| 958 | if ((overwrite >= 0) && (set < 0)) | ||
| 959 | return -1; | ||
| 960 | |||
| 961 | /* has term for current event */ | ||
| 962 | if ((overwrite < 0) && (set >= 0)) { | ||
| 963 | /* if it's first event, set overwrite */ | ||
| 964 | if (evsel == perf_evlist__first(evlist)) | ||
| 965 | overwrite = set; | ||
| 966 | else | ||
| 967 | return -1; | ||
| 968 | } | ||
| 969 | } | ||
| 970 | |||
| 971 | if ((overwrite >= 0) && (opts->overwrite != overwrite)) | ||
| 972 | opts->overwrite = overwrite; | ||
| 973 | |||
| 974 | return 0; | ||
| 975 | } | ||
| 976 | |||
| 977 | static int perf_top_overwrite_fallback(struct perf_top *top, | ||
| 978 | struct perf_evsel *evsel) | ||
| 979 | { | ||
| 980 | struct record_opts *opts = &top->record_opts; | ||
| 981 | struct perf_evlist *evlist = top->evlist; | ||
| 982 | struct perf_evsel *counter; | ||
| 983 | |||
| 984 | if (!opts->overwrite) | ||
| 985 | return 0; | ||
| 986 | |||
| 987 | /* only fall back when first event fails */ | ||
| 988 | if (evsel != perf_evlist__first(evlist)) | ||
| 989 | return 0; | ||
| 990 | |||
| 991 | evlist__for_each_entry(evlist, counter) | ||
| 992 | counter->attr.write_backward = false; | ||
| 993 | opts->overwrite = false; | ||
| 994 | ui__warning("fall back to non-overwrite mode\n"); | ||
| 995 | return 1; | ||
| 882 | } | 996 | } |
| 883 | 997 | ||
| 884 | static int perf_top__start_counters(struct perf_top *top) | 998 | static int perf_top__start_counters(struct perf_top *top) |
| @@ -888,12 +1002,33 @@ static int perf_top__start_counters(struct perf_top *top) | |||
| 888 | struct perf_evlist *evlist = top->evlist; | 1002 | struct perf_evlist *evlist = top->evlist; |
| 889 | struct record_opts *opts = &top->record_opts; | 1003 | struct record_opts *opts = &top->record_opts; |
| 890 | 1004 | ||
| 1005 | if (perf_top__overwrite_check(top)) { | ||
| 1006 | ui__error("perf top only support consistent per-event " | ||
| 1007 | "overwrite setting for all events\n"); | ||
| 1008 | goto out_err; | ||
| 1009 | } | ||
| 1010 | |||
| 891 | perf_evlist__config(evlist, opts, &callchain_param); | 1011 | perf_evlist__config(evlist, opts, &callchain_param); |
| 892 | 1012 | ||
| 893 | evlist__for_each_entry(evlist, counter) { | 1013 | evlist__for_each_entry(evlist, counter) { |
| 894 | try_again: | 1014 | try_again: |
| 895 | if (perf_evsel__open(counter, top->evlist->cpus, | 1015 | if (perf_evsel__open(counter, top->evlist->cpus, |
| 896 | top->evlist->threads) < 0) { | 1016 | top->evlist->threads) < 0) { |
| 1017 | |||
| 1018 | /* | ||
| 1019 | * Specially handle overwrite fall back. | ||
| 1020 | * Because perf top is the only tool which has | ||
| 1021 | * overwrite mode by default, support | ||
| 1022 | * both overwrite and non-overwrite mode, and | ||
| 1023 | * require consistent mode for all events. | ||
| 1024 | * | ||
| 1025 | * May move it to generic code with more tools | ||
| 1026 | * have similar attribute. | ||
| 1027 | */ | ||
| 1028 | if (perf_missing_features.write_backward && | ||
| 1029 | perf_top_overwrite_fallback(top, counter)) | ||
| 1030 | goto try_again; | ||
| 1031 | |||
| 897 | if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) { | 1032 | if (perf_evsel__fallback(counter, errno, msg, sizeof(msg))) { |
| 898 | if (verbose > 0) | 1033 | if (verbose > 0) |
| 899 | ui__warning("%s\n", msg); | 1034 | ui__warning("%s\n", msg); |
| @@ -1033,7 +1168,7 @@ static int __cmd_top(struct perf_top *top) | |||
| 1033 | 1168 | ||
| 1034 | perf_top__mmap_read(top); | 1169 | perf_top__mmap_read(top); |
| 1035 | 1170 | ||
| 1036 | if (hits == top->samples) | 1171 | if (opts->overwrite || (hits == top->samples)) |
| 1037 | ret = perf_evlist__poll(top->evlist, 100); | 1172 | ret = perf_evlist__poll(top->evlist, 100); |
| 1038 | 1173 | ||
| 1039 | if (resize) { | 1174 | if (resize) { |
| @@ -1127,6 +1262,7 @@ int cmd_top(int argc, const char **argv) | |||
| 1127 | .uses_mmap = true, | 1262 | .uses_mmap = true, |
| 1128 | }, | 1263 | }, |
| 1129 | .proc_map_timeout = 500, | 1264 | .proc_map_timeout = 500, |
| 1265 | .overwrite = 1, | ||
| 1130 | }, | 1266 | }, |
| 1131 | .max_stack = sysctl_perf_event_max_stack, | 1267 | .max_stack = sysctl_perf_event_max_stack, |
| 1132 | .sym_pcnt_filter = 5, | 1268 | .sym_pcnt_filter = 5, |
diff --git a/tools/perf/check-headers.sh b/tools/perf/check-headers.sh index 51abdb0a4047..790ec25919a0 100755 --- a/tools/perf/check-headers.sh +++ b/tools/perf/check-headers.sh | |||
| @@ -33,7 +33,6 @@ arch/s390/include/uapi/asm/kvm.h | |||
| 33 | arch/s390/include/uapi/asm/kvm_perf.h | 33 | arch/s390/include/uapi/asm/kvm_perf.h |
| 34 | arch/s390/include/uapi/asm/ptrace.h | 34 | arch/s390/include/uapi/asm/ptrace.h |
| 35 | arch/s390/include/uapi/asm/sie.h | 35 | arch/s390/include/uapi/asm/sie.h |
| 36 | arch/s390/include/uapi/asm/unistd.h | ||
| 37 | arch/arm/include/uapi/asm/kvm.h | 36 | arch/arm/include/uapi/asm/kvm.h |
| 38 | arch/arm64/include/uapi/asm/kvm.h | 37 | arch/arm64/include/uapi/asm/kvm.h |
| 39 | arch/alpha/include/uapi/asm/errno.h | 38 | arch/alpha/include/uapi/asm/errno.h |
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json new file mode 100644 index 000000000000..3b6208763e50 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/branch.json | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0x7A", | ||
| 4 | "EventName": "BR_INDIRECT_SPEC", | ||
| 5 | "BriefDescription": "Branch speculatively executed - Indirect branch" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0xC9", | ||
| 9 | "EventName": "BR_COND", | ||
| 10 | "BriefDescription": "Conditional branch executed" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xCA", | ||
| 14 | "EventName": "BR_INDIRECT_MISPRED", | ||
| 15 | "BriefDescription": "Indirect branch mispredicted" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xCB", | ||
| 19 | "EventName": "BR_INDIRECT_MISPRED_ADDR", | ||
| 20 | "BriefDescription": "Indirect branch mispredicted because of address miscompare" | ||
| 21 | }, | ||
| 22 | {, | ||
| 23 | "EventCode": "0xCC", | ||
| 24 | "EventName": "BR_COND_MISPRED", | ||
| 25 | "BriefDescription": "Conditional branch mispredicted" | ||
| 26 | } | ||
| 27 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json new file mode 100644 index 000000000000..480d9f7460ab --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/bus.json | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0x60", | ||
| 4 | "EventName": "BUS_ACCESS_LD", | ||
| 5 | "BriefDescription": "Bus access - Read" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0x61", | ||
| 9 | "EventName": "BUS_ACCESS_ST", | ||
| 10 | "BriefDescription": "Bus access - Write" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xC0", | ||
| 14 | "EventName": "EXT_MEM_REQ", | ||
| 15 | "BriefDescription": "External memory request" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xC1", | ||
| 19 | "EventName": "EXT_MEM_REQ_NC", | ||
| 20 | "BriefDescription": "Non-cacheable external memory request" | ||
| 21 | } | ||
| 22 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json new file mode 100644 index 000000000000..11baad6344b9 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/cache.json | |||
| @@ -0,0 +1,27 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0xC2", | ||
| 4 | "EventName": "PREFETCH_LINEFILL", | ||
| 5 | "BriefDescription": "Linefill because of prefetch" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0xC3", | ||
| 9 | "EventName": "PREFETCH_LINEFILL_DROP", | ||
| 10 | "BriefDescription": "Instruction Cache Throttle occurred" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xC4", | ||
| 14 | "EventName": "READ_ALLOC_ENTER", | ||
| 15 | "BriefDescription": "Entering read allocate mode" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xC5", | ||
| 19 | "EventName": "READ_ALLOC", | ||
| 20 | "BriefDescription": "Read allocate mode" | ||
| 21 | }, | ||
| 22 | {, | ||
| 23 | "EventCode": "0xC8", | ||
| 24 | "EventName": "EXT_SNOOP", | ||
| 25 | "BriefDescription": "SCU Snooped data from another CPU for this CPU" | ||
| 26 | } | ||
| 27 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json new file mode 100644 index 000000000000..480d9f7460ab --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/memory.json | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0x60", | ||
| 4 | "EventName": "BUS_ACCESS_LD", | ||
| 5 | "BriefDescription": "Bus access - Read" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0x61", | ||
| 9 | "EventName": "BUS_ACCESS_ST", | ||
| 10 | "BriefDescription": "Bus access - Write" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xC0", | ||
| 14 | "EventName": "EXT_MEM_REQ", | ||
| 15 | "BriefDescription": "External memory request" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xC1", | ||
| 19 | "EventName": "EXT_MEM_REQ_NC", | ||
| 20 | "BriefDescription": "Non-cacheable external memory request" | ||
| 21 | } | ||
| 22 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json new file mode 100644 index 000000000000..73a22402d003 --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/other.json | |||
| @@ -0,0 +1,32 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0x86", | ||
| 4 | "EventName": "EXC_IRQ", | ||
| 5 | "BriefDescription": "Exception taken, IRQ" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0x87", | ||
| 9 | "EventName": "EXC_FIQ", | ||
| 10 | "BriefDescription": "Exception taken, FIQ" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xC6", | ||
| 14 | "EventName": "PRE_DECODE_ERR", | ||
| 15 | "BriefDescription": "Pre-decode error" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xD0", | ||
| 19 | "EventName": "L1I_CACHE_ERR", | ||
| 20 | "BriefDescription": "L1 Instruction Cache (data or tag) memory error" | ||
| 21 | }, | ||
| 22 | {, | ||
| 23 | "EventCode": "0xD1", | ||
| 24 | "EventName": "L1D_CACHE_ERR", | ||
| 25 | "BriefDescription": "L1 Data Cache (data, tag or dirty) memory error, correctable or non-correctable" | ||
| 26 | }, | ||
| 27 | {, | ||
| 28 | "EventCode": "0xD2", | ||
| 29 | "EventName": "TLB_ERR", | ||
| 30 | "BriefDescription": "TLB memory error" | ||
| 31 | } | ||
| 32 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json b/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json new file mode 100644 index 000000000000..3149fb90555a --- /dev/null +++ b/tools/perf/pmu-events/arch/arm64/cortex-a53/pipeline.json | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | [ | ||
| 2 | {, | ||
| 3 | "EventCode": "0xC7", | ||
| 4 | "EventName": "STALL_SB_FULL", | ||
| 5 | "BriefDescription": "Data Write operation that stalls the pipeline because the store buffer is full" | ||
| 6 | }, | ||
| 7 | {, | ||
| 8 | "EventCode": "0xE0", | ||
| 9 | "EventName": "OTHER_IQ_DEP_STALL", | ||
| 10 | "BriefDescription": "Cycles that the DPU IQ is empty and that is not because of a recent micro-TLB miss, instruction cache miss or pre-decode error" | ||
| 11 | }, | ||
| 12 | {, | ||
| 13 | "EventCode": "0xE1", | ||
| 14 | "EventName": "IC_DEP_STALL", | ||
| 15 | "BriefDescription": "Cycles the DPU IQ is empty and there is an instruction cache miss being processed" | ||
| 16 | }, | ||
| 17 | {, | ||
| 18 | "EventCode": "0xE2", | ||
| 19 | "EventName": "IUTLB_DEP_STALL", | ||
| 20 | "BriefDescription": "Cycles the DPU IQ is empty and there is an instruction micro-TLB miss being processed" | ||
| 21 | }, | ||
| 22 | {, | ||
| 23 | "EventCode": "0xE3", | ||
| 24 | "EventName": "DECODE_DEP_STALL", | ||
| 25 | "BriefDescription": "Cycles the DPU IQ is empty and there is a pre-decode error being processed" | ||
| 26 | }, | ||
| 27 | {, | ||
| 28 | "EventCode": "0xE4", | ||
| 29 | "EventName": "OTHER_INTERLOCK_STALL", | ||
| 30 | "BriefDescription": "Cycles there is an interlock other than Advanced SIMD/Floating-point instructions or load/store instruction" | ||
| 31 | }, | ||
| 32 | {, | ||
| 33 | "EventCode": "0xE5", | ||
| 34 | "EventName": "AGU_DEP_STALL", | ||
| 35 | "BriefDescription": "Cycles there is an interlock for a load/store instruction waiting for data to calculate the address in the AGU" | ||
| 36 | }, | ||
| 37 | {, | ||
| 38 | "EventCode": "0xE6", | ||
| 39 | "EventName": "SIMD_DEP_STALL", | ||
| 40 | "BriefDescription": "Cycles there is an interlock for an Advanced SIMD/Floating-point operation." | ||
| 41 | }, | ||
| 42 | {, | ||
| 43 | "EventCode": "0xE7", | ||
| 44 | "EventName": "LD_DEP_STALL", | ||
| 45 | "BriefDescription": "Cycles there is a stall in the Wr stage because of a load miss" | ||
| 46 | }, | ||
| 47 | {, | ||
| 48 | "EventCode": "0xE8", | ||
| 49 | "EventName": "ST_DEP_STALL", | ||
| 50 | "BriefDescription": "Cycles there is a stall in the Wr stage because of a store" | ||
| 51 | } | ||
| 52 | ] | ||
diff --git a/tools/perf/pmu-events/arch/arm64/mapfile.csv b/tools/perf/pmu-events/arch/arm64/mapfile.csv index 219d6756134e..e61c9ca6cf9e 100644 --- a/tools/perf/pmu-events/arch/arm64/mapfile.csv +++ b/tools/perf/pmu-events/arch/arm64/mapfile.csv | |||
| @@ -13,3 +13,4 @@ | |||
| 13 | # | 13 | # |
| 14 | #Family-model,Version,Filename,EventType | 14 | #Family-model,Version,Filename,EventType |
| 15 | 0x00000000420f5160,v1,cavium,core | 15 | 0x00000000420f5160,v1,cavium,core |
| 16 | 0x00000000410fd03[[:xdigit:]],v1,cortex-a53,core | ||
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index 4035d43523c3..e0b1b414d466 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c | |||
| @@ -31,10 +31,12 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count, | |||
| 31 | int i; | 31 | int i; |
| 32 | 32 | ||
| 33 | for (i = 0; i < evlist->nr_mmaps; i++) { | 33 | for (i = 0; i < evlist->nr_mmaps; i++) { |
| 34 | struct perf_mmap *map = &evlist->overwrite_mmap[i]; | ||
| 34 | union perf_event *event; | 35 | union perf_event *event; |
| 36 | u64 start, end; | ||
| 35 | 37 | ||
| 36 | perf_mmap__read_catchup(&evlist->overwrite_mmap[i]); | 38 | perf_mmap__read_init(map, true, &start, &end); |
| 37 | while ((event = perf_mmap__read_backward(&evlist->overwrite_mmap[i])) != NULL) { | 39 | while ((event = perf_mmap__read_event(map, true, &start, end)) != NULL) { |
| 38 | const u32 type = event->header.type; | 40 | const u32 type = event->header.type; |
| 39 | 41 | ||
| 40 | switch (type) { | 42 | switch (type) { |
| @@ -49,6 +51,7 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count, | |||
| 49 | return TEST_FAIL; | 51 | return TEST_FAIL; |
| 50 | } | 52 | } |
| 51 | } | 53 | } |
| 54 | perf_mmap__read_done(map); | ||
| 52 | } | 55 | } |
| 53 | return TEST_OK; | 56 | return TEST_OK; |
| 54 | } | 57 | } |
diff --git a/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh b/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh index 8b3da21a08f1..c446c894b297 100755 --- a/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh +++ b/tools/perf/tests/shell/trace+probe_libc_inet_pton.sh | |||
| @@ -22,10 +22,23 @@ trace_libc_inet_pton_backtrace() { | |||
| 22 | expected[4]="rtt min.*" | 22 | expected[4]="rtt min.*" |
| 23 | expected[5]="[0-9]+\.[0-9]+[[:space:]]+probe_libc:inet_pton:\([[:xdigit:]]+\)" | 23 | expected[5]="[0-9]+\.[0-9]+[[:space:]]+probe_libc:inet_pton:\([[:xdigit:]]+\)" |
| 24 | expected[6]=".*inet_pton[[:space:]]\($libc\)$" | 24 | expected[6]=".*inet_pton[[:space:]]\($libc\)$" |
| 25 | expected[7]="getaddrinfo[[:space:]]\($libc\)$" | 25 | case "$(uname -m)" in |
| 26 | expected[8]=".*\(.*/bin/ping.*\)$" | 26 | s390x) |
| 27 | 27 | eventattr='call-graph=dwarf' | |
| 28 | perf trace --no-syscalls -e probe_libc:inet_pton/max-stack=3/ ping -6 -c 1 ::1 2>&1 | grep -v ^$ | while read line ; do | 28 | expected[7]="gaih_inet[[:space:]]\(inlined\)$" |
| 29 | expected[8]="__GI_getaddrinfo[[:space:]]\(inlined\)$" | ||
| 30 | expected[9]="main[[:space:]]\(.*/bin/ping.*\)$" | ||
| 31 | expected[10]="__libc_start_main[[:space:]]\($libc\)$" | ||
| 32 | expected[11]="_start[[:space:]]\(.*/bin/ping.*\)$" | ||
| 33 | ;; | ||
| 34 | *) | ||
| 35 | eventattr='max-stack=3' | ||
| 36 | expected[7]="getaddrinfo[[:space:]]\($libc\)$" | ||
| 37 | expected[8]=".*\(.*/bin/ping.*\)$" | ||
| 38 | ;; | ||
| 39 | esac | ||
| 40 | |||
| 41 | perf trace --no-syscalls -e probe_libc:inet_pton/$eventattr/ ping -6 -c 1 ::1 2>&1 | grep -v ^$ | while read line ; do | ||
| 29 | echo $line | 42 | echo $line |
| 30 | echo "$line" | egrep -q "${expected[$idx]}" | 43 | echo "$line" | egrep -q "${expected[$idx]}" |
| 31 | if [ $? -ne 0 ] ; then | 44 | if [ $? -ne 0 ] ; then |
| @@ -33,7 +46,7 @@ trace_libc_inet_pton_backtrace() { | |||
| 33 | exit 1 | 46 | exit 1 |
| 34 | fi | 47 | fi |
| 35 | let idx+=1 | 48 | let idx+=1 |
| 36 | [ $idx -eq 9 ] && break | 49 | [ -z "${expected[$idx]}" ] && break |
| 37 | done | 50 | done |
| 38 | } | 51 | } |
| 39 | 52 | ||
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index 68146f4620a5..6495ee55d9c3 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
| @@ -608,7 +608,8 @@ static int hist_browser__title(struct hist_browser *browser, char *bf, size_t si | |||
| 608 | return browser->title ? browser->title(browser, bf, size) : 0; | 608 | return browser->title ? browser->title(browser, bf, size) : 0; |
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | int hist_browser__run(struct hist_browser *browser, const char *help) | 611 | int hist_browser__run(struct hist_browser *browser, const char *help, |
| 612 | bool warn_lost_event) | ||
| 612 | { | 613 | { |
| 613 | int key; | 614 | int key; |
| 614 | char title[160]; | 615 | char title[160]; |
| @@ -638,8 +639,9 @@ int hist_browser__run(struct hist_browser *browser, const char *help) | |||
| 638 | nr_entries = hist_browser__nr_entries(browser); | 639 | nr_entries = hist_browser__nr_entries(browser); |
| 639 | ui_browser__update_nr_entries(&browser->b, nr_entries); | 640 | ui_browser__update_nr_entries(&browser->b, nr_entries); |
| 640 | 641 | ||
| 641 | if (browser->hists->stats.nr_lost_warned != | 642 | if (warn_lost_event && |
| 642 | browser->hists->stats.nr_events[PERF_RECORD_LOST]) { | 643 | (browser->hists->stats.nr_lost_warned != |
| 644 | browser->hists->stats.nr_events[PERF_RECORD_LOST])) { | ||
| 643 | browser->hists->stats.nr_lost_warned = | 645 | browser->hists->stats.nr_lost_warned = |
| 644 | browser->hists->stats.nr_events[PERF_RECORD_LOST]; | 646 | browser->hists->stats.nr_events[PERF_RECORD_LOST]; |
| 645 | ui_browser__warn_lost_events(&browser->b); | 647 | ui_browser__warn_lost_events(&browser->b); |
| @@ -2763,7 +2765,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, | |||
| 2763 | bool left_exits, | 2765 | bool left_exits, |
| 2764 | struct hist_browser_timer *hbt, | 2766 | struct hist_browser_timer *hbt, |
| 2765 | float min_pcnt, | 2767 | float min_pcnt, |
| 2766 | struct perf_env *env) | 2768 | struct perf_env *env, |
| 2769 | bool warn_lost_event) | ||
| 2767 | { | 2770 | { |
| 2768 | struct hists *hists = evsel__hists(evsel); | 2771 | struct hists *hists = evsel__hists(evsel); |
| 2769 | struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env); | 2772 | struct hist_browser *browser = perf_evsel_browser__new(evsel, hbt, env); |
| @@ -2844,7 +2847,8 @@ static int perf_evsel__hists_browse(struct perf_evsel *evsel, int nr_events, | |||
| 2844 | 2847 | ||
| 2845 | nr_options = 0; | 2848 | nr_options = 0; |
| 2846 | 2849 | ||
| 2847 | key = hist_browser__run(browser, helpline); | 2850 | key = hist_browser__run(browser, helpline, |
| 2851 | warn_lost_event); | ||
| 2848 | 2852 | ||
| 2849 | if (browser->he_selection != NULL) { | 2853 | if (browser->he_selection != NULL) { |
| 2850 | thread = hist_browser__selected_thread(browser); | 2854 | thread = hist_browser__selected_thread(browser); |
| @@ -3184,7 +3188,8 @@ static void perf_evsel_menu__write(struct ui_browser *browser, | |||
| 3184 | 3188 | ||
| 3185 | static int perf_evsel_menu__run(struct perf_evsel_menu *menu, | 3189 | static int perf_evsel_menu__run(struct perf_evsel_menu *menu, |
| 3186 | int nr_events, const char *help, | 3190 | int nr_events, const char *help, |
| 3187 | struct hist_browser_timer *hbt) | 3191 | struct hist_browser_timer *hbt, |
| 3192 | bool warn_lost_event) | ||
| 3188 | { | 3193 | { |
| 3189 | struct perf_evlist *evlist = menu->b.priv; | 3194 | struct perf_evlist *evlist = menu->b.priv; |
| 3190 | struct perf_evsel *pos; | 3195 | struct perf_evsel *pos; |
| @@ -3203,7 +3208,9 @@ static int perf_evsel_menu__run(struct perf_evsel_menu *menu, | |||
| 3203 | case K_TIMER: | 3208 | case K_TIMER: |
| 3204 | hbt->timer(hbt->arg); | 3209 | hbt->timer(hbt->arg); |
| 3205 | 3210 | ||
| 3206 | if (!menu->lost_events_warned && menu->lost_events) { | 3211 | if (!menu->lost_events_warned && |
| 3212 | menu->lost_events && | ||
| 3213 | warn_lost_event) { | ||
| 3207 | ui_browser__warn_lost_events(&menu->b); | 3214 | ui_browser__warn_lost_events(&menu->b); |
| 3208 | menu->lost_events_warned = true; | 3215 | menu->lost_events_warned = true; |
| 3209 | } | 3216 | } |
| @@ -3224,7 +3231,8 @@ browse_hists: | |||
| 3224 | key = perf_evsel__hists_browse(pos, nr_events, help, | 3231 | key = perf_evsel__hists_browse(pos, nr_events, help, |
| 3225 | true, hbt, | 3232 | true, hbt, |
| 3226 | menu->min_pcnt, | 3233 | menu->min_pcnt, |
| 3227 | menu->env); | 3234 | menu->env, |
| 3235 | warn_lost_event); | ||
| 3228 | ui_browser__show_title(&menu->b, title); | 3236 | ui_browser__show_title(&menu->b, title); |
| 3229 | switch (key) { | 3237 | switch (key) { |
| 3230 | case K_TAB: | 3238 | case K_TAB: |
| @@ -3282,7 +3290,8 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, | |||
| 3282 | int nr_entries, const char *help, | 3290 | int nr_entries, const char *help, |
| 3283 | struct hist_browser_timer *hbt, | 3291 | struct hist_browser_timer *hbt, |
| 3284 | float min_pcnt, | 3292 | float min_pcnt, |
| 3285 | struct perf_env *env) | 3293 | struct perf_env *env, |
| 3294 | bool warn_lost_event) | ||
| 3286 | { | 3295 | { |
| 3287 | struct perf_evsel *pos; | 3296 | struct perf_evsel *pos; |
| 3288 | struct perf_evsel_menu menu = { | 3297 | struct perf_evsel_menu menu = { |
| @@ -3309,13 +3318,15 @@ static int __perf_evlist__tui_browse_hists(struct perf_evlist *evlist, | |||
| 3309 | menu.b.width = line_len; | 3318 | menu.b.width = line_len; |
| 3310 | } | 3319 | } |
| 3311 | 3320 | ||
| 3312 | return perf_evsel_menu__run(&menu, nr_entries, help, hbt); | 3321 | return perf_evsel_menu__run(&menu, nr_entries, help, |
| 3322 | hbt, warn_lost_event); | ||
| 3313 | } | 3323 | } |
| 3314 | 3324 | ||
| 3315 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, | 3325 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, |
| 3316 | struct hist_browser_timer *hbt, | 3326 | struct hist_browser_timer *hbt, |
| 3317 | float min_pcnt, | 3327 | float min_pcnt, |
| 3318 | struct perf_env *env) | 3328 | struct perf_env *env, |
| 3329 | bool warn_lost_event) | ||
| 3319 | { | 3330 | { |
| 3320 | int nr_entries = evlist->nr_entries; | 3331 | int nr_entries = evlist->nr_entries; |
| 3321 | 3332 | ||
| @@ -3325,7 +3336,7 @@ single_entry: | |||
| 3325 | 3336 | ||
| 3326 | return perf_evsel__hists_browse(first, nr_entries, help, | 3337 | return perf_evsel__hists_browse(first, nr_entries, help, |
| 3327 | false, hbt, min_pcnt, | 3338 | false, hbt, min_pcnt, |
| 3328 | env); | 3339 | env, warn_lost_event); |
| 3329 | } | 3340 | } |
| 3330 | 3341 | ||
| 3331 | if (symbol_conf.event_group) { | 3342 | if (symbol_conf.event_group) { |
| @@ -3342,5 +3353,6 @@ single_entry: | |||
| 3342 | } | 3353 | } |
| 3343 | 3354 | ||
| 3344 | return __perf_evlist__tui_browse_hists(evlist, nr_entries, help, | 3355 | return __perf_evlist__tui_browse_hists(evlist, nr_entries, help, |
| 3345 | hbt, min_pcnt, env); | 3356 | hbt, min_pcnt, env, |
| 3357 | warn_lost_event); | ||
| 3346 | } | 3358 | } |
diff --git a/tools/perf/ui/browsers/hists.h b/tools/perf/ui/browsers/hists.h index ba431777f559..9428bee076f2 100644 --- a/tools/perf/ui/browsers/hists.h +++ b/tools/perf/ui/browsers/hists.h | |||
| @@ -28,7 +28,8 @@ struct hist_browser { | |||
| 28 | 28 | ||
| 29 | struct hist_browser *hist_browser__new(struct hists *hists); | 29 | struct hist_browser *hist_browser__new(struct hists *hists); |
| 30 | void hist_browser__delete(struct hist_browser *browser); | 30 | void hist_browser__delete(struct hist_browser *browser); |
| 31 | int hist_browser__run(struct hist_browser *browser, const char *help); | 31 | int hist_browser__run(struct hist_browser *browser, const char *help, |
| 32 | bool warn_lost_event); | ||
| 32 | void hist_browser__init(struct hist_browser *browser, | 33 | void hist_browser__init(struct hist_browser *browser, |
| 33 | struct hists *hists); | 34 | struct hists *hists); |
| 34 | #endif /* _PERF_UI_BROWSER_HISTS_H_ */ | 35 | #endif /* _PERF_UI_BROWSER_HISTS_H_ */ |
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index ac35cd214feb..e5fc14e53c05 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
| @@ -715,28 +715,11 @@ union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int | |||
| 715 | return perf_mmap__read_forward(md); | 715 | return perf_mmap__read_forward(md); |
| 716 | } | 716 | } |
| 717 | 717 | ||
| 718 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx) | ||
| 719 | { | ||
| 720 | struct perf_mmap *md = &evlist->mmap[idx]; | ||
| 721 | |||
| 722 | /* | ||
| 723 | * No need to check messup for backward ring buffer: | ||
| 724 | * We can always read arbitrary long data from a backward | ||
| 725 | * ring buffer unless we forget to pause it before reading. | ||
| 726 | */ | ||
| 727 | return perf_mmap__read_backward(md); | ||
| 728 | } | ||
| 729 | |||
| 730 | union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx) | 718 | union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx) |
| 731 | { | 719 | { |
| 732 | return perf_evlist__mmap_read_forward(evlist, idx); | 720 | return perf_evlist__mmap_read_forward(evlist, idx); |
| 733 | } | 721 | } |
| 734 | 722 | ||
| 735 | void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx) | ||
| 736 | { | ||
| 737 | perf_mmap__read_catchup(&evlist->mmap[idx]); | ||
| 738 | } | ||
| 739 | |||
| 740 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) | 723 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx) |
| 741 | { | 724 | { |
| 742 | perf_mmap__consume(&evlist->mmap[idx], false); | 725 | perf_mmap__consume(&evlist->mmap[idx], false); |
diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 75f8e0ad5d76..336b838e6957 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h | |||
| @@ -133,10 +133,6 @@ union perf_event *perf_evlist__mmap_read(struct perf_evlist *evlist, int idx); | |||
| 133 | 133 | ||
| 134 | union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, | 134 | union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, |
| 135 | int idx); | 135 | int idx); |
| 136 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, | ||
| 137 | int idx); | ||
| 138 | void perf_evlist__mmap_read_catchup(struct perf_evlist *evlist, int idx); | ||
| 139 | |||
| 140 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx); | 136 | void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx); |
| 141 | 137 | ||
| 142 | int perf_evlist__open(struct perf_evlist *evlist); | 138 | int perf_evlist__open(struct perf_evlist *evlist); |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index ff359c9ece2e..ef351688b797 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
| @@ -41,17 +41,7 @@ | |||
| 41 | 41 | ||
| 42 | #include "sane_ctype.h" | 42 | #include "sane_ctype.h" |
| 43 | 43 | ||
| 44 | static struct { | 44 | struct perf_missing_features perf_missing_features; |
| 45 | bool sample_id_all; | ||
| 46 | bool exclude_guest; | ||
| 47 | bool mmap2; | ||
| 48 | bool cloexec; | ||
| 49 | bool clockid; | ||
| 50 | bool clockid_wrong; | ||
| 51 | bool lbr_flags; | ||
| 52 | bool write_backward; | ||
| 53 | bool group_read; | ||
| 54 | } perf_missing_features; | ||
| 55 | 45 | ||
| 56 | static clockid_t clockid; | 46 | static clockid_t clockid; |
| 57 | 47 | ||
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 846e41644525..a7487c6d1866 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h | |||
| @@ -149,6 +149,20 @@ union u64_swap { | |||
| 149 | u32 val32[2]; | 149 | u32 val32[2]; |
| 150 | }; | 150 | }; |
| 151 | 151 | ||
| 152 | struct perf_missing_features { | ||
| 153 | bool sample_id_all; | ||
| 154 | bool exclude_guest; | ||
| 155 | bool mmap2; | ||
| 156 | bool cloexec; | ||
| 157 | bool clockid; | ||
| 158 | bool clockid_wrong; | ||
| 159 | bool lbr_flags; | ||
| 160 | bool write_backward; | ||
| 161 | bool group_read; | ||
| 162 | }; | ||
| 163 | |||
| 164 | extern struct perf_missing_features perf_missing_features; | ||
| 165 | |||
| 152 | struct cpu_map; | 166 | struct cpu_map; |
| 153 | struct target; | 167 | struct target; |
| 154 | struct thread_map; | 168 | struct thread_map; |
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h index f6630cb95eff..02721b579746 100644 --- a/tools/perf/util/hist.h +++ b/tools/perf/util/hist.h | |||
| @@ -430,7 +430,8 @@ int hist_entry__tui_annotate(struct hist_entry *he, struct perf_evsel *evsel, | |||
| 430 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, | 430 | int perf_evlist__tui_browse_hists(struct perf_evlist *evlist, const char *help, |
| 431 | struct hist_browser_timer *hbt, | 431 | struct hist_browser_timer *hbt, |
| 432 | float min_pcnt, | 432 | float min_pcnt, |
| 433 | struct perf_env *env); | 433 | struct perf_env *env, |
| 434 | bool warn_lost_event); | ||
| 434 | int script_browse(const char *script_opt); | 435 | int script_browse(const char *script_opt); |
| 435 | #else | 436 | #else |
| 436 | static inline | 437 | static inline |
| @@ -438,7 +439,8 @@ int perf_evlist__tui_browse_hists(struct perf_evlist *evlist __maybe_unused, | |||
| 438 | const char *help __maybe_unused, | 439 | const char *help __maybe_unused, |
| 439 | struct hist_browser_timer *hbt __maybe_unused, | 440 | struct hist_browser_timer *hbt __maybe_unused, |
| 440 | float min_pcnt __maybe_unused, | 441 | float min_pcnt __maybe_unused, |
| 441 | struct perf_env *env __maybe_unused) | 442 | struct perf_env *env __maybe_unused, |
| 443 | bool warn_lost_event __maybe_unused) | ||
| 442 | { | 444 | { |
| 443 | return 0; | 445 | return 0; |
| 444 | } | 446 | } |
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index 05076e683938..91531a7c8fbf 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c | |||
| @@ -22,29 +22,27 @@ size_t perf_mmap__mmap_len(struct perf_mmap *map) | |||
| 22 | 22 | ||
| 23 | /* When check_messup is true, 'end' must points to a good entry */ | 23 | /* When check_messup is true, 'end' must points to a good entry */ |
| 24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, | 24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, |
| 25 | u64 start, u64 end, u64 *prev) | 25 | u64 *startp, u64 end) |
| 26 | { | 26 | { |
| 27 | unsigned char *data = map->base + page_size; | 27 | unsigned char *data = map->base + page_size; |
| 28 | union perf_event *event = NULL; | 28 | union perf_event *event = NULL; |
| 29 | int diff = end - start; | 29 | int diff = end - *startp; |
| 30 | 30 | ||
| 31 | if (diff >= (int)sizeof(event->header)) { | 31 | if (diff >= (int)sizeof(event->header)) { |
| 32 | size_t size; | 32 | size_t size; |
| 33 | 33 | ||
| 34 | event = (union perf_event *)&data[start & map->mask]; | 34 | event = (union perf_event *)&data[*startp & map->mask]; |
| 35 | size = event->header.size; | 35 | size = event->header.size; |
| 36 | 36 | ||
| 37 | if (size < sizeof(event->header) || diff < (int)size) { | 37 | if (size < sizeof(event->header) || diff < (int)size) |
| 38 | event = NULL; | 38 | return NULL; |
| 39 | goto broken_event; | ||
| 40 | } | ||
| 41 | 39 | ||
| 42 | /* | 40 | /* |
| 43 | * Event straddles the mmap boundary -- header should always | 41 | * Event straddles the mmap boundary -- header should always |
| 44 | * be inside due to u64 alignment of output. | 42 | * be inside due to u64 alignment of output. |
| 45 | */ | 43 | */ |
| 46 | if ((start & map->mask) + size != ((start + size) & map->mask)) { | 44 | if ((*startp & map->mask) + size != ((*startp + size) & map->mask)) { |
| 47 | unsigned int offset = start; | 45 | unsigned int offset = *startp; |
| 48 | unsigned int len = min(sizeof(*event), size), cpy; | 46 | unsigned int len = min(sizeof(*event), size), cpy; |
| 49 | void *dst = map->event_copy; | 47 | void *dst = map->event_copy; |
| 50 | 48 | ||
| @@ -59,20 +57,19 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map, | |||
| 59 | event = (union perf_event *)map->event_copy; | 57 | event = (union perf_event *)map->event_copy; |
| 60 | } | 58 | } |
| 61 | 59 | ||
| 62 | start += size; | 60 | *startp += size; |
| 63 | } | 61 | } |
| 64 | 62 | ||
| 65 | broken_event: | ||
| 66 | if (prev) | ||
| 67 | *prev = start; | ||
| 68 | |||
| 69 | return event; | 63 | return event; |
| 70 | } | 64 | } |
| 71 | 65 | ||
| 66 | /* | ||
| 67 | * legacy interface for mmap read. | ||
| 68 | * Don't use it. Use perf_mmap__read_event(). | ||
| 69 | */ | ||
| 72 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map) | 70 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map) |
| 73 | { | 71 | { |
| 74 | u64 head; | 72 | u64 head; |
| 75 | u64 old = map->prev; | ||
| 76 | 73 | ||
| 77 | /* | 74 | /* |
| 78 | * Check if event was unmapped due to a POLLHUP/POLLERR. | 75 | * Check if event was unmapped due to a POLLHUP/POLLERR. |
| @@ -82,13 +79,26 @@ union perf_event *perf_mmap__read_forward(struct perf_mmap *map) | |||
| 82 | 79 | ||
| 83 | head = perf_mmap__read_head(map); | 80 | head = perf_mmap__read_head(map); |
| 84 | 81 | ||
| 85 | return perf_mmap__read(map, old, head, &map->prev); | 82 | return perf_mmap__read(map, &map->prev, head); |
| 86 | } | 83 | } |
| 87 | 84 | ||
| 88 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | 85 | /* |
| 86 | * Read event from ring buffer one by one. | ||
| 87 | * Return one event for each call. | ||
| 88 | * | ||
| 89 | * Usage: | ||
| 90 | * perf_mmap__read_init() | ||
| 91 | * while(event = perf_mmap__read_event()) { | ||
| 92 | * //process the event | ||
| 93 | * perf_mmap__consume() | ||
| 94 | * } | ||
| 95 | * perf_mmap__read_done() | ||
| 96 | */ | ||
| 97 | union perf_event *perf_mmap__read_event(struct perf_mmap *map, | ||
| 98 | bool overwrite, | ||
| 99 | u64 *startp, u64 end) | ||
| 89 | { | 100 | { |
| 90 | u64 head, end; | 101 | union perf_event *event; |
| 91 | u64 start = map->prev; | ||
| 92 | 102 | ||
| 93 | /* | 103 | /* |
| 94 | * Check if event was unmapped due to a POLLHUP/POLLERR. | 104 | * Check if event was unmapped due to a POLLHUP/POLLERR. |
| @@ -96,40 +106,19 @@ union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | |||
| 96 | if (!refcount_read(&map->refcnt)) | 106 | if (!refcount_read(&map->refcnt)) |
| 97 | return NULL; | 107 | return NULL; |
| 98 | 108 | ||
| 99 | head = perf_mmap__read_head(map); | 109 | if (startp == NULL) |
| 100 | if (!head) | ||
| 101 | return NULL; | 110 | return NULL; |
| 102 | 111 | ||
| 103 | /* | 112 | /* non-overwirte doesn't pause the ringbuffer */ |
| 104 | * 'head' pointer starts from 0. Kernel minus sizeof(record) form | 113 | if (!overwrite) |
| 105 | * it each time when kernel writes to it, so in fact 'head' is | 114 | end = perf_mmap__read_head(map); |
| 106 | * negative. 'end' pointer is made manually by adding the size of | ||
| 107 | * the ring buffer to 'head' pointer, means the validate data can | ||
| 108 | * read is the whole ring buffer. If 'end' is positive, the ring | ||
| 109 | * buffer has not fully filled, so we must adjust 'end' to 0. | ||
| 110 | * | ||
| 111 | * However, since both 'head' and 'end' is unsigned, we can't | ||
| 112 | * simply compare 'end' against 0. Here we compare '-head' and | ||
| 113 | * the size of the ring buffer, where -head is the number of bytes | ||
| 114 | * kernel write to the ring buffer. | ||
| 115 | */ | ||
| 116 | if (-head < (u64)(map->mask + 1)) | ||
| 117 | end = 0; | ||
| 118 | else | ||
| 119 | end = head + map->mask + 1; | ||
| 120 | |||
| 121 | return perf_mmap__read(map, start, end, &map->prev); | ||
| 122 | } | ||
| 123 | 115 | ||
| 124 | void perf_mmap__read_catchup(struct perf_mmap *map) | 116 | event = perf_mmap__read(map, startp, end); |
| 125 | { | ||
| 126 | u64 head; | ||
| 127 | 117 | ||
| 128 | if (!refcount_read(&map->refcnt)) | 118 | if (!overwrite) |
| 129 | return; | 119 | map->prev = *startp; |
| 130 | 120 | ||
| 131 | head = perf_mmap__read_head(map); | 121 | return event; |
| 132 | map->prev = head; | ||
| 133 | } | 122 | } |
| 134 | 123 | ||
| 135 | static bool perf_mmap__empty(struct perf_mmap *map) | 124 | static bool perf_mmap__empty(struct perf_mmap *map) |
| @@ -267,41 +256,60 @@ static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u6 | |||
| 267 | return -1; | 256 | return -1; |
| 268 | } | 257 | } |
| 269 | 258 | ||
| 270 | int perf_mmap__push(struct perf_mmap *md, bool overwrite, | 259 | /* |
| 271 | void *to, int push(void *to, void *buf, size_t size)) | 260 | * Report the start and end of the available data in ringbuffer |
| 261 | */ | ||
| 262 | int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, | ||
| 263 | u64 *startp, u64 *endp) | ||
| 272 | { | 264 | { |
| 273 | u64 head = perf_mmap__read_head(md); | 265 | u64 head = perf_mmap__read_head(md); |
| 274 | u64 old = md->prev; | 266 | u64 old = md->prev; |
| 275 | u64 end = head, start = old; | ||
| 276 | unsigned char *data = md->base + page_size; | 267 | unsigned char *data = md->base + page_size; |
| 277 | unsigned long size; | 268 | unsigned long size; |
| 278 | void *buf; | ||
| 279 | int rc = 0; | ||
| 280 | 269 | ||
| 281 | start = overwrite ? head : old; | 270 | *startp = overwrite ? head : old; |
| 282 | end = overwrite ? old : head; | 271 | *endp = overwrite ? old : head; |
| 283 | 272 | ||
| 284 | if (start == end) | 273 | if (*startp == *endp) |
| 285 | return 0; | 274 | return -EAGAIN; |
| 286 | 275 | ||
| 287 | size = end - start; | 276 | size = *endp - *startp; |
| 288 | if (size > (unsigned long)(md->mask) + 1) { | 277 | if (size > (unsigned long)(md->mask) + 1) { |
| 289 | if (!overwrite) { | 278 | if (!overwrite) { |
| 290 | WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); | 279 | WARN_ONCE(1, "failed to keep up with mmap data. (warn only once)\n"); |
| 291 | 280 | ||
| 292 | md->prev = head; | 281 | md->prev = head; |
| 293 | perf_mmap__consume(md, overwrite); | 282 | perf_mmap__consume(md, overwrite); |
| 294 | return 0; | 283 | return -EAGAIN; |
| 295 | } | 284 | } |
| 296 | 285 | ||
| 297 | /* | 286 | /* |
| 298 | * Backward ring buffer is full. We still have a chance to read | 287 | * Backward ring buffer is full. We still have a chance to read |
| 299 | * most of data from it. | 288 | * most of data from it. |
| 300 | */ | 289 | */ |
| 301 | if (overwrite_rb_find_range(data, md->mask, head, &start, &end)) | 290 | if (overwrite_rb_find_range(data, md->mask, head, startp, endp)) |
| 302 | return -1; | 291 | return -EINVAL; |
| 303 | } | 292 | } |
| 304 | 293 | ||
| 294 | return 0; | ||
| 295 | } | ||
| 296 | |||
| 297 | int perf_mmap__push(struct perf_mmap *md, bool overwrite, | ||
| 298 | void *to, int push(void *to, void *buf, size_t size)) | ||
| 299 | { | ||
| 300 | u64 head = perf_mmap__read_head(md); | ||
| 301 | u64 end, start; | ||
| 302 | unsigned char *data = md->base + page_size; | ||
| 303 | unsigned long size; | ||
| 304 | void *buf; | ||
| 305 | int rc = 0; | ||
| 306 | |||
| 307 | rc = perf_mmap__read_init(md, overwrite, &start, &end); | ||
| 308 | if (rc < 0) | ||
| 309 | return (rc == -EAGAIN) ? 0 : -1; | ||
| 310 | |||
| 311 | size = end - start; | ||
| 312 | |||
| 305 | if ((start & md->mask) + size != (end & md->mask)) { | 313 | if ((start & md->mask) + size != (end & md->mask)) { |
| 306 | buf = &data[start & md->mask]; | 314 | buf = &data[start & md->mask]; |
| 307 | size = md->mask + 1 - (start & md->mask); | 315 | size = md->mask + 1 - (start & md->mask); |
| @@ -327,3 +335,14 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, | |||
| 327 | out: | 335 | out: |
| 328 | return rc; | 336 | return rc; |
| 329 | } | 337 | } |
| 338 | |||
| 339 | /* | ||
| 340 | * Mandatory for overwrite mode | ||
| 341 | * The direction of overwrite mode is backward. | ||
| 342 | * The last perf_mmap__read() will set tail to map->prev. | ||
| 343 | * Need to correct the map->prev to head which is the end of next read. | ||
| 344 | */ | ||
| 345 | void perf_mmap__read_done(struct perf_mmap *map) | ||
| 346 | { | ||
| 347 | map->prev = perf_mmap__read_head(map); | ||
| 348 | } | ||
diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index e43d7b55a55f..ec7d3a24e276 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h | |||
| @@ -65,8 +65,6 @@ void perf_mmap__put(struct perf_mmap *map); | |||
| 65 | 65 | ||
| 66 | void perf_mmap__consume(struct perf_mmap *map, bool overwrite); | 66 | void perf_mmap__consume(struct perf_mmap *map, bool overwrite); |
| 67 | 67 | ||
| 68 | void perf_mmap__read_catchup(struct perf_mmap *md); | ||
| 69 | |||
| 70 | static inline u64 perf_mmap__read_head(struct perf_mmap *mm) | 68 | static inline u64 perf_mmap__read_head(struct perf_mmap *mm) |
| 71 | { | 69 | { |
| 72 | struct perf_event_mmap_page *pc = mm->base; | 70 | struct perf_event_mmap_page *pc = mm->base; |
| @@ -87,11 +85,17 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail) | |||
| 87 | } | 85 | } |
| 88 | 86 | ||
| 89 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map); | 87 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map); |
| 90 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map); | 88 | |
| 89 | union perf_event *perf_mmap__read_event(struct perf_mmap *map, | ||
| 90 | bool overwrite, | ||
| 91 | u64 *startp, u64 end); | ||
| 91 | 92 | ||
| 92 | int perf_mmap__push(struct perf_mmap *md, bool backward, | 93 | int perf_mmap__push(struct perf_mmap *md, bool backward, |
| 93 | void *to, int push(void *to, void *buf, size_t size)); | 94 | void *to, int push(void *to, void *buf, size_t size)); |
| 94 | 95 | ||
| 95 | size_t perf_mmap__mmap_len(struct perf_mmap *map); | 96 | size_t perf_mmap__mmap_len(struct perf_mmap *map); |
| 96 | 97 | ||
| 98 | int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, | ||
| 99 | u64 *startp, u64 *endp); | ||
| 100 | void perf_mmap__read_done(struct perf_mmap *map); | ||
| 97 | #endif /*__PERF_MMAP_H */ | 101 | #endif /*__PERF_MMAP_H */ |
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 443892dabedb..1019bbc5dbd8 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
| @@ -340,35 +340,15 @@ size_t hex_width(u64 v) | |||
| 340 | return n; | 340 | return n; |
| 341 | } | 341 | } |
| 342 | 342 | ||
| 343 | static int hex(char ch) | ||
| 344 | { | ||
| 345 | if ((ch >= '0') && (ch <= '9')) | ||
| 346 | return ch - '0'; | ||
| 347 | if ((ch >= 'a') && (ch <= 'f')) | ||
| 348 | return ch - 'a' + 10; | ||
| 349 | if ((ch >= 'A') && (ch <= 'F')) | ||
| 350 | return ch - 'A' + 10; | ||
| 351 | return -1; | ||
| 352 | } | ||
| 353 | |||
| 354 | /* | 343 | /* |
| 355 | * While we find nice hex chars, build a long_val. | 344 | * While we find nice hex chars, build a long_val. |
| 356 | * Return number of chars processed. | 345 | * Return number of chars processed. |
| 357 | */ | 346 | */ |
| 358 | int hex2u64(const char *ptr, u64 *long_val) | 347 | int hex2u64(const char *ptr, u64 *long_val) |
| 359 | { | 348 | { |
| 360 | const char *p = ptr; | 349 | char *p; |
| 361 | *long_val = 0; | ||
| 362 | |||
| 363 | while (*p) { | ||
| 364 | const int hex_val = hex(*p); | ||
| 365 | 350 | ||
| 366 | if (hex_val < 0) | 351 | *long_val = strtoull(ptr, &p, 16); |
| 367 | break; | ||
| 368 | |||
| 369 | *long_val = (*long_val << 4) | hex_val; | ||
| 370 | p++; | ||
| 371 | } | ||
| 372 | 352 | ||
| 373 | return p - ptr; | 353 | return p - ptr; |
| 374 | } | 354 | } |
