From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754726AbcC1FcQ (ORCPT ); Mon, 28 Mar 2016 01:32:16 -0400 Received: from mail-bl2on0061.outbound.protection.outlook.com ([65.55.169.61]:59296 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754555AbcC1Fbt (ORCPT ); Mon, 28 Mar 2016 01:31:49 -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: 0O4QI0T-08-XZK-02 X-M-MSG: From: Huang Rui To: Guenter Roeck , Jean Delvare CC: , , , Borislav Petkov , Huang Rui Subject: [PATCH v5 2/6] hwmon: (fam15h_power) Add compute unit accumulated power Date: Mon, 28 Mar 2016 13:32:12 +0800 Message-ID: <1459143136-2412-3-git-send-email-ray.huang@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1459143136-2412-1-git-send-email-ray.huang@amd.com> References: <1459143136-2412-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)(189002)(199003)(106466001)(105586002)(33646002)(5001770100001)(5003940100001)(11100500001)(5008740100001)(36756003)(48376002)(77096005)(229853001)(19580395003)(189998001)(50466002)(2950100001)(19580405001)(1220700001)(1096002)(50226001)(76176999)(4326007)(50986999)(92566002)(81166005)(53416004)(87936001)(101416001)(586003)(5003600100002)(47776003)(86362001)(2906002);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR12MB0707;H:atltwp02.amd.com;FPR:;SPF:None;MLV:sfv;MX:1;A:1;LANG:en; X-MS-Office365-Filtering-Correlation-Id: 588537a7-b11e-4cd1-df9f-08d356ca3ff7 X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0707;2:/CsheNeKRYRD9jA0RLP7hIbTw3Pww3NXLKBdDXlW0+RuM6WsrcyLHN5V2qN9cfJA/KeBDURUBuFrpTBLVgE+UdOGF88I7jzYeYukdyydV655Rps/JIvD64vAtoGoIQ6SIEUvwljC9z8KyWONnUAgYP99dZHhMRheTQMgVp3A0x5GH4B3dLBtVDB76mOkjqIo;3:xTnYyXqhi7vPxnzmcYB+SjTu7r1zkI7z7kX9inWXu0u7ph9JKRcS2NWyMB0fZdXQR58WEagsXoAe+zyJUlcpHkYNjSex+Wop2YLdQ7L+eveSe9Jv+RYi4wZFSKro5RQj5Tsc+LMqDg1/W4ZjhDdaOyiqAJBeT963g11SJdvERx4YCZit98gvXLP7EIEpCGlwhpNoQkCyojFVNEJ7LIJCfAgNNW0VJwN1C5YQwhD99qE= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0707; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0707;25:9GLllvcJmKP02QYpDhPzHRJU05VdHtq8n25hLo5oYqyac6agtkLVmS2+OE3/LC4MpbDOGRqalZF/FFIukI4jJsWlRs9IAd7fPr0RphVK68pUcUEb2uk+wDpRPgm8MJ3xDa8gHKNYnS1NksLum62b4/nJ3iOTPtnFnleC0e0LJ51ZZquzJDZPw/m0eBOSi24C2Xaxw10aFXSDiwOzxwJtds7xIOmfZT1KmFHuwu8pY5OWPcteVITGGwfS+OHgAFMiuFdVfyKqDYk65dUTas4p/jVtDt7HpWPs+XRq1SN1pKusqGKBj9r/xebDmBFP3fB1egdJ7aL4KSnDcWMc+f/MdR4L7vxT3VqjWysvk5qUw9XcoRDJLNyv4wPbnGbA45xWe12wpEy1LRUE6C5+ZiSJGHl9UxXRKLEOiFdNHbWlCIJocN5z5XsYNQGVCw7nF1OXweBSLP3TKMbiDp6uwv469E+TvQriEyl0EO52cBqw2o30azOlC07FGmzCBgCJRxxST3QJdMU5aNirU/jkFl2U3X85LTsuxoyOuz9D1jTBYfl8PI0XRczWFZIY0jVmqgB5BP/7RLAPYUl6EqQIRdNHng== X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0707;20:IA/g/rXDCOB4t6TTYrjGaNzKxRnutwpOLnFmN4eiw4xQzrb91WJDx20SkIAfjO1Bjbs002lB0z7Izr8unVRFc9h5xvPkcfr6PJWSwRS7xqeiQWmM/1q5vFkjvd/4iM/Eie81oegde9f9DMGRZ5QN566VBarL//IDGPKzoZhQzbAQFqAuXyVEbjGIqx8dqi0xtl0m6eVm7YuLB77tnZnXi4OS8G57aEerucCq2BjB2AY7UAQvTEc7yr+E46Alt8yqEqe87x0DCLNjIpje70cCJ3A5vGLwwAyg2prevs8jzlhjKstbuQNK9K5kSRuKCprGZ4GeQUhykL90xRSvJCQ7HCta6w5QVqdrQZ3eUew62jjaKeMk7B4/btJXRVkdJFhoRlt3QlM3o80GoK238tNbvYDfW+ZoPDO3KNmNK/Jb5jSw4irzc4MIpidyCWNUu5SOy0JgwxkBEBY3olvq9a+NnE/pC926J/e1KLBR9YQMBET9wXlzefECCQLKjlUHD9m5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(13023025)(13024025)(5005006)(13015025)(13018025)(13017025)(3002001)(10201501046);SRVR:BLUPR12MB0707;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0707; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0707;4:TpeePeYUa0UAqsheB4jHkcRLqklHkBye/9x5Kej5TOck3CODi3A/iega2EKX9TM3m56Cguebe1PFNm/JHJHJRytmN3pXzHpxdjijoBLI0YNb2I1nAzUlX7CuF+psYOgkXhoeaHThulxSsAUjoYvAaY8mn7JEtyDilMU0vRd1y+GCPkbDkOJ5TRTyOAnAyZzLAfmaHEgMw18BoErfak2M5SQFKXXCwR1RsYq/4qQmSNISsC6335gkQP6nxN76ie3XRqw77gWptV/4nbaPepL3pJpdVpvOMpJLpTKhxYuzsz4yL2ujHFeeXyv0QHogyTYS4+IjFTMaaRttrd/hjyC/T1xbI/Ta2AQoppMtfymgeb/1GCDht5FF3lAMLMrf3kPnQpZgS9Qk/W+VlPVfxv/aEJaw3rwOp+jrOOnS4gfbVymJTzMgFtfsoCEFWqXkCic4HZ9uJonMMSYguP32kBW5DA== X-Forefront-PRVS: 0895DF8FFD X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR12MB0707;23:IDZEROwKrVN53HwJfGzsKK40AcdcBqADxg4kutXL3?= =?us-ascii?Q?NR6l+9Fp24/jxlAVpiwparzcJ8KuYz2va/zCcV0ZHGp4PuBlqC1F12t8qnFD?= =?us-ascii?Q?NPoBIxEf9bMCaCsVSPe80Z1gIvlooImxybA8Aky+hb5QwSXo/EIDudDkWtm4?= =?us-ascii?Q?r4HOQfnu+cqWsWB6j+P1YPoECBR4bvGTeX+JV4Kg+M24961LoKFGj7y5rmR0?= =?us-ascii?Q?9AksQ8RbMEOoZjPYNqZvlDbe6otEAM09P6YP/Xalb6f9eyeNYCSVz7avPruC?= =?us-ascii?Q?0biR1ib05rzdNGbTu/2H8TY/bH38QpaPDQNNQbL15P1M0X4wIioPHYZw4L5N?= =?us-ascii?Q?I5bFmkgC+npaCs5RFygbZROzRFfodw76QyoyamNyadtCv+C5mT5XSeou3VAv?= =?us-ascii?Q?cynvgcB10EWbuO9HUCNSYAFiUb4mcPM/agghD7/ouPtcqC8YX4Kbjw1wbNc+?= =?us-ascii?Q?0fE4RPhMS55U6Siz3Zc3B4rQbFKoIqzfLdSQDxvsRrTOj9Q9AsWk05+3QIA8?= =?us-ascii?Q?VP9dZWjAP0pV05f4oD0YEbcRIHxS9cME2SqOFMzyCuUdVmwcDOat9N7iMOr6?= =?us-ascii?Q?PN+x7xMDdUnfgXV5ejEn2eAPwJuX2QlL77rAWxPyCBbUmHKAJ4KewIp9ZKQ0?= =?us-ascii?Q?pqcWAvSozmkEBgtmvV4jGwdEdz/u7kTRmzA1Cg0TK3G+z7PAhcW366AXdwSI?= =?us-ascii?Q?zftvKAWE2S5EK6TIsauX6O1SqdgPPJv5+f5rXqctn6tJ8i6kHW8lDahWme8z?= =?us-ascii?Q?XhHN1HuReSTtYGqiYKGaCWHspwm3fQ9xdGARqYu2EksbZv0ckZB18zFhdqba?= =?us-ascii?Q?8GW7dOFAhar8r0QsD5NlW6Kd0flLOTYIWaxGUglnE3cm0smsAtYd2UmDubjg?= =?us-ascii?Q?ShSA78wnWeqwOLdoqeSddqOQ+Q553eyBc6VYlIpR8s27y9Nd6dlXRe7UHhw2?= =?us-ascii?Q?+yDZwe4uk5iulLISF+45UKCC/Y98VWAz9mifhSv8sp6XtDj5DUuwSf1ZJCUO?= =?us-ascii?Q?2kUFO9Y8ey8UTtYQ7IPTBk8?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0707;5:ILEWzB2/NfaDgxaH0fw3tq51RZSc6qZiIWMHnWWfGkFqXpAaB+1A00YKP47HNMLF204k67OcyrqcifMs2ltPHzlWrmOO7AwYaSYkWLcEuLQhtJm1fe0PplCXP+ucsoR4+17o6HAq8oIEQie2STkwpQ==;24:G2xvG2em7VKHRB65TBAdV2tOz5rffYXt56mrlXCOK6Oxb/54Tx4AbUFIzIWlbhlhTcm+IV07zgomEOF6pe0CSHvwHbBFXqm876e2tptq/8s=;20:PQ/ydtMX9u8vxsVfFB8PtDGcmFRBOSckWF0QhnKZJPGMJBB301FbdBmx6KiMZ90ZMiHyRoMXMfROqQVtgNb96oRKBE/AHsww14ONJB2QjZOBiFvFFOYAmefih8v+dfD4s8NdQajTNlVGYsM1sRy1NISFHYUThw/bzgYNcF8kgjsNNVAe3JINznzZZ1gPzW91oplWHEl9kndb+4VanD236Z7WnxM1i/bDbxKtBVNs45vyt1LBRGXG6YFbU60VRNH4 SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2016 05:31:44.1588 (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: BLUPR12MB0707 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 | 65 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/drivers/hwmon/fam15h_power.c b/drivers/hwmon/fam15h_power.c index 4f695d8..ccbc944 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,63 @@ 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 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 +326,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