From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752511AbbJ1FHm (ORCPT ); Wed, 28 Oct 2015 01:07:42 -0400 Received: from mail-bl2on0058.outbound.protection.outlook.com ([65.55.169.58]:27912 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751182AbbJ1FHk (ORCPT ); Wed, 28 Oct 2015 01:07:40 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; amacapital.net; dkim=none (message not signed) header.d=none;amacapital.net; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NWWZKM-08-3J2-02 X-M-MSG: Date: Wed, 28 Oct 2015 13:06:36 +0800 From: Huang Rui To: Borislav Petkov CC: Guenter Roeck , Peter Zijlstra , Jean Delvare , Andy Lutomirski , Andreas Herrmann , Thomas Gleixner , Ingo Molnar , "Rafael J. Wysocki" , Len Brown , John Stultz , =?iso-8859-1?Q?Fr=E9d=E9ric?= Weisbecker , , , , Andreas Herrmann , Aravind Gopalakrishnan , Fengguang Wu , Aaron Lu , Tony Li Subject: Re: [PATCH v2 05/10] hwmon: (fam15h_power) Add compute unit accumulated power Message-ID: <20151028050636.GH8036@hr-amur2> References: <1445308109-17970-1-git-send-email-ray.huang@amd.com> <1445308109-17970-6-git-send-email-ray.huang@amd.com> <20151023132702.GC2844@pd.tnic> <20151027025339.GF8036@hr-amur2> <20151028003418.GA7802@nazgul.tnic> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20151028003418.GA7802@nazgul.tnic> User-Agent: Mutt/1.5.21 (2010-09-15) 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)(24454002)(189002)(199003)(164054003)(105586002)(97756001)(76176999)(106466001)(101416001)(86362001)(83506001)(50986999)(33716001)(4001350100001)(87936001)(33656002)(46406003)(110136002)(50466002)(97736004)(47776003)(189998001)(23726002)(11100500001)(93886004)(5008740100001)(54356999)(5007970100001)(92566002)(2950100001)(77096005)(107986001);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0717;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;2:MlGMTCV5PVaDdXeuAugSpIS2QlmXWAK2NXYs/6EdgrxBRGbxhI7AtEB08QkGgJomrlbs0GWKJMegei9QSYUnHymCLPNxFd26WBR5OmnNd9Ss2/4JQgAsReIMr889eH2tNUJ73cekLQ/X+O4adNcxiYdkaJEtM5OiGXDOBPw+AMQ=;3:sdXFNP6xk6aaRBcP2X/eWHlQTWSQthevCCZ7cb/gP29ZUwYlARReaawVP4Oh19eX5zXgRAgMw3zg/t52iWzxgS2t2nmt46ex02+DT75v7AvTXNKXyGieLvRyAJYbFuI+OwD/b1pb2HBhoDf3Zp6M4mGeZ0ArleyI5VHqTPaykGeAesuRk5JIoswUyOeTkkF1bkCQsfatGJSa1t4vY5OycWwVE6adraJs4xan8WpkY93nn+AQTyY20hUwucdJcfkz;25:KYnhHIr0XSqRkl5m16NcD3Z+7cQCzpTxtxx4bt4lwVZXwvirjW7G5yMk+D4BXmWzHlviutMmTy4HuN1vZcRAbZu/y/0tzlDI9JSZEAKqTNeo/GrF7VrtyeckeHhIS0Dhnqz2SUvbCVJrSetzUBZb17ZWtzy+QwGNxChczJEX4LNOn/yku3LE3InwHVsGg8z+EZUx2Vfge7kusx+UNOlPvaqNaHkKikluzaVr6y87XrV50gLNqvHXWCRAwuqHT44p9DXzIUSpfByretV31OfftQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0717; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;20:QPg/4b4a4R25iBsgJKk1NonwBBVNvxvIsJPrlnliTkUM7CwqxTOrkd3hGU2OdfPrdiHVHbL7iJH/99XMrQy1CuaZomu3L75vRMECbx7Dr4fnQoxbSKghqieOmfhY0vRqQZQiylmxRCoUCQqZkU248eFuhcLfC9N9Fw34LyA09bXCvHD3N+lLhVPv2xgAFt/o6ZXoJQauNo3Jqa7+d097Wb3mdA+auoo41zRE90wACZ4dtZlOdhYs0btCv1YK7EalcYoAwQMEbiA/BTooSq4zCkWZUUC1meFpvGhyr9E+HnMejl7wJqHYPt0rdwfjO/ovyPsj4w07KlK09UvH25YnLW1+PoBmQgEehUnFFhP9Ly4YgitYRH1ESTw0yS4mzl517TYJgUw8v5RgE6ZDAz8/f2IXGlFWOFXn02jhElJBHpTxIpqHceN8xBjmCj8UIVKMVqLYco6ORBgfpu8zFAi/d9i9rgNj5Wzanx+fd4WsBsB+B6r2EedvkFfQvZIKx7ls;4:CzKQ6h2gCEvKc2NiAXfeKLE4giF+dpLHud5PsNmcHOZlO42APwy4n9e3YwPu9SRgECAsfjO32vrGazpUQliN5aJbyUgC/KkrjL4AgbneWK6s16olpmGYAyVqn+k2baGLWYI0bFoTAAOp8WAm8d6CH9Z0tkO27MxgcTRJJwmUWfzND05hN60YpfJTfMbzP9S53oNpLEZbcabjVuJas202IoHNAl9xZ1IXcIdI1NbJp8Mevz5+GjIg0xBYIH5HQnPKfqohnQ44xfJJAeywzfWP48GFtDSNBgsM/R8emokIc5nCLA2LNeafzGqJ24X1LNyJfxcavIX6eEirIO3kZoU9V4a6wum5IKZEs1FQR9WdAR83GeK0RWK5tWgzrmbi19Kj X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001)(102215026);SRVR:SN1PR12MB0717;BCL:0;PCL:0;RULEID:;SRVR:SN1PR12MB0717; X-Forefront-PRVS: 0743E8D0A6 X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;23:5zhpM6DYsex6nQHxXszT7o+THWnmPCb0h6dSadyRON8jV48ixBxQMBtC72VL0z16Q7+d3rG1ladoRdZRpeMGgd9exw3pEFX20iyNe2QmQGCQ5AcpkZHhBjkqfL/zy8i5vbYWiNyTQ5ASqP8NLz5yekusGk0Rz031ii8aVWf0d2+d9b9pZPggIGBhOklP9u59j9mJgOczi7os8xAinoRrsppr4xOAHFe/nSii94z1i+4f0eP/uFRU5IwWwYZUxlnF6ocENfxrVkin651dJ+cYDyp7mBjE+J48F8GC0OCFjxlU4emo3QSRDjsIH+bv0gaZ/YBGmcNdWfMd1YRgG0VI5lw3dPMlJD8yd+CklVCTglUNjSMe8k8l4HuenPQENjGtCGLuHTbi7tc3G9aFAw2n2JhxHFDrNxh7j7brHnw6DCf7ic1zy50+wyAEL6cKPu9nMI1WgW37+W1DFb+XiwYJtPvdHMnYGxAKr0VVPk6s4QRISJCqueYrG1iQXhQW9rVEdf14Ma0w5RVrd92XVTkyXYUJLBD/m/kk77eQOP2L7KrXX+f9oSoLJS76c/qit0ZB6qFoNWM0VTSznskBhKAsHGSelcjdtYowJy1RQEJ0pB5ex7feQaUGATfOSf9L2ftDFJ5dj0Z1g03CdZLr9SLF6R0vWapRBYb8adz43D5jyEEayA147OhGxdK6DsbtDE6iCBkWtb/HzE4kpxjIcxEAKHyruOR2QPjnkzfC3RoA7/RM0DFsQsPL87+7QwKK4RbTptfRZ8Y77PCyrvcnd4wE4mmQDVR9zghnCyYR9dlelLEl5zKOPurJgMGvyy7PPkdF7OUNDa9FH19hZRwVQw6oIiANyqyJftd30slugOcvv+qRL2jOECL8YjoDqflrHjJxdkFmQmn7ufp2+iQf6Y6W9gzujH2SmucINo/ZfBFPMbJAT/LD1Tpn5TQnQo9WHo9A X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0717;5:Eja3xx3tu3ikg+9/jWRY9bW6ze6Rgl0g8xAdNwh736gq7aXevlOxv1/+N2XbOXW4zKImsoEXEb/ocN5albH9CpJGK9bZ42BX+Ax3j80lKvfUZ5PcN8ZyxTtEtpYVv+vqB0lf0PoHXzzncAc42+5NCw==;24:rUz+aLaloB+ofHAaJH09KqKqF9udS/HVRzycEnMy8Q3B5ydug3VYp64Rz4qq9QKRxvFERpg9q1qoMVGScf9zpgeX5OrwhCUi9dIB81PtElM=;20:34SV+PFM0sxl0ScdXCeU9z+uj73jutBJRkhmL1Phj3vYda0+lWRG1BUJ95sP2WSOEFKxeVZZOGV9wmB5zPvomKtDx3zRGYbmrmytL2kkEAOKjUquKnN33V7K8G9eRVpmwe4Xo2duAdzWR1p1h1vvKev1juT34eLJZmW382aZ46n41qcS5EtKG2Q9WPm36KhFMJ8QOQ3l07GQzDcuqxex0xSREtPjB7pMte1hWqQ8gJ/+19wpiOW70E/JEaVgmIdQ SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2015 05:07:36.1729 (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: SN1PR12MB0717 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Oct 28, 2015 at 01:34:18AM +0100, Borislav Petkov wrote: > On Tue, Oct 27, 2015 at 10:53:40AM +0800, Huang Rui wrote: > > Preemption must be disabled when calling smp_call_function_many, > > get_cpu would did that. Will get_online_cpus have the same behavior > > like that? > > Well, get_online_cpus() protects you against CPU hotplug operations in > general. If you want to protect yourself against CPUs going away only, > then I guess get_cpu()/put_cpu() is fine. > > But since we're going to work with the masks as below, prohibiting any > changes to cpu_online_mask is probably the better/safe thing to do, i.e. > > get_online_cpus(); > preempt_disable(); > > smp_call_function_many( ... ); > > preempt_enable(); > put_online_cpus(); > > > That means "the value(cu_acc_power) of the compute unit", which does > > not represent the value of one CPU core. > > No, I mean this: "This behavior can decrease IPI numbers between the > unit's." > > I'm wondering whether it is really needed at all ... > OK, The real words are "This behavior can decrease IPI numbers between the cores." Actually, the meaning also can be reflected from the codes. So I could remove this sentence. > > OK, how about below codes: > > > > --- > > for (i = 0; i <= cores_per_cu / BITS_PER_LONG; i++) { > > offset = cores_per_cu % BITS_PER_LONG; > > if (i == cores_per_cu / BITS_PER_LONG) { > > cpumask_bits(src_mask)[i] = GENMASK(offset -1, 0); > > break; > > } > > cpumask_bits(src_mask)[i] = GENMASK(BITS_PER_LONG - 1, 0); > > } > > > > for (i = 0; i < cu_num; i++) { > > cpumask_shift_left(dst, src_mask, cores_per_cu * i); > > cpumask_and(res, dst, cpu_online_mask); > > cpumask_set_cpu(cpumask_any(res), mask); > > } > > I think you can make it even simpler: > > /* prepare CU temp mask */ > for (i = 0; i < cores_per_cu; i++) > cpumask_set_cpu(i, tmp_mask); > > for (i = 0; i < cu_num; i++) { > /* WARN_ON for empty CU masks */ > WARN_ON(!cpumask_and(res_mask, tmp_mask, cpu_online_mask)); > cpumask_set(cpumask_any(res_mask), call_mask); > cpumask_shift_right(tmp_mask, tmp_mask, cores_per_cu); > } > > smp_call_function_many(call_mask, .... ); > > Something like that... > Looks better. :) Thanks, Rui