Pull more perf updates from Thomas Gleixner: "A rather large set of perf updates: Kernel: - Fix various initialization issues - Prevent creating [ku]probes for not CAP_SYS_ADMIN users Tooling: - Show only failing syscalls with 'perf trace --failure' (Arnaldo Carvalho de Melo) e.g: See what 'openat' syscalls are failing: # perf trace --failure -e openat 762.323 ( 0.007 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video2) = -1 ENOENT No such file or directory <SNIP N /dev/videoN open attempts... sigh, where is that improvised camera lid?!? > 790.228 ( 0.008 ms): VideoCapture/4566 openat(dfd: CWD, filename: /dev/video63) = -1 ENOENT No such file or directory ^C# - Show information about the event (freq, nr_samples, total period/nr_events) in the annotate --tui and --stdio2 'perf annotate' output, similar to the first line in the 'perf report --tui', but just for the samples for a the annotated symbol (Arnaldo Carvalho de Melo) - Introduce 'perf version --build-options' to show what features were linked, aliased as well as a shorter 'perf -vv' (Jin Yao) - Add a "dso_size" sort order (Kim Phillips) - Remove redundant ')' in the tracepoint output in 'perf trace' (Changbin Du) - Synchronize x86's cpufeatures.h, no effect on toolss (Arnaldo Carvalho de Melo) - Show group details on the title line in the annotate browser and 'perf annotate --stdio2' output, so that the per-event columns can have headers (Arnaldo Carvalho de Melo) - Fixup vertical line separating metrics from instructions and cleaning unused lines at the bottom, both in the annotate TUI browser (Arnaldo Carvalho de Melo) - Remove duplicated 'samples' in lost samples warning in 'perf report' (Arnaldo Carvalho de Melo) - Synchronize i915_drm.h, silencing the perf build process, automagically adding support for the new DRM_I915_QUERY ioctl (Arnaldo Carvalho de Melo) - Make auxtrace_queues__add_buffer() allocate struct buffer, from a patchkit already applied (Adrian Hunter) - Fix the --stdio2/TUI annotate output to include group details, be it for a recorded '{a,b,f}' explicit event group or when forcing group display using 'perf report --group' for a set of events not recorded as a group (Arnaldo Carvalho de Melo) - Fix display artifacts in the ui browser (base class for the annotate and main report/top TUI browser) related to the extra title lines work (Arnaldo Carvalho de Melo) - perf auxtrace refactorings, leftovers from a previously partially processed patchset (Adrian Hunter) - Fix the builtin clang build (Sandipan Das, Arnaldo Carvalho de Melo) - Synchronize i915_drm.h, silencing a perf build warning and in the process automagically adding support for a new ioctl command (Arnaldo Carvalho de Melo) - Fix a strncpy issue in uprobe tracing" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits) perf/core: Need CAP_SYS_ADMIN to create k/uprobe with perf_event_open() tracing/uprobe_event: Fix strncpy corner case perf/core: Fix perf_uprobe_init() perf/core: Fix perf_kprobe_init() perf/core: Fix use-after-free in uprobe_perf_close() perf tests clang: Fix function name for clang IR test perf clang: Add support for recent clang versions perf tools: Fix perf builds with clang support perf tools: No need to include namespaces.h in util.h perf hists browser: Remove leftover from row returned from refresh perf hists browser: Show extra_title_lines in the 'D' debug hotkey perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering tools headers uapi: Synchronize i915_drm.h perf report: Remove duplicated 'samples' in lost samples warning perf ui browser: Fixup cleaning unused lines at the bottom perf annotate browser: Fixup vertical line separating metrics from instructions perf annotate: Show group details on the title line perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer perf/x86/intel: Move regs->flags EXACT bit init perf trace: Remove redundant ')' ...
Showing the changes to tools/include/uapi (1 of 33 files). Show all
Unified · Split
| @@ -318,6 +318,7 @@ typedef struct _drm_i915_sarea { · 317 unmodified lines | ||
| 318 | 318 | #define DRM_I915_PERF_OPEN 0x36 |
| 319 | 319 | #define DRM_I915_PERF_ADD_CONFIG 0x37 |
| 320 | 320 | #define DRM_I915_PERF_REMOVE_CONFIG 0x38 |
| 321 | +#define DRM_I915_QUERY 0x39 | |
| 321 | 322 | |
| 322 | 323 | #define DRM_IOCTL_I915_INIT DRM_IOW( DRM_COMMAND_BASE + DRM_I915_INIT, drm_i915_init_t) |
| 323 | 324 | #define DRM_IOCTL_I915_FLUSH DRM_IO ( DRM_COMMAND_BASE + DRM_I915_FLUSH) |
| @@ -375,6 +376,7 @@ typedef struct _drm_i915_sarea { · 51 unmodified lines | ||
| 375 | 376 | #define DRM_IOCTL_I915_PERF_OPEN DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_OPEN, struct drm_i915_perf_open_param) |
| 376 | 377 | #define DRM_IOCTL_I915_PERF_ADD_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_ADD_CONFIG, struct drm_i915_perf_oa_config) |
| 377 | 378 | #define DRM_IOCTL_I915_PERF_REMOVE_CONFIG DRM_IOW(DRM_COMMAND_BASE + DRM_I915_PERF_REMOVE_CONFIG, __u64) |
| 379 | +#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query) | |
| 378 | 380 | |
| 379 | 381 | /* Allow drivers to submit batchbuffers directly to hardware, relying |
| 380 | 382 | * on the security mechanisms provided by hardware. |
| @@ -1358,7 +1360,9 @@ struct drm_intel_overlay_attrs { · 977 unmodified lines | ||
| 1358 | 1360 | * active on a given plane. |
| 1359 | 1361 | */ |
| 1360 | 1362 | |
| 1361 | −#define I915_SET_COLORKEY_NONE (1<<0) /* disable color key matching */ | |
| 1363 | +#define I915_SET_COLORKEY_NONE (1<<0) /* Deprecated. Instead set | |
| 1364 | + * flags==0 to disable colorkeying. | |
| 1365 | + */ | |
| 1362 | 1366 | #define I915_SET_COLORKEY_DESTINATION (1<<1) |
| 1363 | 1367 | #define I915_SET_COLORKEY_SOURCE (1<<2) |
| 1364 | 1368 | struct drm_intel_sprite_colorkey { |
| @@ -1604,15 +1608,115 @@ struct drm_i915_perf_oa_config { · 239 unmodified lines | ||
| 1604 | 1608 | __u32 n_flex_regs; |
| 1605 | 1609 | |
| 1606 | 1610 | /* |
| 1607 | − * These fields are pointers to tuples of u32 values (register | |
| 1608 | − * address, value). For example the expected length of the buffer | |
| 1609 | − * pointed by mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). | |
| 1611 | + * These fields are pointers to tuples of u32 values (register address, | |
| 1612 | + * value). For example the expected length of the buffer pointed by | |
| 1613 | + * mux_regs_ptr is (2 * sizeof(u32) * n_mux_regs). | |
| 1610 | 1614 | */ |
| 1611 | 1615 | __u64 mux_regs_ptr; |
| 1612 | 1616 | __u64 boolean_regs_ptr; |
| 1613 | 1617 | __u64 flex_regs_ptr; |
| 1614 | 1618 | }; |
| 1615 | 1619 | |
| 1620 | +struct drm_i915_query_item { | |
| 1621 | + __u64 query_id; | |
| 1622 | +#define DRM_I915_QUERY_TOPOLOGY_INFO 1 | |
| 1623 | + | |
| 1624 | + /* | |
| 1625 | + * When set to zero by userspace, this is filled with the size of the | |
| 1626 | + * data to be written at the data_ptr pointer. The kernel sets this | |
| 1627 | + * value to a negative value to signal an error on a particular query | |
| 1628 | + * item. | |
| 1629 | + */ | |
| 1630 | + __s32 length; | |
| 1631 | + | |
| 1632 | + /* | |
| 1633 | + * Unused for now. Must be cleared to zero. | |
| 1634 | + */ | |
| 1635 | + __u32 flags; | |
| 1636 | + | |
| 1637 | + /* | |
| 1638 | + * Data will be written at the location pointed by data_ptr when the | |
| 1639 | + * value of length matches the length of the data to be written by the | |
| 1640 | + * kernel. | |
| 1641 | + */ | |
| 1642 | + __u64 data_ptr; | |
| 1643 | +}; | |
| 1644 | + | |
| 1645 | +struct drm_i915_query { | |
| 1646 | + __u32 num_items; | |
| 1647 | + | |
| 1648 | + /* | |
| 1649 | + * Unused for now. Must be cleared to zero. | |
| 1650 | + */ | |
| 1651 | + __u32 flags; | |
| 1652 | + | |
| 1653 | + /* | |
| 1654 | + * This points to an array of num_items drm_i915_query_item structures. | |
| 1655 | + */ | |
| 1656 | + __u64 items_ptr; | |
| 1657 | +}; | |
| 1658 | + | |
| 1659 | +/* | |
| 1660 | + * Data written by the kernel with query DRM_I915_QUERY_TOPOLOGY_INFO : | |
| 1661 | + * | |
| 1662 | + * data: contains the 3 pieces of information : | |
| 1663 | + * | |
| 1664 | + * - the slice mask with one bit per slice telling whether a slice is | |
| 1665 | + * available. The availability of slice X can be queried with the following | |
| 1666 | + * formula : | |
| 1667 | + * | |
| 1668 | + * (data[X / 8] >> (X % 8)) & 1 | |
| 1669 | + * | |
| 1670 | + * - the subslice mask for each slice with one bit per subslice telling | |
| 1671 | + * whether a subslice is available. The availability of subslice Y in slice | |
| 1672 | + * X can be queried with the following formula : | |
| 1673 | + * | |
| 1674 | + * (data[subslice_offset + | |
| 1675 | + * X * subslice_stride + | |
| 1676 | + * Y / 8] >> (Y % 8)) & 1 | |
| 1677 | + * | |
| 1678 | + * - the EU mask for each subslice in each slice with one bit per EU telling | |
| 1679 | + * whether an EU is available. The availability of EU Z in subslice Y in | |
| 1680 | + * slice X can be queried with the following formula : | |
| 1681 | + * | |
| 1682 | + * (data[eu_offset + | |
| 1683 | + * (X * max_subslices + Y) * eu_stride + | |
| 1684 | + * Z / 8] >> (Z % 8)) & 1 | |
| 1685 | + */ | |
| 1686 | +struct drm_i915_query_topology_info { | |
| 1687 | + /* | |
| 1688 | + * Unused for now. Must be cleared to zero. | |
| 1689 | + */ | |
| 1690 | + __u16 flags; | |
| 1691 | + | |
| 1692 | + __u16 max_slices; | |
| 1693 | + __u16 max_subslices; | |
| 1694 | + __u16 max_eus_per_subslice; | |
| 1695 | + | |
| 1696 | + /* | |
| 1697 | + * Offset in data[] at which the subslice masks are stored. | |
| 1698 | + */ | |
| 1699 | + __u16 subslice_offset; | |
| 1700 | + | |
| 1701 | + /* | |
| 1702 | + * Stride at which each of the subslice masks for each slice are | |
| 1703 | + * stored. | |
| 1704 | + */ | |
| 1705 | + __u16 subslice_stride; | |
| 1706 | + | |
| 1707 | + /* | |
| 1708 | + * Offset in data[] at which the EU masks are stored. | |
| 1709 | + */ | |
| 1710 | + __u16 eu_offset; | |
| 1711 | + | |
| 1712 | + /* | |
| 1713 | + * Stride at which each of the EU masks for each subslice are stored. | |
| 1714 | + */ | |
| 1715 | + __u16 eu_stride; | |
| 1716 | + | |
| 1717 | + __u8 data[]; | |
| 1718 | +}; | |
| 1719 | + | |
| 1616 | 1720 | #if defined(__cplusplus) |
| 1617 | 1721 | } |
| 1618 | 1722 | #endif |