From patchwork Wed Sep 19 09:04:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10605537 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 9EE82112B for ; Wed, 19 Sep 2018 09:04:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E9CD2A806 for ; Wed, 19 Sep 2018 09:04:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 828D92ACD6; Wed, 19 Sep 2018 09:04:57 +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=BAD_ENC_HEADER,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 64D792A831 for ; Wed, 19 Sep 2018 09:04:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C05E36E4E0; Wed, 19 Sep 2018 09:04:41 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0081.outbound.protection.outlook.com [104.47.32.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id 76DE16E4DF; Wed, 19 Sep 2018 09:04:36 +0000 (UTC) Received: from DM3PR12CA0090.namprd12.prod.outlook.com (2603:10b6:0:57::34) by BN4PR12MB0740.namprd12.prod.outlook.com (2a01:111:e400:59bc::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.18; Wed, 19 Sep 2018 09:04:34 +0000 Received: from CO1NAM03FT046.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::202) by DM3PR12CA0090.outlook.office365.com (2603:10b6:0:57::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1143.18 via Frontend Transport; Wed, 19 Sep 2018 09:04:34 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT046.mail.protection.outlook.com (10.152.81.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.1164.13 via Frontend Transport; Wed, 19 Sep 2018 09:04:33 +0000 Received: from zhoucm1.amd.com (10.34.1.3) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Wed, 19 Sep 2018 04:04:31 -0500 From: Chunming Zhou To: Subject: [PATCH 5/6] drm/amdgpu: add timeline support in amdgpu CS Date: Wed, 19 Sep 2018 17:04:06 +0800 Message-ID: <20180919090407.24111-5-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180919090407.24111-1-david1.zhou@amd.com> References: <20180919090407.24111-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)(396003)(136003)(376002)(39860400002)(2980300002)(428003)(199004)(189003)(16586007)(8936002)(81166006)(8676002)(50466002)(50226002)(81156014)(104016004)(4326008)(450100002)(478600001)(97736004)(72206003)(68736007)(53936002)(2351001)(186003)(106466001)(36756003)(476003)(2906002)(2616005)(53416004)(11346002)(446003)(336012)(426003)(105586002)(305945005)(126002)(47776003)(77096007)(26005)(86362001)(5660300001)(356003)(6916009)(6666003)(316002)(1076002)(48376002)(7696005)(76176011)(486006)(51416003)(54906003)(14444005); DIR:OUT; SFP:1101; SCL:1; SRVR:BN4PR12MB0740; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; CO1NAM03FT046; 1:HLV8e4LqPtnBN9KMULobvhLOT8IwcWa/CVUCnk/P2wEO2+usEzLKx32T/rfFu/6J2mUEqXXTkjEmO/i6f2OzPxdPu26MTzz7fWILZNwQ45dZg+8OUc5bBwWh47PEOH96 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a58393df-5e0b-47fc-055e-08d61e0eeae9 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:BN4PR12MB0740; X-Microsoft-Exchange-Diagnostics: 1; BN4PR12MB0740; 3:dqlKPrJIIE5wobIr1Ax3qi7uEkK3QALzpOyPvHeo6XoWcp7w1/KUuhDR8eaNKgw0mnmSOj+GcZsmPKL59OBpj2CSnBtqn11I/yiJ2aVpNtk5mn2cVS4yQMxBqfOXZ6L7EGSpKOhdNMCTu9bP3Jm5nOpO+3f5zf+NzCJeWmFzWyZL4c5crPXuUg7JYNc8RdjOUm6K8D4DlOO6klMZnPn5oB9oU0zjpZZrbZpihhehhk2Kz5Z7xs4gYzK1+8YOzeg7MPvZHzK6Y/OW0tjQSpB69gSiLXrkpkVKkvfB+WdyvmsI7Nh4pqb5oMJannjUqerd60gxCTkAUPDKYBKjiYzQX9kKtVFVoE0hrmLLhwWCf6A=; 25:PrDslS/rhPTH60QINBZJK7igrFudNX+nXGzdnG+dFQef4XvnuGN4loigwsihpN8CJyJVgEhB4tXFTd5ZQ5T7dcDh996nU7caNR9D4tX3Ab5MbSILYTScxRcOU/zRrnU/Ut5xFcwBQFbPXLEU0WkpQPWXHamlvkNczy9/zdSYeAvImMEIbkjwlQ0seqm2ywT/2iWTJbSMlLGjyeOUjYlKE3V58zQTk0m8UAcPBgobLkmYcY6tMNEL08/Fj5Sc884lyELr2tKqk7Ft8Rcytra5Ah+qc6YGr3SeX9ACW7dNlbw2nooEq6P6liOpQVOThcuSCdbD1YOJwjA3zn2/OaD8TQ== X-MS-TrafficTypeDiagnostic: BN4PR12MB0740: X-Microsoft-Exchange-Diagnostics: 1; BN4PR12MB0740; 31:B+WEHv04rwbKgFOQzdpU7qu4VuY2XpkPC+siKpcHn1IvUYYpHZnLrPM9GGB2Y2bMbnS+0RJPbYkysT6iQPIpyNnJTN8rsgCYStcAr10HC+JVzmiBuFf+iCuLORTR+EdaVhew/Eg4n6MJAQ7bMmYqiskFVbzj7nIelwc3MVawNF+TjXKUHM2eQY6j2GvZemWsuIhtqYG7oTVwIBTKD7zJISnXoT76WfOqAUYeEkUEyH0=; 20:BsXQJs3iKjIOyO33ND0F//90lMwaOXYG6arMuUR77nDAAxclg4exM4P1zYbBECg5DyCoTV8IM0U5F+Qlo8xe1kApB5FsG+cKOdzzb9FRuSmSVsdT4MCnyzjVBy2leCWDboLvZMUML8pwl9m0fQ+Z4jKLcZrGna0+qWNy6bgmebPZo1ECwcL9uxOMc6rGLtW1imUA616GsUBeYsYeMGgUFzCG3Y4wfewKqQlw4Dgz7WGszZKuYwQzLQaopBnJkf00wCQSk3puNvU/MuJfVDUGtq/DPoElnRS0sCZUtbuNfghQS3QF+n+DYjUbRk9hSVl1YZAJJVTxyYYRMvXvX27ZgVJZNFqspjvAODaBT6+wYqugkWTbbTxzDru4Q+59Ej1wp0sPr8+Cd1i24WpgRmbqBuNiH51bWOp3cFQhmS61lg1qDmCUt4pX3h1/kOCpXBP0j4QCTxX9306wHKDfrzwLonkWXixoP9bnfIGXZJvQ4xatujHyLHuzsc6jGc9y9yfK 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)(3231355)(944501410)(52105095)(93006095)(93003095)(3002001)(10201501046)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(201708071742011)(7699050); SRVR:BN4PR12MB0740; BCL:0; PCL:0; RULEID:; SRVR:BN4PR12MB0740; X-Microsoft-Exchange-Diagnostics: 1; BN4PR12MB0740; 4:KYkV4AgugZm5dOprsSM0zxrlvwmgqg2OUkq8fUC//T/Wh5yxjQFBQQhBkiqHF0n0CbvfIsX1nwkPdFoGlqztv96nlzolaD++vTOY0KG28OLl1aTsCNZjpQB+rs50gXHBP5FU7YNSQh+d245t9v3XvbVxjKeXh/pU8617SrP8zYJ4FLSA47RZfgELU9UwQnQeWKwhKhqYS78vUYCVUwfvhOczXYFMti48edydSo7cw7ksUbJWMtAEnzuvUu/eajEOT2Ozu0TBQ52ubfuwcSJQuWKdr+gNIOAhSsaj6VVsbcsA9n9Ii/UjW/nNexxwbJPh X-Forefront-PRVS: 0800C0C167 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN4PR12MB0740; 23:aZXdPN6u4PnwYRrcxqBXr3n3akNGLMNlGTDiv5sO/?= L+oUVJrFw0Km7RBZgWSYlRB/u5lTPnGTdhq3JbNJYVdLMAIPEn7Z9cFHVKwGPlZXBH6orrEtOoL/DqFY5J+HKxXUQKtqmJlcPtltGw5TjreBgtDnmEOFeCOSm5JP5v101zh+Muhkz9l5i7MV8qTuB+0WbhKQyb7OgBesiLpxrOmsXOMjcgGCfFW9YfjCisDwbqwYS8WMs2SccpRypcWXjAAkZ2I7iK5/f0Sgy4dsFfBo+l7Bcx2ieJQqP6HHuSjKgzGF0EBlBRJFjN6cCiwWaHP6rYIrakDV7N1WAR8LFbp+1lHS8/TYhaFzdYxNwAeQU5eA37hGFEXb/57XaN2PxmEHMf0Fl4mtn89kscYh4enf6n7zwGyPfNasX8Q7708eUZNJUdtu6y521WAKakXnk/hMmP50b2COwWjFIdR8ntZSJCL3Th2ISacvDAupAOIySJusQyKWAeddWcyIhgCxpALg+SIwL2DE1XqBBKctKT9iCAQQimAKjH+z+MJ382ewxaNdyiwWbWUv37djsYk+9Gy+umkuW6a3o7Pq2VKcNbKitnuSKn9FoL8CF1lfabJ4YpmdE6DLVxlL7ZRhkMmcBNYNMF3WRys+j6pzmcplQUlHEnYYO9QGnqVXak6cIopJlgzEs2epdVJlpYqJqjpr+OdVYyMoa5bPua2bvejY6dIwGOjAjhAe1YhJKSd0w6iVFUt/KiIsIFzAXLJHLSIkbOTTZdT6VgEfY/xMdiuvX7GIgXslGn9lxbJW4peYaEKsvTakz0ibAtQQN8ycSmT9asilijqfuI+fchFkQ4dkB1CyZmPPdQLoRsE8gSrUntjHTqCpW9/AV0vHrYbYFeDa8UbptstnH70xNwkohEPPjBviGgoMr0UUUmze/Nw0YExNHmyh2jPYtJDP3dvEDuEgAcJGZ7A6mxhOOMo+/41uT4Khw6ZtxxgDpBLn+jgXj6is7vlLeTqXfsnzbwuPV8Cm9fUiYv4mRpRvkkAhB2BYypiKUrYSRzgVcyy80F5I3biaRYEmLiuqc5lrUZo+aBom8CbVe4NNnOd9yUfYmlHRhDLPvf0ZZlfc1QHVOk/Zz2BCOuvLgcAllhKekuzUIJJ04o/0UXlAZ/dgZLR7ZOJGUKcevGx75GY1+oFoBvd19eeP27w3KPePPKtGt/8UzIQ5DoCKJdB7klUQ9IyHdE/kATmGw== X-Microsoft-Antispam-Message-Info: X8PrGb6VlsakyiO1gsOdeBSmHK3NwqUIFLACr+DXkXhh9EZ1Zo66GxXwWD8aUU2njFeOYk2HcyUm83cd50ZVpqc/LT3/QqBUzDT59GuseZjlUwm9s9a5gd3m+ErHTLdBySOY1+CrGG0NpiK6wA6xG/QeK9PwinyVmK4K6ibuBe/nilXrhKl7ZuCBYjXkAh4auYHwIFNen+IkpawLybFBvACcd36HAwIECmqxZDCP5xit/W6gi7RzCUfsQTO7XeuLWsvLSdzvSJx8KcbgLBLoaexj3EZ/KL8QAYUmHJWhTSaiVxZMd0xVFC7v/90P4ppvrziF6rdwyBdTW7WFvh6QtBXBffVApkJotzRzyPTj/bY= X-Microsoft-Exchange-Diagnostics: 1; BN4PR12MB0740; 6:67/EhMC5A28soGcIW8vOikaH+VMsAb6XYQDj5gb0/PBdI3TRRVCFN6md9VXKkn11PGHbqK6Qk7fEYLi6HgMj6oOquWD1JGLytm1K/8nROl+xmaLeU90mMBSJivP4rb0EN7EmMxCczjE2qYKKqCQLCRFJM5lvgXEvIu4zTIdiheViogK5rGgqHv4htMr1JXszGrNEUr24BavgfyAf+pUavYAGt+euVBN46jPTmlC9sMXsr3cx23+c8H845LL4ZseEtnwa6oQd3n6Zugf05CxdM4PPSA4g1J+1oOZBM2G2lXBB7tOoccGxc3sx6QZYcVG3ahmDLeyoITUwJjt2mHz2XXFp8zofHL+g/f2zMa7ph4zYetfLQqdvvcZ0sOcfEj72UqEBHR11nI+zZSLPPJYle5empZyDDKn2XaDJLXsMd/fGp6nehiM8k8YOZHaDS4ZlKUoW72CLiJ1VReSVwSzCPA==; 5:TVtu36ui/s76xvuLNeDM5Dhn84Xjj3MWLoQtZ7zYOGayFYT91ytYwWAP8OQbLYWsch2u7nL3AxvnnSHRQhPykjNeNrDFziX6qEnEw69lsl5c+8844olL91DbHIaSx2VVWr2ry2vrkYk/4fzfefLoHUhyE+jZA0Q4GxMCVHkvcF0=; 7:ZIwaRpEV1+uRVZFCkqRb1OdhvuJHQgF1+kOiJCj+bZ7KU893yc9VZSLqrcQbNmFiZn5k3tWyXmwglR2HnDALisRQoMhSDducB0QbjkY3I2Wj4KyKInp7e8PkK/ccBeDmssml/soQjigT96MCghoF0R0uRvUm+nR+Nzph8qaz8drg+GXQxXmzxc7KRj0O09iGWSfGKcianQtEMF6iGyJX6z0BnLvK9eggeHt5berviGBgQV1O2AwORzJ7NetlcMzb SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN4PR12MB0740; 20:sLnK1RR6NO7uF/E8cksPUW/eaxFs2ImRfIlFASKLSWPyxSM96CF5AfnQPCqghC1lHo0bLR1OLYbNAzQEOSHPjUa9NidsGSmZRVdqD28kcJSurccf0RsVL6R4wT9TFcn5WZ4J47TZ8lVsMnwhg08yyZmwcs173UjzxCzdDrkJeIo6bkQ53Kyw2+1O3jVQQL09Wg14xyJLFH8QdaLQZfNgbzoGyZz6iGMcl0i6aUKwjJDbjwKJ9MQgo2Ha5qezT8PB X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2018 09:04:33.6519 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a58393df-5e0b-47fc-055e-08d61e0eeae9 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=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN4PR12MB0740 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: amd-gfx@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP syncobj wait/signal operation is appending in command submission. Signed-off-by: Chunming Zhou --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 8 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 114 +++++++++++++++++++------ include/uapi/drm/amdgpu_drm.h | 10 +++ 3 files changed, 104 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 447c4c7a36d6..6e4a3db56833 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -975,6 +975,11 @@ struct amdgpu_cs_chunk { void *kdata; }; +struct amdgpu_cs_syncobj_post_dep { + struct drm_syncobj *post_dep_syncobj; + u64 point; +}; + struct amdgpu_cs_parser { struct amdgpu_device *adev; struct drm_file *filp; @@ -1003,9 +1008,8 @@ struct amdgpu_cs_parser { /* user fence */ struct amdgpu_bo_list_entry uf_entry; - + struct amdgpu_cs_syncobj_post_dep *post_dep_syncobjs; unsigned num_post_dep_syncobjs; - struct drm_syncobj **post_dep_syncobjs; }; static inline u32 amdgpu_get_ib_value(struct amdgpu_cs_parser *p, diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 412fac238575..0efe75bf2f03 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -204,6 +204,8 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs case AMDGPU_CHUNK_ID_DEPENDENCIES: case AMDGPU_CHUNK_ID_SYNCOBJ_IN: case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT: + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL: break; default: @@ -783,7 +785,7 @@ static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser, int error, &parser->validated); for (i = 0; i < parser->num_post_dep_syncobjs; i++) - drm_syncobj_put(parser->post_dep_syncobjs[i]); + drm_syncobj_put(parser->post_dep_syncobjs[i].post_dep_syncobj); kfree(parser->post_dep_syncobjs); dma_fence_put(parser->fence); @@ -1098,11 +1100,13 @@ static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p, } static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p, - uint32_t handle) + uint32_t handle, u64 point, + u64 flags) { int r; struct dma_fence *fence; - r = drm_syncobj_find_fence(p->filp, handle, 0, 0, &fence); + + r = drm_syncobj_find_fence(p->filp, handle, point, flags, &fence); if (r) return r; @@ -1113,48 +1117,91 @@ static int amdgpu_syncobj_lookup_and_add_to_sync(struct amdgpu_cs_parser *p, } static int amdgpu_cs_process_syncobj_in_dep(struct amdgpu_cs_parser *p, - struct amdgpu_cs_chunk *chunk) + struct amdgpu_cs_chunk *chunk, + bool timeline) { unsigned num_deps; int i, r; - struct drm_amdgpu_cs_chunk_sem *deps; - deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata; - num_deps = chunk->length_dw * 4 / - sizeof(struct drm_amdgpu_cs_chunk_sem); + if (!timeline) { + struct drm_amdgpu_cs_chunk_sem *deps; - for (i = 0; i < num_deps; ++i) { - r = amdgpu_syncobj_lookup_and_add_to_sync(p, deps[i].handle); + deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata; + num_deps = chunk->length_dw * 4 / + sizeof(struct drm_amdgpu_cs_chunk_sem); + for (i = 0; i < num_deps; ++i) { + r = amdgpu_syncobj_lookup_and_add_to_sync(p, deps[i].handle, + 0, 0); if (r) return r; + } + } else { + struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps; + + syncobj_deps = (struct drm_amdgpu_cs_chunk_syncobj *)chunk->kdata; + num_deps = chunk->length_dw * 4 / + sizeof(struct drm_amdgpu_cs_chunk_syncobj); + for (i = 0; i < num_deps; ++i) { + r = amdgpu_syncobj_lookup_and_add_to_sync(p, syncobj_deps[i].handle, + syncobj_deps[i].point, + syncobj_deps[i].flags); + if (r) + return r; + } } + return 0; } static int amdgpu_cs_process_syncobj_out_dep(struct amdgpu_cs_parser *p, - struct amdgpu_cs_chunk *chunk) + struct amdgpu_cs_chunk *chunk, + bool timeline) { unsigned num_deps; int i; struct drm_amdgpu_cs_chunk_sem *deps; - deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata; - num_deps = chunk->length_dw * 4 / - sizeof(struct drm_amdgpu_cs_chunk_sem); + struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps; + + if (!timeline) { + deps = (struct drm_amdgpu_cs_chunk_sem *)chunk->kdata; + num_deps = chunk->length_dw * 4 / + sizeof(struct drm_amdgpu_cs_chunk_sem); + } else { + syncobj_deps = (struct drm_amdgpu_cs_chunk_syncobj *)chunk->kdata; + num_deps = chunk->length_dw * 4 / + sizeof(struct drm_amdgpu_cs_chunk_syncobj); + } + p->post_dep_syncobjs = kmalloc_array(num_deps, - sizeof(struct drm_syncobj *), + sizeof(struct amdgpu_cs_syncobj_post_dep), GFP_KERNEL); p->num_post_dep_syncobjs = 0; if (!p->post_dep_syncobjs) return -ENOMEM; - for (i = 0; i < num_deps; ++i) { - p->post_dep_syncobjs[i] = drm_syncobj_find(p->filp, deps[i].handle); - if (!p->post_dep_syncobjs[i]) - return -EINVAL; - p->num_post_dep_syncobjs++; + + if (!timeline) { + for (i = 0; i < num_deps; ++i) { + p->post_dep_syncobjs[i].post_dep_syncobj = + drm_syncobj_find(p->filp, deps[i].handle); + if (!p->post_dep_syncobjs[i].post_dep_syncobj) + return -EINVAL; + p->post_dep_syncobjs[i].point = 0; + p->num_post_dep_syncobjs++; + } + } else { + for (i = 0; i < num_deps; ++i) { + p->post_dep_syncobjs[i].post_dep_syncobj = + drm_syncobj_find(p->filp, syncobj_deps[i].handle); + if (!p->post_dep_syncobjs[i].post_dep_syncobj) + return -EINVAL; + p->post_dep_syncobjs[i].point = syncobj_deps[i].point; + p->num_post_dep_syncobjs++; + } } + return 0; } @@ -1168,18 +1215,32 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev, chunk = &p->chunks[i]; - if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES) { + switch (chunk->chunk_id) { + case AMDGPU_CHUNK_ID_DEPENDENCIES: r = amdgpu_cs_process_fence_dep(p, chunk); if (r) return r; - } else if (chunk->chunk_id == AMDGPU_CHUNK_ID_SYNCOBJ_IN) { - r = amdgpu_cs_process_syncobj_in_dep(p, chunk); + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_IN: + r = amdgpu_cs_process_syncobj_in_dep(p, chunk, false); + if (r) + return r; + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: + r = amdgpu_cs_process_syncobj_out_dep(p, chunk, false); if (r) return r; - } else if (chunk->chunk_id == AMDGPU_CHUNK_ID_SYNCOBJ_OUT) { - r = amdgpu_cs_process_syncobj_out_dep(p, chunk); + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT: + r = amdgpu_cs_process_syncobj_in_dep(p, chunk, true); if (r) return r; + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL: + r = amdgpu_cs_process_syncobj_out_dep(p, chunk, true); + if (r) + return r; + break; } } @@ -1191,7 +1252,8 @@ static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p) int i; for (i = 0; i < p->num_post_dep_syncobjs; ++i) - drm_syncobj_replace_fence(p->post_dep_syncobjs[i], 0, p->fence); + drm_syncobj_replace_fence(p->post_dep_syncobjs[i].post_dep_syncobj, + p->post_dep_syncobjs[i].point, p->fence); } static int amdgpu_cs_submit(struct amdgpu_cs_parser *p, diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h index 1ceec56de015..412359b446f1 100644 --- a/include/uapi/drm/amdgpu_drm.h +++ b/include/uapi/drm/amdgpu_drm.h @@ -517,6 +517,8 @@ struct drm_amdgpu_gem_va { #define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04 #define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05 #define AMDGPU_CHUNK_ID_BO_HANDLES 0x06 +#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x07 +#define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x08 struct drm_amdgpu_cs_chunk { __u32 chunk_id; @@ -592,6 +594,14 @@ struct drm_amdgpu_cs_chunk_sem { __u32 handle; }; +struct drm_amdgpu_cs_chunk_syncobj { + __u32 handle; + __u32 pad; + __u64 point; + __u64 flags; +}; + + #define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0 #define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1 #define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2