From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752208AbbJTCqN (ORCPT ); Mon, 19 Oct 2015 22:46:13 -0400 Received: from mail-by2on0078.outbound.protection.outlook.com ([207.46.100.78]:44130 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751194AbbJTCqG (ORCPT ); Mon, 19 Oct 2015 22:46:06 -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: 0NWHYY9-08-8UR-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 , Tony Li , Huang Rui Subject: [PATCH v2 04/10] x86, amd: add accessor for number of cores per compute unit Date: Tue, 20 Oct 2015 10:28:23 +0800 Message-ID: <1445308109-17970-5-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1445308109-17970-1-git-send-email-ray.huang@amd.com> References: <1445308109-17970-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)(189002)(199003)(101416001)(19580395003)(5008740100001)(229853001)(97736004)(92566002)(50986999)(47776003)(5001770100001)(53416004)(11100500001)(36756003)(33646002)(64706001)(50226001)(105586002)(106466001)(77096005)(76176999)(19580405001)(87936001)(50466002)(2950100001)(46102003)(189998001)(5003940100001)(86362001)(5007970100001)(48376002)(5003600100002)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BN4PR12MB0852;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0852;2:D904+DCbTUccN9E+GWOCK2/aDxvsyk0ZEvAmWmoSM64i8vV3TSIWoAWlTSMMMtA4262BO6ij1NJ7EpMYt+L+sr92CvrfWH/gLxOL1FEfiO874NtDR3iPIH5vw+CBUkBwfticTUkx8jmtBWqTIA0JwxXBsQSmkRdcioKzzdGd31w=;3:RdxGuQOSQgRR2RvpsT0UpzMi7pFwmeRKVPH8DohffhSVN1YhdRcyYGOBNqAm2hGVEEghmJBZR1CZP+eYsetYyajssgANPlRqLWYnPLMp4XPLiJV9527+MtaJ4jLRCdkf7Laorc+3pZMG/nJ+I4lXAYmJtVcFSFm2rK2NCuBfVvFjQlcqtfe0xftEWqNM+/t2+N7RLlW/XDeMxRzuvhy9a/lxQrdDEeQN68hNtoJzYb7wnT6IvQCof50JtGILIQHz;25:22nd9QyCt1fSJQ4FqsukVCY4ih247PF63Fr4NACfP+mTnlzqQWgRFfVNIMBd1EV/OhNtp1H1Y/ElyL/UX0ZflM6HhaLGc9m7FKtRMPAFjhZ1CfFVNC3IMwnqPlDLBP8YXMDjIxCT3OKfkRfmNHZM/NF6fT65VzvwQJyqMcCWw5L0gpJZunFz9y1X/awS1Uq0fbClowSVOtmYUyGNoCn6X8B3EX04JwqS9PIbvn7FANGESARHdaI2BpVrOMEyq+cEr3TCm5MIGScpacj0cArkjg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN4PR12MB0852; X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0852;20:ACE9O1Xnp83ZPnY8I84rdT0GEaLDqJTMZRm5fkNB3T7nS8juPb41X4TxDJ65x4NQn6Y9yCbS+k2J3iaECT1Q665o70VAUX4ACTfqJZ0fGGUTAFcxIR4OPo8l8O/i76bU6ij3BiOkuaPTSIy/dg2nmTbT0dNihZjy1Uj9GsZHfOHKTQ+V8VPS7ZSVJI1zO6jbk3rpOvLniXvcAjrRolPqV1L6ALzvZI86e+w0Jy0Qagp8bHDpmFHm3wb+fqfrnnGFuejy5UIbSgJxk3LvW0Y9HwMOrH/w8/09k6/s54xxFY+1feWJM/oVVz4kDJlCXxsQ1N/UT6Orm9FUbuUyyJpyHpgRvQY6XOUuK5ja2fqeEm8iMnvf8gHDRSuBziQbAjJ/wtd1nLMBGkiPz5WvCMeXty3FlsYpP0BZ6aofCVHwAc6SJset/urnXh6zSLFXWw7nsfI/0wE3VtRC/2DpifzvkvMWHrMe3Jrqa7cvMnRYCzUrcDjDIFgzBvbv/WUt4tuO;4:gxnEBvsEEsO4K2k7hFA3wtRbwn/04RkwQwY8N4RnFMIml3/gNJi0F3RPEfSMHo7Hv+hBoEQQ6pzmuwc+Vg6l4z8ovYmISXNV0ciJWjFsKOA9GwQUIP/BpcbweJ/quvKV7Sf/YBt44UP19JmnZQKdftaQqag84nERY1CZ7KH86DBvrWrOy5hzXic4lejrKA+cfhDIvSKd6IbdQPBmfazLVWLh5RNnsnDSiJ+iPq2TaYZvPAcZQMY2gGK/9qTaAqpwPKlhxIkS7AOMW4ihNgNhfe8X0KXmYsRUNP4GZi4S2gcDdhbXSKBWZ6pQrBFvluq5YnqaykvCBQ3smWZqy9XPQcf+fe/irbUX8RBlZUJxlDc= 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)(5005006)(8121501046)(3002001);SRVR:BN4PR12MB0852;BCL:0;PCL:0;RULEID:;SRVR:BN4PR12MB0852; X-Forefront-PRVS: 073515755F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN4PR12MB0852;23:3eKEyk+VpgbOcFp3S1Z2wzhXmsgb2nmA5YypWX5aA?= =?us-ascii?Q?EVSaNKljccFAwPXRtd6zVJEzG5MpJHu5+RQ1zHJ2WR3oWAaStIR/Ha2smQ4Q?= =?us-ascii?Q?S2j5z35Dub6z/PA9FWKLbL5StIVluiNcDnjHNCC1t1Lxyo0EtCkncDjGiT0p?= =?us-ascii?Q?wq336SVPkeMeZ8yefq+MfrmNunbXtYvzSFfwaV9MCsTF65Ksc5GcYXfxYZAR?= =?us-ascii?Q?Pj3vHBRG1sVN0XJFk5yYEJzVJdVxeC8zJDKdJPwNV+3XVc/OfyezgA7E1QFc?= =?us-ascii?Q?ZggxIs56sTvihziIJpMZbamuA94lSLijgV5rg1a3tnsW9B1Nus7WGCnwCoKq?= =?us-ascii?Q?10yypOd7W3tsLETe5QOHrlNXNuUzoIdxIYI7Z/qD3sUGEiiaY6UNaUTilGwI?= =?us-ascii?Q?TTYvxO1H3UVYD+cdjc6eGkc4utxOzjWda3IQz01M6mRaGKwn2Ae1dXNFfZfM?= =?us-ascii?Q?BTNRYlmm7jNakO/rjL7YXCBYfMOX9Jvtwf6ur32CVUEsO9acitmjHU2chaKf?= =?us-ascii?Q?aqrAsoMPGszSLuMDozjyvjA5DNcdz9i7dov3MG0IEil16aVej2D5rGZbAe9Y?= =?us-ascii?Q?TYqUM2y8i4AtgVsZ3gCElLMd0C3qaXEbgQEqssupHJhuwWly5kbwXtWmMCeg?= =?us-ascii?Q?aGKg3AtzOEV8ExtVVzoMrdaQObl3NTVtCQc2dPCeLoENTpcKHaqdApTyr6OM?= =?us-ascii?Q?nHZxBZLpItLlr0aO4RXnrS5ftkHyx5vXGPireKxuk7vZGVlnPHH6251rdLfe?= =?us-ascii?Q?JSOUSDUC40ZzdSvbGXC3xPWFLKd8BCF3tWgTyGsNJz2MwOGIx0CS8Ywa6rf1?= =?us-ascii?Q?ckXivEHuSFPIc9HsgRbLqA4Fe51NMRy14bFruTNVMTNQZRreE3yp6xcGvYX8?= =?us-ascii?Q?alwkLZZzBH8gQFQQ1Pd1Q82QElR3eD8WnrfvzpSfYvqBBbw4vYz2uIK2bgR5?= =?us-ascii?Q?al5Zr7+v3V9ThZPxUHYuv2EYRcyTqpYNvBPFx7pDoRIOR27E0wFs0zxLATgF?= =?us-ascii?Q?p//9Wf9ocUfYeHGgHlCfAjo?= X-Microsoft-Exchange-Diagnostics: 1;BN4PR12MB0852;5:4JCKxq/bwfn3T4h12PSZhFcGKqgS1l27Qix5AEv+x4UAvL2enskj5SjBnwn5BEnrQB0zB0ft888feDAzgKXPIhdYIbd9WYLvnSsm6GFGZHrG6R4LmT31sgnjKxcwSbM7N0wfOc/4mONEzTA+/fREFw==;24:ivNvnuAm295Wd6U1bNqd5LNhyvG57I0JITW+ofcSrgyCLaxwdZCTQABNrNXRsVSCKaWcSHLMclqey660gqEnAZp7sLoCCStJYqXONhlOsNQ=;20:J5qqZNiQf+Tm4H58e18itNuczCxU8a4ypDJBLyp6Fc3txepxKBZ2C2BfdzD/to8RYzMA6S+HZJdr5msuONnmUfCWRC/JMjW8ak+DMppp6vgaITymG+4VXhXdLNgG73DEVwEidB1fxn6UOXzPJHq0K7t6UixVPrTZr6dpQSyXJeLbObeNTOsnQ9JO2HVDI67AOjbJS7RT4mWiNjhIs8ESItiGyC1Qle6J1Pq8nlQ2shm/rxgT82lr014DSoINrdTs SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2015 02:30:12.0954 (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: BN4PR12MB0852 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