From patchwork Wed May 14 17:43:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 890380 Received: from mail-ed1-f74.google.com (mail-ed1-f74.google.com [209.85.208.74]) (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 D3F7F280CD9 for ; Wed, 14 May 2025 17:43:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244640; cv=none; b=NqCp2C9kPAKMqwWE3X7nGuqe4uk8UPIk6ie5OH0UIAl2vpEFqks/X1bRyKLxx6Vrf0oOsDWA4hMIhuvmuhZOUSYDCl9TonXo55xbBqkYoXsW8ebcobJFlJ6seH+zDOUAQLiqkKqjL8PIabf9GJDFudA5BkeRqWFW6yV27Gsiz1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244640; c=relaxed/simple; bh=wNSwSHaQL768bwuARb+U+ClbCVRY8y/M7G0l8xnwMes=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=My72A9YP+fQ7AqqV7U1xCfU800ef8ew+lZRGK/NchBuCD43gFFU/M0Jp6lkley3tcu16t90S3IBDh7tz9L9CGdWX2pFB1b20m1BLdDY8LOyR+PI2yEx/Ejxy5x3CkeM/xch3ZqRVCzvtBWjUa9TWoYe/sbD1C5PExstgaze9Qu4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=AAEIc3MA; arc=none smtp.client-ip=209.85.208.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="AAEIc3MA" Received: by mail-ed1-f74.google.com with SMTP id 4fb4d7f45d1cf-5fbe340b709so57684a12.3 for ; Wed, 14 May 2025 10:43:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244637; x=1747849437; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=t3HyzwFpqI96MKN6rPIIRpRYJw2Hi2fE7csbcA6ZBUg=; b=AAEIc3MAESsX+Wa2luqGcJJff4QP3meX9pAvOAS1ih4c+m7dmICw0DsA722C1iQJtD l1qgFVDCoq8Wz0E+dCNH3/QqlvhhMNt5waypuDrXQE4uzbqijBucU/LTVu9Wk09HYyDg EgHBkHgYmrccbLnezdVBKqzlr4jyCqS/Ogi8q8OAGP0eEz84EdBPbIGhHDTt1F+6o9ii VPimE6Z0Uc5OaVKO1/IUQP8rwbIjIDEtG7NNJZxqV6rRhVNO1/a7IX/zNX+jzR1CHJMO 2iVjGRu80kmvMMPZpscjcIGj8r9G6u9NX7TcbgjSRAIBhVbLsDlVspXQgTUSN6TwshCG oqdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244637; x=1747849437; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=t3HyzwFpqI96MKN6rPIIRpRYJw2Hi2fE7csbcA6ZBUg=; b=nn/yQLM3Xj2joK5EGry4sSqA+3eCDZkEQbi8AWFmp4wrlWUdCO5CjYSIoqFLzoEOy+ AX5uNnv4hOD70CxcVPI8JTAeu7XpNrrbnoLEXcAHf87MAJSsON/7NG6au+jsu8DOnNpm LQ/4GaQWVHb/xNJcE9COoXO7Zjw4GVnAL5Cjv4S8QY55sK0Scl3BwtSa1YByoH1RJIwN 40T5JQJfCp5vj2w+Gq29RNI/Nm6Lhs7aDsKKJJJdA6lKDYtzA7WTAX+eI4O648Td50Ct g1gXEQf5xFReZQR3/ZI/jtHnJ3pst3IlernwubcGM+WXR0rS7sKkYvKBoYE7xe9+1muQ wqDQ== X-Gm-Message-State: AOJu0Yw6TfinE8oS2OxYFygmOa3NhWikopT2JjW4i+c8e9tian4+pL+a 8L1LDaFoYdhYPMnQGMbXP65EvLq623nculiYNT4HgUGTfRVA/x6+seBL64X0TgCmWgb0vseORCB 5Q5fx874BEs+oYqGtumCiVDJLjJin+UjBGs64Gme1u3AxN22/PIEPGa0VDq3LTl3JH9gURrIdxO uk9Nq62YDx6Psi32hq71Ox2PUSng== X-Google-Smtp-Source: AGHT+IFMiOIHcOTbuiXUZt5aRX5V8FD38VCujID8sYnl6g5WCQk844aGLumnl4jvPnBScsY9NLpomgSv X-Received: from edr22.prod.google.com ([2002:a05:6402:44d6:b0:5fc:8eaa:6880]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:1eca:b0:5fa:f7ed:f19c with SMTP id 4fb4d7f45d1cf-5ff9889159cmr3446782a12.4.1747244637109; Wed, 14 May 2025 10:43:57 -0700 (PDT) Date: Wed, 14 May 2025 19:43:41 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=805; i=ardb@kernel.org; h=from:subject; bh=Uiag6eY4kkyJQ9LOjYS9SFHapP2JX/63rkWG9Swk9rg=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWsB25Y3CTRL3p7X+7vm8bf2FpxlxIpNnHp0k0Pe+9 z1PjvKpjlIWBjEOBlkxRRaB2X/f7Tw9UarWeZYszBxWJpAhDFycAjARuWWMDB9TrRZWXE++3T1d bb8st+a0ub6btS/EH4x80K4aeOHV7UmMDAdPP5o2qVGqVFrj3exdWYfn329vd/XQllvXP/OacVb TT0YA X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-10-ardb+git@google.com> Subject: [RFC PATCH 1/7] efi: Add missing static initializer for efi_mm::cpus_allowed_lock From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra , stable@vger.kernel.org From: Ard Biesheuvel Initialize the cpus_allowed_lock struct member of efi_mm. Cc: Signed-off-by: Ard Biesheuvel --- drivers/firmware/efi/efi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 7309394b8fc9..59a56661937c 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -73,6 +73,9 @@ struct mm_struct efi_mm = { .page_table_lock = __SPIN_LOCK_UNLOCKED(efi_mm.page_table_lock), .mmlist = LIST_HEAD_INIT(efi_mm.mmlist), .cpu_bitmap = { [BITS_TO_LONGS(NR_CPUS)] = 0}, +#ifdef CONFIG_SCHED_MM_CID + .cpus_allowed_lock = __RAW_SPIN_LOCK_UNLOCKED(efi_mm.cpus_allowed_lock), +#endif }; struct workqueue_struct *efi_rts_wq; From patchwork Wed May 14 17:43:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 889981 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (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 E2562280CD9 for ; Wed, 14 May 2025 17:44:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244642; cv=none; b=EpxfmquAbhNEqF/Jjj6MX5E/6ZUdlkDOfmiI4SaWohLsg0JZ3qlrpH1IWBoGQkp5vms+jB/n3ne52awvRnVk89tcWSaY4HBaqArTCJ9ZqMFnVmgPWy5/u+4DGm/u16S/azyvMnukaaEMRInSkqS8VY45+aiGGJbaTOeWM2fbQ5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244642; c=relaxed/simple; bh=mVrD8G0mEVud+xrEngrBvbLdJt6fvh89BZud7f0K+CU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=DW9B3rOJ1Vtehl9gmtmfTdSAvD0WwEtNUdeOZvkkQtM+KLRGe7iXDO7OMOwYgBMu4ZFWOLUv0ApJFWEphjpT99+tgGtE4uBRbmr2cMarY8s5TvZLzcWXHQLLcUfTt2Wb+RsGvZ3XNBlidoT7amaq+K/6VTlBib9IQ76++fV5fHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CxJJ2Tlw; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CxJJ2Tlw" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-43eea5a5d80so424725e9.1 for ; Wed, 14 May 2025 10:44:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244639; x=1747849439; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=tXVJMsufZ9sm0rGmcq7nqIrA1daerFrHzMfPhoL+63A=; b=CxJJ2TlwvY7HQgFpVM6QXrVPonKnB6U3LjWS5GocZ6CD2A5468WSt2irMySx3A1Giz U9480QcdIeNsokDdxgyvO7btCUrFh7ZFCRXSRlUegWMIeR9dI/eAFHlNXkDfL+BBCsID 70xUE73FZDuQDQFlSf//60oF8GNDGyHJhKseAh3G+YyJTH6kQyH3cTVlaood8PbiS7Id wQyKoGzDJ00Q+hT1dRkZNiaETonuLAuNigyapVUU+xWcSXe4gDeQm2mrhTM6KHfgWHrc UwK9MEUllPWIRjEwUN+Y0Cn1hNW/Q6vEt2JrRhH6vdCdlQuNhmzmipXDEPHr/FFUE5oM Sl0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244639; x=1747849439; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tXVJMsufZ9sm0rGmcq7nqIrA1daerFrHzMfPhoL+63A=; b=ZqFtLa7KQHuP2pMrxZiX6JxNmgAwyo5nc4go/RR9FmgQj83Lo1K8jttYMTQnKV/Vjb nzHQZSuGR4LIt/+YVqAqBU0pOgEE+8X1jfYxm25MdRhbfKQDHPOmTQK3GPtVw4zRN1zp w0bYk5wc7G7FVWJtOJ/OUUJW8N8h4zcO0VluAjkphV6eX9uIHsbzs49CpnkPCsikP5E5 +oicYxWeMEaVFah3WE/UTgIEQSn2198YFwm2QLD/9tzBBhM6FjjcipYm8zL9pxdiDnSg Fvj0ksxQ2jKYGxJ+Lx3aiJVdxk5qohduk7jN4cTbprh+6vCYR9CABNHp8HAknYLtR+LJ ffGQ== X-Gm-Message-State: AOJu0YyzrgfYdeIY7OY+oH0VWc+OnQGQsOwLKfaOz8rYhtw46UZz+6u/ V/tHpqkLUnML+fbIvPC5cz/etu8CKQeJMnKy3cyl/iilIxCGQKuKSG/hPem2D5S78ucILovdgzP ATSjnMhuoO+N08kaxZY35FIBeGA9tc2kX5WcbYWpwBZAyaaeJuXLDu1TbfyTuuRedZ/aLTzOPIj b9ZHVW1QZMh7yBYcQSSJNvPghvrg== X-Google-Smtp-Source: AGHT+IEFMJweCFn/YJy00TUveKZvloJ8ozZW7ocyXdHKJvi0QMeGWaS9uMuGA5J4Ptlhdx+EEwEvRi9t X-Received: from wmrn6.prod.google.com ([2002:a05:600c:5006:b0:43c:fe64:2de3]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1e84:b0:43c:e7a7:1e76 with SMTP id 5b1f17b1804b1-442f20b8554mr32240165e9.1.1747244639223; Wed, 14 May 2025 10:43:59 -0700 (PDT) Date: Wed, 14 May 2025 19:43:42 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=5541; i=ardb@kernel.org; h=from:subject; bh=5U5zQ0g4Nylx2meOob6iW9ucS95iuPh4XIaL8oIC4Co=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWuD06w/y06a7Tpn6tO6j+rPwRDlL+xfXBFZv+6jOu tKxdW9CRykLgxgHg6yYIovA7L/vdp6eKFXrPEsWZg4rE8gQBi5OAZhIBxfDP4OTO6NSUk0c1NZu E5HaJNtptfjfmibztg1O+ilpqgrK8xj+B4Qt7urwXH1sys6X8fMMBBJ92Rf8SeuPdC7fuORk58p PPAA= X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-11-ardb+git@google.com> Subject: [RFC PATCH 2/7] efi/runtime: Return success/failure from arch_efi_call_virt_setup() From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel Permit the arch glue to signal failure from arch_efi_call_virt_setup(). This permits the use of sleeping locks in the call wrappers, and this will allow EFI runtime services to be invoked without the need for disabling preemption. Signed-off-by: Ard Biesheuvel --- arch/arm/include/asm/efi.h | 2 +- arch/arm64/include/asm/efi.h | 2 +- arch/arm64/kernel/efi.c | 3 ++- arch/loongarch/include/asm/efi.h | 2 +- arch/riscv/include/asm/efi.h | 2 +- arch/x86/include/asm/efi.h | 2 +- arch/x86/platform/efi/efi_32.c | 3 ++- arch/x86/platform/efi/efi_64.c | 3 ++- drivers/firmware/efi/riscv-runtime.c | 3 ++- 9 files changed, 13 insertions(+), 9 deletions(-) diff --git a/arch/arm/include/asm/efi.h b/arch/arm/include/asm/efi.h index e408399d5f0e..0809a69bb579 100644 --- a/arch/arm/include/asm/efi.h +++ b/arch/arm/include/asm/efi.h @@ -23,7 +23,7 @@ void arm_efi_init(void); int efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md); int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md, bool); -#define arch_efi_call_virt_setup() efi_virtmap_load() +#define arch_efi_call_virt_setup() (efi_virtmap_load(), true) #define arch_efi_call_virt_teardown() efi_virtmap_unload() #ifdef CONFIG_CPU_TTBR0_PAN diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h index bcd5622aa096..decf87777f57 100644 --- a/arch/arm64/include/asm/efi.h +++ b/arch/arm64/include/asm/efi.h @@ -37,7 +37,7 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md, extern u64 *efi_rt_stack_top; efi_status_t __efi_rt_asm_wrapper(void *, const char *, ...); -void arch_efi_call_virt_setup(void); +bool arch_efi_call_virt_setup(void); void arch_efi_call_virt_teardown(void); /* diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 250e9d7c08a7..44ad5e759af4 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -166,11 +166,12 @@ asmlinkage efi_status_t efi_handle_corrupted_x18(efi_status_t s, const char *f) static DEFINE_RAW_SPINLOCK(efi_rt_lock); -void arch_efi_call_virt_setup(void) +bool arch_efi_call_virt_setup(void) { efi_virtmap_load(); raw_spin_lock(&efi_rt_lock); __efi_fpsimd_begin(); + return true; } void arch_efi_call_virt_teardown(void) diff --git a/arch/loongarch/include/asm/efi.h b/arch/loongarch/include/asm/efi.h index eddc8e79b3fa..84cf2151123f 100644 --- a/arch/loongarch/include/asm/efi.h +++ b/arch/loongarch/include/asm/efi.h @@ -14,7 +14,7 @@ void efifb_setup_from_dmi(struct screen_info *si, const char *opt); #define ARCH_EFI_IRQ_FLAGS_MASK 0x00000004 /* Bit 2: CSR.CRMD.IE */ -#define arch_efi_call_virt_setup() +#define arch_efi_call_virt_setup() true #define arch_efi_call_virt_teardown() #define EFI_ALLOC_ALIGN SZ_64K diff --git a/arch/riscv/include/asm/efi.h b/arch/riscv/include/asm/efi.h index 46a355913b27..a7b4d719e7be 100644 --- a/arch/riscv/include/asm/efi.h +++ b/arch/riscv/include/asm/efi.h @@ -40,7 +40,7 @@ static inline unsigned long efi_get_kimg_min_align(void) #define EFI_KIMG_PREFERRED_ADDRESS efi_get_kimg_min_align() -void arch_efi_call_virt_setup(void); +bool arch_efi_call_virt_setup(void); void arch_efi_call_virt_teardown(void); unsigned long stext_offset(void); diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h index f227a70ac91f..879c8402e024 100644 --- a/arch/x86/include/asm/efi.h +++ b/arch/x86/include/asm/efi.h @@ -140,7 +140,7 @@ extern void efi_delete_dummy_variable(void); extern void efi_crash_gracefully_on_page_fault(unsigned long phys_addr); extern void efi_free_boot_services(void); -void arch_efi_call_virt_setup(void); +bool arch_efi_call_virt_setup(void); void arch_efi_call_virt_teardown(void); extern u64 efi_setup; diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c index b2cc7b4552a1..215f16ce84ab 100644 --- a/arch/x86/platform/efi/efi_32.c +++ b/arch/x86/platform/efi/efi_32.c @@ -141,10 +141,11 @@ void __init efi_runtime_update_mappings(void) } } -void arch_efi_call_virt_setup(void) +bool arch_efi_call_virt_setup(void) { efi_fpu_begin(); firmware_restrict_branch_speculation_start(); + return true; } void arch_efi_call_virt_teardown(void) diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index ac57259a432b..023368e9698a 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c @@ -445,12 +445,13 @@ static void efi_leave_mm(void) switch_mm(&efi_mm, efi_prev_mm, NULL); } -void arch_efi_call_virt_setup(void) +bool arch_efi_call_virt_setup(void) { efi_sync_low_kernel_mappings(); efi_fpu_begin(); firmware_restrict_branch_speculation_start(); efi_enter_mm(); + return true; } void arch_efi_call_virt_teardown(void) diff --git a/drivers/firmware/efi/riscv-runtime.c b/drivers/firmware/efi/riscv-runtime.c index fa71cd898120..07e04b8f982a 100644 --- a/drivers/firmware/efi/riscv-runtime.c +++ b/drivers/firmware/efi/riscv-runtime.c @@ -142,10 +142,11 @@ static void efi_virtmap_unload(void) preempt_enable(); } -void arch_efi_call_virt_setup(void) +bool arch_efi_call_virt_setup(void) { sync_kernel_mappings(efi_mm.pgd); efi_virtmap_load(); + return true; } void arch_efi_call_virt_teardown(void) From patchwork Wed May 14 17:43:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 890379 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) (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 CD1CA280316 for ; Wed, 14 May 2025 17:44:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244644; cv=none; b=uOLmQp0Gqm6rq7t2Yw8Wa8vsYCW6ACKqZuyoxSWmp9AAGvS0Jq3iVjkkwOTco2KkfdFhXP5EpbYHm3gONXYNWIDvd+qjYZvG1hL0DCSc/M+bXPfRomHMkSYCZaX3VAzjxCqSj8w2GuqodICw5XjXheFa0QOkDIPIm/vS+QrUprA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244644; c=relaxed/simple; bh=r4eQVxCCQ3NGsGM9bJXrqNCo0KJxcgbpHM71Yu/owQg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=g8NxiiQBuZbPb6N2M5iJ2F+GdIbj9QmDbGBerJRQ+62mNdMnZKi0JBz+v+4HEDz9nSHgIe9SfyYZumqSOyECqOBGQoe30UkB8HA6t8D0/nCL+IaLtJewoAjHDvssUMU/kaiV8VSFjNGiK64uxAEMEy00Luk909jtuo9tLTxpowY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uEUufJG6; arc=none smtp.client-ip=209.85.128.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uEUufJG6" Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43cf172ffe1so445385e9.3 for ; Wed, 14 May 2025 10:44:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244641; x=1747849441; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Lr489qzcXalsUK5OJ8OM0VMNZiYyGTMtXZ1AW7+fvJI=; b=uEUufJG6MyG/tZ25duEvJs94ByyQZT5jA1mrkffH4n+Tr7Ubojr9PClwVctTWB9z2P uWqZFSr7ii8LuiP+sChSjsMMskLAxS1Rx2GM+0Km/1dh+Y11puMtuCfSyYEh6t5w+pMq YF95QpMxg35hWngVSVu3kLv4cOC7nR7OYq61o55kkhPu+6797jiPVsdhxAQVrTy+6sOh 24J+li/GgAmSIPzP0OM228kyYiZbNqF5o1mNHt+6fqyOUYUtdBYZ08OZT4OWMOdPVKex sQH3KnTgbZBawK0jFkIumiD/Aa00nodPvKK38nEw6dI1pDRNs/oMY47J/jGZROg4Pb5x eUWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244641; x=1747849441; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Lr489qzcXalsUK5OJ8OM0VMNZiYyGTMtXZ1AW7+fvJI=; b=thgGNzlSYzQpMG7p+lzA3GzCAqNfP9YWJeR9CAZCDOwFSyqgCnjDsLOdBCS4j3zwcA bcSPo+LufGEvkvt+QfkE62PV67Wp/h0nl1XPQI2F/LFHUcLRb4TCeYECYZxCybAo5o4M 1EaMU6/zMFrMPDBUC27PZdIha9Gs9fcyx084QP9BFuKuHKiWvn6QpVXwvkJtznYXdiTA t0KR+MrmtheK2SdNpA+Lp2hppTYQQLS/ru5C3cVTgHhgj55f8VpBT2VAq8424+faIm9v h4WaYuQt4n2GfstxuUN2XtUiKaV96ru4FXnkNGjmlpJzbrthl9+6J511mWo/J8G10Wbo QgUw== X-Gm-Message-State: AOJu0YzglKhu+5i0PWdBIf1uhQEkWKjOH0iKxruHk6KdoZjBFKl12bGK ZZXH4MF2wn/gLbYxF9Tn+Nf5/6RlTTiFL/InfrbTCTbQUDNYZvWjSRCijEErjetq+jk08+uXZZN sVrFzqD9FU/KpjpDNAlMb+U+DQtFUOw/CeHYkPV0pjZFOp3QJkv5EkBuqzPE3N5BU+zFIoXBU+Y zCCe+Y2GmVyZWKotda7wnzrHdjeA== X-Google-Smtp-Source: AGHT+IF4eQ+ydqWoNEayJUroHoQxAkXTja0NASjKqMSbnY/vDFIWy+Z3Ik1V29mozN3Vprxr/BZDW0of X-Received: from wmbes6.prod.google.com ([2002:a05:600c:8106:b0:43d:9035:df36]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3e88:b0:43c:ec28:d31b with SMTP id 5b1f17b1804b1-442f20db116mr51865765e9.10.1747244641338; Wed, 14 May 2025 10:44:01 -0700 (PDT) Date: Wed, 14 May 2025 19:43:43 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=4131; i=ardb@kernel.org; h=from:subject; bh=x0gdcnYhqzj5S3CKFvtpWSVou+0kjuvQshTcS6vWwRw=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWtCHRjOVN3Oe9CUE+qgfYqgVFDYN5/fMOJG39Q1XP 8tvod8dpSwMYhwMsmKKLAKz/77beXqiVK3zLFmYOaxMIEMYuDgFYCIyPxgZJr5t23bkHI+e4L/g /Uyb7zvXZkQffX2hPkDyibaNZsRqEUaGu6n26yx+vJ27fmLn2eryZUYT6pUyp/6Y413hmjlb0/I xCwA= X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-12-ardb+git@google.com> Subject: [RFC PATCH 3/7] efi/runtime: Deal with arch_efi_call_virt_setup() returning failure From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel Deal with arch_efi_call_virt_setup() returning failure, by giving up and returning an appropriate error code to the caller. Signed-off-by: Ard Biesheuvel --- arch/x86/platform/uv/bios_uv.c | 3 ++- drivers/firmware/efi/runtime-wrappers.c | 20 +++++++++++++------- include/linux/efi.h | 8 ++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/arch/x86/platform/uv/bios_uv.c b/arch/x86/platform/uv/bios_uv.c index bf31af3d32d6..a442bbe5b1c2 100644 --- a/arch/x86/platform/uv/bios_uv.c +++ b/arch/x86/platform/uv/bios_uv.c @@ -32,7 +32,8 @@ static s64 __uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, */ return BIOS_STATUS_UNIMPLEMENTED; - ret = efi_call_virt_pointer(tab, function, (u64)which, a1, a2, a3, a4, a5); + ret = efi_call_virt_pointer(tab, function, BIOS_STATUS_UNIMPLEMENTED, + (u64)which, a1, a2, a3, a4, a5); return ret; } diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c index 708b777857d3..82a27b414485 100644 --- a/drivers/firmware/efi/runtime-wrappers.c +++ b/drivers/firmware/efi/runtime-wrappers.c @@ -219,7 +219,10 @@ static void __nocfi efi_call_rts(struct work_struct *work) efi_status_t status = EFI_NOT_FOUND; unsigned long flags; - arch_efi_call_virt_setup(); + if (!arch_efi_call_virt_setup()) { + status = EFI_NOT_READY; + goto out; + } flags = efi_call_virt_save_flags(); switch (efi_rts_work.efi_rts_id) { @@ -308,6 +311,7 @@ static void __nocfi efi_call_rts(struct work_struct *work) efi_call_virt_check_flags(flags, efi_rts_work.caller); arch_efi_call_virt_teardown(); +out: efi_rts_work.status = status; complete(&efi_rts_work.efi_rts_comp); } @@ -444,8 +448,8 @@ virt_efi_set_variable_nb(efi_char16_t *name, efi_guid_t *vendor, u32 attr, if (down_trylock(&efi_runtime_lock)) return EFI_NOT_READY; - status = efi_call_virt_pointer(efi.runtime, set_variable, name, vendor, - attr, data_size, data); + status = efi_call_virt_pointer(efi.runtime, set_variable, EFI_NOT_READY, + name, vendor, attr, data_size, data); up(&efi_runtime_lock); return status; } @@ -481,9 +485,9 @@ virt_efi_query_variable_info_nb(u32 attr, u64 *storage_space, if (down_trylock(&efi_runtime_lock)) return EFI_NOT_READY; - status = efi_call_virt_pointer(efi.runtime, query_variable_info, attr, - storage_space, remaining_space, - max_variable_size); + status = efi_call_virt_pointer(efi.runtime, query_variable_info, + EFI_NOT_READY, attr, storage_space, + remaining_space, max_variable_size); up(&efi_runtime_lock); return status; } @@ -509,12 +513,14 @@ virt_efi_reset_system(int reset_type, efi_status_t status, return; } - arch_efi_call_virt_setup(); + if (!arch_efi_call_virt_setup()) + goto out; efi_rts_work.efi_rts_id = EFI_RESET_SYSTEM; arch_efi_call_virt(efi.runtime, reset_system, reset_type, status, data_size, data); arch_efi_call_virt_teardown(); +out: up(&efi_runtime_lock); } diff --git a/include/linux/efi.h b/include/linux/efi.h index 7d63d1d75f22..13aff30be3a9 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1179,19 +1179,19 @@ static inline void efi_check_for_embedded_firmwares(void) { } * Restores the usual kernel environment once the call has returned. */ -#define efi_call_virt_pointer(p, f, args...) \ +#define efi_call_virt_pointer(p, f, busy, args...) \ ({ \ - typeof((p)->f(args)) __s; \ + typeof((p)->f(args)) __s = (busy); \ unsigned long __flags; \ \ - arch_efi_call_virt_setup(); \ + if (!arch_efi_call_virt_setup()) goto __out; \ \ __flags = efi_call_virt_save_flags(); \ __s = arch_efi_call_virt(p, f, args); \ efi_call_virt_check_flags(__flags, NULL); \ \ arch_efi_call_virt_teardown(); \ - \ +__out: \ __s; \ }) From patchwork Wed May 14 17:43:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 889980 Received: from mail-wm1-f73.google.com (mail-wm1-f73.google.com [209.85.128.73]) (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 B95CE28032E for ; Wed, 14 May 2025 17:44:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244646; cv=none; b=R6ru33AwQuzYdaeZuTeF3vG2i5+w5B3m4FeOR29Sh1lyb5+55f+r7pwBY3HQK0s10crvm1riNfnSnaYKMTFV1kiYJw+Yl6ZGPdvdFeyqMD81cfiC+nVJZ0/Out5wBSamtl75D9Qz5eycDhAQI5a5C2m16tZ9fPAJpo78iC38w7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244646; c=relaxed/simple; bh=QCcKltXdUiS6ZvAwHQnUpG+n3tVeHgTvAF4dJYxbvu4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tkXGxQiiybmT6LBGB8k+e7RwODogjZ/tv4YzcTcHzvy7J0g5CxW3tUlVGM8Vzkk88qRI6Gwf7d22WTmS1WSXO4aLVb+b/0SUzDUoR7rKuRl9QsFTwBa+G/sNbodZJzlHS4AeIepKFiCAm1MOaJFtFoiwJrZGHMnqVG7ojhpsls4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=b88Ke3xx; arc=none smtp.client-ip=209.85.128.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="b88Ke3xx" Received: by mail-wm1-f73.google.com with SMTP id 5b1f17b1804b1-43f251dc364so463965e9.2 for ; Wed, 14 May 2025 10:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244643; x=1747849443; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=D3joKKQQeIZmQE4kJSA51zMSWECAKvTydbD+tuMEGFg=; b=b88Ke3xxCNTe82Z3RoZjUOoLZY+4W5sXVY9mD7oGDeudxLES1VqB1nht6+6CaS/f/A P+wrmA1QAIVAb1oODE05mkQBuTNJ0PQQcKDmY55Kh/7KH9xKCSNqBi5GOVrd62N92V+i 1dVSbJ8t7ljsa/PiVtet2dauQ8Ky/o8A49a3DIFiilas88pHKU6vNswU9LA2e6+hwPa4 QOOHCL3NBDuoyEirTUHZwKdB+ZPvMkbHiAfmEZDmBm809SExB3r+9pML6wdzfY12h9TA 2qQhJEffpIVlxBEdS8b0dUtZvKqUbBu5zwxakoQR6xNLkeerp8D8vSaJQiBUFt/UzdQR Jizw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244643; x=1747849443; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=D3joKKQQeIZmQE4kJSA51zMSWECAKvTydbD+tuMEGFg=; b=fDnTzGrznh/k9RgrsAncdZZPAroif7v6F5jCO8qI2WbBx7u+v2p5m+DOrtGf9M7dBm IrqwcmRhsYAMnkiWZlEhRrvg2K0suoeCKHz6nPBXxphu6ncke0EAZGSxPZ2Y5HB2zi95 IqH8ULCBGPfVcu3xja31u3KrYM6AVYq3q1cxkg4QYv5/grLkqSP7XLXvSV5rM18JGvR4 dfPTxBqioCNgLhMSKXrOFwIf39bK/Bmw925dHgYdjmqywaLZkxTDqC/5tWjeMN9WaBOp xhAnvKetGRI7oK7sfR0w8OuA5FCOkmebw2DZpRh4m9oCidNLeF8NP8/B5d4j4NIlPvvx srFw== X-Gm-Message-State: AOJu0YwuzZ5gT11yZK1UMjGmXLt57rJVH6hCmzY+K/k1Bczfo0UWO5Va RPuPDsBmwFK1OS2PxvGHd7b+QMkx8vyC/BkaCsJ+2gyvCj+S+oYHqzRuhiq9H4UV5Zr/oGu2Mf+ g1/STOUZ7WLZzcVjehelIIe70DIooyspk4t0GtmdMuftDbGWgsm9CEh5n/V35Vch0oOcrR924nD KG1hNTI3wXQtcnHfmYslk9zH8HJg== X-Google-Smtp-Source: AGHT+IEb+8/c9BiVGl1VreAZ1QbOIrYHfFd06gIJ4WYvdQgg+dQ9aQ2nVaMRaSnJ1H83VLXljFnK3HOA X-Received: from wrgb2.prod.google.com ([2002:a05:6000:3c2:b0:39d:7be5:b8fa]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:420c:b0:3a1:fcd9:f300 with SMTP id ffacd0b85a97d-3a3499224cbmr4177122f8f.39.1747244643209; Wed, 14 May 2025 10:44:03 -0700 (PDT) Date: Wed, 14 May 2025 19:43:44 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=902; i=ardb@kernel.org; h=from:subject; bh=B/kHgdOpjuIm/yGgjP0zTXGcP6XnGaz+vciWyr3djVs=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWkj9BO3u3gnr2ypE5E2uvsxuvTddxnHDnQ7TowlXD uj/FmPqKGVhEONgkBVTZBGY/ffdztMTpWqdZ8nCzGFlAhnCwMUpABOZo83wT9ddzsGtYhv3rz/7 NOWs9zVYcR/I3iEhJNXOMquLS2aWN8P/rHDfI4ztPNuVmsOTZFLuFfz8f7KhK/XA42jhh4384g+ ZAQ== X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-13-ardb+git@google.com> Subject: [RFC PATCH 4/7] arm64/fpsimd: Don't warn when EFI execution context is preemptible From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel Kernel mode FP/SIMD no longer requires preemption to be disabled, so only warn on uses of FP/SIMD from preemptible context if the fallback path is taken for cases where kernel mode NEON would not be allowed otherwise. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/fpsimd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c index ae2ea0196030..47a8706e26b7 100644 --- a/arch/arm64/kernel/fpsimd.c +++ b/arch/arm64/kernel/fpsimd.c @@ -1975,11 +1975,11 @@ void __efi_fpsimd_begin(void) if (!system_supports_fpsimd()) return; - WARN_ON(preemptible()); - if (may_use_simd()) { kernel_neon_begin(); } else { + WARN_ON(preemptible()); + /* * If !efi_sve_state, SVE can't be in use yet and doesn't need * preserving: From patchwork Wed May 14 17:43:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 890378 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 9ABCE28541B for ; Wed, 14 May 2025 17:44:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244648; cv=none; b=d70TBFTVSpS1nJaebWtr3qrMguldac/9KvkgGCNLeCje2utoxXd0t/i4v0NCcbT1IK3xzbEQFQKOjOsrON+xggwzHxfDFGV62JZ15GBMRCUq9P75Ub/Ajpgp/8MuNPhrIhKCdNYq18vYS67SfVpD17ZMNTI0Wi1Uz/81r2XTQ9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244648; c=relaxed/simple; bh=6bwhz9ZVsfJUN+XIkS14v/agbd7AKeEqEWWL1cLcs74=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=LiCbxI778CAbHE1S2v3J4Oufp7P2GjkgnSmE8rOA4u8KQSLwaBwNVvQclb9+n0e/nQIOAEi3HDmqEXFtEKTyQU18uvSYFvn5Gzifxla6DXMrPYBrKdAOHgYN9ynCVBumMpD7uOOH18xCNSYZkPqw/FNtdqbv1C/1spEcV07AtiM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=R11Q16tR; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="R11Q16tR" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3a0b2e56da1so24281f8f.0 for ; Wed, 14 May 2025 10:44:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244645; x=1747849445; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=D5xC8ZFXHRFQPPNvAQ6eM6+yxFQwHsYqCLzJSlhA3po=; b=R11Q16tRVF/f6C8C+UmkpQbjMwlLYoDEl0r7sI5NgOfG5lBIbjwdlZW/mIAHipOw+Q a1S5WZcipPs3xripfEga35YR65LYy9y9ffk/K2OD2fUQ9XRgmlzqY5gMa92uy+eB5uur 9oNPLOEV/FrkI1BiIteHMtANAg390STTxNRoTuNtM4lRxDtxbwPwHBWpTcHV4+RTL8De i5YbghCyyP0sih+YxpPn2VAsj7bNGX93PGp2jW8j89ChB9IXtlY/Xgwsi2hOIbLw+DhV PSxk2I5rK9oVwVXuj1pJfKc31Ha8Nb7x2IL/pOsFiSi7nFvDub5hxXRh08ISP0DEiSUl 5/Ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244645; x=1747849445; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=D5xC8ZFXHRFQPPNvAQ6eM6+yxFQwHsYqCLzJSlhA3po=; b=OsdiLM7am58pvbg8gW3iYbknp6evlGRV87Q8m6NeL30bEleAYUSiAC0u0ZvANENKqU zt33AI+Dn6hh0uH2L3AxXz6VHivF/ALNPA6NfSDULgMC/WxdosHamEnDogL174SE6B3F VRhStcafMdynvnined+rNRcqCZkYDQblIy0SyLNrghPesE0gL2Rkp1shW0Y+Yh1iFOaT Uqo7cxPQIKZrTyPjuCCc+X+bS+Kxno/oDx89DbzEN7bazHbmy2pKvJlLAV4q5v8MDq8h 8VkHGJfoKxHKOHAWO4K3r7wD4LR6Dm4UX3xGusINrc9pPmb5cy15rdhlwn923x2bUFDz S4Jg== X-Gm-Message-State: AOJu0YwX4tpXA+0hCYwyH1+AIBcn45CIpr6+vjXB0kBE5pjufRW2J/0F YiPNm4MG/D7m24kxajZ3PtfqmYxB5bBw52ZW6lbiFdST7Azf9BfG7dlJIzo1LQ5aqjkXb20xDxl 3ZJYXxdOM7P83SrVP2fEAel+yuvJm2To5iBekXtKxTSeHlnb9RD2m9/T47NBNGTuBbuyBSFUTRt G+XoPXRYvGBzi5EGgGYaSZPJdoSw== X-Google-Smtp-Source: AGHT+IFCeHUHZ8o9ekV/c+77/nX9iPRwbsYxu0u1T1i997Dl2Av4gPqLXFQx3wbBFDsMJ1AUDDf7weNp X-Received: from wrbgx8.prod.google.com ([2002:a05:6000:4708:b0:390:e710:324a]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2284:b0:3a0:b448:e654 with SMTP id ffacd0b85a97d-3a349927550mr4086391f8f.47.1747244645140; Wed, 14 May 2025 10:44:05 -0700 (PDT) Date: Wed, 14 May 2025 19:43:45 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1405; i=ardb@kernel.org; h=from:subject; bh=TxFz/hG01vyA1ZDzUGKKYj1NGAs9wXcTsurQl3x2mv4=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWqiwsrlNUoHqW/v7Ui9uq92Lzc5f1aDO/jh5Sb1fx 6+z3kc6SlkYxDgYZMUUWQRm/3238/REqVrnWbIwc1iZQIYwcHEKwEQCvjEyHOi68Gim9dW3Bd76 sn/tflxf2yIwn0XwqEn4l55ZF47WMDMy3GvUDTDOz7l4UdB6wdp1hx8qN+Q/kzllfp9vf+e51Ef fGAE= X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-14-ardb+git@google.com> Subject: [RFC PATCH 5/7] arm64/efi: Use a semaphore to protect the EFI stack and FP/SIMD state From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel Replace the spinlock in the arm64 glue code with a semaphore, so that the CPU can preempted while running the EFI runtime service. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/efi.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 44ad5e759af4..d01ae156bb63 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -164,12 +164,19 @@ asmlinkage efi_status_t efi_handle_corrupted_x18(efi_status_t s, const char *f) return s; } -static DEFINE_RAW_SPINLOCK(efi_rt_lock); +static DEFINE_SEMAPHORE(efi_rt_lock, 1); bool arch_efi_call_virt_setup(void) { + /* + * This might be called from a non-sleepable context so try to take the + * lock but don't block on it. This should never occur in practice, as + * all EFI runtime calls are serialized under the efi_runtime_lock. + */ + if (WARN_ON(down_trylock(&efi_rt_lock))) + return false; + efi_virtmap_load(); - raw_spin_lock(&efi_rt_lock); __efi_fpsimd_begin(); return true; } @@ -177,8 +184,8 @@ bool arch_efi_call_virt_setup(void) void arch_efi_call_virt_teardown(void) { __efi_fpsimd_end(); - raw_spin_unlock(&efi_rt_lock); efi_virtmap_unload(); + up(&efi_rt_lock); } asmlinkage u64 *efi_rt_stack_top __ro_after_init; From patchwork Wed May 14 17:43:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 889979 Received: from mail-wr1-f74.google.com (mail-wr1-f74.google.com [209.85.221.74]) (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 CCCB12882B4 for ; Wed, 14 May 2025 17:44:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244650; cv=none; b=c3ev1dVEfmFZ1KjnQP4vuj3rO9WmyY0QPc0KdKrM7NlDIsxWB7ZBra889dpr6+f+muKWRDh96/sy7n6W5HcuZKXloE7/PoTjHH+8P82hoadJ8t6vjETd+lMqb3LF2Hu3oszWBeTwJNpr/pcNZGvHMluGIRz++URLXLWa5Asv+Q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244650; c=relaxed/simple; bh=2pTyG7a78PYxDJeFo/V+utVWoYoeAwSEDNzrtnCQ2TU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=if+g8DHa6UHXh/jxLWS9uS27IyJeLo0Qaxc4BnLPO8iItsWmmrtOuJTg5huy+xxDKyFxkiq7qErpO97sqIfDslMA8f8Djaz8FnrSj7euDdPRnhmWzwTqzRKASmAkO4Zqvp00PGU+LRWkmTzowZbeKRca00OOjcUEMSxUI/vGry8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VbheYpyu; arc=none smtp.client-ip=209.85.221.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VbheYpyu" Received: by mail-wr1-f74.google.com with SMTP id ffacd0b85a97d-3a0adce033bso17354f8f.2 for ; Wed, 14 May 2025 10:44:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244647; x=1747849447; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=rPT2qHs8nb8woLd8l62ZcLF4l1Hy/juOm4dBzovnmEc=; b=VbheYpyuZmTK32ENushkLvqdzvpvoiit4idGHh9MdglHqz1lvUXEB2847hJHOF9Kbw hWOXB4DYvjwJrRweLh7k+TzdI20fOa/AhsziP5gnMLSr6jqbL5fgDIGlw77ijzPdPPNq Se11b3y6kIsyLnJVFkOEqGs2AG2sNYIKwiJLrRyqPqnk9b2ctzwAFIknOVQqZQ0Dl2Lj VBiqCYyY7jS4c87RQo/pPYOV2uFrxG2/f0xEgJ/3JEggshaYGr8mEOOPqVOMBQ8prSkn 8DDSkI2yWWUyri2aP1qP/zK5VbGt6gcBS61Bx9InhqkeFKhn2fsjccZ54Ug8Sg8lGxkf d/ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244647; x=1747849447; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rPT2qHs8nb8woLd8l62ZcLF4l1Hy/juOm4dBzovnmEc=; b=QMbNvT1MQWxcIAFxFX6rl5pDhM4O+L+lRpZMVkUHRr6Z4aGQa/PW8Pop6t0hBP8zOl XIo+WJz27NbRjEuGXPCnmRgoi445k5R44Xl17XPa0hFdoPJEDeoikDCJzLdSW21caihz lfkPGiNEOh+jWsfY/UoxGCKJCV0icUZaHJkC4aW+p88UTrzY2qX4iVKVjZ+3zoGMbb9Y Q7CImImFXIODNt/TKtH8eFBJ1gyd1M4hPLXe5R8qZUEabGH0BIvGAZ1KPFfIouSbxIKM aeGlyPh4ok9B05EtGOI8UU7nsMb0NT2JSqdTkURszdpje7KaAwfgeAxv/pJ8Mx8G+vO8 bkcw== X-Gm-Message-State: AOJu0YzFbCtnjlSII5ZKedljHU1pd6NzFQkMq3CnaHGF/y855fEP13br l1oxOOcAa61Jzhxc3dS2Gups+aFJdlkEhZPHfjmRVg3wL18FmQVvN05o1tjwQlvOJ+Dk6DmqERz y+shPAJHRJEG16Ar6VmgbX20XGlhEkiza2doIrf/dnl4lD11k2hzJFUb98MN1ghORz+c1SA3Fs1 anrkV10Ad4An+7IYaKiwSBK/FJjg== X-Google-Smtp-Source: AGHT+IGbwcdtxYzq8nDG7XB20QQ6m24gl78kM2NUn0+FEJqLZ7BDo2egTQqnLcfij6k5NsW+zWNEgZ3T X-Received: from wmrs6.prod.google.com ([2002:a05:600c:3846:b0:43d:1c63:a630]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:adf:fc11:0:b0:3a2:2586:581e with SMTP id ffacd0b85a97d-3a3499532e2mr3010019f8f.53.1747244647113; Wed, 14 May 2025 10:44:07 -0700 (PDT) Date: Wed, 14 May 2025 19:43:46 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1727; i=ardb@kernel.org; h=from:subject; bh=JhAXBUO5lApwzqV0/zxSwFWazHc5G4mQ1by8+P/Uv/8=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWljMtpUJVZ80e6ZI9Ra1zHxSJWYQVOd6b1nCEvHUX 3qhQjkdpSwMYhwMsmKKLAKz/77beXqiVK3zLFmYOaxMIEMYuDgFYCJyqQz/Q+7ZXWWb8qPRVdt3 3hqpZOWCDNay+XfdD6woEZAwjeRxZPjvHl77hpX3uNb8PJNws+OinS7mV6NZXMOPe5wSm1kYncI CAA== X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-15-ardb+git@google.com> Subject: [RFC PATCH 6/7] arm64/efi: Move uaccess en/disable out of efi_set_pgd() From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel efi_set_pgd() will no longer be called when invoking EFI runtime services via the efi_rts_wq work queue, but the uaccess en/disable are still needed when using PAN emulation using TTBR0 switching. So move these into the callers. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/efi.h | 3 --- arch/arm64/kernel/efi.c | 3 +++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm64/include/asm/efi.h b/arch/arm64/include/asm/efi.h index decf87777f57..abe9176a3a23 100644 --- a/arch/arm64/include/asm/efi.h +++ b/arch/arm64/include/asm/efi.h @@ -132,15 +132,12 @@ static inline void efi_set_pgd(struct mm_struct *mm) * exception when invoking the EFI run-time services. */ update_saved_ttbr0(current, mm); - uaccess_ttbr0_enable(); - post_ttbr_update_workaround(); } else { /* * Defer the switch to the current thread's TTBR0_EL1 * until uaccess_enable(). Restore the current * thread's saved ttbr0 corresponding to its active_mm */ - uaccess_ttbr0_disable(); update_saved_ttbr0(current, current->active_mm); } } diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index d01ae156bb63..5d188c6c44d7 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -177,6 +177,8 @@ bool arch_efi_call_virt_setup(void) return false; efi_virtmap_load(); + uaccess_ttbr0_enable(); + post_ttbr_update_workaround(); __efi_fpsimd_begin(); return true; } @@ -185,6 +187,7 @@ void arch_efi_call_virt_teardown(void) { __efi_fpsimd_end(); efi_virtmap_unload(); + uaccess_ttbr0_disable(); up(&efi_rt_lock); } From patchwork Wed May 14 17:43:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 890377 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 621282882CE for ; Wed, 14 May 2025 17:44:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244652; cv=none; b=VEG5oD2UQj9S0MlJWI/Jm5XhRVdsEeZtbCl2DvOis8RjvfC77lWmxiGdU6NG70wRvungGIu3700cjsnsCV/FrJUnsRuLt9KWfg1VxZWN+IWa8jCUSkhYW3HAxADQJP2A/0Sb5QnOvQfx1yXNUQAn8xY4+9Jg4dEB54N0W+GHrZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747244652; c=relaxed/simple; bh=mgDdIliBTbo4FHq86K7xhTUvkNSSj/cvEBekZIhmtfI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=r3YvChPDxZ3fik3rQpZBk/30SzUii0A8YD2zF6J1E1wwaTs0ztSBfu6loKgkAHlN+Krxi4wy05l82DlHayCmQHZiGyWbjS503y/L8E3RstOnlVOLtsayS4G+PRF0npIqv+XpETVaWm9b0igqEPaJn/Ovp/Fa5pvAhiHbVs7pauE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=R4qN7BRR; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="R4qN7BRR" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3a0b5c28f05so17331f8f.2 for ; Wed, 14 May 2025 10:44:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1747244649; x=1747849449; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=9m/dA5u8PP12xTyLEA47VdMolfQQBYIbnFJL4eUuTIo=; b=R4qN7BRRQgaHkyshZKF8AKwLbTplteOlS2AQSM3EJXNCg9Hzlea+lK7KX0TGtWXX35 GWHlBaDZcfJAGPjsMiNkzxRM0B+rz09iHYMb9jLEf6cEWwShFzy+7JaFNbRLCm0Y73LD 8lwV48bDeWkwoXecj/oWnU0Z6wW3I30B04QUfE91xggQ2YcgQeAgW1QVsAYixzKYNjIS 78h+A9xlmDpOvQidoPO1a1iTNvfUBDGhGAQX4irs2fQPdVLDkyx/+kp6chzLY7SEOKt0 139x/I6veudsSpcNEUhrh0fcD1JnuSFBQODoGh+BK2zKUV7XuO6MmZXMr2SXvJO+t9Wc ekXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747244649; x=1747849449; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=9m/dA5u8PP12xTyLEA47VdMolfQQBYIbnFJL4eUuTIo=; b=mcQ75fXw5mrF5vku5Ja7eB6eOnZS3vssp66q24mgSjBUEfMXvobqHRCf83V2x8Vyrr 2eZ815c74GolkMppaVqHDqh4jhAEaFhudWV56rJ2OQYjcLs1ipFPvYx+PS9lERiub1+q EUQHCHWrNvSr8xc8UUWny6NnxcDUt9PXSQIN00XN5JlZkWGuU934kYc/2UDzwyGnY4Zc mMsVzz5hsDAv3YKd8SdV9EbeJAU4oafstZnzffzzAb2DF8x3OBOk0zD29msrRgg+U/lf bXsf854eKnsCKyVVgoLYQ6g56rIuZ6CIfZNlac1U/f6DS9HAxHlecZyfgwvQqVwAwCW8 immA== X-Gm-Message-State: AOJu0YzM0UATjWNvWUSeFQ+ewKB9Y6+Mexp4DfigY66Vx2iFKEAQ/p92 lD3gL5gWIAmcrZPuRmoVSvfL7t6l5uQl8caYXj9BdvAN/PFJNcRi1MNt+TA0ESp1pIen1TW8tNC iIKGPrRKzURc00K/LNCTtoR+B+7plHI47Eyha43PFd/muJswuPtE7PuTjh+6KLNSu6d+ADBfqZ0 +uVG3Gx0EDjDsntzHQWiJsW1BI0g== X-Google-Smtp-Source: AGHT+IH3phkZ7ohlhjgxOaGGl2tv6LZdappybOOhIxd+mP8S8HpGAaQTtF38WgvqXaHzyraEHHalvwjR X-Received: from wmbbe14.prod.google.com ([2002:a05:600c:1e8e:b0:43b:bf16:d6be]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:40e0:b0:3a0:b807:73f5 with SMTP id ffacd0b85a97d-3a34994b80bmr3189200f8f.41.1747244649004; Wed, 14 May 2025 10:44:09 -0700 (PDT) Date: Wed, 14 May 2025 19:43:47 +0200 In-Reply-To: <20250514174339.1834871-9-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-efi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250514174339.1834871-9-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=2681; i=ardb@kernel.org; h=from:subject; bh=JjGNi4y/M2NE/6+1Wwj3Vc6eI4ogOEIDwoxo0yxqFF0=; b=owGbwMvMwCFmkMcZplerG8N4Wi2JIUPlWniyzKukuNYtPWVi83+nOgoYcF7St7l2WeCP/LLzO Wr7m9d1lLIwiHEwyIopsgjM/vtu5+mJUrXOs2Rh5rAygQxh4OIUgImk3mVkmHnt2ZKM6yE3I3Vv Ljbq2pLfmct77FIyQ2u3x8PJ5/XM/zAybGfwWlep2fBor0PGypszriS6OCo+zZojGrXHwTmjxqC NHQA= X-Mailer: git-send-email 2.49.0.1101.gccaa498523-goog Message-ID: <20250514174339.1834871-16-ardb+git@google.com> Subject: [RFC PATCH 7/7] arm64/efi: Call EFI runtime services without disabling preemption From: Ard Biesheuvel To: linux-efi@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Will Deacon , Mark Rutland , Sebastian Andrzej Siewior , Peter Zijlstra From: Ard Biesheuvel The only remaining reason why EFI runtime services are invoked with preemption disabled is the fact that the mm is swapped out behind the back of the context switching code. The kernel no longer disables preemption in kernel_neon_begin(). Furthermore, the EFI spec is being clarified to explicitly state that only baseline FP/SIMD is permitted in EFI runtime service implementations, and so the existing kernel mode NEON context switching code is sufficient to preserve and restore the execution context of an in-progress EFI runtime service call. Most EFI calls are made from the efi_rts_wq, which is serviced by a kthread. As kthreads never return to user space, they usually don't have an mm, and so we can use the existing infrastructure to swap in the efi_mm while the EFI call is in progress. This is visible to the scheduler, which will therefore reactivate the selected mm when switching out the kthread and back in again. Given that the EFI spec explicitly permits runtime services to be called with interrupts enabled, firmware code is already required to tolerate interruptions. So rather than disable preemption, disable only migration so that EFI runtime services are less likely to cause scheduling delays. Note, though, that the firmware executes at the same privilege level as the kernel, and is therefore able to disable interrupts altogether. Signed-off-by: Ard Biesheuvel --- arch/arm64/kernel/efi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index 5d188c6c44d7..1c86a891f6d7 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include @@ -176,7 +177,12 @@ bool arch_efi_call_virt_setup(void) if (WARN_ON(down_trylock(&efi_rt_lock))) return false; - efi_virtmap_load(); + if (preemptible() && (current->flags & PF_KTHREAD)) { + migrate_disable(); + kthread_use_mm(&efi_mm); + } else { + efi_virtmap_load(); + } uaccess_ttbr0_enable(); post_ttbr_update_workaround(); __efi_fpsimd_begin(); @@ -186,7 +192,12 @@ bool arch_efi_call_virt_setup(void) void arch_efi_call_virt_teardown(void) { __efi_fpsimd_end(); - efi_virtmap_unload(); + if (preemptible() && (current->flags & PF_KTHREAD)) { + kthread_unuse_mm(&efi_mm); + migrate_enable(); + } else { + efi_virtmap_unload(); + } uaccess_ttbr0_disable(); up(&efi_rt_lock); }