From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754683AbdCIMBo (ORCPT ); Thu, 9 Mar 2017 07:01:44 -0500 Received: from mail-db5eur01on0134.outbound.protection.outlook.com ([104.47.2.134]:39491 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753983AbdCIMBk (ORCPT ); Thu, 9 Mar 2017 07:01:40 -0500 Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=axentia.se; Subject: Re: [PATCH] mux-core: make it explicitly non-modular To: Paul Gortmaker References: <20170307224115.9394-1-paul.gortmaker@windriver.com> <05d65cbe-340a-740c-6cb3-2c63d21ea4d9@axentia.se> <20170308143847.GA22171@windriver.com> <0945642d-0f21-3b92-d90a-6999e1d47900@axentia.se> <20170309003253.GD22171@windriver.com> CC: , Jonathan Cameron From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <6e336af0-792d-f0fa-face-f23007cbaca3@axentia.se> Date: Thu, 9 Mar 2017 13:01:05 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: HE1P18901CA0006.EURP189.PROD.OUTLOOK.COM (10.168.181.144) To AM5PR0202MB2548.eurprd02.prod.outlook.com (10.173.89.9) X-MS-Office365-Filtering-Correlation-Id: f9c8e9c0-a6f8-48c6-bfc5-08d466e3fa5a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:AM5PR0202MB2548; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0202MB2548;3:P6H0CKU68nV5oyeLD4x2pjalZyJTBaGTG+Lh4F/kj+1/6BqEFYJGskhD8PQ+0+RMalCUJC9itzljzewCfMB5QiGc3SfaJontNA2lddb9njKPP5tkDuBjlhC6WXwORtrgni1CYN03CH+L4lqf53No9eNuxdAmgWUoaTbhedhs0pJNs4Is1exR0G+jl2ULm6u7OXwNuaTFSOo5WuvJBSbc06FhSNzYrTJOwxAAguHpBIgV4WcikwyQbFd1mysE2jn0ilBzvbfpV8hTBRNkpequ+g==;25:vFYzGrYDw+QPP+gcgf5vpbQyXJdUIbz5WOp97BQY5/BLqL7LNvgIbTWvn1G1I8ZVeBCuqyo4RZXTVL7qAEbArUXOfowa47Xyl3nPcJKt7mT0IrC0rhbW1nLMSsuBabTZFZ6IOQyconq4l98wVfNtmbALI7VEpKgXuWn1wiY/usYJ7/jeRWbDrZ3iWySPO53s58mT9KVk8tlKxu809BcNU7XaVr2Yyu8Yx30z0kg/i9h0HJ8mROMRPosYQjAbxBw4NIyCAVVZskPezDGfGdQ2ht8D+ze4nX8/Aj1TP/haXislFnV2o4hr5jah/3Mo0psi7bbqEj52QAE0Mtu8HTtRj5vr2wp3X/CNhuYqs+ywT2un477XBeKd3o0U6CMnAg3WYvhYsPrvNPrehqCzDI3REEbpePCxSB/WYgRQFwL9zQBrv1UoIaROtbTEAA/rlVNhqdA30XvfVewL7T3liGEVyQ== X-Microsoft-Exchange-Diagnostics: 1;AM5PR0202MB2548;31:jPd9L8kl7OQuO144L0YSAHDRyN0ALlBvfCwDKnrLv8cd9PxiwFZeOe/0bNi5ayvXWcSKsz0rzDD4m1Zv/GPRa8JfbfnsqrBUwkvC0R1/qcISKsOzdBQYPqop2Az9eOSKAoD/8g2o1AGA+DteJNiZepnjQXqBBnaoTgVRQSCZU75xKriOousmwCsJgGvLEPDbV9NhUsNw/FQ1POHc122vHGQdRFxvJOahFeeZEjkGmtPwYg9KpmlslBvwMCouGB7uI/d97VKowBa/ky+Ek6tWdMvEeHuZiaPKpVwV8Ecr5pM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123560025)(20161123555025)(20161123562025)(2016111802025)(20161123558025)(20161123564025)(6043046)(6072148);SRVR:AM5PR0202MB2548;BCL:0;PCL:0;RULEID:;SRVR:AM5PR0202MB2548; X-Microsoft-Exchange-Diagnostics: 1;AM5PR0202MB2548;4:99IFazTNSfZIPGsGfvfG8M/fguA3ROB5ucNCrblRckQRIOZ+IcfIK0AnviEmdY9A2M7RiK1wPUC12Y3PHHnfbITCfLu38hlszBq7VR6Mw/LGuCCXVRXflekMi8ftk900nluMuJBs0H34Lwlpf/q5FjnkDyjGFxcjkMHtw7Jg29eemJ3ZXcNqg9Y04rCuWsa1gD+jnPevdKnq7IGcYSlKm5K/jZCD7dlMY/Y2BTy9TvRuqWSAe+3jKeNQrsSYXUI+VQTmW9yKAKMLSWJZXLfvcjAB14Y9gUCff9FIO+YxBb69zAF8mzne8NfufeDjkRIf5LOqIM1dG23p0pPMir9dwC2ZUonFOvyezoAXxwnhzbDL58uzkdB/3YR89L99uOhjCToAcuFlEJIY/HWGtOyVruszhe+wqRppWC//nZCqA2L5hkC/2dSWqbRXXgx6Vj1aLr9pcHkos+Ayb/VB6Mxo6UEGDikr05cQE0ZhPq/Jy6RsENBhYVVKqRWL+h7vLlMAixiI6nN6bcTt7AeWPtIYeLRwczLyWQ/rOoRDXDztX8eENEp6yPf+uIVoXNelgcYZuYKxVTXAnwQKDEhb19NV2EDY3t6z7+HS93Uy9E1OceMM5n4+YuZjhCEb6g2bjc52OVkb2KWZK6yrQlopGq8+N5956slaeCJ4qOI6mock1eA= X-Forefront-PRVS: 0241D5F98C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39410400002)(39450400003)(39830400002)(24454002)(377424004)(65806001)(47776003)(5660300001)(65956001)(36756003)(54906002)(5890100001)(4001350100001)(7736002)(229853002)(66066001)(93886004)(54356999)(4326008)(76176999)(31696002)(189998001)(81166006)(2906002)(42186005)(33646002)(3846002)(31686004)(6116002)(53936002)(74482002)(2950100002)(86362001)(110136004)(8676002)(50986999)(230700001)(6246003)(50466002)(305945005)(83506001)(6916009)(77096006)(53546006)(6486002)(90366009)(117156001)(38730400002)(25786008)(6666003)(64126003)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:AM5PR0202MB2548;H:[192.168.0.125];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;AM5PR0202MB2548;23:fPnbdpcp4WwkyXK+YvhOQvIJKjgOmeWgkfa?= =?Windows-1252?Q?qKDBASQG+jWdo8iO3Dxa9FqNgWgYV3tikEE7bbF6vFWftURuOm5KulQb?= =?Windows-1252?Q?u4c9BpKQW9SJtBemwR8/jBPdcpEqNmitYT9zLbKAKFr3pAgnbUTO6ipj?= =?Windows-1252?Q?iEHxd4MyAB0Kr7JRiRpE4QxJVOFN83G7jgEaxU8G7XK+oc4G+JVEYRXy?= =?Windows-1252?Q?6v6PinudvhOrLCcA0zXFdjxikveyGzmdNHYFHnZufylmd+2VDu8J088/?= =?Windows-1252?Q?7ozXqqh52f6Z/v8MpD3MpkSSfvoGL+83Vp6Qqa4flK6f6sVklJxu3mWN?= =?Windows-1252?Q?k9A9gGPom8V5U7rSJPhOACBDZ5LZ2EXFHhDHbYDRB/dQc3lfBpOLdZGl?= =?Windows-1252?Q?SjRTeApnFGsABVC5CJSbYsmhPegMAmMK0x1vVHEMElw9lwPufBsWkFWm?= =?Windows-1252?Q?YbyntfEV2d959jdlvxR/HUxxCwKR/7v0IhMLQc5PJ3u3810sBXKZPi2i?= =?Windows-1252?Q?O4yNNeCND8NR6aBxTUknTEb3Ks/Lbf8armQskyvZymZjtXNMnyY1KzuN?= =?Windows-1252?Q?v8cZJNkhPl6wDCsfxJ2VofsEKPI7rrOGK75+KwaZfQjB9YEcPSkgRFzJ?= =?Windows-1252?Q?RObsWID9pyl+68kd+N4OnnT7hajaxgKn+VQQOvC1ibMHXNyhe2A1vSCY?= =?Windows-1252?Q?2+uZrD2bme4BRO2+QBTBRxu9pf5JSEVhdiiYh5Zm4+HKY27UuU0sswOq?= =?Windows-1252?Q?mdO+Hgm8w4s4/cSavsBrUXiwg5Ib5qzICZ5TqgUXFaL6S8kxe5PzPyLC?= =?Windows-1252?Q?txZFXWZnfB8M3kFSHAC9WzBShiPWRsSXZh2D6It3TwvJpfTJxcdY7nZ/?= =?Windows-1252?Q?g+XaTZL0YugQoAGmFp/COkO8I1jjHMbMu+41sFYOCD83/8Qad3Bsj7GH?= =?Windows-1252?Q?lMzJC5fFTPs2r4sS/T27/Kjq0OhDI2u43BbrY/A4aKpUOpYBlyhTHbwh?= =?Windows-1252?Q?DHTeAB7D7Eo2ILRF+awFFOHSaUdWntwEbl+5rW5aHc5Y7qXuaVIdaKcS?= =?Windows-1252?Q?0QW21EcGDRJcgjR74vnxdUa6m58fLBfdEW5/qyNLBwOvQJUjAnoP5vin?= =?Windows-1252?Q?LX/ap5/YbxCUHr8zvuoG0nr4f7rPFF0JCV8ZdJe0O7Pu1sZoeURx/0Y9?= =?Windows-1252?Q?znCCMau5rqIFq+Fc4UnAdfp3JzA9bwWbpcE67p2Ykb2P6Nj69xEB/l7K?= =?Windows-1252?Q?YXmGRCcn+O/PbPeQM3mpWfBl/13Gm3XVn51mUa+MGy9QI27FwhGVJZe5?= =?Windows-1252?Q?eg+lnay+ww6j8VrQtIs3+QzqJtNbS2CNQzLKdFbEanFNylidL5Bn07dK?= =?Windows-1252?Q?Nyp3q0JMcKoZvFXFz5aEnuDJ2vhKBpbtbin9sk/fWnVgh0G2gvtYla44?= =?Windows-1252?Q?MbqMx5w2Fumv8vMkzDyaJ?= X-Microsoft-Exchange-Diagnostics: 1;AM5PR0202MB2548;6:G5zRnaDBMPr3fBSH/kDHdq4cbtQ22Mhx28+WBxIW3ssm3yGcpqAfc4Wp5sMWINqSdAMSyDebjGWbnYs3Jh2MHk6qNwRSTVjbjtRswJ/9if3dhJQ/P5jRRI4QrUYkAa7E5xcbMj0GEqbfXpQ96RIRuoMhggL8qny11GcuDLSZRJDrSfJjTk8U4gZ93LUs53A+wEZ+Y0O1l3vaaV0iIJhkxEQ9JTT9UPBEept2d5pLng+169MdI09zOBCeV+GUVkM4Tl9IzsdcANT1rE3R9Zwnt0fb6nlhOOGpB5i7tRwuOsIZvxnycOc0uMHKHkR7Cmcq3Zgr9520vBa7Vrus6ZLi5ma02caARiwk9BrRi0LiV6ypuKsKoUg87LwJs47g3PRsCMCHV7ipHnkKmSqah7JBeA==;5:LfOxABykdp3hQ5A1CUmFPLxSvP6ugFdKsIXv8g0iZwV8FoIos5a2wG8jKg01h52GvjsoX27//7uWHN6RCKRnL13PqJlIzt3az47Ljl0gmNiNXLE6GKEz6hp3mJPiyXor6/1hkAV8agKkK05A6GM3CRmxM30rPkB9ewpp7hwtAM8=;24:pjmAUAVD3EsIkHLe02M/pStOLkMQ7hB6GmrwdXTLG6qb9m2Jv011SiHCoSwAobwGYLk9MQ+R1aGCThW4jH1qFIrZ7IuGuZjVSgtgOSeUxYE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;AM5PR0202MB2548;7:+nscRXl+IetP910NLZ3sNefew3SWfZK0+3fd9+7TTkjjFkkum+cbabOiTa4HUzRm562mgJrrug1z4OXf+LeQ0rBPI/7YzH4P1HHbn6KAMIHPa2gZA/O4eOJfeK6xaOe/i0fF4cLj6FixRdT+g/P7sFrS0ecxdg2zg1kQ+dsrfr6YCPbXnVOaJRu63vRvCEQiOS1TK4odls/bJLddyo+TZcGLMDucR13CzfZA70vF5kISstYY1djWOJ0RxmfuVk/qMHO9/qNpFa88jtlVGaPaCoBvP06UHM/Ak9O5vbWhYMHgXu4MRALICXMJ84uh5foOj7Chppf0GQGO8egECaUolA== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2017 12:01:10.4943 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0202MB2548 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017-03-09 10:39, Peter Rosin wrote: *snip* *snip* >> Per the above use case (minimal vmlinux) the unload isn't so important, >> and in many cases it may be racy or simply not make sense. If that is >> the case, you don't need to provide a module_exit, and in the past I >> think we used to bump the module use count at a successful load to >> prevent unloading ; there might be a more elegant method now; google is >> your friend here. Also, I don't think name reuse/confusion is an issue. > > Ok, I thought it all boiled down to making the mux-core Kconfig a tristate > option and changing subsys_initcall(...) to module_init(...). > > But if I do that, I cannot be sure that the mux-core has been initialized > before drivers and clients start to use it in the non-modular case (if > things are modules, the dependencies should ensure that the mux-core is > loaded/initialized before any users are loaded). But there is no > topological sorting going on for ordering init calls in the non-modular > case. > > In short, I get: > > WARNING: CPU: 0 PID: 1 at drivers/base/class.c:438: class_find_device+0xac/0xb8 > class_find_device called for class 'mux' before it was initialized > CPU:0 PID: 1 Comm: swapper Not tainted 4.11-rc1+ #1243 > Hardware name: Atmel SAMA5 > [] (unwind_backtrace) from [] (show_stack+0x10/0x14) > [] (show_stack) from [] (__warn+0xe0/0xf8) > [] (__warn) from [] (warn_slowpath_fmt+0x38/0x48) > [] (warn_slowpath_fmt) from [] (class_find_device+0xac/0xb8) > [] (class_find_device) from [] (mux_control_get+0xa0/0x1bc) > [] (mux_control_get) from [] (devm_mux_control_get+0x3c/0x78) > [] (devm_mux_control_get) from [] (i2c_mux_probe+0x44/0x294) > [] (i2c_mux_probe) from [] (platform_drv_probe+0x4c/0xb0) > [] (platform_drv_probe) from [] (driver_probe_device+0x26c/0x464) > [] (driver_probe_device) from [] (__driver_attach+0x100/0x11c) > [] (__driver_attach) from [] (bus_for_each_dev+0x6c/0xa0) > [] (bus_for_each_dev) from [] (bus_add_driver+0x1c8/0x260) > [] (bus_add_driver) from [] (driver_register+0x78/0xf8) > [] (driver_register) from [] (do_one_initcall+0xb0/0x15c) > [] (do_one_initcall) from [] (kernel_init_freeable+0x13c/0x1d8) > [] (kernel_init_freeable) from [] (kernel_init+0x8/0x10c) > [] (kernel_init) from [] (ret_from_fork+0x14/0x3c) > ---[ end trace d97274a16af7ef1c ]--- > > So, it appears that I also have to determine if the core has been > initialized in all its entry points and return -EPROBE_DEFER (or something) > when not. I suppose I could instead initialize on-demand, but that seems > more difficult the do without races... > > Am I missing something? I did some digging and e.g. drivers/uwb was moved before drivers/usb in commit ae5d82cb8d60 ("uwb: build UWB before USB/WUSB") to resolve what appears to be a similar situation. I suppose I could just move mux up in drivers/Makefile so that it is before both i2c and iio. Cheers, peda