From patchwork Fri Apr 5 15:29:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erico Nunes X-Patchwork-Id: 13619191 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CAF09C67861 for ; Fri, 5 Apr 2024 15:31:31 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2CC03113C66; Fri, 5 Apr 2024 15:31:30 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="HpkYKsI/"; dkim-atps=neutral Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9A971113C63; Fri, 5 Apr 2024 15:31:27 +0000 (UTC) Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-516c403c2e4so2224130e87.0; Fri, 05 Apr 2024 08:31:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712331086; x=1712935886; darn=lists.freedesktop.org; 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=GLmSQbomn7jjoFYvGpaYKKjdNIRUVaXuPm21MTZkhWI=; b=HpkYKsI/FnyySF5LmyobVbDnPcZx5cKeOThqnnahc0iZa05EEVslhFqbug0gLAN/I1 dIt4OG5skT4zokJdu/l7GGDu6nWHcRa8q/2i/X62/Xm2TaMA6r/+d7HOHSB9aS04fyjX oDI50ays/uOybj+lO3T1I6BbMsn84raEldalGIiKeFT/o2/IRGzqmEWczeA8zrYmcTei vMDFtBPBoAKlx7NOp738BI9Q9dJpdJ41WiDCdlfhh4jwKslYN02uzlfpJROhJiviCFxD 7C/o5UbpIi2zwhI4w/lNReU4Hxl3ToFMdazvs5GsqkfV683fsqnB0W8sQHZvCrghjuRD cd4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712331086; x=1712935886; 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=GLmSQbomn7jjoFYvGpaYKKjdNIRUVaXuPm21MTZkhWI=; b=vCu6Cl9TCtZ5VWkztU73zNGzxS23BxQOjZN41yIf2gP6Aep7NWKxEA0W63/UIa8ioR zXURXIY0h+hiu2R8QZF9MxYkmgkRFwgLeH2Bu+3PXlXxOQf/cFCQjJkmRuhyJ8RWJ2S2 a9UIrvnoRMXEhX1elEe63kOO9+VOEB2E9HWCpH7T+lPMQGu+1pOoKbgLOGKLobFvwtnW dkEK4ijrxeM5v/WVhWvaerNCwEBZ3RN1FxmOnlCpAVCVTBEY8Z+JzJvJNEybbM+eIPc1 y2gg7+Sq7JcKk7qBm8Sq8zpauy0ufRDNjrzorZxYpJoDtqku4sqv3It0QwahJV2oZWmc 1LVA== X-Forwarded-Encrypted: i=1; AJvYcCWI5j6YNzN7T0pK2pwBultgm0ZbX+UTslrX+qSmq9hWj1FHS1TXnOv4Vylq3ddaC+94o3j/bXhwyCnjr1tXf+2TOi9Z0HbuBfKXODXe4cLxbP8WR1QUh3ZnZlbhTzI39zyQ+A+r69nFATuUDw== X-Gm-Message-State: AOJu0YzOquVI0VOREQN2uKOCN+sPuckAEWlIe/ccz21dOgnixheYI/Vb QNRNE7uEAXbMdUR+Ft/kAT781ReuDyIFCbwDXMgTf3A9sKmrdPt+S87CcL1X35I= X-Google-Smtp-Source: AGHT+IE7RgZin2OZ+qw13032XMFBtJshqJC/13QOVSjiQyPWaNMLxo/xWtEHTWGKxvCq6iMC0ubYRQ== X-Received: by 2002:a05:6402:3716:b0:56d:c757:9379 with SMTP id ek22-20020a056402371600b0056dc7579379mr3103612edb.15.1712331064035; Fri, 05 Apr 2024 08:31:04 -0700 (PDT) Received: from mosaic.enunes.eu (ip-78-45-66-209.bb.vodafone.cz. [78.45.66.209]) by smtp.gmail.com with ESMTPSA id ca19-20020aa7cd73000000b0056dfda8eef3sm906752edb.54.2024.04.05.08.31.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 08:31:03 -0700 (PDT) From: Erico Nunes To: Qiang Yu , anarsoul@gmail.com, dri-devel@lists.freedesktop.org, lima@lists.freedesktop.org Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , christian.koenig@amd.com, megi@xff.cz, linux-kernel@vger.kernel.org, Erico Nunes Subject: [PATCH v2 1/3] drm/lima: add mask irq callback to gp and pp Date: Fri, 5 Apr 2024 17:29:49 +0200 Message-ID: <20240405152951.1531555-2-nunes.erico@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240405152951.1531555-1-nunes.erico@gmail.com> References: <20240405152951.1531555-1-nunes.erico@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" This is needed because we want to reset those devices in device-agnostic code such as lima_sched. In particular, masking irqs will be useful before a hard reset to prevent race conditions. Signed-off-by: Erico Nunes --- drivers/gpu/drm/lima/lima_bcast.c | 12 ++++++++++++ drivers/gpu/drm/lima/lima_bcast.h | 3 +++ drivers/gpu/drm/lima/lima_gp.c | 8 ++++++++ drivers/gpu/drm/lima/lima_pp.c | 18 ++++++++++++++++++ drivers/gpu/drm/lima/lima_sched.h | 1 + 5 files changed, 42 insertions(+) diff --git a/drivers/gpu/drm/lima/lima_bcast.c b/drivers/gpu/drm/lima/lima_bcast.c index fbc43f243c54..6d000504e1a4 100644 --- a/drivers/gpu/drm/lima/lima_bcast.c +++ b/drivers/gpu/drm/lima/lima_bcast.c @@ -43,6 +43,18 @@ void lima_bcast_suspend(struct lima_ip *ip) } +int lima_bcast_mask_irq(struct lima_ip *ip) +{ + bcast_write(LIMA_BCAST_BROADCAST_MASK, 0); + bcast_write(LIMA_BCAST_INTERRUPT_MASK, 0); + return 0; +} + +int lima_bcast_reset(struct lima_ip *ip) +{ + return lima_bcast_hw_init(ip); +} + int lima_bcast_init(struct lima_ip *ip) { int i; diff --git a/drivers/gpu/drm/lima/lima_bcast.h b/drivers/gpu/drm/lima/lima_bcast.h index 465ee587bceb..cd08841e4787 100644 --- a/drivers/gpu/drm/lima/lima_bcast.h +++ b/drivers/gpu/drm/lima/lima_bcast.h @@ -13,4 +13,7 @@ void lima_bcast_fini(struct lima_ip *ip); void lima_bcast_enable(struct lima_device *dev, int num_pp); +int lima_bcast_mask_irq(struct lima_ip *ip); +int lima_bcast_reset(struct lima_ip *ip); + #endif diff --git a/drivers/gpu/drm/lima/lima_gp.c b/drivers/gpu/drm/lima/lima_gp.c index 6b354e2fb61d..e15295071533 100644 --- a/drivers/gpu/drm/lima/lima_gp.c +++ b/drivers/gpu/drm/lima/lima_gp.c @@ -233,6 +233,13 @@ static void lima_gp_task_mmu_error(struct lima_sched_pipe *pipe) lima_sched_pipe_task_done(pipe); } +static void lima_gp_task_mask_irq(struct lima_sched_pipe *pipe) +{ + struct lima_ip *ip = pipe->processor[0]; + + gp_write(LIMA_GP_INT_MASK, 0); +} + static int lima_gp_task_recover(struct lima_sched_pipe *pipe) { struct lima_ip *ip = pipe->processor[0]; @@ -365,6 +372,7 @@ int lima_gp_pipe_init(struct lima_device *dev) pipe->task_error = lima_gp_task_error; pipe->task_mmu_error = lima_gp_task_mmu_error; pipe->task_recover = lima_gp_task_recover; + pipe->task_mask_irq = lima_gp_task_mask_irq; return 0; } diff --git a/drivers/gpu/drm/lima/lima_pp.c b/drivers/gpu/drm/lima/lima_pp.c index d0d2db0ef1ce..a4a2ffe6527c 100644 --- a/drivers/gpu/drm/lima/lima_pp.c +++ b/drivers/gpu/drm/lima/lima_pp.c @@ -429,6 +429,9 @@ static void lima_pp_task_error(struct lima_sched_pipe *pipe) lima_pp_hard_reset(ip); } + + if (pipe->bcast_processor) + lima_bcast_reset(pipe->bcast_processor); } static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe) @@ -437,6 +440,20 @@ static void lima_pp_task_mmu_error(struct lima_sched_pipe *pipe) lima_sched_pipe_task_done(pipe); } +static void lima_pp_task_mask_irq(struct lima_sched_pipe *pipe) +{ + int i; + + for (i = 0; i < pipe->num_processor; i++) { + struct lima_ip *ip = pipe->processor[i]; + + pp_write(LIMA_PP_INT_MASK, 0); + } + + if (pipe->bcast_processor) + lima_bcast_mask_irq(pipe->bcast_processor); +} + static struct kmem_cache *lima_pp_task_slab; static int lima_pp_task_slab_refcnt; @@ -468,6 +485,7 @@ int lima_pp_pipe_init(struct lima_device *dev) pipe->task_fini = lima_pp_task_fini; pipe->task_error = lima_pp_task_error; pipe->task_mmu_error = lima_pp_task_mmu_error; + pipe->task_mask_irq = lima_pp_task_mask_irq; return 0; } diff --git a/drivers/gpu/drm/lima/lima_sched.h b/drivers/gpu/drm/lima/lima_sched.h index 6bd4f3b70109..85b23ba901d5 100644 --- a/drivers/gpu/drm/lima/lima_sched.h +++ b/drivers/gpu/drm/lima/lima_sched.h @@ -80,6 +80,7 @@ struct lima_sched_pipe { void (*task_error)(struct lima_sched_pipe *pipe); void (*task_mmu_error)(struct lima_sched_pipe *pipe); int (*task_recover)(struct lima_sched_pipe *pipe); + void (*task_mask_irq)(struct lima_sched_pipe *pipe); struct work_struct recover_work; }; From patchwork Fri Apr 5 15:29:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erico Nunes X-Patchwork-Id: 13619189 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 582BAC67861 for ; Fri, 5 Apr 2024 15:31:12 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2B2C4113C5C; Fri, 5 Apr 2024 15:31:11 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="cNDgW0nt"; dkim-atps=neutral Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 880A2113C5C; Fri, 5 Apr 2024 15:31:07 +0000 (UTC) Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-56e2b41187aso1852581a12.1; Fri, 05 Apr 2024 08:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712331065; x=1712935865; darn=lists.freedesktop.org; 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=3Wc7eRrLLTaY9o1kesXYpNbXIiaQ79me6bUkH9C+N8s=; b=cNDgW0ntr5yYnSotmwrPbsz6qlmjf4J9aF6N7vBmaw6pcjyThWCn3gwW4PtuFaHqWY HIA1f/QmYgsnLsYM1w6iMGEyEn061yQFsPs9cQGRM9uJJ0KAyf8FKz+/yHMSHhZ062cv jD5dccq38m/7IOnJ4db1kYYVDE8plGB9rs9Hwr3w88CmpA7+qc1nJy3Fx2/dJ65Ydqxl 8qbaoXCJuW1PfSHQA3N3XZwIR1fH24Za+TKafKjslpbf7mqA+OsXbj9z7zDRglUnO4Oo o97J1yoyviyHB2N4g+Ff1Dto1+xwctNbDxbL/E7U9K+N3b4rfHyzJUzoZFvJY6U8ujWg BS1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712331065; x=1712935865; 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=3Wc7eRrLLTaY9o1kesXYpNbXIiaQ79me6bUkH9C+N8s=; b=tKuugIWLDmosG5+cGyXtelDHSfRZK6/3B8H7ZFlQ2FzNEiiEtNOhNmR74CaXQJ0M9W sn4cADMBzKgaCaj1ln2yn8keGkc+LA25NOwI4o1mINX0gtyr8ln+CB50GmSPtNdGwmYU LWKOVIfaLM2VV63qtqDiFyc+wCE/kaTjLABq7j6q0IjREi4jyzUuJd0GLz01gCb6Ieud 4nbpaix2xvG59aC3YHzj+gBbGrqUjdqrbaKP4IWv0XEuMjzLTbf2bDeKy46UhA0vQpYZ Utmw/8/o67zGXmHbTO2jHw9tSabMOdbkE2rsXQYjW+e0UYT34ruBHWRfYIbhOfbX/Bar IjCw== X-Forwarded-Encrypted: i=1; AJvYcCVr4PGi9wgUMCebXmvFemxwQuJfH7VGMvDzsxiTAVyKgTX1nUYTY3vr7mx6MYMnD6O3xLgrhm06S6QeHue6Yh0yiriLyFhXHaGFFl0JO7QfT6Yf5lXizOHXaZcziQggY8mHPzI7x/S4JiNbjA== X-Gm-Message-State: AOJu0YxqQplEgkMBWr59l29oebkdA/arc0G/Ok6ruNM+3g+tE5qmr/E8 E8isKXyvoxsM86Dol1yWIuy8IJOAfQq6P+TkZcdwpF9Amq7kOlSr X-Google-Smtp-Source: AGHT+IG8XRGLoAvJSk3V6tIUxHh1MIP1Ubq65h4+cLa/zgO/WLETmMWp1Z1DJ/2HAU/3sW4nJR2XQw== X-Received: by 2002:a05:6402:e81:b0:56c:292f:84da with SMTP id h1-20020a0564020e8100b0056c292f84damr2264828eda.17.1712331065319; Fri, 05 Apr 2024 08:31:05 -0700 (PDT) Received: from mosaic.enunes.eu (ip-78-45-66-209.bb.vodafone.cz. [78.45.66.209]) by smtp.gmail.com with ESMTPSA id ca19-20020aa7cd73000000b0056dfda8eef3sm906752edb.54.2024.04.05.08.31.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 08:31:04 -0700 (PDT) From: Erico Nunes To: Qiang Yu , anarsoul@gmail.com, dri-devel@lists.freedesktop.org, lima@lists.freedesktop.org Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , christian.koenig@amd.com, megi@xff.cz, linux-kernel@vger.kernel.org, Erico Nunes Subject: [PATCH v2 2/3] drm/lima: include pp bcast irq in timeout handler check Date: Fri, 5 Apr 2024 17:29:50 +0200 Message-ID: <20240405152951.1531555-3-nunes.erico@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240405152951.1531555-1-nunes.erico@gmail.com> References: <20240405152951.1531555-1-nunes.erico@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" In commit 53cb55b20208 ("drm/lima: handle spurious timeouts due to high irq latency") a check was added to detect an unexpectedly high interrupt latency timeout. With further investigation it was noted that on Mali-450 the pp bcast irq may also be a trigger of race conditions against the timeout handler, so add it to this check too. Signed-off-by: Erico Nunes --- drivers/gpu/drm/lima/lima_sched.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c index 00b19adfc888..66841503a618 100644 --- a/drivers/gpu/drm/lima/lima_sched.c +++ b/drivers/gpu/drm/lima/lima_sched.c @@ -422,6 +422,8 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *job */ for (i = 0; i < pipe->num_processor; i++) synchronize_irq(pipe->processor[i]->irq); + if (pipe->bcast_processor) + synchronize_irq(pipe->bcast_processor->irq); if (dma_fence_is_signaled(task->fence)) { DRM_WARN("%s unexpectedly high interrupt latency\n", lima_ip_name(ip)); From patchwork Fri Apr 5 15:29:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Erico Nunes X-Patchwork-Id: 13619190 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 96AF2CD11C2 for ; Fri, 5 Apr 2024 15:31:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6EC1E113C62; Fri, 5 Apr 2024 15:31:12 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BxlsXW+U"; dkim-atps=neutral Received: from mail-ed1-f52.google.com (mail-ed1-f52.google.com [209.85.208.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 08631113C60; Fri, 5 Apr 2024 15:31:08 +0000 (UTC) Received: by mail-ed1-f52.google.com with SMTP id 4fb4d7f45d1cf-56c1922096cso2791338a12.0; Fri, 05 Apr 2024 08:31:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712331066; x=1712935866; darn=lists.freedesktop.org; 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=f26+JW8g/Mxdh9BcUQdPk6EFgK15mePlKBpnnLhSmdE=; b=BxlsXW+UHBjUnNfBGE8/wWF+59d9ZTiOo9Nh44j9qVu9xN0MWv2gTZ3ZmAU5wkzxXp TluThNgZX6zD0wSYyhVsBtZmqbmnc/iYv0i1KeGlcu5NZYbncA9iigN0GNTx7QQ0KwK0 nqo4RRlHzXOU3DkjdN4QsevxSfqG5l0qzEFTIOB4s77xGzlWRK9etnVdb1USGSfluU9d ixcp+sFnqWsHVHxtmIAjHwttWLiJ/+4W68hZ6FdeOdKO+xVcYWaI9FSxf6sA5jPQfE8X VNxNgc+sJ4GPCtLKNcW5kFY2nczVaeJs8QpMIvrScnfhRXu5GPEgQiCiOtN29EF1OSrG qoUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712331066; x=1712935866; 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=f26+JW8g/Mxdh9BcUQdPk6EFgK15mePlKBpnnLhSmdE=; b=Sa9cCULCg7k6YcMRb6HTHOQ+CDyeBSlsQUvcRGngQOthkVXHEABZWiSxSwwJiEtOd7 /xrCKVCeunU7AaT1me2QlBgw/Tc/5p0iVwoFhSpqy7A3gbV4Bb7XRSyEDhLMFcMxmCd0 Y4cMpl/WNaWpEzHEB2OAcAev3mNfVu0/dhEOyRXa+UGKUQM/iXStKvNJJshU5O1N+cCs 32nnlBNXal2CMiHontjkUMIpwvJHB31T7d0DrCE/eJDgsO8BfXj4PowvunksjmhRtS1x 4qH6gh5pb1P1RO+vhUIgB2BPfCQOKGmHdK1N1eNoaFf77E5XStH0Cj8Qi33ffrFtglok i+Vg== X-Forwarded-Encrypted: i=1; AJvYcCWJt4xcxK6Um9dMgRP3Wdsi7o6ywQpjgBjezgEIfRANPCadfqHGkI41ia5Yg/zGPs9DK3cerNNQjGMbzvif7qFMTOgEEF5qXuJm5uvWZv1Aq8BcLy2ItqTWQnq4brcH++U4GGrsgNIecelGNQ== X-Gm-Message-State: AOJu0YwV6kcOkUMybkveJ25KD/5zrKk002I4/7chV69NaZbcwJFHlMmW Vjj/Btimin2T0quEZ9cRA4CgLNGPCBrRluvB+DJfVubAoCCQPl27 X-Google-Smtp-Source: AGHT+IEOoVbeSJ/OSUmQPcHN5mMxTwHjjaoROo5lfs6LhyW4u0ipSb8oGcAGiW5kwuMmalkC8ave+w== X-Received: by 2002:a50:f60b:0:b0:56c:3feb:8898 with SMTP id c11-20020a50f60b000000b0056c3feb8898mr1359874edn.3.1712331066460; Fri, 05 Apr 2024 08:31:06 -0700 (PDT) Received: from mosaic.enunes.eu (ip-78-45-66-209.bb.vodafone.cz. [78.45.66.209]) by smtp.gmail.com with ESMTPSA id ca19-20020aa7cd73000000b0056dfda8eef3sm906752edb.54.2024.04.05.08.31.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 08:31:05 -0700 (PDT) From: Erico Nunes To: Qiang Yu , anarsoul@gmail.com, dri-devel@lists.freedesktop.org, lima@lists.freedesktop.org Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , christian.koenig@amd.com, megi@xff.cz, linux-kernel@vger.kernel.org, Erico Nunes Subject: [PATCH v2 3/3] drm/lima: mask irqs in timeout path before hard reset Date: Fri, 5 Apr 2024 17:29:51 +0200 Message-ID: <20240405152951.1531555-4-nunes.erico@gmail.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240405152951.1531555-1-nunes.erico@gmail.com> References: <20240405152951.1531555-1-nunes.erico@gmail.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 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" There is a race condition in which a rendering job might take just long enough to trigger the drm sched job timeout handler but also still complete before the hard reset is done by the timeout handler. This runs into race conditions not expected by the timeout handler. In some very specific cases it currently may result in a refcount imbalance on lima_pm_idle, with a stack dump such as: [10136.669170] WARNING: CPU: 0 PID: 0 at drivers/gpu/drm/lima/lima_devfreq.c:205 lima_devfreq_record_idle+0xa0/0xb0 ... [10136.669459] pc : lima_devfreq_record_idle+0xa0/0xb0 ... [10136.669628] Call trace: [10136.669634] lima_devfreq_record_idle+0xa0/0xb0 [10136.669646] lima_sched_pipe_task_done+0x5c/0xb0 [10136.669656] lima_gp_irq_handler+0xa8/0x120 [10136.669666] __handle_irq_event_percpu+0x48/0x160 [10136.669679] handle_irq_event+0x4c/0xc0 We can prevent that race condition entirely by masking the irqs at the beginning of the timeout handler, at which point we give up on waiting for that job entirely. The irqs will be enabled again at the next hard reset which is already done as a recovery by the timeout handler. Signed-off-by: Erico Nunes Reviewed-by: Qiang Yu --- drivers/gpu/drm/lima/lima_sched.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c index 66841503a618..bbf3f8feab94 100644 --- a/drivers/gpu/drm/lima/lima_sched.c +++ b/drivers/gpu/drm/lima/lima_sched.c @@ -430,6 +430,13 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *job return DRM_GPU_SCHED_STAT_NOMINAL; } + /* + * The task might still finish while this timeout handler runs. + * To prevent a race condition on its completion, mask all irqs + * on the running core until the next hard reset completes. + */ + pipe->task_mask_irq(pipe); + if (!pipe->error) DRM_ERROR("%s job timeout\n", lima_ip_name(ip));