From patchwork Sat Feb 18 21:15:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58978 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554056wrn; Sat, 18 Feb 2023 13:17:27 -0800 (PST) X-Google-Smtp-Source: AK7set9r5ObOjT8XggGCHlIZ2wInhb7y96ZQLFfR5UQ3VygTGk0dhluoYCNoJ2FFzKRL73uiJ3Ws X-Received: by 2002:a62:3043:0:b0:592:d9e4:1b5d with SMTP id w64-20020a623043000000b00592d9e41b5dmr4566033pfw.6.1676755047132; Sat, 18 Feb 2023 13:17:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755047; cv=none; d=google.com; s=arc-20160816; b=PxMNieH/w8Dn7zoaBIUI0ZXdUUilwo5fpFO/T3W5/1RIOk8GzPg2msIEqG97Q0RhuM F0tREke7UvEqiC2rrKzAZFhIi2lW0f4qcUsyaKhVW5c/F1p4WjEiT5nbloRS7I18h3PC 8LM1mtwlenqAXDvFT+W6J2uPgoN97tnansp0Q694ieKSgdLO38nygW+T7erG5K/9QwD3 7y1cC6cjWKovKTSa0F290pHjYo+kxuKJqQ5lEArJ4UbixYAeKhwSvyypQ1gwYnURtYxM O4GAuTQI0ZFz5yBclTp2Rt9anQSapHVqWNovCjhS5838AoTBi3Ng0idHUUX9xCMw2xET eHpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+1OrC8Qn2ZJKlzQr5VPD0V+OBV4kyv6Pm4LEmbHRWBY=; b=xdnXJa5VOTOxidkv82v8DRo+TUsllgtdAjbsK/9wCmLZg2D2lqTD74+ULNSShZWJaI 3e/n7lQoKL1rCJ7uyi/zcmk4WaxWY5i/pIxqrpv8C9wdEv7LOHwecFc1jylBB8fzVJoG /MTQ6Tf01dwVb9oG/JHjDApcjaJ0xZuCf6lTGjS3tbh2YeYpAZT1HW98BFfMbJ6j1ePR LWSDgtNXoTPofj4TGrVdzcjWH6wGUGV6xbKZjbOa0RQtSD7cb1WIjJsn0DsoQejhtvgc +ngC00ZtYuyLvphGLEN91uQhB1EW/B5YZ4QHxxijMUSY6UaKq/nS4yboLdx1OT/4/idy TL4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ZkdbOU+W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s33-20020a056a0017a100b005a90f60a0e2si9843033pfg.366.2023.02.18.13.17.14; Sat, 18 Feb 2023 13:17:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=ZkdbOU+W; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229821AbjBRVPx (ORCPT + 99 others); Sat, 18 Feb 2023 16:15:53 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229706AbjBRVPv (ORCPT ); Sat, 18 Feb 2023 16:15:51 -0500 Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 446CE12070; Sat, 18 Feb 2023 13:15:50 -0800 (PST) Received: by mail-pl1-x633.google.com with SMTP id o9so1553648plk.12; Sat, 18 Feb 2023 13:15:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+1OrC8Qn2ZJKlzQr5VPD0V+OBV4kyv6Pm4LEmbHRWBY=; b=ZkdbOU+WUTXbXuy+edMoJBjcaH2pmGSWOPbAWIOHb+1uil8B7cZRAXaxpt2UzBVglS K9D42mFhZUJcG+CpOfomRVhFsdfvtao4eWTFV3/+UwBd/316jEIHmEWPTlOa0RssKCj1 q6+JqVhrNYTe37sHAGTzgDmWHe7IAo585bi5HTzHmLnbqpizohUqvGrmEN6//nmpjn+I tFz7J4QCJ2M+hzuOgu5IwJPfJ6OAxIQDVrn5ObNQd/YyMKOG3wF0TXHse6PkE5PFTOo/ UCKE9AF4BrQl4QisNCpjzkr8PAcEaMAj8rLMQPzDN2Hyci+wm2KiAB2Nef7AnBgp3v2u IzjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+1OrC8Qn2ZJKlzQr5VPD0V+OBV4kyv6Pm4LEmbHRWBY=; b=v5OOFhvC1QsgleSCdN2DzsZ+HsCbE47C65DnedPT47rKZNk/rSmi/R2+g5r4t8JvFz QmtYAWtdGuNSJifXtKjPxAeYAGZ8IGnUvWbwgDhncOexoYRficVvvis+VbT6qsMK8zoX 4tQRApVXTxv9pdFAfHCUwHDfMcA9W6YiK2pPouZtuUSF1p35QQPUcE7pMZYvCWN11pxG T29P9FZrQJB9wQ27Vt9V9LGVUuErVhYSL0wu+Ryr5Qb8Lo4GK74dOSN5/oPbzaOuhevJ gLlsPbYiUNu01PiZXd+moLXspJ5quNZS2gfBfwdA5FRmAfjUI53oEBITtcvkKslVNM33 4hOQ== X-Gm-Message-State: AO0yUKW08EcbHZx104u2K2nAoSu15qoL8tqCgOHK8MLou1jjRBjcrBn7 ERWFuMho1xuJptUQ+tCoaYE= X-Received: by 2002:a17:902:ec81:b0:199:26b1:17b3 with SMTP id x1-20020a170902ec8100b0019926b117b3mr610623plg.28.1676754949710; Sat, 18 Feb 2023 13:15:49 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id x1-20020a1709029a4100b0019a97a4324dsm5059856plv.5.2023.02.18.13.15.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:49 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , =?utf-8?q?Christian_K=C3=B6nig?= , Sumit Semwal , Gustavo Padovan , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 01/14] dma-buf/dma-fence: Add deadline awareness Date: Sat, 18 Feb 2023 13:15:44 -0800 Message-Id: <20230218211608.1630586-2-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205100412615811?= X-GMAIL-MSGID: =?utf-8?q?1758205100412615811?= From: Rob Clark Add a way to hint to the fence signaler of an upcoming deadline, such as vblank, which the fence waiter would prefer not to miss. This is to aid the fence signaler in making power management decisions, like boosting frequency as the deadline approaches and awareness of missing deadlines so that can be factored in to the frequency scaling. v2: Drop dma_fence::deadline and related logic to filter duplicate deadlines, to avoid increasing dma_fence size. The fence-context implementation will need similar logic to track deadlines of all the fences on the same timeline. [ckoenig] v3: Clarify locking wrt. set_deadline callback Signed-off-by: Rob Clark Reviewed-by: Christian König --- drivers/dma-buf/dma-fence.c | 20 ++++++++++++++++++++ include/linux/dma-fence.h | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 0de0482cd36e..763b32627684 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -912,6 +912,26 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count, } EXPORT_SYMBOL(dma_fence_wait_any_timeout); + +/** + * dma_fence_set_deadline - set desired fence-wait deadline + * @fence: the fence that is to be waited on + * @deadline: the time by which the waiter hopes for the fence to be + * signaled + * + * Inform the fence signaler of an upcoming deadline, such as vblank, by + * which point the waiter would prefer the fence to be signaled by. This + * is intended to give feedback to the fence signaler to aid in power + * management decisions, such as boosting GPU frequency if a periodic + * vblank deadline is approaching. + */ +void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline) +{ + if (fence->ops->set_deadline && !dma_fence_is_signaled(fence)) + fence->ops->set_deadline(fence, deadline); +} +EXPORT_SYMBOL(dma_fence_set_deadline); + /** * dma_fence_describe - Dump fence describtion into seq_file * @fence: the 6fence to describe diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index 775cdc0b4f24..d77f6591c453 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -99,6 +99,7 @@ enum dma_fence_flag_bits { DMA_FENCE_FLAG_SIGNALED_BIT, DMA_FENCE_FLAG_TIMESTAMP_BIT, DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT, + DMA_FENCE_FLAG_HAS_DEADLINE_BIT, DMA_FENCE_FLAG_USER_BITS, /* must always be last member */ }; @@ -257,6 +258,23 @@ struct dma_fence_ops { */ void (*timeline_value_str)(struct dma_fence *fence, char *str, int size); + + /** + * @set_deadline: + * + * Callback to allow a fence waiter to inform the fence signaler of + * an upcoming deadline, such as vblank, by which point the waiter + * would prefer the fence to be signaled by. This is intended to + * give feedback to the fence signaler to aid in power management + * decisions, such as boosting GPU frequency. + * + * This is called without &dma_fence.lock held, it can be called + * multiple times and from any context. Locking is up to the callee + * if it has some state to manage. + * + * This callback is optional. + */ + void (*set_deadline)(struct dma_fence *fence, ktime_t deadline); }; void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, @@ -583,6 +601,8 @@ static inline signed long dma_fence_wait(struct dma_fence *fence, bool intr) return ret < 0 ? ret : 0; } +void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline); + struct dma_fence *dma_fence_get_stub(void); struct dma_fence *dma_fence_allocate_private_stub(void); u64 dma_fence_context_alloc(unsigned num); From patchwork Sat Feb 18 21:15:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58972 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp553812wrn; Sat, 18 Feb 2023 13:16:52 -0800 (PST) X-Google-Smtp-Source: AK7set+XHtLQowReAzWyH21vNvjyby0ezC+n4cVOvDmzg4UJ+klQJWvEtexfjSWwBiuQbhSho1rL X-Received: by 2002:aa7:8ec4:0:b0:5ab:be1b:c75e with SMTP id b4-20020aa78ec4000000b005abbe1bc75emr4262251pfr.24.1676755012516; Sat, 18 Feb 2023 13:16:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755012; cv=none; d=google.com; s=arc-20160816; b=yuNroSk1T+hAILPyiikCrR4eod3jWTqgIjScFPrAW4xdf/IslSXj75sXUWhjYCus3p NIG0U29D3sO9xPd1Z9rs4z+P8L2Yzv1Koj/3t6DhuPAdfTiVSNPY2tNUg6VoIRX97F3O pIwscZcBgXs12VCXjY9cVsHsdc8GCVBKjjrYr5PdEO4t6qaC96YPGq/Qw60bEWH6tBN1 G9csX64/3rMlFOgL+2eRR/YAgDPGi0U7x4wiv5atsxTES8EKibH6tYbMQOFaFR5giq89 JadaGwBq5SJfHjPWmkRY05bhu6lmg0qomJZo7UGEH+sRC+PPQVrspCHtABA59OyhxyZK Zcag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MohZmh6ZcfzJn1OmRfs/o8+oM4ZPKLi2FB+4LPpL34o=; b=Nk4H3H0EWSmOaQGSFfoRARMUT+RHT6pKf8MxoY9pA5IWrLGgOHtod2DDNR4/8nXaeB /z2UpCup6TKGFt4606AWfwEyc3tTQlVlQEW7hwNJK2cs2+xpjDMKFnC9hmtODe2d6AWE sGTG1nN5VoNXQq8xWkpl8YXBgLLIgZ2XwZl8jd6c95oBuIYFhnKP43L8LMjwK/272jfA NZOZWvY4LkMSySY8IpIvllKrLFYXU1xMtti7SJzCFxosU0rwWiksL799dOHWjlGnZze8 sfcB/tRJHw2zKh/wzZkhTN+Aj3O2gsladp3YBPQ/wpWq9CbAGQMChnZX8imY+DmW6QBU DtkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=JKPBLpJu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w185-20020a6282c2000000b005a8ab7e30cbsi8327385pfd.244.2023.02.18.13.16.38; Sat, 18 Feb 2023 13:16:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=JKPBLpJu; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229839AbjBRVP4 (ORCPT + 99 others); Sat, 18 Feb 2023 16:15:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42016 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229817AbjBRVPw (ORCPT ); Sat, 18 Feb 2023 16:15:52 -0500 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9C9ED13D5F; Sat, 18 Feb 2023 13:15:51 -0800 (PST) Received: by mail-pj1-x1030.google.com with SMTP id cn10so1525118pjb.3; Sat, 18 Feb 2023 13:15:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MohZmh6ZcfzJn1OmRfs/o8+oM4ZPKLi2FB+4LPpL34o=; b=JKPBLpJuYtLP9cldFiCcQBESYKJDPCCdxK2p8Ufr/e7ac14X4XAWa/I6jS0fPcj37e mhzcsytchZq64j98/Us4f7wzBg+VXTi9kp+Pj/z+xtBTZuKHhnwMzlDgvm0NGFuD54vP mmQswfaDmO6rYjuZSDKBgBjdq0vsXkie19jhYNv5i1BGWHBWM7NX/4ETw6yeOF7xB3GN FrwTqOjuiorsAywFwh1DQOYvaS+co3s4W2mzUtcHg0bSQVy1W3TUeSCSkuPmMlttZ+Wr hHNWbwf4g+DyHKjq/TFRzJ377BMMdS4VH1igUJ9gBhzQOBjfsepQgOj3FLty/WL/fu7f v+Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MohZmh6ZcfzJn1OmRfs/o8+oM4ZPKLi2FB+4LPpL34o=; b=Hs4sdWJcs3S26P0VXXf5su7WPoeqZ4c+Y/gsjoo+dndMJInQRO4p89dWf9W24H/WmY LKrUTd1RtU8ce7Jpi75KNhkiIiOf7SeaHJjmxdbWXQUz9xEVu7GAufRA8UmUl+M6aEJb SCrftPGA7kN3ygezwZF9jY0b3X4dz/FJyFnoo9mzTZqjEKsKe1Q/Qg8El4c8vmXAipLw 4A9snxkizUYOJnlIYnNtV9PccVqxcfNduM5AalJNM+nAasB+nsiaPYsz0qlfbJkhPddZ dbgfEHT2AKD/5Pw3dsz086LCsjK5eHlHBb//cZWLEmb1JcX8ACClntzevO/sd6tK4RDN /OXA== X-Gm-Message-State: AO0yUKUR/1NbDMJhUKf4yv0+arwfZ+F1beXhaVoGAnjY9dbS+X8sGPZ0 RnWQFf/oMemFQ54qD2QfZu8= X-Received: by 2002:a17:902:8601:b0:199:e58a:61c2 with SMTP id f1-20020a170902860100b00199e58a61c2mr4201310plo.29.1676754951096; Sat, 18 Feb 2023 13:15:51 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id x17-20020a170902ea9100b0019a6cce2060sm5104473plb.57.2023.02.18.13.15.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:50 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , =?utf-8?q?Christian_K=C3=B6nig?= , Sumit Semwal , Gustavo Padovan , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 02/14] dma-buf/fence-array: Add fence deadline support Date: Sat, 18 Feb 2023 13:15:45 -0800 Message-Id: <20230218211608.1630586-3-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205063778607052?= X-GMAIL-MSGID: =?utf-8?q?1758205063778607052?= From: Rob Clark Propagate the deadline to all the fences in the array. Signed-off-by: Rob Clark Reviewed-by: Christian König --- drivers/dma-buf/dma-fence-array.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c index 5c8a7084577b..9b3ce8948351 100644 --- a/drivers/dma-buf/dma-fence-array.c +++ b/drivers/dma-buf/dma-fence-array.c @@ -123,12 +123,23 @@ static void dma_fence_array_release(struct dma_fence *fence) dma_fence_free(fence); } +static void dma_fence_array_set_deadline(struct dma_fence *fence, + ktime_t deadline) +{ + struct dma_fence_array *array = to_dma_fence_array(fence); + unsigned i; + + for (i = 0; i < array->num_fences; ++i) + dma_fence_set_deadline(array->fences[i], deadline); +} + const struct dma_fence_ops dma_fence_array_ops = { .get_driver_name = dma_fence_array_get_driver_name, .get_timeline_name = dma_fence_array_get_timeline_name, .enable_signaling = dma_fence_array_enable_signaling, .signaled = dma_fence_array_signaled, .release = dma_fence_array_release, + .set_deadline = dma_fence_array_set_deadline, }; EXPORT_SYMBOL(dma_fence_array_ops); From patchwork Sat Feb 18 21:15:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58974 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp553900wrn; Sat, 18 Feb 2023 13:17:04 -0800 (PST) X-Google-Smtp-Source: AK7set8qS7DRQl74m4M7z5fOZph9c8yQ0Gyq9k53C/CKwLYntw6v8wJnMjSAT77+pzU0ccl38BhH X-Received: by 2002:aa7:96c7:0:b0:5a8:b417:d85e with SMTP id h7-20020aa796c7000000b005a8b417d85emr4768550pfq.19.1676755024486; Sat, 18 Feb 2023 13:17:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755024; cv=none; d=google.com; s=arc-20160816; b=fCvGABMobEvK1neBCDoVO+NSLjOuyD6KOFIAniL6yyDSLcxSHCYwtmUeZ6sEDkOteO Q+MJrnupjclWP0pHrLzww7oIpx0pWsncbR+tdHYr1ll5+5Ky10uB12j9SS7hFTK0SeSX Dqy+GtGEg7gaW5MOI/Sz//olm0U67bS3CnjDoUpcfbgcJ5w8I6huC4GIMqq4EKrpZEMS v9flpY+JRIq1zfMxFecmuPjunfOzPVvqhE7Zw+UDL+hJxFGFGVcCUvbbHKhQIscBG0YE M6I4KjyAjgox2fQSkgqsLSZQ8uyiIf+6IvY76yJiSR7lC3eCwM4wpRec2nYmWE7PszXe tjAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=5If47abMxVvdOGe/2jH89dN5UVVTGLmcg6EQzMCdPac=; b=ji3aQzCm20ZLgDLRHiTOHU5CyfEoLVy6SMoA0QFItNttCv3Dj4AGF4N7L5JeOrfX2B VcvtjRt/Xbdbb3YYY6c1ZnzCzSupIgNeDEfDzLCeUXpuRP79ocrbgWDimSDUDJ9r3Aib bDnGkCOdkdPzL2Ox6VSoIa4Cp7vV9iRiHk2lcFlVbqb2II/akIOmBodJvgzhW1swi6Ta sTvvdv62E63Heix61OKAJWIYHXAFTLbBmiKZcbfLy77Ho8P6ptU6YQRFpH+njz4p8gv9 B/TKFyXmBhamdwmVqVtzAm9rKXGGX/8Xh6bHfWoBmswX/d4OxNKNTJN+MZrdrU+2pt5s U4NQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=CNTa3icU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s26-20020a056a00179a00b00574b46d3b26si10640315pfg.334.2023.02.18.13.16.51; Sat, 18 Feb 2023 13:17:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=CNTa3icU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229867AbjBRVQI (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229825AbjBRVPy (ORCPT ); Sat, 18 Feb 2023 16:15:54 -0500 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8B051421C; Sat, 18 Feb 2023 13:15:52 -0800 (PST) Received: by mail-pl1-x636.google.com with SMTP id w1so1556887plq.10; Sat, 18 Feb 2023 13:15:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5If47abMxVvdOGe/2jH89dN5UVVTGLmcg6EQzMCdPac=; b=CNTa3icUd804RiMnh5GApmZCXhp0f7037aAPuvfSQytTW0npuSY78gEtlHqHCmn8NW 5eyb8k4NDi+V7FS2GFNTsCMCbwtF/ltNdJ1R8lKpXjwlSuW/xA05CvMqFBhSSu07MEsU JH2yxu12s/Sag2BEmE1hSCDB+qldNLfSTvnE6oWJFCK0Mmjy4N6LpwoNiHLpYA46vDhq FKyzDBMCupniEDosM2D/oX5huHqWv+fGKFcFhLGvsIObJuL5txuSIxuJcq6Ha7jB3e5N 8lvmchf4xOKnqQmPJFYTIwbQW4VQVAXjRPv2OhBvHAUvo9YyVyaFKXVLfvp2bURupKsZ whYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5If47abMxVvdOGe/2jH89dN5UVVTGLmcg6EQzMCdPac=; b=1TunnlKQ7+DPFjBFegJL80VVTLUFzQkPzyHKgKHlf34e4lcb0nPcQO/aHTtad1IoC8 Qwzz9fXKtGc8NxRfiLbRfjLLScwzdYTBJn3XC2cXLnSyyhIn0xcom3jw2XOVmIh3fy4I ykknZFGk74Rjh5ZjoFva1Ovu/uhZZVm33BA5ZD1X62NZDFXGxE3OYURU+YkLkksxqOzD rz3JalsUWQny8mmJhOjtd2m9tIPTtRI3EjVQPchfE33HtKPKoSZzDC45JXHRXGFRdoLF LhSlWBWvjEZGFLpkkD4eDDnkmgMnpEJ2qukAa1/CB//VUnmpbytOkBw5Oh6pZWDcRh5J ZsQA== X-Gm-Message-State: AO0yUKXRHCOiU0gCB2D86m2tfZjfBM2cv8tHa4GLkrfv0f9VaT1raSyT DwDq0uMGVka9l7SUJzh7Cd4= X-Received: by 2002:a17:902:f9cc:b0:19a:fd85:1891 with SMTP id kz12-20020a170902f9cc00b0019afd851891mr1808045plb.14.1676754952290; Sat, 18 Feb 2023 13:15:52 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id b21-20020a170902d31500b0019aafc42328sm236770plc.153.2023.02.18.13.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:51 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , =?utf-8?q?Christian_K=C3=B6nig?= , Sumit Semwal , Gustavo Padovan , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 03/14] dma-buf/fence-chain: Add fence deadline support Date: Sat, 18 Feb 2023 13:15:46 -0800 Message-Id: <20230218211608.1630586-4-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205076899310338?= X-GMAIL-MSGID: =?utf-8?q?1758205076899310338?= From: Rob Clark Propagate the deadline to all the fences in the chain. Signed-off-by: Rob Clark Reviewed-by: Christian König for this one. --- drivers/dma-buf/dma-fence-chain.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma-fence-chain.c index a0d920576ba6..4684874af612 100644 --- a/drivers/dma-buf/dma-fence-chain.c +++ b/drivers/dma-buf/dma-fence-chain.c @@ -206,6 +206,18 @@ static void dma_fence_chain_release(struct dma_fence *fence) dma_fence_free(fence); } + +static void dma_fence_chain_set_deadline(struct dma_fence *fence, + ktime_t deadline) +{ + dma_fence_chain_for_each(fence, fence) { + struct dma_fence_chain *chain = to_dma_fence_chain(fence); + struct dma_fence *f = chain ? chain->fence : fence; + + dma_fence_set_deadline(f, deadline); + } +} + const struct dma_fence_ops dma_fence_chain_ops = { .use_64bit_seqno = true, .get_driver_name = dma_fence_chain_get_driver_name, @@ -213,6 +225,7 @@ const struct dma_fence_ops dma_fence_chain_ops = { .enable_signaling = dma_fence_chain_enable_signaling, .signaled = dma_fence_chain_signaled, .release = dma_fence_chain_release, + .set_deadline = dma_fence_chain_set_deadline, }; EXPORT_SYMBOL(dma_fence_chain_ops); From patchwork Sat Feb 18 21:15:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58977 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554006wrn; Sat, 18 Feb 2023 13:17:21 -0800 (PST) X-Google-Smtp-Source: AK7set/Rtd59iRb0auobYkW2pek/C7WkJFwKG/tU8egZFoEp+SDQE/OmNi8xhtMvHvqBP0V3Uvow X-Received: by 2002:a17:902:c952:b0:196:88b8:8616 with SMTP id i18-20020a170902c95200b0019688b88616mr2986525pla.5.1676755040856; Sat, 18 Feb 2023 13:17:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755040; cv=none; d=google.com; s=arc-20160816; b=PjiS5BIJUOQrita3aTooWJKpUjU1OsMgRPPn316dtAUJWUOteUXvjA0eM/yXomaIrA S/K7GnZQtOkeDACUT5hp77rCHaUlcb1xZhRiJ0qtjfmqOXLlodO29H79qCiVvFrxrAEW OQcBVEjjXXI6vRnyfWBGwhN/5gLEfw/09F7+r/Qc6kYgs5gHS+7p367K/fv8dstP7JUP lmgo0zxTPoZm2APUoVXW4hB7FBMt3pwKz7KLdA+u6JK3SLrUgVK8TN5wsZg3L/rYwOjq 5ooBsShJiTrT/kx2wmL/0jmNSfB6oQkhsNk2AypNOZaPEDqjVUSHvasfsT8NnUNV5l7S vBUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=792an2SD05nhQRGBlD0Pg2RQ7VfR74mQEP4A4mqZ6Pk=; b=DQFa6FgOePiLFzKPP8SOv/Q2gTpWRZwTK+WFriua62goxGytv+ZshGRt4feGcdPdAB k/Xav0H0Z7rE0y981XbJL8BREzYHf1plYvqz2G5+oIZwLH3byBEbWyNxwbLguYcRbCfR VL9psOj6Dg5gkKyzVG6cN3gnBKBlvlYBFUHx95VFc6nAHsgomEhJCl58IG8NOSlmNkVA z7DxPMSG1JF813wNLf8P7qKsk70zXHPZ54GkCYK0mL4SdLiSpwitkSb13M2XGVVjKl+0 aybuogFkZAHfKIwlV431nA6KrP8hbRLgeP6JaLHYT4ImlprC4wJ+f+HhFE//BJy0Ztbx rbCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=HM20qQN2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id iz5-20020a170902ef8500b0019a733b2ae9si3837006plb.561.2023.02.18.13.17.07; Sat, 18 Feb 2023 13:17:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=HM20qQN2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229904AbjBRVQK (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42098 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229838AbjBRVPz (ORCPT ); Sat, 18 Feb 2023 16:15:55 -0500 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2280015C8C; Sat, 18 Feb 2023 13:15:54 -0800 (PST) Received: by mail-pj1-x102f.google.com with SMTP id a5-20020a17090a70c500b00236679bc70cso13689pjm.4; Sat, 18 Feb 2023 13:15:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=792an2SD05nhQRGBlD0Pg2RQ7VfR74mQEP4A4mqZ6Pk=; b=HM20qQN2yIU6PxWiMZEoSu3nueB6cRdZunRf/0WsasLxrWwG6jTJzi54FYZ5B5NZGd oiDKEt41GpKHkAkJ5gTVtA1j+PltUu0tI95VttL8G5W+qQnSbySKu7+cSjvKNge6QQ5J Pj2F3mRJmuteKR/t3CJoExZNh0GN57mlIvR6bySQe8r5eZLlOCXNqZxX5bjf/dupH9z3 IXqeOipa7lBiO9XbbbNImG/WCaemmgM46GgIE8Xh55pnP/LLLgxjXjr+DHt1NcdxFObQ 14PQ97rq81/QGaBdPs+HGfOyKwPzT8UnCAi8zNIuZLDmVStTVtSKfIFcJehu18xb5BVp cE9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=792an2SD05nhQRGBlD0Pg2RQ7VfR74mQEP4A4mqZ6Pk=; b=XmkjRTJUMuQzArRsYXYU+r3c9jw5UfF6rsTbn/sri85sibNdmoOzRFssTXU0cl4J2W BKqioXKYAkiT2mLOnHKYpLTZ4QS5RCWcRvhhmG8ZdS+rbxE9KQeNVofrWMEo4u6oL8mt awB+MsNmNQmjM41pkoqsCRDG458NJgsITQPKnFn2VZ6L9MHEKi89V9zNRsqjwE1yFQZI 8N1J+uduDsYiWGbc7OU1SiS+5uDU3aBNA/WB252mRSisZyE1Pp7iwpipMDxtuST4jcXy jI/e5drvU5l68Sr/QLM56zvBLqTHZZ3oZ/+kd/SOwvR6diwShDYh4MUvewU+MpXoF3jI ZNiA== X-Gm-Message-State: AO0yUKUj+K6wHyY473ZTULIS/PG4Xv8t0MhoodRJi3gFk7HcovHn5Mif L49ojjq/waezaNh6jM2s+Ck= X-Received: by 2002:a17:90a:357:b0:233:f990:d646 with SMTP id 23-20020a17090a035700b00233f990d646mr1577488pjf.35.1676754953521; Sat, 18 Feb 2023 13:15:53 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id bv21-20020a17090af19500b00231261061a5sm1254130pjb.5.2023.02.18.13.15.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:53 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , linux-media@vger.kernel.org (open list:DMA BUFFER SHARING FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 04/14] dma-buf/dma-resv: Add a way to set fence deadline Date: Sat, 18 Feb 2023 13:15:47 -0800 Message-Id: <20230218211608.1630586-5-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205093806823838?= X-GMAIL-MSGID: =?utf-8?q?1758205093806823838?= From: Rob Clark Add a way to set a deadline on remaining resv fences according to the requested usage. Signed-off-by: Rob Clark --- drivers/dma-buf/dma-resv.c | 19 +++++++++++++++++++ include/linux/dma-resv.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c index 1c76aed8e262..0c86f6d577ab 100644 --- a/drivers/dma-buf/dma-resv.c +++ b/drivers/dma-buf/dma-resv.c @@ -684,6 +684,25 @@ long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, } EXPORT_SYMBOL_GPL(dma_resv_wait_timeout); +/** + * dma_resv_set_deadline - Set a deadline on reservation's objects fences + * @obj: the reservation object + * @usage: controls which fences to include, see enum dma_resv_usage. + * @deadline: the requested deadline (MONOTONIC) + */ +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, + ktime_t deadline) +{ + struct dma_resv_iter cursor; + struct dma_fence *fence; + + dma_resv_iter_begin(&cursor, obj, usage); + dma_resv_for_each_fence_unlocked(&cursor, fence) { + dma_fence_set_deadline(fence, deadline); + } + dma_resv_iter_end(&cursor); +} +EXPORT_SYMBOL_GPL(dma_resv_set_deadline); /** * dma_resv_test_signaled - Test if a reservation object's fences have been diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h index 0637659a702c..8d0e34dad446 100644 --- a/include/linux/dma-resv.h +++ b/include/linux/dma-resv.h @@ -479,6 +479,8 @@ int dma_resv_get_singleton(struct dma_resv *obj, enum dma_resv_usage usage, int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); long dma_resv_wait_timeout(struct dma_resv *obj, enum dma_resv_usage usage, bool intr, unsigned long timeout); +void dma_resv_set_deadline(struct dma_resv *obj, enum dma_resv_usage usage, + ktime_t deadline); bool dma_resv_test_signaled(struct dma_resv *obj, enum dma_resv_usage usage); void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq); From patchwork Sat Feb 18 21:15:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58975 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp553952wrn; Sat, 18 Feb 2023 13:17:13 -0800 (PST) X-Google-Smtp-Source: AK7set+Cz9KM0vxSqJnwlzI24Pby88y/fZcln61nYYTAQwq1n39dT6cVVl4/qo/m5u7eL/+vXnkO X-Received: by 2002:a62:79c7:0:b0:593:befd:848c with SMTP id u190-20020a6279c7000000b00593befd848cmr5312842pfc.16.1676755032822; Sat, 18 Feb 2023 13:17:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755032; cv=none; d=google.com; s=arc-20160816; b=s/fCKCv2sJESMaFm7sYagjTUBixIua7iVtfWJHxtA2GfE80d01F2edgY0XoTrCQafw TZCnsrCF8L/EDhtc5Xzu9QEO4kfqn/FDhzqdCFVMv/yER4uMkvw/KdVEWWXGts2yufLn Z+JqyIzZGQqWGj5G76U8VIMuUAvdf0YQisO523E+jTtEkdKqn61NdAKkZWx+TYwHXm97 blShkEylllRbt1wLlifopm3uLmQwipIPHtJH1OpaFPzTgWwL4hIL3E0uIpCiTUfTk4ys bHVpyYNiv5JXCF0pVUyoYcelc7KEzKtrfvUOsRPGE3TS/UOwGXgKnFm2MEfjmk/Ed3CP JXSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hI9qNsZmZouFqjT4Q7iKBhJP6Ch7PWCt+bcIXmzWxTA=; b=vZQDtKiv9WIwHLeYVpc69qU7BZU8FeMFcIhrrYHEaqLs9e998kGUCJgakEs+WKNtuE 1F525vRerzVQAaAbsIOK6YyLjoBQp3eixeJU7IkqaE95m6GlZrdtsqTrpd+4PasIsWpN bL6hMB161zuFhI8HxFIM7tzyUwklSk/3e+z/Z8Adc5ICL6nBOe9LvCFDys+jiRdq04X/ GyIIJyQh3zRY/fAo+Wv2E7mJLX2zMJxevtvXs1eL72dIK2p54AMmi9717zv3D7y7/zPs jqISFWaAeo63DOW+VYpp5XyNnBkXLlk2jwDi7T8xnB/LA694U+67SbyaPriFqXHTCoyp /Jvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="n8m0ik/8"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q19-20020a056a00085300b005a8b856ad47si10559619pfk.7.2023.02.18.13.16.57; Sat, 18 Feb 2023 13:17:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="n8m0ik/8"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229817AbjBRVQT (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229709AbjBRVQG (ORCPT ); Sat, 18 Feb 2023 16:16:06 -0500 Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 975D715CB2; Sat, 18 Feb 2023 13:15:55 -0800 (PST) Received: by mail-pl1-x634.google.com with SMTP id n1so1451380plc.11; Sat, 18 Feb 2023 13:15:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hI9qNsZmZouFqjT4Q7iKBhJP6Ch7PWCt+bcIXmzWxTA=; b=n8m0ik/8SEVtlt4tLy+1xKXcajLNDaoTcnObCr8qoX1kosoaMIoPX31NBzsj7seG30 TaPhmBInQnPnfd0sbBYcu2Sjd2IA6FxDGaZmCXZoXtGjZW6hFd+e9Xciqw/mNaEUFrq1 hjgq42bMdkekPwZy8PzTS6/Xq4JcoVNW50YdZjMsh/w+8uyRIy6w/+AWEK3pPnMvauwT wNnyWecM/dDofyumtFxiSCy6DM51SXQm97P8nGKVnoB2XUwupExO/xZ5cnsTPvxIDZIP qmCKeD3CtfUoaR56Ve0CFhe2vvZV/cLqVUjPQ858IZhTD5rfzOW9nQ9q1HUMtmg9/Zl0 ZfYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hI9qNsZmZouFqjT4Q7iKBhJP6Ch7PWCt+bcIXmzWxTA=; b=nWsKbyyIwWelqOmz6eJmexRq1iL+8On4/01gAZdYQq8td1ZoZB0FfzuekGR7JLMHVn e6iToVPLJpwEUvJrRNy01gsZQIJ9VNlz4YxHaEoyuCt0Jljc8W29JNQAsmM0l24/KnPU 2QPAyx0s6Jw6E3pEvbWbBjbN1x31tjGbhoF7FyD0R5rovH7VJXjM861CM+HLiQ6Um5yb wmGqWBSzhK1ZBGvvIuOKvSuQoBImayQNGvmAyc6YHn+UIXhAJ+PI+flcEmUabDp42tPr X6zXjMyTcW1T0+Mjb0vZ8frfNc2naeWdco8IHQsixs/ju5bRsypRxQ0v/ZFSrKoamLcl fJsQ== X-Gm-Message-State: AO0yUKVOi1Mcn11nXan6Toa06tEeupEueVOIYZvHBLHq+uU+4AR1TkF1 iOy4firbpNGxgtoEBXTgs8g= X-Received: by 2002:a17:902:f98d:b0:19a:a647:1881 with SMTP id ky13-20020a170902f98d00b0019aa6471881mr3492159plb.62.1676754955043; Sat, 18 Feb 2023 13:15:55 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id a14-20020a170902ecce00b0019934030f46sm5057523plh.132.2023.02.18.13.15.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:54 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Sumit Semwal , Gustavo Padovan , =?utf-8?q?Christian_K=C3=B6nig?= , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 05/14] dma-buf/sync_file: Add SET_DEADLINE ioctl Date: Sat, 18 Feb 2023 13:15:48 -0800 Message-Id: <20230218211608.1630586-6-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205085366911967?= X-GMAIL-MSGID: =?utf-8?q?1758205085366911967?= From: Rob Clark The initial purpose is for igt tests, but this would also be useful for compositors that wait until close to vblank deadline to make decisions about which frame to show. The igt tests can be found at: https://gitlab.freedesktop.org/robclark/igt-gpu-tools/-/commits/fence-deadline v2: Clarify the timebase, add link to igt tests Signed-off-by: Rob Clark --- drivers/dma-buf/sync_file.c | 19 +++++++++++++++++++ include/uapi/linux/sync_file.h | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index af57799c86ce..fb6ca1032885 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -350,6 +350,22 @@ static long sync_file_ioctl_fence_info(struct sync_file *sync_file, return ret; } +static int sync_file_ioctl_set_deadline(struct sync_file *sync_file, + unsigned long arg) +{ + struct sync_set_deadline ts; + + if (copy_from_user(&ts, (void __user *)arg, sizeof(ts))) + return -EFAULT; + + if (ts.pad) + return -EINVAL; + + dma_fence_set_deadline(sync_file->fence, ktime_set(ts.tv_sec, ts.tv_nsec)); + + return 0; +} + static long sync_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -362,6 +378,9 @@ static long sync_file_ioctl(struct file *file, unsigned int cmd, case SYNC_IOC_FILE_INFO: return sync_file_ioctl_fence_info(sync_file, arg); + case SYNC_IOC_SET_DEADLINE: + return sync_file_ioctl_set_deadline(sync_file, arg); + default: return -ENOTTY; } diff --git a/include/uapi/linux/sync_file.h b/include/uapi/linux/sync_file.h index ee2dcfb3d660..c8666580816f 100644 --- a/include/uapi/linux/sync_file.h +++ b/include/uapi/linux/sync_file.h @@ -67,6 +67,20 @@ struct sync_file_info { __u64 sync_fence_info; }; +/** + * struct sync_set_deadline - set a deadline on a fence + * @tv_sec: seconds elapsed since epoch + * @tv_nsec: nanoseconds elapsed since the time given by the tv_sec + * @pad: must be zero + * + * The timebase for the deadline is CLOCK_MONOTONIC (same as vblank) + */ +struct sync_set_deadline { + __s64 tv_sec; + __s32 tv_nsec; + __u32 pad; +}; + #define SYNC_IOC_MAGIC '>' /** @@ -95,4 +109,12 @@ struct sync_file_info { */ #define SYNC_IOC_FILE_INFO _IOWR(SYNC_IOC_MAGIC, 4, struct sync_file_info) + +/** + * DOC: SYNC_IOC_SET_DEADLINE - set a deadline on a fence + * + * Allows userspace to set a deadline on a fence, see dma_fence_set_deadline() + */ +#define SYNC_IOC_SET_DEADLINE _IOW(SYNC_IOC_MAGIC, 5, struct sync_set_deadline) + #endif /* _UAPI_LINUX_SYNC_H */ From patchwork Sat Feb 18 21:15:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58976 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp553983wrn; Sat, 18 Feb 2023 13:17:18 -0800 (PST) X-Google-Smtp-Source: AK7set9h5xk11Wsc71dRrhA+9wEUcl+TO/F65uu+aWNKf1tXJLrVJwZO/RWWnkQQS/xXYmdrMaiU X-Received: by 2002:a17:902:e551:b0:19a:ac93:64c with SMTP id n17-20020a170902e55100b0019aac93064cmr4277513plf.29.1676755037828; Sat, 18 Feb 2023 13:17:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755037; cv=none; d=google.com; s=arc-20160816; b=DnxGQ569gLzI0/zkZmIwTKmETosv/IINbFCBdjtgrXMOzUR2pBfslzwziP5BeH/KmB 1g/NcST7MCEDxJfsu9WKkx/YR93Ojr2CxsGTSfoljUitDd7KZh9dU0/h1EHsOPXi1rmH wNYaqtLbYLDgmTXkVVe1fgfQlRj5lrOR6ljEoc3b0ySzmXYfjKWpR5ks2vT1IEj9Ab+C 2HQwSOpgd0b3+T8yoyFSGsvssJ8hSVr68kaRGj4g/Lh9uIq1mMkgnuUT7HBVFAZLJ+4g JngJITxrVb+xRy1WoEX2udhH5lZAF1Uly3ZZRhSKgWuzaSkyUYOkOCYsaj2jR5J9jiJi c3bQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=RYIkCiW1P3MTuGNaXnYInZXOL6oL98BTswmIrYI3+hc=; b=a1NR20OIwVYsnv71zmo0NIL4arPmXvDcXkjtAupEkaBFfPoG+GL60evjwaKI305NmA iy7Y92MuwFgKTMQXdX2pitVBjAGswyIHYZ78Snt5EAnUJxyKDWSqWRcwD67fu8zZLTCY dr52WlymcLSZ8OC+ytnbSmMK5IUHTJtl5SeHnW7H1b8Q6wE2vQs06kRO+PnUeh4Bg9O/ YuIqXMW8F6iI9sMG3rXbktU5xUCh+8eTCNXAhB+bSJPrzJpUjsknsRiwG2z7WxL7es8s pCxQOzcKhBkqvYc3Co7K3ma+jI/4E505V0JrehRweIbRy5dGYilo2vFIIgXpDQb+yVUV Bxqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="eQ/2i4Wt"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id im23-20020a170902bb1700b0019acc9772f4si3522277plb.555.2023.02.18.13.17.04; Sat, 18 Feb 2023 13:17:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b="eQ/2i4Wt"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229918AbjBRVQO (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42698 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229817AbjBRVQG (ORCPT ); Sat, 18 Feb 2023 16:16:06 -0500 Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A91A713D7C; Sat, 18 Feb 2023 13:15:56 -0800 (PST) Received: by mail-pl1-x633.google.com with SMTP id o9so1553787plk.12; Sat, 18 Feb 2023 13:15:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RYIkCiW1P3MTuGNaXnYInZXOL6oL98BTswmIrYI3+hc=; b=eQ/2i4WtARuumdk6wu3UFqAW69ZW8h3tfauASKVW6UiPkF3AV+YCLi3IsnRxxMwg0g CUIDHLV4BZqXknqttTtk+bXdQ6ljF08ejS9/UaWYQhGdaghr+KWH/71gNpnwDfzQ/UH5 nBW8tWukaXtSxhoyOsYUBlBageDHZMcz+vUTvBGG9/D5e4fM1azL9Vg9cP2p+UYvndt2 AHl5A36OpTJ8bpk7MfIg49zDicp0C2GaVHxplb2BU6oIc7LsUP5oMXTq3g1kIWHJce+H XGKorRr6oiJXunUlrDyMsUxILj9/VBJnJZI1d9zF9ycS3uV11lNRCp0g7026hwsHpCwE JhRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RYIkCiW1P3MTuGNaXnYInZXOL6oL98BTswmIrYI3+hc=; b=Cbf+1pS36nIWOhUBT7qVafeLUocqxkZ9ouS2pgEfesUdYU62aisMY47ys/j+crWR8x GJxGn9ZOkU0nfNaKgR8syXXLTerszhGSeiGFeaO6hoKRDxAUvuX+hj18GDoSAPybcZFK kpLPXGCJKLY/cHMRqc5yyebUs2GzSbyzK0gHANE5N3640yBjU1hjVHGoZW0dlzOyO3nl qGfNHq/jEqrCPolq3nr4NPWs8NofJyYyxgklM8W6siaCFFjO9LffAZ1I5w9NavcrVuxE 1XY5GO9RZbcid8fa6QeM+t47ShEKlBTdZg7/BOsuEfNfIkCne3jMaKT3DLz3qXLEwXMy iFiQ== X-Gm-Message-State: AO0yUKXQyYey09Q8aGcYvqgnaq+vWWbE9q90iGv7qv5U0V8niwXHaago Z9sEHK1Ag+YDFJpQqH+kAyk= X-Received: by 2002:a17:902:8504:b0:199:30a6:376c with SMTP id bj4-20020a170902850400b0019930a6376cmr3106041plb.68.1676754956327; Sat, 18 Feb 2023 13:15:56 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id h12-20020a170902eecc00b0019a96871e09sm5072653plb.211.2023.02.18.13.15.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:55 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Sumit Semwal , Gustavo Padovan , =?utf-8?q?Christian_K=C3=B6nig?= , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 06/14] dma-buf/sync_file: Support (E)POLLPRI Date: Sat, 18 Feb 2023 13:15:49 -0800 Message-Id: <20230218211608.1630586-7-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205090447139949?= X-GMAIL-MSGID: =?utf-8?q?1758205090447139949?= From: Rob Clark Allow userspace to use the EPOLLPRI/POLLPRI flag to indicate an urgent wait (as opposed to a "housekeeping" wait to know when to cleanup after some work has completed). Usermode components of GPU driver stacks often poll() on fence fd's to know when it is safe to do things like free or reuse a buffer, but they can also poll() on a fence fd when waiting to read back results from the GPU. The EPOLLPRI/POLLPRI flag lets the kernel differentiate these two cases. Signed-off-by: Rob Clark --- drivers/dma-buf/sync_file.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index fb6ca1032885..c30b2085ee0a 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -192,6 +192,14 @@ static __poll_t sync_file_poll(struct file *file, poll_table *wait) { struct sync_file *sync_file = file->private_data; + /* + * The POLLPRI/EPOLLPRI flag can be used to signal that + * userspace wants the fence to signal ASAP, express this + * as an immediate deadline. + */ + if (poll_requested_events(wait) & EPOLLPRI) + dma_fence_set_deadline(sync_file->fence, ktime_get()); + poll_wait(file, &sync_file->wq, wait); if (list_empty(&sync_file->cb.node) && From patchwork Sat Feb 18 21:15:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58981 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554107wrn; Sat, 18 Feb 2023 13:17:33 -0800 (PST) X-Google-Smtp-Source: AK7set+fQ60ERDi1o+33aAfJtaivlOM7vGybvJULRTTC4dyFX4Y9DcmlQ5OPlO/cvKRWfSGmdSIl X-Received: by 2002:a05:6a20:a5a8:b0:bc:e2f6:8788 with SMTP id bc40-20020a056a20a5a800b000bce2f68788mr4504832pzb.24.1676755052962; Sat, 18 Feb 2023 13:17:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755052; cv=none; d=google.com; s=arc-20160816; b=ciOAo9u1dOtT3ZtP0ZQLv6AOm1cRJ1Hf3jujQ4bkDXF2FOM5yrBM9raQOZD0mpCuFT 6mhfN263D7KSW3yTQt8n9UDpYx7PCDCBHL/fESJ0Nq7QmSyF298mG7jvDIyZDQwfNTIV ZALVbq9GVn7JpKfFmjX/K/qVgUxyFrtw206A/E71+5R4XwuhTcbKP38+iR7hsYEccJBx 2GxMkNLtdIdVteSd4SBQgBO+pCH5CPDY9sq61PKk1RYTxoZ+1OrmNs/fa2AGk/ehWwLq nkPOy2vV9XjHeBLvK2I5w9PF5jAYB5Dsnmgz1wGiaEJxNw+MedZ2hr7QBmJLCvbK+l3e rjuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vB/jSDrgA8UtJvwy1x7JONuOUUbXDB++h6MnIk8ZgSw=; b=T+C+ZZIqUTkPbO4rTokzxqFbSxmEiElBUe0919p4UE1QjBkAYdb0Dxzw9NXPwOWpd8 X7dWjfzymErvVP+rW+1obuNH4KszSfjeMHKLNCUOvnVy/s/Tp9MTemgwKboTPKbZUrFP dhSoWeHazXVq4VZ4TvNiT6UXcbbDQVsxcz/yVm3dWbIuM8V3ZgWQmcyevynuTByAJ8rd b+UQVBk62s+a5Xjr4XuraLf0kXtKm0BJbwg77DVwW2uZb20YlqB6b8mfggrbzgTzgyi1 tHC0bktEGd6zSeLzjswcdlZBWP1zWV8fP2Jp3wtkeN/qgrt1QwjB8rv/VCvo0SeNUz5D 8Jlg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=RY8338mv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y35-20020a631823000000b004fcf9c5cf06si6261157pgl.806.2023.02.18.13.17.20; Sat, 18 Feb 2023 13:17:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=RY8338mv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229613AbjBRVQY (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42706 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229862AbjBRVQI (ORCPT ); Sat, 18 Feb 2023 16:16:08 -0500 Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96F62166D4; Sat, 18 Feb 2023 13:15:58 -0800 (PST) Received: by mail-pf1-x429.google.com with SMTP id d19so677208pfo.9; Sat, 18 Feb 2023 13:15:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vB/jSDrgA8UtJvwy1x7JONuOUUbXDB++h6MnIk8ZgSw=; b=RY8338mvWxXiFN2CHg5+oaY5dszy2q7o07Qhnr55aOsSYI1UpZ9OwXPS4r6AC+zw0z AHFmOk3Hbxodz45mKpw3txyokHhLFObqsRYOESIkanEVGU/zO88ihBC4hKU+bmDz6UHo /Stah/9tCU3K9tUengKlhXc60ylZa5igR/9a5B3Ys7ne8+MuuFKhsT/G8INfSUMoHfln 7WKg3kwZOtwrLINCcgYDeUEE/+QSIojQUExKwBB1tVV4A8i7KCSoOFYLac70ytSfNu9j J8dpgpRM6lhjZ/U7MopMI1DjfnFLJKrNH2Vji6fkIhV8NP5Z8ePJHwUxigmCaL3i2O14 HnSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vB/jSDrgA8UtJvwy1x7JONuOUUbXDB++h6MnIk8ZgSw=; b=xQEuDZO9WGkAOFcuQXCxS1XJ6iDqLU69XSXMgbR/MHwhDLklGekP2XNuaSUrl1Aqsi e89CeaYGOrhWWFQTbQ4z7gl8C/tXqXOh3F9yHRr3wGv5K5xrIWNuWuoNdwk2EsAxAtYh zWs+hscsZAIw1bWk+NDGbUbobbQluHQcIUKYQfrGTdnt7YTjiCDWdo63JciqULepoEzZ e+d+WIDTLjxjzqQMtykVXf+YVimHGXqEw67665nGF0JB7of6KmljI5f6/yhKuKUqV8yk ldxOG+d2oLugx2qIQgJsUsTuCEg447cspZmd8p6G3uaO5GUmQ0EbD/c2iq1Beb/R9tLe yjfw== X-Gm-Message-State: AO0yUKXPVDGWEDzeUdq96xUw9GhIoVJKurn8A4PtEuRAECx1IWQPhj/V V+Xo+MCRBpVs4r4pMMYsLAA= X-Received: by 2002:a62:180d:0:b0:5a8:4de2:e94e with SMTP id 13-20020a62180d000000b005a84de2e94emr4528311pfy.33.1676754958081; Sat, 18 Feb 2023 13:15:58 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id w2-20020aa78582000000b005a8cc32b23csm3810199pfn.20.2023.02.18.13.15.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:57 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Sumit Semwal , Gustavo Padovan , =?utf-8?q?Christian_K=C3=B6nig?= , linux-media@vger.kernel.org (open list:SYNC FILE FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 07/14] dma-buf/sw_sync: Add fence deadline support Date: Sat, 18 Feb 2023 13:15:50 -0800 Message-Id: <20230218211608.1630586-8-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205106330410781?= X-GMAIL-MSGID: =?utf-8?q?1758205106330410781?= From: Rob Clark This consists of simply storing the most recent deadline, and adding an ioctl to retrieve the deadline. This can be used in conjunction with the SET_DEADLINE ioctl on a fence fd for testing. Ie. create various sw_sync fences, merge them into a fence-array, set deadline on the fence-array and confirm that it is propagated properly to each fence. Signed-off-by: Rob Clark Reviewed-by: Christian König --- drivers/dma-buf/sw_sync.c | 58 ++++++++++++++++++++++++++++++++++++ drivers/dma-buf/sync_debug.h | 2 ++ 2 files changed, 60 insertions(+) diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 348b3a9170fa..50f2638cccd3 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -52,12 +52,26 @@ struct sw_sync_create_fence_data { __s32 fence; /* fd of new fence */ }; +/** + * struct sw_sync_get_deadline - get the deadline of a sw_sync fence + * @tv_sec: seconds elapsed since epoch (out) + * @tv_nsec: nanoseconds elapsed since the time given by the tv_sec (out) + * @fence_fd: the sw_sync fence fd (in) + */ +struct sw_sync_get_deadline { + __s64 tv_sec; + __s32 tv_nsec; + __s32 fence_fd; +}; + #define SW_SYNC_IOC_MAGIC 'W' #define SW_SYNC_IOC_CREATE_FENCE _IOWR(SW_SYNC_IOC_MAGIC, 0,\ struct sw_sync_create_fence_data) #define SW_SYNC_IOC_INC _IOW(SW_SYNC_IOC_MAGIC, 1, __u32) +#define SW_SYNC_GET_DEADLINE _IOWR(SW_SYNC_IOC_MAGIC, 2, \ + struct sw_sync_get_deadline) static const struct dma_fence_ops timeline_fence_ops; @@ -171,6 +185,13 @@ static void timeline_fence_timeline_value_str(struct dma_fence *fence, snprintf(str, size, "%d", parent->value); } +static void timeline_fence_set_deadline(struct dma_fence *fence, ktime_t deadline) +{ + struct sync_pt *pt = dma_fence_to_sync_pt(fence); + + pt->deadline = deadline; +} + static const struct dma_fence_ops timeline_fence_ops = { .get_driver_name = timeline_fence_get_driver_name, .get_timeline_name = timeline_fence_get_timeline_name, @@ -179,6 +200,7 @@ static const struct dma_fence_ops timeline_fence_ops = { .release = timeline_fence_release, .fence_value_str = timeline_fence_value_str, .timeline_value_str = timeline_fence_timeline_value_str, + .set_deadline = timeline_fence_set_deadline, }; /** @@ -387,6 +409,39 @@ static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg) return 0; } +static int sw_sync_ioctl_get_deadline(struct sync_timeline *obj, unsigned long arg) +{ + struct sw_sync_get_deadline data; + struct timespec64 ts; + struct dma_fence *fence; + struct sync_pt *pt; + + if (copy_from_user(&data, (void __user *)arg, sizeof(data))) + return -EFAULT; + + if (data.tv_sec || data.tv_nsec) + return -EINVAL; + + fence = sync_file_get_fence(data.fence_fd); + if (!fence) + return -EINVAL; + + pt = dma_fence_to_sync_pt(fence); + if (!pt) + return -EINVAL; + + ts = ktime_to_timespec64(pt->deadline); + data.tv_sec = ts.tv_sec; + data.tv_nsec = ts.tv_nsec; + + dma_fence_put(fence); + + if (copy_to_user((void __user *)arg, &data, sizeof(data))) + return -EFAULT; + + return 0; +} + static long sw_sync_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -399,6 +454,9 @@ static long sw_sync_ioctl(struct file *file, unsigned int cmd, case SW_SYNC_IOC_INC: return sw_sync_ioctl_inc(obj, arg); + case SW_SYNC_GET_DEADLINE: + return sw_sync_ioctl_get_deadline(obj, arg); + default: return -ENOTTY; } diff --git a/drivers/dma-buf/sync_debug.h b/drivers/dma-buf/sync_debug.h index 6176e52ba2d7..2e0146d0bdbb 100644 --- a/drivers/dma-buf/sync_debug.h +++ b/drivers/dma-buf/sync_debug.h @@ -55,11 +55,13 @@ static inline struct sync_timeline *dma_fence_parent(struct dma_fence *fence) * @base: base fence object * @link: link on the sync timeline's list * @node: node in the sync timeline's tree + * @deadline: the most recently set fence deadline */ struct sync_pt { struct dma_fence base; struct list_head link; struct rb_node node; + ktime_t deadline; }; extern const struct file_operations sw_sync_debugfs_fops; From patchwork Sat Feb 18 21:15:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58980 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554073wrn; Sat, 18 Feb 2023 13:17:29 -0800 (PST) X-Google-Smtp-Source: AK7set9PwsavwYtMqXXe4Vbp33Zakh9rA1wmGBfgScEU31i263sZe7aqtdaM778Nx5RIsU9qZKTr X-Received: by 2002:a05:6a20:7d9a:b0:b6:157d:bf48 with SMTP id v26-20020a056a207d9a00b000b6157dbf48mr5218495pzj.43.1676755049371; Sat, 18 Feb 2023 13:17:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755049; cv=none; d=google.com; s=arc-20160816; b=o8PtG0rb6wC8RlGN5td6gBX0GdwJKE1CjO3QuIFB/Pi7Z2h6sxYUa+SG2V8RoidFsp 3Y5KUprzEMtMV0zH48jOSn9haZY928xB8HudyD7bElHCmmYFs+zsLrAlNiyqTgdRAJT4 wcXBDS9kHKzZ6RAAv17Twihr5P8dx5vk4gfCj/847sh1zNa1Yh7D/03ePy+EoHExFPbL 6c/ne1+C7Vz6vNbgqhReLfBcPSRQiLDCuVgJqq/ow115chO4AJGkH1NSeULc1a8k6OJI wRlTYhtCKeD6eeIMBayDiyAvN6nHyh4B7zHXhF9oQ+yQFqNkXYJhJa/HPWnBJrXuxe/W QWJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VdB6EdjwMQL5Ibg3VUOmJdReWQo7i7tr5bIvZ40Y+70=; b=wAXaex06EKQgJ9yq80tuRbAaJhMZeZeq8B2S9AL8PEbkVE7eBN/iOzl135INWQ/eB2 +aXxJqZ7il6tt9XsDKi90YwTRloaeX4cEIPSwKO9FaeCBzilWoOndu+qpINRcNbPqVuf EFd+ElXvhJ3G3MvD+r2akm3b0kp5oBSNpu98ze/xtNhgg3mhvftfrhL5reKUHYC0AWRw vgty+tgkptpcUHzqEzQTvpr+tlDMFHIfoLjDhVZBZ1PqhUrcJbgrPpbP7liLUkjMA9P/ lcgskBb+W0Y4umH/m2E60WKJp9xjCtiHQPChdcYSJ5a/gCR9O9iNJ/iQKSjpfsNrKamB o04g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=pDA9FLO9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d13-20020a65588d000000b004fb1da0e663si9042418pgu.131.2023.02.18.13.17.16; Sat, 18 Feb 2023 13:17:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=pDA9FLO9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229939AbjBRVQd (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:33 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229875AbjBRVQI (ORCPT ); Sat, 18 Feb 2023 16:16:08 -0500 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00CC413DC2; Sat, 18 Feb 2023 13:15:59 -0800 (PST) Received: by mail-pj1-x1030.google.com with SMTP id nv10-20020a17090b1b4a00b00233ba727724so1197569pjb.1; Sat, 18 Feb 2023 13:15:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VdB6EdjwMQL5Ibg3VUOmJdReWQo7i7tr5bIvZ40Y+70=; b=pDA9FLO9fgkMVEoWNcr9GB82wPyuwd6l2FqLVItakUuB+XiNMjIds3HFZkW2geSsF5 JniRckmdMx4FBrTxXEMzuuu0JRfMaQGjWaV5CR0PgBkbcewgNkSzjkPQn4db0AKxiVBV 2OgVLUMSDHOwXovpeU+Y+dP7pSsTdfSjbA7OpGooBtFsSm07TdnYKXnfj6okBFn0kjkm rwMNzyzGBe/E9RxTygAHj0qiclCrl9jRN4c0Sk2WZTTIFah2yv9oAE5xkAPLpjVluse8 kWLSzCd+d8X33I0KRZYt1rV0mB2ftjO6edVT9oDPgGezTsOvgS9EJWuT4ADkBpZfiLqk 5daA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VdB6EdjwMQL5Ibg3VUOmJdReWQo7i7tr5bIvZ40Y+70=; b=C3ZUHKRcaSNzliGwJwgGFXxXxzp1JPIkxx371a3hYQeW5FILFCj0GeYVoUPXVkbynv viSJN2AVtqbJYbL5pdcbJplTWeCvVhKX1jgvi2hfuX+G4S8kEFqTv8cWw38ZLQAPRvYf FujFSKJqkyKmKqsGtDh0IWBw6JQy/PcEwAIwAyXLMZlwPcVTTL7OPG4BYzUQ7Ngn6lo8 QLGh+x3Q48i3A2rGJztM7JHkFa5AvzCHH7N03srYpU21H9cgmHidMwZvqtWOya+8z98s rk3wvIIc5QYDVz1ZSjwrOz8HnZCCbFP3W5qhihSqwL1yLIWtRfvAHR3BdSe/tx3fvRme ffow== X-Gm-Message-State: AO0yUKWwqrnK6r/408a3dgElX0Qph/sRnZv+RgdaCBkdhYixAFw9oF33 IFPmRsvplxZdBoVTQt2yDjE= X-Received: by 2002:a17:902:d48a:b0:19a:b6bf:1e16 with SMTP id c10-20020a170902d48a00b0019ab6bf1e16mr817197plg.51.1676754959377; Sat, 18 Feb 2023 13:15:59 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id 6-20020a170902c20600b00194d14d8e54sm5050777pll.96.2023.02.18.13.15.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:15:59 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Rob Clark , Luben Tuikov , David Airlie , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , linux-kernel@vger.kernel.org (open list), linux-media@vger.kernel.org (open list:DMA BUFFER SHARING FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK) Subject: [PATCH v4 08/14] drm/scheduler: Add fence deadline support Date: Sat, 18 Feb 2023 13:15:51 -0800 Message-Id: <20230218211608.1630586-9-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205102583847602?= X-GMAIL-MSGID: =?utf-8?q?1758205102583847602?= As the finished fence is the one that is exposed to userspace, and therefore the one that other operations, like atomic update, would block on, we need to propagate the deadline from from the finished fence to the actual hw fence. v2: Split into drm_sched_fence_set_parent() (ckoenig) v3: Ensure a thread calling drm_sched_fence_set_deadline_finished() sees fence->parent set before drm_sched_fence_set_parent() does this test_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT). Signed-off-by: Rob Clark --- drivers/gpu/drm/scheduler/sched_fence.c | 46 +++++++++++++++++++++++++ drivers/gpu/drm/scheduler/sched_main.c | 2 +- include/drm/gpu_scheduler.h | 8 +++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/scheduler/sched_fence.c b/drivers/gpu/drm/scheduler/sched_fence.c index 7fd869520ef2..43e2d4f5fe3b 100644 --- a/drivers/gpu/drm/scheduler/sched_fence.c +++ b/drivers/gpu/drm/scheduler/sched_fence.c @@ -123,6 +123,37 @@ static void drm_sched_fence_release_finished(struct dma_fence *f) dma_fence_put(&fence->scheduled); } +static void drm_sched_fence_set_deadline_finished(struct dma_fence *f, + ktime_t deadline) +{ + struct drm_sched_fence *fence = to_drm_sched_fence(f); + struct dma_fence *parent; + unsigned long flags; + + spin_lock_irqsave(&fence->lock, flags); + + /* If we already have an earlier deadline, keep it: */ + if (test_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, &f->flags) && + ktime_before(fence->deadline, deadline)) { + spin_unlock_irqrestore(&fence->lock, flags); + return; + } + + fence->deadline = deadline; + set_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, &f->flags); + + spin_unlock_irqrestore(&fence->lock, flags); + + /* + * smp_load_aquire() to ensure that if we are racing another + * thread calling drm_sched_fence_set_parent(), that we see + * the parent set before it calls test_bit(HAS_DEADLINE_BIT) + */ + parent = smp_load_acquire(&fence->parent); + if (parent) + dma_fence_set_deadline(parent, deadline); +} + static const struct dma_fence_ops drm_sched_fence_ops_scheduled = { .get_driver_name = drm_sched_fence_get_driver_name, .get_timeline_name = drm_sched_fence_get_timeline_name, @@ -133,6 +164,7 @@ static const struct dma_fence_ops drm_sched_fence_ops_finished = { .get_driver_name = drm_sched_fence_get_driver_name, .get_timeline_name = drm_sched_fence_get_timeline_name, .release = drm_sched_fence_release_finished, + .set_deadline = drm_sched_fence_set_deadline_finished, }; struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f) @@ -147,6 +179,20 @@ struct drm_sched_fence *to_drm_sched_fence(struct dma_fence *f) } EXPORT_SYMBOL(to_drm_sched_fence); +void drm_sched_fence_set_parent(struct drm_sched_fence *s_fence, + struct dma_fence *fence) +{ + /* + * smp_store_release() to ensure another thread racing us + * in drm_sched_fence_set_deadline_finished() sees the + * fence's parent set before test_bit() + */ + smp_store_release(&s_fence->parent, dma_fence_get(fence)); + if (test_bit(DMA_FENCE_FLAG_HAS_DEADLINE_BIT, + &s_fence->finished.flags)) + dma_fence_set_deadline(fence, s_fence->deadline); +} + struct drm_sched_fence *drm_sched_fence_alloc(struct drm_sched_entity *entity, void *owner) { diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c index 4e6ad6e122bc..007f98c48f8d 100644 --- a/drivers/gpu/drm/scheduler/sched_main.c +++ b/drivers/gpu/drm/scheduler/sched_main.c @@ -1019,7 +1019,7 @@ static int drm_sched_main(void *param) drm_sched_fence_scheduled(s_fence); if (!IS_ERR_OR_NULL(fence)) { - s_fence->parent = dma_fence_get(fence); + drm_sched_fence_set_parent(s_fence, fence); /* Drop for original kref_init of the fence */ dma_fence_put(fence); diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h index 9db9e5e504ee..8b31a954a44d 100644 --- a/include/drm/gpu_scheduler.h +++ b/include/drm/gpu_scheduler.h @@ -280,6 +280,12 @@ struct drm_sched_fence { */ struct dma_fence finished; + /** + * @deadline: deadline set on &drm_sched_fence.finished which + * potentially needs to be propagated to &drm_sched_fence.parent + */ + ktime_t deadline; + /** * @parent: the fence returned by &drm_sched_backend_ops.run_job * when scheduling the job on hardware. We signal the @@ -568,6 +574,8 @@ void drm_sched_entity_set_priority(struct drm_sched_entity *entity, enum drm_sched_priority priority); bool drm_sched_entity_is_ready(struct drm_sched_entity *entity); +void drm_sched_fence_set_parent(struct drm_sched_fence *s_fence, + struct dma_fence *fence); struct drm_sched_fence *drm_sched_fence_alloc( struct drm_sched_entity *s_entity, void *owner); void drm_sched_fence_init(struct drm_sched_fence *fence, From patchwork Sat Feb 18 21:15:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58982 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554176wrn; Sat, 18 Feb 2023 13:17:44 -0800 (PST) X-Google-Smtp-Source: AK7set9eXS9jHITAh2DV4fBFmlpO46FBCrZlIeITPBIPEldrWEPcMxynFttANiEgHm2YReE6eUl4 X-Received: by 2002:a62:1b54:0:b0:5a8:b07b:82dc with SMTP id b81-20020a621b54000000b005a8b07b82dcmr4513623pfb.0.1676755064331; Sat, 18 Feb 2023 13:17:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755064; cv=none; d=google.com; s=arc-20160816; b=CPT0M+gx27EaYu1rkpKDQ1hAYqOI3blcBj8wsVW1nryx0BIFtoJGM/MNkPXXOjeazb cB+ncP5kfYa9ojGOYnB4oq/95HGnru5Ft8xNxAt/0yA7n9QKSp0PPvau6iLct1ewQaQH +5e6J00dxRMfOUaZjT2VfQCWOHEb+3FkMoD7O3MgYroOcXRNV+1qc/F51AZDyOm3StDt y0TTMMoE3WHkqoFNPomTMnGJo+FppCSItgt9gNqHfTuf4u2gm6xYRyctjGb9VGU5SwNO nSNVBiSeA+PVifRHEwmoTZdC6g3IfFOHdPSd2BKtlI0IcjcBe9LX/rZChjLHMKFSnAXo txBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=BeT3eeje/0prkMD9aTb8VuKmOmOAv3BQtDZq4dQFtV0=; b=XlX46JwjM8Z5g4OKiGmM6sXEGwpRmNBo8EHxxpZco9lcuheLgUkMaXShkEQg52QwCl Dtfais1CrvnryPnEPUagZnjI2tPUhmIEnN+Uvi03/BLBeHN+Ff5vKpgBaQJoTjJ7x8NC ZZWCa6ik14wLsEO14LCjc6HRuSjKGpimcmjYYehwB4Ai9KoX+AeWG8FnyVbKeM/bj4cc NdkCbZJ53fZNUBFEg2jLEpsYXYH/Xr6Bjce75YvgVNCqw3DznuGt12Vf/BLHuUk1Ixj5 f0A8sFwXgk82ZsKOor4H+QJk4dk9ZcM93nHGIxJONu9pgxIutssBLS5UN1+deZLRApyz dIqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LEPTgqQX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a2-20020a62d402000000b005a9bf854dcasi7817849pfh.36.2023.02.18.13.17.31; Sat, 18 Feb 2023 13:17:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=LEPTgqQX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229968AbjBRVQm (ORCPT + 99 others); Sat, 18 Feb 2023 16:16:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42824 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229844AbjBRVQJ (ORCPT ); Sat, 18 Feb 2023 16:16:09 -0500 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69EAB15577 for ; Sat, 18 Feb 2023 13:16:01 -0800 (PST) Received: by mail-pl1-x636.google.com with SMTP id u16so1400860plq.0 for ; Sat, 18 Feb 2023 13:16:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BeT3eeje/0prkMD9aTb8VuKmOmOAv3BQtDZq4dQFtV0=; b=LEPTgqQXjPBIv6OJo5ZWA1QLhrsJvXEhstgLAJwkloTK4moLEy+vZpTDra5KovBp3D L0KwqZIUYKlh0g2SDx0DN78qInGqrFBUIOjD4RtUAKJEp6WlNwrISLW6hUUEcgjlB3fV pt4NXzkHvLy41OgQOZcBBdUhgGuZv/LN3fCPivXDlJa4VMsDN9a7QCxoeLlHb4nYYYFZ +3HjMDma/RiEUALJ9+B4CBqb1LU0VK23Dy4iGFy03I1qD+uBQR39lWYI/rQ7Zeqvm5sC HmAgA4dTY1eTJDNev4BdCTrpqu4onCmHoRJ4huO3/x5OtcRW+TTyVSDEITqqPV4can3w 5pyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BeT3eeje/0prkMD9aTb8VuKmOmOAv3BQtDZq4dQFtV0=; b=VRnKJF1IgK+GJt1Nah7UVtmrc+WheloN0FthxYM7FwcARJLuzfiTI+2S8q0EMLY7/e WZu18RQNPr9Jslbv0AY63WX5IgnGDjvZFuYVWKVyVuTWjJ3dcRI2jREc8nVfL4YTIXlb XeA+PN3HcA3qSrW/FLl63RluGgti9xTe/cXBQoLlZYTiOX6cwipENpItadS0LKxNSMAn 2PYfw4yTSato1s8ZK4Bx4yBjIFGaCpoAe9CBiQSaNKUBAgJ4y3NzTJnTGGlQ5uO3xnoM Igkg0S1QTqu9Unog3fLnO1DI2bhkGSz8ThnCfO4GTMFqy8rrBRSwxfKvX8Rq0dG4thfA Sucg== X-Gm-Message-State: AO0yUKULjrVsKvJy+R+GaWhOGUcnFwG9erHbiXrAbqwJtR5MdkkfwSyp X8vy4zWa8Lb806PFR4y+bEA= X-Received: by 2002:a17:902:c94a:b0:19a:f556:e389 with SMTP id i10-20020a170902c94a00b0019af556e389mr3002294pla.65.1676754960820; Sat, 18 Feb 2023 13:16:00 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id jk6-20020a170903330600b0019a96a6543esm5080546plb.184.2023.02.18.13.16.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:16:00 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 09/14] drm/syncobj: Add deadline support for syncobj waits Date: Sat, 18 Feb 2023 13:15:52 -0800 Message-Id: <20230218211608.1630586-10-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205117969757617?= X-GMAIL-MSGID: =?utf-8?q?1758205117969757617?= From: Rob Clark Add a new flag to let userspace provide a deadline as a hint for syncobj and timeline waits. This gives a hint to the driver signaling the backing fences about how soon userspace needs it to compete work, so it can addjust GPU frequency accordingly. An immediate deadline can be given to provide something equivalent to i915 "wait boost". Signed-off-by: Rob Clark --- I'm a bit on the fence about the addition of the DRM_CAP, but it seems useful to give userspace a way to probe whether the kernel and driver supports the new wait flag, especially since we have vk-common code dealing with syncobjs. But open to suggestions. drivers/gpu/drm/drm_ioctl.c | 3 ++ drivers/gpu/drm/drm_syncobj.c | 59 ++++++++++++++++++++++++++++------- include/drm/drm_drv.h | 6 ++++ include/uapi/drm/drm.h | 16 ++++++++-- 4 files changed, 71 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 7c9d66ee917d..1c5c942cf0f9 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -254,6 +254,9 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_ case DRM_CAP_SYNCOBJ_TIMELINE: req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE); return 0; + case DRM_CAP_SYNCOBJ_DEADLINE: + req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE); + return 0; } /* Other caps only work with KMS drivers */ diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 0c2be8360525..61cf97972a60 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -973,7 +973,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, uint32_t count, uint32_t flags, signed long timeout, - uint32_t *idx) + uint32_t *idx, + ktime_t *deadline) { struct syncobj_wait_entry *entries; struct dma_fence *fence; @@ -1053,6 +1054,15 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, drm_syncobj_fence_add_wait(syncobjs[i], &entries[i]); } + if (deadline) { + for (i = 0; i < count; ++i) { + fence = entries[i].fence; + if (!fence) + continue; + dma_fence_set_deadline(fence, *deadline); + } + } + do { set_current_state(TASK_INTERRUPTIBLE); @@ -1151,7 +1161,8 @@ static int drm_syncobj_array_wait(struct drm_device *dev, struct drm_file *file_private, struct drm_syncobj_wait *wait, struct drm_syncobj_timeline_wait *timeline_wait, - struct drm_syncobj **syncobjs, bool timeline) + struct drm_syncobj **syncobjs, bool timeline, + ktime_t *deadline) { signed long timeout = 0; uint32_t first = ~0; @@ -1162,7 +1173,8 @@ static int drm_syncobj_array_wait(struct drm_device *dev, NULL, wait->count_handles, wait->flags, - timeout, &first); + timeout, &first, + deadline); if (timeout < 0) return timeout; wait->first_signaled = first; @@ -1172,7 +1184,8 @@ static int drm_syncobj_array_wait(struct drm_device *dev, u64_to_user_ptr(timeline_wait->points), timeline_wait->count_handles, timeline_wait->flags, - timeout, &first); + timeout, &first, + deadline); if (timeout < 0) return timeout; timeline_wait->first_signaled = first; @@ -1243,13 +1256,20 @@ drm_syncobj_wait_ioctl(struct drm_device *dev, void *data, { struct drm_syncobj_wait *args = data; struct drm_syncobj **syncobjs; + unsigned possible_flags; + ktime_t t, *tp = NULL; int ret = 0; if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) return -EOPNOTSUPP; - if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT)) + possible_flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT; + + if (drm_core_check_feature(dev, DRIVER_SYNCOBJ_DEADLINE)) + possible_flags |= DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE; + + if (args->flags & ~possible_flags) return -EINVAL; if (args->count_handles == 0) @@ -1262,8 +1282,13 @@ drm_syncobj_wait_ioctl(struct drm_device *dev, void *data, if (ret < 0) return ret; + if (args->flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE) { + t = ktime_set(args->deadline_sec, args->deadline_nsec); + tp = &t; + } + ret = drm_syncobj_array_wait(dev, file_private, - args, NULL, syncobjs, false); + args, NULL, syncobjs, false, tp); drm_syncobj_array_free(syncobjs, args->count_handles); @@ -1276,14 +1301,21 @@ drm_syncobj_timeline_wait_ioctl(struct drm_device *dev, void *data, { struct drm_syncobj_timeline_wait *args = data; struct drm_syncobj **syncobjs; + unsigned possible_flags; + ktime_t t, *tp = NULL; int ret = 0; if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE)) return -EOPNOTSUPP; - if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | - DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)) + possible_flags = DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | + DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE; + + if (drm_core_check_feature(dev, DRIVER_SYNCOBJ_DEADLINE)) + possible_flags |= DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE; + + if (args->flags & ~possible_flags) return -EINVAL; if (args->count_handles == 0) @@ -1296,8 +1328,13 @@ drm_syncobj_timeline_wait_ioctl(struct drm_device *dev, void *data, if (ret < 0) return ret; + if (args->flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE) { + t = ktime_set(args->deadline_sec, args->deadline_nsec); + tp = &t; + } + ret = drm_syncobj_array_wait(dev, file_private, - NULL, args, syncobjs, true); + NULL, args, syncobjs, true, tp); drm_syncobj_array_free(syncobjs, args->count_handles); diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h index 1d76d0686b03..9aa24f097e22 100644 --- a/include/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -104,6 +104,12 @@ enum drm_driver_feature { * acceleration should be handled by two drivers that are connected using auxiliary bus. */ DRIVER_COMPUTE_ACCEL = BIT(7), + /** + * @DRIVER_SYNCOBJ_DEADLINE: + * + * Driver supports &dma_fence_ops.set_deadline + */ + DRIVER_SYNCOBJ_DEADLINE = BIT(8), /* IMPORTANT: Below are all the legacy flags, add new ones above. */ diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 642808520d92..c6b85bb13810 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -767,6 +767,13 @@ struct drm_gem_open { * Documentation/gpu/drm-mm.rst, section "DRM Sync Objects". */ #define DRM_CAP_SYNCOBJ_TIMELINE 0x14 +/** + * DRM_CAP_SYNCOBJ_DEADLINE + * + * If set to 1, the driver supports DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE flag + * on the SYNCOBJ_TIMELINE_WAIT/SYNCOBJ_WAIT ioctls. + */ +#define DRM_CAP_SYNCOBJ_DEADLINE 0x15 /* DRM_IOCTL_GET_CAP ioctl argument type */ struct drm_get_cap { @@ -887,6 +894,7 @@ struct drm_syncobj_transfer { #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL (1 << 0) #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT (1 << 1) #define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE (1 << 2) /* wait for time point to become available */ +#define DRM_SYNCOBJ_WAIT_FLAGS_WAIT_DEADLINE (1 << 3) /* set fence deadline based to deadline_nsec/sec */ struct drm_syncobj_wait { __u64 handles; /* absolute timeout */ @@ -894,7 +902,9 @@ struct drm_syncobj_wait { __u32 count_handles; __u32 flags; __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; + /* Deadline to set on backing fence(s) in CLOCK_MONOTONIC: */ + __u32 deadline_nsec; + __u64 deadline_sec; }; struct drm_syncobj_timeline_wait { @@ -906,7 +916,9 @@ struct drm_syncobj_timeline_wait { __u32 count_handles; __u32 flags; __u32 first_signaled; /* only valid when not waiting all */ - __u32 pad; + /* Deadline to set on backing fence(s) in CLOCK_MONOTONIC: */ + __u32 deadline_nsec; + __u64 deadline_sec; }; From patchwork Sat Feb 18 21:15:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58983 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554200wrn; Sat, 18 Feb 2023 13:17:49 -0800 (PST) X-Google-Smtp-Source: AK7set+7H1cdSsSnRXecqykL4g0JZy3O2AmhewaJXntflsnISjshtjowwNz154jVHZswySi9/SUv X-Received: by 2002:a05:6a00:10c9:b0:5a8:a751:d22 with SMTP id d9-20020a056a0010c900b005a8a7510d22mr11051450pfu.12.1676755068767; Sat, 18 Feb 2023 13:17:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755068; cv=none; d=google.com; s=arc-20160816; b=fdqqJGx67JFpCYKDkw6QFY2MfPSkD8DnkNPVS77REEwRd2HzwYhWB7sTDN3anPOkMs PNWwPrDvVkL12mUiZk0iLsn7lHSLkuYBz3A/q7Nk46AEk/tjrZqo3CUsgTnnSD+8yhy1 8Q3OSLgqmwOhwXuaBwar5hCmXPcROKyM4OIcJnHpBiFQ2vgJt1uSQfwjaoqWwd7H6EBe /Pz/Z1lrZKWhWV4U0FhhcGF282aMTdsZ1RXYg7bI6xRujNSsXgiyR+mObD6mP5+inRco sJAtX921glTaBm9DhMZron9IrTrFS+jas8GuF/4qRE4vgv7tDEjZGJ9qRStJ0/wrg+1a Xkkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=5Jl0bAAXIZTjQ7NsDAeqTzIEhvjQzgg5/X7BsK4u81Y=; b=dxWXF2GH2sq+BSWXXWreTFzRdjkK868kWD98gHVWk8xBdBJIijomyBJHZZsgO4dfwt n6s1o+aQe+3myaazu1gfYnYTZtLFgL8D35Z1O744MK0vnhZd5j3mG9V1xHtBE6sXhv0x x6IQVm7ZbxyELdiwfT5MyOq33hNzDsCyHb9vPiNsqw03PmiJ+OD4j6HAeTSg/X81MURK iYKYL7H4dhspLIK8fKL+9E9Nk3kaAhlTDu9FvGVO8Fe5wbfcAXKU5w3KaPVdC2RkLm9H dVkUUpqZjPNm+/V1p8r1b88BJG7sYu22DUh3BvCcmgeQkbXUgXT4nvpyK5Hv5bYB0txm IvRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Ypm3OEaE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 204-20020a6216d5000000b005a8e0855ae6si8460741pfw.179.2023.02.18.13.17.35; Sat, 18 Feb 2023 13:17:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=Ypm3OEaE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230008AbjBRVRG (ORCPT + 99 others); Sat, 18 Feb 2023 16:17:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42730 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229897AbjBRVQK (ORCPT ); Sat, 18 Feb 2023 16:16:10 -0500 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE7CD13D7E for ; Sat, 18 Feb 2023 13:16:02 -0800 (PST) Received: by mail-pf1-x42a.google.com with SMTP id j10so703975pfn.4 for ; Sat, 18 Feb 2023 13:16:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5Jl0bAAXIZTjQ7NsDAeqTzIEhvjQzgg5/X7BsK4u81Y=; b=Ypm3OEaEuberWEEJkwjckxIjd/fHXeD+UsK2sNxPfOh4VXSeIeHxGyby2GuFmyckgB DPDPfvmi2uvJ7m2w9ZXK3H1Ekv2+II/tBc0aGXy3LefRYqgovm0DXtFUG/3/66OJN4iE YqOAZ7tRtVL4IMhiN+VmmAehUqGvglfHf9UTRFLCXJlwg8IMcrNqpT87lm7YhFL2srhA /yf3cvPBlakDzzA63dLpzDbxyi8W6tpPJBgG/p8y808RF05uk0cx38i6cB7r5fBCuZdJ JXI1niL29wo25W9KmsKxhyFpm2IP/w+0LZnJz4MIoDp2aP//Ap8lQlE41lyS6/oyFtPJ 1IUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5Jl0bAAXIZTjQ7NsDAeqTzIEhvjQzgg5/X7BsK4u81Y=; b=UncEU8NVXfzQzhrsxsy+WaZUBEfEEO4c6fwSP/Rc1N8SoFFSdhB3PZbP0L9qymnucA Jlifjmn66EA+OjxnGJOQwGIGqs7Jgn/v9J1MRuUQI9BoUr3XjRrXCqIJG6CrbE/KxCNw QWvLOLyK4gKFN7H8rDK7ZdL21n6UCRciDhy6HLuLvAFmm6d1WlvL10xLdXwW+XM1iA/Z J1iOORyrX2RnVchbE8yny8KUBk3dPmD8qXse2u/sM6v/++S/hKf35NMHgTs4bNE09Dt6 XfbZWoam/keZFfPG8PY5zMxQJPTgzwitEQfeu9y9vs+iUu1Ir3S36YfDtAHvNpuGOz6u gmyA== X-Gm-Message-State: AO0yUKXkUqVyuoH2FE/VFBH7dO9YIyBJ/sdEA83/471Z8Hj6uYtqPmYn 9hnxXq/2R7vN0/8G8HwArW4= X-Received: by 2002:a05:6a00:4106:b0:5a8:9858:750a with SMTP id bu6-20020a056a00410600b005a89858750amr9007439pfb.13.1676754962150; Sat, 18 Feb 2023 13:16:02 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id s26-20020aa78d5a000000b0058dbb5c5038sm4957450pfe.182.2023.02.18.13.16.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:16:01 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 10/14] drm/vblank: Add helper to get next vblank time Date: Sat, 18 Feb 2023 13:15:53 -0800 Message-Id: <20230218211608.1630586-11-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205122760189436?= X-GMAIL-MSGID: =?utf-8?q?1758205122760189436?= From: Rob Clark Will be used in the next commit to set a deadline on fences that an atomic update is waiting on. Signed-off-by: Rob Clark --- drivers/gpu/drm/drm_vblank.c | 32 ++++++++++++++++++++++++++++++++ include/drm/drm_vblank.h | 1 + 2 files changed, 33 insertions(+) diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c index 2ff31717a3de..caf25ebb34c5 100644 --- a/drivers/gpu/drm/drm_vblank.c +++ b/drivers/gpu/drm/drm_vblank.c @@ -980,6 +980,38 @@ u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc, } EXPORT_SYMBOL(drm_crtc_vblank_count_and_time); +/** + * drm_crtc_next_vblank_time - calculate the time of the next vblank + * @crtc: the crtc for which to calculate next vblank time + * @vblanktime: pointer to time to receive the next vblank timestamp. + * + * Calculate the expected time of the next vblank based on time of previous + * vblank and frame duration + */ +int drm_crtc_next_vblank_time(struct drm_crtc *crtc, ktime_t *vblanktime) +{ + unsigned int pipe = drm_crtc_index(crtc); + struct drm_vblank_crtc *vblank = &crtc->dev->vblank[pipe]; + u64 count; + + if (!vblank->framedur_ns) + return -EINVAL; + + count = drm_vblank_count_and_time(crtc->dev, pipe, vblanktime); + + /* + * If we don't get a valid count, then we probably also don't + * have a valid time: + */ + if (!count) + return -EINVAL; + + *vblanktime = ktime_add(*vblanktime, ns_to_ktime(vblank->framedur_ns)); + + return 0; +} +EXPORT_SYMBOL(drm_crtc_next_vblank_time); + static void send_vblank_event(struct drm_device *dev, struct drm_pending_vblank_event *e, u64 seq, ktime_t now) diff --git a/include/drm/drm_vblank.h b/include/drm/drm_vblank.h index 733a3e2d1d10..a63bc2c92f3c 100644 --- a/include/drm/drm_vblank.h +++ b/include/drm/drm_vblank.h @@ -230,6 +230,7 @@ bool drm_dev_has_vblank(const struct drm_device *dev); u64 drm_crtc_vblank_count(struct drm_crtc *crtc); u64 drm_crtc_vblank_count_and_time(struct drm_crtc *crtc, ktime_t *vblanktime); +int drm_crtc_next_vblank_time(struct drm_crtc *crtc, ktime_t *vblanktime); void drm_crtc_send_vblank_event(struct drm_crtc *crtc, struct drm_pending_vblank_event *e); void drm_crtc_arm_vblank_event(struct drm_crtc *crtc, From patchwork Sat Feb 18 21:15:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58985 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554255wrn; Sat, 18 Feb 2023 13:17:57 -0800 (PST) X-Google-Smtp-Source: AK7set99F6MJbvZO3vFt/S+dakM1jy5qYxj7m8YQHbUkWSquXOZ3FTmIO+f43AND9uKSOOYTaSdF X-Received: by 2002:a17:90b:1d8a:b0:234:17b:ae2b with SMTP id pf10-20020a17090b1d8a00b00234017bae2bmr388349pjb.13.1676755076721; Sat, 18 Feb 2023 13:17:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755076; cv=none; d=google.com; s=arc-20160816; b=EY8H1o01yZ3FJbuxERWBIR+qnGCNNoRYkrW5NjWnggTJgXI94Oz4IyFC7kbXeyf1m9 vpO1GGvPpfSxfkkZpskJO7Z5DbN+nXGEyEHuQkQ7lneW26hvFMajm7YRK+qt4EXjXs/D eA54bD0kqRi0eaIbxaffavAZaG+eeww0ThA+PZ0zbUOD8k7sTMiS5HWCb7Jc8BLMSdr1 +7IrRzeN16cJR8eVJMO9M1/LyHOIAJyVhqre+C/Moop6gLhj9qT0Dvd32XfisYXyz79n Hd9fXfcZILuyOgHXASZZehw/lrat3eiogs9k+gdGvx9FtTCTgyp+mbCS3DXGpCam2G/r BeKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=9yF21jz9Wf1+ysDiZnumY8mp3PUToyh/n6nr/hm38/k=; b=nHrfVbWqIKUn9DBcWDe2YDoIKH5cC5DtNhu2h+brwraTuxi+J0MfT7VbK2EN2lnui6 a6MNjpwqnzxm7U8V0CuJSoFoibrIVwt0pdynyPpMG5oYZs7TQQVnaRub4s4SOuY8HtL+ DT3u4BPRV11DrmZMJ5hMkDqZhITG//+g7rhtIPJ02jl0iiASiZmhByOHF9A+KXxAHbPu yslV9HOaBFxbokBjfmZY+Wl6Icg/QfsheJkWMwaQR9QXHpu753Ayz15e6jMT+YXlGCz5 g7hsniF1SFWwcr6CKeNtImILPK0eWSlj0l148Q0L+YMdOIGx6GQPJxnId02FmSLZ22kY 3Xkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=o3KZu6xC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s4-20020a17090ad48400b0022bb99803d9si8978724pju.164.2023.02.18.13.17.44; Sat, 18 Feb 2023 13:17:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=o3KZu6xC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230018AbjBRVRJ (ORCPT + 99 others); Sat, 18 Feb 2023 16:17:09 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229912AbjBRVQO (ORCPT ); Sat, 18 Feb 2023 16:16:14 -0500 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 08BC416AF6 for ; Sat, 18 Feb 2023 13:16:03 -0800 (PST) Received: by mail-pj1-x102f.google.com with SMTP id a5-20020a17090a70c500b00236679bc70cso13890pjm.4 for ; Sat, 18 Feb 2023 13:16:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9yF21jz9Wf1+ysDiZnumY8mp3PUToyh/n6nr/hm38/k=; b=o3KZu6xCZhOx8yKLO3mCPTkTO6tIsRYmbOCGeJBqVniPc0jFqnNjoHWeefirhtUCQD TMs4eZTOs8KhFyvy1g7Y9zc5kpRNWaU+YjrhCI0IjZKJHAefvOW94v4Dvkm0LEbtvHuu vzxcd1WXm9wrdxUdbR7dY2ZQ2XClD6c5Gn77V1jB543GNPc7fQn2yq5/fobhwsvghKil 2LcGEX1LDJhLA9cS8/Eq6f+d05FvrxWhwhn9n4RxA6yLI8lNL9gy4vMuECMYp3adFLxY jFsUaLS6DZPqaOrW6zXMPOxhyfe3J7t7Zryk/soeD4VzpBWEKQhlxetBTVeAudYUDL07 N2HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9yF21jz9Wf1+ysDiZnumY8mp3PUToyh/n6nr/hm38/k=; b=ER5O0dccRNFodLe0PK7DA3sALzY2i3XSk+sLnXmc6H0fCTSopIt1zyoeZN24WsG6Bv EMrQQ8OrQQhB1X1tWf2KDaxU6bkk0vhDaUI6ySIJMRqdvhW697Vil8RH+xhfkM6bDfkn 6DbXEBHWjekDBBVfIQxZ6NJLFjRZUU4iQpl3uHOr0CWco1shjLDtCndHhVwrsbTpixQ5 h8tsOOnLOd5+R9AvmKkFMLdKb4nkaR/yYNFBe1YNyfgLRv8d5wavBDUrzgwvmoLNnLfx wdLtJIOLDgLbwaOWCqNTsj77paRTKYcOwnlb5r3B6Jmh2pMsZH9EoLUBxJ5lEMWn2Gck 6FWg== X-Gm-Message-State: AO0yUKVedwMJpd9AGFIyXgn8Bvx9VL/MPQCVU2O1YlCxS+1DGOvVNQEw 9cSFS3DjKDL6dP49gdMTRLaKL2rjYWI= X-Received: by 2002:a17:902:cf52:b0:19a:7c7d:7180 with SMTP id e18-20020a170902cf5200b0019a7c7d7180mr3479908plg.34.1676754963579; Sat, 18 Feb 2023 13:16:03 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id i3-20020a170902c28300b0019251e959b1sm5033341pld.262.2023.02.18.13.16.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:16:03 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Daniel Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 11/14] drm/atomic-helper: Set fence deadline for vblank Date: Sat, 18 Feb 2023 13:15:54 -0800 Message-Id: <20230218211608.1630586-12-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205131321089787?= X-GMAIL-MSGID: =?utf-8?q?1758205131321089787?= From: Rob Clark For an atomic commit updating a single CRTC (ie. a pageflip) calculate the next vblank time, and inform the fence(s) of that deadline. v2: Comment typo fix (danvet) Signed-off-by: Rob Clark Reviewed-by: Daniel Vetter Signed-off-by: Rob Clark --- drivers/gpu/drm/drm_atomic_helper.c | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index d579fd8f7cb8..35a4dc714920 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -1511,6 +1511,40 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, } EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_enables); +/* + * For atomic updates which touch just a single CRTC, calculate the time of the + * next vblank, and inform all the fences of the deadline. + */ +static void set_fence_deadline(struct drm_device *dev, + struct drm_atomic_state *state) +{ + struct drm_crtc *crtc, *wait_crtc = NULL; + struct drm_crtc_state *new_crtc_state; + struct drm_plane *plane; + struct drm_plane_state *new_plane_state; + ktime_t vbltime; + int i; + + for_each_new_crtc_in_state (state, crtc, new_crtc_state, i) { + if (wait_crtc) + return; + wait_crtc = crtc; + } + + /* If no CRTCs updated, then nothing to do: */ + if (!wait_crtc) + return; + + if (drm_crtc_next_vblank_time(wait_crtc, &vbltime)) + return; + + for_each_new_plane_in_state (state, plane, new_plane_state, i) { + if (!new_plane_state->fence) + continue; + dma_fence_set_deadline(new_plane_state->fence, vbltime); + } +} + /** * drm_atomic_helper_wait_for_fences - wait for fences stashed in plane state * @dev: DRM device @@ -1540,6 +1574,8 @@ int drm_atomic_helper_wait_for_fences(struct drm_device *dev, struct drm_plane_state *new_plane_state; int i, ret; + set_fence_deadline(dev, state); + for_each_new_plane_in_state(state, plane, new_plane_state, i) { if (!new_plane_state->fence) continue; From patchwork Sat Feb 18 21:15:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58988 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554331wrn; Sat, 18 Feb 2023 13:18:13 -0800 (PST) X-Google-Smtp-Source: AK7set+ypX7EK7fs2kutU5zoN8MpC5Jvsi75qVai1HAA3MdlAsoCV3yPRRoD7yx/E+lrZy83bu9q X-Received: by 2002:a17:902:e547:b0:19a:96d2:2407 with SMTP id n7-20020a170902e54700b0019a96d22407mr1711846plf.8.1676755092834; Sat, 18 Feb 2023 13:18:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755092; cv=none; d=google.com; s=arc-20160816; b=twvhyeBGHT/NCLEEBH4tS/hk0PnuBFYu/yR2ImjcJfbYGCPU4sQ1FZ9ybZDCheTQxF 8Ke+zaOgjrPRmcZN/gx5l7RIhdac/qMV8lYE+ZGu3aV8U2oYZlRF3RUfaN/ym0HFmW5j DxvIQ+2J+L0wVPigGNniU6DPWPXxpKCMg/QezWDceUhUnZYLqk8R7GBoO26O7nF3Piiq 8ZiRKU63ZtrGEssNEO/aIzuNZ5SiUaA3gW0gTZ4WjVh5yfVy+enCsO4+6spR2EttvUTx WEsL6UjOlwhaOkabkE2V3ikHDyxOS+mM+nBpZ6sgzGcM+7rEgs8MGmwMq7hAfzqnH2f+ BuCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JsqKhysyjry5mR87QHTfoSePPgw92sCbt0Ck69L5/uk=; b=QU2dFUdlHUlQlV0oEjoZf187QpT5urzdGGbuq9fy2o8MKfdDC/c8lXTuo2qoqsvIZt jUQYoqzu9iyy2mU36y5jbRYbW+7LfaP5MmDYzaY60HRbWrcB0el8VAIvURYV8zwyr7Dc ImHbVlTXXJALld5ZVC1/7MIThTPenkSHEMJ5SI+pnFLrF2O3StoFIFoGqUpzRdOXDG60 hku/W/b/yjuN+EJXwBGD+84/ZABLy/lYp7S83uH6h7hXreK6NxavK5sGnzKcSaJCKlOh bl1kA3YeF/K1ykUXxiAxp5c+swk4sA0hxi1Q5kRpOikvRXS+S4kYqr0XGA+AlcLNGbWF KWTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=fdqRVzGU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e17-20020a17090301d100b0019a986428a8si4836574plh.580.2023.02.18.13.18.00; Sat, 18 Feb 2023 13:18:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=fdqRVzGU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230047AbjBRVRb (ORCPT + 99 others); Sat, 18 Feb 2023 16:17:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42726 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229943AbjBRVQd (ORCPT ); Sat, 18 Feb 2023 16:16:33 -0500 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD78A15C82; Sat, 18 Feb 2023 13:16:05 -0800 (PST) Received: by mail-pl1-x636.google.com with SMTP id 21so319343plg.8; Sat, 18 Feb 2023 13:16:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JsqKhysyjry5mR87QHTfoSePPgw92sCbt0Ck69L5/uk=; b=fdqRVzGUTW2Lylj8ptJ8toY2v6E2ELgrc8C8ilcJUZ/kWsyPrOCCgQdLF+kfCIID3d 1yO9rav+tObLxcCflTXMXXJl/q5dB+0YsloZdSqf45hZF7HC9gHfhGaw+mPtrlO+bt4m iEwSaUeDE//+Jw2o8V4PDqoX/9WP7WqY57r4BlulvwXO+2mGolrHFjLYLfG6SE5rsCWd FUbiWHBPoS0KTibR65rb2rP9Sqx/RFWW8FBI7AZiXRVMQCVLfUFFHAQF00Gqw6+Oynw0 uG7o6WGK7t/sfWs8eSza5ClmJ69N2tkQtrfznMed39wwS+8P4C56iZZfSK/TXUUvMIUL jrVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JsqKhysyjry5mR87QHTfoSePPgw92sCbt0Ck69L5/uk=; b=Lt03KKYxl2LKp3JcmeV5eE2MXqokQfM1FRlC2YNrJKoTsU+g5qf/P1y+smn6YLrm1v m2Fspn4GaWCNm1uNAg0i2gM+/3e3T/SR9+rNuv9US7K+SOdPlwQUa0KKEOmK+xRwobBH PMGgjBs+ZbqQQxfrbgShkeHoekTFmWGzMsFbgAjc4rzYl40y1c98ugCQznQw+jVoh+oO mZjTmw9Pj9JwhEhAwCLg1D9cL3pvv65VrLyRnd6Cz4HwEC1YhN5cIam31NLOQXnIpcKd YTn+Ccb3letXJwfmacCae9wvlW+bi/PpPq0ABWgQ7lSSLZAotmQv/kndQ5Bp09AlCgcr lPaA== X-Gm-Message-State: AO0yUKUYZ+/cHtTfJHKd3OcYCTWhA2o+uvErpc/l2HPxHYI+rUwsd4hC kfJrzRkSqzovoZASAD+vbBA= X-Received: by 2002:a17:902:ea12:b0:199:4be8:be48 with SMTP id s18-20020a170902ea1200b001994be8be48mr2315956plg.19.1676754965011; Sat, 18 Feb 2023 13:16:05 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id z13-20020a1709027e8d00b00198fe021f93sm5047709pla.77.2023.02.18.13.16.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:16:04 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= , linux-arm-msm@vger.kernel.org (open list:DRM DRIVER FOR MSM ADRENO GPU), linux-kernel@vger.kernel.org (open list), linux-media@vger.kernel.org (open list:DMA BUFFER SHARING FRAMEWORK), linaro-mm-sig@lists.linaro.org (moderated list:DMA BUFFER SHARING FRAMEWORK) Subject: [PATCH v4 12/14] drm/msm: Add deadline based boost support Date: Sat, 18 Feb 2023 13:15:55 -0800 Message-Id: <20230218211608.1630586-13-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205147959162852?= X-GMAIL-MSGID: =?utf-8?q?1758205147959162852?= From: Rob Clark Track the nearest deadline on a fence timeline and set a timer to expire shortly before to trigger boost if the fence has not yet been signaled. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 4 +- drivers/gpu/drm/msm/msm_fence.c | 74 +++++++++++++++++++++++++++++++++ drivers/gpu/drm/msm/msm_fence.h | 20 +++++++++ 3 files changed, 97 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index aca48c868c14..be2a68f8e78d 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -1065,7 +1065,9 @@ static const struct drm_driver msm_driver = { DRIVER_RENDER | DRIVER_ATOMIC | DRIVER_MODESET | - DRIVER_SYNCOBJ, + DRIVER_SYNCOBJ | + DRIVER_SYNCOBJ_DEADLINE | + 0, .open = msm_open, .postclose = msm_postclose, .lastclose = drm_fb_helper_lastclose, diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c index 56641408ea74..51b461f32103 100644 --- a/drivers/gpu/drm/msm/msm_fence.c +++ b/drivers/gpu/drm/msm/msm_fence.c @@ -8,6 +8,35 @@ #include "msm_drv.h" #include "msm_fence.h" +#include "msm_gpu.h" + +static struct msm_gpu *fctx2gpu(struct msm_fence_context *fctx) +{ + struct msm_drm_private *priv = fctx->dev->dev_private; + return priv->gpu; +} + +static enum hrtimer_restart deadline_timer(struct hrtimer *t) +{ + struct msm_fence_context *fctx = container_of(t, + struct msm_fence_context, deadline_timer); + + kthread_queue_work(fctx2gpu(fctx)->worker, &fctx->deadline_work); + + return HRTIMER_NORESTART; +} + +static void deadline_work(struct kthread_work *work) +{ + struct msm_fence_context *fctx = container_of(work, + struct msm_fence_context, deadline_work); + + /* If deadline fence has already passed, nothing to do: */ + if (msm_fence_completed(fctx, fctx->next_deadline_fence)) + return; + + msm_devfreq_boost(fctx2gpu(fctx), 2); +} struct msm_fence_context * @@ -36,6 +65,13 @@ msm_fence_context_alloc(struct drm_device *dev, volatile uint32_t *fenceptr, fctx->completed_fence = fctx->last_fence; *fctx->fenceptr = fctx->last_fence; + hrtimer_init(&fctx->deadline_timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); + fctx->deadline_timer.function = deadline_timer; + + kthread_init_work(&fctx->deadline_work, deadline_work); + + fctx->next_deadline = ktime_get(); + return fctx; } @@ -62,6 +98,8 @@ void msm_update_fence(struct msm_fence_context *fctx, uint32_t fence) spin_lock_irqsave(&fctx->spinlock, flags); if (fence_after(fence, fctx->completed_fence)) fctx->completed_fence = fence; + if (msm_fence_completed(fctx, fctx->next_deadline_fence)) + hrtimer_cancel(&fctx->deadline_timer); spin_unlock_irqrestore(&fctx->spinlock, flags); } @@ -92,10 +130,46 @@ static bool msm_fence_signaled(struct dma_fence *fence) return msm_fence_completed(f->fctx, f->base.seqno); } +static void msm_fence_set_deadline(struct dma_fence *fence, ktime_t deadline) +{ + struct msm_fence *f = to_msm_fence(fence); + struct msm_fence_context *fctx = f->fctx; + unsigned long flags; + ktime_t now; + + spin_lock_irqsave(&fctx->spinlock, flags); + now = ktime_get(); + + if (ktime_after(now, fctx->next_deadline) || + ktime_before(deadline, fctx->next_deadline)) { + fctx->next_deadline = deadline; + fctx->next_deadline_fence = + max(fctx->next_deadline_fence, (uint32_t)fence->seqno); + + /* + * Set timer to trigger boost 3ms before deadline, or + * if we are already less than 3ms before the deadline + * schedule boost work immediately. + */ + deadline = ktime_sub(deadline, ms_to_ktime(3)); + + if (ktime_after(now, deadline)) { + kthread_queue_work(fctx2gpu(fctx)->worker, + &fctx->deadline_work); + } else { + hrtimer_start(&fctx->deadline_timer, deadline, + HRTIMER_MODE_ABS); + } + } + + spin_unlock_irqrestore(&fctx->spinlock, flags); +} + static const struct dma_fence_ops msm_fence_ops = { .get_driver_name = msm_fence_get_driver_name, .get_timeline_name = msm_fence_get_timeline_name, .signaled = msm_fence_signaled, + .set_deadline = msm_fence_set_deadline, }; struct dma_fence * diff --git a/drivers/gpu/drm/msm/msm_fence.h b/drivers/gpu/drm/msm/msm_fence.h index 7f1798c54cd1..cdaebfb94f5c 100644 --- a/drivers/gpu/drm/msm/msm_fence.h +++ b/drivers/gpu/drm/msm/msm_fence.h @@ -52,6 +52,26 @@ struct msm_fence_context { volatile uint32_t *fenceptr; spinlock_t spinlock; + + /* + * TODO this doesn't really deal with multiple deadlines, like + * if userspace got multiple frames ahead.. OTOH atomic updates + * don't queue, so maybe that is ok + */ + + /** next_deadline: Time of next deadline */ + ktime_t next_deadline; + + /** + * next_deadline_fence: + * + * Fence value for next pending deadline. The deadline timer is + * canceled when this fence is signaled. + */ + uint32_t next_deadline_fence; + + struct hrtimer deadline_timer; + struct kthread_work deadline_work; }; struct msm_fence_context * msm_fence_context_alloc(struct drm_device *dev, From patchwork Sat Feb 18 21:15:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 58989 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp554371wrn; Sat, 18 Feb 2023 13:18:18 -0800 (PST) X-Google-Smtp-Source: AK7set/S7Hvrap6nYtDiUxRZYoznY+4v5QV7pIA+vJEJU8LIiXTkuvW7CX+Jhjx8ndOqMx0TTfnK X-Received: by 2002:a17:902:d50d:b0:194:a531:4b39 with SMTP id b13-20020a170902d50d00b00194a5314b39mr653804plg.67.1676755098054; Sat, 18 Feb 2023 13:18:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1676755098; cv=none; d=google.com; s=arc-20160816; b=U67DVUEKC18wMKsrQCCTvGWP6dFW5Aflpdse1D2VgEi+7tulSk1/kprKwAdpP1eACs bA+tteh3b3rHrTKNVhjGxVAr0F7uTtb4x8vX8Id1d1yGYZwJUaqg6UrEP5Wsl7Tk0SFK ykiPskILlJnlhnT8Z5bmwjBCHgkj+hO07BaeuO3WmguBWQ7kkZ2zMv0EXQXAkRPD93qR SFyXBnxGdFvKjDqRJ9SVJGiGVH7wqWDt+UsFDKQAdVvIQjDHqFDbEUEXORrsvksu4wOj oIzB37meoQGGWsGaduaObRVZraJBna/HlBHPvS1cuj4eVP0JCgcph1iKMumSQ/750f0L DAJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=W4+9NlCagZCbGKQxxC4BQ8mfRmR2+fBQqYmsfk1PWhY=; b=d3goz6PJOeLZKffklwsHu3s46CvoA+0vPGnMKVvg22xeyexsbBCHWmSRaUty+qQtWn KMNAdTrRn6FspfDl37mvTF8j7bFimFdyPR2z5O+uDjjhjL09MXqPSOWv23Aycx8e9tiu EqTAe9iLqrEBB/vsxHbMly8V78McrI6ilePc9YwL1FoQjvAv5rNip0AcFZ62QKfEomlS asjiNUHJh5ZN2RwlPvjIcMXW7GCR96aUXwbr9JCvt0B8XMgxrL9M6M3Jy7kjQzFSWHGL wlS31g9Hi1pIdXMtfRLIfhhR4TWuJgPgdIpy+MSicXRZ6hW7iyaEVKM6PaMjdjIwOhHB q+aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=UGehYwiI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lg3-20020a170902fb8300b00189c05664e8si3402322plb.563.2023.02.18.13.18.05; Sat, 18 Feb 2023 13:18:18 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=UGehYwiI; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229896AbjBRVRe (ORCPT + 99 others); Sat, 18 Feb 2023 16:17:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229892AbjBRVRA (ORCPT ); Sat, 18 Feb 2023 16:17:00 -0500 Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8983A1716D; Sat, 18 Feb 2023 13:16:07 -0800 (PST) Received: by mail-pl1-x62a.google.com with SMTP id e6so1636858plt.4; Sat, 18 Feb 2023 13:16:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W4+9NlCagZCbGKQxxC4BQ8mfRmR2+fBQqYmsfk1PWhY=; b=UGehYwiIzvpjIvIuTR12x7VpOApVAdubpqJ/+APQRJatYantmnw+npsBYDe0ySf47E NjuCruQg92GdH3G8ci+baO0qGGjDlJgLu6hWNcXMOSPFMcCdb78ZxrBkmbLGTM12ni/i p8rphRLznoOmXZFZjOhGbs6hW8TAY9bdSzN34GET88uytGMOxnZM39cPBSuhlzVmoktS aemNOpgyeXczW44GNA/gYZDDwnox/LfSAxFf/r96vbI6Z2g1h3up4V2pU0KhMXDgqSDy QxQM45+gLve3IXw8NPw6me/yH36sAMmXN+EK4axfpoW0FGGQevKtnKZbtqvA5iQlQbvI CQ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W4+9NlCagZCbGKQxxC4BQ8mfRmR2+fBQqYmsfk1PWhY=; b=K9FeLMZpycyhNTzvyrQKO3wnCmeRCozinyK7wgtSE+C59aQOIX7+3JZ5DAP21kTtA4 WAsnOkKzud8jQjTL++IfEatHhdNVgck/IS5InL3KKDUD4OZQmYUm+bUWONnohFu6+Mbk Vp2DoQRc5Hbg2XEG5KPQWBWTcjwhIgKjYTdl5rSoYSVUUeDBgWgvFxQMYu8TZm+p8JR3 G6xsPzdJQA4Ww/ldb4Gq/rBxwW8XCZfGFbB7d1fWAZesGYI2annAPYP05PK+KCGEFMOY ujaYMToOnF6VSkxcAG5OIsQ+qsm46WifLqxtvZH05NgVHINQnszlj6l0AkAQY+A3CeRt D5RA== X-Gm-Message-State: AO0yUKUFH8pvnp5PYzbU22uy67EjOIijNafAnop7vkhnMuc28TxQezWu YUo0k3M9W/OpK1FyKzpqXUTJ+A8U0xM= X-Received: by 2002:a17:903:28c5:b0:19a:abb0:1e with SMTP id kv5-20020a17090328c500b0019aabb0001emr3051010plb.38.1676754966467; Sat, 18 Feb 2023 13:16:06 -0800 (PST) Received: from localhost (c-73-67-135-195.hsd1.or.comcast.net. [73.67.135.195]) by smtp.gmail.com with ESMTPSA id l11-20020a170902d34b00b0019ac69a6348sm5092542plk.133.2023.02.18.13.16.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Feb 2023 13:16:06 -0800 (PST) From: Rob Clark To: dri-devel@lists.freedesktop.org Cc: freedreno@lists.freedesktop.org, Daniel Vetter , =?utf-8?q?Christian_K=C3=B6nig?= , =?utf-8?q?Michel_D=C3=A4nzer?= , Tvrtko Ursulin , Rodrigo Vivi , Alex Deucher , Pekka Paalanen , Simon Ser , Rob Clark , Rob Clark , Abhinav Kumar , Dmitry Baryshkov , Sean Paul , David Airlie , linux-arm-msm@vger.kernel.org (open list:DRM DRIVER FOR MSM ADRENO GPU), linux-kernel@vger.kernel.org (open list) Subject: [PATCH v4 13/14] drm/msm: Add wait-boost support Date: Sat, 18 Feb 2023 13:15:56 -0800 Message-Id: <20230218211608.1630586-14-robdclark@gmail.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230218211608.1630586-1-robdclark@gmail.com> References: <20230218211608.1630586-1-robdclark@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1758205153530410121?= X-GMAIL-MSGID: =?utf-8?q?1758205153530410121?= From: Rob Clark Add a way for various userspace waits to signal urgency. Signed-off-by: Rob Clark --- drivers/gpu/drm/msm/msm_drv.c | 12 ++++++++---- drivers/gpu/drm/msm/msm_gem.c | 5 +++++ include/uapi/drm/msm_drm.h | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index be2a68f8e78d..b5af81a536f7 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -46,6 +46,7 @@ * - 1.8.0 - Add MSM_BO_CACHED_COHERENT for supported GPUs (a6xx) * - 1.9.0 - Add MSM_SUBMIT_FENCE_SN_IN * - 1.10.0 - Add MSM_SUBMIT_BO_NO_IMPLICIT + * - 1.11.0 - Add wait boost (MSM_WAIT_FENCE_BOOST, MSM_PREP_BOOST) */ #define MSM_VERSION_MAJOR 1 #define MSM_VERSION_MINOR 10 @@ -899,7 +900,7 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void *data, } static int wait_fence(struct msm_gpu_submitqueue *queue, uint32_t fence_id, - ktime_t timeout) + ktime_t timeout, uint32_t flags) { struct dma_fence *fence; int ret; @@ -929,6 +930,9 @@ static int wait_fence(struct msm_gpu_submitqueue *queue, uint32_t fence_id, if (!fence) return 0; + if (flags & MSM_WAIT_FENCE_BOOST) + dma_fence_set_deadline(fence, ktime_get()); + ret = dma_fence_wait_timeout(fence, true, timeout_to_jiffies(&timeout)); if (ret == 0) { ret = -ETIMEDOUT; @@ -949,8 +953,8 @@ static int msm_ioctl_wait_fence(struct drm_device *dev, void *data, struct msm_gpu_submitqueue *queue; int ret; - if (args->pad) { - DRM_ERROR("invalid pad: %08x\n", args->pad); + if (args->flags & ~MSM_WAIT_FENCE_FLAGS) { + DRM_ERROR("invalid flags: %08x\n", args->flags); return -EINVAL; } @@ -961,7 +965,7 @@ static int msm_ioctl_wait_fence(struct drm_device *dev, void *data, if (!queue) return -ENOENT; - ret = wait_fence(queue, args->fence, to_ktime(args->timeout)); + ret = wait_fence(queue, args->fence, to_ktime(args->timeout), args->flags); msm_submitqueue_put(queue); diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 1dee0d18abbb..dd4a0d773f6e 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c @@ -846,6 +846,11 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout) op & MSM_PREP_NOSYNC ? 0 : timeout_to_jiffies(timeout); long ret; + if (op & MSM_PREP_BOOST) { + dma_resv_set_deadline(obj->resv, dma_resv_usage_rw(write), + ktime_get()); + } + ret = dma_resv_wait_timeout(obj->resv, dma_resv_usage_rw(write), true, remain); if (ret == 0) diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index 329100016e7c..dbf0d6f43fa9 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -151,8 +151,13 @@ struct drm_msm_gem_info { #define MSM_PREP_READ 0x01 #define MSM_PREP_WRITE 0x02 #define MSM_PREP_NOSYNC 0x04 +#define MSM_PREP_BOOST 0x08 -#define MSM_PREP_FLAGS (MSM_PREP_READ | MSM_PREP_WRITE | MSM_PREP_NOSYNC) +#define MSM_PREP_FLAGS (MSM_PREP_READ | \ + MSM_PREP_WRITE | \ + MSM_PREP_NOSYNC | \ + MSM_PREP_BOOST | \ + 0) struct drm_msm_gem_cpu_prep { __u32 handle; /* in */ @@ -286,6 +291,11 @@ struct drm_msm_gem_submit { }; +#define MSM_WAIT_FENCE_BOOST 0x00000001 +#define MSM_WAIT_FENCE_FLAGS ( \ + MSM_WAIT_FENCE_BOOST | \ + 0) + /* The normal way to synchronize with the GPU is just to CPU_PREP on * a buffer if you need to access it from the CPU (other cmdstream * submission from same or other contexts, PAGE_FLIP ioctl, etc, all @@ -295,7 +305,7 @@ struct drm_msm_gem_submit { */ struct drm_msm_wait_fence { __u32 fence; /* in */ - __u32 pad; + __u32 flags; /* in, bitmask of MSM_WAIT_FENCE_x */ struct drm_msm_timespec timeout; /* in */ __u32 queueid; /* in, submitqueue id */ };