Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 29 Jul 2002 22:46:40 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 29 Jul 2002 22:46:40 -0400 Received: from rwcrmhc52.attbi.com ([216.148.227.88]:43169 "EHLO rwcrmhc52.attbi.com") by vger.kernel.org with ESMTP id ; Mon, 29 Jul 2002 22:46:37 -0400 Subject: Re: [PATCH] automatic initcalls From: Keith Adamson To: Keith Adamson Cc: Ingo Oeser , Jeff Garzik , Rusty Russell , Roman Zippel , linux-kernel , Kai Germaschewski , torvalds@transmeta.com In-Reply-To: <1027997356.9786.38.camel@h00d0700074d1.ne.client2.attbi.com> References: <20020728033359.7B2A2444C@lists.samba.org> <3D436A44.8080505@mandrakesoft.com> <20020729103912.A18765@nightmaster.csn.tu-chemnitz.de> <1027997356.9786.38.camel@h00d0700074d1.ne.client2.attbi.com> Content-Type: multipart/mixed; boundary="=-S7msmr7XzMshgWO8msyT" X-Mailer: Ximian Evolution 1.0.8 (1.0.8-3) Date: 29 Jul 2002 22:51:07 -0400 Message-Id: <1027997468.9786.41.camel@h00d0700074d1.ne.client2.attbi.com> Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 16753 Lines: 254 --=-S7msmr7XzMshgWO8msyT Content-Type: text/plain Content-Transfer-Encoding: 7bit On Mon, 2002-07-29 at 22:49, Keith Adamson wrote: > On Mon, 2002-07-29 at 04:39, Ingo Oeser wrote: > > On Sat, Jul 27, 2002 at 11:51:32PM -0400, Jeff Garzik wrote: > > > I've always preferred a system where one simply lists dependencies [as > > > you describe above], and some program actually does the hard work of > > > chasing down all the initcall dependency checking and ordering. > > > > So we just need to build a directed graph, detect edges without > > existing nodes (someone changed the initcall, we depend on) and > > cycles (someone messed up the ordering) as errors, sort the > > resulting graph toplogically and dump it as a sequence. > > > > This is no rocket science and we have two tools, which does this > > all for us (make and tsort, which create a warning for both cases). > > > > The hard part is to CREATE all the dependencies and check and > > double check them with the maintainers. > > > > I definitely agree the easy part is the algorithm and the hard part is > creating the dependency list. For instance, attached is a small > algorithm that does the initcall sequencing at run time. > > The API is is simple, you just register your initcall with a list of > critical initcalls you need to be run before yours (not all, just the > ones you definitely need to be run first). Then the ordering of the all > the initcalls are sequenced at run time. This way you don't have to > worry about link ordering or code ordering of your initcalls during > make/compile/link. All initcall ordering is done during boot. > > This really frees you from module inter-dependencies because is doesn't > mater in what order you register you initcalls. You only need register > them with a list the critical modules that need to be initialized before > yours. > > The API also provides that you can register more than one initcall for > your module with a different set of critical modules that must be run > first. > > This should be relative easy to add to the kernel, as you don't have to > modify any of the existing initcalls. You do need to remove all > existing calls to them and register them instead with the new API. > > Untar and "cd init; cc *.c; ./a.out" > > Four example modules register their initcalls, "foo1, foo2, foo3, foo4", > and then the main routine sequences them at run time. > > Regards, Keith > > Forgot the attachment :) --=-S7msmr7XzMshgWO8msyT Content-Disposition: attachment; filename=init_020729.tar Content-Type: application/x-tar; name=init_020729.tar Content-Transfer-Encoding: base64 aW5pdC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwNDA3NzUAMDAwMDc2 NAAwMDAwNzY0ADAwMDAwMDAwMDAwADA3NTIxMzcyNTIwADAxMTAzNAAgNQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGtlaXRoAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAa2VpdGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABp bml0L2ZvbzFfaW5pdC5jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY2NAAwMDAwNzY0 ADAwMDA3NjQAMDAwMDAwMDE1MjMAMDc1MjEzNjUyNTMAMDEzMDcyACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAa2VpdGgAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAABrZWl0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNp bmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgZm9vMV9pbml0Y2FsbCgpCQkvKiBpbml0aWFsaXplIHJv dXRpbmUgZm9yIG1vZHVsZSAqLwp7CgkvKiBzdGFydCBkZWJ1ZyBwcmludCBvdXQgKi8KCXByaW50 ZigiPT09PiBmb28xIGluaXRjYWxsIGhhcyBiZWVuIHJ1blxuIik7CgkvKiBlbmQgZGVidWcgcHJp bnQgb3V0ICovCn0KCmV4dGVybiB2b2lkIHJlZ2lzdGVyX2luaXRjYWxsKAkvKiBleHRlcm5hbCBy b3V0aW5lIHRvIHJlZ2lzdGVyIGluaXRjYWxsICovCiAgICAgICAgdm9pZCAoKmluaXRjYWxsKSgp LAogICAgICAgIGNoYXIgKnRhZywKICAgICAgICBjaGFyICoqcnVuX2ZpcnN0X2xpc3QKICAgICAg ICApOwoKdm9pZCByZWdpc3Rlcl9mb28xX2luaXRjYWxsKCkJLyogbG9jYWwgcm91dGluZSB0byBy ZWdpc3RlciBpbml0Y2FsbCAqLwp7CglzdGF0aWMgY2hhciAqdGFnPSJmb28xIjsJLyogdGFnIGZv ciBpbml0aWFsaXplIHJvdXRpbmUgKi8KCXN0YXRpYyBjaGFyICpydW5fZmlyc3RfbGlzdFtdPXsJ Lyogcm91dGluZXMgdG8gYmUgcnVuIGZpcnN0ICovCgkJImZvbzIiLAoJCU5VTEwgfTsKCglyZWdp c3Rlcl9pbml0Y2FsbChmb28xX2luaXRjYWxsLAoJCQkgIHRhZywKCQkJICBydW5fZmlyc3RfbGlz dAoJCQkgICk7CgkKCS8qIHN0YXJ0IGRlYnVnIHByaW50IG91dCAqLwoJaW50IGk9MDsKCXByaW50 ZigiJXMgaGFzIGJlZW4gcmVnaXN0ZXJlZFxuICBGaXJzdCBydW46IiwgdGFnKTsKCXdoaWxlIChy dW5fZmlyc3RfbGlzdFtpXSAhPSBOVUxMKQoJCXByaW50ZigiICVzIiwgcnVuX2ZpcnN0X2xpc3Rb aSsrXSk7CglwcmludGYoIlxuIik7CgkvKiBlbmQgZGVidWcgcHJpbnQgb3V0ICovCn0KAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpbml0 L21haW4uYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY2NAAwMDAwNzY0ADAw MDA3NjQAMDAwMDAwMDI0MjUAMDc1MjEzNjUyNTMAMDEyMTMxACAwAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAa2VpdGgAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABrZWl0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNpbmNs dWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RhdGljIHN0cnVjdAp7Cgl2b2lk ICgqaW5pdGNhbGwpKCk7CS8qIGluaXRjYWxsIGZ1bmN0aW9uIHBvaW50ZXIgKi8KCWNoYXIgKnRh ZzsJCS8qIHRhZyB0byBpZGVudGlmeSBpbml0Y2FsbCAqLwoJY2hhciAqKnJ1bl9maXJzdF9saXN0 OwkvKiBpbml0Y2FsbHMgdG8gYmUgcnVuIGJlZm9yZSB0aGlzIGluaXRjYWxsICovCn0gaW5pdGNh bGxzWzIwXTsKCnN0YXRpYyBpbnQgbnVtX2luaXRjYWxscz0wOwoKdm9pZCByZWdpc3Rlcl9pbml0 Y2FsbCgKCXZvaWQgKCppbml0Y2FsbCkoKSwKCWNoYXIgKnRhZywKCWNoYXIgKipydW5fZmlyc3Rf bGlzdAoJKQp7Cglpbml0Y2FsbHNbbnVtX2luaXRjYWxsc10uaW5pdGNhbGw9aW5pdGNhbGw7Cglp bml0Y2FsbHNbbnVtX2luaXRjYWxsc10udGFnPXRhZzsKCWluaXRjYWxsc1tudW1faW5pdGNhbGxz XS5ydW5fZmlyc3RfbGlzdD1ydW5fZmlyc3RfbGlzdDsKCW51bV9pbml0Y2FsbHMrKzsKfQoKaW50 IHRhZ190b19pbmRleChjaGFyICp0YWcpCnsKCWludCBpOwoJZm9yIChpPTA7IGk8bnVtX2luaXRj YWxsczsgaSsrKQoJCWlmIChzdHJjbXAodGFnLCBpbml0Y2FsbHNbaV0udGFnKSA9PSAwKSByZXR1 cm4oaSk7Cn0KCnZvaWQgZG9faW5pdGNhbGwoaW50IGkpCnsKCWludCBqPTA7CglpZiAoaW5pdGNh bGxzW2ldLmluaXRjYWxsID09IE5VTEwpIHJldHVybjsgIC8qIGRvbmUgYWxyZWFkeSAqLwoJd2hp bGUgKGluaXRjYWxsc1tpXS5ydW5fZmlyc3RfbGlzdFtqXSAhPSBOVUxMKQoJCWRvX2luaXRjYWxs KHRhZ190b19pbmRleChpbml0Y2FsbHNbaV0ucnVuX2ZpcnN0X2xpc3RbaisrXSkpOwoJaW5pdGNh bGxzW2ldLmluaXRjYWxsKCk7Cglpbml0Y2FsbHNbaV0uaW5pdGNhbGw9TlVMTDsgLyogZmxhZyBk b25lICovCn0KCnZvaWQgZG9faW5pdGNhbGxzKCkKewoJaW50IGk7Cglmb3IgKGk9MDsgaTxudW1f aW5pdGNhbGxzOyBpKyspCgkJZG9faW5pdGNhbGwoaSk7Cn0KCmV4dGVybiB2b2lkIHJlZ2lzdGVy X2ZvbzFfaW5pdGNhbGwoKTsKZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfZm9vMl9pbml0Y2FsbCgpOwpl eHRlcm4gdm9pZCByZWdpc3Rlcl9mb28zX2luaXRjYWxsKCk7CmV4dGVybiB2b2lkIHJlZ2lzdGVy X2ZvbzRfaW5pdGNhbGwoKTsKCm1haW4oKQp7CglyZWdpc3Rlcl9mb28xX2luaXRjYWxsKCk7Cgly ZWdpc3Rlcl9mb28yX2luaXRjYWxsKCk7CglyZWdpc3Rlcl9mb28zX2luaXRjYWxsKCk7CglyZWdp c3Rlcl9mb280X2luaXRjYWxsKCk7CgoJZG9faW5pdGNhbGxzKCk7Cn0KAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGluaXQvZm9v Ml9pbml0LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjY0ADAwMDA3NjQAMDAwMDc2 NAAwMDAwMDAwMTUzNQAwNzUyMTM2NTI1MwAwMTMwNzYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABrZWl0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAGtlaXRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2luY2x1ZGUg PHN0ZGxpYi5oPgoKdm9pZCBmb28yX2luaXRjYWxsKCkJCS8qIGluaXRpYWxpemUgcm91dGluZSBm b3IgbW9kdWxlICovCnsKCS8qIHN0YXJ0IGRlYnVnIHByaW50IG91dCAqLwoJcHJpbnRmKCI9PT0+ IGZvbzIgaW5pdGNhbGwgaGFzIGJlZW4gcnVuXG4iKTsKCS8qIGVuZCBkZWJ1ZyBwcmludCBvdXQg Ki8KfQoKZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaW5pdGNhbGwoCS8qIGV4dGVybmFsIHJvdXRpbmUg dG8gcmVnaXN0ZXIgaW5pdGNhbGwgKi8KICAgICAgICB2b2lkICgqaW5pdGNhbGwpKCksCiAgICAg ICAgY2hhciAqdGFnLAogICAgICAgIGNoYXIgKipydW5fZmlyc3RfbGlzdAogICAgICAgICk7Cgp2 b2lkIHJlZ2lzdGVyX2ZvbzJfaW5pdGNhbGwoKQkvKiBsb2NhbCByb3V0aW5lIHRvIHJlZ2lzdGVy IGluaXRjYWxsICovCnsKCXN0YXRpYyBjaGFyICp0YWc9ImZvbzIiOwkvKiB0YWcgZm9yIGluaXRp YWxpemUgcm91dGluZSAqLwoJc3RhdGljIGNoYXIgKnJ1bl9maXJzdF9saXN0W109ewkvKiByb3V0 aW5lcyB0byBiZSBydW4gZmlyc3QgKi8KCQkiZm9vMyIsCgkJImZvbzQiLAoJCU5VTEwgfTsKCgly ZWdpc3Rlcl9pbml0Y2FsbChmb28yX2luaXRjYWxsLAoJCQkgIHRhZywKCQkJICBydW5fZmlyc3Rf bGlzdAoJCQkgICk7CgkKCS8qIHN0YXJ0IGRlYnVnIHByaW50IG91dCAqLwoJaW50IGk9MDsKCXBy aW50ZigiJXMgaGFzIGJlZW4gcmVnaXN0ZXJlZFxuICBGaXJzdCBydW46IiwgdGFnKTsKCXdoaWxl IChydW5fZmlyc3RfbGlzdFtpXSAhPSBOVUxMKQoJCXByaW50ZigiICVzIiwgcnVuX2ZpcnN0X2xp c3RbaSsrXSk7CglwcmludGYoIlxuIik7CgkvKiBlbmQgZGVidWcgcHJpbnQgb3V0ICovCn0KAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGluaXQvZm9vM19p bml0LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjY0ADAwMDA3NjQAMDAwMDc2NAAw MDAwMDAwMTUxMQAwNzUyMTM2NTI1MwAwMTMwNzEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABrZWl0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AGtlaXRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2luY2x1ZGUgPHN0 ZGxpYi5oPgoKdm9pZCBmb28zX2luaXRjYWxsKCkJCS8qIGluaXRpYWxpemUgcm91dGluZSBmb3Ig bW9kdWxlICovCnsKCS8qIHN0YXJ0IGRlYnVnIHByaW50IG91dCAqLwoJcHJpbnRmKCI9PT0+IGZv bzMgaW5pdGNhbGwgaGFzIGJlZW4gcnVuXG4iKTsKCS8qIGVuZCBkZWJ1ZyBwcmludCBvdXQgKi8K fQoKZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaW5pdGNhbGwoCS8qIGV4dGVybmFsIHJvdXRpbmUgdG8g cmVnaXN0ZXIgaW5pdGNhbGwgKi8KICAgICAgICB2b2lkICgqaW5pdGNhbGwpKCksCiAgICAgICAg Y2hhciAqdGFnLAogICAgICAgIGNoYXIgKipydW5fZmlyc3RfbGlzdAogICAgICAgICk7Cgp2b2lk IHJlZ2lzdGVyX2ZvbzNfaW5pdGNhbGwoKQkvKiBsb2NhbCByb3V0aW5lIHRvIHJlZ2lzdGVyIGlu aXRjYWxsICovCnsKCXN0YXRpYyBjaGFyICp0YWc9ImZvbzMiOwkvKiB0YWcgZm9yIGluaXRpYWxp emUgcm91dGluZSAqLwoJc3RhdGljIGNoYXIgKnJ1bl9maXJzdF9saXN0W109ewkvKiByb3V0aW5l cyB0byBiZSBydW4gZmlyc3QgKi8KCQlOVUxMIH07CgoJcmVnaXN0ZXJfaW5pdGNhbGwoZm9vM19p bml0Y2FsbCwKCQkJICB0YWcsCgkJCSAgcnVuX2ZpcnN0X2xpc3QKCQkJICApOwoJCgkvKiBzdGFy dCBkZWJ1ZyBwcmludCBvdXQgKi8KCWludCBpPTA7CglwcmludGYoIiVzIGhhcyBiZWVuIHJlZ2lz dGVyZWRcbiAgRmlyc3QgcnVuOiIsIHRhZyk7Cgl3aGlsZSAocnVuX2ZpcnN0X2xpc3RbaV0gIT0g TlVMTCkKCQlwcmludGYoIiAlcyIsIHJ1bl9maXJzdF9saXN0W2krK10pOwoJcHJpbnRmKCJcbiIp OwoJLyogZW5kIGRlYnVnIHByaW50IG91dCAqLwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGluaXQvZm9vNF9pbml0 LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjY0ADAwMDA3NjQAMDAwMDc2NAAwMDAw MDAwMTUyMwAwNzUyMTM2NTI1MwAwMTMwNzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIgIABrZWl0aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGtl aXRoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI2luY2x1ZGUgPHN0ZGxp Yi5oPgoKdm9pZCBmb280X2luaXRjYWxsKCkJCS8qIGluaXRpYWxpemUgcm91dGluZSBmb3IgbW9k dWxlICovCnsKCS8qIHN0YXJ0IGRlYnVnIHByaW50IG91dCAqLwoJcHJpbnRmKCI9PT0+IGZvbzQg aW5pdGNhbGwgaGFzIGJlZW4gcnVuXG4iKTsKCS8qIGVuZCBkZWJ1ZyBwcmludCBvdXQgKi8KfQoK ZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaW5pdGNhbGwoCS8qIGV4dGVybmFsIHJvdXRpbmUgdG8gcmVn aXN0ZXIgaW5pdGNhbGwgKi8KICAgICAgICB2b2lkICgqaW5pdGNhbGwpKCksCiAgICAgICAgY2hh ciAqdGFnLAogICAgICAgIGNoYXIgKipydW5fZmlyc3RfbGlzdAogICAgICAgICk7Cgp2b2lkIHJl Z2lzdGVyX2ZvbzRfaW5pdGNhbGwoKQkvKiBsb2NhbCByb3V0aW5lIHRvIHJlZ2lzdGVyIGluaXRj YWxsICovCnsKCXN0YXRpYyBjaGFyICp0YWc9ImZvbzQiOwkvKiB0YWcgZm9yIGluaXRpYWxpemUg cm91dGluZSAqLwoJc3RhdGljIGNoYXIgKnJ1bl9maXJzdF9saXN0W109ewkvKiByb3V0aW5lcyB0 byBiZSBydW4gZmlyc3QgKi8KCQkiZm9vMyIsCgkJTlVMTCB9OwoKCXJlZ2lzdGVyX2luaXRjYWxs KGZvbzRfaW5pdGNhbGwsCgkJCSAgdGFnLAoJCQkgIHJ1bl9maXJzdF9saXN0CgkJCSAgKTsKCQoJ Lyogc3RhcnQgZGVidWcgcHJpbnQgb3V0ICovCglpbnQgaT0wOwoJcHJpbnRmKCIlcyBoYXMgYmVl biByZWdpc3RlcmVkXG4gIEZpcnN0IHJ1bjoiLCB0YWcpOwoJd2hpbGUgKHJ1bl9maXJzdF9saXN0 W2ldICE9IE5VTEwpCgkJcHJpbnRmKCIgJXMiLCBydW5fZmlyc3RfbGlzdFtpKytdKTsKCXByaW50 ZigiXG4iKTsKCS8qIGVuZCBkZWJ1ZyBwcmludCBvdXQgKi8KfQoAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF== --=-S7msmr7XzMshgWO8msyT-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/