From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752853AbcAGCaD (ORCPT ); Wed, 6 Jan 2016 21:30:03 -0500 Received: from mail-bn1on0070.outbound.protection.outlook.com ([157.56.110.70]:46880 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752764AbcAGC3M (ORCPT ); Wed, 6 Jan 2016 21:29:12 -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: 0O0K9KI-07-KL1-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 2/4] x86/amd: add accessor for number of cores per compute unit Date: Thu, 7 Jan 2016 10:26:12 +0800 Message-ID: <1452133574-3407-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1452133574-3407-1-git-send-email-ray.huang@amd.com> References: <1452133574-3407-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)(199003)(189002)(1220700001)(105586002)(53416004)(87936001)(19580405001)(229853001)(106466001)(19580395003)(5003600100002)(86362001)(5003940100001)(92566002)(47776003)(50466002)(189998001)(97736004)(33646002)(5001770100001)(50986999)(586003)(101416001)(50226001)(36756003)(5008740100001)(77096005)(2950100001)(1096002)(76176999)(4326007)(11100500001)(48376002)(2906002);DIR:OUT;SFP:1101;SCL:1;SRVR:BN4PR12MB0849;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0849;2:Ok9Yr3QlOLqUKYd14wrv8n/XHKJlKa59l64oyf2/VTTMAxp/SkMhnAH1EHYxU5ajrDNyYUEWh9Spn1kPpAwlz2KjoLTI2Gc4DYX5BvU0kV8PsBCFv4fjvZISW0khO2uFNdfGfRENlO5PUQZU9nZ6gg==;3:STBMx2wzK6v8v0G4xaepTbqNvUZnkW/V3dX7t7QV3eYry/1bZU3KCijZFkbu2dJWMTETUw990zboKvHG3uUSOiemtf2AiPjyVu44DNCRZuMw/82y+fK5fWu3zH5aR277aG2YSypxqKdQD6sDEz3BHDwwLONAu+SBhvFmE9thOW7VBJ5kkNcUE/D7eWtMukksZLFjsg52YZt+wZdh8dFTtkd/MspsLSFDnDXQnko9ZW8=;25:5X0aZGZnnps0qMDCPltrEo7XZunRQsOfkSCd9XCqPViJwEx2ie5QHPKATYLlZUldlZmP9M/TFx2Ff3fQtWPLwF50h9L9aqmTaVn14CSCTPskjdP6lF5X4TJpyhUbZnljGP3NnbrcYHCj+AgLa03+uHjgO9w72CvISWqq/AF/+pD1ZJ82ntWk4HNWuOLzsLgBt/DSRHE3tabwfMyjrCcqtw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR12MB0849; X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0849;20:hfgmocIGiX4yL2zM/JZMoHBhG3TaMcLqcv4FJ9d94kKYNOvrBA3wJ3xWvnZ3BIwWtNLoX36I5W8BoaJ3z7/8ijmeaNp+8IyTeFm0QreH6+23yBIwDOk8cCwEnufZRNkAMAUhRy5LJ1PORO/CD6j2myXBXh4kN1KwBJy8+qCNw+thDcqY/DTTGhV3HQxzzfvEjD7cQxbYvriOsMjgm22EJQUBxh/YVlE1BeEiqnSptIYfmbxrs2ZzGYvDiwYbqNdei1gyq0IG4pKMkyLKb4yb5aakMbe0rB6NttBr/d5fPd9KwhYAAi4DoXE4pXwtc/3pAimoWLOUbO+YhOCMNwHdsTL6ezN6YhnSOkqUqeGt1xsaoYPSrDLG66xH0rMWAHNI69k5ymQE8XvuXjijWLPAUCRTNfX+OzrJfT8mE515xklZzdBUFViw69kYuO8DEvAh358LxbjaL5AdNmXYbIZn7nIbyoqd7X2VrbJcH0uPIHjasdQxWkeZSmtkkPHsq/xA;4:TeewJS9EMmgD+jn7MuNyCS7dI97VMIHLTGo0xOgH/DeeDlpYkqZguPMMM7H3QqymWLlYzD4ZqYxlGhUITSaBN2kDmvg1WZMJhAeokJi99TxVpNbmE/Om5tEEdi75I8+nmScfTfyLnN8/RS8ANgwEyJqaeHDNT1nMeaA/S2z4vC3ygRez4Hogk92nB/MZtDhkJKqppNGu3WZGLk9hVvEPDrDSOwgaTCxbF+cRIy+wSd0nOom/eOdc4XDPWFaOQ4+2w0A6/Bqq+YUtJBM4MGHIdwPtV0KHPgXv1LPqep+e3nBNouXYupQJDsG5RNjeb7YCAigA8SKcACgqgfjsXH4dmwvMnmQjtVwYMQoHeXwpwK6RuBuyZDMZkjfLdyVTPkTkkI1n9WYMrhjyuN1dwc8eEFwRwQWcwiBvpd3iGCOrdGo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(10201501046);SRVR:BN4PR12MB0849;BCL:0;PCL:0;RULEID:;SRVR:BN4PR12MB0849; X-Forefront-PRVS: 0814A2C7A3 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN4PR12MB0849;23:dWcbV4uU0dU07IHiSnFGFjDTkzLSfmthoVGuCoc+q?= =?us-ascii?Q?ZCqvcyihvoBTG6ZPE5IQ9bsCXbsu90sNts1g07I80uIaga84UOLRmwhrBb9Z?= =?us-ascii?Q?DIfajkOy47farj8us11rjeMgBtak/wdw5w1Z00zqeWccwbWpiqkFFByfFj1K?= =?us-ascii?Q?gaktMHNLdklRR5RZ4Ne9aYCJKS3CgZ5VP6x0nBXY0R+YSMQYY1EAT1JQq2OW?= =?us-ascii?Q?9fZeIQQjy94PvHdwcuam15p+/LMcK77v2MAp9v1kt1rfKPPb72kl7QhnddNN?= =?us-ascii?Q?LnqXfa0MKxM7kVczxVaC6HS7XRnXDUgF6YapTE7CxkiSHqmTJyc5GfompNUF?= =?us-ascii?Q?8Hx7Hyypz/TfwmNzoI3w3JNHYDmzDlsA8S5rlioSYlBAmW6KUcBOm4O2LN4L?= =?us-ascii?Q?myGWpLBwJxfDRpfJKz6DGzpMu0I3ZVS2NKdD7ujryFu6YnDxrW+b7m3XV542?= =?us-ascii?Q?M7d/KADrT9KoVWSaodaDt+WnwtqvIIOIYkbbe1g7EMl2O3tXYnAzJxaF2Jwr?= =?us-ascii?Q?DQY6IcI5BiAXdTS8t8E9fWO13pHVI5guiaMi+UUl90SpnJ278UaHkJELhsl3?= =?us-ascii?Q?W7qQNtBkBjBqe71w49jHeiQkd76Gp6tiB1liG7iEe/knTqACOAgrtOKmdp+G?= =?us-ascii?Q?K7C7l0hqwW05bBS4dWQiBOpKw4/wmtShzFu7hxR4B8z8Yy194mpIYDlOdk9P?= =?us-ascii?Q?ZKBnuWhVAY3K81mTUUKcLwKKXUlatxAasLJFoSy5OqSrdDzq6UphBguPjcq0?= =?us-ascii?Q?puUKrjjh293wCjbvyWBjqSsH68ozF6/FNY4lp8olu0zMenOfmX2jaUIWLIvZ?= =?us-ascii?Q?k3smrIxMjpR0z2XQtzCssZbGAgazbqRkgySWBCvj1Pob84Vk0Fl1cDfRPO+M?= =?us-ascii?Q?LMGUv9eM4tfZAVIITCDt1swxkAVzEpPMcimV/U578AOvtBMeDHwGE2MloKTb?= =?us-ascii?Q?aW7G71Xu3a/xsXmnVb7COyScdh0l+7rSfXQbjm8JwYegLkidSAwU5yp1ISEC?= =?us-ascii?Q?tSknQbSFL2LMN9cAmx7m4z0?= X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0849;5:HTAmQwvDocmYyjpQINhCryeMYQk2wX6YGLFwiBMlR/WEpRzy8odj+92EqbH1Vk45YOHFwBeHDQah7wrK0wGOyPIlnl/eBadq4pC/VjjJJgHwtF5LMyLOLpaeBbSf+JQbMzT2THNNsS6KMbUbOLkkEA==;24:+QRShdk67LMer5IpSkFhmyEsSfE5utbFzK1hjwoqSDZDTe37/WnJK5szmL3Qcs4xUH9XZYBAeT58lUZgaVgH0e/mQSnCadf+cQ04ImZD5aw=;20:9CuDuaPFlc188JavIzByeB+qHrVr5sJTvEIdEchLVwgX61bt3PwN9J5GOiaLxHFMPZhYZITr6rZVj2Fwwy7CeoL9QNO+/0NlQcFTeanZkdmhZizBX6yJVcV5DABI7EHei3/KgrDN7rLkbYvxDvt5zZ6Llguq9au16MeYFGRgJnb3uD3Cs40cgkoTquZQePeNaD7AD57on5ZOZH+63fAfPE0159WepLNk1o2L3rKuquZEJ/6SXtemb1BBC9DBOKvK SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2016 02:29:08.2971 (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: BN4PR12MB0849 X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0738;2:aQMIK16ekQ68RSEvhR/CTBRtzdIeY57sCCwsGFVfz/P0fGSm8SFsUoP4v3Fn6ol2jD+r35zkRYc9D8Q6bKfmTgkKGtWxc0ncAMKI/TUfFxa8TV0ptGE0Ui8WB05IIK1O0nzze3eBbhbJXfugM0Zc7Q==;23:ZzmJKSEk+qA9sjXjmaTGX7oJgJMahvhu4o3Tnm8qzDpj92F0tyKPb3L7y2MGPxtCoV8z6YWzcyDmLUJaFO10x7STbdjwnAYgdHlsemU07ydYupgGIvT7F2DX4ctk2d1z6eG3vmDLF56WoCSLcU/ZvKAlaoXQmD9oU4a7SrCvAfxrHor7fuZABfFMcbtxRBjk X-OriginatorOrg: amd.com 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 --- 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