From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 F19111D63C6 for ; Thu, 24 Jul 2025 03:56:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753329380; cv=none; b=qaBGVc993UqJFWZmdR4cwrxom6iNxTMZh1sHpNGZNN5kWbdiGBf6NqH47L8DTV3UwFwruNBEWZQWqyAzfiEX/xEveh9BF7IdWQe8/eAcFuKPYTouSlbRTVNF5oPQXZDNIcPacIJgSJCrssMUrhRop++Qct3Q1BlwK22HLpOMdmg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753329380; c=relaxed/simple; bh=P+zmOVhT4nhj8xIVUJEd5yZ8PqRNOngDaB8MacGq2q0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Lz6QpspK2bs5wHxsW1VlQn3hoJ1Zt5MLmaajaFYfoH4XuSzSMTIoHvfxQnmXxqpye1AOa3XUvwj6f6T4CyxDsyEzreYOXPS0xZFv+i0IZYIhBBTN2GePj6ArFdyIyZ5DYhh4GmBxFo69ACNNqKMgpWYdtz26G9/AjvhirurlbcI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iI+jzVEd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="iI+jzVEd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 51DBBC4CEED; Thu, 24 Jul 2025 03:56:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753329377; bh=P+zmOVhT4nhj8xIVUJEd5yZ8PqRNOngDaB8MacGq2q0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iI+jzVEdf9qUxpwXmi2KWyNyMT2OPrTEtFEp+BOkevxo8TbjDEfS3Y9VuLApZNaQl G4iA8KCgAMxZV+zvZIUktV/W5bAdqAzDP2ytoz1c7CVAhvLRye63rViWHcn/5nTRvC hbVfvOpReEso462bLo73yqYG7cDysGbvQVNWCz2TKzv8Lu888ADTUMRRIkOMUcc1HW PUNINltzXnPhEQp8jYychShupROEWWH4CpAvBAjZMB8b0OMeMUYaUbYa9OfitbpoX2 4PVUGoX0PKoECQ0/+Pnn1dEB3XQSgPvywYIvFcvdw3Wvwc4GBgebC6PtlI1YxhrkVH 6to5hRkQ+pvcA== From: Sasha Levin To: stable@vger.kernel.org Cc: Fabrice Gasnier , Sebastian Andrzej Siewior , Gatien Chevallier , Dmitry Torokhov , Sasha Levin Subject: [PATCH 6.12.y] Input: gpio-keys - fix a sleep while atomic with PREEMPT_RT Date: Wed, 23 Jul 2025 23:56:12 -0400 Message-Id: <20250724035612.1293761-1-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <2025062006-pristine-unfitted-7204@gregkh> References: <2025062006-pristine-unfitted-7204@gregkh> Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Fabrice Gasnier [ Upstream commit f4a8f561d08e39f7833d4a278ebfb12a41eef15f ] When enabling PREEMPT_RT, the gpio_keys_irq_timer() callback runs in hard irq context, but the input_event() takes a spin_lock, which isn't allowed there as it is converted to a rt_spin_lock(). [ 4054.289999] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48 [ 4054.290028] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/0 ... [ 4054.290195] __might_resched+0x13c/0x1f4 [ 4054.290209] rt_spin_lock+0x54/0x11c [ 4054.290219] input_event+0x48/0x80 [ 4054.290230] gpio_keys_irq_timer+0x4c/0x78 [ 4054.290243] __hrtimer_run_queues+0x1a4/0x438 [ 4054.290257] hrtimer_interrupt+0xe4/0x240 [ 4054.290269] arch_timer_handler_phys+0x2c/0x44 [ 4054.290283] handle_percpu_devid_irq+0x8c/0x14c [ 4054.290297] handle_irq_desc+0x40/0x58 [ 4054.290307] generic_handle_domain_irq+0x1c/0x28 [ 4054.290316] gic_handle_irq+0x44/0xcc Considering the gpio_keys_irq_isr() can run in any context, e.g. it can be threaded, it seems there's no point in requesting the timer isr to run in hard irq context. Relax the hrtimer not to use the hard context. Fixes: 019002f20cb5 ("Input: gpio-keys - use hrtimer for release timer") Suggested-by: Sebastian Andrzej Siewior Signed-off-by: Fabrice Gasnier Signed-off-by: Gatien Chevallier Link: https://lore.kernel.org/r/20250528-gpio_keys_preempt_rt-v2-1-3fc55a9c3619@foss.st.com Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov [ adjusted context ] Signed-off-by: Sasha Levin --- drivers/input/keyboard/gpio_keys.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c index 9514f577995fa..cd14017e7df62 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -488,7 +488,7 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id) if (bdata->release_delay) hrtimer_start(&bdata->release_timer, ms_to_ktime(bdata->release_delay), - HRTIMER_MODE_REL_HARD); + HRTIMER_MODE_REL); out: return IRQ_HANDLED; } @@ -633,7 +633,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev, bdata->release_delay = button->debounce_interval; hrtimer_init(&bdata->release_timer, - CLOCK_REALTIME, HRTIMER_MODE_REL_HARD); + CLOCK_REALTIME, HRTIMER_MODE_REL); bdata->release_timer.function = gpio_keys_irq_timer; isr = gpio_keys_irq_isr; -- 2.39.5