Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2402814imu; Thu, 24 Jan 2019 12:09:13 -0800 (PST) X-Google-Smtp-Source: ALg8bN6r+oYEKEKl8i/v83Au1jEca7fSw4xe/dv2g7Mm6nMyaqzLtAtFrwz1qinm61TNJC15UtrR X-Received: by 2002:a17:902:a83:: with SMTP id 3mr7490166plp.276.1548360553905; Thu, 24 Jan 2019 12:09:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548360553; cv=none; d=google.com; s=arc-20160816; b=0TWxMFCoDTbMzhycuELE3ktm0OKLffjU0G/QTuyzVmlYEjeRE221Wwtu50rrY+wSiU WzMgiXpllPNK75ZwH/MIkHxxFdIa02Y6d2iqIFkiufXpH6HF+x3GKrMwTLU9IZgn+sjo WHd0VbwmTTesHhmOrKyXE685NzPlNikbgFiZ4WYSIzgPf2Bt5Eb4LmpnKaBtBLvrxPJu 6/yBtMlY/3MpJqZHxrZXprbnsukB2+kNA4WszAnhu1m3eP9VVWR91TB9a8pfkjXfmFAa H+0gnzstbKmFR8krQNS28hEjq1492v5A32jnoRbRCusntSrSW3VQhaY/bOzoWFS1oV7x iUtg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=MqBuA6sK5/68LjCMtQv6lY2OrJzYEMyIVI9jQPASh4g=; b=E1vNvN2Z8MUUG8WDPoVUCU5tBaw5yDBd+ZCKxpMTodR9IqcGxGlt2x8hNPVrYMyeWL eIpYvpEc0iJ9Yec8/85n9BXWrhU+V97Af15m3kpM6esNH8F0kW8WZmPerEWTToGPnhUs P9nyVVUVsv1uEH0D7sevUW6YcxW/3fbaiuTGfPB9L0Pgdh1G7NvBGeMMI6Ap10bRoVky FGKt2wG7iYebvYiYs72Oili+H+NdKVetUOtATJFURm8adE/tYJ+RmrBNqovlhvoJ8NRC Qj3hxBeowk155js0acEQsB7XkRXylCyF44JSO9Sip6zJ/jwrbbMSHnSz1KFslnGZl2vP FEyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ezLxUTbr; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s62si24397157pgc.113.2019.01.24.12.08.58; Thu, 24 Jan 2019 12:09:13 -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=ezLxUTbr; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731058AbfAXT2x (ORCPT + 99 others); Thu, 24 Jan 2019 14:28:53 -0500 Received: from mail.kernel.org ([198.145.29.99]:55680 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731031AbfAXT2s (ORCPT ); Thu, 24 Jan 2019 14:28:48 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 70285218FE; Thu, 24 Jan 2019 19:28:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1548358126; bh=s7JqzKQj1vzEpUxD5JeQzJK1KNyKvhEaR5mEJLXvmZA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ezLxUTbr6KpmzfVyRMEo9jS5VOe16Ltgi9cLkSv/nKZn86Zun0tNHHu9ags3fdcmL 3sxsJ+jIhYqCNkuIFm7iSbUZCE8xic2G4TecMHVHbRYPKL76LCk6azfBamY7c8iR0N kV6tt0zQt3icDhsLYReTI6UHfVE5CBYwSnS846U8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Breno Leitao , Michael Ellerman , Sasha Levin Subject: [PATCH 4.4 084/104] powerpc/pseries/cpuidle: Fix preempt warning Date: Thu, 24 Jan 2019 20:20:13 +0100 Message-Id: <20190124190204.327469191@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190124190154.968308875@linuxfoundation.org> References: <20190124190154.968308875@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 2b038cbc5fcf12a7ee1cc9bfd5da1e46dacdee87 ] When booting a pseries kernel with PREEMPT enabled, it dumps the following warning: BUG: using smp_processor_id() in preemptible [00000000] code: swapper/0/1 caller is pseries_processor_idle_init+0x5c/0x22c CPU: 13 PID: 1 Comm: swapper/0 Not tainted 4.20.0-rc3-00090-g12201a0128bc-dirty #828 Call Trace: [c000000429437ab0] [c0000000009c8878] dump_stack+0xec/0x164 (unreliable) [c000000429437b00] [c0000000005f2f24] check_preemption_disabled+0x154/0x160 [c000000429437b90] [c000000000cab8e8] pseries_processor_idle_init+0x5c/0x22c [c000000429437c10] [c000000000010ed4] do_one_initcall+0x64/0x300 [c000000429437ce0] [c000000000c54500] kernel_init_freeable+0x3f0/0x500 [c000000429437db0] [c0000000000112dc] kernel_init+0x2c/0x160 [c000000429437e20] [c00000000000c1d0] ret_from_kernel_thread+0x5c/0x6c This happens because the code calls get_lppaca() which calls get_paca() and it checks if preemption is disabled through check_preemption_disabled(). Preemption should be disabled because the per CPU variable may make no sense if there is a preemption (and a CPU switch) after it reads the per CPU data and when it is used. In this device driver specifically, it is not a problem, because this code just needs to have access to one lppaca struct, and it does not matter if it is the current per CPU lppaca struct or not (i.e. when there is a preemption and a CPU migration). That said, the most appropriate fix seems to be related to avoiding the debug_smp_processor_id() call at get_paca(), instead of calling preempt_disable() before get_paca(). Signed-off-by: Breno Leitao Signed-off-by: Michael Ellerman Signed-off-by: Sasha Levin --- drivers/cpuidle/cpuidle-pseries.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c index 07135e009d8b..601a6c3acc7f 100644 --- a/drivers/cpuidle/cpuidle-pseries.c +++ b/drivers/cpuidle/cpuidle-pseries.c @@ -240,7 +240,13 @@ static int pseries_idle_probe(void) return -ENODEV; if (firmware_has_feature(FW_FEATURE_SPLPAR)) { - if (lppaca_shared_proc(get_lppaca())) { + /* + * Use local_paca instead of get_lppaca() since + * preemption is not disabled, and it is not required in + * fact, since lppaca_ptr does not need to be the value + * associated to the current CPU, it can be from any CPU. + */ + if (lppaca_shared_proc(local_paca->lppaca_ptr)) { cpuidle_state_table = shared_states; max_idle_state = ARRAY_SIZE(shared_states); } else { -- 2.19.1