From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030354AbbJ3KC6 (ORCPT ); Fri, 30 Oct 2015 06:02:58 -0400 Received: from mail-bn1on0070.outbound.protection.outlook.com ([157.56.110.70]:19911 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S966131AbbJ3KC4 (ORCPT ); Fri, 30 Oct 2015 06:02:56 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.222) 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: 0NX12KM-08-AMO-02 X-M-MSG: From: Huang Rui To: Borislav Petkov , Guenter Roeck , "Peter Zijlstra" , Jean Delvare , "Andy Lutomirski" , Andreas Herrmann , Thomas Gleixner , "Ingo Molnar" , "Rafael J. Wysocki" , "Len Brown" , John Stultz , =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Weisbecker?= CC: , , , Andreas Herrmann , Aravind Gopalakrishnan , Borislav Petkov , Fengguang Wu , Aaron Lu , SPG_Linux_Kernel , Huang Rui Subject: [PATCH v3 04/10] x86, amd: add accessor for number of cores per compute unit Date: Fri, 30 Oct 2015 17:56:58 +0800 Message-ID: <1446199024-1896-5-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1446199024-1896-1-git-send-email-ray.huang@amd.com> References: <1446199024-1896-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.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(92566002)(76176999)(229853001)(50226001)(189998001)(47776003)(87936001)(105586002)(106466001)(53416004)(5008740100001)(50986999)(33646002)(77096005)(101416001)(36756003)(5001920100001)(48376002)(97736004)(50466002)(19580405001)(19580395003)(5001770100001)(86362001)(5007970100001)(5003600100002)(5003940100001)(2950100001)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0709;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;2:GLfnhw3uI5KuShLj4upiWWrT93jxq4WETB9gyR3C3gkn9mYhQhfKub5rEsgw/nMDPuJ15BM9ty0SApx3oRD7h2fGmDhn7WUdSZVUWljM8NDp0/uOlsmwPPqqMIVwaz4q66D0QUvKE/vuLk70Q6bqguOHUZpCVY4pw3hWTBGQSv4=;3:YBJDNqpqspehEeyuGMS+u5sPgqXXAa4d/gP86PHI8gNMOF8N4oc+Z5Foxj70RATmnBjT3BgpFHRospylJKob1ZiNfdPFjCSpYq0VcaqNiOgPjsR+yBqmi4V4V/m6gOxReXsOO1dXukG24eSCwk5atrwEIZqVkxRtxoLFahWsq+SuXnZSF2+uR97RSRwZ6rInTQRKkBMIF+l6/PfGzVB+vtIQhyziwEfopPtpXOhvjgyIpGdh3sHr1g/64cgpuPxG;25:slE+CbJjLIJzpTmkxE5RKhWJj6eXUw6zWes7BttuvDic8fO80PIRCRhtupw+Sg2AKepwjdbpq8yuQpzU5XclMio1G81CnQQMkiAw4gfKfMpY+7k878b8Prq1jCFNVdcGHPlr9evDWtpD5zNLlK+t+oaB842GdYvBwUvaXdHvhTBewA8Q9zq4odfBjayEkY3ADLZDeFUoJKDx+eci7UiJnXn2u8W/rCXDMMqdH25P9p14V/K+TwhN1uIuac8d7NIilOx+22BvpvGxYXkpuU5iKw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0709; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;20:lbAGw1GOaQjza3GLKgehyYsPGI/XsA3NY8vU3nypp0e/71qLOmJeCGboAQazqavuMLdzM+61BFU5ommHpuoOZ3rExucq5qjwTMQkMYJSBlIPWHKrhsFX758d40TtI3MZPzuxdl/H2UZXc6CfxbwQ6nkkbyywdzzH+ryBxPP6l4v6VHAFmlxvzSF4vUfCsYoj+hgFjnls+LVx0QPrpuImLiB1Dhs0rpanNeHx2B6XrZVlkLUXyjr00f+KnO9XRbNPXL4/2+qy4d6b7+TXn3Z1s0nx71+/wNX9pgEZA0a57+G2+3hzyZ6OdBU9VX8jPQNTTGjQEOrrJuS5Qu0DF2RFyc05OHmjIhn7bQbHF0JggCl2GMfcwkfgNQbJ45eUtWZ2LuQ5ipjnEyZqAeelMm/3cpCsx96OkD4eX88BNl/OxaK++obJ5sHvKAb9mrx8N7BtzeVD70zVcYTvqtloscUJMG3b3jpS/oZIQCkevmxsbnxL49PlDmStTJQIYbMxfHEg;4:EXwhkAayXIjGM5QUGHg3sTDw7n+TdbVDcV3rhEMIDUotyvN4i02/iu1cn9NAjv2YNW2qwQg5cGftrlMFYn1MgYHbpD5qJvEoJaWvDq6oIGieeyfU1im2PbjmN9RJjPTxjk7pZ1qGI1WX0NE+dZczNVaWKBaaLHjKEsVixpzIF4z4ViS4OVl7+LLcO0wTgelS8zuNnHFTAloTWgAgCHlzFXlPclfQKilvl8t6BZq5+KIQhim48z52EkiodIwqbLfu9HB/knjw8oqol3zpkN2fZN4cEsj58NQx6y3h7qSdzMRv1XAeNDFaxPRlEM7clK5Su/TsMx1hHIMNRHCG7XDSJgpkJtTu9zR3rEHNQ5VAlWyEhbJreQysdklmYwtj+Haf2y+Ulnqf8TFvdkGChuXTig== 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)(5005006)(3002001)(10201501046)(102215026);SRVR:BY2PR12MB0709;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0709; X-Forefront-PRVS: 07459438AA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR12MB0709;23:4pi5aSxWyEGyh8/q3l15L04ps8btA8DMLW2HIcAAt?= =?us-ascii?Q?uSG3eqn4ngFwr3K7bkGbevPoYs4QWAGBrpXYQtOHx6dAc33VLcLzrfEt0ZJJ?= =?us-ascii?Q?9c1P0rK566bRd2RtmqSP3YEcE9aGGpkNGj9JUi3WZAVCIdFKn0FU3oXnZNEq?= =?us-ascii?Q?vtI4BHBGImAvUfaebDkD0VyAww7sZf+0Gj+MW/TAl1i4mUFVkL6B974P+Wwm?= =?us-ascii?Q?/EqtOpSKFWP1t5Sucm9na4SoevmNx1lm6eIbOuQq793GHDyzD6t3o+vZ4icI?= =?us-ascii?Q?UfIVXuPwcLIxQXxq2hQ+iRIqADdMKqX2ANCh2/hb1h0nFzWzfxlTu6SRhdpt?= =?us-ascii?Q?899P6gYSsxOuQp/bOvDdv06jyqEVjl3+pZnDIc6VP2DQ9Q1VHXkpGJSkCGJP?= =?us-ascii?Q?dHAvlwZI/LCq8pmNw4tU1ipDMhn1hLC74IMe3vos9p2mNvbT2p4764OS6wlK?= =?us-ascii?Q?AKcr+Q0gTueUhocGpabw5yt9D/airEhw+qGRYBtlsIaFqtUwN/gyY9ioL11m?= =?us-ascii?Q?IoAm2UNWtlSpyheYoBFk3uJF7w7ojghXV+DBZqIfj4+m3mQXWMX4mO6zohjH?= =?us-ascii?Q?zITFLBF+Y3Xp4eVpEDcs6wmDKce5RgsRu/xZdolbGxcUxscU/mE9W8KRzWyd?= =?us-ascii?Q?HIF2pQOZ3S43E/KqJs8eYzUIwDFb9pF9sLs3NB61d1wvbG6OmeWKwBKqRcOC?= =?us-ascii?Q?dlQspdYkSQBfC/Gt199RObxEBi3dcWJ6tqXRlftJYiKCRW31Vzg+1DACMvDv?= =?us-ascii?Q?USzUJaX3g/jFdzLwQBB8n0jZdOaj1gETe10w2lv2CbaBQaMEUcBUIFo41bhz?= =?us-ascii?Q?TcrTYlUN3ZiHlBZl5/BYmPaV1nj2XGtHvTLxkz4XRkMPc2RhXVUEgZdBzAKX?= =?us-ascii?Q?O6xAUUTjZeDJG3CriWtFsGzDKMo8MaHehkoQw2cezONbsjPZvSk7DQb7um5U?= =?us-ascii?Q?0p67Acxz6gVmfPkqLJ5cl4QN7D0Qs1FAZRETwa7HW55mppI6cK6uRgrEaDHo?= =?us-ascii?Q?yk=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;5:wSq0QNskM3UD+rSgYV1v8qy23QtBOOrqipJnpVQe9VCYO745GWcgq/lpH6guyU1bACT5C7IBPkRl8tav0HjZ7Z2G/HyW399JZim+zp7nOFg2787ZGkWqURMqqidYJZQXHhLcpLXdC63hBJDFZMCGrA==;24:+lBJRMRicMNxz/tXKYT5fIyy14g+lv4BjNCjfgK8V73ycD9cSeI+qQ0FSmnuF91L3wygT/WUK0NnxXt+SJRK8iTQkUX4sj1P+UIhNJRkqA0=;20:/LoICvYAuK1t9ub6JXR3pOHeaZQfXP6cGRZMczVjWIWYExweWnxcXqAiNlxCPbaSMsjhNVIkAe2grNyJCUI7Y0psMKuVkyLwKBomHn/Gp8fd6ZDaPqDg7fMPqogIKxigSUUOkCSsA+9yQdq2uxjBctnpgzovBmajIgGDIBFbijiXgWhNx4Wa3Er3KduxgzvHBumM5KHqaxVZemJl+qk1zac4BbOAfwufuus4sPmAi/dbHvzOcN2zkNqKrDzjDqzS SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2015 10:02:50.7286 (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.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0709 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 multiple CPUs, they always have the same number of cores per compute unit. In a subsequent patch, we will use this function in fam15h_power driver. Signed-off-by: Huang Rui Cc: Borislav Petkov Cc: Guenter Roeck Cc: Peter Zijlstra Cc: Ingo Molnar --- arch/x86/include/asm/processor.h | 1 + arch/x86/kernel/cpu/amd.c | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h index 19577dd..831ad682 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 4a70fc6..a914b1b 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(); @@ -314,7 +316,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; @@ -380,6 +381,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 @@ -510,6 +518,13 @@ static void bsp_init_amd(struct cpuinfo_x86 *c) if (cpu_has(c, X86_FEATURE_MWAITX)) use_mwaitx_delay(); + + if (cpu_has_topoext) { + u32 cpuid; + + cpuid = cpuid_ebx(0x8000001e); + cores_per_cu += ((cpuid >> 8) & 3); + } } static void early_init_amd(struct cpuinfo_x86 *c) -- 1.9.1