From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Subject: Making udev emit a signal when it is done loading modules Date: Sat, 17 Jan 2015 09:44:00 +0100 Message-ID: <54BA20D0.7060402@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: systemd-devel-bounces@lists.freedesktop.org Sender: "systemd-devel" To: systemd-devel@lists.freedesktop.org Cc: "linux-ide@vger.kernel.org" , Mark Brown , linux-arm-kernel , devicetree List-Id: linux-ide@vger.kernel.org RGVhciB1ZGV2IGRldmVsb3BlcnMsCgpXZSAobWUgYW5kIHNvbWUga2VybmVsIGRldnMgbW9zdGx5 KSB3b3VsZCBsaWtlIHRvIGFkZCBzdXBwb3J0IHRvCnRoZSBrZXJuZWwgZm9yIHVzZXJzcGFjZSB0 ZWxsaW5nIHRoZSBrZXJuZWwgdGhhdCBpdCBpcyBkb25lIHdpdGgKdGhlICppbml0aWFsKiBsb2Fk aW5nIG9mIG1vZHVsZXMsIHdpdGggdGhlIHB1cnBvc2Ugb2YgY2xlYW5pbmcgdXAKKGRpc2FibGlu ZykgdW51c2VkIGhhcndhcmUgcmVzb3VyY2VzIGxpa2UgZS5nLiByZWd1bGF0b3JzIGFuZApjbG9j a3MuCgpDdXJyZW50bHkgdGhlIGtlcm5lbCBkb2VzIHRoaXMgY2xlYW51cCBqdXN0IGJlZm9yZSBp dCBzdGFydHMgaW5pdAood2hpY2ggbWF5IHZlcnkgd2VsbCBiZSBpbml0IGZyb20gYSByYW1kaXNr KS4gSW4gc29tZSBjYXNlcyB0aGlzCmlzIHRvbyBlYXJseSByZWFsbHksIGJlY2F1c2UgbGF0ZXIg b24gYSBtb2R1bGUgbWF5IGdldCBsb2FkZWQKd2hpY2ggbmVlZHMgdGhpcyByZXNvdXJjZXMsIHRo ZXNlIHJlc291cmNlcyB3aWxsIHRoZW4gZ2V0IHR1cm5lZApvbiBhZ2FpbiBieSB0aGUgbG9hZGVk IGRyaXZlciwgYW5kIG1vc3Qgb2YgdGhlIHRpbWUgdGhpcyBpcyBub3QKYW4gaXNzdWUsIGJ1dCBz b21ldGltZXMgaXQgaXMuCgpJIHJlYWxpemUgdmVyeSB3ZWxsIHRoYXQgdGhlcmUgaXMgbm8gbWFn aWMgbW9tZW50IHdoZXJlIHVkZXYgaXMKcmVhbGx5IGV2ZXIgZG9uZSBsb2FkaW5nIG1vZHVsZXMs IGJ1dCB0aGUgY2FzZSB3aGljaCB3ZSB3YW50IHRvCnN1cHBvcnQgb25seSBpbnZvbHZlcyBkZXZp Y2VzIHdoaWNoIGFyZSAqYWxyZWFkeSBlbnVtZXJhdGVkKiwgYnV0Cm1heSBub3QgeWV0IGhhdmUg YSBkcml2ZXIgbG9hZGVkLCB3aGVuIHVkZXYgc3RhcnRzLiBXZSB3b3VsZCBsaWtlCnVkZXYgdG8g ZW1pdCBhIHNpZ25hbCAoQUJJIHRvIGJlIGRpc2N1c3NlZCkgd2hlbiBpdCBpcyBkb25lCnRyeWlu ZyB0byBsb2FkIG1vZHVsZXMgZm9yIGV2ZXJ5dGhpbmcgd2hpY2ggd2FzIGFscmVhZHkgZW51bWVy YXRlZAp3aGVuIGl0IHN0YXJ0cywgaW93IHdoZW4gdGhlcmUgYXJlIG5vIG5ldyBkZXZpY2UgZXZl bnRzIHBlbmRpbmcKYW55bW9yZSB3aGVuIHVkZXYgZG9lcyBpdHMgaW5pdGlhbCBob3RwbHVnIHJl cGxheS4KClNvIHRoZSBxdWVzdGlvbiB0byB5b3UgaXMgd291bGQgeW91IGJlIHdpbGxpbmcgdG8g aW5jbHVkZSBzdWNoCmZ1bmN0aW9uYWxpdHkgaW4gdWRldiA/ICBOb3RlIHRoaXMgc2lnbmFsIHdv dWxkIG5lZWQgdG8gYmUgZW1pdHRlZAp3aGVuIHVkZXYgZnJvbSB0aGUgcmVhbCByb290ZnMgaXMg ZG9uZSB3aXRoIHRoZSBpbml0aWFsIG1vZHVsZQpsb2FkaW5nLCBhcyB0aGUgcmVhbCByb290ZnMg bWF5IHZlcnkgd2VsbCBoYXZlIG1vcmUgbW9kdWxlcwphdmFpbGFibGUgdGhlbiB0aGUgaW5pdHJk LgoKIyMjCgpXaXRoIHRoZSBnZW5lcmljIHN0b3J5IGFib3ZlIHRvbGQgbGV0IG1lIGFsc28gZ2l2 ZSB0aGUgY29uY3JldGUKZXhhbXBsZSAvIHByb2JsZW0gd2hpY2ggaGFzIGxldCB0byBtZSBhc2tp bmcgdGhpcyAobm90ZSB0aGlzIGhhcwpiZWVuIGJyb3VnaHQgdXAgYmVmb3JlIG9uIHZhcmlvdXMg a2VybmVsIGxpc3RzLCBpdCBpcyBhCnJlLW9jY3VyaW5nIHRoZW1lLCB0aGlzIGlzIGp1c3QgYW4g ZXhhbXBsZSByZWFsbHkpIDoKClRoZSBwcm9ibGVtIGF0IGhhbmQgaXMgYSBzYXRhIGNvbm5lY3Rv ciB3aGljaCBhbHNvIGhhcyBhIHNhdGEtcG93ZXIKY29ubmVjdG9yIG9uIGFuIGVtYmVkZGVkIChp c2gpIGJvYXJkIHdoZXJlIHRoZSBzYXRhLXBvd2VyIGlzCmNvbnRyb2xsZWQgdGhyb3VnaCBhIGdw aW8uIFRoZSBzYXRhLXBvd2VyIGNvbm5lY3RvciBpcyBtb2RlbGVkCmluIGRldmljZXRyZWUgYXMg YSBwb3dlci1zdXBwbHkgYW5kIHRoaXMgc3VwcGx5IGdldHMgY29udHJvbGxlZApieSB0aGUgYWhj aV9wbGF0Zm9ybSBkcml2ZXIuCgpUaGUgZGlzayBwb3dlciBtYXkgdmVyeSB3ZWxsIGhhdmUgYWxy ZWFkeSBiZWVuIHR1cm5lZCBvbiBieSB0aGUKYm9vdGxvYWRlciwgc28gd2UgYWRkIGEgcmVndWxh dG9yLWJvb3Qtb24gcHJvcGVydHkgdG8gdGhlIHJlZ3VsYXRvcgpub2RlIGluIGRldmljZXRyZWUg dG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgbGVmdCB1bnRvdWNoZWQgd2hlbiB0aGUKcmVndWxhdG9y IGRyaXZlciBsb2Fkcy4gSWYgdGhlIGFoY2lfcGxhdGZvcm0gZHJpdmVyIGlzIGJ1aWxkIGludG8K dGhlIGtlcm5lbCwgaXQgd2lsbCB0aGVuIHRha2UgY29udHJvbCBvZiB0aGUgcmVndWxhdG9yIGFu ZApldmVyeXRoaW5nIHdvcmtzIHdlbGwuCgpJZiBob3dldmVyIHRoZSBhaGNpX3BsYXRmb3JtIGRy aXZlciBpcyBhIG1vZHVsZSwgdGhlbiBhcyBzb29uIGFzCnRoZSBrZXJuZWwgaXMgcmVhZHkgdG8g c3RhcnQgaW5pdCwgdW51c2VkIHJlZ3VsYXRvcnMgYXJlIHR1cm5lZCBvZmYKYW5kIHRoZSBkaXNr IGxvb3NlcyBpdHMgcG93ZXIgd2hpbGUgc3Bpbm5pbmcgYW5kIGVuZHMgdXAgZG9pbmcgYW4KZW1l cmdlbmN5IGhlYWRzIHBhcmsuIFRoZW4gYXMgc29vbiBhcyB0aGUgYWhjaV9wbGF0Zm9ybSBtb2R1 bGUKbG9hZHMgdGhlIGRpc2sgaXMgc3BpbiB1cCBhZ2Fpbi4gVGhpcyBpcyBub3QgZ29vZCAocXVp dGUgYmFkCmFjdHVhbGx5KSBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBkaXNrLgoKUmVnYXJkcywK CkhhbnMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kc3lz dGVtZC1kZXZlbCBtYWlsaW5nIGxpc3QKc3lzdGVtZC1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3N5c3RlbWQt ZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 From: hdegoede@redhat.com (Hans de Goede) Date: Sat, 17 Jan 2015 09:44:00 +0100 Subject: Making udev emit a signal when it is done loading modules Message-ID: <54BA20D0.7060402@redhat.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Dear udev developers, We (me and some kernel devs mostly) would like to add support to the kernel for userspace telling the kernel that it is done with the *initial* loading of modules, with the purpose of cleaning up (disabling) unused harware resources like e.g. regulators and clocks. Currently the kernel does this cleanup just before it starts init (which may very well be init from a ramdisk). In some cases this is too early really, because later on a module may get loaded which needs this resources, these resources will then get turned on again by the loaded driver, and most of the time this is not an issue, but sometimes it is. I realize very well that there is no magic moment where udev is really ever done loading modules, but the case which we want to support only involves devices which are *already enumerated*, but may not yet have a driver loaded, when udev starts. We would like udev to emit a signal (ABI to be discussed) when it is done trying to load modules for everything which was already enumerated when it starts, iow when there are no new device events pending anymore when udev does its initial hotplug replay. So the question to you is would you be willing to include such functionality in udev ? Note this signal would need to be emitted when udev from the real rootfs is done with the initial module loading, as the real rootfs may very well have more modules available then the initrd. ### With the generic story above told let me also give the concrete example / problem which has let to me asking this (note this has been brought up before on various kernel lists, it is a re-occuring theme, this is just an example really) : The problem at hand is a sata connector which also has a sata-power connector on an embedded (ish) board where the sata-power is controlled through a gpio. The sata-power connector is modeled in devicetree as a power-supply and this supply gets controlled by the ahci_platform driver. The disk power may very well have already been turned on by the bootloader, so we add a regulator-boot-on property to the regulator node in devicetree to make sure that it is left untouched when the regulator driver loads. If the ahci_platform driver is build into the kernel, it will then take control of the regulator and everything works well. If however the ahci_platform driver is a module, then as soon as the kernel is ready to start init, unused regulators are turned off and the disk looses its power while spinning and ends up doing an emergency heads park. Then as soon as the ahci_platform module loads the disk is spin up again. This is not good (quite bad actually) for the lifetime of the disk. Regards, Hans