From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756004AbcANCv0 (ORCPT ); Wed, 13 Jan 2016 21:51:26 -0500 Received: from mail-bn1bon0070.outbound.protection.outlook.com ([157.56.111.70]:54300 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755362AbcANCvU (ORCPT ); Wed, 13 Jan 2016 21:51:20 -0500 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0O0X99D-07-C64-02 X-M-MSG: From: Huang Rui To: Borislav Petkov , Peter Zijlstra , "Ingo Molnar" , Andy Lutomirski , "Thomas Gleixner" , Robert Richter , Jacob Shin , John Stultz , =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Weisbecker?= CC: , , , Guenter Roeck , Andreas Herrmann , Suravee Suthikulpanit , Aravind Gopalakrishnan , Borislav Petkov , "Fengguang Wu" , Aaron Lu , Huang Rui Subject: [PATCH v2 2/5] x86/amd: add accessor for number of cores per compute unit Date: Thu, 14 Jan 2016 10:50:05 +0800 Message-ID: <1452739808-11871-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1452739808-11871-1-git-send-email-ray.huang@amd.com> References: <1452739808-11871-1-git-send-email-ray.huang@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(1096002)(92566002)(5003600100002)(5001770100001)(97736004)(5003940100001)(586003)(189998001)(101416001)(36756003)(47776003)(4326007)(1220700001)(76176999)(5008740100001)(2906002)(106466001)(2950100001)(77096005)(19580395003)(50986999)(86362001)(105586002)(53416004)(229853001)(50466002)(48376002)(50226001)(19580405001)(87936001)(33646002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR12MB0860;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;2:uyfAfOhtJ7bOczIaJgQ5HZL5WkPh9uxhvwQCtVgcEXkDA5e5YvlWE/Qip/aP56eSmlZ1zMK/lp7ZCtNHWoTSl2Cf+GjBFM6sN80bTgRmBegPlFbHuucEZyVrqIOAeB7/MqabY1QcooIrizb/eTDruw==;3:GbVw0rEKVpKlIr4vAvzyzobiOSw3IPOuJDGJbhDav2MMGXdhnwSrO4UqvH30cyxasg4CYs2kQvGyTRspW6iKk2BthgNGsirCXoA5XqRMThbqtqAQsJ8hGC2sv7JyCUYoajlXHccIM7S8ErgG4RxCP1oM+rt91B00O+tsLK4+yUcaXM7EIvnR6ybv3+mOeXR8eXxrtZcFeUY8kl+T54NWdial46WLNf9aqL5AoaAoXvc=;25:cHjcoevdbz1mUy0jvfvYsM/HiYrXYDRfpRl76F9p3irxTWHtAEW3BjDjWJjh4wOTjHtMAqbXpi3ZTq6qmzF4YMWIJglx7aLR9OW4YKvwU+FfTcutlxSm9CGromAPlrEL7HYsz7SgW+soOGUZfrjwdSZlt9nMmWM4g6WxeZx0Y6TmAkDIdRkT4IoZtHtKsckbReEk8xkd8r3K5DeSHZ607ogJbK/PZXAjx8q17G9dQMOo+4ZHJeVIv5CZOzvAMJl8 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0860; X-MS-Office365-Filtering-Correlation-Id: dc21e6e2-c4ce-40f5-681d-08d31c8d9266 X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;20:g8oIA2DqHMfZGZqLUG+fWvXAJSObGyEtm9eclOt3VxZNDyEvYgq79pEIeKxTgYkz+wvQIGrkgRYOxxAfPCnP8daXFmpIO2mkNUHAMXG8ahldR1OZ88Rocg9QNMootlN3I9KK/VnEf8AjFPbSXSx6OBxdHglALYP7JM3nCXYXBr8WpegCSB++YMJPmPl7RaK8XsO0JAlmJiRJjYk4C/Np5kGjiQfdEzHwhLKoBoBHYZo/FbOBioGaN79TK5MsxM+eCrJVRWrGSJg3faUoBQCBh88nb/DcbDhExa4BTU5tpNeQzwzpTkpowEedoX9gmfi1b07SFu0gtA1hQAdrdiJaY9fr4rqsMK6Vp9UFYDwW7nUWudadGamQcMWPZbDQYMnqEMAReMBbckFU06F0KvdRXJdd70RJI9cvIQagQbcb9Ep2vMbfuuQPV3FI3bWFsm2U3Dv1P7+bgPwzbcUUuadBtgHeQ9zgNShb3Y/gKqJ/S54zaUAG6+k7R5DYR1y9kVUY X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(8121501046)(13018025)(5005006)(13015025)(13017025)(10201501046)(3002001);SRVR:DM3PR12MB0860;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0860; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;4:5oer5EGZKqae1vsCgWL7L61/ce1ocD/p+lcjzgf2vgb7zLComeKqTD90iB8KGvqTGTVv1uEOPWo93HwtBFcJToPbYCXeOqG/pb9ndeW8CRBuYMQnj895hzOSj8l+c05/LCeTTuvEji6EtzQ95cUkdJvtE7nS4AzOJXo//1CrIXIi4ATheVuOcYzAmA9zbU1G24LmAr9ZaYP9qKJxvvWL//K7Itj/BPaIsdBXKPsj8u6xlKdDCJPavmFWmq20D8kFCWdvc1ms7x5MFY2g86dY7EztqJtcdYXkHd+1ctyIXOtiZkCAeU86nJUZ1Av9tGK+a1/vYBpxu/Pq3fytw97mAEM4zk9TDDaX/kTgFVW+1mk9q+Llv+o35JNqQd0hZzDYo8ia9N3aapO1LE+XRfypGtS4VQ5j8SK/cDCU98BcsEjCHZk0XlWM3czMnjgqTn6fj+kj0ussVubxV24Zz4t7Z5v3/b1UGBM3AHv9QWu5bng= X-Forefront-PRVS: 08213D42D3 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR12MB0860;23:5MCWL7cGhSZS6rpcD8zW1pBVjrud7Ep2aS1Twll6d?= =?us-ascii?Q?liOBrAy94WUWFDF105oBKSN38xDjbpt1Gh4L9+CY31U5mL5vIvM7CnAzkpUK?= =?us-ascii?Q?eYkDugQbDtbMBy468OmjW2rjIj8DpKFF/MqwVoX8OPN8xhsWke+toTGxuv1i?= =?us-ascii?Q?TnRIVn1o7hhNk++sL311FPWW4mRTe5QvJXACuO9AGTCbiZCRMTEjKAt/B8Yl?= =?us-ascii?Q?BLydrXe2SHr1/eIeu2dw6MKOOOxZcguayYD2Z2E4q6WJUrzCrNMfwfilLw7a?= =?us-ascii?Q?P8LjH/xaFFoHOC8KxrdZHbGyExmJHomdMR3FebI8XHP10xUPvYkyTIfakvBc?= =?us-ascii?Q?h/ecCPcxquoAbL1zo9QzHMrZ3fTWpStfskDG6Nfoxjos9WgpQzRHWcMnuldz?= =?us-ascii?Q?5MlMWkzDBAqXEW+bdNSq4F7y+Xe+d1O6j4hgBa+rybSs4EcI0WXOiFXi0e8u?= =?us-ascii?Q?q5zZaTK5Y0X9wisBfoN+bVbeF30BurAfKH7u0GFO7ZXWwNBhhL4t/Lr63hOM?= =?us-ascii?Q?uPrYMQLqFjIDeWX2+NBzIaYL9iF/G8IY8y1xQ5K4JzdaJiWqm/KRQjVuxgsZ?= =?us-ascii?Q?4T/HnQI8tSaYIKbPblDwyId9Tm55SzTtO+DfaPUfPbG22JH1SFzGBvyx0xw9?= =?us-ascii?Q?JghsQ1Bv6tw3PaEWG/Ot39o0ZD4bDjvlI0RjCd7GM8p9CDTbkXOCVWewapsR?= =?us-ascii?Q?yne4z2DjynBnYMV7CXWw8OsXzOxCuzl17YyeD44qPVXZliHA4lbPT9nMqRVd?= =?us-ascii?Q?g8mRG3pINBlXz01FKbKR8kLrGO4REcwozZswOLE5cuLvyiRFDFWIyEI56e6T?= =?us-ascii?Q?+Ty9XVptiYAk7zNXZW9T+tmZEvyL8OeQiQTJorsekKO496aolvnaNtVG/LM3?= =?us-ascii?Q?ztWXfYwf+Q6j0Dqc/97ZAkEVomsgwGhDmZkg7JfPB0dBMoEcqQN2LbR6hw5O?= =?us-ascii?Q?qhDJnbRfmO3b6KhnlXB8PSE48eNnNV5Dan52+2TPg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;5:swV1V6ayeSqFloP00it83kavyjglWSesEy4hZeumaIu15e8bGbYOC0uoN8FDeoPRtLbut5vGdxQKKKPz18kDwA47yL0vgcp27nDRJbAqe8SGdNInTkjYLmsctmUneXYbY53UhlgFqVny5VKhTV2r9w==;24:fwAu362FGSMsJQwqMjSmyCqw+1Ewy7rGqOmoT9kyFMUbk3nnWhURejHhEPgltbd4x7sH5PNfvrVos137UnGxUjAgM8HHYNFBCjodlol1/yw=;20:2rboBekTuyYJrSBGVn+ExDmV7RH39o65Xs/Ek0p++1iWtX8SruHQr5vngDLhgv+Y5MlJ8OkMfk2znSKafuX9D/Bvan8ceeCqftgCETh9T6PQsVVdMR5f3sipIxXbXlUPti0qV2SE5i2i5czHWPI3BuVzwukJm2QOwahOJ2K2Ji1EuqIkm4L2nx/SHUzduuEAImPdHwTZCNZgqeSFqKwVM9TYSYgzVdKpnFIKY1pwV33a3Ei8SO11xB1YGgye39eb SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2016 02:51:14.2148 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR12MB0860 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add an accessor function amd_get_cores_per_cu() which returns the number of cores per compute unit. In a subsequent patch, we will use this function in both x86 perf and fam15h driver. Signed-off-by: Huang Rui Cc: Guenter Roeck --- arch/x86/include/asm/processor.h | 1 + arch/x86/kernel/cpu/amd.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 6752225..9bf48b2 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -810,6 +810,7 @@ static inline int mpx_disable_management(void) extern u16 amd_get_nb_id(int cpu); extern u32 amd_get_nodes_per_socket(void); +extern u32 amd_get_cores_per_cu(void); static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves) { diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c index 97db1b6..d6e320f 100644 --- a/arch/x86/kernel/cpu/amd.c +++ b/arch/x86/kernel/cpu/amd.c @@ -27,6 +27,9 @@ */ static u32 nodes_per_socket = 1; +/* cores_per_cu: stores the number of cores per compute unit */ +static u32 cores_per_cu = 1; + static inline int rdmsrl_amd_safe(unsigned msr, unsigned long long *p) { u32 gprs[8] = { 0 }; @@ -299,7 +302,6 @@ static int nearby_node(int apicid) #ifdef CONFIG_SMP static void amd_get_topology(struct cpuinfo_x86 *c) { - u32 cores_per_cu = 1; u8 node_id; int cpu = smp_processor_id(); @@ -313,7 +315,6 @@ static void amd_get_topology(struct cpuinfo_x86 *c) /* get compute unit information */ smp_num_siblings = ((ebx >> 8) & 3) + 1; c->compute_unit_id = ebx & 0xff; - cores_per_cu += ((ebx >> 8) & 3); } else if (cpu_has(c, X86_FEATURE_NODEID_MSR)) { u64 value; @@ -391,6 +392,13 @@ u32 amd_get_nodes_per_socket(void) } EXPORT_SYMBOL_GPL(amd_get_nodes_per_socket); +/* this function returns the number of cores per compute unit */ +u32 amd_get_cores_per_cu(void) +{ + return cores_per_cu; +} +EXPORT_SYMBOL_GPL(amd_get_cores_per_cu); + static void srat_detect_node(struct cpuinfo_x86 *c) { #ifdef CONFIG_NUMA @@ -523,10 +531,11 @@ static void bsp_init_amd(struct cpuinfo_x86 *c) use_mwaitx_delay(); if (boot_cpu_has(X86_FEATURE_TOPOEXT)) { - u32 ecx; + u32 eax, ebx, ecx, edx; - ecx = cpuid_ecx(0x8000001e); + cpuid(0x8000001e, &eax, &ebx, &ecx, &edx); nodes_per_socket = ((ecx >> 8) & 7) + 1; + cores_per_cu = ((ebx >> 8) & 3) + 1; } else if (boot_cpu_has(X86_FEATURE_NODEID_MSR)) { u64 value; -- 1.9.1