Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932186AbcLNKds (ORCPT ); Wed, 14 Dec 2016 05:33:48 -0500 Received: from mail-db5eur01on0116.outbound.protection.outlook.com ([104.47.2.116]:53120 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754825AbcLNKdp (ORCPT ); Wed, 14 Dec 2016 05:33:45 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dsafonov@virtuozzo.com; Subject: Re: [PATCH] cpumask: avoid WARN in prefill_possible_map() To: Thomas Gleixner References: <20161212161118.1095-1-dsafonov@virtuozzo.com> CC: , <0x7f454c46@gmail.com>, Ingo Molnar , Rusty Russell , "H. Peter Anvin" , Jan Beulich , From: Dmitry Safonov Message-ID: <8c38ac39-80ca-50a0-09c1-2eef619a3f88@virtuozzo.com> Date: Tue, 13 Dec 2016 21:53:06 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: HE1PR03CA0042.eurprd03.prod.outlook.com (10.163.170.180) To HE1PR0801MB1738.eurprd08.prod.outlook.com (10.168.149.150) X-MS-Office365-Filtering-Correlation-Id: 306ea505-6eaa-4147-45dd-08d42389bacc X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HE1PR0801MB1738; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;3:gpxUk2MZR1xuBZ5teZVe5+e0Axn+nHykSS6Y8Wxj1IFGvN27qN4O0LvsakO3WYnghu2S0sE+Qutd8PqbFPTdfwX2hw8M2ZEqh+pJy6EYaEFcsWIgW6sw+Hsxy2rJgIWBkEjRQdI9uK0Iye5wmf+6YJYYYhL0ilGGLcDc08JBNXnb6+5LW9iQcvGc0d1CIrNzNtUKh+vbuTSJF+/xtVPe1fGDmoBLQbnyNOiEZTMuwaCnnMSTGIkJ+U8/s+sQL3ZZKB8VajuqIR+P9QTA1mlinQ== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;25:5Ykmloi65/Y0wcFqg85iRpHVuoWLo1MO8oOOZi+2vKqVJ6Vln5Xg3eUkSoyDSXzPFkUdkoanJdRMl3BumweNYZ7JxbSqn9jXAVKcNLLCkbMM6GUjcYf+JPOtuNOSXqTE5d2lX+7KeL4J43qLjUX48PmxKxqKLoueRpxOToncxQUcjfKgBRmHwonmyiiQwbTnSItA2hR2YxJhfl3u/rM0x3kb2RYg0xBGadRzLcs1COiuqCWVDS4zXwpw67SeMtr6lWjqhkTV7Z4M6/5/uFFuuIBgY9MO3ww/q6oVuwJnmfexCm+iHEs4ZBjy3agk265UBmKcwkO/C7o8zGNV0195DA36MFCv1We9yXFGApHKgQfj1PsqO151febcHgG+mYJIB3/NDWFtrFntZwrIj9rIcZQn4ev8cgYqLdJpw8qZ91b6EM1jtL0AiUSEOtlBEhOOJKpEZfZTMhliNtiO9IlR514fkEDlfaVx/RybyUI+tgFyZY2hGq8Dqd50V4HnGqqiFuNYz0ntCpesCYnKza/xcu0HGj3RkaXOzkgKUI7PiM6ZVlAd1VBDojw9HSo1aja+UnHFJE8jfQPl6p9ybbbm5keF/dXnwUbAT6UbRux8AYBdnSqHAqq0ZF3vKKuac3qTehSpDqM0gHk9e5jrzL7A3bpv4jLZfC7b2AxK+skQcEMaCJdArAXiCauEzqejz8hxVj4KUD8FQ+veQu0IIFtfQiy/Gb2urBvTrxhTvhLV4lDLxz9q/UBP5Xu1TfUrSn0OJnby5pdGiVMt0/ceHbaMjw== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;31:6w7ph676DBYx8zVC3GWo+dibUisWLZE0PQjXAGg+T994DHB/aNCXUwZQNRhCnmls5udC27rC3dZD9LMsv9d9TNPl2XXqXTz3DbGEkEOyNyTD3skbCI5kju4Tvz/q3iEvPN2jvUCfUMjCqAqWi6+etDPDugsP8RQf5vEHH1vVUthTKPW9wL2bReFENQJVM9qa3WyYsM5DlDe3HicfeFWygsJDj0GJwrdC2c+vHhgajHEfNghXmp8LLfNESTDqM0Cu;20:FFWgSiUykjwsOuC1rQ9wpN5N+0zq26ni7SN+jcW6pxXGZzWQredWsVjfhZVMrRCsG5gRStYWb2Ow5yxyp8ly9V6RKd5oZL2WIzejvq+bfPcZd0+V18ikuYmK7cWMQbKkFGjk08fRhqy3++jxU/2kZjLqqpIKVZTbe0NylDUUMQLiOiL++zAaFO0Ar1SJe9g2P4ySvxoP9eriLzI9ZMdybTtjMACchyGFMFtTGFkE4xwXgoVQCldqmEZjo8GDw2dd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(230824228335337); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123558021)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(6072148);SRVR:HE1PR0801MB1738;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0801MB1738; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;4:dEwXPXtexQPMJuQZ17tV7o8CdhyHU/4KXemRbPCOKiaQpPGpw2AZBDSp3T9QQxrQJOnCyIacvJRTLOq//hPla9xgMmcIn2IJ/kY6Q2CfrybqYT1Bt41TYjZIxILuKtjxAUhboKONh3+zm3abaP57GJwYIONBOxkwaB0mmnVEpXVvF+9VbXqWDH3nhoWO5v5HMCVZ5He9YnLotE+71aM48QLZqSIbf5MKuy8A7MQAO/byymP614CLGbYO7NvJzfY5JlqTCy8THN5SDyQSCGgwaMqhNDBR5znpTAdYeWeIoicue1l3qm1aMj7fXlHtnLN4BJe3qOlEVR6mRDyBehZo7qVxsPwkS5i0hrHoMfVZ9g7DbLAsZzaUJmNkY2WFbNdJWasBkXFcaETZeisCWJimHP/8uUHWzqYDAQYfjVQltmLkEHwS59+P8iDMExyf9JvKDK5BCDbJ07XXLlTyNQNihbUN54zMqTX05J/ujSLhj5Zoxyo5BpJywZDSQJ5+prC8DPa7cWbJuBrFGwyGfm2TR4k+8YPlQLEFflGWlqRFMvJnZe3+EmGvItlLaPrbD1e3OrvGWvi6QkGr9PFThDqLPO3tWZtxA/Wc+6B2vWbMUOwXJK3D+Pgrpv5crzsURmcjqpoCpnxmIErN7wxAz+KHjQ== X-Forefront-PRVS: 01559F388D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(39450400003)(199003)(189002)(54534003)(24454002)(377454003)(106356001)(7736002)(6116002)(2906002)(4326007)(3846002)(105586002)(86362001)(110136003)(5660300001)(575784001)(65826007)(2950100002)(6916009)(31696002)(65806001)(66066001)(65956001)(305945005)(47776003)(83506001)(230700001)(6666003)(6486002)(97736004)(36756003)(33646002)(229853002)(101416001)(4001350100001)(50466002)(8676002)(81166006)(42186005)(189998001)(81156014)(39060400001)(38730400001)(90366009)(92566002)(54356999)(76176999)(68736007)(23746002)(50986999)(31686004)(64126003)(77096006);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0801MB1738;H:[10.30.26.154];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;HE1PR0801MB1738;23:F5vw6HTg5hbdCWirh2n6mlXkF/NUd7/Alnp?= =?Windows-1252?Q?eS3IvF0fc/tkV1s0PTVXm2Rql94u7cSPG99D4dNhAwlC8UTpqKi15d/v?= =?Windows-1252?Q?JgXwWkadas5vuUpC4qsAfa6R3QnjRUaxaijIGfdlBFVu+EfrGgNaI2rl?= =?Windows-1252?Q?3x/sv+srXKg12jYIvePTo8J7PQ1GA5kz7EFqhNxgD6JjIS+xUB5d44C8?= =?Windows-1252?Q?+ZWaCEE9EHR+/8v8AGvcvYw0LZYX7s/OfU2ygHnASkcFtI4Pk2NFilW4?= =?Windows-1252?Q?j+uW7yXPBt5Iu/i+DyFacMVA3NFzsKCCxqn8smXNPBnT3P19j2hA+jtZ?= =?Windows-1252?Q?jzqkIk6MDiYsvghGgWjYU5OFHl0uSAiimeT7oIXojFHaAk0G4Wpqj67r?= =?Windows-1252?Q?DeL1ZngJADaFhCbxuhKhzUc777PxFRzFkszptyQoVqA3QspJc9qbE4pE?= =?Windows-1252?Q?3w7uzpW5KPJtcQleiX6Nvt5JOzHh6BNwxtL1oRqZ6l3oLFgfCIP0Urt2?= =?Windows-1252?Q?1/VhR6I8xzGNvuobl/esxkjIoIhzOADd5ZeZgMFTMkklz0jQygTE34JJ?= =?Windows-1252?Q?JEYA9VECfT+F1jLawhmtf7KizvSa93eLWbEAiy18Kemj+bAFMe5FtON0?= =?Windows-1252?Q?7K3HjwSETfgaoLi7muEDdU+bi8mweNTo7W2I5Mdq9GFA4JSGh8NLd314?= =?Windows-1252?Q?aD75YiyequKrF5ZCWiuEOoJAXY7aTeC2m7+LrPns8bJzCokJSQzGwV8H?= =?Windows-1252?Q?0xHTgtuUDxGtPBF8DmL9bKZhiWDnBkS4jxGvYmLFqIlZsSzjrWkwj6oo?= =?Windows-1252?Q?GkPhLGh69vcBrxsj2H6D33Qj3swS90j/fbz847uJAZavjgInJONoA/zs?= =?Windows-1252?Q?pk/SsVdGl0XMjGFqpfi1NW5h9jgplFnGHJBdFzpQ/Ut+1cN6Fi4/RjBr?= =?Windows-1252?Q?/371qwe/xqlJGAiXJrXFnv32L4026spE+Vnz+616+S8VEXGNFrdXtbp7?= =?Windows-1252?Q?gJpmZg0BeOhCKYB/JXYYqrnniizuHjbZU4Fb1Z2HC2PA0NMRHdQp2num?= =?Windows-1252?Q?cfy9zZKCxdMYcEpW0ZaPh7cXq0ljMMH57Sf4Uuy6eLgDKcfo7eHB31zI?= =?Windows-1252?Q?wqYd8NEy1/q9fnbXVFmsHKbm/EGg5/RQfAL3Nfld9pzjDpumALayXvA5?= =?Windows-1252?Q?RI18XwuOu/TqSdLSULTO1SweoSVH/dhxjs38EO0U9ldUG+hcoiqKWJjQ?= =?Windows-1252?Q?nM8bImVZsdtNfeHY1WnK73+OI1IN05UNawaYIVjorZlknPWtiA2t57EL?= =?Windows-1252?Q?lEH0N7I9g1iyMY79xCDGV46SddB1xFZplofNDRzG31+fITVc5x835IHC?= =?Windows-1252?Q?UMcgRqczBOlv2MiW0vkzuQ80yTyVgr8ctLgCi7ZMuKCdx0tDps8KzXaV?= =?Windows-1252?Q?xVhaAz3SI5FpmfBh2FYdUTxTddprh9VYrYbJIc6034b5k2G996VrWpU4?= =?Windows-1252?Q?RSeCG7V3r9knPrZSpUj4r3Ea89hPt?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;6:A9jUlzO/1lwrQ4GsWCUoHmq7FvB/qmS/R3t9r51gqRAQfcL8VXOVvsTabefc7bxXHssb5hXkrXHyX1+bNQOAK4OLsivuPD3axisy5wW/+F32SMGnyHqAJsm5EqRR2Ft4Tgg9GLf0n4bBdq2wwlVbvkvWyYoa+Rj6uvi3ZlWa890QCd1eACgODwC5A9B5B2zEOJjPK1IIdBPbJJzq/rMjvjtG5cFd+YfIbh/LhfbheC/DqMoFW8B7aW5qFUDX0P1kHZPJLS3K0Vrqk4wC/9rgsec9uZsIU+tlvU77YNAcXZkbWoYpCIDaAA8LZgtquyPTZlY7F46x8go/405J41BCUfvJN/at16OdfY5wUeZ3gAPorieofP5jp5CAwK0rSCizvaTNizsHt8W0pAIUEz056CMhUAGKAAtcRRGT0j1NtCI=;5:gy+7UKa4yk0/DnVwG3XtiFrB5x8DS9Vkks7ZhEqMffOaKEaVhSn06PlSnML+GwZzmUCYn8kprl2mRE3Fs36M2zN89gFt6FU79nR2soEGeBIXHRAtyS5B7Vn5m3JgIaAx/4cb3klq4twJNzMC+KGp3A==;24:prv+yTz1/ftGPp5PeClHV0XkPm6x9gcyw8ESnKjDDGEAFj2hDUtwpDZDBSiMYFBjZjyVY5i/UMh+Tble940EXIYWytZGPFtcZD6oJLUM2Ro= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0801MB1738;7:/5F9GqxKPGI5iObFLVdh6Obw+p3w0Lwor+8gui2eJFKwYRlPc4QvIzG0ZmF7dPSwxmUwK0C4WwlURaNmovYS36/vf4gCp//1LRydIcIfnAVpf+Z2LSjLXI1f2M76OmZANbrnenz8/Ud/7LJlhw/SKCYN8s16llJF5t4B4HR1RFkzmMWecpdjIiAFXu0AZRzaQMGl/YNcvEl2BA0hCG4v8iw03JwsrHd5donCyikjH9SZmgjX2LFs4tCxWx82ls9dPTKgPn2lWxvMYefJe2OulZXDQdDjma8qrgC8fqQ/lHjtJFYR9Wzc2G4uZenmBuo0EgHI+ixK+Y66aCe3dDTsWnux0gRJOWghSK52/V3+SCaaaZ47gNzr2WK2cYVQZHvEaSlXW4qM8ZbcSphbqrbkis2paIbo+AjvQ0WJCPtOhuii9U+klW9OIQJrFdTKnfkxZSz9bb6lyoHECvKjeozhyw==;20:U/5Vd20vbb6YggJ/rqkhuA1tg2j9iV4Ttju0DEuJRKXzdKPDAr8ON1k1P2P7DkafVf4fEiSvW6yEErX3G7ODPHNI7biOCwRIkiYddCLZVgZCe+45d2xNZywm33hv9JXantYuI4NMWyR2W3tVWBmzrE3BP3Sd3YN7PUXfOz+BT70= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2016 18:56:20.9406 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1738 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5600 Lines: 155 On 12/13/2016 09:32 PM, Thomas Gleixner wrote: > On Mon, 12 Dec 2016, Dmitry Safonov wrote: > >> Subject : [PATCH] cpumask: avoid WARN in prefill_possible_map() > > 'cpumask' is hardly the proper prefix for x86/smpboot related issues. > >> With CONFIG_DEBUG_PER_CPU_MAPS and CONFIG_CPUMASK_OFFSTACK enabled >> fixes the following WARN_ON_ONCE() for booting with nr_cpus=1: > > This sentence, aside of not qualifying as a sentence, makes no sense. > > What has this to do with nr_cpus=1? If I boot with nr_cpus=2 then this > won't fail or what? > >> [ 0.000000] Linux version 4.9.0 (dsafonov@localhost.localdomain) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) ) #36 SMP Mon Dec 12 18:05:46 MSK 2016 >> [ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-4.9.0 root=/dev/mapper/vz-root ro crashkernel=auto rd.lvm.lv=vz/root rd.lvm.lv=vz/swap console=ttyS0,115200 vsyscall=none nr_cpus=1 >> [ 0.000000] smpboot: 4 Processors exceeds NR_CPUS limit of 1 >> [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs >> [ 0.000000] ------------[ cut here ]------------ >> [ 0.000000] WARNING: CPU: 0 PID: 0 at ./include/linux/cpumask.h:121 cpumask_check.part.2+0x1c/0x1e >> [ 0.000000] Modules linked in: >> [ 0.000000] CPU: 0 PID: 0 Comm: swapper Not tainted 4.9.0 #36 >> [ 0.000000] Call Trace: >> [ 0.000000] [] dump_stack+0x67/0x9c >> [ 0.000000] [] __warn+0xd1/0xf0 >> [ 0.000000] [] warn_slowpath_null+0x1d/0x20 >> [ 0.000000] [] cpumask_check.part.2+0x1c/0x1e >> [ 0.000000] [] cpumask_clear_cpu+0x2e/0x40 >> [ 0.000000] [] prefill_possible_map+0x15c/0x16a >> [ 0.000000] [] setup_arch+0xba7/0xc33 >> [ 0.000000] [] start_kernel+0x63/0x448 >> [ 0.000000] [] x86_64_start_reservations+0x2a/0x2c >> [ 0.000000] [] x86_64_start_kernel+0xea/0xed >> [ 0.000000] ---[ end trace 5876da8d2ace83fb ]--- > > And that non-trimmed backtrace is useful because it takes so much room in > the changelog and looks nice? The callchain leading to > prefill_possible_map() is pretty much well known, i.e. the backtrace is > pointless. > >> nr_cpu_ids is set to possible two lines futher - omit checking in >> set_cpu_possible() cycles. > > -ENOPARSE. > > You completely fail to explain the problem, i.e. how nr_cpu_ids gets > overwritten from it's initial compile time value NR_CPUS. > > And of course you fail to explain why the "solution" is correct or > whatever you consider it to be. > >> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c >> index 42f5eb7b4f6c..17167bec7c61 100644 >> --- a/arch/x86/kernel/smpboot.c >> +++ b/arch/x86/kernel/smpboot.c >> @@ -1459,6 +1459,9 @@ __init void prefill_possible_map(void) >> pr_info("Allowing %d CPUs, %d hotplug CPUs\n", >> possible, max_t(int, possible - num_processors, 0)); >> >> + /* Avoid WARN() in set_cpu_possible()=>cpumask_check() */ >> + nr_cpu_ids = NR_CPUS; >> + > > If anything then this qualifies as a quick hack. > >> for (i = 0; i < possible; i++) >> set_cpu_possible(i, true); >> for (; i < NR_CPUS; i++) > > The underlying issue is not restricted to nr_cpus=1 at all. The problem > comes from the early_param setting nr_cpu_ids to the command line > parameter. If that one is smaller than NR_CPUS then the access to the > possible mask with a cpu number > nr_cpu_ids will trigger the warning. > > So instead of playing completely non obvious hackery with nr_cpu_ids the > proper solution is to have a function which clears the underlying > __cpu_possible_map, which is sized NR_CPUS because it is compile time > allocated and then only set the possible bits. Does the untested patch > below fix the issue for you? Hi Thomas, Well, my solution looks like a quick hack, because I didn't want to introduce a new function in header which is used in one place. And you did it... > +static inline void cpumask_reset_possible_mask(void) { } ... > +static inline void reset_cpu_possible_mask(void) Is this intentionally? Don't mind your version with fixed func-names and sorry for the bad changelog. > > Thanks, > > tglx > 8<-------------------- > --- a/arch/x86/kernel/smpboot.c > +++ b/arch/x86/kernel/smpboot.c > @@ -1476,15 +1476,15 @@ early_param("possible_cpus", _setup_poss > possible = i; > } > > + nr_cpu_ids = possible; > + > pr_info("Allowing %d CPUs, %d hotplug CPUs\n", > possible, max_t(int, possible - num_processors, 0)); > > + reset_cpu_possible_mask(); > + > for (i = 0; i < possible; i++) > set_cpu_possible(i, true); > - for (; i < NR_CPUS; i++) > - set_cpu_possible(i, false); > - > - nr_cpu_ids = possible; > } > > #ifdef CONFIG_HOTPLUG_CPU > --- a/include/linux/cpumask.h > +++ b/include/linux/cpumask.h > @@ -112,6 +112,7 @@ extern struct cpumask __cpu_active_mask; > #define cpu_possible(cpu) ((cpu) == 0) > #define cpu_present(cpu) ((cpu) == 0) > #define cpu_active(cpu) ((cpu) == 0) > +static inline void cpumask_reset_possible_mask(void) { } > #endif > > /* verify cpu argument to cpumask_* operators */ > @@ -722,6 +723,11 @@ void init_cpu_present(const struct cpuma > void init_cpu_possible(const struct cpumask *src); > void init_cpu_online(const struct cpumask *src); > > +static inline void reset_cpu_possible_mask(void) > +{ > + bitmap_zero(cpumask_bits(&__cpu_possible_mask), NR_CPUS); > +} > + > static inline void > set_cpu_possible(unsigned int cpu, bool possible) > { > > > > > > -- Dmitry