Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp323849yba; Thu, 18 Apr 2019 01:46:05 -0700 (PDT) X-Google-Smtp-Source: APXvYqyFm83owAaxOIAWwX1ZyatJbdxFyX4AsEcb5TaDxiNrUDIpw5pkY46SykPgYZbVeexMp2YH X-Received: by 2002:a65:5003:: with SMTP id f3mr32044209pgo.29.1555577165541; Thu, 18 Apr 2019 01:46:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555577165; cv=none; d=google.com; s=arc-20160816; b=0C/djXovUaoXzFIjdz9YtJzt/L9x9CnPx6V6cnT9skDxTt3YdAApqK2YMp8jDWC9aY 3YyJzxwdjxHR1GyWlWfMUuW9Eaz2A/HjggZKqr0SBTFTnvwxwlN5XeL10a9BFH7J6Xym QlPHewsKJEHaxl6TczRn+QZhdaXJKi9cA6Bi59fqDljc1ZF3ku9JIBa5I4sfeiYUQlPd wTzhtMeEs17aOUBStKaUDSehwqfyrhqH96/WAxPYjVvTjScfdPmPZLzgL8to82Q0YGhf 1BrhjIZpuAXuO0RrwfknplkOSVOx2qTt8EwbmVYYiCZPWSjGvfo6Mi+9yWMkpOIjU8lt A+tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=XaG+VmIuFzFcyeH04Vkt+dOmHujdLld/OhJ1u+Y9zcc=; b=ozcnT8/zwWCfP5VuVGuyXeL1TtVsLK8V2wAhW6++ZzBktiy1EOn5hsJHpozNMtGJNB jHlNKRi1mUT2JviPGsxUuI5HKMLTK95Un3o7Pu/TOPNkGGW9hPv4PxisWGLD5t62rebc gYRpDTwkf4vx/nmkXS4PSyLHZ16ROOGO1wu5KxiIzFtP/XDz2nUTkTLBJiV6Ex5ouqHb y0zAL7mIm1zWQ7V3/8XXLm9ET6onLXXKDj/S9Ewou/VBuubFLkw9xjBZg1kT6KPx31/W vBOF1b4SupngUsCj4Bqos9807Z55oMnUJUecQE4TrdoxMuTyWesSxEtMgX8A9mPLEpo8 YZAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="kHcVB/38"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g3si1449364plq.400.2019.04.18.01.45.49; Thu, 18 Apr 2019 01:46:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="kHcVB/38"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388305AbfDRInh (ORCPT + 99 others); Thu, 18 Apr 2019 04:43:37 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:42773 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388197AbfDRInh (ORCPT ); Thu, 18 Apr 2019 04:43:37 -0400 Received: by mail-wr1-f65.google.com with SMTP id g3so1899583wrx.9 for ; Thu, 18 Apr 2019 01:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=XaG+VmIuFzFcyeH04Vkt+dOmHujdLld/OhJ1u+Y9zcc=; b=kHcVB/38JpLU+vYPNimis8TXXS5FAWmQ8MKBiuQmWS8YQ8Z5jRue/GIBHUEC65BdO0 fIzHjto/uD8UAY74AVFihjrm8IWVULu4SeXMgFF6hOyY7kTUJYfX9RdecbHcRV6K8t6z HOEfIu8piiAv9nCTZaDTU9wkevPk4Yp4R2F2GKqEXIg0KA7qL5CdluL2ZRQ/l/KqOEde y14bs9iwXYKeleHVgTs0+opAvRymwlVXi366MvgzxnkaGfEUgYQJgsmLv/Sv9zabEHnu 7q8k9V+kCo3wmOmtnWAmqup/XApNKMDido8sE2st3UW+eC+dDI7zXr/ikEKe3TpkqIrR rGIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=XaG+VmIuFzFcyeH04Vkt+dOmHujdLld/OhJ1u+Y9zcc=; b=ewIEVlFiAkAAIKROCK7wuMO3YxTmqMdc4GA5hO/sYg4C7qP2qUmD3Z1TBDaDpIvANH Bral45FRXlYfmVziPIklAZkDF8KI3lYWxP+4HfpIHZ0Sfi4oMZZu9z3ybnI0HoVSZnM1 xWVdkPIGExXrhN6GSEfvVtVfkzbOEJr1wfNNJ85BU934N8s5RzyhsV5aXWPbJibpZVD3 MISovJ7qvFHfb4IaNv+8av66uzWV9YForseY9/55NA2EQeZ1J8cQCpBpIRnvECdH79Tm eQh0TLFEiYLkzxcLqwXxCNizQbRnMY5zXA5xQyEzeDHA8LHTa03wBl6jhujyYyYKfKm0 to/A== X-Gm-Message-State: APjAAAWycaC5EaL1vhYOXmb6sDjZFFenA9jAKmH4CiZltCIh5+qrUpMp AHfOpYBxm2AkYFjggHTKrwbiD7QQ X-Received: by 2002:a5d:4588:: with SMTP id p8mr1483240wrq.155.1555577015208; Thu, 18 Apr 2019 01:43:35 -0700 (PDT) Received: from cizrna.lan ([109.72.12.122]) by smtp.gmail.com with ESMTPSA id w14sm1767733wrr.16.2019.04.18.01.43.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Apr 2019 01:43:34 -0700 (PDT) From: Tomeu Vizoso To: linux-kernel@vger.kernel.org Cc: Tomeu Vizoso , Rob Herring , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Subject: [PATCH] drm/panfrost: Prevent concurrent resets Date: Thu, 18 Apr 2019 10:41:48 +0200 Message-Id: <20190418084305.45021-1-tomeu.vizoso@collabora.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If a job times out in slot 0 while a reset is performed because a job timed out in slot 1, the drm-sched core can get into a deadlock. Signed-off-by: Tomeu Vizoso --- drivers/gpu/drm/panfrost/panfrost_device.c | 1 + drivers/gpu/drm/panfrost/panfrost_device.h | 1 + drivers/gpu/drm/panfrost/panfrost_job.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/panfrost/panfrost_device.c index 91e8fb0f2b25..970f669c6d29 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -98,6 +98,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) struct resource *res; mutex_init(&pfdev->sched_lock); + mutex_init(&pfdev->reset_lock); INIT_LIST_HEAD(&pfdev->scheduled_jobs); spin_lock_init(&pfdev->hwaccess_lock); diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h index 1ba48d105763..56f452dfb490 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -78,6 +78,7 @@ struct panfrost_device { struct list_head scheduled_jobs; struct mutex sched_lock; + struct mutex reset_lock; struct { struct devfreq *devfreq; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c index 0a7ed04f7d52..a5716c8fe8b3 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -384,6 +384,8 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job) job_read(pfdev, JS_TAIL_LO(js)), sched_job); + mutex_lock(&pfdev->reset_lock); + for (i = 0; i < NUM_JOB_SLOTS; i++) drm_sched_stop(&pfdev->js->queue[i].sched); @@ -406,6 +408,8 @@ static void panfrost_job_timedout(struct drm_sched_job *sched_job) /* restart scheduler after GPU is usable again */ for (i = 0; i < NUM_JOB_SLOTS; i++) drm_sched_start(&pfdev->js->queue[i].sched, true); + + mutex_unlock(&pfdev->reset_lock); } static const struct drm_sched_backend_ops panfrost_sched_ops = { -- 2.20.1