[TAKE3] [PATCH] non-overcommit memory, improved OOM handling, safety

Jonathan Morton (chromi@beryllium.chromatix.org.uk)
Sun, 25 Mar 2001 23:13:03 +0100 (BST)


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.

---1463784209-951819675-985558383=:27088
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ugh, something was going screwy. Trying from a different machine.

------

The attached patch is against 2.4.1 and incorporates the following:

- More optimistic OOM checking, and slightly improved OOM-kill algorithm,
as per my previous patch.

- Accounting of reserved memory, allowing for...

- Non-overcommittal of memory if sysctl_overcommit_memory < 0, enforced
even for root if < -1 (as per old non-overcommittal patch for 2.3.99, but
fixed).

- Behaviour when sysctl_overcommit_memory == 0 or 1 is as per my original
patch (eg. soft-limited overcommittal and full overcommittal
respectively). Defaults to -1.

- If a process is larger than 4 times the free VM on the system, it is not
allowed to allocate or reserve any more, unless overcomittal is allowed as
above. Note that root may have less privilege to hog memory when
sysctl_overcommit_memory == 0 than when == -1.

- As part of the above, a new function vm_invalidate_totalmem() is
available which should be called whenever the total amount of VM changes -
at the moment this is done in sys_swap{on,off}(). This is to avoid having
to recalculate the amount of available memory and swap whenever an
allocation is needed. If someone knows a better way, let me know.

---1463784209-951819675-985558383=:27088
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="oom-patch.2.diff"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0103252313020.27088@beryllium.chromatix.org.uk>
Content-Description:
Content-Disposition: attachment; filename="oom-patch.2.diff"

ZGlmZiAtdXIgLXggdmlhLXJoaW5lKiBsaW51eC0yLjQuMS5vcmlnL2ZzL2V4
ZWMuYyBsaW51eC9mcy9leGVjLmMNCi0tLSBsaW51eC0yLjQuMS5vcmlnL2Zz
L2V4ZWMuYwlUdWUgSmFuIDMwIDA3OjEwOjU4IDIwMDENCisrKyBsaW51eC9m
cy9leGVjLmMJU3VuIE1hciAyNSAxNzowNTowMyAyMDAxDQpAQCAtMzg1LDE5
ICszODUsMjcgQEANCiBzdGF0aWMgaW50IGV4ZWNfbW1hcCh2b2lkKQ0KIHsN
CiAJc3RydWN0IG1tX3N0cnVjdCAqIG1tLCAqIG9sZF9tbTsNCisJc3RydWN0
IHRhc2tfc3RydWN0ICogdHNrID0gY3VycmVudDsNCisJdW5zaWduZWQgbG9u
ZyByZXNlcnZlZCA9IDA7DQogDQotCW9sZF9tbSA9IGN1cnJlbnQtPm1tOw0K
KwlvbGRfbW0gPSB0c2stPm1tOw0KIAlpZiAob2xkX21tICYmIGF0b21pY19y
ZWFkKCZvbGRfbW0tPm1tX3VzZXJzKSA9PSAxKSB7DQorCSAgICAgICAgLyog
S2VlcCBvbGQgc3RhY2sgcmVzZXJ2YXRpb24gKi8NCiAJCW1tX3JlbGVhc2Uo
KTsNCiAJCWV4aXRfbW1hcChvbGRfbW0pOw0KIAkJcmV0dXJuIDA7DQogCX0N
CiANCisJcmVzZXJ2ZWQgPSB2bV9lbm91Z2hfbWVtb3J5KHRzay0+cmxpbVtS
TElNSVRfU1RBQ0tdLnJsaW1fY3VyID4+IA0KKwkJCQkgICAgUEFHRV9TSElG
VCk7DQorCWlmKCFyZXNlcnZlZCkNCisJICAgICAgICByZXR1cm4gLUVOT01F
TTsNCisNCiAJbW0gPSBtbV9hbGxvYygpOw0KIAlpZiAobW0pIHsNCi0JCXN0
cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbSA9IGN1cnJlbnQtPmFjdGl2ZV9t
bTsNCisJCXN0cnVjdCBtbV9zdHJ1Y3QgKmFjdGl2ZV9tbSA9IHRzay0+YWN0
aXZlX21tOw0KIA0KLQkJaWYgKGluaXRfbmV3X2NvbnRleHQoY3VycmVudCwg
bW0pKSB7DQorCQlpZiAoaW5pdF9uZXdfY29udGV4dCh0c2ssIG1tKSkgew0K
IAkJCW1tZHJvcChtbSk7DQogCQkJcmV0dXJuIC1FTk9NRU07DQogCQl9DQpA
QCAtNDIyLDYgKzQzMCw4IEBADQogCQltbWRyb3AoYWN0aXZlX21tKTsNCiAJ
CXJldHVybiAwOw0KIAl9DQorDQorCXZtX3JlbGVhc2VfbWVtb3J5KHJlc2Vy
dmVkKTsNCiAJcmV0dXJuIC1FTk9NRU07DQogfQ0KIA0KZGlmZiAtdXIgLXgg
dmlhLXJoaW5lKiBsaW51eC0yLjQuMS5vcmlnL2ZzL3Byb2MvcHJvY19taXNj
LmMgbGludXgvZnMvcHJvYy9wcm9jX21pc2MuYw0KLS0tIGxpbnV4LTIuNC4x
Lm9yaWcvZnMvcHJvYy9wcm9jX21pc2MuYwlUdWUgTm92ICA3IDE5OjA4OjA5
IDIwMDANCisrKyBsaW51eC9mcy9wcm9jL3Byb2NfbWlzYy5jCVN1biBNYXIg
MjUgMTY6NTc6MDcgMjAwMQ0KQEAgLTE3NSw3ICsxNzUsOSBAQA0KICAgICAg
ICAgICAgICAgICAiTG93VG90YWw6ICAgICAlOGx1IGtCXG4iDQogICAgICAg
ICAgICAgICAgICJMb3dGcmVlOiAgICAgICU4bHUga0JcbiINCiAgICAgICAg
ICAgICAgICAgIlN3YXBUb3RhbDogICAgJThsdSBrQlxuIg0KLSAgICAgICAg
ICAgICAgICAiU3dhcEZyZWU6ICAgICAlOGx1IGtCXG4iLA0KKyAgICAgICAg
ICAgICAgICAiU3dhcEZyZWU6ICAlOGx1IGtCXG4iDQorICAgICAgICAgICAg
ICAgICJWTVRvdGFsOiAgICU4bHUga0JcbiINCisgICAgICAgICAgICAgICAg
IlZNUmVzZXJ2ZWQ6JThsdSBrQlxuIiwNCiAgICAgICAgICAgICAgICAgSyhp
LnRvdGFscmFtKSwNCiAgICAgICAgICAgICAgICAgSyhpLmZyZWVyYW0pLA0K
ICAgICAgICAgICAgICAgICBLKGkuc2hhcmVkcmFtKSwNCkBAIC0xOTAsNyAr
MTkyLDkgQEANCiAgICAgICAgICAgICAgICAgSyhpLnRvdGFscmFtLWkudG90
YWxoaWdoKSwNCiAgICAgICAgICAgICAgICAgSyhpLmZyZWVyYW0taS5mcmVl
aGlnaCksDQogICAgICAgICAgICAgICAgIEsoaS50b3RhbHN3YXApLA0KLSAg
ICAgICAgICAgICAgICBLKGkuZnJlZXN3YXApKTsNCisgICAgICAgICAgICAg
ICAgSyhpLmZyZWVzd2FwKSwNCisgICAgICAgICAgICAgICAgSyh2bV90b3Rh
bCgpKSwgDQorICAgICAgICAgICAgICAgIEsodm1fcmVzZXJ2ZWQpKTsNCiAN
CiAJcmV0dXJuIHByb2NfY2FsY19tZXRyaWNzKHBhZ2UsIHN0YXJ0LCBvZmYs
IGNvdW50LCBlb2YsIGxlbik7DQogI3VuZGVmIEINCmRpZmYgLXVyIC14IHZp
YS1yaGluZSogbGludXgtMi40LjEub3JpZy9pbmNsdWRlL2xpbnV4L21tLmgg
bGludXgvaW5jbHVkZS9saW51eC9tbS5oDQotLS0gbGludXgtMi40LjEub3Jp
Zy9pbmNsdWRlL2xpbnV4L21tLmgJVHVlIEphbiAzMCAwNzoyNDo1NiAyMDAx
DQorKysgbGludXgvaW5jbHVkZS9saW51eC9tbS5oCVN1biBNYXIgMjUgMTY6
NTc6MDcgMjAwMQ0KQEAgLTI0LDYgKzI0LDEzIEBADQogI2luY2x1ZGUgPGFz
bS9hdG9taWMuaD4NCiANCiAvKg0KKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHBy
ZXZlbnQgVk0gb3ZlcmNvbW1pdC4NCisgKi8NCitleHRlcm4gdW5zaWduZWQg
bG9uZyB2bV9yZXNlcnZlZDsNCitleHRlcm4gc3BpbmxvY2tfdCB2bV9sb2Nr
Ow0KK2V4dGVybiBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bV90b3RhbCh2b2lk
KTsNCisNCisvKg0KICAqIExpbnV4IGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBt
YW5hZ2VyIHByaW1pdGl2ZXMuDQogICogVGhlIGlkZWEgYmVpbmcgdG8gaGF2
ZSBhICJ2aXJ0dWFsIiBtbSBpbiB0aGUgc2FtZSB3YXkNCiAgKiB3ZSBoYXZl
IGEgdmlydHVhbCBmcyAtIGdpdmluZyBhIGNsZWFuZXIgaW50ZXJmYWNlIHRv
IHRoZQ0KQEAgLTQ0NCw2ICs0NTEsMTQgQEANCiBleHRlcm4gdW5zaWduZWQg
bG9uZyBkb19icmsodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7DQog
DQogc3RydWN0IHpvbmVfdDsNCisNCitleHRlcm4gbG9uZyB2bV9lbm91Z2hf
bWVtb3J5KGxvbmcgcGFnZXMpOw0KK2V4dGVybiBpbmxpbmUgdm9pZCB2bV9y
ZWxlYXNlX21lbW9yeShsb25nIHBhZ2VzKSB7DQorICAgICAgIGludCBmbGFn
czsNCisgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnZtX2xvY2ssIGZsYWdz
KTsNCisgICAgICAgdm1fcmVzZXJ2ZWQgLT0gcGFnZXM7DQorICAgICAgIHNw
aW5fdW5sb2NrX2lycXJlc3RvcmUoJnZtX2xvY2ssIGZsYWdzKTsNCit9DQog
LyogZmlsZW1hcC5jICovDQogZXh0ZXJuIHZvaWQgcmVtb3ZlX2lub2RlX3Bh
Z2Uoc3RydWN0IHBhZ2UgKik7DQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGFn
ZV91bnVzZShzdHJ1Y3QgcGFnZSAqKTsNCmRpZmYgLXVyIC14IHZpYS1yaGlu
ZSogbGludXgtMi40LjEub3JpZy9pbmNsdWRlL2xpbnV4L3NjaGVkLmggbGlu
dXgvaW5jbHVkZS9saW51eC9zY2hlZC5oDQotLS0gbGludXgtMi40LjEub3Jp
Zy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJVHVlIEphbiAzMCAwNzoyNDo1NiAy
MDAxDQorKysgbGludXgvaW5jbHVkZS9saW51eC9zY2hlZC5oCVN1biBNYXIg
MjUgMTY6NTc6MDcgMjAwMQ0KQEAgLTQyNCw5ICs0MjQsOSBAQA0KIA0KIC8q
DQogICogTGltaXQgdGhlIHN0YWNrIGJ5IHRvIHNvbWUgc2FuZSBkZWZhdWx0
OiByb290IGNhbiBhbHdheXMNCi0gKiBpbmNyZWFzZSB0aGlzIGxpbWl0IGlm
IG5lZWRlZC4uICA4TUIgc2VlbXMgcmVhc29uYWJsZS4NCisgKiBpbmNyZWFz
ZSB0aGlzIGxpbWl0IGlmIG5lZWRlZC4uICAyTUIgc2hvdWxkIGJlIG1vcmUg
dGhhbiBlbm91Z2guDQogICovDQotI2RlZmluZSBfU1RLX0xJTQkoOCoxMDI0
KjEwMjQpDQorI2RlZmluZSBfU1RLX0xJTSAgICAgICAoMioxMDI0KjEwMjQp
DQogDQogI2RlZmluZSBERUZfQ09VTlRFUgkoMTAqSFovMTAwKQkvKiAxMDAg
bXMgdGltZSBzbGljZSAqLw0KICNkZWZpbmUgTUFYX0NPVU5URVIJKDIwKkha
LzEwMCkNCmRpZmYgLXVyIC14IHZpYS1yaGluZSogbGludXgtMi40LjEub3Jp
Zy9rZXJuZWwvZXhpdC5jIGxpbnV4L2tlcm5lbC9leGl0LmMNCi0tLSBsaW51
eC0yLjQuMS5vcmlnL2tlcm5lbC9leGl0LmMJVGh1IEphbiAgNCAwOTowMDoz
NSAyMDAxDQorKysgbGludXgva2VybmVsL2V4aXQuYwlTdW4gTWFyIDI1IDE3
OjI5OjU3IDIwMDENCkBAIC0zMDUsNiArMzA1LDExIEBADQogCW1tX3JlbGVh
c2UoKTsNCiAJaWYgKG1tKSB7DQogCQlhdG9taWNfaW5jKCZtbS0+bW1fY291
bnQpOw0KKwkJaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDEp
IHsNCisJCS8qIE9ubHkgcmVsZWFzZSBzdGFjayBpZiB3ZSdyZSB0aGUgbGFz
dCBvbmUgdXNpbmcgdGhpcyBtbSAqLw0KKwkJCXZtX3JlbGVhc2VfbWVtb3J5
KHRzay0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID4+DQorCQkJCVBB
R0VfU0hJRlQpOw0KKwkJfQ0KIAkJaWYgKG1tICE9IHRzay0+YWN0aXZlX21t
KSBCVUcoKTsNCiAJCS8qIG1vcmUgYSBtZW1vcnkgYmFycmllciB0aGFuIGEg
cmVhbCBsb2NrICovDQogCQl0YXNrX2xvY2sodHNrKTsNCmRpZmYgLXVyIC14
IHZpYS1yaGluZSogbGludXgtMi40LjEub3JpZy9rZXJuZWwvZm9yay5jIGxp
bnV4L2tlcm5lbC9mb3JrLmMNCi0tLSBsaW51eC0yLjQuMS5vcmlnL2tlcm5l
bC9mb3JrLmMJTW9uIEphbiAyMiAyMzo1NDowNiAyMDAxDQorKysgbGludXgv
a2VybmVsL2ZvcmsuYwlTdW4gTWFyIDI1IDE4OjIzOjM1IDIwMDENCkBAIC0x
MjUsNiArMTI1LDcgQEANCiBzdGF0aWMgaW5saW5lIGludCBkdXBfbW1hcChz
dHJ1Y3QgbW1fc3RydWN0ICogbW0pDQogew0KIAlzdHJ1Y3Qgdm1fYXJlYV9z
dHJ1Y3QgKiBtcG50LCAqdG1wLCAqKnBwcmV2Ow0KKwl1bnNpZ25lZCBsb25n
IHJlc2VydmVkID0gMDsNCiAJaW50IHJldHZhbDsNCiANCiAJZmx1c2hfY2Fj
aGVfbW0oY3VycmVudC0+bW0pOw0KQEAgLTE0Miw2ICsxNDMsMTUgQEANCiAJ
CXJldHZhbCA9IC1FTk9NRU07DQogCQlpZihtcG50LT52bV9mbGFncyAmIFZN
X0RPTlRDT1BZKQ0KIAkJCWNvbnRpbnVlOw0KKw0KKwkJcmVzZXJ2ZWQgPSAw
Ow0KKwkJaWYoKG1wbnQtPnZtX2ZsYWdzICYgKFZNX0dST1dTRE9XTiB8IFZN
X1dSSVRFIHwgVk1fU0hBUkVEKSkgPT0gVk1fV1JJVEUpIHsNCisJCQl1bnNp
Z25lZCBsb25nIG5wYWdlcyA9IG1wbnQtPnZtX2VuZCAtIG1wbnQtPnZtX3N0
YXJ0Ow0KKwkJCXJlc2VydmVkID0gdm1fZW5vdWdoX21lbW9yeShucGFnZXMg
Pj4gUEFHRV9TSElGVCk7DQorCQkJaWYoIXJlc2VydmVkKQ0KKwkJCQlnb3Rv
IGZhaWxfbm9tZW07DQorCQl9DQorDQogCQl0bXAgPSBrbWVtX2NhY2hlX2Fs
bG9jKHZtX2FyZWFfY2FjaGVwLCBTTEFCX0tFUk5FTCk7DQogCQlpZiAoIXRt
cCkNCiAJCQlnb3RvIGZhaWxfbm9tZW07DQpAQCAtMjgwLDYgKzI5MCw3IEBA
DQogc3RhdGljIGludCBjb3B5X21tKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxh
Z3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykNCiB7DQogCXN0cnVjdCBt
bV9zdHJ1Y3QgKiBtbSwgKm9sZG1tOw0KKwl1bnNpZ25lZCBsb25nIHJlc2Vy
dmVkOw0KIAlpbnQgcmV0dmFsOw0KIA0KIAl0c2stPm1pbl9mbHQgPSB0c2st
Pm1hal9mbHQgPSAwOw0KQEAgLTMwNSw2ICszMTYsMTAgQEANCiAJfQ0KIA0K
IAlyZXR2YWwgPSAtRU5PTUVNOw0KKwlyZXNlcnZlZCA9IHZtX2Vub3VnaF9t
ZW1vcnkodHNrLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgPj4gUEFH
RV9TSElGVCk7DQorCWlmKCFyZXNlcnZlZCkNCisJCWdvdG8gZmFpbF9ub21l
bTsNCisNCiAJbW0gPSBhbGxvY2F0ZV9tbSgpOw0KIAlpZiAoIW1tKQ0KIAkJ
Z290byBmYWlsX25vbWVtOw0KQEAgLTM0OSw2ICszNjQsOCBAQA0KIGZyZWVf
cHQ6DQogCW1tcHV0KG1tKTsNCiBmYWlsX25vbWVtOg0KKwlpZiAocmVzZXJ2
ZWQpDQorCQl2bV9yZWxlYXNlX21lbW9yeShyZXNlcnZlZCk7DQogCXJldHVy
biByZXR2YWw7DQogfQ0KIA0KZGlmZiAtdXIgLXggdmlhLXJoaW5lKiBsaW51
eC0yLjQuMS5vcmlnL2tlcm5lbC9zeXMuYyBsaW51eC9rZXJuZWwvc3lzLmMN
Ci0tLSBsaW51eC0yLjQuMS5vcmlnL2tlcm5lbC9zeXMuYwlNb24gT2N0IDE2
IDIwOjU4OjUxIDIwMDANCisrKyBsaW51eC9rZXJuZWwvc3lzLmMJU3VuIE1h
ciAyNSAxNjo1NzowNyAyMDAxDQpAQCAtMTA2MCw2ICsxMDYwLDcgQEANCiBh
c21saW5rYWdlIGxvbmcgc3lzX3NldHJsaW1pdCh1bnNpZ25lZCBpbnQgcmVz
b3VyY2UsIHN0cnVjdCBybGltaXQgKnJsaW0pDQogew0KIAlzdHJ1Y3Qgcmxp
bWl0IG5ld19ybGltLCAqb2xkX3JsaW07DQorICAgICAgIHN0cnVjdCB0YXNr
X3N0cnVjdCAqdHNrOw0KIA0KIAlpZiAocmVzb3VyY2UgPj0gUkxJTV9OTElN
SVRTKQ0KIAkJcmV0dXJuIC1FSU5WQUw7DQpAQCAtMTA2Nyw3ICsxMDY4LDgg
QEANCiAJCXJldHVybiAtRUZBVUxUOw0KIAlpZiAobmV3X3JsaW0ucmxpbV9j
dXIgPCAwIHx8IG5ld19ybGltLnJsaW1fbWF4IDwgMCkNCiAJCXJldHVybiAt
RUlOVkFMOw0KLQlvbGRfcmxpbSA9IGN1cnJlbnQtPnJsaW0gKyByZXNvdXJj
ZTsNCisgICAgICAgdHNrID0gY3VycmVudDsNCisgICAgICAgb2xkX3JsaW0g
PSB0c2stPnJsaW0gKyByZXNvdXJjZTsNCiAJaWYgKCgobmV3X3JsaW0ucmxp
bV9jdXIgPiBvbGRfcmxpbS0+cmxpbV9tYXgpIHx8DQogCSAgICAgKG5ld19y
bGltLnJsaW1fbWF4ID4gb2xkX3JsaW0tPnJsaW1fbWF4KSkgJiYNCiAJICAg
ICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQ0KQEAgLTEwNzUsNiArMTA3
NywxNyBAQA0KIAlpZiAocmVzb3VyY2UgPT0gUkxJTUlUX05PRklMRSkgew0K
IAkJaWYgKG5ld19ybGltLnJsaW1fY3VyID4gTlJfT1BFTiB8fCBuZXdfcmxp
bS5ybGltX21heCA+IE5SX09QRU4pDQogCQkJcmV0dXJuIC1FUEVSTTsNCisg
ICAgICAgfQ0KKyAgICAgICAvKiBpZiBQRl9WRk9SSyBpcyBzZXQgd2UncmUg
anVzdCBib3Jyb3dpbmcgdGhlIFZNIHNvIGRvbid0IHRvdWNoIGl0ICovDQor
ICAgICAgIGlmIChyZXNvdXJjZSA9PSBSTElNSVRfU1RBQ0sgJiYgISh0c2st
PmZsYWdzICYgUEZfVkZPUkspKSB7DQorICAgICAgICAgICAgICAgbG9uZyBu
ZXdwYWdlcyA9DQorICAgICAgICAgICAgICAgICAgICAgICAoKGxvbmcpKG5l
d19ybGltLnJsaW1fY3VyIC0gb2xkX3JsaW0tPnJsaW1fY3VyKSA+Pg0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NISUZUKTsNCisg
ICAgICAgICAgICAgICBpZiAobmV3cGFnZXMgPiAwICYmICF2bV9lbm91Z2hf
bWVtb3J5KG5ld3BhZ2VzKSkNCisgICAgICAgICAgICAgICAgICAgICAgIC8q
IFdlIHNob3VsZCByZWFsbHkgcmV0dXJuIEVBR0FJTiBvciBFTk9NRU0uICov
DQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KKyAg
ICAgICAgICAgICAgIGlmIChuZXdwYWdlcyA8IDApDQorICAgICAgICAgICAg
ICAgICAgICAgICB2bV9yZWxlYXNlX21lbW9yeSgtbmV3cGFnZXMpOw0KIAl9
DQogCSpvbGRfcmxpbSA9IG5ld19ybGltOw0KIAlyZXR1cm4gMDsNCmRpZmYg
LXVyIC14IHZpYS1yaGluZSogbGludXgtMi40LjEub3JpZy9tbS9tbWFwLmMg
bGludXgvbW0vbW1hcC5jDQotLS0gbGludXgtMi40LjEub3JpZy9tbS9tbWFw
LmMJTW9uIEphbiAyOSAxNjoxMDo0MSAyMDAxDQorKysgbGludXgvbW0vbW1h
cC5jCVN1biBNYXIgMjUgMjE6MDY6MDggMjAwMQ0KQEAgLTM2LDEyICszNiw0
MiBAQA0KIAlfX1MwMDAsIF9fUzAwMSwgX19TMDEwLCBfX1MwMTEsIF9fUzEw
MCwgX19TMTAxLCBfX1MxMTAsIF9fUzExMQ0KIH07DQogDQotaW50IHN5c2N0
bF9vdmVyY29tbWl0X21lbW9yeTsNCitpbnQgc3lzY3RsX292ZXJjb21taXRf
bWVtb3J5ID0gLTE7DQorDQorLyogVW5mb3J0dW5hdGVseSB0aGVzZSBuZWVk
IHRvIGJlIGxvbmdzIHNvIHdlIG5lZWQgYSBzcGlubG9jay4gKi8NCit1bnNp
Z25lZCBsb25nIHZtX3Jlc2VydmVkID0gMDsNCit1bnNpZ25lZCBsb25nIHRv
dGFsdm0gPSAwOw0KK3NwaW5sb2NrX3Qgdm1fbG9jayA9IFNQSU5fTE9DS19V
TkxPQ0tFRDsNCisNCit2b2lkIHZtX2ludmFsaWRhdGVfdG90YWxtZW0odm9p
ZCkNCit7DQorCWludCBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUo
JnZtX2xvY2ssIGZsYWdzKTsNCisJdG90YWx2bSA9IDA7DQorCXNwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJnZtX2xvY2ssIGZsYWdzKTsNCit9DQorDQordW5z
aWduZWQgbG9uZyB2bV90b3RhbCh2b2lkKSANCit7DQorCWludCBmbGFnczsN
CisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZtX2xvY2ssIGZsYWdzKTsNCisJ
aWYoIXRvdGFsdm0pIHsNCisJCXN0cnVjdCBzeXNpbmZvIGk7DQorCQlzaV9t
ZW1pbmZvKCZpKTsNCisJCXNpX3N3YXBpbmZvKCZpKTsNCisJCXRvdGFsdm0g
PSBpLnRvdGFscmFtICsgaS50b3RhbHN3YXA7DQorCX0NCisJc3Bpbl91bmxv
Y2tfaXJxcmVzdG9yZSgmdm1fbG9jaywgZmxhZ3MpOwkNCisNCisJcmV0dXJu
IHRvdGFsdm07DQorfQ0KIA0KIC8qIENoZWNrIHRoYXQgYSBwcm9jZXNzIGhh
cyBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIGENCiAgKiBuZXcgdmlydHVh
bCBtYXBwaW5nLg0KICAqLw0KLWludCB2bV9lbm91Z2hfbWVtb3J5KGxvbmcg
cGFnZXMpDQorbG9uZyB2bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpDQog
ew0KIAkvKiBTdHVwaWQgYWxnb3JpdGhtIHRvIGRlY2lkZSBpZiB3ZSBoYXZl
IGVub3VnaCBtZW1vcnk6IHdoaWxlDQogCSAqIHNpbXBsZSwgaXQgaG9wZWZ1
bGx5IHdvcmtzIGluIG1vc3Qgb2J2aW91cyBjYXNlcy4uIEVhc3kgdG8NCkBA
IC01MiwxOCArODIsNDQgQEANCiAJICogKGJ1ZmZlcnMrY2FjaGUpLCB1c2Ug
dGhlIG1pbmltdW0gdmFsdWVzLiAgQWxsb3cgYW4gZXh0cmEgMiUNCiAJICog
b2YgbnVtX3BoeXNwYWdlcyBmb3Igc2FmZXR5IG1hcmdpbi4NCiAJICovDQor
CS8qIEZyb20gbm9uLW92ZXJjb21taXQgcGF0Y2g6IG9ubHkgYWxsb3cgdm1f
cmVzZXJ2ZWQgdG8gZXhjZWVkDQorCSAqIHZtX3RvdGFsIGlmIHdlJ3JlIHJv
b3QuDQorCSAqLw0KIA0KLQlsb25nIGZyZWU7DQorCWludCBmbGFnczsNCisJ
bG9uZyBmcmVlID0gMDsNCiAJDQotICAgICAgICAvKiBTb21ldGltZXMgd2Ug
d2FudCB0byB1c2UgbW9yZSBtZW1vcnkgdGhhbiB3ZSBoYXZlLiAqLw0KLQlp
ZiAoc3lzY3RsX292ZXJjb21taXRfbWVtb3J5KQ0KLQkgICAgcmV0dXJuIDE7
DQotDQotCWZyZWUgPSBhdG9taWNfcmVhZCgmYnVmZmVybWVtX3BhZ2VzKTsN
Ci0JZnJlZSArPSBhdG9taWNfcmVhZCgmcGFnZV9jYWNoZV9zaXplKTsNCi0J
ZnJlZSArPSBucl9mcmVlX3BhZ2VzKCk7DQotCWZyZWUgKz0gbnJfc3dhcF9w
YWdlczsNCi0JcmV0dXJuIGZyZWUgPiBwYWdlczsNCisJc3Bpbl9sb2NrX2ly
cXNhdmUoJnZtX2xvY2ssIGZsYWdzKTsNCisJaWYoc3lzY3RsX292ZXJjb21t
aXRfbWVtb3J5IDwgMCkNCisJCWZyZWUgPSB2bV90b3RhbCgpIC0gdm1fcmVz
ZXJ2ZWQ7DQorCWVsc2Ugew0KKwkJZnJlZSA9IGF0b21pY19yZWFkKCZidWZm
ZXJtZW1fcGFnZXMpOw0KKwkJZnJlZSArPSBhdG9taWNfcmVhZCgmcGFnZV9j
YWNoZV9zaXplKTsNCisJCWZyZWUgKz0gbnJfZnJlZV9wYWdlcygpOw0KKwkJ
ZnJlZSArPSBucl9zd2FwX3BhZ2VzOw0KKwl9DQorDQorCS8qIEF0dGVtcHQg
dG8gY3VydGFpbCBtZW1vcnkgYWxsb2NhdGlvbnMgYmVmb3JlIGhhcmQgT09N
IG9jY3Vycy4NCisJICogQmFzZWQgb24gY3VycmVudCBwcm9jZXNzIHNpemUs
IHdoaWNoIGlzIGhvcGVmdWxseSBhIGdvb2QgYW5kIGZhc3QgaGV1cmlzdGlj
Lg0KKwkgKiBBbHNvIGZpeCBidWcgd2hlcmUgdGhlIHJlYWwgT09NIGxpbWl0
IG9mIChmcmVlID09IGZyZWVwYWdlcy5taW4pIGlzIG5vdCB0YWtlbiBpbnRv
IGFjY291bnQuDQorCSAqIEluIGZhY3QsIHdlIHVzZSBmcmVlcGFnZXMuaGln
aCBhcyB0aGUgdGhyZXNob2xkIHRvIG1ha2Ugc3VyZSB0aGVyZSdzIHN0aWxs
IHJvb20gZm9yIGJ1ZmZlcnMrY2FjaGUuDQorCSAqDQorCSAqIC0tIEpvbmF0
aGFuICJDaHJvbWF0aXgiIE1vcnRvbiwgMjR0aCBNYXJjaCAyMDAxDQorCSAq
Lw0KKw0KKwlpZihjdXJyZW50LT5tbSkNCisJICBmcmVlIC09IChjdXJyZW50
LT5tbS0+dG90YWxfdm0gLyA0KTsNCisJZnJlZSAtPSBmcmVlcGFnZXMuaGln
aDsNCisNCisJaWYocGFnZXMgPiBmcmVlKQ0KKwkJaWYoICEoc3lzY3RsX292
ZXJjb21taXRfbWVtb3J5ID09IC0xICYmIGN1cnJlbnQtPnVpZCA9PSAwKQ0K
KwkJCQkmJiBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnkgIT0gMSkNCisJCQlw
YWdlcyA9IDA7DQorDQorCXZtX3Jlc2VydmVkICs9IHBhZ2VzOw0KKwlzcGlu
X3VubG9ja19pcnFyZXN0b3JlKCZ2bV9sb2NrLCBmbGFncyk7DQorDQorCXJl
dHVybiBwYWdlczsNCiB9DQogDQogLyogUmVtb3ZlIG9uZSB2bSBzdHJ1Y3R1
cmUgZnJvbSB0aGUgaW5vZGUncyBpX21hcHBpbmcgYWRkcmVzcyBzcGFjZS4g
Ki8NCkBAIC0xNDgsMTAgKzIwNCw2IEBADQogCWlmIChmaW5kX3ZtYV9pbnRl
cnNlY3Rpb24obW0sIG9sZGJyaywgbmV3YnJrK1BBR0VfU0laRSkpDQogCQln
b3RvIG91dDsNCiANCi0JLyogQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggbWVt
b3J5Li4gKi8NCi0JaWYgKCF2bV9lbm91Z2hfbWVtb3J5KChuZXdicmstb2xk
YnJrKSA+PiBQQUdFX1NISUZUKSkNCi0JCWdvdG8gb3V0Ow0KLQ0KIAkvKiBP
aywgbG9va3MgZ29vZCAtIGxldCBpdCByaXAuICovDQogCWlmIChkb19icmso
b2xkYnJrLCBuZXdicmstb2xkYnJrKSAhPSBvbGRicmspDQogCQlnb3RvIG91
dDsNCkBAIC0xOTAsNiArMjQyLDcgQEANCiB7DQogCXN0cnVjdCBtbV9zdHJ1
Y3QgKiBtbSA9IGN1cnJlbnQtPm1tOw0KIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1
Y3QgKiB2bWE7DQorCWxvbmcgcmVzZXJ2ZWQgPSAwOw0KIAlpbnQgY29ycmVj
dF93Y291bnQgPSAwOw0KIAlpbnQgZXJyb3I7DQogDQpAQCAtMzE3LDcgKzM3
MCw3IEBADQogCS8qIFByaXZhdGUgd3JpdGFibGUgbWFwcGluZz8gQ2hlY2sg
bWVtb3J5IGF2YWlsYWJpbGl0eS4uICovDQogCWlmICgodm1hLT52bV9mbGFn
cyAmIChWTV9TSEFSRUQgfCBWTV9XUklURSkpID09IFZNX1dSSVRFICYmDQog
CSAgICAhKGZsYWdzICYgTUFQX05PUkVTRVJWRSkJCQkJICYmDQotCSAgICAh
dm1fZW5vdWdoX21lbW9yeShsZW4gPj4gUEFHRV9TSElGVCkpDQorICAgICAg
ICAgICAhKHJlc2VydmVkID0gdm1fZW5vdWdoX21lbW9yeShsZW4gPj4gUEFH
RV9TSElGVCkpKQ0KIAkJZ290byBmcmVlX3ZtYTsNCiANCiAJaWYgKGZpbGUp
IHsNCkBAIC0zNjcsNiArNDIwLDcgQEANCiAJemFwX3BhZ2VfcmFuZ2UobW0s
IHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7
DQogCWZsdXNoX3RsYl9yYW5nZShtbSwgdm1hLT52bV9zdGFydCwgdm1hLT52
bV9lbmQpOw0KIGZyZWVfdm1hOg0KKyAgICAgICB2bV9yZWxlYXNlX21lbW9y
eShyZXNlcnZlZCk7DQogCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hl
cCwgdm1hKTsNCiAJcmV0dXJuIGVycm9yOw0KIH0NCkBAIC01NDYsNiArNjAw
LDkgQEANCiAJYXJlYS0+dm1fbW0tPnRvdGFsX3ZtIC09IGxlbiA+PiBQQUdF
X1NISUZUOw0KIAlpZiAoYXJlYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpDQog
CQlhcmVhLT52bV9tbS0+bG9ja2VkX3ZtIC09IGxlbiA+PiBQQUdFX1NISUZU
Ow0KKyAgICAgICBpZiAoKGFyZWEtPnZtX2ZsYWdzICYgKFZNX0dST1dTRE9X
TiB8IFZNX1dSSVRFIHwgVk1fU0hBUkVEKSkgDQorICAgICAgICAgICAgICAg
PT0gVk1fV1JJVEUpDQorICAgICAgICAgICAgICAgdm1fcmVsZWFzZV9tZW1v
cnkobGVuID4+IFBBR0VfU0hJRlQpOw0KIA0KIAkvKiBVbm1hcHBpbmcgdGhl
IHdob2xlIGFyZWEuICovDQogCWlmIChhZGRyID09IGFyZWEtPnZtX3N0YXJ0
ICYmIGVuZCA9PSBhcmVhLT52bV9lbmQpIHsNCkBAIC03ODEsNyArODM4LDcg
QEANCiB7DQogCXN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSA9IGN1cnJlbnQtPm1t
Ow0KIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7DQotCXVuc2lnbmVk
IGxvbmcgZmxhZ3MsIHJldHZhbDsNCisJdW5zaWduZWQgbG9uZyBmbGFncywg
cmV0dmFsLCByZXNlcnZlZCA9IDA7DQogDQogCWxlbiA9IFBBR0VfQUxJR04o
bGVuKTsNCiAJaWYgKCFsZW4pDQpAQCAtODEyLDcgKzg2OSw3IEBADQogCWlm
IChtbS0+bWFwX2NvdW50ID4gTUFYX01BUF9DT1VOVCkNCiAJCXJldHVybiAt
RU5PTUVNOw0KIA0KLQlpZiAoIXZtX2Vub3VnaF9tZW1vcnkobGVuID4+IFBB
R0VfU0hJRlQpKQ0KKwlpZiAoIShyZXNlcnZlZCA9IHZtX2Vub3VnaF9tZW1v
cnkobGVuID4+IFBBR0VfU0hJRlQpKSkNCiAJCXJldHVybiAtRU5PTUVNOw0K
IA0KIAlmbGFncyA9IHZtX2ZsYWdzKFBST1RfUkVBRHxQUk9UX1dSSVRFfFBS
T1RfRVhFQywNCkBAIC04MzYsOCArODkzLDEwIEBADQogCSAqIGNyZWF0ZSBh
IHZtYSBzdHJ1Y3QgZm9yIGFuIGFub255bW91cyBtYXBwaW5nDQogCSAqLw0K
IAl2bWEgPSBrbWVtX2NhY2hlX2FsbG9jKHZtX2FyZWFfY2FjaGVwLCBTTEFC
X0tFUk5FTCk7DQotCWlmICghdm1hKQ0KKwlpZiAoIXZtYSkgew0KKwkJdm1f
cmVsZWFzZV9tZW1vcnkocmVzZXJ2ZWQpOw0KIAkJcmV0dXJuIC1FTk9NRU07
DQorCX0NCiANCiAJdm1hLT52bV9tbSA9IG1tOw0KIAl2bWEtPnZtX3N0YXJ0
ID0gYWRkcjsNCkBAIC05MDAsNiArOTU5LDkgQEANCiAJCXphcF9wYWdlX3Jh
bmdlKG1tLCBzdGFydCwgc2l6ZSk7DQogCQlpZiAobXBudC0+dm1fZmlsZSkN
CiAJCQlmcHV0KG1wbnQtPnZtX2ZpbGUpOw0KKyAgICAgICAgICAgICAgIGlm
ICgobXBudC0+dm1fZmxhZ3MgJiAoVk1fR1JPV1NET1dOIHwgVk1fV1JJVEUg
fCBWTV9TSEFSRUQpKSANCisgICAgICAgICAgICAgICAgICAgICAgID09IFZN
X1dSSVRFKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgdm1fcmVsZWFzZV9t
ZW1vcnkoc2l6ZSA+PiBQQUdFX1NISUZUKTsNCiAJCWttZW1fY2FjaGVfZnJl
ZSh2bV9hcmVhX2NhY2hlcCwgbXBudCk7DQogCQltcG50ID0gbmV4dDsNCiAJ
fQ0KZGlmZiAtdXIgLXggdmlhLXJoaW5lKiBsaW51eC0yLjQuMS5vcmlnL21t
L21yZW1hcC5jIGxpbnV4L21tL21yZW1hcC5jDQotLS0gbGludXgtMi40LjEu
b3JpZy9tbS9tcmVtYXAuYwlGcmkgRGVjIDI5IDIyOjA3OjI0IDIwMDANCisr
KyBsaW51eC9tbS9tcmVtYXAuYwlTdW4gTWFyIDI1IDE2OjU3OjA3IDIwMDEN
CkBAIC0xMyw4ICsxMyw2IEBADQogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+
DQogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+DQogDQotZXh0ZXJuIGludCB2
bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpOw0KLQ0KIHN0YXRpYyBpbmxp
bmUgcHRlX3QgKmdldF9vbmVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1
bnNpZ25lZCBsb25nIGFkZHIpDQogew0KIAlwZ2RfdCAqIHBnZDsNCkBAIC0x
NjgsNyArMTY2LDcgQEANCiAJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWdu
ZWQgbG9uZyBuZXdfYWRkcikNCiB7DQogCXN0cnVjdCB2bV9hcmVhX3N0cnVj
dCAqdm1hOw0KLQl1bnNpZ25lZCBsb25nIHJldCA9IC1FSU5WQUw7DQorICAg
ICAgIHVuc2lnbmVkIGxvbmcgcmV0ID0gLUVJTlZBTCwgcmVzZXJ2ZWQgPSAw
Ow0KIA0KIAlpZiAoZmxhZ3MgJiB+KE1SRU1BUF9GSVhFRCB8IE1SRU1BUF9N
QVlNT1ZFKSkNCiAJCWdvdG8gb3V0Ow0KQEAgLTI0MCw3ICsyMzgsNyBAQA0K
IAkvKiBQcml2YXRlIHdyaXRhYmxlIG1hcHBpbmc/IENoZWNrIG1lbW9yeSBh
dmFpbGFiaWxpdHkuLiAqLw0KIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1f
U0hBUkVEIHwgVk1fV1JJVEUpKSA9PSBWTV9XUklURSAmJg0KIAkgICAgIShm
bGFncyAmIE1BUF9OT1JFU0VSVkUpCQkJCSAmJg0KLQkgICAgIXZtX2Vub3Vn
aF9tZW1vcnkoKG5ld19sZW4gLSBvbGRfbGVuKSA+PiBQQUdFX1NISUZUKSkN
CisgICAgICAgICAgICEocmVzZXJ2ZWQgPSB2bV9lbm91Z2hfbWVtb3J5KChu
ZXdfbGVuIC0gb2xkX2xlbikgPj4gUEFHRV9TSElGVCkpKQ0KIAkJZ290byBv
dXQ7DQogDQogCS8qIG9sZF9sZW4gZXhhY3RseSB0byB0aGUgZW5kIG9mIHRo
ZSBhcmVhLi4NCkBAIC0yNjUsNiArMjYzLDcgQEANCiAJCQkJCQkgICBhZGRy
ICsgbmV3X2xlbik7DQogCQkJfQ0KIAkJCXJldCA9IGFkZHI7DQorICAgICAg
ICAgICAgICAgICAgICAgICByZXNlcnZlZCA9IDA7DQogCQkJZ290byBvdXQ7
DQogCQl9DQogCX0NCkBAIC0yODEsOCArMjgwLDEyIEBADQogCQkJCWdvdG8g
b3V0Ow0KIAkJfQ0KIAkJcmV0ID0gbW92ZV92bWEodm1hLCBhZGRyLCBvbGRf
bGVuLCBuZXdfbGVuLCBuZXdfYWRkcik7DQorICAgICAgICAgICAgICAgaWYg
KHJldCAhPSAtRU5PTUVNKSANCisgICAgICAgICAgICAgICAgICAgICAgIHJl
c2VydmVkID0gMDsNCiAJfQ0KIG91dDoNCisgICAgICAgaWYgKHJlc2VydmVk
KQ0KKyAgICAgICAgICAgICAgIHZtX3JlbGVhc2VfbWVtb3J5KHJlc2VydmVk
KTsNCiAJcmV0dXJuIHJldDsNCiB9DQogDQpkaWZmIC11ciAteCB2aWEtcmhp
bmUqIGxpbnV4LTIuNC4xLm9yaWcvbW0vb29tX2tpbGwuYyBsaW51eC9tbS9v
b21fa2lsbC5jDQotLS0gbGludXgtMi40LjEub3JpZy9tbS9vb21fa2lsbC5j
CVR1ZSBOb3YgMTQgMTg6NTY6NDYgMjAwMA0KKysrIGxpbnV4L21tL29vbV9r
aWxsLmMJU2F0IE1hciAyNCAyMzoyNzo1OSAyMDAxDQpAQCAtNzYsNyArNzYs
OSBAQA0KIAlydW5fdGltZSA9IChqaWZmaWVzIC0gcC0+c3RhcnRfdGltZSkg
Pj4gKFNISUZUX0haICsgMTApOw0KIA0KIAlwb2ludHMgLz0gaW50X3NxcnQo
Y3B1X3RpbWUpOw0KLQlwb2ludHMgLz0gaW50X3NxcnQoaW50X3NxcnQocnVu
X3RpbWUpKTsNCisNCisJLyogTG9uZy1ydW5uaW5nIHByb2Nlc3NlcyBhcmUg
KnZlcnkqIGltcG9ydGFudCwgc28gZG9uJ3QgdGFrZSB0aGUgNHRoIHJvb3Qg
Ki8NCisJcG9pbnRzIC89IHJ1bl90aW1lOw0KIA0KIAkvKg0KIAkgKiBOaWNl
ZCBwcm9jZXNzZXMgYXJlIG1vc3QgbGlrZWx5IGxlc3MgaW1wb3J0YW50LCBz
byBkb3VibGUNCkBAIC05Myw2ICs5NSwxMCBAQA0KIAkJCQlwLT51aWQgPT0g
MCB8fCBwLT5ldWlkID09IDApDQogCQlwb2ludHMgLz0gNDsNCiANCisJLyog
TXVjaCB0aGUgc2FtZSBnb2VzIGZvciBwcm9jZXNzZXMgd2l0aCBsb3cgVUlE
cyAqLw0KKwlpZihwLT51aWQgPCAxMDAgfHwgcC0+ZXVpZCA8IDEwMCkNCisJ
ICBwb2ludHMgLz0gMjsNCisNCiAJLyoNCiAJICogV2UgZG9uJ3Qgd2FudCB0
byBraWxsIGEgcHJvY2VzcyB3aXRoIGRpcmVjdCBoYXJkd2FyZSBhY2Nlc3Mu
DQogCSAqIE5vdCBvbmx5IGNvdWxkIHRoYXQgbWVzcyB1cCB0aGUgaGFyZHdh
cmUsIGJ1dCB1c3VhbGx5IHVzZXJzDQpAQCAtMTkyLDE3ICsxOTgsMjQgQEAN
CiBpbnQgb3V0X29mX21lbW9yeSh2b2lkKQ0KIHsNCiAJc3RydWN0IHN5c2lu
Zm8gc3dwX2luZm87DQorCWxvbmcgZnJlZTsNCiANCiAJLyogRW5vdWdoIGZy
ZWUgbWVtb3J5PyAgTm90IE9PTS4gKi8NCi0JaWYgKG5yX2ZyZWVfcGFnZXMo
KSA+IGZyZWVwYWdlcy5taW4pDQorCWZyZWUgPSBucl9mcmVlX3BhZ2VzKCk7
DQorCWlmIChmcmVlID4gZnJlZXBhZ2VzLm1pbikNCisJCXJldHVybiAwOw0K
Kw0KKwlpZiAoZnJlZSArIG5yX2luYWN0aXZlX2NsZWFuX3BhZ2VzKCkgPiBm
cmVlcGFnZXMubG93KQ0KIAkJcmV0dXJuIDA7DQogDQotCWlmIChucl9mcmVl
X3BhZ2VzKCkgKyBucl9pbmFjdGl2ZV9jbGVhbl9wYWdlcygpID4gZnJlZXBh
Z2VzLmxvdykNCisJLyogQnVmZmVycyBhbmQgY2FjaGVzIGNhbiBiZSBmcmVl
ZCB1cCAoSm9uYXRoYW4gIkNocm9tYXRpeCIgTW9ydG9uKSAqLw0KKwlmcmVl
ICs9IGF0b21pY19yZWFkKCZidWZmZXJtZW1fcGFnZXMpOw0KKwlmcmVlICs9
IGF0b21pY19yZWFkKCZwYWdlX2NhY2hlX3NpemUpOw0KKwlpZiAoZnJlZSA+
IGZyZWVwYWdlcy5sb3cpDQogCQlyZXR1cm4gMDsNCiANCiAJLyogRW5vdWdo
IHN3YXAgc3BhY2UgbGVmdD8gIE5vdCBPT00uICovDQotCXNpX3N3YXBpbmZv
KCZzd3BfaW5mbyk7DQotCWlmIChzd3BfaW5mby5mcmVlc3dhcCA+IDApDQor
CWlmIChucl9zd2FwX3BhZ2VzID4gMCkNCiAJCXJldHVybiAwOw0KIA0KIAkv
KiBFbHNlLi4uICovDQpkaWZmIC11ciAteCB2aWEtcmhpbmUqIGxpbnV4LTIu
NC4xLm9yaWcvbW0vc2htZW0uYyBsaW51eC9tbS9zaG1lbS5jDQotLS0gbGlu
dXgtMi40LjEub3JpZy9tbS9zaG1lbS5jCVN1biBKYW4gMjggMDM6NTA6MDgg
MjAwMQ0KKysrIGxpbnV4L21tL3NobWVtLmMJU3VuIE1hciAyNSAxODozMTo1
NiAyMDAxDQpAQCAtODQ0LDcgKzg0NCw2IEBADQogCXN0cnVjdCBpbm9kZSAq
IGlub2RlOw0KIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICpyb290Ow0KIAlz
dHJ1Y3QgcXN0ciB0aGlzOw0KLQlpbnQgdm1fZW5vdWdoX21lbW9yeShsb25n
IHBhZ2VzKTsNCiANCiAJZXJyb3IgPSAtRU5PTUVNOw0KIAlpZiAoIXZtX2Vu
b3VnaF9tZW1vcnkoKHNpemUpID4+IFBBR0VfU0hJRlQpKQ0KZGlmZiAtdXIg
LXggdmlhLXJoaW5lKiBsaW51eC0yLjQuMS5vcmlnL21tL3N3YXBmaWxlLmMg
bGludXgvbW0vc3dhcGZpbGUuYw0KLS0tIGxpbnV4LTIuNC4xLm9yaWcvbW0v
c3dhcGZpbGUuYwlGcmkgRGVjIDI5IDIyOjA3OjI0IDIwMDANCisrKyBsaW51
eC9tbS9zd2FwZmlsZS5jCVN1biBNYXIgMjUgMjA6NDU6MDYgMjAwMQ0KQEAg
LTE3LDYgKzE3LDkgQEANCiANCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4N
CiANCitleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsNCitl
eHRlcm4gdm9pZCB2bV9pbnZhbGlkYXRlX3RvdGFsbWVtKHZvaWQpOw0KKw0K
IHNwaW5sb2NrX3Qgc3dhcGxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7DQog
dW5zaWduZWQgaW50IG5yX3N3YXBmaWxlczsNCiANCkBAIC00MDMsNyArNDA2
LDcgQEANCiB7DQogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICogcCA9IE5V
TEw7DQogCXN0cnVjdCBuYW1laWRhdGEgbmQ7DQotCWludCBpLCB0eXBlLCBw
cmV2Ow0KKwlpbnQgaSwgdHlwZSwgcHJldiwgZmxhZ3M7DQogCWludCBlcnI7
DQogCQ0KIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpDQpAQCAtNDQ4
LDcgKzQ1MSwxOCBAQA0KIAlucl9zd2FwX3BhZ2VzIC09IHAtPnBhZ2VzOw0K
IAlzd2FwX2xpc3RfdW5sb2NrKCk7DQogCXAtPmZsYWdzID0gU1dQX1VTRUQ7
DQotCWVyciA9IHRyeV90b191bnVzZSh0eXBlKTsNCisNCisgICAgICAgLyog
RG9uJ3QgYWxsb3cgcmVtb3ZhbCBvZiBzd2FwIGlmIGl0IHdpbGwgY2F1c2Ug
b3ZlcmNvbW1pdCAqLw0KKyAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdm1f
bG9jaywgZmxhZ3MpOw0KKyAgICAgICBpZiAoKHN5c2N0bF9vdmVyY29tbWl0
X21lbW9yeSA8IDApICYmIA0KKyAgICAgICAgICAgICAgICh2bV9yZXNlcnZl
ZCA+IHZtX3RvdGFsKCkpKSB7DQorICAgICAgICAgICAgICAgc3Bpbl91bmxv
Y2tfaXJxcmVzdG9yZSgmdm1fbG9jaywgZmxhZ3MpOw0KKyAgICAgICAgICAg
ICAgIGVyciA9IC1FTk9NRU07DQorICAgICAgIH0gZWxzZSB7DQorICAgICAg
ICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdm1fbG9jaywgZmxh
Z3MpOw0KKyAgICAgICAgICAgICAgIGVyciA9IHRyeV90b191bnVzZSh0eXBl
KTsNCisgICAgICAgfQ0KKw0KIAlpZiAoZXJyKSB7DQogCQkvKiByZS1pbnNl
cnQgc3dhcCBzcGFjZSBiYWNrIGludG8gc3dhcF9saXN0ICovDQogCQlzd2Fw
X2xpc3RfbG9jaygpOw0KQEAgLTQ4Myw2ICs0OTcsNyBAQA0KIAl1bmxvY2tf
a2VybmVsKCk7DQogCXBhdGhfcmVsZWFzZSgmbmQpOw0KIG91dDoNCisJdm1f
aW52YWxpZGF0ZV90b3RhbG1lbSgpOw0KIAlyZXR1cm4gZXJyOw0KIH0NCiAN
CkBAIC01NTcsNiArNTcyLDcgQEANCiAJdW5zaWduZWQgbG9uZyBtYXhwYWdl
czsNCiAJaW50IHN3YXBmaWxlc2l6ZTsNCiAJc3RydWN0IGJsb2NrX2Rldmlj
ZSAqYmRldiA9IE5VTEw7DQorICAgICAgIGludCBmbGFnczsNCiAJDQogCWlm
ICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkNCiAJCXJldHVybiAtRVBFUk07
DQpAQCAtNzg3LDYgKzgwMyw3IEBADQogb3V0Og0KIAlpZiAoc3dhcF9oZWFk
ZXIpDQogCQlmcmVlX3BhZ2UoKGxvbmcpIHN3YXBfaGVhZGVyKTsNCisJdm1f
aW52YWxpZGF0ZV90b3RhbG1lbSgpOw0KIAl1bmxvY2tfa2VybmVsKCk7DQog
CXJldHVybiBlcnJvcjsNCiB9DQo=
---1463784209-951819675-985558383=:27088--
-
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/