From patchwork Thu Oct 18 06:18:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646743 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 C188C15E2 for ; Thu, 18 Oct 2018 06:19:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A5496286F3 for ; Thu, 18 Oct 2018 06:19:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 98865286DE; Thu, 18 Oct 2018 06:19:09 +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 24796286DE for ; Thu, 18 Oct 2018 06:19:08 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 01FF6891DC; Thu, 18 Oct 2018 06:19:05 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM04-SN1-obe.outbound.protection.outlook.com (mail-eopbgr700052.outbound.protection.outlook.com [40.107.70.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5D7866E457 for ; Thu, 18 Oct 2018 06:19:03 +0000 (UTC) Received: from MWHPR12CA0037.namprd12.prod.outlook.com (2603:10b6:301:2::23) by BLUPR12MB0417.namprd12.prod.outlook.com (2a01:111:e400:516a::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.25; Thu, 18 Oct 2018 06:19:00 +0000 Received: from DM3NAM03FT064.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::206) by MWHPR12CA0037.outlook.office365.com (2603:10b6:301:2::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20 via Frontend Transport; Thu, 18 Oct 2018 06:18:59 +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 DM3NAM03FT064.mail.protection.outlook.com (10.152.83.1) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:18:58 +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; Thu, 18 Oct 2018 01:18:56 -0500 From: Chunming Zhou To: Subject: [PATCH 1/6] drm: add syncobj timeline support v9 Date: Thu, 18 Oct 2018 14:18:36 +0800 Message-ID: <20181018061841.20645-1-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 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)(396003)(39860400002)(346002)(136003)(376002)(2980300002)(428003)(199004)(189003)(478600001)(106466001)(68736007)(53416004)(86362001)(2351001)(47776003)(53936002)(36756003)(4326008)(5820100001)(305945005)(4744004)(97736004)(14444005)(66574009)(105586002)(6666004)(356004)(50466002)(8676002)(426003)(81156014)(1076002)(186003)(23676004)(126002)(7696005)(77096007)(54906003)(316002)(50226002)(486006)(8936002)(26005)(2616005)(336012)(476003)(81166006)(6916009)(104016004)(2906002)(72206003)(5660300001)(2870700001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR12MB0417; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT064; 1:gyL8KRT8LTEfPqNdun3bMtaEx6Bh3w5P+xTDhCSvmqrtRjRB25Wpe4CGuWi7Mx8HomryVjf4EYJSBveoaEcN2GUJr0FIj3MQRJMWUQEX+LS4n0nH7dVrKb5nnM23r8gc X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 98f960fd-687e-43d6-0417-08d634c19750 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:BLUPR12MB0417; X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0417; 3:lV66uNi7oqm2RHoycwQKeO2SusALI05ksZ5FyPMO0aQMSAesdTPn87l81H6eWvV5LyBVBO6MGmpIE17BfPGRdaYUITck7gUBvGV/EqY5axFAe+eH5sqHqt/y0iXegLJ/5dZ4akdDCPQkfdaUFT2x7uJrGc/b2BgWxxrAXRE4CyWJUkH0/ngP0RdwLWmqGYxF7T7k7WfXsLniZ57XhOPheLXrs4XzMIA1fJcgmLTPXklZsCJIU/bWaeDuiacqHX89Dh8mRrpjU+7jm0iaXjV+82KxVBPcb1txnT/4HN2MvMgQmuADlqLLLUHyAYfrkSS3dgVHEocMyy8Aw+KsWC1+sQMOOJVYcI6+eisLrizlrOI=; 25:0YUKvcgEV4NNI0KS9iuE2Kev+ASolyRAeL98phxOnXrHwswUWCLpMIqa5JH0RwMCD8XM9/ZeAqWokJ0k4hnVlt049/cIKUGLnBPOfc0QTl8NtARixXyNkbZ5o8h8yaY/vsf68jExGnOpb8dp2eXG6R2VOtNtm1NE/ow8YJ49GHQcTZzWzr1x75/DLcsPZtHx3p1SjQqhfNd+iuvmvHEeEHvA7HuGDIHSiqe6tVY5koegYwWaZfwAsyMK/msVSvc79VrCSP4z2DrmGjvWE2CyCWGk7u34GTsftXYUIrQxDtCf2wLA4m56DLBpEStg5Oa2c6XiRdUhikL/1AuxUoYQiQQIPB0sQkYXWW4WCPg1xhc= X-MS-TrafficTypeDiagnostic: BLUPR12MB0417: X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0417; 31:C/gjAUMIZaDi9ORrz4WkIMjKFgkEDCmwCpTq1esdcDgiKxmeq/WON1T+9Xt+pa6UYRTJO7oYJYzUJnvNR+9dlO+1gfKTEWzqQ9v5IZcOY7uNk0/50SaugE1Pp2wpj0xlOenUtdD8gVWQX3bZ9tLl8q7agPqSbUGYOa94vc8yl8YngKEM8iqFPlMEVf8xk4Dla514BZqfnXn6FURATm5e0rmtmb9kTd6BJ1uv/YDLnQ0=; 20:mN9/tc0x3pbzQXpXv8jJLHjOgkVIp4TipnC1vDZT2LAscdqb+02UCpRDSmcT5vL5N0NUTTcJJMU9eS/QLp1l50Tx6iF5a44g7jG5z9uWqeYqRc8PvDARzm+IN8Ck5mQWJXRCdoo3yaGKVmV6ekJnb/sGkDAkggTyIty3B4NHpbspJ0FUrg59pShqGrDetB27qeyq9gxvXCj8IeJGqzu5nal1Q1dZIEW7TPZ+TjgaVXyhYwE0eXrVh2tTHIMhSGgdxPYWA3qwnG9UJzTf04ZsSGfArq4GSLwlONzzZg8sfwehYtIlOcVsxd7rjt0ODs0SzW8KFXSnhAXFmU5Z2Y4pFea0+BCvU3CuzideO6/E8NKDCSQE+JqPDTiThI0RbO+PyN4w30rBBpMCRtLvMR4B9LO4uv2dz3pWzirAriZUS1laP4xWF+nbmBFq4jvCVmHfj8/yCOt/a+2HQVkm9ZhyuM3kPpa/jeSZq5wghBxj2LZblWXWfjfRUGPE5giwzOPv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089)(767451399110)(17755550239193); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93003095)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BLUPR12MB0417; BCL:0; PCL:0; RULEID:; SRVR:BLUPR12MB0417; X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0417; 4:uepth6b342g/9PXtasbXcH4Q28IxvbatGAbMjUO6yOYhTiYQlsWAn3Ivx5KFTRgSFqEHvB1/sUDJvYWP7lvRkSXTKrJCWXmBoJysH1YQLtT+20WhCu+mIwispDkDGg7XRpyUu6jJO9tOjndnFv/X9Q0yjxssXe2Gw/XU+XWGWKDm9fKr4vrZ4qNNLTrFV+Xyi+l9ZDiBQOJmMNpLdHEwyjSJXGaJZCpkikAdSWNNqG9OcDBSSjdCBS/NV63+hwnnZwsJRHDQLwk2+iY4KO5IyYAiyFbAiZfIOD0jIGoZo3l7SHP2ZLT0seTtFgwhrDSSZDY2q3MowaZmrSGN2RqSxLe9JInTNXxSfChaOJFokUqhyEr52tK2GgCfxvcB27it X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?utf-8?q?1=3BBLUPR12MB0417=3B23=3A+6hcjpS?= =?utf-8?q?AtyTTinRXBBuQZW2x7RaRYtO7q63W8qCxFRIrNn8ih5pm3YQhnIufDXp7Za9/niNB?= =?utf-8?q?uF3xGn584IPxrL0TSyDXVeKvnfNU9Yb1jd/USZuRnUumT9BI4KWLxNt7PkSlA4rFh?= =?utf-8?q?ud/Qs41t8We9IZXzWb9KTXWDPcCPli3/PCa+3sUgD9CzGKCOyER5E6rFeEXxDkwGC?= =?utf-8?q?m8EjHAR/heqZsPxJ8cdZZWwVbHex/xNHQFwbClyNfLyrZwIkALoFuUWLB1Ue+myyJ?= =?utf-8?q?RSWGyBaB/91BGBHPUBna3cgDUy0F73GThiw8C1n7kZq08ghZGnCN9NqnHBWy4HZLZ?= =?utf-8?q?zpch/OGTljBkGYQ2du0Fxd1lWQn5GwNNQhCWHan3BAvgDGVUYw6/Pz3Vazk+4PlZg?= =?utf-8?q?InHVHJybMTFhy2cC7Eg5hUjLCLZZ8bUFjJQp5O9+GsO9JCn7x5pIbiqj/Gj/6hHu7?= =?utf-8?q?yCgXZCEM+3oDca6e/14sYj9eNQoEz9GmCXWs7WPsqTh63OBdQg1UgWmA2UiBE7BdP?= =?utf-8?q?OdfC0W2fHBddy3ygSsm1Cq1l80OblwWKF/+hWTAE8FndZMAPgS71DlSAaOtWaBJfD?= =?utf-8?q?VOqOEn+9AskVtej/DJvlT0GRllFk5sEgmXEPMYKJ+J+qW+FCe/Bz8jy6118i3Ue0X?= =?utf-8?q?1MEDWEw67tI/jlAmtKOVQu1PMgxHnRC7QnvOHxbsZgKPE5ocRD0pIPk8fzraSysHy?= =?utf-8?q?WigUlGqSvIMFq/1ooiSyiXTXM06TqORifWxD6kUv5HFcSU9UNgXwtFecvuxqqimWq?= =?utf-8?q?zS4jD8+9MbYlaE3DyEBFFKLgPzx4IOqkCMmOVIVKduqtBzs9SMo9qvOwSU7tbLxfD?= =?utf-8?q?LjaJ7uO1ttleRwgu1Kw6XCWDgCbB6vVs658Yscs0lZWYJaOTPipgKlzAP5WdHsIs/?= =?utf-8?q?dAZwfoJGNIaI9cuv7kvjPvLDXnXqRgCZeFewt8TzuPf9ccypXshwFxTwaKOwqRr5H?= =?utf-8?q?Nx5bhX5beBru1TB5+3Ax4soqer0Ke4E+SiGG80K+kaQoCEkcPKG1b4YuCAUeKP4jo?= =?utf-8?q?AVYeRfZctoZWVwqLQmppgAeOnNcHvTNKNH0d13U1RGliqjJnwMxx3E3+uKcp7k7n9?= =?utf-8?q?4i6GL83nQk3g0/HAg5PijHhGwamhY7NUdvQkzygbO+Ey4SQHQFSzYhFZYzmc8XG6S?= =?utf-8?q?kK1KN6ZgKk8OM1w60CoxxcgXke55+ssWIGbByxP?= X-Microsoft-Antispam-Message-Info: 9FqBiLbUVw+h+Ujc2YYiiPLZwjo8Q7RoZa3fnTWX5cRWNmcmBgdqNa1Hk/Bhsoe+Vu596+i+MPsPOotoL2Kyg8G0V9sAAMsh5y9qE9L24c+lBDbzSzBaAeBq3KsRx29bd4cGjKi2oYQsJY9mCq0Y36oyyc/PhiyE3iKPNkY60snP35CESpnOj1jr77cl788ta9tpvsjAD7feTG59c5XZXA+RoEwFVQjyU69M99y0a3pYia1VYvklu1GwQs3BL+aX6n2WgE6D9g1trftxVc36B3uMkQy/chhEcO25vxrd8aNvXPZ4S9G8cCWmdPp1UpSLvopWfxjaL6PnDYqLeUnkVpiOdHNpMdwkZsFJcM2LOvU= X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0417; 6:mRshHDT+DCJgQFNG750K/eJt7AnxwdSg0QO8h60RU3omdE3Yaj8sP9QZ3W0QLVr3hEfmx59HMgVcTVxecddyd74V6r/+ELM68uRgYGaRl8o+naD1ugkdmgU6cC9/5/G7bXOtj1sSbkfmxGduXGuA1ADlHL3PEsw30dXwc8OmeZIjoWtUdX5g5Ae/BY9MHkOpav02TK+risC3UXPwFO4x0D21z+4xl/ihllOKFA3qcuNN7ycZ2UI2jM9fY6XwhxYaUHVeK6Jt4h8tfLp2Ty/XsyOUJZ/hv819CXeJBwFrNh1Vr0qzu9JClR8Za9dFB2eYyP+h1SyxeTM4A/gVnHtaDqa4oTodSG2DLaApLQSot6URLb3hW/1EJmMrmNE7FBhdo8Pi4k7S02y5HV+EyEuvs/DMOvGUQUKupMuh81vIFRpozAjCZYsP0ngc7H8bMA3JiVG1XjzvvRWIwCSnjZLipQ==; 5:Lr5VOEFdoFPiuhPslJG9Ul/c4bt/MkJnA7xDD6C0oJ8rh2B4y9bp0D3dSUv6erBVosaRZ/YwjMIZu5lv7mA5A1VLkAUR9evI7+jwL4xZ9ABTTaKDrPXZ5mOpmqyzr5W+My3UYTPvAWAAiArbhCaK0D8OSZEHD1Fo0gCkDs9VTho=; 7:hHvjM+2+W0LwBlL5YQJyWi4Z+oPYfo2iFFbhd2Sp3BIaXYjID7ZJ7Nd2mgIKmX/NAFk5aLHAQuRkaPj7zWaVj/J1anLDZJIk0HIhyNiWGF0tf0ydAEnFDUQ/LWRK4VxWVF/O5K4OBubTu5r8ji84Bz+9pJR1QLU/E/l3Pj/OBo3nPJP9TSyjvbO0i2KQvGFfy2YnMRMxKNdwX3kcduSl/d/KjHYH5VBFVO1srY82CTfScvvbq29aZyNgUeVqqj9A SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0417; 20:7XNf84gfF78mihPzcnNRos3TyrX4rPD/p7P7kN6hF/Sg/rUTWMmyv7G5J+39fNexnhTGh8z3ACjDOoaE+zZUzVYdWVjrAFz2WOxj2EKemH0Yd2hRjQM7iuXF7s3MtlUnWC7RKBJrm5tdr/n/zuX6c5zvoFBCJG0vkzYEeXFEwrZJRS/DW3W/bS7OV2IHkrmHzlagF20YjX6B9tN5+fmaycqIHxR6LgBCl+4w7wOR7XyBOdiW7qn5G67ICbXeM3ir X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:18:58.8939 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 98f960fd-687e-43d6-0417-08d634c19750 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: BLUPR12MB0417 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: Jason Ekstrand , Daniel Rakos , Dave Airlie , Christian Konig Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP This patch is for VK_KHR_timeline_semaphore extension, semaphore is called syncobj in kernel side: This extension introduces a new type of syncobj that has an integer payload identifying a point in a timeline. Such timeline syncobjs support the following operations: * CPU query - A host operation that allows querying the payload of the timeline syncobj. * CPU wait - A host operation that allows a blocking wait for a timeline syncobj to reach a specified value. * Device wait - A device operation that allows waiting for a timeline syncobj to reach a specified value. * Device signal - A device operation that allows advancing the timeline syncobj to a specified value. v1: Since it's a timeline, that means the front time point(PT) always is signaled before the late PT. a. signal PT design: Signal PT fence N depends on PT[N-1] fence and signal opertion fence, when PT[N] fence is signaled, the timeline will increase to value of PT[N]. b. wait PT design: Wait PT fence is signaled by reaching timeline point value, when timeline is increasing, will compare wait PTs value with new timeline value, if PT value is lower than timeline value, then wait PT will be signaled, otherwise keep in list. syncobj wait operation can wait on any point of timeline, so need a RB tree to order them. And wait PT could ahead of signal PT, we need a sumission fence to perform that. v2: 1. remove unused DRM_SYNCOBJ_CREATE_TYPE_NORMAL. (Christian) 2. move unexposed denitions to .c file. (Daniel Vetter) 3. split up the change to drm_syncobj_find_fence() in a separate patch. (Christian) 4. split up the change to drm_syncobj_replace_fence() in a separate patch. 5. drop the submission_fence implementation and instead use wait_event() for that. (Christian) 6. WARN_ON(point != 0) for NORMAL type syncobj case. (Daniel Vetter) v3: 1. replace normal syncobj with timeline implemenation. (Vetter and Christian) a. normal syncobj signal op will create a signal PT to tail of signal pt list. b. normal syncobj wait op will create a wait pt with last signal point, and this wait PT is only signaled by related signal point PT. 2. many bug fix and clean up 3. stub fence moving is moved to other patch. v4: 1. fix RB tree loop with while(node=rb_first(...)). (Christian) 2. fix syncobj lifecycle. (Christian) 3. only enable_signaling when there is wait_pt. (Christian) 4. fix timeline path issues. 5. write a timeline test in libdrm v5: (Christian) 1. semaphore is called syncobj in kernel side. 2. don't need 'timeline' characters in some function name. 3. keep syncobj cb. v6: (Christian) 1. merge syncobj_timeline to syncobj structure. 2. simplify some check sentences. 3. some misc change. 4. fix CTS failed issue. v7: (Christian) 1. error handling when creating signal pt. 2. remove timeline naming in func. 3. export flags in find_fence. 4. allow reset timeline. v8: 1. use wait_event_interruptible without timeout 2. rename _TYPE_INDIVIDUAL to _TYPE_BINARY v9: 1. rename signal_pt->base to signal_pt->fence_array to avoid misleading 2. improve kerneldoc individual syncobj is tested by ./deqp-vk -n dEQP-VK*semaphore* timeline syncobj is tested by ./amdgpu_test -s 9 Signed-off-by: Chunming Zhou Cc: Christian Konig Cc: Dave Airlie Cc: Daniel Rakos Cc: Daniel Vetter Cc: Bas Nieuwenhuizen Cc: Jason Ekstrand Reviewed-by: Christian König Acked-by: Daniel Vetter --- drivers/gpu/drm/drm_syncobj.c | 306 ++++++++++++++++++--- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 2 +- include/drm/drm_syncobj.h | 67 ++--- include/uapi/drm/drm.h | 1 + 4 files changed, 301 insertions(+), 75 deletions(-) diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index e2c5b3ca4824..57bf6006394d 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -56,6 +56,9 @@ #include "drm_internal.h" #include +/* merge normal syncobj to timeline syncobj, the point interval is 1 */ +#define DRM_SYNCOBJ_BINARY_POINT 1 + struct drm_syncobj_stub_fence { struct dma_fence base; spinlock_t lock; @@ -71,6 +74,11 @@ static const struct dma_fence_ops drm_syncobj_stub_fence_ops = { .get_timeline_name = drm_syncobj_stub_fence_get_name, }; +struct drm_syncobj_signal_pt { + struct dma_fence_array *fence_array; + u64 value; + struct list_head list; +}; /** * drm_syncobj_find - lookup and reference a sync object. @@ -113,8 +121,8 @@ static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj, { int ret; - *fence = drm_syncobj_fence_get(syncobj); - if (*fence) + ret = drm_syncobj_search_fence(syncobj, 0, 0, fence); + if (!ret) return 1; spin_lock(&syncobj->lock); @@ -122,10 +130,12 @@ static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj, * have the lock, try one more time just to be sure we don't add a * callback when a fence has already been set. */ - if (syncobj->fence) { - *fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, - lockdep_is_held(&syncobj->lock))); - ret = 1; + if (!list_empty(&syncobj->signal_pt_list)) { + spin_unlock(&syncobj->lock); + drm_syncobj_search_fence(syncobj, 0, 0, fence); + if (*fence) + return 1; + spin_lock(&syncobj->lock); } else { *fence = NULL; drm_syncobj_add_callback_locked(syncobj, cb, func); @@ -153,6 +163,160 @@ void drm_syncobj_remove_callback(struct drm_syncobj *syncobj, spin_unlock(&syncobj->lock); } +static void drm_syncobj_init(struct drm_syncobj *syncobj) +{ + spin_lock(&syncobj->lock); + syncobj->timeline_context = dma_fence_context_alloc(1); + syncobj->timeline = 0; + syncobj->signal_point = 0; + init_waitqueue_head(&syncobj->wq); + + INIT_LIST_HEAD(&syncobj->signal_pt_list); + spin_unlock(&syncobj->lock); +} + +static void drm_syncobj_fini(struct drm_syncobj *syncobj) +{ + struct drm_syncobj_signal_pt *signal_pt = NULL, *tmp; + + spin_lock(&syncobj->lock); + list_for_each_entry_safe(signal_pt, tmp, + &syncobj->signal_pt_list, list) { + list_del(&signal_pt->list); + dma_fence_put(&signal_pt->fence_array->base); + kfree(signal_pt); + } + spin_unlock(&syncobj->lock); +} + +static struct dma_fence +*drm_syncobj_find_signal_pt_for_point(struct drm_syncobj *syncobj, + uint64_t point) +{ + struct drm_syncobj_signal_pt *signal_pt; + + if ((syncobj->type == DRM_SYNCOBJ_TYPE_TIMELINE) && + (point <= syncobj->timeline)) { + struct drm_syncobj_stub_fence *fence = + kzalloc(sizeof(struct drm_syncobj_stub_fence), + GFP_KERNEL); + + if (!fence) + return NULL; + spin_lock_init(&fence->lock); + dma_fence_init(&fence->base, + &drm_syncobj_stub_fence_ops, + &fence->lock, + syncobj->timeline_context, + point); + + dma_fence_signal(&fence->base); + return &fence->base; + } + + list_for_each_entry(signal_pt, &syncobj->signal_pt_list, list) { + if (point > signal_pt->value) + continue; + if ((syncobj->type == DRM_SYNCOBJ_TYPE_BINARY) && + (point != signal_pt->value)) + continue; + return dma_fence_get(&signal_pt->fence_array->base); + } + return NULL; +} + +static int drm_syncobj_create_signal_pt(struct drm_syncobj *syncobj, + struct dma_fence *fence, + u64 point) +{ + struct drm_syncobj_signal_pt *signal_pt = + kzalloc(sizeof(struct drm_syncobj_signal_pt), GFP_KERNEL); + struct drm_syncobj_signal_pt *tail_pt; + struct dma_fence **fences; + int num_fences = 0; + int ret = 0, i; + + if (!signal_pt) + return -ENOMEM; + if (!fence) + goto out; + + fences = kmalloc_array(sizeof(void *), 2, GFP_KERNEL); + if (!fences) { + ret = -ENOMEM; + goto out; + } + fences[num_fences++] = dma_fence_get(fence); + /* timeline syncobj must take this dependency */ + if (syncobj->type == DRM_SYNCOBJ_TYPE_TIMELINE) { + spin_lock(&syncobj->lock); + if (!list_empty(&syncobj->signal_pt_list)) { + tail_pt = list_last_entry(&syncobj->signal_pt_list, + struct drm_syncobj_signal_pt, list); + fences[num_fences++] = + dma_fence_get(&tail_pt->fence_array->base); + } + spin_unlock(&syncobj->lock); + } + signal_pt->fence_array = dma_fence_array_create(num_fences, fences, + syncobj->timeline_context, + point, false); + if (!signal_pt->fence_array) { + ret = -ENOMEM; + goto fail; + } + + spin_lock(&syncobj->lock); + if (syncobj->signal_point >= point) { + DRM_WARN("A later signal is ready!"); + spin_unlock(&syncobj->lock); + goto exist; + } + signal_pt->value = point; + list_add_tail(&signal_pt->list, &syncobj->signal_pt_list); + syncobj->signal_point = point; + spin_unlock(&syncobj->lock); + wake_up_all(&syncobj->wq); + + return 0; +exist: + dma_fence_put(&signal_pt->fence_array->base); +fail: + for (i = 0; i < num_fences; i++) + dma_fence_put(fences[i]); + kfree(fences); +out: + kfree(signal_pt); + return ret; +} + +static void drm_syncobj_garbage_collection(struct drm_syncobj *syncobj) +{ + struct drm_syncobj_signal_pt *signal_pt, *tmp, *tail_pt; + + spin_lock(&syncobj->lock); + tail_pt = list_last_entry(&syncobj->signal_pt_list, + struct drm_syncobj_signal_pt, + list); + list_for_each_entry_safe(signal_pt, tmp, + &syncobj->signal_pt_list, list) { + if (syncobj->type == DRM_SYNCOBJ_TYPE_BINARY && + signal_pt == tail_pt) + continue; + if (dma_fence_is_signaled(&signal_pt->fence_array->base)) { + syncobj->timeline = signal_pt->value; + list_del(&signal_pt->list); + dma_fence_put(&signal_pt->fence_array->base); + kfree(signal_pt); + } else { + /*signal_pt is in order in list, from small to big, so + * the later must not be signal either */ + break; + } + } + + spin_unlock(&syncobj->lock); +} /** * drm_syncobj_replace_fence - replace fence in a sync object. * @syncobj: Sync object to replace fence in @@ -165,28 +329,29 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, u64 point, struct dma_fence *fence) { - struct dma_fence *old_fence; - struct drm_syncobj_cb *cur, *tmp; - - if (fence) - dma_fence_get(fence); - - spin_lock(&syncobj->lock); - - old_fence = rcu_dereference_protected(syncobj->fence, - lockdep_is_held(&syncobj->lock)); - rcu_assign_pointer(syncobj->fence, fence); + u64 pt_value = point; + + drm_syncobj_garbage_collection(syncobj); + if (syncobj->type == DRM_SYNCOBJ_TYPE_BINARY) { + if (!fence) { + drm_syncobj_fini(syncobj); + drm_syncobj_init(syncobj); + return; + } + pt_value = syncobj->signal_point + + DRM_SYNCOBJ_BINARY_POINT; + } + drm_syncobj_create_signal_pt(syncobj, fence, pt_value); + if (fence) { + struct drm_syncobj_cb *cur, *tmp; - if (fence != old_fence) { + spin_lock(&syncobj->lock); list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { list_del_init(&cur->node); cur->func(syncobj, cur); } + spin_unlock(&syncobj->lock); } - - spin_unlock(&syncobj->lock); - - dma_fence_put(old_fence); } EXPORT_SYMBOL(drm_syncobj_replace_fence); @@ -209,6 +374,64 @@ static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) return 0; } +static int +drm_syncobj_point_get(struct drm_syncobj *syncobj, u64 point, u64 flags, + struct dma_fence **fence) +{ + int ret = 0; + + if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) { + ret = wait_event_interruptible(syncobj->wq, + point <= syncobj->signal_point); + if (ret < 0) + return ret; + } + spin_lock(&syncobj->lock); + *fence = drm_syncobj_find_signal_pt_for_point(syncobj, point); + if (!*fence) + ret = -EINVAL; + spin_unlock(&syncobj->lock); + return ret; +} + +/** + * drm_syncobj_search_fence - lookup and reference the fence in a sync object or + * in a timeline point + * @syncobj: sync object pointer + * @point: timeline point + * @flags: DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT or not + * @fence: out parameter for the fence + * + * if flags is DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, the function will block + * here until specific timeline points is reached. + * if not, you need a submit thread and block in userspace until all future + * timeline points have materialized, only then you can submit to the kernel, + * otherwise, function will fail to return fence. + * + * Returns 0 on success or a negative error value on failure. On success @fence + * contains a reference to the fence, which must be released by calling + * dma_fence_put(). + */ +int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point, + u64 flags, struct dma_fence **fence) +{ + u64 pt_value = point; + + if (!syncobj) + return -ENOENT; + + drm_syncobj_garbage_collection(syncobj); + if (syncobj->type == DRM_SYNCOBJ_TYPE_BINARY) { + /*BINARY syncobj always wait on last pt */ + pt_value = syncobj->signal_point; + + if (pt_value == 0) + pt_value += DRM_SYNCOBJ_BINARY_POINT; + } + return drm_syncobj_point_get(syncobj, pt_value, flags, fence); +} +EXPORT_SYMBOL(drm_syncobj_search_fence); + /** * drm_syncobj_find_fence - lookup and reference the fence in a sync object * @file_private: drm file private pointer @@ -218,7 +441,7 @@ static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj) * @fence: out parameter for the fence * * This is just a convenience function that combines drm_syncobj_find() and - * drm_syncobj_fence_get(). + * drm_syncobj_lookup_fence(). * * Returns 0 on success or a negative error value on failure. On success @fence * contains a reference to the fence, which must be released by calling @@ -229,15 +452,9 @@ int drm_syncobj_find_fence(struct drm_file *file_private, struct dma_fence **fence) { struct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle); - int ret = 0; - - if (!syncobj) - return -ENOENT; + int ret; - *fence = drm_syncobj_fence_get(syncobj); - if (!*fence) { - ret = -EINVAL; - } + ret = drm_syncobj_search_fence(syncobj, point, flags, fence); drm_syncobj_put(syncobj); return ret; } @@ -254,7 +471,7 @@ void drm_syncobj_free(struct kref *kref) struct drm_syncobj *syncobj = container_of(kref, struct drm_syncobj, refcount); - drm_syncobj_replace_fence(syncobj, 0, NULL); + drm_syncobj_fini(syncobj); kfree(syncobj); } EXPORT_SYMBOL(drm_syncobj_free); @@ -284,6 +501,11 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags, kref_init(&syncobj->refcount); INIT_LIST_HEAD(&syncobj->cb_list); spin_lock_init(&syncobj->lock); + if (flags & DRM_SYNCOBJ_CREATE_TYPE_TIMELINE) + syncobj->type = DRM_SYNCOBJ_TYPE_TIMELINE; + else + syncobj->type = DRM_SYNCOBJ_TYPE_BINARY; + drm_syncobj_init(syncobj); if (flags & DRM_SYNCOBJ_CREATE_SIGNALED) { ret = drm_syncobj_assign_null_handle(syncobj); @@ -566,7 +788,8 @@ drm_syncobj_create_ioctl(struct drm_device *dev, void *data, return -EOPNOTSUPP; /* no valid flags yet */ - if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED) + if (args->flags & ~(DRM_SYNCOBJ_CREATE_SIGNALED | + DRM_SYNCOBJ_CREATE_TYPE_TIMELINE)) return -EINVAL; return drm_syncobj_create_as_handle(file_private, @@ -659,9 +882,8 @@ static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, struct syncobj_wait_entry *wait = container_of(cb, struct syncobj_wait_entry, syncobj_cb); - /* This happens inside the syncobj lock */ - wait->fence = dma_fence_get(rcu_dereference_protected(syncobj->fence, - lockdep_is_held(&syncobj->lock))); + drm_syncobj_search_fence(syncobj, 0, 0, &wait->fence); + wake_up_process(wait->task); } @@ -687,7 +909,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, signaled_count = 0; for (i = 0; i < count; ++i) { entries[i].task = current; - entries[i].fence = drm_syncobj_fence_get(syncobjs[i]); + drm_syncobj_search_fence(syncobjs[i], 0, 0, + &entries[i].fence); if (!entries[i].fence) { if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) { continue; @@ -949,12 +1172,13 @@ drm_syncobj_reset_ioctl(struct drm_device *dev, void *data, if (ret < 0) return ret; - for (i = 0; i < args->count_handles; i++) - drm_syncobj_replace_fence(syncobjs[i], 0, NULL); - + for (i = 0; i < args->count_handles; i++) { + drm_syncobj_fini(syncobjs[i]); + drm_syncobj_init(syncobjs[i]); + } drm_syncobj_array_free(syncobjs, args->count_handles); - return 0; + return ret; } int diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 22b4cb775576..6d99651c6c4b 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -2152,7 +2152,7 @@ await_fence_array(struct i915_execbuffer *eb, if (!(flags & I915_EXEC_FENCE_WAIT)) continue; - fence = drm_syncobj_fence_get(syncobj); + drm_syncobj_search_fence(syncobj, 0, 0, &fence); if (!fence) return -EINVAL; diff --git a/include/drm/drm_syncobj.h b/include/drm/drm_syncobj.h index 2eda44def639..5e8c5c027e09 100644 --- a/include/drm/drm_syncobj.h +++ b/include/drm/drm_syncobj.h @@ -30,10 +30,15 @@ struct drm_syncobj_cb; +enum drm_syncobj_type { + DRM_SYNCOBJ_TYPE_BINARY, + DRM_SYNCOBJ_TYPE_TIMELINE +}; + /** * struct drm_syncobj - sync object. * - * This structure defines a generic sync object which wraps a &dma_fence. + * This structure defines a generic sync object which is timeline based. */ struct drm_syncobj { /** @@ -41,19 +46,36 @@ struct drm_syncobj { */ struct kref refcount; /** - * @fence: - * NULL or a pointer to the fence bound to this object. - * - * This field should not be used directly. Use drm_syncobj_fence_get() - * and drm_syncobj_replace_fence() instead. + * @type: indicate syncobj type + */ + enum drm_syncobj_type type; + /** + * @wq: wait signal operation work queue + */ + wait_queue_head_t wq; + /** + * @timeline_context: fence context used by timeline */ - struct dma_fence __rcu *fence; + u64 timeline_context; /** - * @cb_list: List of callbacks to call when the &fence gets replaced. + * @timeline: syncobj timeline value, which indicates point is signaled. */ + u64 timeline; + /** + * @signal_point: which indicates the latest signaler point. + */ + u64 signal_point; + /** + * @signal_pt_list: signaler point list. + */ + struct list_head signal_pt_list; + + /** + * @cb_list: List of callbacks to call when the &fence gets replaced. + */ struct list_head cb_list; /** - * @lock: Protects &cb_list and write-locks &fence. + * @lock: Protects syncobj list and write-locks &fence. */ spinlock_t lock; /** @@ -68,7 +90,7 @@ typedef void (*drm_syncobj_func_t)(struct drm_syncobj *syncobj, /** * struct drm_syncobj_cb - callback for drm_syncobj_add_callback * @node: used by drm_syncob_add_callback to append this struct to - * &drm_syncobj.cb_list + * &drm_syncobj.cb_list * @func: drm_syncobj_func_t to call * * This struct will be initialized by drm_syncobj_add_callback, additional @@ -106,29 +128,6 @@ drm_syncobj_put(struct drm_syncobj *obj) kref_put(&obj->refcount, drm_syncobj_free); } -/** - * drm_syncobj_fence_get - get a reference to a fence in a sync object - * @syncobj: sync object. - * - * This acquires additional reference to &drm_syncobj.fence contained in @obj, - * if not NULL. It is illegal to call this without already holding a reference. - * No locks required. - * - * Returns: - * Either the fence of @obj or NULL if there's none. - */ -static inline struct dma_fence * -drm_syncobj_fence_get(struct drm_syncobj *syncobj) -{ - struct dma_fence *fence; - - rcu_read_lock(); - fence = dma_fence_get_rcu_safe(&syncobj->fence); - rcu_read_unlock(); - - return fence; -} - struct drm_syncobj *drm_syncobj_find(struct drm_file *file_private, u32 handle); void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, u64 point, @@ -142,5 +141,7 @@ int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags, int drm_syncobj_get_handle(struct drm_file *file_private, struct drm_syncobj *syncobj, u32 *handle); int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd); +int drm_syncobj_search_fence(struct drm_syncobj *syncobj, u64 point, u64 flags, + struct dma_fence **fence); #endif diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 300f336633f2..cebdb2541eb7 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -717,6 +717,7 @@ struct drm_prime_handle { struct drm_syncobj_create { __u32 handle; #define DRM_SYNCOBJ_CREATE_SIGNALED (1 << 0) +#define DRM_SYNCOBJ_CREATE_TYPE_TIMELINE (1 << 1) __u32 flags; }; From patchwork Thu Oct 18 06:18:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646745 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 4C17B15E2 for ; Thu, 18 Oct 2018 06:19:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3B4D1286DB for ; Thu, 18 Oct 2018 06:19:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2F093286F1; Thu, 18 Oct 2018 06:19:12 +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 7DE08286DB for ; Thu, 18 Oct 2018 06:19:11 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0608489664; Thu, 18 Oct 2018 06:19:10 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-eopbgr680078.outbound.protection.outlook.com [40.107.68.78]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9ABE489548 for ; Thu, 18 Oct 2018 06:19:08 +0000 (UTC) Received: from DM5PR12CA0006.namprd12.prod.outlook.com (2603:10b6:4:1::16) by CY1PR12MB0428.namprd12.prod.outlook.com (2a01:111:e400:5191::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.23; Thu, 18 Oct 2018 06:19:06 +0000 Received: from DM3NAM03FT029.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::200) by DM5PR12CA0006.outlook.office365.com (2603:10b6:4:1::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20 via Frontend Transport; Thu, 18 Oct 2018 06:19:06 +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 DM3NAM03FT029.mail.protection.outlook.com (10.152.82.194) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:19:06 +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; Thu, 18 Oct 2018 01:19:04 -0500 From: Chunming Zhou To: Subject: [PATCH 2/6] drm: add support of syncobj timeline point wait v4 Date: Thu, 18 Oct 2018 14:18:37 +0800 Message-ID: <20181018061841.20645-2-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181018061841.20645-1-david1.zhou@amd.com> References: <20181018061841.20645-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)(396003)(376002)(39860400002)(136003)(346002)(2980300002)(428003)(199004)(189003)(68736007)(8936002)(1076002)(81156014)(81166006)(2351001)(53416004)(36756003)(104016004)(4326008)(106466001)(2906002)(2616005)(476003)(11346002)(126002)(446003)(50226002)(426003)(336012)(72206003)(14444005)(76176011)(478600001)(77096007)(7696005)(105586002)(305945005)(47776003)(316002)(16586007)(4744004)(6916009)(6666004)(48376002)(356004)(53936002)(486006)(8676002)(186003)(51416003)(26005)(575784001)(86362001)(5660300001)(97736004)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0428; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT029; 1:vj6RiRXOI3n4QD0ggFxbuwxdQuDDXyZTIbDNKzUpVDqtNl2Ss5GHbAeVLpANbj3DraPNBs6DgFvau2v1ghfNNQQaitAr4dBAC6Jai7EguuGfaaRwrE0PVm2lrGb++WnQ X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7d11126d-1ece-4a2c-ad86-08d634c19ba4 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:CY1PR12MB0428; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0428; 3:F8MMQoM1Q8iutTtb/O0QLUxxJ5X7+Nu6eSlkfkA9RWeHZVx436iT9Yk5MSDls9oWrs0MTq8Epv5p7JzHauG//zpl++xcFQVcT9+RumY9gaLsNU3BnkkQ0PLM3ZSi0CFQWDn0my+BaTSAQvvZQ3uUWS3rXKpSd8JVoyOOf5P4bDkAx3sAm6rdUR97oJ8g1jB7+Itf2xLofRzxHvrGh121jzhmhmUHEDzi2dOt9G63c9QeEr3YWVvBl+sapnQNx7MZUtcsV8+sVA4Jzq7z2agwDRt6y1UXAOqL40QFQzvoqmoq/cuXHSadPOpPNF99HufpQii2/HSNArZJcEY7DwVNBNvPIuzMcGvTd+oO//QRBTQ=; 25:siTR3ErJEfaDsAZ72M1CvQIBcnMrxYwOWzFPWt8gt++rMQOUxq7LXwp2mHrU+NJYKAzozk+Wi2Pv0e7w+5JdQQx0ou6w6eSVyFirGkmzd6XhQWzMMiDqqQ8DQpjUW9npRvwm9BZTBlH+8N12km7mZP6rodbPyZuC4faGUzRF8qTyMY2tL0nA8gQoZZQDW2TJ/zj7cvBpOxAnlxQioA49YMKhPGsyaUcNMwHK0p5wAklWrjNBUaeBaswDiMbK94o0SdfNgfURzDItRvQpQVkq8404/GBqltVVt9B2T5VXLlWbBX7yA5N9YC6ug1rD9wjYzCUWOKQ73kYXIbhiPwOMOFNv8ft/KzFREApgdcJ4Gwg= X-MS-TrafficTypeDiagnostic: CY1PR12MB0428: X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0428; 31:AhqpOMDV9KtirEAXtRgb7/jZJiy4a3sKWB42uZDzHgiUFf5MuCjP6J6LCLwKOMpWGuZDN24zr2RjpE9yxyp6UuCQHQJy8As9VvhG+jxHocfAWCr94cwYBp0uiOFi0UmqbdXm4unvT5T0b9AbGxtl/P8nkEtXUys/16x+nNsfW9z+MlwR5SDtmmbafrIuPN/u2KExx6kjfp0/7O5Hj7tyxsj4iKnDwIbrrukyJlr11X4=; 20:ibLI5z6lJpVO+Up1y93Xg3WhtDg+me6vRgkqMJ5GRiZCbQ4JyoOK7vQcd6/ipZNJa3hgiXGzMsi6GPcSccc1wXKZ4hnAnRHh/eB0LaiBali2LNNjhAXRtCBXSMSFkrsrcXsnL01Psb9lvbJJOsf5px5PvcBZUMOEdN15nR+x3v66QaY0vKl4e17/5/N5wbvBxd8nh9MHB5wqmtmMFyC1EDy8sE42YTM4v7HpW4dBA9TOLK0EgBNU7+N12XRXyzKWR77fG73cgoHG7RR6uawLZgxqojxjqCsr/ga4+7HfxPGYsm9gpviifQE3kg5NVBmmBQKIE9uoUfy4PyjFrl29gOJ/FymeLSYaTyUPQW7yyAWDuvWFb22id0A2O73gvfeYhj8HwCOI7HxJavpT/fDJEcd7/RLRYOp6pTUFG06XpU9TLQfRkFGUIdIr//cBbZZUsX9G/1ex1YIzHc448UynCBOjjs6Q78NTsfLTpYwXOCELomPVrwrYPNeO6EJe76uX 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)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93003095)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:CY1PR12MB0428; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0428; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0428; 4:BFLTPvYZ7COIrnTB1OOLNVRabW65bUbPDcTjdBx4nZXoFF+VCO3tsBdHirnNSBvorFp3u1qVj+gDVYPXNp5vJMQCGTL3xwjxMc1M/G4kw0vh06iXrrsZayb+7jJ6Rax6aqacQqZt5Xod+LiUiwEdH8iE5s1MQjfEz2fnpasoHxvrKmI8kt02aBsM79YLCSg81l+Tx770Nj/D4YJCtu+FrK0oyywHirG2vSk8GdvbKpruKMpPpohkSWdX4CgZSSNW12XsPGPjo/P0WZGVlAoQ8lhdFZrE6AY2EY320GYyMh2M6Cd0hPTGINucBwTKclmC X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0428; 23:iPGIKsaxrWI0SH3ZjXm/33sTpNluLKzMUcttl2LO5?= VY1Zgxls7Fx/gPDT2IRLtrTYv3mq62YNRk1c3RBAevF1Ofo6eyzp74e/r5ztzwzLcz+MivOblfJcPQRJyv+7zuEuLxeYRh/+2nXQOHvzlnTawH9HDbDhkWizYqahCvZtdCrkVDpcwnXBQh3wHc5Q9CUc9lnBdvsIjv7DphlEcy17ddWZLFOwP6xPMx++uSO8Pb6FakD+bFH3oHyq5IgF6pnEFlEsi1DnQa9ryYKtYhHcyDYIfkcnVjJy+o72vDL34cSkZXwf4OAABMgmwOMP6rDUlAlKNJv7aNd0P3fs9c4vA/fqWWDkm70Sai4jIVx8F/p9s42uH2poDiK9TSYNea1jJy+/Qymk6LziHwRaidkRYpaAwPOCzsl3n2OaCR1VqDk4lNLCgX6+zLDWMmqPfj3TruY8eLUmBRuitM8lawWcdGNhLZf53FbDGDJFvdtQxQI7swHu7owN35/k37NmedO86TWfsbd5U7BpT6j9SiC/V0kkjWBlj45R8xyy0L0lCNIERF5V+GHeM26lkwxBqvfZge5xeVITvKQ235/cyVxoUIf+pAbpxCZ7jMNhx7TkIdDbRLnwUcc+JbjYdgAPjj92ZLib40EIZhOaknZR7etmhL/cH10GJQOlACRorOMCGic6RSZJ7WsaWRyGbCROSeRk0R6mtzoxG+JsJdyN39vhjNl6PJ7edk8EE2knl1J2ZD9AitygdusYy9y6V3+7HwoDsZFR23Fde0OE9JAk9px3I7jjzlyx1G1qMvJ/bSwSJGD7TM3hEGu9lSvn2rhDLKklikBlyNRq5i2unXxayNzTWxwmLlrP487rg0B0gPeOCyzyn+LnvBH3jL9VaRdHGwtBSFr+LmTscz1wmzhPEno9loDSEdmnxw89w8QUGzcZ7OFAtBn3dmYO7o0j6s44NMFkm1RAeFmHAU9BRhmXDmJCJGY6hy/MWSIJ1uScsSFQG4BDhMWIawK4B0veSAqj3TynQpmBbH0KrdiNWxOJGVwOv7qo0sD3pFNFJMFEpkQ2s7/9w5LgGi03cxRnU7i34mJFjfBowS9cbEbptEjvhwcvKoI7HtYtomelm3deOBLzob+ykaDXHTdishF36Pz9ou+ddq+uZSp45MS8e7f5BXaIiIQ5UuMEwrajLzh5sChxI8Pp1SAHedGcyDweYHdf1+p3bVjo8ybBMbFp87iGPBcQw== X-Microsoft-Antispam-Message-Info: WWy3ntU/d/26w2BgL6c5M7mVpnGucg2BneVxMUaYh+ph3iYg1ekH+3hEhe0tw2CUjbvQJdKY5zVU1VIEVlZe+YVh18yjjqkcFT74RkN21FqF0SCGYMDjx18YXaUG6AMnu6pcZCMKZai+qp/FzXcLTcZgTrY5M6mCS6ccKWQipaDJMxzjWdRI3Rv8m9+Xyv3VmP2TcLQLIPeE6NyWhpHbOQbXDyTCHP/qVHd6MDQuWNgCnqMLhd3ebSalqHtKMOr071hcN4cfEh1aSubs0AbDsrt4Nmv9DxWF28AAwf6phC8EeQeukbkMqcCnjRokM3xfFy+2mAdnbH9ZglYPzWT1ARyUK2KiVHq1IGWtwym4WRs= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0428; 6:2quCly112w1H8UULXtWZf92sn4lMPuLNDAnwKLNLW1SQcj/jlTx+DUGh/ZEN7NI8JA2vZRK9MVKHOqoHLejLCSNIlbI/YRMoT6cfvrEbp6Dmr052GRUtyCMD8xKstghDuBpTTo3BMicXs7B5BVoc1MOpvE6QguMv5k2TdBTkHHibcBrsYmVBnulZ3vwodkhShL20V7AXReAigTFOfzo7OlOw5nnCmzccmUy0FZAAki2IinaIILI4ap088o4nGVO/nzxurB6HUtSgseH064jgDWM/Q8Qzu8fKvzQ7otH/qq7QSyfagkcak9JdKTJxtMpMrEEQiL0GavsVfHBzDjhV+MYjp++B82dbs5IE2Qhw7kQTICYXTPwKWWB7Ot9gXq8zoKh2syQYVa2RMzORgpWG8BHdGzniyimxYIusJWbyGvs/vZXkktxe97bVlqRwjZOl8Aw/9bc0K8iAblPcniEqjw==; 5:K7urI3wMhoE09B2Grh5/60dubJVNjLkKrI9mLcXhw6y7KOQi6GAfFjIHI+aUXmjkG0wtjB9UPfIcronyauPOEKthvcS2M0KHSkXMhH6YRv0AI7V5fEsdSPNV56CjF/Z8LvB1jtTr0mp5CluRo6QcRF7DqiGxQ4r7Jj7oq2laBW0=; 7:eUj1kS67J5DAakEbo4TRKFjBIo+44utW8NyTUelwg0c5QWsydXHJyXcma8C8Svbn347GFa9FM8lYefgt0xlquRfEYPZpiPuTrQVm9X9F7RU+vuSVF34BM1uvWYqDhecMJsdk501RPW33Ow3Q+OYuHWdL30ws87f1Rxq3fDQIKHxCEA9AKd66MOiZhihxHacdoAkmY+aYotZTiv5KWLWYxqekPIfAWtbCHG6cnScGvR9KokKtTR6M2WBoAUGktGGd SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0428; 20:PS5dC363wNbjGzQl8sVZBhaYW3SnAtqPcpRIBt+ibycZ2EUx6lDPsyFEC2sNZehdq45mI+pr970s8gUbDJVzAeOWGqfrHfpKiwYGlrPZlSlvSpAeoUQdhIYJkEfVZd7aqsqcbsELtx4BvT1JC5fRJ8dbVdx/cCH7z6QsiVDNtqrcIMrskxw1sNBTq8x68aTI65MRNj2If6bjsqgSVLvYF9TpTLVv5VpUJqFgrabli0rF7uwDc4GTUPlCvdDkVMvQ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:19:06.2690 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7d11126d-1ece-4a2c-ad86-08d634c19ba4 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: CY1PR12MB0428 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP points array is one-to-one match with syncobjs array. v2: add seperate ioctl for timeline point wait, otherwise break uapi. v3: userspace can specify two kinds waits:: a. Wait for time point to be completed. b. and wait for time point to become available v4: rebase Signed-off-by: Chunming Zhou --- drivers/gpu/drm/drm_internal.h | 2 + drivers/gpu/drm/drm_ioctl.c | 2 + drivers/gpu/drm/drm_syncobj.c | 125 ++++++++++++++++++++++++++++----- include/uapi/drm/drm.h | 18 +++++ 4 files changed, 128 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 0c4eb4a9ab31..566d44e3c782 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -183,6 +183,8 @@ int drm_syncobj_fd_to_handle_ioctl(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, + struct drm_file *file_private); int drm_syncobj_reset_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); int drm_syncobj_signal_ioctl(struct drm_device *dev, void *data, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 94bd872d56c4..a9a17ed35cc4 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -675,6 +675,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = { 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, + DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_RESET, drm_syncobj_reset_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_SIGNAL, drm_syncobj_signal_ioctl, diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 57bf6006394d..4eb49cbe0a84 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -115,13 +115,14 @@ static void drm_syncobj_add_callback_locked(struct drm_syncobj *syncobj, } static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj, + u64 point, struct dma_fence **fence, struct drm_syncobj_cb *cb, drm_syncobj_func_t func) { int ret; - ret = drm_syncobj_search_fence(syncobj, 0, 0, fence); + ret = drm_syncobj_search_fence(syncobj, point, 0, fence); if (!ret) return 1; @@ -132,7 +133,7 @@ static int drm_syncobj_fence_get_or_add_callback(struct drm_syncobj *syncobj, */ if (!list_empty(&syncobj->signal_pt_list)) { spin_unlock(&syncobj->lock); - drm_syncobj_search_fence(syncobj, 0, 0, fence); + drm_syncobj_search_fence(syncobj, point, 0, fence); if (*fence) return 1; spin_lock(&syncobj->lock); @@ -344,13 +345,17 @@ void drm_syncobj_replace_fence(struct drm_syncobj *syncobj, drm_syncobj_create_signal_pt(syncobj, fence, pt_value); if (fence) { struct drm_syncobj_cb *cur, *tmp; + struct list_head cb_list; + + INIT_LIST_HEAD(&cb_list); spin_lock(&syncobj->lock); - list_for_each_entry_safe(cur, tmp, &syncobj->cb_list, node) { + list_splice_init(&syncobj->cb_list, &cb_list); + spin_unlock(&syncobj->lock); + list_for_each_entry_safe(cur, tmp, &cb_list, node) { list_del_init(&cur->node); cur->func(syncobj, cur); } - spin_unlock(&syncobj->lock); } } EXPORT_SYMBOL(drm_syncobj_replace_fence); @@ -865,6 +870,7 @@ struct syncobj_wait_entry { struct dma_fence *fence; struct dma_fence_cb fence_cb; struct drm_syncobj_cb syncobj_cb; + u64 point; }; static void syncobj_wait_fence_func(struct dma_fence *fence, @@ -882,12 +888,13 @@ static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj, struct syncobj_wait_entry *wait = container_of(cb, struct syncobj_wait_entry, syncobj_cb); - drm_syncobj_search_fence(syncobj, 0, 0, &wait->fence); + drm_syncobj_search_fence(syncobj, wait->point, 0, &wait->fence); wake_up_process(wait->task); } static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, + void __user *user_points, uint32_t count, uint32_t flags, signed long timeout, @@ -895,12 +902,37 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, { struct syncobj_wait_entry *entries; struct dma_fence *fence; + uint64_t *points; uint32_t signaled_count, i; - entries = kcalloc(count, sizeof(*entries), GFP_KERNEL); - if (!entries) + points = kmalloc_array(count, sizeof(*points), GFP_KERNEL); + if (points == NULL) return -ENOMEM; + if (!user_points) { + memset(points, 0, count * sizeof(uint64_t)); + } else if (copy_from_user(points, user_points, sizeof(uint64_t) * count)) { + timeout = -EFAULT; + goto err_free_points; + } + + + if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE) { + struct dma_fence *fence; + for (i = 0; i < count; ++i) { + timeout = drm_syncobj_search_fence(syncobjs[i], points[i], + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT, + &fence); + if (timeout) + goto err_free_points; + } + goto err_free_points; + } + entries = kcalloc(count, sizeof(*entries), GFP_KERNEL); + if (!entries) { + timeout = -ENOMEM; + goto err_free_points; + } /* Walk the list of sync objects and initialize entries. We do * this up-front so that we can properly return -EINVAL if there is * a syncobj with a missing fence and then never have the chance of @@ -909,7 +941,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, signaled_count = 0; for (i = 0; i < count; ++i) { entries[i].task = current; - drm_syncobj_search_fence(syncobjs[i], 0, 0, + entries[i].point = points[i]; + drm_syncobj_search_fence(syncobjs[i], points[i], 0, &entries[i].fence); if (!entries[i].fence) { if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) { @@ -942,6 +975,7 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) { for (i = 0; i < count; ++i) { drm_syncobj_fence_get_or_add_callback(syncobjs[i], + entries[i].point, &entries[i].fence, &entries[i].syncobj_cb, syncobj_wait_syncobj_func); @@ -1004,6 +1038,9 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, } kfree(entries); +err_free_points: + kfree(points); + return timeout; } @@ -1042,19 +1079,33 @@ static signed long drm_timeout_abs_to_jiffies(int64_t timeout_nsec) static int drm_syncobj_array_wait(struct drm_device *dev, struct drm_file *file_private, struct drm_syncobj_wait *wait, - struct drm_syncobj **syncobjs) + struct drm_syncobj_timeline_wait *timeline_wait, + struct drm_syncobj **syncobjs, bool timeline) { - signed long timeout = drm_timeout_abs_to_jiffies(wait->timeout_nsec); + signed long timeout = 0; uint32_t first = ~0; - timeout = drm_syncobj_array_wait_timeout(syncobjs, - wait->count_handles, - wait->flags, - timeout, &first); - if (timeout < 0) - return timeout; - - wait->first_signaled = first; + if (!timeline) { + timeout = drm_timeout_abs_to_jiffies(wait->timeout_nsec); + timeout = drm_syncobj_array_wait_timeout(syncobjs, + NULL, + wait->count_handles, + wait->flags, + timeout, &first); + if (timeout < 0) + return timeout; + wait->first_signaled = first; + } else { + timeout = drm_timeout_abs_to_jiffies(timeline_wait->timeout_nsec); + timeout = drm_syncobj_array_wait_timeout(syncobjs, + u64_to_user_ptr(timeline_wait->points), + timeline_wait->count_handles, + timeline_wait->flags, + timeout, &first); + if (timeout < 0) + return timeout; + timeline_wait->first_signaled = first; + } return 0; } @@ -1140,13 +1191,49 @@ drm_syncobj_wait_ioctl(struct drm_device *dev, void *data, return ret; ret = drm_syncobj_array_wait(dev, file_private, - args, syncobjs); + args, NULL, syncobjs, false); + + drm_syncobj_array_free(syncobjs, args->count_handles); + + return ret; +} + +int +drm_syncobj_timeline_wait_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private) +{ + struct drm_syncobj_timeline_wait *args = data; + struct drm_syncobj **syncobjs; + int ret = 0; + + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) + return -ENODEV; + + if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_COMPLETED | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)) + return -EINVAL; + + if (args->count_handles == 0) + return -EINVAL; + + ret = drm_syncobj_array_find(file_private, + u64_to_user_ptr(args->handles), + args->count_handles, + &syncobjs); + if (ret < 0) + return ret; + + ret = drm_syncobj_array_wait(dev, file_private, + NULL, args, syncobjs, true); drm_syncobj_array_free(syncobjs, args->count_handles); return ret; } + int drm_syncobj_reset_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private) diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index cebdb2541eb7..c8bc1414753d 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -738,6 +738,10 @@ struct drm_syncobj_handle { #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) +/* wait for time point to be completed */ +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_COMPLETED (1 << 2) +/* wait for time point to become available */ +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 3) struct drm_syncobj_wait { __u64 handles; /* absolute timeout */ @@ -748,6 +752,19 @@ 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; @@ -910,6 +927,7 @@ 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) /** * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. From patchwork Thu Oct 18 06:18:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646747 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 206F1109C for ; Thu, 18 Oct 2018 06:19:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 111D5286DB for ; Thu, 18 Oct 2018 06:19:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 05557286F1; Thu, 18 Oct 2018 06:19:30 +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 919B5286DB for ; Thu, 18 Oct 2018 06:19:29 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C8C3E6E457; Thu, 18 Oct 2018 06:19:28 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0042.outbound.protection.outlook.com [104.47.34.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 617296E457 for ; Thu, 18 Oct 2018 06:19:28 +0000 (UTC) Received: from CY4PR12CA0042.namprd12.prod.outlook.com (2603:10b6:903:129::28) by BY1PR12MB0421.namprd12.prod.outlook.com (2a01:111:e400:51b0::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20; Thu, 18 Oct 2018 06:19:26 +0000 Received: from DM3NAM03FT038.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::204) by CY4PR12CA0042.outlook.office365.com (2603:10b6:903:129::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.23 via Frontend Transport; Thu, 18 Oct 2018 06:19:25 +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 DM3NAM03FT038.mail.protection.outlook.com (10.152.83.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:19:25 +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; Thu, 18 Oct 2018 01:19:23 -0500 From: Chunming Zhou To: Subject: [PATCH 3/6] drm: add timeline syncobj payload query ioctl v2 Date: Thu, 18 Oct 2018 14:18:38 +0800 Message-ID: <20181018061841.20645-3-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181018061841.20645-1-david1.zhou@amd.com> References: <20181018061841.20645-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)(39860400002)(136003)(376002)(396003)(346002)(2980300002)(428003)(189003)(199004)(486006)(2616005)(2351001)(26005)(478600001)(106466001)(4326008)(53416004)(6916009)(72206003)(11346002)(426003)(126002)(2906002)(575784001)(336012)(186003)(77096007)(476003)(446003)(6666004)(305945005)(86362001)(68736007)(14444005)(1076002)(53936002)(51416003)(76176011)(104016004)(47776003)(356004)(7696005)(50466002)(16586007)(8676002)(81166006)(48376002)(5660300001)(105586002)(81156014)(316002)(8936002)(97736004)(36756003)(50226002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR12MB0421; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT038; 1:7eY3Os701QrERU284aANGU+VV0L0bx+SUDQ+HUkKERHtehphfeg57BD+CxSEDK8SWV6jU6wwBoBFBD2BJQ/HluU6lazl+UQwNKM5iiEGnR9vdGocy3gn08rYOCpO51qE X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4249971c-161e-40c1-c2e7-08d634c1a725 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060); SRVR:BY1PR12MB0421; X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0421; 3:/kGBCYHrNvUqR0fuc7uSh7xzle/ZrL2HwISTyXBN+aQ42SCmIgYWl4aXdG75tCuQcWOxDJz7cOCLfenmOR5eeLPuY65q0lhc9h5d5tb3PLwaV0qiW/kaer1sguedtAvz7zTLgvkpf5kNzKbZr0WoaKtZV5pO1Uqd+bk0PkOT5NvxGjnfNe4/nvRMaGaK0uvQWIw/joQH6zaSAubgAKgfe0u0qs5im2+AwN/VPO+ejz2SQznCR3gXtLccCqtWllX/dXF75pP9z+nksCdPPS0oDW9+thmxgh7jyjSdjKpWg0YgOfJA5V93vKGIxr3BpggIrwqFUbc6B47cUWi+W/f7RzbNzSI9ww76O3BT5hls+Xc=; 25:6zol82+STPF7gi0oKlm4iBDXnHcCfBYiNQlH9Qgo0cF/zMlM6hS8XmGY2sTDkU6yO5/u9Y9D+167L6lXSniUgaC2ee9xubTQIjoe8hdqt8EHk3l5Bg5GcbvVWM+6fgWHlIHNLp6v8/wf+KBXtrJ7OHIG5gRWAlxyFq2Xij4j3vTxYJAsEpcMUG5tjmmTSHxwOxcDeiIeK0/ikF/rEcEhHkqqT6x3yBi8beDmHxwKe2Xs9ZvA53/u7IivAPaAjlDXcinAex3Td+DrJEfvkGMtCQmXICBOXbchs3zrV3Gu1gf8uNmmZqlwBuznnQNr5Qmacf49EAH+2itQDrEtq5/KJofx9R3JDKloBFJ6oIQSokI= X-MS-TrafficTypeDiagnostic: BY1PR12MB0421: X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0421; 31:2h+UxmCi2uUW9BBF8iQL0fBH9iuQ8rF92ValG8v6k5WMqDie8HK0IzVGiR0rImQ99npAGh38+H/XJKuyzU8ptmTTsqiFWpL84cTdWzZOYe7Q4/GbUclENo9Ct07WN4zrD2/rvm5QQgSR1FBFTmOxrc+EHl9ITBJ89XZvqHTZVUIxT9d2DAqnAaFNMafYv/oRbtyBe77eFVXxhD0in0SXlFh5RnuQNbedO/ghim7TO8E=; 20:w+C5r+mU6OKngIJBpzfxP8vj5B9keRonGFFCmhymT0021ciVJk6yAdEI2woEtaKxEqk1Kv3atfMg7mtxmZPRaFFK6/es/dXUeG+kK/GxUcr3yN61dUj5cVrJXUTfpWc+9k9POaSp9+06eCtw92MGriRAlJronv6FwTCIo05AbZwVZ0X7s9kRKZHptWcqdSC07/vKzuuuocAEfoBvBZUVjgJdJsxpoR+FcWjOpzK/IMgwGqW4eMqCllDA0OF/SDTLjWUu0XnPF7Mp2o8lSOFV/1tWR197JrxfQLVwtkEWJ2glRUTrAf0QppuyJ6taRTQoChnEDdZjHbyKO6K+oai000SB/q0c9yOqtaq3a+fcPhA/ZtDkunvjnjp7cLACxHgXflwUUJ5HKK5Dtj1Ykhe2zDlC05z9U9nDud7DVMABNBx9OtG944Vs7BJm1Swv/L03XuqF8KoS5fslWcEUFEFOhPY0GjswaXioAuqWngel6Ja/tPbuwHad9kT6jeJlrn/m 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)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93003095)(6055026)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY1PR12MB0421; BCL:0; PCL:0; RULEID:; SRVR:BY1PR12MB0421; X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0421; 4:LMV1jORMMAvGQmQXthaboX36qXmr7l9yVVzCcLSLcG+XWom9VM/BPU9+dm4n5oYxVy0MHCrkgy77P4uS0tHdrAksesCRaAQD1TqPpEr/GN7dJpe8QoTxGvtwEpi0Za6OHhf4c9wQOKtrDYf9f3IPQfcm15gt1sR8z3/69l8OU605ymt98yU8hhoxrPnLKF96hJP5KnhTwnY74jw/VCPqxsrF56aoMPRd6yjfg223dqAjZFTw4XnCclBK5D+VlEHTYkn2FyuvRE1h2r/+ZAJKMRUEUl4o3sapPW8mpPEARhtvegqIIen7NNozbBqW7q1o X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR12MB0421; 23:hYvnbUa1lwwpDi8GeMbcT40o5SO6p7HuLjAcKqDv9?= e3YJN4iZds4aMEBHcLIq5zXz8DSnUkBbU/A6Br7wt4I+SS1GPlF22u7SxvEmxbc7bKecAa+8S0bPON4GD2HqNKSpsdSnUBMtloF/sRuWn0xS2Dg7+Gq5Dk4we4dFdbiCpGeeTVj9nunzPpldYaJXLTcq/7jtf1XOsNkUpH/M43JGGnVTTcPdAev6PYWnEBR3LSJatAujvfhfpsV+NIzHISyxZSMA+6TzScX+CFh9/Rq7AJVqv7JflsbCxz7AbGri2L8NLkFFtm9C8E7kWwh5ufX3i7HryQ71+PQAdMR3k8CEoxw/qjLdf/fKG2L1HpGuz0rou0K9ukWWYMfa+1YxtGpeqGeq2ZU5NPizmddmeFGg6z7zN3KJjKKyPMmP99MUne2hNCu/3beUn/aJO7PKs9TB2omeUsiyMiADnE1XuZJDlcJcj5g53aFIcI+nv70sjT4vAwmZZdscqy71b5L1/vFcnmUwyayQwKt/roV1ZfUexGWLuFC9b7sAxFTOzEBZJjhpHTkScxHw+tMweD8WeRiKy1tw7QRAve4s/8BH1DuQ4NCn2XeUXgonz/7OjAstFUkLSBlBIL+Xu/TWngB8bdnGtw9DDU3UKTkHHtj1LyreHM3etOtjL7MMOHcqsgEyjlgbuw/+MZ2dWDsirtSw4ZgTx8l2gBAh6OGGKSKp9Dso3qHk8yrkv/kEtj8+Q3VJMlamTALv4lTVg12mOZBiexoVsQ2zb57ifTs8lODBQlQY6el6qSYLrB2m2ORj1wvzNPGXLyQIffQh0Vtp3bRHjAHcjqA64Zjh52cZdVaH+wDsXy4kQ3/e/Qi8jU9TCokkbvZ0QT/y9DRvjMmkKdXqtqaDtaWtUjZd8mWj5KcopkuVoJzgLhieWgeKb2Q2ns0OxOBG0gkpNbB5anRlbB3UHgID+dz3vXF4q3v5KlFaepSy4FiU3kIg5QESr5SuUdmrguPYYhvu6ecI7a5gTqEvbsWE1wOHRj2QSZSO8WLoeFRPFCoUo4+qg692QMVL+rmdMaMV4V2y4rSGj3R3gD0dUWYRoEpMNlWRkYoN5ngxNRZTKPtD/cHjgZ1ta0A7Sq7qfIFaoYnyGoMuwry4zIFFP1fiR/4Uw6cNC0HjDi0HgiDKTXGZG6CSmgs0yF7p7/tG6CdnBlw8lb1Fv7PB5HhSIll X-Microsoft-Antispam-Message-Info: xWQmsMeBY5eDPJPLkbtUFd+VvGIKl0l0zYZ0cyNhXcHYurK4ZvKl4g1Y+3udBLoovWepJ1j0rFg4U8AVAaT86XPNdnhbsArLEM2Msn3WDMkQ9ZSOYsvSdqwsDKbWwG8/nQoPaOyUAVFvOKLLrP4nsYPvrzslZHBUnfRlwMf1iUol61yWN4e1Lgt6Uk9Ayj8/ThVFLDMIl9DdkRVoO3GW16g0vkRKB+h07oGAmuhFfuEc2LRqYjkbaCO7cS+J1agf1hVPFw8VZgq2Xw+wXjGL9Dw+u9qcoEiSmbwgiJMGVhiKj96dbG8k/79fXCXLQmgdHi8+LCTNMlb5v+gUhRlMF1PykhQx4fVCo/ocR5Un66g= X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0421; 6:YKXPkCi0fRNwyautkWtNKoOWd8GP21K/o+QVan6EJEYh9qKZM8lHLDIbbNfiu/snWQCl1VNSzD698jxYM85qafNQ0EHDe2PXVeg0LHklqjtJdMPtnb5/aZgXaYxgqWrEVF4STABO68eeKWU34Bb7BO+WhqkHIflNyYsG8pAbwJEwI8dMgB4j2IB/WyPM2PCSIRRvIK3h7vGgHY8gmcq7AdizNyTxdkFqQTF6sZWri4bSFuRqbUf33I4W28H3zdN78EqvFyLm0oFJU+zIgrSjryHN7lY2JbyyAS0Zi1W/1TLbrXm8h1jZmwJomtwmVzPhKfV9k2Fxfn9m1EqaDcrIggdbQOZ4PE5beAgD5CQ97Z4JWE2qrEAdKmPM7KQhcKQ4MOCkOT8NqxOCNeKWwQHfNayIbyMxeknDTz6kOZgWAPaE4l2QM58NAAHQvHQtlxMCfeGRjW63TX5wA5YZ4ciu5w==; 5:JP5JmL4/W4wjba4FXZm4gKzUPPvl5HBWZli87SvAAH0KLApeKofJLSMTz+v8aQZWVdLmSOHpbq3pilV6bYP+Fi9yOSuWppoG4Xi+AkGYnR4tYX9sQEjBzWYtat4fQTbMMKqmZaaLxuJPMJbpLXrWvuXeu7EFoxqih7bMLnPSjMA=; 7:wXhPvvYX1Cz9Z4VZ7uINsc+0Gg0McD0hfUe0waHZ1EUnityH8SzB8P2Z3xmK1nGCuirA5BjikSa4E/TivOle8IHobcsMkNUJPMlPv6BiAO7RmB7tVc20rTYkI1E8jcKeHXsu82j065rP7u++6q3DiV4fy2DXVTxHDWk0UumYu8eWPJxESq31um3vfbmTBCwjwl8l6nEJWU6z5kFaGN2lWRjcO2KaVB+H6vG8LKJTj5Tr6klV2VGfHhGKGEzsm/lQ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR12MB0421; 20:GKtBRatRyWHxoXF2Jlb40T9WquaQbPCWXKsN3YMfzQWdRjKS6sdRoW7Db68raNQtAoWhQaHRAEMdla1rUREp/CB6TY9CI3G9cFpZpn52TlEKPvxvyybuvQAcsGPyfLHjUuG3CENkUyDEmdRDXhhcEjmVD0Ro2A8j+K1QV0e5A/nylPrgA+IFk4Zb84rmljUkmOGwaLeAb09hC4V7yNJ6Uej/RMYDHKpdyCixVdxYCaPNzocTGXuPYYBLWRUducfn X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:19:25.5856 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4249971c-161e-40c1-c2e7-08d634c1a725 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: BY1PR12MB0421 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP user mode can query timeline payload. v2: check return value of copy_to_user Signed-off-by: Chunming Zhou --- drivers/gpu/drm/drm_internal.h | 2 ++ drivers/gpu/drm/drm_ioctl.c | 2 ++ drivers/gpu/drm/drm_syncobj.c | 52 ++++++++++++++++++++++++++++++++++ include/uapi/drm/drm.h | 11 +++++++ 4 files changed, 67 insertions(+) diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index 566d44e3c782..9c4826411a3c 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -189,6 +189,8 @@ int drm_syncobj_reset_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); int drm_syncobj_signal_ioctl(struct drm_device *dev, void *data, struct drm_file *file_private); +int drm_syncobj_query_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private); /* drm_framebuffer.c */ void drm_framebuffer_print_info(struct drm_printer *p, unsigned int indent, diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index a9a17ed35cc4..7578ef6dc1d1 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -681,6 +681,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_SIGNAL, drm_syncobj_signal_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), + DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_QUERY, drm_syncobj_query_ioctl, + DRM_UNLOCKED|DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_CRTC_GET_SEQUENCE, drm_crtc_get_sequence_ioctl, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_CRTC_QUEUE_SEQUENCE, drm_crtc_queue_sequence_ioctl, DRM_UNLOCKED), DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_LEASE, drm_mode_create_lease_ioctl, DRM_MASTER|DRM_UNLOCKED), diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 4eb49cbe0a84..830c51447e88 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -1303,3 +1303,55 @@ drm_syncobj_signal_ioctl(struct drm_device *dev, void *data, return ret; } + +static void drm_syncobj_timeline_query_payload(struct drm_syncobj *syncobj, + uint64_t *point) +{ + if (syncobj->type != DRM_SYNCOBJ_TYPE_TIMELINE) { + DRM_ERROR("Normal syncobj cann't be queried!"); + *point = 0; + return; + } + *point = syncobj->signal_point; +} + +int drm_syncobj_query_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_private) +{ + struct drm_syncobj_timeline_query *args = data; + struct drm_syncobj **syncobjs; + uint64_t *points; + uint32_t i; + int ret; + + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) + return -ENODEV; + + if (args->count_handles == 0) + return -EINVAL; + + ret = drm_syncobj_array_find(file_private, + u64_to_user_ptr(args->handles), + args->count_handles, + &syncobjs); + if (ret < 0) + return ret; + + + points = kmalloc_array(args->count_handles, sizeof(*points), + GFP_KERNEL); + if (points == NULL) { + ret = -ENOMEM; + goto out; + } + for (i = 0; i < args->count_handles; i++) + drm_syncobj_timeline_query_payload(syncobjs[i], &points[i]); + ret = copy_to_user(u64_to_user_ptr(args->points), points, + sizeof(uint64_t) * args->count_handles) ? -EFAULT : 0; + + kfree(points); +out: + drm_syncobj_array_free(syncobjs, args->count_handles); + + return ret; +} diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index c8bc1414753d..23c4979d8a1c 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -771,6 +771,15 @@ struct drm_syncobj_array { __u32 pad; }; +struct drm_syncobj_timeline_query { + __u64 handles; + /* points are timeline syncobjs payloads returned by query ioctl */ + __u64 points; + __u32 count_handles; + __u32 pad; +}; + + /* Query current scanout sequence number */ struct drm_crtc_get_sequence { __u32 crtc_id; /* requested crtc_id */ @@ -928,6 +937,8 @@ extern "C" { #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_query) + /** * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. From patchwork Thu Oct 18 06:18:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646749 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 06F5A109C for ; Thu, 18 Oct 2018 06:19:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E71A8286DB for ; Thu, 18 Oct 2018 06:19:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4C5E286F1; Thu, 18 Oct 2018 06:19:48 +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 243E1286DB for ; Thu, 18 Oct 2018 06:19:46 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B50726E45E; Thu, 18 Oct 2018 06:19:44 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM05-DM3-obe.outbound.protection.outlook.com (mail-eopbgr730081.outbound.protection.outlook.com [40.107.73.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3C5206E45E for ; Thu, 18 Oct 2018 06:19:43 +0000 (UTC) Received: from CY4PR12CA0040.namprd12.prod.outlook.com (2603:10b6:903:129::26) by CY1PR12MB0618.namprd12.prod.outlook.com (2a01:111:e400:c43c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20; Thu, 18 Oct 2018 06:19:41 +0000 Received: from DM3NAM03FT045.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::209) by CY4PR12CA0040.outlook.office365.com (2603:10b6:903:129::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20 via Frontend Transport; Thu, 18 Oct 2018 06:19:40 +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 DM3NAM03FT045.mail.protection.outlook.com (10.152.82.208) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:19:40 +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; Thu, 18 Oct 2018 01:19:39 -0500 From: Chunming Zhou To: Subject: [PATCH 4/6] drm: add timeline support for syncobj export/import Date: Thu, 18 Oct 2018 14:18:39 +0800 Message-ID: <20181018061841.20645-4-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181018061841.20645-1-david1.zhou@amd.com> References: <20181018061841.20645-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)(136003)(39860400002)(346002)(376002)(396003)(2980300002)(428003)(199004)(189003)(106466001)(446003)(575784001)(316002)(53936002)(77096007)(26005)(50226002)(47776003)(53416004)(2351001)(86362001)(426003)(8936002)(4326008)(186003)(336012)(1076002)(72206003)(104016004)(105586002)(8676002)(478600001)(2906002)(7696005)(81166006)(76176011)(81156014)(50466002)(11346002)(51416003)(6916009)(68736007)(305945005)(48376002)(476003)(2616005)(5660300001)(16586007)(36756003)(356004)(97736004)(14444005)(126002)(486006); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0618; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT045; 1:ZyOweRnH1ee7ut14TBdftpypdbGvmR08qMhAPpqpOllbYGLIj5lCkq9ctdDcj2ZaxdtWp720Ig8xduXJapi8q5qZFsWghnFau3jd1DcSQ7ufrHxlmHKsFCgz3uwlZuPo X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6aeb170e-3a52-4725-28ad-08d634c1b024 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:CY1PR12MB0618; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0618; 3:algF6t2peHqoSWsvG2rgSLWaGy/1RLU2bfz301TVB4rA/gA3Krubbb8Rhdv2lbwkx4914OoZO67dK87DQ/MIEKeKhEw9QQs2a5Q1fvg/PBAqzbXcpn7r2je/zFSpoPdT6uHs6W9CLic002qLIqNmd0WgEpZ4HFTnhxTdB4cQ96LBw+A8pjbZZZpxjxJJJflAePd5ldKwbBpJOIxAnAyrspFfvRETM/T7RvM5m44J6B65BkyUQ5bUnyWYyuJ3j3GDJWAQNlBK0aq26ENU2C/PpHqj6uIQ5Qu4SsQPUeBzpUkeWRK3QKhxejfZocygjFvym2Ild/u2pKpurbuvJLE1KYMWSajSaOiza8HTwEBhpl0=; 25:AoegWasqbcv8sKMs34U5ZsvpK47+RhWeM4E6zMWLOezXxD+iC/nLHJageLdFIyva8PdT7B08MMx9/IzHnSfhlX2RGaG3ZdUusSMFNmwK//saQZykK1OG5BnTk29lQEz1J1yw80WNWK5utliDEZrC+MYDXDEoVo7Po7uTW/7S7CHulfOkOI80hwJq8wj7LUTvnrcyBurlNq20E9JwCxie7+S+f5Ps69MFHXdgp/qIsUH7DC/1hunnFFzyloB3pzRmSFEIak4VTi0x6MDtc34lU9xkaPBa3sE+thC8OqBW2ZDjSRa0sL0TO2SVPHX2aA4cORqg1hO+llB8kMjkTugdv3f8gX7EWGuaOSzwRQNWG/0= X-MS-TrafficTypeDiagnostic: CY1PR12MB0618: X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0618; 31:YyoyMWrv/Vk4ydtmlXnn+H0aIktCqVt4KQ7VHcOmmNJAkq477y0GdX0e+8HyFYJBa1KdhC08a8c9+eaZOQ86TPugp32Lt9cs3NepXENZLsn+pOA+qD1gWBVF9dys4tfC2ujE1yK7cXEToXP6S1cqfChOWHzHr3nd0lKe0D2YwWwYErhLJVU46b0hbQb+FKuR6mda0y6tbbpwtI+5mTrOp2MasnOw6Y9y6OUDsuMmefs=; 20:GQMLiajSFDH9SN3wU+AMiSE0q+HQcOn2mobw/gwREKavpSxnPbkTSPEJcyiC4kbCvvFt2daQmv7pM1yyomyK3uX52AN5H2BNlI+KlZVYNSPgH4tgNAmunUnvJCvt2lyroIlrsD/DcLxENQvHvjrW5/JshaiNM7tTIBLW6JjuoJUT4jC0lK/QTwJ381PYpvdHFpnekmdckOQrZLfzAh6IEyV4v0AmgZSCn4UndX1r0DAM6ufLgGkLN4ugQ0iQFCdmtG+h00moZBEOevnmmez5Ol3eSEa6EOMN+hIOMxUnhQO/81uSYZWSwpN4e7UwTsHbD2iGjQBOc7VSXYWCaS5zPggB9nLEXNQZZZFTpLGmFkivGInrRgTFbTBMauASvYiFa62Qh7+Xh31Yxp6/qF6wizBG/QB1XX/WwTFj7mQC/4ARBXNR3eKx3zdbWZ+bvrh3jnQOtFuu4RrLNMn56gTwqPKiisygR/A2sZLD6Pf4a+8SD1pc+VgkCWbbBTEm1tn9 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)(93006095)(93003095)(10201501046)(3002001)(3231355)(944501410)(52105095)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:CY1PR12MB0618; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0618; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0618; 4:7W+Rk8Kn/S15Nr4ZdgUV8Z2U6DgJcKJxcPQiFI6H0BdKS4a3myQ6ri7fkWbvZlI9lyGpOIWkne8+rbT5Y/0Yfl3RH4cHcz1EBSmPQfIAmGUPZA2YGWGVamfGgYNnweLsfmDdIAmcBGHpA/xJhioV5qGd/VpWP9ipYqLrbYsQezpBFsc3vWHFeTtFsZSAmlLpATjd4dAvYc5ykTKVgxPxsabJvHIsMD/Vp0zP8GGiHe7WR0IO0AhZejtGDUUzr/TLyJjSGyI3wJFIBdEUy0JJ0an2pqn9hHnjXMPVNRdjA7TifWOFq4pw6ew2Z8492o+I X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0618; 23:RrdLJ/20A6iMMw3RQAoKfcUy5YTwBRcRijmqo2DzW?= wItUdpHZOr5A4zjX13RmOoWNonpJpkmwMA3/D4PWBgFo0ZgwB/Y6tueckAOYMS64Q/h69jHkt7tUsYna4OzXlLOqw1yuvf3xW/yepmoSLK7OzqF4ThTlV/Iwj7HNkWwEYqqnskSEz6XSHrfpYTOsldSDxcMI37UCNpCU9DzVqwt950Kxu4gqgZQi7X/uAlv3Suc9VpwIDnRgR/0ACsWZQ0nSRyA+Vt3OTEKa1IRYyolTjwAhNdARdcmVbAbTcdKrEyAF1vJgxT0ltqDCXmMdxPTh640jvV3VAFBNF5VYfYTW30GM+79SOT9x7HjX1WDW3hrfKwLQ+WlNtrOsc0imGQale1sff1OPAyrgJLT4q5wWG1Tj0Mg1LFhDfhGSQVgMgJDatrPQuLIT5VrP6SmD+6HOwKYguTVh3AFcfpNKoTSD4LnYQtJgIGkplSWwBJOpzwmR2aKTnQtRa0IKOqFAliHWsNQifgUXEB1IEiqhA9aLxyn0YOYro9Z0NxnjMLRACKBzm0LaGZwoKWutyBfHYBjtAn775djTQ7A4MmO5u4h80RNPV3PnQMWwA6NQgXCzh8TcfbyJfMPvXh7U85T5SI5ymwP9AmMMiv3jQsQXPo8+22LrhTtRMIEsZOOpi1b98Vqe2iDqa/lejJ8sC5PkX8itYj5R8Y7F6AcCIwdr0xf7na3gOznAyIBVjnb0AcgascRwne+nS09pevDs6vNyghKURPFCK+vhNa+rskqyt4vtM9c4ik+bUjiQlLoXYJLa8rxEkPbiG5dLGrqvZIKsN2y/V5PqIXoLaazpuC/v/ODvy205vRQdLlapzgv3ZT2qAryLeV2f1LpqQYgV144Zl1c57zEtbBR3c/MZhZuzXnE59vyUIN1+h3qGvwMFq+UDj+mP13Ck3K6dqJMsZzxdESF2jqTMfBykxVoWKcCAyE1/MZcWM9LU/GxCHeYROKma5Wn23ag5wSdFNxkrIotji6fZ5FjBZpEyAYRQGgNrFBuOMustlrZ99jft/FXo3t5J85xDs9I3CDLKvoYsAWW0OHKNWg9cGL3kZ7XG5qZ4roq+RXp+hFTPKJU9vEBl+osHLo1T7D6HkgDmVo/CnvAixGv4Ul4yjzlnnG+eUApeM7XybzIoVETe1WsepqqyhNw50o= X-Microsoft-Antispam-Message-Info: SgCkAUwbBZSvfo0B6B0hVmn+zmfUh70xFZjro87BwQ2mYiZ0X0UW/xSycsNS1YU/Z3Eywhten95aedOMA5TGQ4VTCw/bs+lB9Kedw2/1P6yMz9yuaFWoyCRps/E5QGlAZzY1InbEwx/T21MsceL1FcqUa06uoDB0xYwTkWPepQJ8va+1j+IgDuSagKJDpl5jk8tTzl3QGLMtDWdZ6kidarqDSuliw44uhIKyay/66745wewmEBbcwMM+D5vd5z0GerlfY1fUX9rjCk5J6gFBZ0FGZsMql9bN3OvjXB8LAM5ymxggzWyNK3um07GvpnO/jmAqjHmM8aIzDdtwiWs8a9oqCChyVa44/HR0aA9gclE= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0618; 6:V+xLrr386Iwwfff8zFsAw9XNUipmwxXdNn1zjvGRdkIy5BOqbfFktmhXyH9Av8DnpqYkTxlJfqURG/b0F7/LGOXT+nxTVFIZJWYcADjm9yJ+eJBDaL0eJ43d5yZNuyVDxiDagAJCzwAPMyexC2UU1pEeK8N7u0Db+tSu7lJQGfsfmq97tj1cPY+dulqpkgf1mCX3GmOs+7lbv/0d5cmvXcUzjkycVbs3R75c1kvcAlFwgEWJQ7xI7jmqzLgyUjXMqT9/l7JqlYk5n/b3BQfAUjHfVn0/dCsaMsFdSSN3xrKV8HfKAgUkCozYV1k4N1xnBMLkYmoZRXeidQhu56Tu+9sxJ4uaULmNeqlaytZ3P1MXYvS+FlykH89ryjqMEJRkgWlVtuPZwcaztSvn1wbJK4oT8jtyimkZurAB/28qy/oz2WSE4RStbhVrAz2FRGOYwE+T6I3M3Q1T1JvyAdCcUA==; 5:P9BjotURdy+YLt6/w9sEubHUE2gCkfr8/FCIFmRpsgg3Lkk55Q5H/UO8g2LHFGlGeL2PS0efElqJ3i70X1lRG5TThfpXwGu8obn5WBkGNK7aStUD8GjZFNFV9k81KzsExccusZKNgl/zzd9T+dra5oH+pHH3XxH5DCgVjDG3N7g=; 7:WjzG7rkp3Vg+e1or7BWdlo4zeNj4gdlet4NZszxi7RW0Brj2OCB7mJmZ2CTl0pI0LzxzDlaiIihAK+go0l1FCTWmP8F1NRJQsoDnHbYm5/BjsH9FglTIYGhMlD359eIYRDbhuj+QUxKhwftG1D1Mvwlt9lA4JWUrw7EtBCWCQj8m2ErTqyRW+jR1WAojIcxtz0W0/qg7j2zrPcudzUoVrUPEhDrEoJQ8gwF/mndNb+welGS4W0I+mkacqnOgPRSA SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0618; 20:NFVNfJ4YqIgN1bdJLTAZv27eRNXDaR4PirHBHAH4E2qS2+wI3ghW1ajcG3Tr2244eZpFVrKVTsCIp906BSXTEx0ewY22JrpbwzU+lqBTlyDDpVT96ovx95ljn32/C7tAylk8a3lS2Kegqn7QYZuhOeYWcmhAuq/SMPXoi8r2aHUs368LmpfckkJA7AwnAnegHRc5xmougGdcdokcegq/5FgV92DWhPyMMrR5pfu/ZrF5TvkxJfTpaA0AMiKOv6VX X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:19:40.6902 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6aeb170e-3a52-4725-28ad-08d634c1b024 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: CY1PR12MB0618 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: , 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 --- 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 830c51447e88..a0c0bae43494 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -692,7 +692,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; @@ -706,14 +706,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; @@ -723,7 +723,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; @@ -832,9 +832,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); @@ -856,15 +861,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 From patchwork Thu Oct 18 06:18:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646751 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 12F6D109C for ; Thu, 18 Oct 2018 06:19:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 03303286DB for ; Thu, 18 Oct 2018 06:19:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EB708286F1; Thu, 18 Oct 2018 06:19:50 +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 62F99286DB for ; Thu, 18 Oct 2018 06:19:50 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 909C36E460; Thu, 18 Oct 2018 06:19:49 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on062b.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe45::62b]) by gabe.freedesktop.org (Postfix) with ESMTPS id AFAC76E460 for ; Thu, 18 Oct 2018 06:19:47 +0000 (UTC) Received: from CY4PR1201CA0018.namprd12.prod.outlook.com (2603:10b6:910:16::28) by CY1PR12MB0427.namprd12.prod.outlook.com (2a01:111:e400:5191::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.25; Thu, 18 Oct 2018 06:19:45 +0000 Received: from DM3NAM03FT022.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::200) by CY4PR1201CA0018.outlook.office365.com (2603:10b6:910:16::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20 via Frontend Transport; Thu, 18 Oct 2018 06:19:45 +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 DM3NAM03FT022.mail.protection.outlook.com (10.152.82.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:19:45 +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; Thu, 18 Oct 2018 01:19:43 -0500 From: Chunming Zhou To: Subject: [PATCH 5/6] drm/amdgpu: add timeline support in amdgpu CS v2 Date: Thu, 18 Oct 2018 14:18:40 +0800 Message-ID: <20181018061841.20645-5-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181018061841.20645-1-david1.zhou@amd.com> References: <20181018061841.20645-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)(39860400002)(136003)(376002)(396003)(2980300002)(428003)(189003)(199004)(1076002)(446003)(11346002)(426003)(126002)(486006)(2616005)(476003)(68736007)(478600001)(106466001)(105586002)(53936002)(2351001)(48376002)(316002)(16586007)(97736004)(14444005)(53416004)(356004)(104016004)(36756003)(26005)(47776003)(4326008)(7696005)(51416003)(305945005)(76176011)(336012)(5660300001)(50226002)(8936002)(2906002)(50466002)(72206003)(186003)(77096007)(6916009)(81156014)(81166006)(86362001)(575784001)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR12MB0427; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT022; 1:KA1+WjzMRRaXJR0be76VAroSKDtilpi8CRLMs5bVQ+xTDricg+/794p+H+8+MdwqbXm8/wsyxQiZkbg8nCUI3g+012CK343ey7rFLLLT5n+Ug6pqmhwy6PiYlaAckFX6 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ece03f90-1a49-4862-7a69-08d634c1b2e8 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060); SRVR:CY1PR12MB0427; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0427; 3:bPAeReReqyg7BPMYvOdCedTGa9C9euA05n2Vnq2XJp/fL4yyvSEPbwa+wMxKNyiw9DRX/DT9N0otp2fGiHN2ztnTeNhK7j5p3yuf7ADgVcJZGrHT6CTznwGBrpHYTSIgnJmCJ0Muo03xpBOdaSvDZSEi6xduwSQ6RDXA18Gb+IkWjCfaxlrnZEE+pwY+mnOGFp1ce3wyQ57xEYl0AhcDh9SRryV+gLCig1CN11ST0rI64JAFbVN+35nfUJgEVmKPnGbhEqH0mNzxVQ2vc5lhHIJsyHcovROr9d+No6Vcn2bqwQljXKTUcwG0YSuP9kxHkUpogT2kcVLVj4ndGaY2Q6+ChklscIXjYmYJMP8zztk=; 25:nysE4Z55Up+M7ZJTrvya87ujUZTCKf461HdZFmH4D9DZYf29X+F0JT0PigycdRXBot1TW+lCA7NySLzqNTPEv/l3LXtd19hLZI88X6xHeFO06yysRcyYnOsjZOy4Jv2dYFyNJ0S5naLDElnQMxyIhBrZyVs2BMgzcLK42PN0L3w2LTIlkWuK87qrlm6jW6xohsb+jiWPsPdFPjT26NaSSiEh1wV3Y/nFgp3IgKT1qP0CVkugKHmOPdE97hWZ9hLDgtvnETO84nuwALDDJoMseXfuoYDsHu919y25z6NwkFTi9iuZU7zmegb3/byi7yem+kb5Ng/LS8mLa6PwfMPQ7PNpjDswpcRg/rnXDWTt6x0= X-MS-TrafficTypeDiagnostic: CY1PR12MB0427: X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0427; 31:OQ53CapPeRUzwbRQ8lcyX+WzbSB3IECwd8/b9dizzZD4y7QloXg1td5LVtGzyhkxT0O2jOF/SKKdWoZ6nPJPe+Z5lTsRQMn+lQ26B9WELRBcvqi4Q+X7yabRe3HMcwsWw0+ngvMWAhGpYV2E9TEINlbtJ2p13aDmc7JsInUx/zh8XbOaUwJAM9camODTumpSuLM1BJG616s9bKpVKBe++M8SjQyVWRv9MQvRRtjmGgo=; 20:xD+MQhZQJzbx/vU4F+RCWHJtFj+UOkmQG56UyJtPr97fDWsFEHwFtdcUbk2PSMOGxDdhLjxjlnC70tY3mgl9v78lU0drqHRGv++5q4zOIPSpv2UuqSFvnxAVzjlkEmgTYCjSH3emOzuZAvcI52xFpLo5o1Uel6mM1CVBCW43fBtPZgcEI5sg6Wg5GfZHoJxonEM2j0nY/hgqpODqlZ2RmVTDl3cihk078nxg6ta1zQRp/vqBiwRoXptPAtEoW08Qps7VDZBbyh98w4qnHongiadIghMqZuOB/fbUg0k4dGfaMyS1wl3yv3iZBg7YgDxlqAB1ZQLegTMeCQM/lnaAnj0/Mfj0UHr4tbT5LygJRkbzKzmp5ST14+mTopg7xZmMZ+XwgxMcGnrgvKoB9jXOoT/rb1MBR6SK/Oo1250Rm1AIAs/1BazjUuYRmdUYKLlZX4nTOGoTl9U+D7bqJK/WHLJoVOwhQEtIV9m8UUuh940K9Ju+JpJbEHcTRtaPejtA 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)(93006095)(93003095)(10201501046)(3231355)(944501410)(52105095)(3002001)(6055026)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:CY1PR12MB0427; BCL:0; PCL:0; RULEID:; SRVR:CY1PR12MB0427; X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0427; 4:8NvWX8RldTpfiURHJvjdqyNMPi9gYfNk1adPDa4cphfGHs0PgZ07UZtbU/XlNx4iqERtu2vah8jJdnpT6q3as1rMhvxMwwJcWXLCn87jnPqo3spkAajGi52suQTY9J0GarXXWAIptyQDRPHLbOrHc0luR6HGqozEduke+iDeLXEm9u3X27IBo51/V9WoL2yfQJIb4QkVP7UcoxwDAmpOIMbEe8J9bCZn5nf6lnTOQZjpFdtNAGYMe5muc8jOSyBaUYxwlFyGYrwW8Dcq+3nHMRdnz6WTV47q1uHku08Jhigcfqy2VrbowtwyjMQBv3RZ X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR12MB0427; 23:mW3iHxOrUR9j5PA2JyXyVoJU07K5YsWiyLg9OyWmt?= 3nU7NQJsNzSmKbCnlDLFyYMBrSfcJnb1x1ae4I+YFBx/M5sYHBPgjcKBlsmuoG41cWRAxoe0YHavCivFOWE59XR4/S+f/ONEqyC/T2pICwniVrsslMvDf/PMS+cMoLB24jwqWMhXwwYO/YuOpRHKY3eH1hbAlOiRvSCEffuZfaP6z5/vPgV+sPPKSw/AVwvBD1YrTvbJxkBBNOzT28z/uUNSzRR7vMh9Sp2SXGufh9bHrpNrQT40Q3Grk+IFMr3PiANjDYdlyQcf2tkQM5T7vBgN5tL7cqGrio2fZqPIBy2JumweiKfY6AG+oIVWDyEQcWWELYTvkU9lxh0PIevowor/L6p+TWmYjn7wmRYTVxPIEbtHcaTdZTj5sB/hws4v9OuVFWywYOZQuwXDEWDVD3tDwen/U33K3rkYuURD5FbZn2hvbpFTsVgBoG4wdOjGmnPeUdLLkkobHfeiVJvWE8nfspU1yBk1lSAey9/9fZB9LLnh3Fo7xviXweFlv06xEiDdtQmhmJ1CoR5zo34vx8+8jQLaGWJgyw4ErNFMwhDSPjE+HX+QWKAbCoAPoE6HKB8itDhM0yLOgQTio+H6VSORVDLUHrftKNq7/xNAAKf8BxUCtgBDx1QHVsBfWiRl61pIzP75F1h4oxh75L+r9IyOABNVyiSt1tj7bVqmbOL+LOre7HMqChl4awCtYd3vgVgXHQeu6Pn5BrzTYwRjGJ06xEZR5II4OqTc6PeJh8vaqoVscEgUWB9XFWn2h0K67ikr6AIhfrqqjeNyg9cwqWGkZIRIcDuRNIXVw9ge4pIyIEHXBUgTcaYYOX6sTQ6pIMqXEGReSk/evfJvjddytMHFrN5gkRmyyB3QknJbmx7c3iMPhcOy2JOYm6F2zileXPMz6mcLCAK35ZMJYMJjMpp1IfeJDSe4Sd31sHeQRbat8fGUGmvMhXo6YAnkw55T2Y0w+cAcYDsp5L7Ch4DGwWueWqJ7rWJ4yIm45gwunMdIHoOnGBWnFqvWKLAVGK229+a+vs2SzAI80mDQcpg0VLN7Mj1Y7bgVkcUNiTIq20qm35WqAO/lifsPQn9Dh6hp/88/N14jq2WlrNUvf0G9iwOQmfdUIbgEBsa6CxRvomSUaxrIyhNBhGW4NeJnF/Zv+A= X-Microsoft-Antispam-Message-Info: SEWWLg6kO+1S/wbZUM4OyFcuWlgA0oGZFS1HC8hRq44tfeu1878nI9nC5glCJrngt0GmOHjOXigxehY03DFQLYMYuFUweCpO5NWSPj8U71SBATGOcdJ+3B/toeND+Mse40wiGBqwlc+JPvZ9VHLFpmkQ5r4xxDsiYvZvx3E8D1JrKORpQN6AaGsxs8+XsgSh/HtDO/P48y2AVttrmxCpulBXAXjKg++lR/a/fFTxsbAz1NZqbyK4VU8j2M8L4qlQe+9NO8h82ZXtmmn4G6oJssTQR9IiGhlHx0dCl7JwFfMoNJxTJjcGV0MlsL57k9H60bqOEwEpz9xl7F/fMsrlwhuKs+WVegrs6FLMsEdlERE= X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0427; 6:wso6/WefyKDu42WY5JA4YPZ7rG0xi/A30H9ctR46lcc2E2bKe/7K17Cz3yRquwc90Ru4XwI96ny+4Pn+pOtc04+jejvmTySuOGbow6GJy1ke/KypfWmKOjeoZDJyWblmX92PqUn7AfSOhcAs9rHk8xcThpBu4K6pmiFrVo70UJkHZOKp+TYRFKEPj4jKY2l4Im76Ej5E6nd2rL0g1FcWFr4Ti2zTFuquqjBABqUaeTXa4pMDtJFpzurorqqVH26jTfhS3Aj0MosNS8BbIzwMCE1hNBymvxqvsbuYjrP2fr/aS31j01ruDALURCgEuUrGXNzRFWNIMkPe8dGW04PbQMFyoZKZBG9+uPxmGG/XAppHdLOv3qu3trjPec7lVHex+LmWRdr9HSD2l6rtdMZa76FFx51+4S3gcHC0vEeu3UditlffSQk2XmCuyo1Bwk1za8sKbyoKncgr3NvANjFCxA==; 5:3MDx1FS/0v8RK8FOcSguMOuSn2fj1ZumAjyW9JG5tlEGh63lTfANcCrBybBOe9QlPBEI8qNuUVa9ggeZM0ZLT0JsH+7CATs54jyMVWgzyJ3rOArzjbkFnojlVI2P7z1EAqdFGMU5vRRHCYb+zZplIQRa46/vwAbXrUw7EZ4GdCE=; 7:DdywC3HvLl/AGkRJUetupigjH2mDGKmbhK/1pih+Ezz3xJGk6noOX1fnz+9dR6Oi64LyKiD+klJ8N3Fdr/iNCHpfOGWjVHCDzlocX1xD56+6rLBq88Vuj+KHme+49HtuuKHIF/Z6XN9qSgh42JTBOMhXnO4Jy33GEbDBfUTteTb9UJ4b82SChVvIj3ULup7LrOcYBo6pRz/aIysmTy9J0puyo9YDnCN/RMxC/St0tZU/6zgts4/v6G9Ev01cfajw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR12MB0427; 20:HCua7TWz8SlGzP9g2r/RtL/2SCwD98qElmP9qwm9sqdxcakni5/rwvqzJv1BRs/sYb8KCWVcBVpXB9bwMUMu6KPvO/7q6QkRQdVxAH1F2iCBDdGkFJXsinK3CIFlNx1jA5CrgBIJ7ZZw6K59ezPkuQMBobTV+lq5xbPxGXcxscfHJEP1mLt68ftH2ktDrPLG4esW9RCe3unKgwsorE3GS7jdEDjRdGn0DPHlfr0C7Fq7jGR7BAtnkWgIWu7FDrOs X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:19:45.3322 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ece03f90-1a49-4862-7a69-08d634c1b2e8 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: CY1PR12MB0427 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: , 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. v2: separate to two kinds in/out_deps functions Signed-off-by: Chunming Zhou --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 8 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 111 +++++++++++++++++++++---- include/uapi/drm/amdgpu_drm.h | 9 ++ 3 files changed, 112 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 6cb35e3dab30..2aa2d18f0a7a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -515,6 +515,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; @@ -543,9 +548,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 8e9a65a15875..8cd6520e7455 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -213,6 +213,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: @@ -793,7 +795,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); @@ -1100,13 +1102,17 @@ 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); - if (r) + + r = drm_syncobj_find_fence(p->filp, handle, point, flags, &fence); + if (r) { + DRM_ERROR("syncobj %u failed to find fence!\n", handle); return r; + } r = amdgpu_sync_fence(p->adev, &p->job->sync, fence, true); dma_fence_put(fence); @@ -1117,46 +1123,108 @@ 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 drm_amdgpu_cs_chunk_sem *deps; 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); + 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; + } + + return 0; +} + + +static int amdgpu_cs_process_syncobj_timeline_in_dep(struct amdgpu_cs_parser *p, + struct amdgpu_cs_chunk *chunk) +{ + struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps; + unsigned num_deps; + int i, r; + 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, deps[i].handle); + 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 drm_amdgpu_cs_chunk_sem *deps; 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); 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]) + 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++; } + + return 0; +} + + +static int amdgpu_cs_process_syncobj_timeline_out_dep(struct amdgpu_cs_parser *p, + struct amdgpu_cs_chunk + *chunk) +{ + struct drm_amdgpu_cs_chunk_syncobj *syncobj_deps; + unsigned num_deps; + int i; + + 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 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].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; } @@ -1170,18 +1238,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) { + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_IN: r = amdgpu_cs_process_syncobj_in_dep(p, chunk); if (r) return r; - } else if (chunk->chunk_id == AMDGPU_CHUNK_ID_SYNCOBJ_OUT) { + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: r = amdgpu_cs_process_syncobj_out_dep(p, chunk); if (r) return r; + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT: + r = amdgpu_cs_process_syncobj_timeline_in_dep(p, chunk); + if (r) + return r; + break; + case AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL: + r = amdgpu_cs_process_syncobj_timeline_out_dep(p, chunk); + if (r) + return r; + break; } } @@ -1193,7 +1275,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 370e9a5536ef..57efba7f3197 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,13 @@ struct drm_amdgpu_cs_chunk_sem { __u32 handle; }; +struct drm_amdgpu_cs_chunk_syncobj { + __u32 handle; + __u32 flags; + __u64 point; +}; + + #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 From patchwork Thu Oct 18 06:18:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chunming Zhou X-Patchwork-Id: 10646753 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 978F0109C for ; Thu, 18 Oct 2018 06:20:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 85E9C286DB for ; Thu, 18 Oct 2018 06:20:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 76B14286F1; Thu, 18 Oct 2018 06:20:25 +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 E00C2286DB for ; Thu, 18 Oct 2018 06:20:13 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F13986E465; Thu, 18 Oct 2018 06:20:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-eopbgr680049.outbound.protection.outlook.com [40.107.68.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id F15A86E465 for ; Thu, 18 Oct 2018 06:20:00 +0000 (UTC) Received: from BN4PR12CA0003.namprd12.prod.outlook.com (2603:10b6:403:2::13) by BLUPR12MB0419.namprd12.prod.outlook.com (2a01:111:e400:516c::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1228.24; Thu, 18 Oct 2018 06:19:59 +0000 Received: from DM3NAM03FT013.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e49::209) by BN4PR12CA0003.outlook.office365.com (2603:10b6:403:2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.20 via Frontend Transport; Thu, 18 Oct 2018 06:19:59 +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 DM3NAM03FT013.mail.protection.outlook.com (10.152.82.79) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1250.12 via Frontend Transport; Thu, 18 Oct 2018 06:19:58 +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; Thu, 18 Oct 2018 01:19:57 -0500 From: Chunming Zhou To: Subject: [PATCH 6/6] drm/amdgpu: update version for timeline syncobj support in amdgpu Date: Thu, 18 Oct 2018 14:18:41 +0800 Message-ID: <20181018061841.20645-6-david1.zhou@amd.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181018061841.20645-1-david1.zhou@amd.com> References: <20181018061841.20645-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)(136003)(39860400002)(376002)(346002)(396003)(2980300002)(428003)(199004)(189003)(1076002)(11346002)(305945005)(316002)(104016004)(446003)(68736007)(16586007)(2906002)(6916009)(8936002)(72206003)(4326008)(356004)(8676002)(486006)(426003)(97736004)(14444005)(50226002)(2616005)(6666004)(336012)(47776003)(476003)(81156014)(126002)(81166006)(186003)(575784001)(53416004)(478600001)(36756003)(26005)(53936002)(77096007)(50466002)(106466001)(5660300001)(2351001)(48376002)(86362001)(51416003)(7696005)(105586002)(76176011); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR12MB0419; H:SATLEXCHOV02.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; A:1; MX:1; X-Microsoft-Exchange-Diagnostics: 1; DM3NAM03FT013; 1:rQcySB/i0WJUK6xWqa7IlbmhkSgDDUJ7cnknhdaetULEG42NCcTadnQrAKi2KEEJU7HYx972PRCMjkxvMYTKWt96j1xEE9cKXiSrUKaDDumumN+xNhpSTMvJp93pqMj2 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 83f87b13-5fb0-41d5-710c-08d634c1badf X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:BLUPR12MB0419; X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0419; 3:V9zpSN3ayR63dkdamuxWMDDSGuZf6P4icWvW0Q7eMb3zU4I4vIXGwZWCqicYnugpNYc+agzxOl19RguNltR6lYjtC67Fib9LywdMpou3TSyOY0iV58NJTLCEReW+0EqGPx/UDAuhDYyw1npOFySiCAhCCw2+FXm71AVHLC8tAusGfahQtQVp+7HaUiaguWeE95kUpldjROuw9Ra3r1+cgPrYhcyrUAgvnVV4jTlkz9ZtIrxmRc2/sI+okRgFTAUVSjulzRzw7zgtLEE4NgR2U1Zim31YqAT3zCTYTiGw1yGrKtT1QDrRBZkfqejkEHbYuDRDIGb3DcjPjmxKW82zcLrz2yv50FQTivASzrYk7K0=; 25:48dJXxjSDsOFRUj1p2DmLpPMJppKNUHXC7d3aPLefJ1Ym6ALc8vivsnwr5rB3kCHtjquzR4Yg+yeAKjUtINOIU420Uzgk0AgrutyjRsk0eMG+FFXjdhJcPa1hhDROgqqCfsjs5Snorud9rDCxDi+M3rYYAiDWkcpYZKbITq3r5jPJjUaEbgn2kddhOPCQRcREyfvUL49ZAbikDXpX7GQCDoZ0KP0l6pwiQIX4qFlDkafaMGYYJx03qzpv4fi7IOQ3qbLzu7rGvO4t3I4CANuGnohlGPQtumPc6PMGN6wHicpVBnYLETN7yW6FGTq72kHUyNg8MNKTcdyKmj5txrTWxmdQ7v+ZBJh9FvvoEg3dHw= X-MS-TrafficTypeDiagnostic: BLUPR12MB0419: X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0419; 31:bzSHKFmuKylTrrCKjfe2gpnWChxa7UI6w/CpEJNvLTsD3x31CYBiQe2udMUACMlTA6rtn0LWDwgGg7FraXZtmS3kWpI43JjlSixtBrRkaGndbwbRf3m3zq8/vmz877D45Zb5Tu9JD/pLcyyEDii3j6JcsfVVaVsFXiAlCzGdkura0DYnAKppfWZ6hfRq9nWWTr93uvpdeUfMVXHm4xub/DJgcprlQUzkYMotivykqic=; 20:wodCefjhzdq9J1x3rE0e0rga4X1lO092fdQWmimyU7DkZMXXe9m97wC7FlOFwevMAnHTw8o6F6r/JWTPS3BgMRgCiZU9fZGgc2yuUgDdRAzhllYNTCo6vePAy6e21pgzcK6T5XvEMUsZF9fPwx4Wd3BdUKr58eZDuiUfnqvcG5w+/OH+pPVeBqA15gK3LpAlR6vWu4h8ZiEOqOsH0PnIKx+evTqodqJID1HpL4lbEzlcIvISdkO6aY8ev47zBVFoGR1W5zjWvCDteT2C+GjdSrLcGmIlAkvhn4PfPexizCuBiSWukGS3yKyhGA2LX6nUb0iQRWn4nQvU3ghdmLK6EctvC6cuM3yt7reVzjyjIVy4r5G10D8mvGkun7Ah9EsN7c9iELdEndeSDm3aaL951B17rCArof8Vk6764AKNJthZAsueqlL5J6tDgNpUUgxWGbEbPkbepdqrcSLH08Bd0MQkJ+cTj0sgL8W51fgmeUziFxXPrm1NM3EoDz3K530R 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)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93003095)(6055026)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123564045)(20161123560045)(201708071742011)(7699051)(76991095); SRVR:BLUPR12MB0419; BCL:0; PCL:0; RULEID:; SRVR:BLUPR12MB0419; X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0419; 4:4VW6tpduDyDL3i6+jCok+gCmDFDfiHH3sfbX/mA0QEeLHLkUkE73oipSXftg4aJO/+yGMbzE6jRlqNn6ubJ2l0Ty6VwCImPnrcEPEFVeinRlRtZNtujYYQxOAkCtk/yP1e3KaC1MGJ+1+3OWi9++Ozb1tVGyqx6V8DOKuIM2jhd0ZcPsAa7x5+n8AZsbNP8mi/4OfM+0PYQoVawkXygM1V3BpfkgOuZQr24ii7hXYljEcD+Uoa9oRY+i4wX8acpAkBQ7EHAN9V9x28RokF8XlYeFRCAKKTReUBBfqg+U90C7WbdcJscGXjgdPuP7m6Yo X-Forefront-PRVS: 08296C9B35 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR12MB0419; 23:yShlDZehkgj2rdtHPg8uwoQ3v5bvQbWVaChikg/WA?= lNsEQWvYnKenLM4r3EYdy50LtyYcXFYw8JIXEHWbZngdTH1mDkVVgbob0JFuDXmWrESFAaYYFQXQlX3f8/BTZYJmNbAf6a7/IAXAcHnuPye0nwyvUgDXfLaCT3EA1Frid/bjGyh3HRyV7x2EPlnnx8bNw3IUJNHWamMxaEKuI4K9VJmjfdyPdnATZP7RYbdnzbr+RWHmhNlu/ngrZyo0cp8vg3PXlqiAZpevXhJ8O8qUq94mgY+bCebjXjnt5iLHsB59PszTbNEpINsfERIk4Oe4iV5iaJxcpSTpmy3F8KTSWUhIhofolgr/3sng2FYPG84BZQmbETIUPuliv2BND+N5oOM07tI3aiklPW8qaASMaJ6/MYxKXtEHBOjVwk6urI5jQVJ4Q41s4z/Ifig3KFNl9tYNkubk2BN61Boi1fBwcUTfVEDsx5ZJxnyTMbvuOamP1zV7ve5PpCFRBA89YohiL5DAFss8GHqQCxiaFrIjbxjBwDwLkpZkI1DmY9g7/+o2sqEncfI+u3t3EZ9v3PTisAFh6qv0zFVFfClKvHUqvQfBtNa5i2q9Azaadi6OQhI5tz4DNgOzyGBiMdIOs9xCaS/bVtRY6rgFCpWvG9CmDksNC1+IUJ3EqJz7tkEEPbggvBE+Z7CcEC1IDOOj5FdBZmnGGkvrQDbAsVGccUdNQtW9fMSWiRoxlpdbufOOgkpAO1rXirLunA2JzgP3gaGM9FVn+lb5isqmIu632emO170MTPwfhGkgPVK2WWvxfCK8eeN48dW1pRQKgqZDCUNcewpGQTKRHeN04gsAr0wZ7p32YB9ssD0QWOZWJJe5TZDndZOwA7UXTZwyAcmLzpaqm+GPHKtAMwoK7Mt6H24h0/1cqzdDYI3mbn0bIw/VCMeMOUbZy2TuymUhlCHqe21BGEMGN4iv6C6enqgXp7tEziP064mpfTfq7K6PVYYPtBZVZhuMpeECMsBMIWMRHA5zlmsXfzIm2vsg7wkWjPLw0QVBaGUlzL8OKYVg1PHNv8CHk7qnTTrWuLq4gUoM3YsuZcLw7wMg7YHpjQ9kXTOTGplr+01JOKIrEo3s284+aYmuWfL1pWEUZibjiCaQHzA1OGUT4mzXO1LsyLX0O70m9TNH+w2eX+HHroih++jkSNos08vlKn1VaxgkEyQUZ+P X-Microsoft-Antispam-Message-Info: tN/H5+zyB/k/rXrvfMMVpsSuS/UOneYHm45SWC431mp6JKOyz0ZTJH83TENi7ii/4ohWg4Gkrf6rkCvxgtMzS5bi2+gWDkapoAHwEbdRbykQhm4EwaKKlI4p5ipudw8auIzO6qL8dRxwP5XFguQ4uFib9VOc+7Ni5BpKKIuEmQWghcZF6+uaAkJmhicCzY3lBy/EZQlw753Bzn+tcCave6bnaLwXcNH/fo4cBuXflcUgv9tvZRoRxtuc76JVxDRfuq8FEDvHVckk5E9NG1rxG675TVT2hq5a0Td2+mr6/rHVoe93DBZqWWIW9BmaLZLlsphKNGCKmyMBVLKrnwFpDJJFDz0FGgGC0/2CGnE0GVg= X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0419; 6:vyJP0hnjjJ/96fj18QCQKULTgV0i2gxQYl8QQHABBm9XcdgNosMbCqwrRMEcwY9ScX0NA89Za2bRC38slINukrOSCLwjNEO1Dx6jNNEO/qBeib8XUTit+ppKrOQIKjXMOpvcrQrheNcOJsJ1WIO4hxklrj8WtlUvd2F7hVSgqZ/xWGGHviYrQeROUp83u8X8kG5LvzrSHlTSx+YK5t/jb5LzL7vcaKYxWm4EI/GybX7MqlF/zgvhSlJHs+ims69TIGDqjNDZGGR9BiXMk672bhLmFxducUtGTGLDWLg1e31EWtIZB97dvdB/3qaSVkEoisrIZmAwX62mPjZdKh6OdF6HJ5qS7phUeh+s2bIGB10GaTAk5eDORJOY7ofunn/oVvIVFO9QNL56DmVoEI4F6//v/pnCVy0FChNzY18U+1xX5wn8dErgFmsQak3E7mHabYmuW8P77cCNYWmuNCxleg==; 5:e3qAUViVPomdHPt31i6XLGBzy20aTlmivj0IAFVYAe/poUwGRbz/pGZmIAyzj1QXWqAJ/u4iwP93QNs6SLVSMUObB71/v/8UqAS87QM38WbjuFyvn1+6sNbbXlhqJp0FAX9x/NYYlWJ21s9iqAubLxkNkqs65n7UTYDHTpgMHqo=; 7:mTO321IPmAkP6JbcRNg3eoRpEedT8473TVVg52616dNT0fJyda116MGsGzAD0HYxf6nLsmub8GV34MJpqfSWff6mxrpZKLQmXDc9UVEO4lXw7EXmC+mHica9/ldTg6d8E8JpLrD5JZPzQpIankwcIFp0cyyKMLfkRdPDSZMVx1oG5lKos2kUNfk34b/AtXi7kZxOykkh7BHV5GEuycCUywk5V5sSmYpJsCfJxRbciRRoPkEZzHf500xq+VpFyXKH SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR12MB0419; 20:pbbyLPkpgb03NWeE2PE+K+BKZuXooD4ni8/jaCxhTyl/o94VSBT8wnACWj1YYF6GgaIOE5Ypibs59tmLkmc3BFJp0nNk/pmOk/IRe7x3qMrtE82kLYEd3qqP2mBZKLsgKUuiqZR9hZtdmCMi59eQFn9jWWPuLePzJu4vpN+C62pZGaYIoWiNqqTNhp+SoFPTq1W2qDFYoXy9d+2i01XCq7TXWXbdPS5uZ7eWOn3sWiCyYOJRPq8NgOKE40EeqXql X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2018 06:19:58.6948 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 83f87b13-5fb0-41d5-710c-08d634c1badf 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: BLUPR12MB0419 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: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Chunming Zhou --- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c index 723f0f7754bd..8e04e7fbd330 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -71,9 +71,10 @@ * - 3.25.0 - Add support for sensor query info (stable pstate sclk/mclk). * - 3.26.0 - GFX9: Process AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE. * - 3.27.0 - Add new chunk to to AMDGPU_CS to enable BO_LIST creation. + * - 3.28.0 - Add syncobj timeline support to AMDGPU_CS. */ #define KMS_DRIVER_MAJOR 3 -#define KMS_DRIVER_MINOR 27 +#define KMS_DRIVER_MINOR 28 #define KMS_DRIVER_PATCHLEVEL 0 int amdgpu_vram_limit = 0;