lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 28 May 2019 09:07:03 +0100
From:   Lionel Landwerlin <lionel.g.landwerlin@...el.com>
To:     Arnaldo Carvalho de Melo <acme@...nel.org>,
        Ingo Molnar <mingo@...nel.org>,
        Thomas Gleixner <tglx@...utronix.de>
Cc:     Jiri Olsa <jolsa@...nel.org>, Namhyung Kim <namhyung@...nel.org>,
        Clark Williams <williams@...hat.com>,
        linux-kernel@...r.kernel.org, linux-perf-users@...r.kernel.org,
        Arnaldo Carvalho de Melo <acme@...hat.com>,
        Adrian Hunter <adrian.hunter@...el.com>,
        Brendan Gregg <brendan.d.gregg@...il.com>,
        Christian König <christian.koenig@....com>,
        Chunming Zhou <david1.zhou@....com>,
        Dave Airlie <airlied@...hat.com>,
        Luis Cláudio Gonçalves <lclaudio@...hat.com>
Subject: Re: [PATCH 25/44] tools headers UAPI: Sync drm/drm.h with the kernel

On 27/05/2019 23:37, Arnaldo Carvalho de Melo wrote:
> From: Arnaldo Carvalho de Melo <acme@...hat.com>
>
> To pick up the changes in these csets:
>
>    060cebb20cdb ("drm: introduce a capability flag for syncobj timeline support")
>    50d1ebef79ef ("drm/syncobj: add timeline signal ioctl for syncobj v5")
>    ea569910cbab ("drm/syncobj: add transition iotcls between binary and timeline v2")
>    27b575a9aa2f ("drm/syncobj: add timeline payload query ioctl v6")
>    01d6c3578379 ("drm/syncobj: add support for timeline point wait v8")
>    783195ec1cad ("drm/syncobj: disable the timeline UAPI for now v2")
>    48197bc564c7 ("drm: add syncobj timeline support v9")
>
> Which automagically results in the following new ioctls being recognized
> by the 'perf trace' ioctl cmd arg beautifier:
>
>    $ tools/perf/trace/beauty/drm_ioctl.sh > /tmp/before
>    $ cp include/uapi/drm/drm.h tools/include/uapi/drm/drm.h
>    $ tools/perf/trace/beauty/drm_ioctl.sh > /tmp/after
>    $ diff -u /tmp/before /tmp/after
>    --- /tmp/before	2019-05-22 10:25:31.443151182 -0300
>    +++ /tmp/after	2019-05-22 10:25:46.449354819 -0300
>    @@ -103,6 +103,10 @@
>     	[0xC7] = "MODE_LIST_LESSEES",
>     	[0xC8] = "MODE_GET_LEASE",
>     	[0xC9] = "MODE_REVOKE_LEASE",
>    +	[0xCA] = "SYNCOBJ_TIMELINE_WAIT",
>    +	[0xCB] = "SYNCOBJ_QUERY",
>    +	[0xCC] = "SYNCOBJ_TRANSFER",
>    +	[0xCD] = "SYNCOBJ_TIMELINE_SIGNAL",
>     	[DRM_COMMAND_BASE + 0x00] = "I915_INIT",
>     	[DRM_COMMAND_BASE + 0x01] = "I915_FLUSH",
>     	[DRM_COMMAND_BASE + 0x02] = "I915_FLIP",
>      $
>
> I.e. the strace like raw_tracepoint:sys_enter handler in 'perf trace'
> will get the cmd integer value and map it to the string.
>
> At some point it should be possible to translate from string to integer
> and use to filter using expressions such as:
>
>     # perf trace -e ioctl/cmd==DRM_IOCTL_SYNCOBJ*/
>
> Or some more suitable syntax to express that only these ioctls when
> acting on DRM fds should be shown.
>
> Cc: Adrian Hunter <adrian.hunter@...el.com>
> Cc: Brendan Gregg <brendan.d.gregg@...il.com>
> Cc: Christian König <christian.koenig@....com>
> Cc: Chunming Zhou <david1.zhou@....com>
> Cc: Dave Airlie <airlied@...hat.com>
> Cc: Jiri Olsa <jolsa@...nel.org>
> Cc: Lionel Landwerlin <lionel.g.landwerlin@...el.com>
> Cc: Luis Cláudio Gonçalves <lclaudio@...hat.com>
> Cc: Namhyung Kim <namhyung@...nel.org>
> Link: https://lkml.kernel.org/n/tip-jrc9ogw33w4zgqc3pu7o1l3g@git.kernel.org
> Signed-off-by: Arnaldo Carvalho de Melo <acme@...hat.com>


Acked-by: Lionel Landwerlin <lionel.g.landwerlin@...el.com>


> ---
>   tools/include/uapi/drm/drm.h | 37 ++++++++++++++++++++++++++++++++++++
>   1 file changed, 37 insertions(+)
>
> diff --git a/tools/include/uapi/drm/drm.h b/tools/include/uapi/drm/drm.h
> index 300f336633f2..661d73f9a919 100644
> --- a/tools/include/uapi/drm/drm.h
> +++ b/tools/include/uapi/drm/drm.h
> @@ -649,6 +649,7 @@ struct drm_gem_open {
>   #define DRM_CAP_PAGE_FLIP_TARGET	0x11
>   #define DRM_CAP_CRTC_IN_VBLANK_EVENT	0x12
>   #define DRM_CAP_SYNCOBJ		0x13
> +#define DRM_CAP_SYNCOBJ_TIMELINE	0x14
>   
>   /** DRM_IOCTL_GET_CAP ioctl argument type */
>   struct drm_get_cap {
> @@ -735,8 +736,18 @@ struct drm_syncobj_handle {
>   	__u32 pad;
>   };
>   
> +struct drm_syncobj_transfer {
> +	__u32 src_handle;
> +	__u32 dst_handle;
> +	__u64 src_point;
> +	__u64 dst_point;
> +	__u32 flags;
> +	__u32 pad;
> +};
> +
>   #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0)
>   #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1)
> +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */
>   struct drm_syncobj_wait {
>   	__u64 handles;
>   	/* absolute timeout */
> @@ -747,12 +758,33 @@ struct drm_syncobj_wait {
>   	__u32 pad;
>   };
>   
> +struct drm_syncobj_timeline_wait {
> +	__u64 handles;
> +	/* wait on specific timeline point for every handles*/
> +	__u64 points;
> +	/* absolute timeout */
> +	__s64 timeout_nsec;
> +	__u32 count_handles;
> +	__u32 flags;
> +	__u32 first_signaled; /* only valid when not waiting all */
> +	__u32 pad;
> +};
> +
> +
>   struct drm_syncobj_array {
>   	__u64 handles;
>   	__u32 count_handles;
>   	__u32 pad;
>   };
>   
> +struct drm_syncobj_timeline_array {
> +	__u64 handles;
> +	__u64 points;
> +	__u32 count_handles;
> +	__u32 pad;
> +};
> +
> +
>   /* Query current scanout sequence number */
>   struct drm_crtc_get_sequence {
>   	__u32 crtc_id;		/* requested crtc_id */
> @@ -909,6 +941,11 @@ extern "C" {
>   #define DRM_IOCTL_MODE_GET_LEASE	DRM_IOWR(0xC8, struct drm_mode_get_lease)
>   #define DRM_IOCTL_MODE_REVOKE_LEASE	DRM_IOWR(0xC9, struct drm_mode_revoke_lease)
>   
> +#define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT	DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait)
> +#define DRM_IOCTL_SYNCOBJ_QUERY		DRM_IOWR(0xCB, struct drm_syncobj_timeline_array)
> +#define DRM_IOCTL_SYNCOBJ_TRANSFER	DRM_IOWR(0xCC, struct drm_syncobj_transfer)
> +#define DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL	DRM_IOWR(0xCD, struct drm_syncobj_timeline_array)
> +
>   /**
>    * Device specific ioctls should only be in their respective headers
>    * The device specific ioctl range is from 0x40 to 0x9f.


Powered by blists - more mailing lists