Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3707610imm; Tue, 17 Jul 2018 09:02:22 -0700 (PDT) X-Google-Smtp-Source: AAOMgpc4MOW87W9iiQnfZTxgbXo+50FHiaMLBGSR/JId/kKXcrrCK6SZjIGDvWvkhBv3Q8d+GiMs X-Received: by 2002:a63:cd02:: with SMTP id i2-v6mr2109695pgg.93.1531843342668; Tue, 17 Jul 2018 09:02:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531843342; cv=none; d=google.com; s=arc-20160816; b=WCrvVv0CH4fJbxb6Uu/+qmTVXEhjhdrYoADZn8/AXlHUEUMZKwybwFXbM1ftEyDPUd LcQimFxUJJFFicNOlB4qxJ/6aHr3xSVMblEPoaeXWbpzIiJwLWHXkrgJVreqljLUTFfS x4tRnsZIrW/ERGfktq4lG/9AjhmUz5adry72JiqR5tAdp0j848w7swLMAfkf6j3OA+z8 PAK5Hf73nZfnT57jm9JjsvX4ODbHChwDNlGFfr1smeLNWbq5fkMSSqlwhmUy11LbZ8dp 69b7DxCwfNAvu5pn5IAHU+M0F3CbeWUHzLz3DhCeozcwCDbcmeaKWcMdk7sN9yLsdMzw kfwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:references:in-reply-to:date :subject:cc:to:from:arc-authentication-results; bh=Iqi3rG89rqtWPekfhs2AP7Tpic+U9zOdUU5mSCk/2Oo=; b=T7k73LJt0u6BIRpfaIrE2ma+K290Sbxk1fUWDYETu7q25GWsz5USS2syOzAHwbYxtF oc26mSOi5Z592P+A9RoC2EiSYq9PyM7VLnsU5/xbtGj2U/vTOskfGK/zzVOR1TirW7bY vJYt+YoRyDNjPHXF5Cgc/25R4O6EmXCU/vV6TTSLEZsbW28pXghtiPrYrtrKeqAyYzc5 X7KyZ5bDBD1BqSJfhWjOHT6eK0gVCV0hRuouBX1SKt7NuVJ2A4syklaNl+hSILetZq56 7ObTo0LKwOuMTDySJRIs/Fg2Z2/Ld+OnqFSQhg+TIlG6igKJ2aLmF2pN42qAgKEHJm57 GpeA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q16-v6si1172767pgg.619.2018.07.17.09.02.07; Tue, 17 Jul 2018 09:02:22 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730375AbeGQQeM (ORCPT + 99 others); Tue, 17 Jul 2018 12:34:12 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:51106 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730185AbeGQQeL (ORCPT ); Tue, 17 Jul 2018 12:34:11 -0400 Received: from pps.filterd (m0098394.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w6HG0hig094061 for ; Tue, 17 Jul 2018 12:00:51 -0400 Received: from e33.co.us.ibm.com (e33.co.us.ibm.com [32.97.110.151]) by mx0a-001b2d01.pphosted.com with ESMTP id 2k9h49fbt5-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 17 Jul 2018 12:00:49 -0400 Received: from localhost by e33.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 17 Jul 2018 10:00:35 -0600 Received: from b03cxnp08025.gho.boulder.ibm.com (9.17.130.17) by e33.co.us.ibm.com (192.168.1.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Tue, 17 Jul 2018 10:00:32 -0600 Received: from b03ledav004.gho.boulder.ibm.com (b03ledav004.gho.boulder.ibm.com [9.17.130.235]) by b03cxnp08025.gho.boulder.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id w6HG0VPL17629666 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 17 Jul 2018 09:00:31 -0700 Received: from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6186778067; Tue, 17 Jul 2018 10:00:31 -0600 (MDT) Received: from b03ledav004.gho.boulder.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E96E078068; Tue, 17 Jul 2018 10:00:30 -0600 (MDT) Received: from sofia.ibm.com (unknown [9.77.206.69]) by b03ledav004.gho.boulder.ibm.com (Postfix) with ESMTP; Tue, 17 Jul 2018 10:00:30 -0600 (MDT) Received: by sofia.ibm.com (Postfix, from userid 1000) id 5C1952E2F46; Tue, 17 Jul 2018 21:30:25 +0530 (IST) From: "Gautham R. Shenoy" To: Michael Ellerman , Benjamin Herrenschmidt , Michael Neuling , Vaidyanathan Srinivasan Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Florian Weimer , "Gautham R. Shenoy" , Oleg Nesterov Subject: [RESEND][PATCH] powerpc/powernv : Save/Restore SPRG3 on entry/exit from stop. Date: Tue, 17 Jul 2018 21:30:16 +0530 X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1531826849-31838-1-git-send-email-ego@linux.vnet.ibm.com> References: <1531826849-31838-1-git-send-email-ego@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 18071716-0036-0000-0000-00000A10AF16 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00009380; HX=3.00000241; KW=3.00000007; PH=3.00000004; SC=3.00000266; SDB=6.01062154; UDB=6.00545323; IPR=6.00840012; MB=3.00022173; MTD=3.00000008; XFM=3.00000015; UTC=2018-07-17 16:00:35 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 18071716-0037-0000-0000-000048225FF8 Message-Id: <1531843216-22209-1-git-send-email-ego@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-07-17_04:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1806210000 definitions=main-1807170167 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Gautham R. Shenoy" On 64-bit servers, SPRN_SPRG3 and its userspace read-only mirror SPRN_USPRG3 are used as userspace VDSO write and read registers respectively. SPRN_SPRG3 is lost when we enter stop4 and above, and is currently not restored. As a result, any read from SPRN_USPRG3 returns zero on an exit from stop4 and above. Thus in this situation, on POWER9, any call from sched_getcpu() always returns zero, as on powerpc, we call __kernel_getcpu() which relies upon SPRN_USPRG3 to report the CPU and NUMA node information. Fix this by saving the SPRN_SPRG3 before entering a deep stop state, and restoring it back on wakeup from the stop state. Fixes: e1c1cfed5432 ("powerpc/powernv: Save/Restore additional SPRs for stop4 cpuidle") Reported-by: Florian Weimer Cc: Oleg Nesterov Cc: Michael Neuling Cc: Michael Ellerman Cc: Benjamin Herrenschmidt Cc: Vaidyanathan Srinivasan Signed-off-by: Gautham R. Shenoy --- arch/powerpc/include/asm/cpuidle.h | 1 + arch/powerpc/kernel/asm-offsets.c | 1 + arch/powerpc/kernel/idle_book3s.S | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/arch/powerpc/include/asm/cpuidle.h b/arch/powerpc/include/asm/cpuidle.h index e210a83..03fa904 100644 --- a/arch/powerpc/include/asm/cpuidle.h +++ b/arch/powerpc/include/asm/cpuidle.h @@ -77,6 +77,7 @@ struct stop_sprs { u64 mmcr1; u64 mmcr2; u64 mmcra; + u64 sprg3; }; extern u32 pnv_fastsleep_workaround_at_entry[]; diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 89cf155..a35ebfc 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c @@ -776,6 +776,7 @@ int main(void) STOP_SPR(STOP_MMCR1, mmcr1); STOP_SPR(STOP_MMCR2, mmcr2); STOP_SPR(STOP_MMCRA, mmcra); + STOP_SPR(STOP_SPRG3, sprg3); #endif DEFINE(PPC_DBELL_SERVER, PPC_DBELL_SERVER); diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index d85d551..5069d42 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -120,6 +120,9 @@ power9_save_additional_sprs: mfspr r4, SPRN_MMCR2 std r3, STOP_MMCR1(r13) std r4, STOP_MMCR2(r13) + + mfspr r3, SPRN_SPRG3 + std r3, STOP_SPRG3(r13) blr power9_restore_additional_sprs: @@ -144,7 +147,9 @@ power9_restore_additional_sprs: mtspr SPRN_MMCR1, r4 ld r3, STOP_MMCR2(r13) + ld r4, STOP_SPRG3(r13) mtspr SPRN_MMCR2, r3 + mtspr SPRN_SPRG3, r4 blr /* -- 1.9.4