Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5138646imu; Tue, 8 Jan 2019 12:12:44 -0800 (PST) X-Google-Smtp-Source: ALg8bN562N2JWEGj9DIxLB6Nqff0k1to1LShVM+EKcyJF15jiYDFUnaicQtVlCv/+JUFRyROV32O X-Received: by 2002:a17:902:145:: with SMTP id 63mr3141264plb.256.1546978364576; Tue, 08 Jan 2019 12:12:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546978364; cv=none; d=google.com; s=arc-20160816; b=yCsTGpQWHI3Yxj1paOxtHbovQKC361vaDg3H0gNGwPN6P6m4ZFpUNLupP+5RpTTkZv E6SOOrdpMqm0Thrp7eZhB40Som8ysMXJwIGMyCBCQvqFp4JrE+BP6IociWa+MSbSFE1s 7W4z6NG0yrnROGxbnnLB2Ygv0ycE0nrujCBMq6ZQ8r2O5FR5Ceq8erj89ePq94tT9XXt V3R9+nuv/t9Bk9Yj57PEOHDiqhoEIssUT7UP1i7Jk/0pfe1Pxcn6DwrLiXGhUllAAjLE eaqrtNK6UKpsn7NhIsL3Xpzqs+3X7MOC5C8Xkq1B3zrDFp5HCIEALjL1SRVraGK34uEP 7/cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=UQCJdm3gnLZISmrHboff3YeC/0HQks4oGWJRqDYuOnI=; b=CFf3hN/WT0js1gdXS7e3ssOOCzBlmxSTmJZSow+rH6Yr3NkKNfthzRu16z4loPWey/ 9MuAjTMFD0YwaYXF/HpOBiSto/PazOH3c+yAmOKwiiiuMz63wCmOusJ6CYChk1aalcm7 olU5FBFjJsXq4ekfAGc76z7xspzF4vmFiVzUWSINsV0Ot4fQfCBCsUPDd3F9fy2cepYO YaBuAYNBfKUF++0E33L/Vq6pzEd6VzUnvyJJzsXhDva+TwBHLQI7v+QTi94u1pVaCMPO WuDnejcfED7D7ojoyC2BoWDG6XsrUd301uHya+0zw/IaZADBWsxD1xtNxKuNJfBZytav e/Tg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ygugWTz2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w8si6837363pgm.467.2019.01.08.12.12.26; Tue, 08 Jan 2019 12:12:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ygugWTz2; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732042AbfAHUJP (ORCPT + 99 others); Tue, 8 Jan 2019 15:09:15 -0500 Received: from mail.kernel.org ([198.145.29.99]:33730 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729698AbfAHT1a (ORCPT ); Tue, 8 Jan 2019 14:27:30 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2306520827; Tue, 8 Jan 2019 19:27:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546975649; bh=0JJxdttynjb1iwPy7ZYsLy9rMQ5I+LAfyaLVx3DVeJ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ygugWTz2S31i5Rl9Ts2SEeYlVXIca+kG3e+3iqYvCJYA+RRd9bcW5ZwWeOylS/cM2 GYAi5J6M87v4u94Nq3/fHb3jSqjsuwjMIcddv+6A+ebY4TFEIsTKYXa0gxzd5VEtJI dLf8Az8SZrLrehEE7ahfVABqYqDA17htTy8Ty76s= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: James Morse , Will Deacon , Sasha Levin Subject: [PATCH AUTOSEL 4.20 033/117] arm64: Use a raw spinlock in __install_bp_hardening_cb() Date: Tue, 8 Jan 2019 14:25:01 -0500 Message-Id: <20190108192628.121270-33-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190108192628.121270-1-sashal@kernel.org> References: <20190108192628.121270-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: James Morse [ Upstream commit d8797b125711f23d83f5a71e908d34dfcd1fc3e9 ] __install_bp_hardening_cb() is called via stop_machine() as part of the cpu_enable callback. To force each CPU to take its turn when allocating slots, they take a spinlock. With the RT patches applied, the spinlock becomes a mutex, and we get warnings about sleeping while in stop_machine(): | [ 0.319176] CPU features: detected: RAS Extension Support | [ 0.319950] BUG: scheduling while atomic: migration/3/36/0x00000002 | [ 0.319955] Modules linked in: | [ 0.319958] Preemption disabled at: | [ 0.319969] [] cpu_stopper_thread+0x7c/0x108 | [ 0.319973] CPU: 3 PID: 36 Comm: migration/3 Not tainted 4.19.1-rt3-00250-g330fc2c2a880 #2 | [ 0.319975] Hardware name: linux,dummy-virt (DT) | [ 0.319976] Call trace: | [ 0.319981] dump_backtrace+0x0/0x148 | [ 0.319983] show_stack+0x14/0x20 | [ 0.319987] dump_stack+0x80/0xa4 | [ 0.319989] __schedule_bug+0x94/0xb0 | [ 0.319991] __schedule+0x510/0x560 | [ 0.319992] schedule+0x38/0xe8 | [ 0.319994] rt_spin_lock_slowlock_locked+0xf0/0x278 | [ 0.319996] rt_spin_lock_slowlock+0x5c/0x90 | [ 0.319998] rt_spin_lock+0x54/0x58 | [ 0.320000] enable_smccc_arch_workaround_1+0xdc/0x260 | [ 0.320001] __enable_cpu_capability+0x10/0x20 | [ 0.320003] multi_cpu_stop+0x84/0x108 | [ 0.320004] cpu_stopper_thread+0x84/0x108 | [ 0.320008] smpboot_thread_fn+0x1e8/0x2b0 | [ 0.320009] kthread+0x124/0x128 | [ 0.320010] ret_from_fork+0x10/0x18 Switch this to a raw spinlock, as we know this is only called with IRQs masked. Signed-off-by: James Morse Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- arch/arm64/kernel/cpu_errata.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index 6ad715d67df8..99622e5ad21b 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -135,7 +135,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn, const char *hyp_vecs_start, const char *hyp_vecs_end) { - static DEFINE_SPINLOCK(bp_lock); + static DEFINE_RAW_SPINLOCK(bp_lock); int cpu, slot = -1; /* @@ -147,7 +147,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn, return; } - spin_lock(&bp_lock); + raw_spin_lock(&bp_lock); for_each_possible_cpu(cpu) { if (per_cpu(bp_hardening_data.fn, cpu) == fn) { slot = per_cpu(bp_hardening_data.hyp_vectors_slot, cpu); @@ -163,7 +163,7 @@ static void __install_bp_hardening_cb(bp_hardening_cb_t fn, __this_cpu_write(bp_hardening_data.hyp_vectors_slot, slot); __this_cpu_write(bp_hardening_data.fn, fn); - spin_unlock(&bp_lock); + raw_spin_unlock(&bp_lock); } #else #define __smccc_workaround_1_smc_start NULL -- 2.19.1