From patchwork Thu May 18 10:21:13 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Leo Yan X-Patchwork-Id: 100079 Delivered-To: patch@linaro.org Received: by 10.140.96.100 with SMTP id j91csp645668qge; Thu, 18 May 2017 03:21:48 -0700 (PDT) X-Received: by 10.98.198.72 with SMTP id m69mr3679445pfg.169.1495102908319; Thu, 18 May 2017 03:21:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1495102908; cv=none; d=google.com; s=arc-20160816; b=T6jImBwopHMXZuZjVLGvDWOs9fw8Je/3TJ/UdlLA8pN6rTwlRLf1RV1xsz4oHlTytN SBtWaNNN1wDNNuaw2lfLG8HmYYXJdp38JjO0HQfTsDOVTj6cUQm7OIShsZSbm9GD2uXo hc7/n+GppbVCB0xB94kgkX/pJg1z23G1P86EeLs5SKNVkk1wFiUAV+sePKnoKdCLY+zy IKrLGh3RUqb0VjEDkqHahQ3XRvLJ2U6ucxnxy6YpPAGFVYifLkCBYeCjFY8ZhD8d/FaD imzOHmYtM8aO6pF7wKfhMroxZBgT4weLf1Z1ebe2weZEppchX0d8uQbD7i17IqzxgvoK v7oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=K7qiOi7XsZguMIvLJW38HvOq0MydPbaQIltFMlT7yWU=; b=Qh0NTXRE44zxgTutmngJww4pt/YZvQltON0zWz4k7ZG9SieUiPdfCgn8RsM6u1w84P NPJTzcb6On2nMwh2QXNfSLNZ4Kp0GhgAaaSeSAKXJ+1mmUXeu325fE7xSH6dcCf7ctVZ 8aabP07np13r3+I2qbpVHlz67nEAYJlRAWAS/KKt1hEJnI6uSKXqKAqJjAK9NYCcVFuP XEFYp/Cw6B56mAZx9nVZ1LFYJHk/oLDvg+SHD7SeReckqKNZxStUslukjAbahnWZPWmq xEr3t9p01ZwjKROy1EhFylmQ/sS5dUlKmaFpRD9NmCkbNgzpMU0ZiLFRjlV6H8Xn7qed Ed8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org; 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=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w71si4800264pfa.128.2017.05.18.03.21.48; Thu, 18 May 2017 03:21:48 -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; dkim=pass header.i=@linaro.org; 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=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755244AbdERKVe (ORCPT + 25 others); Thu, 18 May 2017 06:21:34 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:34259 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751527AbdERKVc (ORCPT ); Thu, 18 May 2017 06:21:32 -0400 Received: by mail-pf0-f170.google.com with SMTP id 9so21751973pfj.1 for ; Thu, 18 May 2017 03:21:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=K7qiOi7XsZguMIvLJW38HvOq0MydPbaQIltFMlT7yWU=; b=RYpsSF9y/IaZ4WDZlmlmAAsCLhilNFodo9hlpk1g9JB0kzN6kzsvPl1VgdjKVUJOtI PNfDLAtX4uBlgOSGwns1HzRiKXVRhsZdSPAPW2no2184hIeU04zV3NyCtifQiNv5AqQb T8dfZeKqZDDZIHLREHiGO1Rv5nyJqWcz7wBao= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=K7qiOi7XsZguMIvLJW38HvOq0MydPbaQIltFMlT7yWU=; b=TkgrAEO6y9Y8s5N16siWS/PUa+xBp9L4Xrj1YQURFB98bGjhvL+yAc/YA655Gfsgwa aANRFJoA9QLl6IorNEmbD5oyWAPXkTM2ji3KVrM+tk1ZFNHQaG/5rH6AgArfdlIXprim 2w/1kgnQbHI2tspQEu3efGk9oO0h3kynsagkgDab8Ww0cEde2ttZa538rphEn3/4J/gX ul2SGC7ZfAZ9ypeUcN44jFWT6JdUqUogjq52+HwQ9A/AYctFzhBEzhbXNvfpvlkA6kyY MvEY2ZG4M6n5L6xHJTfUDov69KqEK837orkK3NcWB/vpzxXnXfLWVvJC25q+/ecVL1z6 EdZA== X-Gm-Message-State: AODbwcBHUfyRHFc74Bl5GM5ay7vUKxfUYGYsr21qJuUAflXh9QZ+unts mvPMmuBMnEWnOIBs X-Received: by 10.99.114.94 with SMTP id c30mr3662533pgn.6.1495102891905; Thu, 18 May 2017 03:21:31 -0700 (PDT) Received: from localhost.localdomain (li1627-128.members.linode.com. [172.104.47.128]) by smtp.gmail.com with ESMTPSA id g10sm9116504pgn.35.2017.05.18.03.21.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 18 May 2017 03:21:30 -0700 (PDT) From: Leo Yan To: Catalin Marinas , Will Deacon , Suzuki K Poulose , Mark Rutland , Marc Zyngier , Ard Biesheuvel , James Morse , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Guodong Xu , Haojian Zhuang Cc: Leo Yan Subject: [PATCH] arm64: cpufeature: check translation granule size based on kernel config Date: Thu, 18 May 2017 18:21:13 +0800 Message-Id: <1495102873-10858-1-git-send-email-leo.yan@linaro.org> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the big.LITTLE system with two clusters, one is CA53 cluster and another is CA73 cluster. CA53 doesn't support 16KB memory translation granule size (4.3.21 AArch64 Memory Model Feature Register 0, EL1; ARM DDI 0500F), but CA73 supports this feature (4.3.27 AArch64 Memory Model Feature Register 0, EL1; ARM 100048_0002_04_en). As result, the kernel reports log for "Unexpected variation" as below. [ 0.182113] CPU features: SANITY CHECK: Unexpected variation in SYS_ID_AA64MMFR0_EL1. Boot CPU: 0x00000000001122, CPU4: 0x00000000101122 [ 0.182118] [ 0.182124] ------------[ cut here ]------------ [ 0.182140] WARNING: CPU: 4 PID: 0 at arch/arm64/kernel/cpufeature.c:636 update_cpu_features+0x400/0x408 [ 0.182141] Modules linked in: [ 0.182144] [ 0.182149] CPU: 4 PID: 0 Comm: swapper/4 Not tainted 4.11.0-08573-g2935db7 #1 [ 0.182151] Hardware name: HiKey960 (DT) [ 0.182154] task: ffff8000bb2c4e00 task.stack: ffff8000bb2dc000 [ 0.182156] PC is at update_cpu_features+0x400/0x408 [ 0.182158] LR is at update_cpu_features+0x400/0x408 [ 0.182161] pc : [] lr : [] pstate: 600001c5 [ 0.182161] sp : ffff8000bb2dff70 [ 0.182163] x29: ffff8000bb2dff70 x28: 0000000000000000 [ 0.182166] x27: 0000000000000000 x26: 0000000000000000 [ 0.182168] x25: 0000000000000000 x24: 0000000000000000 [ 0.182170] x23: 0000000000000000 x22: ffff000008f9f108 [ 0.182173] x21: 0000000000000004 x20: ffff8000bef764d8 [ 0.182175] x19: 0000000000000001 x18: 0000000000000000 [ 0.182178] x17: 0000000000000000 x16: 0000000000000000 [ 0.182180] x15: 0000000000000000 x14: 455f3052464d4d34 [ 0.182182] x13: 3641415f44495f53 x12: 5953206e69206e6f [ 0.182184] x11: 6974616972617620 x10: ffff000008fa6ae0 [ 0.182187] x9 : 0000000000000000 x8 : ffff000008fa88fc [ 0.182189] x7 : 0000000000000000 x6 : 00000000007e6647 [ 0.182192] x5 : 0000000000000000 x4 : 0000000000000000 [ 0.182194] x3 : ffffffffffffffff x2 : 00008000b6120000 [ 0.182196] x1 : ffff8000bb2c4e00 x0 : 0000000000000022 [ 0.182198] [ 0.182203] ---[ end trace e3d886f1604bd987 ]--- [ 0.182205] Call trace: [ 0.182208] Exception stack(0xffff8000bb2dfda0 to 0xffff8000bb2dfed0) [ 0.182211] fda0: 0000000000000001 0001000000000000 ffff8000bb2dff70 ffff00000808e4a0 [ 0.182214] fdc0: ffff8000bb2dfef0 ffff000008c53880 0000000000000000 0000000000000000 [ 0.182215] fde0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 [ 0.182218] fe00: 0000000000000000 ffff000008c53880 ffff8000bb2dff70 ffff8000bb2dff70 [ 0.182220] fe20: ffff8000bb2dff30 00000000ffffffc8 ffff8000bb2dfe60 ffff000008110ac4 [ 0.182222] fe40: 0000000000000022 ffff8000bb2c4e00 00008000b6120000 ffffffffffffffff [ 0.182224] fe60: 0000000000000000 0000000000000000 00000000007e6647 0000000000000000 [ 0.182227] fe80: ffff000008fa88fc 0000000000000000 ffff000008fa6ae0 6974616972617620 [ 0.182229] fea0: 5953206e69206e6f 3641415f44495f53 455f3052464d4d34 0000000000000000 [ 0.182230] fec0: 0000000000000000 0000000000000000 [ 0.182232] [] update_cpu_features+0x400/0x408 [ 0.182236] [] cpuinfo_store_cpu+0x48/0x50 [ 0.182238] [] secondary_start_kernel+0xa8/0x118 [ 0.182242] [<000000000098b1c4>] 0x98b1c4 [...] This patch is to change the checking CPU feature for memory translation granule size based on kernel configuration. If kernel configuration has selected to use one specific memory translation granule size, then we will do strict sanity checking cross all CPUs. Otherwise we can skip to check unused features for memory translation granule size if kernel doesn't use it. Signed-off-by: Leo Yan --- arch/arm64/kernel/cpufeature.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) -- 1.9.1 Signed-off-by: Leo Yan diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index 94b8f7f..938ddac 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -117,9 +117,21 @@ }; static const struct arm64_ftr_bits ftr_id_aa64mmfr0[] = { +#ifdef CONFIG_ARM64_4K_PAGES S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI), +#else + S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN4_SHIFT, 4, ID_AA64MMFR0_TGRAN4_NI), +#endif +#ifdef CONFIG_AARM64_64K_PAGES S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI), +#else + S_ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN64_SHIFT, 4, ID_AA64MMFR0_TGRAN64_NI), +#endif +#ifdef CONFIG_AARM64_16K_PAGES ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI), +#else + ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_TGRAN16_SHIFT, 4, ID_AA64MMFR0_TGRAN16_NI), +#endif ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_EXACT, ID_AA64MMFR0_BIGENDEL0_SHIFT, 4, 0), /* Linux shouldn't care about secure memory */ ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_EXACT, ID_AA64MMFR0_SNSMEM_SHIFT, 4, 0),