From patchwork Mon Nov 5 08:07:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10667551 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D872A13BF for ; Mon, 5 Nov 2018 08:07:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CB9C2293F0 for ; Mon, 5 Nov 2018 08:07:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BFE48296B0; Mon, 5 Nov 2018 08:07:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 38CF3293F0 for ; Mon, 5 Nov 2018 08:07:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 40F1D6E13A; Mon, 5 Nov 2018 08:07:40 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0044.outbound.protection.outlook.com [104.47.40.44]) by gabe.freedesktop.org (Postfix) with ESMTPS id 39D826E137 for ; Mon, 5 Nov 2018 08:07:38 +0000 (UTC) Received: from MWHPR12CA0064.namprd12.prod.outlook.com (2603:10b6:300:103::26) by CY1PR12MB0619.namprd12.prod.outlook.com (2a01:111:e400:c43c::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1294.21; Mon, 5 Nov 2018 08:07:36 +0000 Received: from DM3NAM03FT065.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::207) by MWHPR12CA0064.outlook.office365.com (2603:10b6:300:103::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1294.21 via Frontend Transport; Mon, 5 Nov 2018 08:07:36 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV02.amd.com (165.204.84.17) by DM3NAM03FT065.mail.protection.outlook.com (10.152.82.254) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1294.14 via Frontend Transport; Mon, 5 Nov 2018 08:07:35 +0000 Received: from zhoucm1.amd.com (10.34.1.3) by SATLEXCHOV02.amd.com (10.181.40.72) with Microsoft SMTP Server id 14.3.389.1; Mon, 5 Nov 2018 02:07:34 -0600 From: Chunming Zhou To: Subject: [PATCH 3/5] drm: add timeline support for syncobj export/import Date: Mon, 5 Nov 2018 16:07:18 +0800 Message-ID: <20181105080720.2728-3-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181105080720.2728-1-david1.zhou@amd.com> References: <20181105080720.2728-1-david1.zhou@amd.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(346002)(376002)(39860400002)(396003)(136003)(2980300002)(428003)(189003)(199004)(7696005)(186003)(23676004)(66574009)(5660300001)(126002)(50466002)(68736007)(4326008)(305945005)(26005)(86362001)(77096007)(11346002)(336012)(426003)(478600001)(53936002)(36756003)(14444005)(446003)(2870700001)(53416004)(2351001)(106466001)(72206003)(5820100001)(47776003)(476003)(76176011)(105586002)(6916009)(2906002)(97736004)(50226002)(104016004)(8936002)(6666004)(356004)(486006)(1076002)(316002)(54906003)(2616005)(8676002)(81166006)(81156014); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0619; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT065; 1:lfn/vzAOOLYlwEoOY6dAP49eMAEaeJggJ9azNSSVepQGCJuO1TVXDh4PrCpQ445AHZyjrfyWkHq846mnu7wnlfAy/mtCpt3hA/waPOYdRxZJHCj7JzJwqT+D1A+nJjq+ X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3c8ec54d-f7f3-4123-575b-08d642f5bf17 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060); SRVR:CY1PR12MB0619; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0619; 3:L7/MYvSfx3sjEGQ6ZieHwm7jOxrTrSBhnV5CjDHzA0hsHBGqzGexzaNWhNS3OSFj+LWQPTIrWH/93mPGfqaPpWUwNP37F9Zh4SzrfCCSjnvt1h8Qgwh7yr6ePYtwjhcWth+hM1ALilzeHqnNF9Q8wegaEdYf/u4KrsL5eLQaPQyES334esH81fDaRajWsmB4TrDn+VGovpLMY9abj4mFR20XkipZAx0XGIV0KIKijRtJYpe2+0OIjwLSi62mo2lokunYKTi80hMOs0NR0ZlOtLP4zMCw+C2vt7E63PhZLTw3LLzqSGh08SeLyIWeUit37bVNwfTWwMdPi8SJjfYidiR2qtbqTeSkThg2FW2tlJ8=; 25:U/0H20xddUVL1BDIDVoFbQsQwLVK6bZCzkOmZfmeC+wE4bGyT3eXcwcfRCG6SVCzmhDCfeqO9h1ak4QPceSs4x+9adcTpFu1yLMJ1QwqIt96q9aHGXzpy/9HmFNo5+8E6d04wHuFtacTM8c6YClBKtVGHO35j87EpQ/60GemnLufPbf8ro3wHQx5tpKbMkt8QyzcHqPooLKyWkplN9H82SO9KtXvuH6UTjaSwpoINtlQLecwJeMM0yuW9TuHr3VsPYZxnjhEYQjM5K4GGQxLpWO9JVsCDeVt4Vwi99oRlxtzm1XDiUH2vPWQGJoXFR5Dwcx1npf9f3Xu+H4fKEV6Tg== X-MS-TrafficTypeDiagnostic: CY1PR12MB0619: X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0619; 31:FJNqJAD+t1DxcPE/VOsGs5NJyR8aJZWP4LmQOwQB5AGUR2nz1FAEbkWSgj87d9JrqD8MQbYCf06gk7JZarTgT9tdRXnqBbExrryEZhEILKjznHrdbm5N7DHq4kXU90kp5qIsrfSsceCRuSV4+E1NPtFhJ2lkUck/69LQgxQVFwDsq/pMdH67H9PusxnS3wCTaRfsSFs8/7tTa6W8y5NbrEKSK/nLBTuLjzPDa/7STcs=; 20:a3Xg66Eq6U++p9oaeHkL5arnr7A+pm0RvvjWpsbq+zlfcBOIzuFk9n2CUAW+LCwHSVy2hx8R2e3nWO3egsScwYGHljLhaFZssLPF+an1K40e4hSvYZLJL3Q2GLgjby+ug6bLIWA0nf0cBAeLeYfkxjukN/5H5RWK1wjvgdksefYfOG+1D1T9inaUYaMDPLMfqtg0Lr0RSYTawP8hnN177RHoK8KVMHC7Lz0ZbDnSf7N3SkffaJQ4i7HKYaaMX7jLelaDQhkQmgjWEI1QEWu93BUbvsuUW2JGH6dPq0+ioN6JC7YIQiOnDRoxzRpa+hdVdEQaurg1Pk7xOTQDuJZ/w7X44tnrfjr0B3Q5M1WtEsS5vj9+0syKccRgt07TTQWzeoT3wXj66Ht/bAVEeYwfCptJ5eILTSLYVz7Tzhg7F4nR5ysn6wR4LTT0u02LDCm2uBdm+Y3IwHmHa0tySpAU+DhvV1nEXa+oLKyxBTeWDekx+dWkcqZORVlRkou2t+YQ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93003095)(3231382)(944501410)(52105095)(6055026)(148016)(149066)(150057)(6041310)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:CY1PR12MB0619; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0619; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0619; 4:ltH4MGoR2vR8UY39Q0l8FajT/YTlwxyKRkWO1E95zQfi1TsTZ6SRYBHzd++lTnU5eV9xRfiaszv2jsWS5N0J2Xji8nzjS2s67i7Y3zhhI+SfI5u4PCBFP4tVLnFPChPfB3TFwcbif5joX0Dp7N+6Dyp9zAVDfY0bSwRMoYJ0ZrOhefBKBtyNzAn9fBt+eaC5XiCdgQIJbglNgOM8c914KiDhMxTJOPBh3wCbq6xtYEC4O22zGuTokRixgkEpgELROCWJXMXc1jq/fCAxedn3sr4BBlL+ZGO0I3KzVfP18ytanR3YMrR7F0ksuhR4SheX X-Forefront-PRVS: 08476BC6EF X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BCY1PR12MB0619=3B23=3AJM03hrd?= =?utf-8?q?4hnKVrv99dHeCcnR89o0wpp59KUOX/cg8zzrlN+S+4mST5jwUedLP6/zPsRwMP0GA?= =?utf-8?q?wfjAivedvd9mk8u0xloNkagL7aaZcwznaTxOOVZUztMvFuokr9eW+UmOa48FmMCHn?= =?utf-8?q?C/JrrFTgmzDw1h59kvJ+D1dVHF8uJtS6m4CKfYu4arbDjBA9yFVR6u3GwrgwFrX5r?= =?utf-8?q?iSRJOMpV6qs/KfSnXfLv1MXxYrGAu4S654qGzvDYrwVTGy9ALGlt0EVuuWLTiCmhU?= =?utf-8?q?Mq4SZ72HUKxiaXviYxEb2IX2zoIILX9btG6gPKH+4lOCYpr8gOaJmPfG6YQiDQWNQ?= =?utf-8?q?6mkdwG2n2ycKWL1v+rmKdfOgGfkhDcE/5oPzbe/ba1DoYq4zkh9Q8LwrDouppeegM?= =?utf-8?q?WE3nVyXHi4gdOoOfN93LdLUxf7LpbCm4f4yTBz4+3PuX/7NSczXoOo9rNo9hez98i?= =?utf-8?q?yzgf6J/F/V2UJ2CWxqeGt4avlz+nFPkDjO+VgaMN7KoCNetIoZqPhEEbJDlSa8H5E?= =?utf-8?q?zrv1PyCXbtxnuNofZGzr5+2LX9U2ekZ9h8bh5P1jliMEtqak/3cAbvFF3ZEsoOEUA?= =?utf-8?q?kSMvjXBNikeSDX1eQjRiaSXYyDxmUml/Xr3AoFJRCxAxT3Po4OhT+NE30jRd7PU6p?= =?utf-8?q?bpCqfbc3X3UP7x/OJbmWLQTXnDeGI0gkFBEDKFQZQI01vc6RZTt/mVKLqVdOSWFux?= =?utf-8?q?ZabvG/xr2AVR8JcDmC2V1rtlcfoxSNesR2n0RxeJ5hAeJgBTcLQwVMYiHfMydbmBE?= =?utf-8?q?Zz4Q8hEzCK7DFvF8k9mmv0L7kMDJadG+XoWRpJFLWG9c+QOuefsRTVJIiePSn+33U?= =?utf-8?q?rhIdL4C0Ovvv9hqpNimHIUtdbuCbH6xu4Ky7r5XYPQefXvmzChU/C9r6zwHVXzSTy?= =?utf-8?q?1Lm23jbfmm7BYMBn8R+KUJfHZ8HA+EdW7g0WN3gICD0fVmCgLhqsmMlzP6UTsQnKE?= =?utf-8?q?GBPbPBD1Egkxe35+HMpd3YhKrVBpGv/IsWMyWJ80ClzMZnTiwhrOGOup6wtHVxV4j?= =?utf-8?q?5J+XVYUebN5Kq+MQ2da8dopmH5nOGNLaHBhCWxcw9Nw4dxkSiEAx8h3iykYLs9toY?= =?utf-8?q?q1SYnBsYyzg1iNpnGj5JsHcehYGkB8Zn0AdjYW8N3jjoJu3kkIlGH6xCpnSsiIi/I?= =?utf-8?q?8uuS6YR1HunOmIULMvwfD9cUPL6BG5kS6mQ2BY2jnJsbSGhpwRga+nZUpB5b0fU9y?= =?utf-8?q?XUj2NvOcvLrQmaby8=3D?= X-Microsoft-Antispam-Message-Info: pZfzDWBFVERz4v/baUyysZjHfueUBKwkpGSFtm5jGfL5FckGX/0+AvVNdszu+PHRG1tegOZsrC+hUT4AT3utK1nvn1IuH5qL92nz1lclffvIm7dj76an7iHbkKPqb6v2l4rDkL3YspRKWmsNoOWZPrypNA1SJapenQu77ZsfqSJ56Nf6DAuGntGcASI9vv4lF4fpgKCk2I5tQN0otwQJxP+qfapLeLWXEShciihjr0KISYVFKyXhhgJlh2J3PbBaxVrIwmSi1zQveKwGatdjlHoRD1HQAFFdqQppgkoqrGIi72BAACJ6ieY4moIrlQ/x1CDv8hr/MEdiex5ZP+B/CbhJ/zudT8AYqZgUwl9Mfl4= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0619; 6:t9dhJBXaIcWUj9u9NWmQeYrv+IzJ+sJ6XZcnL24tY/pZIe7+Tzf1NvqftrvsyQTlBI16xG7veSAy2+4mLi+YRWZXf3IoTTyqBEjgVLRd4rQM6t19rYZYJKqjpIog0cuuwHAhW7EXfq2lstqejd1H06r0GLMVe27bLd3LMxWA/ZHT+1vLNaT2ijMmmCIobiG7dR6uXDZzByvQ+8tXmM1QND7YCUNpufl/f3g69axO9xFZ4BdIu9G4RRpMTkbQfOZehB9Yyy57dyoAYBx49gDxjr9K7r0DvXFhQdOzZrVWk/qWNmVEosAn7wkGV5u9UfoJXhpmaN2tKwvK6GKAGd0OXGFDlmujRWqUzZn7MqgreCltJqKA5WGb28picaEhoMPfutIDUrdZGQGgQ9lAMbqtrg9X27swnr3ziTms+pRyeH/GkjYGxrdaa2lBgvVWOLASNZhiV81zFT1QNP5Momu0kQ==; 5:ZACMeWf3qMOSeVpd/IYh8n5BQIsWEomOy4fiU+X9aXb3mJbug3Dsuap9XxK/zD/yq/wZvNkjegkDN3hTRceWW4o9S88ccBm6K4I6ceml5CIrfDuBw6Y0VzsljiQ5MQCEp7qqjQ/j83OY4+ZQZ13N2lA4k2aKKN713+E7anjeeM8=; 7:hgF6zRiW1CZLh4JTxWYa7LnC6yeF5CoPtSdduDi7bG/p+IsVNtq2tcvLgdw68zZeiUQ1S1sBSTE2AKA1oeHBClkQvNWmH+bIm3STM3s+xmtVOBqF2JjVWfSVq2t+62nuWOS+v/PNzDfyM6hS+AIjkA== SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0619; 20:WqtaUFltd2IUHI/09bgs4LXtCl3FQhdBWRSKqUC5IzY/aLARXvsnOFM7cIPhzk/cPaA5I2P3f9SNjWd42H2OURpmwDacO0YzvcBYrlSdBeFnvMNCBB9nPeyk+T8jcQb4Hhsf8jH8tGvvWL2AAQmCt+uPL/cJsHvO4xR30oDfxJd51Vucf3/glOa2DWlt8s40hiknX+34jm3D7chKhNapPN+iA+A6nAILsOdkuVz3D+nDaWbfOhXnhPNQiDZGyKeG X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Nov 2018 08:07:35.2871 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3c8ec54d-f7f3-4123-575b-08d642f5bf17 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0619 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Rakos , Jason Ekstrand , Dave Airlie , =?utf-8?q?Christian_K=C3=B6nig?= Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP user space can specify timeline point fence to export/import. Signed-off-by: Chunming Zhou Cc: Daniel Rakos Cc: Jason Ekstrand Cc: Bas Nieuwenhuizen Cc: Dave Airlie Cc: Christian König Cc: Chris Wilson --- drivers/gpu/drm/drm_internal.h | 4 ++ drivers/gpu/drm/drm_ioctl.c | 4 ++ drivers/gpu/drm/drm_syncobj.c | 76 ++++++++++++++++++++++++++++++---- include/uapi/drm/drm.h | 11 +++++ 4 files changed, 88 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 9c4826411a3c..5ad6cbdb68ab 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -181,6 +181,10 @@ int drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); int drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); +int drm_syncobj_handle_to_fd_ioctl2(struct drm_device *dev, void *data, + struct drm_file *file_private); +int drm_syncobj_fd_to_handle_ioctl2(struct drm_device *dev, void *data, + struct drm_file *file_private); int drm_syncobj_wait_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); int drm_syncobj_timeline_wait_ioctl(struct drm_device *dev, void *data, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 7578ef6dc1d1..364d26e949cf 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -673,6 +673,10 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, drm_syncobj_fd_to_handle_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD2, drm_syncobj_handle_to_fd_ioctl2, + DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE2, drm_syncobj_fd_to_handle_ioctl2, + DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_WAIT, drm_syncobj_wait_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT, drm_syncobj_timeline_wait_ioctl, diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index a01b17992213..176b8fa6eeb9 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -677,7 +677,7 @@ static int drm_syncobj_fd_to_handle(struct drm_file *file_private, } static int drm_syncobj_import_sync_file_fence(struct drm_file *file_private, - int fd, int handle) + int fd, int handle, uint64_t point) { struct dma_fence *fence = sync_file_get_fence(fd); struct drm_syncobj *syncobj; @@ -691,14 +691,14 @@ static int drm_syncobj_import_sync_file_fence(struct drm_file *file_private, return -ENOENT; } - drm_syncobj_replace_fence(syncobj, 0, fence); + drm_syncobj_replace_fence(syncobj, point, fence); dma_fence_put(fence); drm_syncobj_put(syncobj); return 0; } static int drm_syncobj_export_sync_file(struct drm_file *file_private, - int handle, int *p_fd) + int handle, uint64_t point, int *p_fd) { int ret; struct dma_fence *fence; @@ -708,7 +708,7 @@ static int drm_syncobj_export_sync_file(struct drm_file *file_private, if (fd < 0) return fd; - ret = drm_syncobj_find_fence(file_private, handle, 0, 0, &fence); + ret = drm_syncobj_find_fence(file_private, handle, point, 0, &fence); if (ret) goto err_put_fd; @@ -817,9 +817,14 @@ drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data, args->flags != DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE) return -EINVAL; - if (args->flags & DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE) + if (args->flags & DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE) { + struct drm_syncobj *syncobj = drm_syncobj_find(file_private, + args->handle); + if (!syncobj || syncobj->type != DRM_SYNCOBJ_TYPE_BINARY) + return -EINVAL; return drm_syncobj_export_sync_file(file_private, args->handle, - &args->fd); + 0, &args->fd); + } return drm_syncobj_handle_to_fd(file_private, args->handle, &args->fd); @@ -841,15 +846,72 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data, args->flags != DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE) return -EINVAL; + if (args->flags & DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE) { + struct drm_syncobj *syncobj = drm_syncobj_find(file_private, + args->handle); + if (!syncobj || syncobj->type != DRM_SYNCOBJ_TYPE_BINARY) + return -EINVAL; + return drm_syncobj_import_sync_file_fence(file_private, + args->fd, + args->handle, + 0); + } + + return drm_syncobj_fd_to_handle(file_private, args->fd, + &args->handle); +} + +int +drm_syncobj_handle_to_fd_ioctl2(struct drm_device *dev, void *data, + struct drm_file *file_private) +{ + struct drm_syncobj_handle2 *args = data; + + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) + return -ENODEV; + + if (args->pad) + return -EINVAL; + + if (args->flags != 0 && + args->flags != DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE) + return -EINVAL; + + if (args->flags & DRM_SYNCOBJ_HANDLE_TO_FD_FLAGS_EXPORT_SYNC_FILE) + return drm_syncobj_export_sync_file(file_private, args->handle, + args->point, &args->fd); + + return drm_syncobj_handle_to_fd(file_private, args->handle, + &args->fd); +} + +int +drm_syncobj_fd_to_handle_ioctl2(struct drm_device *dev, void *data, + struct drm_file *file_private) +{ + struct drm_syncobj_handle2 *args = data; + + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) + return -ENODEV; + + if (args->pad) + return -EINVAL; + + if (args->flags != 0 && + args->flags != DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE) + return -EINVAL; + if (args->flags & DRM_SYNCOBJ_FD_TO_HANDLE_FLAGS_IMPORT_SYNC_FILE) return drm_syncobj_import_sync_file_fence(file_private, args->fd, - args->handle); + args->handle, + args->point); return drm_syncobj_fd_to_handle(file_private, args->fd, &args->handle); } + struct syncobj_wait_entry { struct task_struct *task; struct dma_fence *fence; diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 23c4979d8a1c..da5df2a42fc3 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -735,6 +735,15 @@ struct drm_syncobj_handle { __s32 fd; __u32 pad; }; +struct drm_syncobj_handle2 { + __u32 handle; + __u32 flags; + __u64 point; + + __s32 fd; + __u32 pad; +}; + #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) @@ -938,6 +947,8 @@ extern "C" { #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_query) +#define DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD2 DRM_IOWR(0xCC, struct drm_syncobj_handle2) +#define DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE2 DRM_IOWR(0xCD, struct drm_syncobj_handle2) /** * Device specific ioctls should only be in their respective headers