From patchwork Mon Oct 8 11:36:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10630447 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 95E67933 for ; Mon, 8 Oct 2018 11:36:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7CE4B289B3 for ; Mon, 8 Oct 2018 11:36:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6EB3828AFD; Mon, 8 Oct 2018 11:36:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5DABA289B3 for ; Mon, 8 Oct 2018 11:36:24 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E3B5989CF5; Mon, 8 Oct 2018 11:36:21 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wm1-x344.google.com (mail-wm1-x344.google.com [IPv6:2a00:1450:4864:20::344]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9003B89CF5 for ; Mon, 8 Oct 2018 11:36:20 +0000 (UTC) Received: by mail-wm1-x344.google.com with SMTP id y140-v6so8554316wmd.0 for ; Mon, 08 Oct 2018 04:36:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=COVEiPJ0FQpO+vTZDIQdfohFb4R3w3yGRPZgOpFpvOQ=; b=TJLo7btSX/RBlxe/lOEWEMj+vIT+9jqTU0vngqu4kfuPBuGlAoLOv2ud4doPUC0fb5 6IVXpiG0qX5/7eJz+ACEy4FSngfpGIGU4Gr6x+dqoGEVDUp0tBGK5Tzx9Mwtnb9zvG5z eI8TdtRokwHbgWaL+xEnNFe6LqZk35tYwKsTAjy5/nTKNh32idkrWMDJI1oi0OMbBQMk FS3e0qPl4gSFim7Vk+5yvktu+TOCY0kTPaITqkY8C72mnnij/pEsX+GdFS99duEFEEfG LiCne5aXZtPqfSQopZD8MeJWUYe/akj+jlknx1OTA0WCfgPismBUdqeKM8GsmkGFnJmB GNsg== X-Gm-Message-State: ABuFfoiw1NNj/up0NblJLki8QaauX/qvff9Vh6zYdcqZ1FH7eS5f4+kC Z2mhFxxfBfQhHBlMmaB+891WgbY5 X-Google-Smtp-Source: ACcGV62gUV/aaG816cjTSaDGrOm56eAWdNy+SIQnl1PdTQWNvsckyLB/f9nk5U0PU3DDsTGwdK9GIA== X-Received: by 2002:a1c:48d:: with SMTP id 135-v6mr14566631wme.102.1538998578930; Mon, 08 Oct 2018 04:36:18 -0700 (PDT) Received: from baker.fritz.box ([2a02:908:1257:4460:40ac:66fb:142:9fa1]) by smtp.gmail.com with ESMTPSA id u9-v6sm5928904wrr.66.2018.10.08.04.36.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Oct 2018 04:36:18 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: dri-devel@lists.freedesktop.org Subject: [PATCH 1/2] drm/sched: add drm_sched_start_timeout helper Date: Mon, 8 Oct 2018 13:36:16 +0200 Message-Id: <20181008113617.1295-1-christian.koenig@amd.com> X-Mailer: git-send-email 2.14.1 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Cleanup starting the timeout a bit. Signed-off-by: Christian König --- drivers/gpu/drm/scheduler/sched_main.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c index 4e8505d51795..bd7d11c47202 100644 --- a/drivers/gpu/drm/scheduler/sched_main.c +++ b/drivers/gpu/drm/scheduler/sched_main.c @@ -182,6 +182,20 @@ bool drm_sched_dependency_optimized(struct dma_fence* fence, } EXPORT_SYMBOL(drm_sched_dependency_optimized); +/** + * drm_sched_start_timeout - start timeout for reset worker + * + * @sched: scheduler instance to start the worker for + * + * Start the timeout for the given scheduler. + */ +static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched) +{ + if (sched->timeout != MAX_SCHEDULE_TIMEOUT && + !list_empty(&sched->ring_mirror_list)) + schedule_delayed_work(&sched->work_tdr, sched->timeout); +} + /* job_finish is called after hw fence signaled */ static void drm_sched_job_finish(struct work_struct *work) @@ -203,9 +217,7 @@ static void drm_sched_job_finish(struct work_struct *work) /* remove job from ring_mirror_list */ list_del(&s_job->node); /* queue TDR for next job */ - if (sched->timeout != MAX_SCHEDULE_TIMEOUT && - !list_empty(&sched->ring_mirror_list)) - schedule_delayed_work(&sched->work_tdr, sched->timeout); + drm_sched_start_timeout(sched); spin_unlock(&sched->job_list_lock); dma_fence_put(&s_job->s_fence->finished); @@ -229,10 +241,7 @@ static void drm_sched_job_begin(struct drm_sched_job *s_job) spin_lock(&sched->job_list_lock); list_add_tail(&s_job->node, &sched->ring_mirror_list); - if (sched->timeout != MAX_SCHEDULE_TIMEOUT && - list_first_entry_or_null(&sched->ring_mirror_list, - struct drm_sched_job, node) == s_job) - schedule_delayed_work(&sched->work_tdr, sched->timeout); + drm_sched_start_timeout(sched); spin_unlock(&sched->job_list_lock); } @@ -313,11 +322,6 @@ void drm_sched_job_recovery(struct drm_gpu_scheduler *sched) int r; spin_lock(&sched->job_list_lock); - s_job = list_first_entry_or_null(&sched->ring_mirror_list, - struct drm_sched_job, node); - if (s_job && sched->timeout != MAX_SCHEDULE_TIMEOUT) - schedule_delayed_work(&sched->work_tdr, sched->timeout); - list_for_each_entry_safe(s_job, tmp, &sched->ring_mirror_list, node) { struct drm_sched_fence *s_fence = s_job->s_fence; struct dma_fence *fence; @@ -350,6 +354,7 @@ void drm_sched_job_recovery(struct drm_gpu_scheduler *sched) } spin_lock(&sched->job_list_lock); } + drm_sched_start_timeout(sched); spin_unlock(&sched->job_list_lock); } EXPORT_SYMBOL(drm_sched_job_recovery); From patchwork Mon Oct 8 11:36:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Christian_K=C3=B6nig?= X-Patchwork-Id: 10630449 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DA17914DB for ; Mon, 8 Oct 2018 11:36:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C8802289B3 for ; Mon, 8 Oct 2018 11:36:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BC5E628AFD; Mon, 8 Oct 2018 11:36:26 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8025D289B3 for ; Mon, 8 Oct 2018 11:36:26 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BEBD66E092; Mon, 8 Oct 2018 11:36:22 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by gabe.freedesktop.org (Postfix) with ESMTPS id 504AF89CF5 for ; Mon, 8 Oct 2018 11:36:21 +0000 (UTC) Received: by mail-wr1-x441.google.com with SMTP id e4-v6so20474605wrs.0 for ; Mon, 08 Oct 2018 04:36:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H1Hp4LDpn3QyA+NaI6SwuCiCxr6Tj4qeSeGJ6k++vNs=; b=aW+YjOIbpatXnVYhUrPYAW8acPa+B3jL6donZtGCe+m2zIKFgiptWmDVbkOJLFp32d oKKp92NS5jDO8qosm0f6tMu+RXsvC/xeibJr7RmQJF4+EosXde8o6bJme9O3rXzkpNmE Wb6jDNvKVr3W3mvnOzgKMSUEPznkrKywJDULnNnssJzh90b6pA9DEudnceARUWfwpIfV t+dsz0OHZOOeQYuJs3LlFj18KNas51JH+KlE9Lhbb4bvf6dkjtVTT1IPGEZQ9pmdGFoP qHkmjkEnHJOzLWf1CRYpuUuWgmNaPQy2IOy2qCXCGR3teHMJdylYFzWckKDsq8b8utZ5 W0Dg== X-Gm-Message-State: ABuFfohRXHyyUxGYdIaXQELHPwfCH+DPT4dCD+4vn8Ex0e7m8qnnHU9w QibGQebFap11cCudwrLcngDIuU/J X-Google-Smtp-Source: ACcGV61LswZ0aqeqUi2Lf+5f8nSQciVuHvK4x4hoql40vT+k4ol92W23i7Eds8ZJ1qcBXV9ikoDi8w== X-Received: by 2002:adf:8347:: with SMTP id 65-v6mr16127703wrd.264.1538998579792; Mon, 08 Oct 2018 04:36:19 -0700 (PDT) Received: from baker.fritz.box ([2a02:908:1257:4460:40ac:66fb:142:9fa1]) by smtp.gmail.com with ESMTPSA id u9-v6sm5928904wrr.66.2018.10.08.04.36.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Oct 2018 04:36:19 -0700 (PDT) From: " =?utf-8?q?Christian_K=C3=B6nig?= " X-Google-Original-From: =?utf-8?q?Christian_K=C3=B6nig?= To: dri-devel@lists.freedesktop.org Subject: [PATCH 2/2] drm/sched: fix timeout handling Date: Mon, 8 Oct 2018 13:36:17 +0200 Message-Id: <20181008113617.1295-2-christian.koenig@amd.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20181008113617.1295-1-christian.koenig@amd.com> References: <20181008113617.1295-1-christian.koenig@amd.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP We need to make sure that we don't race between job completion and timeout. Signed-off-by: Christian König --- drivers/gpu/drm/scheduler/sched_main.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c index bd7d11c47202..ad3c57c9fd21 100644 --- a/drivers/gpu/drm/scheduler/sched_main.c +++ b/drivers/gpu/drm/scheduler/sched_main.c @@ -248,14 +248,40 @@ static void drm_sched_job_begin(struct drm_sched_job *s_job) static void drm_sched_job_timedout(struct work_struct *work) { struct drm_gpu_scheduler *sched; + struct drm_sched_fence *fence; struct drm_sched_job *job; + int r; sched = container_of(work, struct drm_gpu_scheduler, work_tdr.work); + + spin_lock(&sched->job_list_lock); + list_for_each_entry_reverse(job, &sched->ring_mirror_list, node) { + fence = job->s_fence; + if (!dma_fence_remove_callback(fence->parent, &fence->cb)) + goto already_signaled; + } + job = list_first_entry_or_null(&sched->ring_mirror_list, struct drm_sched_job, node); + spin_unlock(&sched->job_list_lock); if (job) - job->sched->ops->timedout_job(job); + sched->ops->timedout_job(job); + + spin_lock(&sched->job_list_lock); + list_for_each_entry(job, &sched->ring_mirror_list, node) { + fence = job->s_fence; + if (!fence->parent || !list_empty(&fence->cb.node)) + continue; + + r = dma_fence_add_callback(fence->parent, &fence->cb, + drm_sched_process_job); + if (r) +already_signaled: + drm_sched_process_job(fence->parent, &fence->cb); + + } + spin_unlock(&sched->job_list_lock); } /**