From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FD0D1F12F5 for ; Tue, 7 Jan 2025 09:42:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736242926; cv=none; b=t3RuIKnFBxJGrZ96wfoILNYtnp5WF6pHH4K30eKAiXf5/+C11cDxXgQ6Ci3l1kehVk5VxqHonXsawfgI73iVVcQ0BFLAFzb1ZvWCHoPSKvQtun7TImw9Y5MS0UNFtp++Jlwzr6tidPa/rOwIAACGVmUarCGKJSmBZuPPR85bU1o= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736242926; c=relaxed/simple; bh=C9osobJ+glLvztMOkA0nRBqKdy3Bya2O9HxFmGRk/hc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kL5nsi52qlacEV2YqElR0zM62FxTthP8ZXCSxOvB2O1TRC6tV+QabQtyshrRWpWVBWM9YFaxje8p2ScvdJJO+Lah52Yqs/gdAPqMln3m1ij6ls4P5F5nl2eHJFdNzjl33816cyPi0NATpUbnh8atzjXJHw++qtzKgoiK2SP/V88= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=wqfMn9Cp; arc=none smtp.client-ip=209.85.208.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="wqfMn9Cp" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5d3d479b1e6so21973711a12.2 for ; Tue, 07 Jan 2025 01:42:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1736242922; x=1736847722; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=33vNghdTGkjvHLzGCYW2qoDNw0mlPHElmOb2schp32s=; b=wqfMn9Cp/2+EBrAQMicY5s32J0DtH34pOukUYescHfDH3STF0A6hd5sApzjwc4OLgt HTzQM8g/yRT1uoqS2jbEPZDudtd8mznoGt5OJFbViXBpECR/wedLjc5Ol/rt7Kr+pocC SVs6dPZrRUqeccLhnNH6LRM6l70oDgQCd6By8HOmZ7KJObXNGTwCPaNn9ZS4USfJo/7l ji57jdU7g0c1nkCbOFnM0g24eXIZCTi8sWVeRGgXQDnEreJIqgq1iazKbS1Lmiap3Bpa DpdmoqW03CH1gDOobnDv5rtMtStlb+cRj6VYrA7bi8/LBFTdnaL4vbpLMyjM4V8Zy47H 3TCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736242922; x=1736847722; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=33vNghdTGkjvHLzGCYW2qoDNw0mlPHElmOb2schp32s=; b=dhcFKqy/70yBV7CjqnzvvCY0QBwVqt3fpo33yR6l7OJEmiLgTACasMVYdY8CoRq6EM Yosnkf7wJQPc8EHCmRX/QyfDenTVCE5HlOcAygzeyAkJFbTA3VaRrkyXSeGmF/wWWezT sQapQxLUommG7+fVsk5bsgRgEUMJ6J8Jpb+emn6+ZayPT/uEHvO8wf1d6QU4DxdHokKo 6T2yjckbtDklN+Ko05OpaM8U7SJ3FsUybeBSERoasgmNwZhHiJOJRgYxgB3eoswgtN5q lv5+OzrTpUJxME6G/u3hrsghdabGZ45swz71+HjXTWHOZ+Em4iusflvIsRpgRwg8NRRl Eylg== X-Forwarded-Encrypted: i=1; AJvYcCXK+EXsx3mRfypeS0IL5/kufCyDmyQDNVCfPr2BwB4i0cHHu1Q1qe+2vUizhTvVBQsvFQjvChPxf9QUWlM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+LhnCRlgj5DyS+UV84halE14y6/8MIj5G3nFot6Q70Pj/bvdL LN9tT2+RR4jzwdNtLrJ0Q1axJPyOo2E1+cLqDwC5h2oslwNBF8CXS1GkCJ2xkyM= X-Gm-Gg: ASbGncsy0iBTcINPJgd06S2zoYmOToul+fjql4tVeHCFpAjZHsizysCHu4NybTdim8C 0pItmFDwEijIEZ8DZOWqDDLkelDl/fzkJtgOLQJYBgR/zoh4G59ZNPMRVQHHSqnbArzngDLkC4m 7HDZJecNQ/V8v51mqa8WXNop/OwwIHi6X1+0iLAOaSpR2Vq5Gexzy7NrJoxkmSUaSfEgncghsQQ gHXoTOptsO9AWrcI7FUTJ2SGg449J8FXgGFy1NYkZ1bTtFwX2FdH8bL5HcpI1dM5Ys= X-Google-Smtp-Source: AGHT+IEXSqMDdLWEVOLm+/ypfhPzotrgNQdcTuiEWGVxTX1sQzs6KiT8mG4S8teEme0iKBSwiJOMbA== X-Received: by 2002:a05:6402:35c2:b0:5d0:ea4f:972f with SMTP id 4fb4d7f45d1cf-5d81dd9af30mr132628782a12.8.1736242921817; Tue, 07 Jan 2025 01:42:01 -0800 (PST) Received: from [192.168.1.140] ([85.235.12.238]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aac0f012229sm2356901166b.133.2025.01.07.01.42.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jan 2025 01:42:01 -0800 (PST) From: Linus Walleij Date: Tue, 07 Jan 2025 10:41:43 +0100 Subject: [PATCH RFC v3 27/30] ARM: irq: Add irqstack helpers 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="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20250107-arm-generic-entry-v3-27-4e5f3c15db2d@linaro.org> References: <20250107-arm-generic-entry-v3-0-4e5f3c15db2d@linaro.org> In-Reply-To: <20250107-arm-generic-entry-v3-0-4e5f3c15db2d@linaro.org> To: Dmitry Vyukov , Oleg Nesterov , Russell King , Kees Cook , Andy Lutomirski , Will Drewry , Frederic Weisbecker , "Paul E. McKenney" , Jinjie Ruan , Arnd Bergmann , Ard Biesheuvel , Al Viro Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Linus Walleij X-Mailer: b4 0.14.2 Add two helpers that essentially re-implement some IRQ dispatch code in C: on_irq_stack() that checks if a regs context is on the IRQ stack, and call_on_irq_stack() so we can explicitly issue handle_irq() on the IRQ stack from a C program. Cc: Ard Biesheuvel Signed-off-by: Linus Walleij --- arch/arm/kernel/irq.c | 31 +++++++++++++++++++++++++++++++ arch/arm/kernel/irq.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c index e1993e28a9ecfd80b55b2677253ac582467e6c14..4c1a678b72b326e42c871b994c09d1fa4b0863f6 100644 --- a/arch/arm/kernel/irq.c +++ b/arch/arm/kernel/irq.c @@ -43,6 +43,7 @@ #include #include +#include "irq.h" #include "reboot.h" unsigned long irq_err_count; @@ -71,6 +72,36 @@ static void __init init_irq_stacks(void) } } +/* + * on_irq_stack() - check if a regs context is using the IRQ stack + * @regs: the context to check + * Returns true if regs is using the IRQ stack + */ +bool on_irq_stack(struct pt_regs *regs) +{ + u8 *high = __this_cpu_read(irq_stack_ptr); + u8 *low = high - THREAD_SIZE; + u8 *sp = (u8 *)regs->ARM_sp; + bool on_stack; + + on_stack = (low <= sp && sp <= high); + + if (on_stack && IS_ENABLED(CONFIG_VMAP_STACK)) + /* + * Also check that SP is inside the linear kernel memory + * if using VMAP:ed stacks. + * TODO: Ask Ard to explain why we need to do this + */ + on_stack = (sp > (u8 *)high_memory); + + return on_stack; +} + +void call_on_irq_stack(void (*fn)(void *), void *arg) +{ + call_with_stack(fn, arg, __this_cpu_read(irq_stack_ptr)); +} + #ifdef CONFIG_SOFTIRQ_ON_OWN_STACK static void ____do_softirq(void *arg) { diff --git a/arch/arm/kernel/irq.h b/arch/arm/kernel/irq.h new file mode 100644 index 0000000000000000000000000000000000000000..c5186b67242a2976fe702154ed4f2a22eca51add --- /dev/null +++ b/arch/arm/kernel/irq.h @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +bool on_irq_stack(struct pt_regs *regs); +void call_on_irq_stack(void (*fn)(void *), void *arg); -- 2.47.1