From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752086AbbJTCpR (ORCPT ); Mon, 19 Oct 2015 22:45:17 -0400 Received: from mail-bn1bon0071.outbound.protection.outlook.com ([157.56.111.71]:10102 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751717AbbJTCpP (ORCPT ); Mon, 19 Oct 2015 22:45:15 -0400 X-Greylist: delayed 898 seconds by postgrey-1.27 at vger.kernel.org; Mon, 19 Oct 2015 22:45:15 EDT 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: 0NWHYYG-08-8V3-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 05/10] hwmon: (fam15h_power) Add compute unit accumulated power Date: Tue, 20 Oct 2015 10:28:24 +0800 Message-ID: <1445308109-17970-6-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)(47776003)(53416004)(5003940100001)(97736004)(5001770100001)(92566002)(50226001)(64706001)(189998001)(5007970100001)(48376002)(5003600100002)(36756003)(33646002)(77096005)(2950100001)(87936001)(229853001)(86362001)(50466002)(19580395003)(105586002)(19580405001)(46102003)(106466001)(76176999)(50986999)(101416001)(5008740100001)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0709;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;2:IkUC9C4/HKapjm7PvwNfa9BbEyIIitNOa8P+Gh72b945QreVO+j+U/+YV9M45yAVfNgvxbHCaho4jEQCzknepG3xXbWhrgm0HIXtMcGRiICNrb+ZjIWTOzgVgbctqq8AKJZdRsTw4QNt9yn1T14LFxb7bTpfS9+I6Mk0CVHr/ik=;3:2iaJmBFj+wA+K/bTyp5ps/LPbK/Ha2KUt6KFGE8/gpMrDVr0pGO1dxM9La3J5e9t1PKyH5bmHx6uQVfsqr8C4JxxmrWj6O1UQ8TrmRlufE4t9magqZPQmwN77AsQAiJTvnijpTYJStDvNokZwjWJTmd0clTWG+pTZCeN9JBsRjIb45vUOcOVGdi4qVllf9TtiZvjPHA+vtz92123PSTj0EIH1w06kxmw6zLsxbMaXQdr+/FEvSaw9x3zH8e1NHgY;25:QdQmfxi3SlDWSc5o3bhLGCPOUvzfrCmfvPGQV2KY07xz2FLhQwSobQ0kceDr9DJNc8Zm/Sl8S7eIw9PPYtVwHrse6wQeA6eugB+yPWWQcUiLtMTMCSXW0hLd+f4iNy14WMCxYEH8/lopjU99coLsL0DgEm3KAmsl8kUUtpABE5SgielUmqwXOBkVdjA5DvIxweM6qt62U/VnjNp4Vzs2zQOs/ifS4uyHGjHd9ky0afi9aP02fcqKAEptymz7+OD/ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0709; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;20:4/u+9C1E7b0l9mOeU3jRQfehTNhUEv6ql//YjJoynU4dqwT6GqesY2lshP4QwpxDgU8cj3zLJ6a7Krq272au+aih0qACXO0j8QhZA+Jz9gwE4RSQZYCgK697LeTOu5tuSUwPFr10XsQP43A6SEZWvaP0s44qFIeab6O1uhSQ0BaRoVkVggInyjwQWYmS6f9HKrXl46dCdznkP8DmEANYlYxMvrXKX1TbYxJyyWe0en34iMKwOEVR/o6PPCy8U4b1VvtGZ/bIoffCbLCpsLGF/JSRDUAl8fgPHuotaH1rCyYtKzaaaOIx5GoILDz3b3BLTzwiFDl6thjSM/zaqcQX+GN6CnxbfOtd/AJrMMcbv+18ud6UMV+OusxLUWanTCdlwlxfbROp7JGJuZTEvHJ1mxB2FgT+jIOBUpvROdzRCcZbRY2LLKRclPe4nduWTltpExf/YheglcL9oU7x8AUlsFem+gkIb3L4s9OrZcEC/y1ZZBiZ703Hv9z22hJEz0Pr;4:ohQDvuGrq6hulBu6eS2ydtpa7WuYFS1ytF62n6mv06Qb9QBOgBwmx0TZ18BIV6/QVIpfV02EuRZAURjI/DQlYExYalFrHzJ+S6WGrjwPasy14QfbgQu8199hN9hFkhs4znD0Ji4yyeB8Gq/5CS9XujOb8DLN1uHS9iWyiy1hkVi3Ugg6qJAIz4rxOfG3SmyDJsyxcgONYlsrobDwyV8VIDZamONxI/ZeAxCtphAoYVuNlQSJs0qmH1yAECPvVoRseWtm26MuRqNMZrtOuPQQab5d88wCYi0qnI28mRyh3/zw/MkMncQip8Yd5EVG6mzp1J+J5g34Ov5a3Z5nPi2QO90l4jIdcdGPNKLTpbVbFGw= 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);SRVR:BY2PR12MB0709;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0709; X-Forefront-PRVS: 073515755F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR12MB0709;23:YctiNqw+ap8rMpaNUELhfRpZcQ4QKmKdcm7T/W2XW?= =?us-ascii?Q?0lCzWH6+Hr5bgSFTpRVrmHsAaGWP59hNUAahwIA3LVkQyukbo6hl4nGMrrFb?= =?us-ascii?Q?/sBfb40ssV4sZGFN1faO1s64UmZ+1IG9isGB2XFF7uv+rNWLkUucVOPBSPDx?= =?us-ascii?Q?SnWOCjXwvcqfLaqUn7dF8s5hFejwJGh4syJuHVTAsrWP6mF9+hOqY0Qefkpl?= =?us-ascii?Q?obztvAeifSvl8oplqJX9LgGEvOF+fDspFAo+j5eYiyVT3KazElJcJr27IiKY?= =?us-ascii?Q?vFe1eCHJhWJRIk5OtWJodZdI9DxeSVVoBq2HnfNk6EeYdkJ+dPA/E9u5lO5J?= =?us-ascii?Q?wB5nDyh2NsZCYLwf9Tu9eflcr65B0owFrqaHKysTwDRO0TT+mYt6KPYS551T?= =?us-ascii?Q?D8LhT6JZrqFEYCDtU/f6+i8ga2G37+303nys3ozAaPIT8HZYByVKFN4UTjxz?= =?us-ascii?Q?ZgZTGyOCZNVh/yREWxlME8I8JD5hg6i1iUtQebNCCcxudxUSjMsCnDr7tSaG?= =?us-ascii?Q?jO+8cJWOM20ixCE4i0Ft762IspQp9FQUFR9DEraLEoIVA1SDaDzlxHqqqW8m?= =?us-ascii?Q?Zb1AJS65/lMxUbBmkyM/fIK0xZp8MjjkebPUitQLtQJQ2q3GfTHyZcDU+POp?= =?us-ascii?Q?2AxE/V4UbhJf6asjilCWgYx+YMiGjl8GukazQwDQwQ1FHUK6dG7tyL6b0TRD?= =?us-ascii?Q?eDs1bj4cG6hDtgGOe0q1BRQ7mPZeNkK/+as/zugitFLVIPFmOgmqI+8WrBmH?= =?us-ascii?Q?RktXqRtoRboOGFokzniN+H1Yrl7Zh/iJDYZXPmZJgcETjBuy1g/4O3wWpr47?= =?us-ascii?Q?QfqPBdlnp9eYnCLUGnoIzSEzFfpZIQq28oGJSHSdlF813XUTJFtV6mD5eGn2?= =?us-ascii?Q?gzn8ZxMxb1dSgJ1g7qCKASy8NuH6tNopsbfpP8lbS2iY64YRM7gIjBn0dYEF?= =?us-ascii?Q?DKryNS/TXDHtY9NcQiQlXT5anUScRHEVPBjVpvJonPCQG1Vcqi3AaBoodlIh?= =?us-ascii?Q?DE=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0709;5:q83WmYsVSAWkbWho5U1fNH/8MPkOpbUtAaGn+GMhacW0Pds62j48VE4lBGe7TK89cHCq/1QnHzhDbdyqdNvG7n/B+c7gsZI2xNQwqMwI8DlWW6mrQR4Tg91P5nEkDUO9DLpzuLZT+2DANyaltITT1g==;24:J43P0Yq/7aPRXH8aWqALSRmiM7c6D/zxH5Zt/hsINJACloc/z5i6h974vCgSgzTNNDumvk4PElsIknYV3aQox5blXU/w51ajPM7Kqsh8Abk=;20:xGvz8PWmRLQQRKdrpixl3Aj+WVi1a8bLQ349Ncln0unWmjC5KBYgjewRoB5OV0egR9Rkqm8AhVQCi8lsDEDzQa93egPSYC5+I7NIQiH7e6rOZARRSQa/VaUZox6FVjCFZ9iTUmTGkpAgysf13LTgB2Ips9CN8zNIXWiSwx1jafXY+FpMrdz8sOZSjqUX9MNfzdyHUpuOX9TmSpZdGnW3WfDg/vaFcJMBF2pEJ4vUzSVY7D5iq1V6rctWR10TcwzL SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2015 02:30:18.3334 (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 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 Cc: Guenter Roeck Cc: Peter Zijlstra Cc: Ingo Molnar --- drivers/hwmon/fam15h_power.c | 68 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c index e2bfab5..88e4f3e 100644 --- a/drivers/hwmon/fam15h_power.c +++ b/drivers/hwmon/fam15h_power.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -44,7 +45,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 struct fam15h_power_data { @@ -57,6 +60,8 @@ struct fam15h_power_data { struct attribute_group fam15h_power_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, @@ -115,6 +120,65 @@ 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, cores_per_cu; + + cpu = smp_processor_id(); + + cores_per_cu = amd_get_cores_per_cu(); + cu = cpu / cores_per_cu; + + WARN_ON(rdmsrl_safe(MSR_F15H_CU_PWR_ACCUMULATOR, + &data->cu_acc_power[cu])); +} + +static int read_registers(struct fam15h_power_data *data) +{ + int this_cpu, ret; + int cu_num, cores_per_cu, cpu, cu; + cpumask_var_t mask; + + cores_per_cu = amd_get_cores_per_cu(); + cu_num = boot_cpu_data.x86_max_cores / cores_per_cu; + + WARN_ON_ONCE(cu_num > MAX_CUS); + + ret = zalloc_cpumask_var(&mask, GFP_KERNEL); + if (!ret) + return -ENOMEM; + + this_cpu = get_cpu(); + + /* + * Choose the first online core of each compute unit, and then + * read their MSR value of power and ptsc in one time of IPI, + * because the MSR value of cpu core represent the compute + * unit's. This behavior can decrease IPI numbers between the + * cores. + */ + cpu = cpumask_first(cpu_online_mask); + cu = cpu / cores_per_cu; + while (cpu < boot_cpu_data.x86_max_cores) { + if (cu <= cpu / cores_per_cu) { + cu = cpu / cores_per_cu + 1; + cpumask_set_cpu(cpu, mask); + } + cpu = cpumask_next(cu * cores_per_cu - 1, cpu_online_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_cpu(); + + free_cpumask_var(mask); + + return 0; +} + static int fam15h_power_init_attrs(struct pci_dev *pdev, struct fam15h_power_data *data) { @@ -253,7 +317,9 @@ static int fam15h_power_init_data(struct pci_dev *f4, data->max_cu_acc_power = tmp; - return 0; + ret = read_registers(data); + + return ret; } static int fam15h_power_probe(struct pci_dev *pdev, -- 1.9.1