Re: possible bug in ll_rw_blk.c in 2.0.x and 2.1.x

Kelly French (targon@hazmat.com)
Sun, 16 Nov 1997 17:32:15 -0500 (EST)


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.

--142631878-572646842-879719535=:16022
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ok, here's my fix for this. What it does is remove all of the 4-entry
arrays from kstat and replaces them with a linked list holding all the old
data types along with which device it belongs to. I also preload 4 empty
devices so that at boot up it still works for programs expecting 4
entries. Once you hit 5 entries your programs may GPF :-)

The biggest change that I'd like comments on is that we now keep stats on
*every* block device (but still not per partition - do we want
per-partition?). This includes things like non-IDE CD's, loop, md (test
this) that didn't use to show up.

This should't slow down access because all the read/writes are clustered
for most devices - loop doesn't appear to be one (test performance here
please).

Since this is my first non-trivial patch, someone tell me if I can't just
do a kmalloc(size, GFP_KERNEL) like I did. Since the stats never go away,
there isn't a corresponding kfree().

I've tested this on plain-2.1.64 + this patch on dual P133 with 1 scsi HD,
2 IDE HD, 1 floppy and 8 loop devices. Here's what /proc/stat looks like
for me now:

cpu 1339 0 12884 271665
disk_dev 0x0800 0x0300 0x1600 0x0700 0x0701 0x0702 0x0703 0x0704 0x0705
0x0706 0x0707 0x0200
disk 2509 1 4173 2459 1721 1721 1721 1721 1721 1721 1721 37
disk_rio 1692 1 1045 10 7 7 7 7 7 7 7 29
disk_wio 817 0 3128 2449 1714 1714 1714 1714 1714 1714 1714 8
disk_rblk 3390 2 2090 20 14 14 14 14 14 14 14 58
disk_wblk 1724 0 6256 4898 3428 3428 3428 3428 3428 3428 3428 16
page 8156 278953
swap 1 25
intr 714615 142945 7172 0 0 906 0 187 2 0 12749 0 21920 0 4 5 528726
ctxt 31584
btime 879717148
processes 709

the disk_dev contains which device goes with each entry (0x0200 = floppy,
0x070x = loopx)

This patch shouldn't go into 2.0.x because of the format change.

-Kelly French

--142631878-572646842-879719535=:16022
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="blockstat-2.1.64"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.93.971116173215.16022D@scdh-99.umd.edu>
Content-Description:

ZGlmZiAtdXIgbGludXgtb3JpZy9kcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5j
IGxpbnV4L2RyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMNCi0tLSBsaW51eC1v
cmlnL2RyaXZlcnMvYmxvY2svbGxfcndfYmxrLmMJU2F0IE5vdiAgOCAxNDoz
OToxMiAxOTk3DQorKysgbGludXgvZHJpdmVycy9ibG9jay9sbF9yd19ibGsu
YwlTdW4gTm92IDE2IDE2OjIzOjI3IDE5OTcNCkBAIC05LDYgKzksNyBAQA0K
ICAqIFRoaXMgaGFuZGxlcyBhbGwgcmVhZC93cml0ZSByZXF1ZXN0cyB0byBi
bG9jayBkZXZpY2VzDQogICovDQogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+
DQorI2luY2x1ZGUgPGxpbnV4L21hbGxvYy5oPg0KICNpbmNsdWRlIDxsaW51
eC9rZXJuZWwuaD4NCiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4N
CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCkBAIC0yMjYsMTYgKzIyNywz
OCBAQA0KIAllbHNlIHJvX2JpdHNbbWFqb3JdW21pbm9yID4+IDVdICY9IH4o
MSA8PCAobWlub3IgJiAzMSkpOw0KIH0NCiANCitzdGF0aWMgc3RydWN0IGtl
cm5lbF9zdGF0X2RyaXZlICphZGRfc3RhdF9kcml2ZShzdHJ1Y3Qga2VybmVs
X3N0YXRfZHJpdmUgKnByZXZfZHJpdmUsIGtkZXZfdCBkZXYpDQorew0KKwlz
dHJ1Y3Qga2VybmVsX3N0YXRfZHJpdmUgKnRtcF9kcml2ZTsNCisNCisJLyog
SWYga21hbGxvYygpIGZhaWxzIHdlIGp1c3QgbG9zZSBhIGxpdHRsZSBzdGF0
cyAqLw0KKwl0bXBfZHJpdmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga2Vy
bmVsX3N0YXRfZHJpdmUpLCBHRlBfS0VSTkVMKTsNCisJaWYgKHRtcF9kcml2
ZSkgew0KKwkJdG1wX2RyaXZlLT5ka19kZXYgPSBkZXY7DQorCQl0bXBfZHJp
dmUtPmRrX2RyaXZlID0gMDsNCisJCXRtcF9kcml2ZS0+ZGtfZHJpdmVfcmlv
ID0gMDsNCisJCXRtcF9kcml2ZS0+ZGtfZHJpdmVfd2lvID0gMDsNCisJCXRt
cF9kcml2ZS0+ZGtfZHJpdmVfcmJsayA9IDA7DQorCQl0bXBfZHJpdmUtPmRr
X2RyaXZlX3dibGsgPSAwOw0KKwkJdG1wX2RyaXZlLT5uZXh0ID0gTlVMTDsN
CisJCWlmIChwcmV2X2RyaXZlKQ0KKwkJCXByZXZfZHJpdmUtPm5leHQgPSB0
bXBfZHJpdmU7DQorCQllbHNlDQorCQkJa3N0YXQuZGlza19zdGF0ID0gdG1w
X2RyaXZlOw0KKwl9DQorCXJldHVybih0bXBfZHJpdmUpOw0KK30NCisNCiBz
dGF0aWMgaW5saW5lIHZvaWQgZHJpdmVfc3RhdF9hY2N0KGludCBjbWQsIHVu
c2lnbmVkIGxvbmcgbnJfc2VjdG9ycywNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNob3J0IGRpc2tfaW5kZXgpDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX3N0YXRf
ZHJpdmUgKnRtcF9kcml2ZSkNCiB7DQotCWtzdGF0LmRrX2RyaXZlW2Rpc2tf
aW5kZXhdKys7DQorCXRtcF9kcml2ZS0+ZGtfZHJpdmUrKzsNCiAJaWYgKGNt
ZCA9PSBSRUFEKSB7DQotCQlrc3RhdC5ka19kcml2ZV9yaW9bZGlza19pbmRl
eF0rKzsNCi0JCWtzdGF0LmRrX2RyaXZlX3JibGtbZGlza19pbmRleF0gKz0g
bnJfc2VjdG9yczsNCisJCXRtcF9kcml2ZS0+ZGtfZHJpdmVfcmlvKys7DQor
CQl0bXBfZHJpdmUtPmRrX2RyaXZlX3JibGsgKz0gbnJfc2VjdG9yczsNCiAJ
fSBlbHNlIGlmIChjbWQgPT0gV1JJVEUpIHsNCi0JCWtzdGF0LmRrX2RyaXZl
X3dpb1tkaXNrX2luZGV4XSsrOw0KLQkJa3N0YXQuZGtfZHJpdmVfd2Jsa1tk
aXNrX2luZGV4XSArPSBucl9zZWN0b3JzOw0KKwkJdG1wX2RyaXZlLT5ka19k
cml2ZV93aW8rKzsNCisJCXRtcF9kcml2ZS0+ZGtfZHJpdmVfd2JsayArPSBu
cl9zZWN0b3JzOw0KIAl9IGVsc2UNCiAJCXByaW50ayhLRVJOX0VSUiAiZHJp
dmVfc3RhdF9hY2N0OiBjbWQgbm90IFIvVz9cbiIpOw0KIH0NCkBAIC0yNTIs
MjUgKzI3NSw0OCBAQA0KIHZvaWQgYWRkX3JlcXVlc3Qoc3RydWN0IGJsa19k
ZXZfc3RydWN0ICogZGV2LCBzdHJ1Y3QgcmVxdWVzdCAqIHJlcSkNCiB7DQog
CXN0cnVjdCByZXF1ZXN0ICogdG1wLCAqKmN1cnJlbnRfcmVxdWVzdDsNCi0J
c2hvcnQJCSBkaXNrX2luZGV4Ow0KLQ0KKwlzdHJ1Y3Qga2VybmVsX3N0YXRf
ZHJpdmUgKnRtcF9kcml2ZSwgKnByZXZfZHJpdmU7DQorCWtkZXZfdCB0ZW1w
X2RldjsNCisJaW50IGk7DQorDQorCS8qIEFkZCBpbiA0IGJsYW5rIHJlY29y
ZHMgYmVjYXVzZSBvbGQgcHJvZ3JhbXMgbWlnaHQgZXhwZWN0IHRoZW0gKi8N
CisJaWYgKCFrc3RhdC5kaXNrX3N0YXQpIHsNCisJCXRtcF9kcml2ZSA9IE5V
TEw7DQorCQlmb3IgKGkgPSAwIDsgaSA8IDQgOyBpKyspDQorCQkJdG1wX2Ry
aXZlID0gYWRkX3N0YXRfZHJpdmUodG1wX2RyaXZlLCAwKTsNCisJfQ0KKwkv
KiBPbmx5IGNvdW50IHdob2xlIGRldmljZXMsIG5vdCBwYXJ0aXRpb25zICov
DQogCXN3aXRjaCAoTUFKT1IocmVxLT5ycV9kZXYpKSB7DQogCQljYXNlIFND
U0lfRElTS19NQUpPUjoNCi0JCQlkaXNrX2luZGV4ID0gKE1JTk9SKHJlcS0+
cnFfZGV2KSAmIDB4MDA3MCkgPj4gNDsNCi0JCQlpZiAoZGlza19pbmRleCA8
IDQpDQotCQkJCWRyaXZlX3N0YXRfYWNjdChyZXEtPmNtZCwgcmVxLT5ucl9z
ZWN0b3JzLCBkaXNrX2luZGV4KTsNCisJCQl0ZW1wX2RldiA9IE1LREVWKE1B
Sk9SKHJlcS0+cnFfZGV2KSwgTUlOT1IocmVxLT5ycV9kZXYgJiAweDAwNzAp
KTsNCiAJCQlicmVhazsNCiAJCWNhc2UgSURFMF9NQUpPUjoJLyogc2FtZSBh
cyBIRF9NQUpPUiAqLw0KKwkJY2FzZSBJREUxX01BSk9SOg0KKwkJY2FzZSBJ
REUyX01BSk9SOg0KKwkJY2FzZSBJREUzX01BSk9SOg0KKwkJY2FzZSBQUzJF
U0RJX01BSk9SOg0KIAkJY2FzZSBYVF9ESVNLX01BSk9SOg0KLQkJCWRpc2tf
aW5kZXggPSAoTUlOT1IocmVxLT5ycV9kZXYpICYgMHgwMDQwKSA+PiA2Ow0K
LQkJCWRyaXZlX3N0YXRfYWNjdChyZXEtPmNtZCwgcmVxLT5ucl9zZWN0b3Jz
LCBkaXNrX2luZGV4KTsNCisJCQl0ZW1wX2RldiA9IE1LREVWKE1BSk9SKHJl
cS0+cnFfZGV2KSwgTUlOT1IocmVxLT5ycV9kZXYgJiAweDAwNDApKTsNCiAJ
CQlicmVhazsNCi0JCWNhc2UgSURFMV9NQUpPUjoNCi0JCQlkaXNrX2luZGV4
ID0gKChNSU5PUihyZXEtPnJxX2RldikgJiAweDAwNDApID4+IDYpICsgMjsN
Ci0JCQlkcml2ZV9zdGF0X2FjY3QocmVxLT5jbWQsIHJlcS0+bnJfc2VjdG9y
cywgZGlza19pbmRleCk7DQotCQlkZWZhdWx0Og0KKwkJY2FzZSBGTE9QUFlf
TUFKT1I6DQorCQkJdGVtcF9kZXYgPSBNS0RFVihNQUpPUihyZXEtPnJxX2Rl
diksIE1JTk9SKHJlcS0+cnFfZGV2ICYgMHgwMDAzKSk7DQogCQkJYnJlYWs7
DQorCQlkZWZhdWx0Og0KKwkJCXRlbXBfZGV2ID0gcmVxLT5ycV9kZXY7DQor
CX0NCisJcHJldl9kcml2ZSA9IE5VTEw7DQorCXRtcF9kcml2ZSA9IGtzdGF0
LmRpc2tfc3RhdDsNCisJd2hpbGUgKHRtcF9kcml2ZSAmJiB0bXBfZHJpdmUt
PmRrX2RldiAmJiAodG1wX2RyaXZlLT5ka19kZXYgIT0gdGVtcF9kZXYpKSB7
DQorCQlwcmV2X2RyaXZlID0gdG1wX2RyaXZlOw0KKwkJdG1wX2RyaXZlID0g
dG1wX2RyaXZlLT5uZXh0Ow0KIAl9DQorCS8qIGEgcmVjb3JkIGlzIGVtcHR5
IG9uIGRrX2RldiA9PSAwLCB1c2UgaXQgaWYgeW91IGNhbiAqLw0KKwlpZiAo
IXRtcF9kcml2ZSkNCisJCXRtcF9kcml2ZSA9IGFkZF9zdGF0X2RyaXZlKHBy
ZXZfZHJpdmUsIHRlbXBfZGV2KTsNCisJZWxzZSBpZiAoIXRtcF9kcml2ZS0+
ZGtfZGV2KQ0KKwkJdG1wX2RyaXZlLT5ka19kZXYgPSB0ZW1wX2RldjsNCisJ
aWYgKHRtcF9kcml2ZSkNCisJCWRyaXZlX3N0YXRfYWNjdChyZXEtPmNtZCwg
cmVxLT5ucl9zZWN0b3JzLCB0bXBfZHJpdmUpOw0KIA0KIAlyZXEtPm5leHQg
PSBOVUxMOw0KIAljdXJyZW50X3JlcXVlc3QgPSBnZXRfcXVldWUocmVxLT5y
cV9kZXYpOw0KZGlmZiAtdXIgbGludXgtb3JpZy9mcy9wcm9jL2FycmF5LmMg
bGludXgvZnMvcHJvYy9hcnJheS5jDQotLS0gbGludXgtb3JpZy9mcy9wcm9j
L2FycmF5LmMJVHVlIE9jdCAyMSAxMTo1NzoyOSAxOTk3DQorKysgbGludXgv
ZnMvcHJvYy9hcnJheS5jCVN1biBOb3YgMTYgMTU6NDc6MzEgMTk5Nw0KQEAg
LTIxNCw2ICsyMTQsNyBAQA0KIHN0YXRpYyBpbnQgZ2V0X2tzdGF0KGNoYXIg
KiBidWZmZXIpDQogew0KIAlpbnQgaSwgbGVuOw0KKwlzdHJ1Y3Qga2VybmVs
X3N0YXRfZHJpdmUgKnRtcF9kcml2ZTsNCiAJdW5zaWduZWQgc3VtID0gMDsN
CiAJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxfZm9ya3M7DQogCXVuc2ln
bmVkIGxvbmcgdGlja3M7DQpAQCAtMjIxLDMwICsyMjIsNDggQEANCiAJdGlj
a3MgPSBqaWZmaWVzICogc21wX251bV9jcHVzOw0KIAlmb3IgKGkgPSAwIDsg
aSA8IE5SX0lSUVMgOyBpKyspDQogCQlzdW0gKz0ga3N0YXQuaW50ZXJydXB0
c1tpXTsNCisNCiAJbGVuID0gc3ByaW50ZihidWZmZXIsDQotCQkiY3B1ICAl
dSAldSAldSAlbHVcbiINCi0JCSJkaXNrICV1ICV1ICV1ICV1XG4iDQotCQki
ZGlza19yaW8gJXUgJXUgJXUgJXVcbiINCi0JCSJkaXNrX3dpbyAldSAldSAl
dSAldVxuIg0KLQkJImRpc2tfcmJsayAldSAldSAldSAldVxuIg0KLQkJImRp
c2tfd2JsayAldSAldSAldSAldVxuIg0KLQkJInBhZ2UgJXUgJXVcbiINCi0J
CSJzd2FwICV1ICV1XG4iDQotCQkiaW50ciAldSIsDQorCQkiY3B1ICAldSAl
dSAldSAlbHVcbiIsDQogCQlrc3RhdC5jcHVfdXNlciwNCiAJCWtzdGF0LmNw
dV9uaWNlLA0KIAkJa3N0YXQuY3B1X3N5c3RlbSwNCi0JCXRpY2tzIC0gKGtz
dGF0LmNwdV91c2VyICsga3N0YXQuY3B1X25pY2UgKyBrc3RhdC5jcHVfc3lz
dGVtKSwNCi0JCWtzdGF0LmRrX2RyaXZlWzBdLCBrc3RhdC5ka19kcml2ZVsx
XSwNCi0JCWtzdGF0LmRrX2RyaXZlWzJdLCBrc3RhdC5ka19kcml2ZVszXSwN
Ci0JCWtzdGF0LmRrX2RyaXZlX3Jpb1swXSwga3N0YXQuZGtfZHJpdmVfcmlv
WzFdLA0KLQkJa3N0YXQuZGtfZHJpdmVfcmlvWzJdLCBrc3RhdC5ka19kcml2
ZV9yaW9bM10sDQotCQlrc3RhdC5ka19kcml2ZV93aW9bMF0sIGtzdGF0LmRr
X2RyaXZlX3dpb1sxXSwNCi0JCWtzdGF0LmRrX2RyaXZlX3dpb1syXSwga3N0
YXQuZGtfZHJpdmVfd2lvWzNdLA0KLQkJa3N0YXQuZGtfZHJpdmVfcmJsa1sw
XSwga3N0YXQuZGtfZHJpdmVfcmJsa1sxXSwNCi0JCWtzdGF0LmRrX2RyaXZl
X3JibGtbMl0sIGtzdGF0LmRrX2RyaXZlX3JibGtbM10sDQotCQlrc3RhdC5k
a19kcml2ZV93YmxrWzBdLCBrc3RhdC5ka19kcml2ZV93YmxrWzFdLA0KLQkJ
a3N0YXQuZGtfZHJpdmVfd2Jsa1syXSwga3N0YXQuZGtfZHJpdmVfd2Jsa1sz
XSwNCisJCXRpY2tzIC0gKGtzdGF0LmNwdV91c2VyICsga3N0YXQuY3B1X25p
Y2UgKyBrc3RhdC5jcHVfc3lzdGVtKSk7DQorDQorCWxlbiArPSBzcHJpbnRm
KGJ1ZmZlciArIGxlbiwgImRpc2tfZGV2Iik7DQorCWZvciAodG1wX2RyaXZl
ID0ga3N0YXQuZGlza19zdGF0IDsgdG1wX2RyaXZlIDsgdG1wX2RyaXZlID0g
dG1wX2RyaXZlLT5uZXh0KQ0KKwkJbGVuICs9IHNwcmludGYoYnVmZmVyICsg
bGVuLCAiIDB4JTA0eCIsIHRtcF9kcml2ZS0+ZGtfZGV2KTsNCisJbGVuICs9
IHNwcmludGYoYnVmZmVyICsgbGVuLCAiXG4iKTsNCisNCisJbGVuICs9IHNw
cmludGYoYnVmZmVyICsgbGVuLCAiZGlzayIpOw0KKwlmb3IgKHRtcF9kcml2
ZSA9IGtzdGF0LmRpc2tfc3RhdCA7IHRtcF9kcml2ZSA7IHRtcF9kcml2ZSA9
IHRtcF9kcml2ZS0+bmV4dCkNCisJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciAr
IGxlbiwgIiAldSIsIHRtcF9kcml2ZS0+ZGtfZHJpdmUpOw0KKwlsZW4gKz0g
c3ByaW50ZihidWZmZXIgKyBsZW4sICJcbiIpOw0KKw0KKwlsZW4gKz0gc3By
aW50ZihidWZmZXIgKyBsZW4sICJkaXNrX3JpbyIpOw0KKwlmb3IgKHRtcF9k
cml2ZSA9IGtzdGF0LmRpc2tfc3RhdCA7IHRtcF9kcml2ZSA7IHRtcF9kcml2
ZSA9IHRtcF9kcml2ZS0+bmV4dCkNCisJCWxlbiArPSBzcHJpbnRmKGJ1ZmZl
ciArIGxlbiwgIiAldSIsIHRtcF9kcml2ZS0+ZGtfZHJpdmVfcmlvKTsNCisJ
bGVuICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiXG4iKTsNCisNCisJbGVu
ICs9IHNwcmludGYoYnVmZmVyICsgbGVuLCAiZGlza193aW8iKTsNCisJZm9y
ICh0bXBfZHJpdmUgPSBrc3RhdC5kaXNrX3N0YXQgOyB0bXBfZHJpdmUgOyB0
bXBfZHJpdmUgPSB0bXBfZHJpdmUtPm5leHQpDQorCQlsZW4gKz0gc3ByaW50
ZihidWZmZXIgKyBsZW4sICIgJXUiLCB0bXBfZHJpdmUtPmRrX2RyaXZlX3dp
byk7DQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIlxuIik7DQor
DQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgImRpc2tfcmJsayIp
Ow0KKwlmb3IgKHRtcF9kcml2ZSA9IGtzdGF0LmRpc2tfc3RhdCA7IHRtcF9k
cml2ZSA7IHRtcF9kcml2ZSA9IHRtcF9kcml2ZS0+bmV4dCkNCisJCWxlbiAr
PSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIiAldSIsIHRtcF9kcml2ZS0+ZGtf
ZHJpdmVfcmJsayk7DQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwg
IlxuIik7DQorDQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgImRp
c2tfd2JsayIpOw0KKwlmb3IgKHRtcF9kcml2ZSA9IGtzdGF0LmRpc2tfc3Rh
dCA7IHRtcF9kcml2ZSA7IHRtcF9kcml2ZSA9IHRtcF9kcml2ZS0+bmV4dCkN
CisJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIiAldSIsIHRtcF9k
cml2ZS0+ZGtfZHJpdmVfd2Jsayk7DQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZl
ciArIGxlbiwgIlxuIik7DQorDQorCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciAr
IGxlbiwNCisJCSJwYWdlICV1ICV1XG4iDQorCQkic3dhcCAldSAldVxuIg0K
KwkJImludHIgJXUiLA0KIAkJa3N0YXQucGdwZ2luLA0KIAkJa3N0YXQucGdw
Z291dCwNCiAJCWtzdGF0LnBzd3BpbiwNCkBAIC0yNTIsNiArMjcxLDcgQEAN
CiAJCXN1bSk7DQogCWZvciAoaSA9IDAgOyBpIDwgTlJfSVJRUyA7IGkrKykN
CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZmZlciArIGxlbiwgIiAldSIsIGtzdGF0
LmludGVycnVwdHNbaV0pOw0KKw0KIAlsZW4gKz0gc3ByaW50ZihidWZmZXIg
KyBsZW4sDQogCQkiXG5jdHh0ICV1XG4iDQogCQkiYnRpbWUgJWx1XG4iDQpA
QCAtMjYxLDcgKzI4MSw2IEBADQogCQl0b3RhbF9mb3Jrcyk7DQogCXJldHVy
biBsZW47DQogfQ0KLQ0KIA0KIHN0YXRpYyBpbnQgZ2V0X3VwdGltZShjaGFy
ICogYnVmZmVyKQ0KIHsNCmRpZmYgLXVyIGxpbnV4LW9yaWcvaW5jbHVkZS9s
aW51eC9rZXJuZWxfc3RhdC5oIGxpbnV4L2luY2x1ZGUvbGludXgva2VybmVs
X3N0YXQuaA0KLS0tIGxpbnV4LW9yaWcvaW5jbHVkZS9saW51eC9rZXJuZWxf
c3RhdC5oCU1vbiBKdW4gMzAgMTg6MjM6MTIgMTk5Nw0KKysrIGxpbnV4L2lu
Y2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAlTdW4gTm92IDE2IDE1OjQ3OjMx
IDE5OTcNCkBAIC0yLDYgKzIsNyBAQA0KICNkZWZpbmUgX0xJTlVYX0tFUk5F
TF9TVEFUX0gNCiANCiAjaW5jbHVkZSA8YXNtL2lycS5oPg0KKyNpbmNsdWRl
IDxsaW51eC9rZGV2X3QuaD4NCiANCiAvKg0KICAqICdrZXJuZWxfc3RhdC5o
JyBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgbmVlZGVkIGZvciBkb2luZw0K
QEAgLTksMTUgKzEwLDIwIEBADQogICogdXNlZCBieSByc3RhdGQvcGVyZm1l
dGVyDQogICovDQogDQotI2RlZmluZSBES19ORFJJVkUgNA0KKy8qIFRoaXMg
aXMgYSBsaW5rZWQgbGlzdCBvZiBibG9jayBkZXZpY2Ugc3RhdHMuICBoZWFk
ID09IGtzdGF0LmRpc2tfc3RhdCAqLw0KK3N0cnVjdCBrZXJuZWxfc3RhdF9k
cml2ZSB7DQorCWtkZXZfdCBka19kZXY7DQorCXVuc2lnbmVkIGludCBka19k
cml2ZTsNCisJdW5zaWduZWQgaW50IGRrX2RyaXZlX3JpbzsNCisJdW5zaWdu
ZWQgaW50IGRrX2RyaXZlX3dpbzsNCisJdW5zaWduZWQgaW50IGRrX2RyaXZl
X3JibGs7DQorCXVuc2lnbmVkIGludCBka19kcml2ZV93YmxrOw0KKwlzdHJ1
Y3Qga2VybmVsX3N0YXRfZHJpdmUgKm5leHQ7DQorfTsNCiANCiBzdHJ1Y3Qg
a2VybmVsX3N0YXQgew0KIAl1bnNpZ25lZCBpbnQgY3B1X3VzZXIsIGNwdV9u
aWNlLCBjcHVfc3lzdGVtOw0KLQl1bnNpZ25lZCBpbnQgZGtfZHJpdmVbREtf
TkRSSVZFXTsNCi0JdW5zaWduZWQgaW50IGRrX2RyaXZlX3Jpb1tES19ORFJJ
VkVdOw0KLQl1bnNpZ25lZCBpbnQgZGtfZHJpdmVfd2lvW0RLX05EUklWRV07
DQotCXVuc2lnbmVkIGludCBka19kcml2ZV9yYmxrW0RLX05EUklWRV07DQot
CXVuc2lnbmVkIGludCBka19kcml2ZV93YmxrW0RLX05EUklWRV07DQorCXN0
cnVjdCBrZXJuZWxfc3RhdF9kcml2ZSAqZGlza19zdGF0Ow0KIAl1bnNpZ25l
ZCBpbnQgcGdwZ2luLCBwZ3Bnb3V0Ow0KIAl1bnNpZ25lZCBpbnQgcHN3cGlu
LCBwc3dwb3V0Ow0KIAl1bnNpZ25lZCBpbnQgaW50ZXJydXB0c1tOUl9JUlFT
XTsNCg==
--142631878-572646842-879719535=:16022--