From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932103AbcDFHoQ (ORCPT ); Wed, 6 Apr 2016 03:44:16 -0400 Received: from mail-bn1bon0096.outbound.protection.outlook.com ([157.56.111.96]:48576 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1760053AbcDFHoJ (ORCPT ); Wed, 6 Apr 2016 03:44:09 -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: 0O57C51-08-2FQ-02 X-M-MSG: From: Huang Rui To: Guenter Roeck , Jean Delvare CC: , , "Borislav Petkov" , Sherry Hurwitz , Huang Rui Subject: [PATCH v6 2/6] hwmon: (fam15h_power) Add compute unit accumulated power Date: Wed, 6 Apr 2016 15:44:11 +0800 Message-ID: <1459928655-6071-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1459928655-6071-1-git-send-email-ray.huang@amd.com> References: <1459928655-6071-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;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(5001770100001)(50226001)(586003)(50466002)(81166005)(1220700001)(36756003)(105586002)(2906002)(77096005)(48376002)(19580405001)(4326007)(53416004)(19580395003)(5003940100001)(2950100001)(1096002)(87936001)(86362001)(11100500001)(229853001)(101416001)(92566002)(76176999)(189998001)(5008740100001)(50986999)(5003600100002)(106466001)(33646002)(47776003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0714;H:atltwp02.amd.com;FPR:;SPF:None;MLV:sfv;A:1;MX:1;LANG:en; X-MS-Office365-Filtering-Correlation-Id: ced3826b-f777-4883-a966-08d35def348c X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0714;2:unCRsuRn7VFUPVKec3JkI0URgItoJlhzYHB0j+nbs4fH+1PLCQo8VHGF+sgwVRYgKjc3DD4VdPlTMYIg1t5Dyy1sKytXuMLB5FphWzjvhf6xGvKG21enYzEkJPbavp5cNmLOuA/IfXXIjb1Q+At3h2GC3nEwlWuajBuTfbr0jZy8r2xOrQBIpBNx7z4KQraQ;3:j1T9tof/GONoZ2qWfQX/3r2ElcMT4MQNbHq9d8ZCGubf/bbzduGPQZ7Z4irlXq0dyi02UlR9FgTMacm6LOPpSIcRx/2IJzoCXEJhORL9QaKPxsR7Ii5ss587NCadJJh2KZqQvQ+btv3Q5hYWlfs2EmsI+vOZDHwGKK2Kz9NWSxq3u7zlKrI95PTh9rYQ1FITC4aJBrZeMDc0Ng4LYiJHdQayR/lzIEDtPzGfo9wbzD8= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0714; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0714;25:QrWYUhU1gIHY0gz1VbmbJyTJ/5LYA3rU7BcMwc2PYaydIjh+EYGhloVZGGCSBInYvONlWhbRm1eyYkXXPvlgFiYbBk4O4OiPHmhdfMdAyJCz6VwGXp1DdUTdXjqeDa+IdzP8xgxpOwxlDERQJkeRAHt4lDAvQQvlLKBnkduTDKF6GsHoX74qNQcoANzKSCkNcyI/P8LhZon0NwaY83LYwwxbBOkuNcz/3qJ5UYIRYP8plODXC6NEuUauwWF0uYE5w6YJNtKYcGtzq6liG8ax1g86pMBmomUJKs1TVsgMdmVwueHKqyal9gD9/576gxxq2bB5dt+6sAvCMIeIzz9DB5NDTSYwis3nBjRg8Zu09ZQckxDR2wQsHz8Y5zCIvlZCxUncy1dmJv/eSpeUEQCYeg0291RALmJTcVeDq0PASCY0kK6qchapxHfYgG0LwU8zJEsGPSAVLcbHWNCXsl25byCg5wmrrkotm6RlwN7Qm5htoLQ2OfTuad4R1OPjKAxkkyZOQzHm1rXO+ktpS7i0n+J0Agf6AJ4UgPHvq8iBPbXRLcbH+TptTr5q8Sz7FAzcRVGMxt3vqlW+KfXandZr3MtqSUCmMzYz3wulCnNxRSg= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0714;20:voJ/Jql4BffmR5gBRfOJsFzkeFgfV3feY8z0K/1cH3mWCgDrTjFsgcgGVq5laBBx3sfHtuGs8dOb//ta51FAdmgUv/wGMLL6cv3ebPmI92YPeZ92ENKS03jsyqSuq9MgjhQipLrTu2ZqOndBIh4aRuLYGlTz0aPoIAxvdrMscL94ALdV3/PPc0QXmjAfumZab2QLK0AJb0ycKw2P8rRWMOf6AoJlRJ7JsiH0gp716CLHQUHOeAP2UOljP/iCaSgs2T3u9ZRjquDWaAZXLPS+/8CfV0xQ25REtTD7fPVF4eAcrhZ4ichIIBwNEvlzdWR5Z0CUfE6MsUhKV67EKSMQ+ISm/mliE2RWGrNXyvpIKjONa2LOOi/c5x7imegaz6Tk9ZQXL7JJXkIAj3K7FuLYzPwixxkcw5aFWc3bh+b1XxdMNoq4YnqLI+GtgTqZMecUJN8YNhQR40mnIMlNiL3ygT1/MjrDKiqBAB/hOoQy9zwlsVh3PIH47zWLeHWXssq+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13017025)(8121501046)(13024025)(13015025)(13023025)(5005006)(13018025)(10201501046)(3002001);SRVR:CY1PR12MB0714;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0714; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0714;4:7ELuei0k1sZFII265dvRV8LAWTYrAXzJz08cwJtjmbaYWh33WwoTj+QXfwAg3EqItf4x6wD+SjwcJvhEoJji4/z3gZJvXbM/znuq5OrR+CnAeKWUOsBbpRQ3PsMFikYysHhyDBgiAUufU99FMh5/JsJsiy5tJk10L7ZKBf3+YX3xpQeTh8xRQIMDy6GwhIMTi7zYLP0gNxVGBZm3Lnn4+P4wCjadGb+t0mNeaUag7zG1K+hQx8LiMy4GZoIfVODctSUbEgRKOaP1Qfv9+Whz3bcQBj/Uurh3a/h0ZKzT0vKxSsajDa1P406HMhsOVdMiDwBSZvoVWLEVkzgwU9zoJCpjcNQV3vG9LVGGHVCvYfxmruIV0H0ONpqhVacXDqqGyy1D7z6zG/17ZcHDdXiqw50e9lPWdnmLHV4wEcHRq9LHI3I7BnXZfQEVLEsGcI7Tq3m7fdDtUpndBeqnHH0Lfw== X-Forefront-PRVS: 0904004ECB X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR12MB0714;23:9mPVAWvb6/s4q5IhHyBZqKsIkvbzphX+w9s2hykCJ?= =?us-ascii?Q?LacQjEzjijNDf6+2N/rcXvPEHCVrbKE1eySOGrPpFjyVzVsNI2ALVSWcG7GS?= =?us-ascii?Q?q5cgxh1NpOFT5xKCFCmY7Y2bnSAMk2oKULk2D0ReARjk4GRK/zErDGmUEzyr?= =?us-ascii?Q?0Ce08MPxUAjPe+dP825fjFYB6IhIIrTVr9gHAkWG2PEOfaKgR832t05zUiJ4?= =?us-ascii?Q?ZMCKGWuNmAchi7KOOukb7eq4A7tcarY8rjbI56k+f6Zrbt7RH/7+wnnV385p?= =?us-ascii?Q?KQ4l/a7Na+HJV5P5aEWyRfGXwQAGpDQuKcwNK2r9h4oshxIHEsbd3izBCY1l?= =?us-ascii?Q?6/RPvh5jCmnpWAtclPrkz7CxpUKErj/7O22uRuvh4evdTKP3F/C5VwXv0sv3?= =?us-ascii?Q?3sC0Id+yNb/Ea43+rB206jQbMwarRvEcx2/dKw3/75ynN2DmEFV7KbFTNylq?= =?us-ascii?Q?Y7BZdHqYPrZ8NGELRbQOHbnuzEfecmBBIbHTi58IqpF8pebQAR2sAALQ65wk?= =?us-ascii?Q?yAQ1Ih6JDIsnLaP0AHyx9nT7VZZVxbG6Z9keJxDKETNBxyL7EOsLJVdcihgX?= =?us-ascii?Q?mJCW9t3l3JkJ8xlHhdfec1cKmOIKRfnKtwHOceS4h+bo71F8OxBEtpLGqmcc?= =?us-ascii?Q?9DLKRbpr2UNnkx+NDfiG6xus8+fYDTfScQrjOAHQjl8NZh72kJryEaaL3i0o?= =?us-ascii?Q?5/IHJZ93ynIotXVAaukeqPt9b8no5+e3s/mIkIwhIoNHUFEhFOwqTt9frj69?= =?us-ascii?Q?OQaWS4Wa/XiL3JaRTWTfXwrMjeOWp5fJvkPYlJ/xYnGQEePVhDFoxvjUDu6u?= =?us-ascii?Q?AFjYEnZOXLswZBLdivAsLfBabBGHN8OqsR5ll9PO772B91yirCu0U01oyuOV?= =?us-ascii?Q?L7x7+ya+YRSg0Wna+KUlj7JD7nFaaly9RHN8CoPd4qIAXX7XltVoBBB/oyUz?= =?us-ascii?Q?oLNyy6tBKh2BppoSqOIKk9i2o3yJKnYgAQijvCAQAhEQB2o8qsn8qskuxHm8?= =?us-ascii?Q?7kRlQZiq1R4GB96cOvX12GN?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0714;5:OOOOft7oUbZBCXupbhPJab0nqtLWd3O8bwDZnuH9IidnjE3kckQ/gxr/6B8ImwLjzTz6bExMVxkDHhMRxm3+s8XAgbxygcGtz/gB8ZKICT6jAYLh1gX9HB9q3C9V77ynd9bzsY3+kSzkPWAc4ncAtg==;24:r472pSFvCIh27yryF9ZfsOQouq8shd84lIIe6YiKWRBcW/+WFmipKJuRxXAjD/8ErTCsNNTlbglIf20tnmCsFhF6JnidriYnX61I2xGmp2w=;20:8QHJcrvDjzPlBb4vVDnpFlGyhBqSeMNkX6NCz3YIxTdO+DgfVZfn01Px47OLmZzYFYFP06L47hW42Bw3Sswg5OJmYgkX5lcE7hJ11Yfzv7Ko7YeU7AJY2Oxyd8osZfMcV1O73k+i92Hm7we7MyYc1320VFzBM61c3OZvhmDJgHC0KSlDVa1zYSCGYQnB0ugUX5DaCKkRQjJY1tKxUAeLyiMSB5daSQXkLmbgW+/zvLt1y74VvFwZrvlHlH+3LLDk SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2016 07:43:54.4719 (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: CY1PR12MB0714 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds a member in fam15h_power_data which specifies the compute unit accumulated power. It adds do_read_registers_on_cu to do all the read to all MSRs and run it on one of the online cores on each compute unit with smp_call_function_many(). This behavior can decrease IPI numbers. Suggested-by: Borislav Petkov Signed-off-by: Huang Rui --- drivers/hwmon/fam15h_power.c | 72 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c index 4f695d8..4edbaf0 100644 --- a/drivers/hwmon/fam15h_power.c +++ b/drivers/hwmon/fam15h_power.c @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include @@ -44,7 +46,9 @@ MODULE_LICENSE("GPL"); #define FAM15H_MIN_NUM_ATTRS 2 #define FAM15H_NUM_GROUPS 2 +#define MAX_CUS 8 +#define MSR_F15H_CU_PWR_ACCUMULATOR 0xc001007a #define MSR_F15H_CU_MAX_PWR_ACCUMULATOR 0xc001007b #define PCI_DEVICE_ID_AMD_15H_M70H_NB_F4 0x15b4 @@ -59,6 +63,8 @@ struct fam15h_power_data { struct attribute_group group; /* maximum accumulated power of a compute unit */ u64 max_cu_acc_power; + /* accumulated power of the compute units */ + u64 cu_acc_power[MAX_CUS]; }; static ssize_t show_power(struct device *dev, @@ -125,6 +131,70 @@ static ssize_t show_power_crit(struct device *dev, } static DEVICE_ATTR(power1_crit, S_IRUGO, show_power_crit, NULL); +static void do_read_registers_on_cu(void *_data) +{ + struct fam15h_power_data *data = _data; + int cpu, cu; + + cpu = smp_processor_id(); + + /* + * With the new x86 topology modelling, cpu core id actually + * is compute unit id. + */ + cu = cpu_data(cpu).cpu_core_id; + + rdmsrl_safe(MSR_F15H_CU_PWR_ACCUMULATOR, &data->cu_acc_power[cu]); +} + +/* + * This function is only able to be called when CPUID + * Fn8000_0007:EDX[12] is set. + */ +static int read_registers(struct fam15h_power_data *data) +{ + int this_cpu, ret, cpu; + int core, this_core; + cpumask_var_t mask; + + ret = zalloc_cpumask_var(&mask, GFP_KERNEL); + if (!ret) + return -ENOMEM; + + get_online_cpus(); + this_cpu = smp_processor_id(); + + /* + * Choose the first online core of each compute unit, and then + * read their MSR value of power and ptsc in a single IPI, + * because the MSR value of CPU core represent the compute + * unit's. + */ + core = -1; + + for_each_online_cpu(cpu) { + this_core = topology_core_id(cpu); + + if (this_core == core) + continue; + + core = this_core; + + /* get any CPU on this compute unit */ + cpumask_set_cpu(cpumask_any(topology_sibling_cpumask(cpu)), mask); + } + + if (cpumask_test_cpu(this_cpu, mask)) + do_read_registers_on_cu(data); + + smp_call_function_many(mask, do_read_registers_on_cu, data, true); + put_online_cpus(); + + free_cpumask_var(mask); + + return 0; +} + static int fam15h_power_init_attrs(struct pci_dev *pdev, struct fam15h_power_data *data) { @@ -263,7 +333,7 @@ static int fam15h_power_init_data(struct pci_dev *f4, data->max_cu_acc_power = tmp; - return 0; + return read_registers(data); } static int fam15h_power_probe(struct pci_dev *pdev, -- 1.9.1