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 0FB961362 for ; Thu, 24 Jul 2025 04:17:52 +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=1753330673; cv=none; b=AnFxW470OJz6CFfmmzaJMFKuAdzeF1dODzKNViMFQrXSXo+ShWgTMSPhKDn78LADX2Q6UKb1qii5UHjIejqLOhBm4jiAtnSHZpOVA0QqkzAj3NsiML8XUDNJAik7rtYBYw2uG33yjF3fDAHpyGeqdySFZImgvOuYWuVYCMmZrzU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753330673; c=relaxed/simple; bh=rbuweX8lqkyyKixjIDvpnWoo5DAaq/TKp+ZeTJhjIis=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=StOIIBGDqFU48Ioit2IfkvRgRcZFN95QNAqXAtMWrzQ866XUa6BwVLTXa7c4OOiHfAT4BOpeKPH0lca5MBZ3uFeI3GeyAji55E1xkV3dA6JicxIwZEU6CtJ/2CdvxCFyPQiJE9ptmdGKCp7vNjh8RjO7T8LzT2qxtNP45A5V2wM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RQKjYnKY; 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="RQKjYnKY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7775DC4CEED; Thu, 24 Jul 2025 04:17:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1753330672; bh=rbuweX8lqkyyKixjIDvpnWoo5DAaq/TKp+ZeTJhjIis=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RQKjYnKYgTurEtqPQ7KGE/kQyiimAkPEyBg8DmHTU7yAVJjIZo6erftLqKnFbpZUh zUfWXG3aCvOPch3btpdeh6eoK68EuLkOOUsDKGJu11NLjFKKOyXeo3k8p1wBQkBseS w/l2KjqL6JyhHf6LHMWbBsvfbat+ToAn4Tfz8R0VUDHe9E5U1H6qQlX/4GdXm9sjjw DqXPqXxkdmYbqpVtKM0NMk9w1xrkPaZVvTbAeaVPMHZtlcPZJUc0FncptSOC8R7kUy KcHCrcBW3BxM+fyf2Bk7yul1mfXftNrFelyTgkznLx+bZc5nuZ4kXgzT/Rzoi+037M JZgwMNsD7mJMA== From: Sasha Levin To: stable@vger.kernel.org Cc: Fabrice Gasnier , Sebastian Andrzej Siewior , Gatien Chevallier , Dmitry Torokhov , Sasha Levin Subject: [PATCH 6.6.y] Input: gpio-keys - fix a sleep while atomic with PREEMPT_RT Date: Thu, 24 Jul 2025 00:17:48 -0400 Message-Id: <20250724041748.1298627-1-sashal@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <2025062006-onshore-stool-de98@gregkh> References: <2025062006-onshore-stool-de98@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 c5f4207fddce9..a34b9533d8f18 100644 --- a/drivers/input/keyboard/gpio_keys.c +++ b/drivers/input/keyboard/gpio_keys.c @@ -495,7 +495,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: spin_unlock_irqrestore(&bdata->lock, flags); return IRQ_HANDLED; @@ -632,7 +632,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