From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933597AbcCKCRe (ORCPT ); Thu, 10 Mar 2016 21:17:34 -0500 Received: from mail-by2on0076.outbound.protection.outlook.com ([207.46.100.76]:15495 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933443AbcCKCR1 (ORCPT ); Thu, 10 Mar 2016 21:17:27 -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: 0O3UROQ-07-HQE-02 X-M-MSG: From: Huang Rui To: Guenter Roeck , Jean Delvare CC: , , , Aravind Gopalakrishnan , Borislav Petkov , Huang Rui Subject: [PATCH v4 2/6] hwmon: (fam15h_power) Add compute unit accumulated power Date: Fri, 11 Mar 2016 10:17:46 +0800 Message-ID: <1457662670-3354-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1457662670-3354-1-git-send-email-ray.huang@amd.com> References: <1457662670-3354-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)(101416001)(81166005)(5008740100001)(1096002)(1220700001)(4326007)(77096005)(2906002)(86362001)(36756003)(50226001)(50986999)(586003)(87936001)(2950100001)(48376002)(33646002)(5003940100001)(92566002)(105586002)(229853001)(5001770100001)(106466001)(76176999)(19580395003)(47776003)(53416004)(50466002)(189998001)(19580405001)(5003600100002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR12MB0859;H:atltwp01.amd.com;FPR:;SPF:None;MLV:sfv;A:1;MX:1;LANG:en; X-MS-Office365-Filtering-Correlation-Id: 9672b952-891a-414f-b162-08d349534490 X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;2:NSYxXhmCMEtWXCi4tAtLfPT3a832S77VlvKl6Fd1R0nMuHBXTilDVptXSNCxA0PXbYrbHst5GasxJJhB4A7a1wXpGx/6GQUyMomeRGJOjzxaqDB53nzkNfB8+aCx8MdUMSxetmjb9N4KR+pcp2Ib7Ee3dDHBqygFTKDdrgVRPlHLqhOZADDbCs7mzahzCk7E;3:aBfOQyr6JST3Tmk8sPJnIeMP3EdGcgBkuTQl0Y2IYMhDfT7zwYi+VcqJmk1R7BwdgvSSSn3wKKeLlNOgOwFOhdzAyeBEWQ1us+lXJkYQtnZNLi6Ujmd7K006tT08Zc90fIumzDdO+H9cVNYoWb2i2SbIiXGXh7cuNSiREDIal5OFXHgW1VjYkrmaovgdAPgGUCjPn3aZXkoyF9OttP9rRjEFQfwFODUXnVnL2CB48PY=;25:Y627Xe0tzhPXa4LTea8PcBKVlelnApqsXx4lpNMrjD149kqQaOB3SsUxPJMgK1Dz94dhKd8IyhBbpcb0tZeTaRj3V/fDjDIMDnXNlR7bHlOxnzbGegdYe888UBOrdcPfy2Cy/uartEKKuMyHlZWAxoAEOBc2V54iJB45XZWGFYbctgB4dUhLpZxDqTd//femMzl0cW1kbkNx8+5Vj0oKyhiLzVnDvEBOBRHTPD9XpOgNENobdBpOKTTRiYjf2AsTTk5mFwgDtJ4h42gBjJps/VNZeIYP1UBkasiNzGJkixC/7nb0UGebK/5ReQFrAYi8RxZMxakGP15dIyU66fdm5A== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0859; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;20:9ID1gzKfJGDTFooOXi2DKt1rfI3S4kGEhQgXvxs2MRH0zt0PCwxYNdRL9+Zz9hOrCRUFZ4d8yU+A3nbcGAsWiXY/MH8PLn9VFC0sd2rVtKNpIWMol2cGlC89Nz1qizFG7yB8b0unC1re/ZxBdDLEKpbXfx1HG2jtMqPBnluoFO7sEplBdfqASqulTv+fRNjHtbbjzZs+gS+ZsesKSzP5zBdbZbVl8YC0Myi7cxb2Qgi53b608NumaokhFiMOU/mzRN3VejzRxTJ7Ba8HZIgYi9hXmvqh+Rmoep4aR8JJzDbd0aizus0wrMiD3mzQ3ARoVbwDalN8FUdJqdfvgfSLVa3YfoObsg9W0EkJtAEGdcsXYYr5S6w3TewK3cSuYh9C5KplGHRFmKCB4tizygBV8pGrUTz0H1CzgYBxPmXhQWypOmXgfH/AP5g8ngUOcMfzSt0gSMQZruFmV/LVSxkrJ88fdrLXtZbJMj3ZrTayNgWJnlc79skV2x6qxwwtXQEC X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13015025)(13018025)(8121501046)(13017025)(13024025)(13023025)(5005006)(10201501046)(3002001);SRVR:DM3PR12MB0859;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0859; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;4:W/1mK0heT2PLcuVX+tFUV8jWLD7x+934ApKD+a5sY3vJXwHG4tv2D5U+YNf+cTr4dSSQuUa2LeBirR3L4U8smnJ2qNrKZPodU3BiW2eAaRyDFBYXAF0pUrgkXOL/XjaELhFJJPIXA0jTzbMrYDxG0bXGvNTwBNlI0tWtzIXKw+YEQRkDsSqBWs+t6iNlTTc6YYOB6lCKeKwDbGnEZok/9XEHftnCcVDsVjinfgwnd94MIjQnm2lQE9m3v+BzUwQTfVQ9yccd4EaMniSsHk+KkEEVvTpCz70dc/3/hamRpkHkBD7/F7wUsyD3NbCHg4zityjIgQlKywqcHJslac41ZJlU+Wf77uBe62Q6jcJXxf4Tcei24TyLdUlefvvvMejYObkWSHvIlmlarPCIemVpgqwvLZIdS7K1Fjo+QmxzV9gw1nMIHGKSMVbRQ6Q1xmgppaCJInVOech6ylTTDphKfQ== X-Forefront-PRVS: 087894CD3C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR12MB0859;23:smcImHE17ljcpfjGJYCYCYnkAB5vwoh7FBgTvUO48?= =?us-ascii?Q?Khx04r/O3yQU4/litdzEn24Zbd6of9fThTtJFj+kku8Yc6VAWkWhWQaRZiEl?= =?us-ascii?Q?yKvMWVFMNHyM3Gu5FGhSrs0HW/Oy1r4hEeCm7j1xmN43KLe/fYfmmdrlZHud?= =?us-ascii?Q?l1xqxpy/0XFiQHC4JwYtQokLZnMGsJYVOxMkXcbc16oWh8xaSQ1cQkaRYLs8?= =?us-ascii?Q?BlofAb5T9Bx63fa6f/FxVrRTCGPsU0IrhFhanERau2hc17Z0fn/s6BM0F/Oi?= =?us-ascii?Q?yQUQtHByiIfqmBS5bXcXNc1PDWtyNDikf6Y0uO+xF9ztwzatcXcn5AVhE2m3?= =?us-ascii?Q?ytCvWu+RAJZW0eQ5K0yF9Y0PrXzyK+CFZ4eN1WrB2I1WeelpOw1Owu0aRCD/?= =?us-ascii?Q?GuRNH5ic1YQnc+gmQpXg4UHFVhy4YqIthZRwyAA4JjihuJABUcVJp9dbaUw9?= =?us-ascii?Q?s9MBxotQLSU0cih77NLVrbQc2yy/XwrVaFtGlZK9X3MCQjR3C4aSb9kzAE6X?= =?us-ascii?Q?fkdegFNYrQvfcuEQY1+8epz46n6zJCwHueDUbgY8oC/814q1eWEhzvgXnh1N?= =?us-ascii?Q?yWNCKYMqNGgmcFcxlgH81I0QeT5xPJp5X74EN5YMp9YHR3GDIZfoqo4Vg4mn?= =?us-ascii?Q?9uf5d689bIupFiKU1LUmzj9rQVRXVOAu6zXnZrs8JhLKr6psmDE4CgwSXMqs?= =?us-ascii?Q?doMDMRB+R42Lvf3pTeZG3zQ3OL48ktXrRRXA/pLqy9ycD2V7dHjH6u4TKNA7?= =?us-ascii?Q?Z4VsBvNczUV8O8X+ASLt3X+iiI6qPwPga7tomHAT65GTrY5C0eMy208WAKUf?= =?us-ascii?Q?LJrkK1CwcmXNMZL6a0ds8xyiM3KQ99kTjIZY3VLMkTO3fh3UZAQ5bzcirbsh?= =?us-ascii?Q?lpnigenUBGPcl5yullQCz3w1uJR/g3QLet3f4T9M3bcz6SPN/KL1kx9dNu9h?= =?us-ascii?Q?jy6s2x1cJ2P1F2wR1wMzmnavPFeNt6vA2YBlY3ThQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0859;5:dYotlDgobQRvDaeP1+9Axczc1e+ciIEWNDWLxyaGdCahAspFYAGfIRGqEQKPmF0LfcLOPKxUZG29CqCZn0rt1PPlE/IRrsOSPlhaolvoLW9omLyoIV6ze4eSaS63HJhE72SjCbP+dFKkO+Uedmt2nA==;24:vTWHVy/zTuJYNUU16eXvcw18BLcMvNVwvZUShmySpSjUlmOFUyqu7X5sW/CDNqBfixvdRtgXMa9bFDzSpIqiS3xcbDJP3o933NHy38epq/8=;20:bsgjM7GOtA8DZDh5qfqT5kgv8gsGqNIsFjAIMQ535qC6VDT6VSx/bC9xECSKpi3BDmjgOfndn5pPBGSsoEmlaV5ZxD4wdFz08Fl9FV/KqtyJ5k4z3eX2YjoRbTKPlibzrlqsPGyynOdpSq7/dTC/nSPIHxjEV0PJasq3vybzpyy/QLlizHQDSUCV6tXhBppborUyjBePvP0XZQXxbqIwl9zgURiXoe6MQRA1zE0Mmy+zmuV2mKWf454J7pSaqDrr SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Mar 2016 02:17:15.0657 (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: DM3PR12MB0859 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 | 61 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c index 4f695d8..c5e2297 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,59 @@ 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(); + + cu = cpu / smp_num_siblings; + + 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 target; + cpumask_var_t mask; + + ret = zalloc_cpumask_var(&mask, GFP_KERNEL); + if (!ret) + return -ENOMEM; + + get_online_cpus(); + this_cpu = get_cpu(); + + /* + * 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. + */ + for_each_online_cpu(cpu) { + target = cpumask_first(topology_sibling_cpumask(cpu)); + if (!cpumask_test_cpu(target, mask)) + cpumask_set_cpu(target, 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(); + 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 +322,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