From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 20C2B360EC8 for ; Tue, 12 May 2026 11:50:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778586649; cv=none; b=Moy1a4DMIJn/8sM90cHvXrtibDZWVdtSOvsPzIuqmZznQMqT4E56UguKQS39FHpSSw6zD1nboAp9pJBEl7pnp6QDDCVd5k0QBnDlzxYaIakb7DScHgFnfiwLSSW+iit4ux1qdR8TWBOO0fz0w1ktserrIbBZVA+St/hmfS4MDS0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778586649; c=relaxed/simple; bh=5s9AyZU56idpcmF3s2TYPadfxaWaybAtmlJtq8dFaEw=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lG/JFvjJFZN8ZnSaV4vhXCX1tvW+wyCF25kQSX+Ac6EZq7jQKF1WXy4rvPnNZhdzVlr7bFUvXgeULrBXbOD3Wj5sGOrCEDa1xKQY8BhlbSLPvUUqskSKAr5FCWvkwk2TkyuYTG6R4DBYv+zM/I48vYgzfQ8kLZ3X9WcHVzNHdQ0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=YlAHk6rH; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="YlAHk6rH" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1778586646; bh=5s9AyZU56idpcmF3s2TYPadfxaWaybAtmlJtq8dFaEw=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=YlAHk6rHRp2Xp8pPVFQyMLag2hSI7lPJ+0uPdmWf034zs6hdpbczlTpMDUzmHytuE g+WXhfEgl0pW1AMSizdP8I311RcEU2vNnKfwtgcF1pVVuzHgySYQ1g8OL5MIPKTBiV SntHzMj6mlmkoivDsfqnCPA99YqmdUKJju4V4kocQKT8or8qwNR+set+NWpJSLXVlk R/2/PQUEwwHBJxJ7BOuN5OLgtR/fadGOx6Xml9hFE+/2ugcJ4KLvObFQHN2qRZpPlv Uq2VbOEwIHfhiIqhAmabrwSZO+O65Eh/H5S/PGBqUOEoDmda02It3TTQlhQkhlkqR8 PtWANiWZ7yYgg== Received: from fedora (unknown [100.64.0.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: bbrezillon) by bali.collaboradmins.com (Postfix) with ESMTPSA id 04C3117E12D3; Tue, 12 May 2026 13:50:45 +0200 (CEST) Date: Tue, 12 May 2026 13:50:41 +0200 From: Boris Brezillon To: Steven Price , Liviu Dudau Cc: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 11/11] drm/panthor: Process GPU events in IRQ context Message-ID: <20260512135041.7801aa88@fedora> In-Reply-To: <20260512-panthor-signal-from-irq-v2-11-95c614a739cb@collabora.com> References: <20260512-panthor-signal-from-irq-v2-0-95c614a739cb@collabora.com> <20260512-panthor-signal-from-irq-v2-11-95c614a739cb@collabora.com> Organization: Collabora X-Mailer: Claws Mail 4.4.0 (GTK 3.24.52; x86_64-redhat-linux-gnu) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Tue, 12 May 2026 13:37:41 +0200 Boris Brezillon wrote: > The current panthor_gpu_irq_handler() logic is already IRQ-safe > (no sleep or sleeping locks, spinlocks taken with irqsave in other > contexts, etc), so let's toggle the switch and make it an hard IRQ > handler. > > Signed-off-by: Boris Brezillon > --- > drivers/gpu/drm/panthor/panthor_gpu.c | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_gpu.c b/drivers/gpu/drm/panthor/panthor_gpu.c > index b9c51f8a051d..04c8f23baf3f 100644 > --- a/drivers/gpu/drm/panthor/panthor_gpu.c > +++ b/drivers/gpu/drm/panthor/panthor_gpu.c > @@ -86,10 +86,15 @@ static void panthor_gpu_l2_config_set(struct panthor_device *ptdev) > gpu_write(gpu->iomem, GPU_L2_CONFIG, l2_config); > } > > -static void panthor_gpu_irq_handler(struct panthor_irq *pirq, u32 status) > +static irqreturn_t panthor_gpu_irq_raw_handler(int irq, void *data) > { > + struct panthor_irq *pirq = data; > struct panthor_device *ptdev = pirq->ptdev; > struct panthor_gpu *gpu = ptdev->gpu; > + u32 status = gpu_read(gpu->irq.iomem, INT_STAT); > + > + if (!status) > + return IRQ_NONE; > Forgot to add the pirq state transition here: scoped_guard(spinlock_irqsave, &pirq->mask_lock) { if (pirq->state != PANTHOR_IRQ_STATE_ACTIVE) return IRQ_NONE; pirq->state = PANTHOR_IRQ_STATE_PROCESSING; } > gpu_write(gpu->irq.iomem, INT_CLEAR, status); > > @@ -115,11 +120,8 @@ static void panthor_gpu_irq_handler(struct panthor_irq *pirq, u32 status) > ptdev->gpu->pending_reqs &= ~status; > wake_up_all(&ptdev->gpu->reqs_acked); > } > -} > > -static irqreturn_t panthor_gpu_irq_threaded_handler(int irq, void *data) > -{ > - return panthor_irq_default_threaded_handler(data, panthor_gpu_irq_handler); and restore it here: scoped_guard(spinlock_irqsave, &pirq->mask_lock) { if (pirq->state == PANTHOR_IRQ_STATE_PROCESSING) pirq->state = PANTHOR_IRQ_STATE_ACTIVE; } > + return IRQ_HANDLED; > } > > /** > @@ -176,8 +178,7 @@ int panthor_gpu_init(struct panthor_device *ptdev) > ret = panthor_irq_request(ptdev, &ptdev->gpu->irq, irq, > GPU_INTERRUPTS_MASK, > ptdev->iomem + GPU_INT_BASE, "gpu", > - panthor_irq_default_raw_handler, > - panthor_gpu_irq_threaded_handler); > + panthor_gpu_irq_raw_handler, NULL); > if (ret) > return ret; > >