Re: [PATCH] automatic initcalls

Keith Adamson (keith.adamson@attbi.com)
29 Jul 2002 22:51:07 -0400


--=-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/