[PATCH] Removing lock_kernel() from mlock(), mlockall(), munlock(),

Alexander Viro (viro@math.psu.edu)
Fri, 18 Jun 1999 20:55:29 -0400 (EDT)


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.

---559023410-486725371-929753729=:5639
Content-Type: TEXT/PLAIN; charset=US-ASCII

Attached patch does (OK, tries to do) the following:

a) ->f_count became atomic_t. fput() still needs the big lock being held,
but changes of ->f_count outside of big lock are kosher now. Moreover,
fput() is OK if we have two pointers on hands (and thus know that f_count
will be at least 2).

b) ->i_writecount became atomic too. We still depend on the fact that
do_mmap(), get_write_access() and prepare_binfmt() are called with big
lock, but the rest is SMP-safe now.

c) new field added to struct inode: ->i_shared_lock. It's a spinlock and
access to ->i_mmap and the shared areas ring is protected by grabbing it.
We still depend on the fact that do_mmap() and fcntl_setlk() are called
with big lock.

d) shm_open() and shm_close() grab (and release) the big lock.

That makes insert_vm_struct() and merge_segments() SMP-safe. Since
->f_count manipulations are safe too we can remove the lock_kernel() from
many places - see subject ;-)

Folks, give it a look, please. The patch is against 2.3.7-pre9 and I think
that it doesn't open any new races ;-) I would be very grateful if VM
folks would look at it.
Cheers,
Al

---559023410-486725371-929753729=:5639
Content-Type: TEXT/PLAIN; charset=US-ASCII; name=f_count-patch-4
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.GSO.4.10.9906182055290.5639@weyl.math.psu.edu>
Content-Description:
Content-Disposition: attachment; filename=f_count-patch-4

ZGlmZiAtdXJOIGxpbnV4LTIuMy43LXByZTkvYXJjaC9zcGFyYy9tbS9zcm1t
dS5jIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL21tL3NybW11LmMN
Ci0tLSBsaW51eC0yLjMuNy1wcmU5L2FyY2gvc3BhcmMvbW0vc3JtbXUuYwlU
aHUgTWF5IDEzIDA3OjAxOjQ1IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291
bnQvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCUZyaSBKdW4gMTggMjA6MjY6Mzkg
MTk5OQ0KQEAgLTIwNzYsNiArMjA3Niw3IEBADQogCQkJZ290byBkb25lOw0K
IAkJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsNCiAJCW9mZnNl
dCA9IChhZGRyZXNzICYgUEFHRV9NQVNLKSAtIHZtYS0+dm1fc3RhcnQ7DQor
CQlzcGluX2xvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAJCXZtYXJp
bmcgPSBpbm9kZS0+aV9tbWFwOyANCiAJCWRvIHsNCiAJCQkvKiBEbyBub3Qg
bWlzdGFrZSBvdXJzZWx2ZXMgYXMgYW5vdGhlciBtYXBwaW5nLiAqLw0KQEAg
LTIxMDksNiArMjExMCw3IEBADQogCQkJCX0NCiAJCQl9DQogCQl9IHdoaWxl
ICgodm1hcmluZyA9IHZtYXJpbmctPnZtX25leHRfc2hhcmUpICE9IE5VTEwp
Ow0KKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiAN
CiAJCWlmKGFsaWFzX2ZvdW5kICYmICgocHRlX3ZhbChwdGUpICYgU1JNTVVf
Q0FDSEUpICE9IDApKSB7DQogCQkJcGdkcCA9IHNybW11X3BnZF9vZmZzZXQo
dm1hLT52bV9tbSwgYWRkcmVzcyk7DQpkaWZmIC11ck4gbGludXgtMi4zLjct
cHJlOS9hcmNoL3NwYXJjL21tL3N1bjRjLmMgbGludXgtYmlyZC5mX2NvdW50
L2FyY2gvc3BhcmMvbW0vc3VuNGMuYw0KLS0tIGxpbnV4LTIuMy43LXByZTkv
YXJjaC9zcGFyYy9tbS9zdW40Yy5jCVRodSBNYXkgMTMgMDc6MDE6NDUgMTk5
OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9hcmNoL3NwYXJjL21tL3N1bjRj
LmMJRnJpIEp1biAxOCAyMDoyNjozOSAxOTk5DQpAQCAtMjY4Miw4ICsyNjgy
LDEwIEBADQogCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsNCiAJaWYoaW5v
ZGUpIHsNCiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKGFkZHJlc3MgJiBQ
QUdFX01BU0spIC0gdm1hLT52bV9zdGFydDsNCi0JCXN0cnVjdCB2bV9hcmVh
X3N0cnVjdCAqdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KKwkJc3RydWN0
IHZtX2FyZWFfc3RydWN0ICp2bWFyaW5nOw0KIAkJaW50IGFsaWFzX2ZvdW5k
ID0gMDsNCisJCXNwaW5fbG9jaygmaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0K
KwkJdm1hcmluZyA9IGlub2RlLT5pX21tYXA7IA0KIAkJZG8gew0KIAkJCXVu
c2lnbmVkIGxvbmcgdmFkZHIgPSB2bWFyaW5nLT52bV9zdGFydCArIG9mZnNl
dDsNCiAJCQl1bnNpZ25lZCBsb25nIHN0YXJ0Ow0KQEAgLTI3MTIsNiArMjcx
NCw3IEBADQogCQkJCX0NCiAJCQl9DQogCQl9IHdoaWxlICgodm1hcmluZyA9
IHZtYXJpbmctPnZtX25leHRfc2hhcmUpICE9IE5VTEwpOw0KKwkJc3Bpbl91
bmxvY2soJmlub2RlLT5pX3NoYXJlZF9sb2NrKTsNCiANCiAJCWlmKGFsaWFz
X2ZvdW5kICYmICEocHRlX3ZhbChwdGUpICYgX1NVTjRDX1BBR0VfTk9DQUNI
RSkpIHsNCiAJCQlwZ2RwID0gc3VuNGNfcGdkX29mZnNldCh2bWEtPnZtX21t
LCBhZGRyZXNzKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2FyY2gv
c3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBsaW51eC1iaXJkLmZfY291
bnQvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jDQotLS0gbGlu
dXgtMi4zLjctcHJlOS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMy
LmMJVGh1IEp1biAxMCAwNzoyNDowMyAxOTk5DQorKysgbGludXgtYmlyZC5m
X2NvdW50L2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwlGcmkg
SnVuIDE4IDIwOjI2OjM5IDE5OTkNCkBAIC0yMzM1LDcgKzIzMzUsNyBAQA0K
IAkJCWJyZWFrOw0KIAkJfQ0KIAkJLyogQnVtcCB0aGUgdXNhZ2UgY291bnQg
YW5kIGluc3RhbGwgdGhlIGZpbGUuICovDQotCQlmcFtpXS0+Zl9jb3VudCsr
Ow0KKwkJYXRvbWljX2luYygmZnBbaV0tPmZfY291bnQpOw0KIAkJY3VycmVu
dC0+ZmlsZXMtPmZkW25ld19mZF0gPSBmcFtpXTsNCiAJfQ0KIA0KZGlmZiAt
dXJOIGxpbnV4LTIuMy43LXByZTkvZHJpdmVycy9jaGFyL3N5c3JxLmMgbGlu
dXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvY2hhci9zeXNycS5jDQotLS0gbGlu
dXgtMi4zLjctcHJlOS9kcml2ZXJzL2NoYXIvc3lzcnEuYwlUaHUgTWF5IDEz
IDA3OjAxOjU4IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZHJpdmVy
cy9jaGFyL3N5c3JxLmMJRnJpIEp1biAxOCAyMDoyNjozOSAxOTk5DQpAQCAt
MTU1LDcgKzE1NSw4IEBADQogCXN0cnVjdCBmaWxlICpmaWxlOw0KIA0KIAlm
b3IgKGZpbGUgPSBpbnVzZV9maWxwczsgZmlsZTsgZmlsZSA9IGZpbGUtPmZf
bmV4dCkNCi0JCWlmIChmaWxlLT5mX2RlbnRyeSAmJiBmaWxlLT5mX2NvdW50
ICYmIFNfSVNSRUcoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkp
DQorCQlpZiAoZmlsZS0+Zl9kZW50cnkgJiYgYXRvbWljX3JlYWQoJmZpbGUt
PmZfY291bnQpDQorCQkJCSYmIFNfSVNSRUcoZmlsZS0+Zl9kZW50cnktPmRf
aW5vZGUtPmlfbW9kZSkpDQogCQkJZmlsZS0+Zl9tb2RlICY9IH4yOw0KIH0N
CiANCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2RyaXZlcnMvY2hhci90
cHFpYzAyLmMgbGludXgtYmlyZC5mX2NvdW50L2RyaXZlcnMvY2hhci90cHFp
YzAyLmMNCi0tLSBsaW51eC0yLjMuNy1wcmU5L2RyaXZlcnMvY2hhci90cHFp
YzAyLmMJVGh1IE1heSAxMyAwNzo0OTozMiAxOTk5DQorKysgbGludXgtYmly
ZC5mX2NvdW50L2RyaXZlcnMvY2hhci90cHFpYzAyLmMJRnJpIEp1biAxOCAy
MDoyNjozOSAxOTk5DQpAQCAtMjIxNiw3ICsyMjE2LDcgQEANCiAgICAgfQ0K
ICAgICANCiAJLyogT25seSBvbmUgYXQgYSB0aW1lIGZyb20gaGVyZSBvbi4u
LiAqLw0KLSAgICBpZiAoZmlscC0+Zl9jb3VudD4xKSAJLyogZmlscC0+Zl9j
b3VudD09MSBmb3IgdGhlIGZpcnN0IG9wZW4oKSAqLw0KKyAgICBpZiAoYXRv
bWljX3JlYWQoJmZpbHAtPmZfY291bnQpPjEpIAkvKiBmaWxwLT5mX2NvdW50
PT0xIGZvciB0aGUgZmlyc3Qgb3BlbigpICovDQogICAgIHsNCiAJcmV0dXJu
IC1FQlVTWTsNCiAgICAgfQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy43LXByZTkv
ZHJpdmVycy9zY3NpL3N0LmMgbGludXgtYmlyZC5mX2NvdW50L2RyaXZlcnMv
c2NzaS9zdC5jDQotLS0gbGludXgtMi4zLjctcHJlOS9kcml2ZXJzL3Njc2kv
c3QuYwlTYXQgTWF5IDI5IDE4OjA0OjA4IDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvZHJpdmVycy9zY3NpL3N0LmMJRnJpIEp1biAxOCAyMDoyNjoz
OSAxOTk5DQpAQCAtODkwLDcgKzg5MCw3IEBADQogICAgIGtkZXZfdCBkZXZ0
ID0gaW5vZGUtPmlfcmRldjsNCiAgICAgaW50IGRldjsNCiANCi0gICAgaWYg
KGZpbHAtPmZfY291bnQgPiAxKQ0KKyAgICBpZiAoYXRvbWljX3JlYWQoJmZp
bHAtPmZfY291bnQpID4gMSkNCiAJcmV0dXJuIDA7DQogDQogICAgIGRldiA9
IFRBUEVfTlIoZGV2dCk7DQpkaWZmIC11ck4gbGludXgtMi4zLjctcHJlOS9k
cml2ZXJzL3NnaS9jaGFyL3VzZW1hLmMgbGludXgtYmlyZC5mX2NvdW50L2Ry
aXZlcnMvc2dpL2NoYXIvdXNlbWEuYw0KLS0tIGxpbnV4LTIuMy43LXByZTkv
ZHJpdmVycy9zZ2kvY2hhci91c2VtYS5jCU1vbiBNYXkgMTcgMDc6MzQ6MTIg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9kcml2ZXJzL3NnaS9jaGFy
L3VzZW1hLmMJRnJpIEp1biAxOCAyMDoyNjozOSAxOTk5DQpAQCAtNTAsOCAr
NTAsOCBAQA0KIAlpZiAobmV3ZmQgPCAwKQ0KIAkJcmV0dXJuIG5ld2ZkOw0K
IAkNCisJYXRvbWljX2luYygmdXNlbWEtPmZpbHAtPmZfY291bnQpOw0KIAlj
dXJyZW50LT5maWxlcy0+ZmQgW25ld2ZkXSA9IHVzZW1hLT5maWxwOw0KLQl1
c2VtYS0+ZmlscC0+Zl9jb3VudCsrOw0KIAkvKiBJcyB0aGF0IGl0PyAqLw0K
IAlwcmludGsoIlVJT0NBVFRBQ0hTRU1BOiBuZXcgdXNlbWEgZmQgaXMgJWQi
LCBuZXdmZCk7DQogCXJldHVybiBuZXdmZDsNCmRpZmYgLXVyTiBsaW51eC0y
LjMuNy1wcmU5L2ZzL2V4ZWMuYyBsaW51eC1iaXJkLmZfY291bnQvZnMvZXhl
Yy5jDQotLS0gbGludXgtMi4zLjctcHJlOS9mcy9leGVjLmMJV2VkIEp1biAg
MiAyMjozOTo0MyAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2V4
ZWMuYwlGcmkgSnVuIDE4IDIwOjI2OjM5IDE5OTkNCkBAIC01NjMsNyArNTYz
LDggQEANCiAJaWYgKChyZXR2YWwgPSBwZXJtaXNzaW9uKGlub2RlLCBNQVlf
RVhFQykpICE9IDApDQogCQlyZXR1cm4gcmV0dmFsOw0KIAkvKiBiZXR0ZXIg
bm90IGV4ZWN1dGUgZmlsZXMgd2hpY2ggYXJlIGJlaW5nIHdyaXR0ZW4gdG8g
Ki8NCi0JaWYgKGlub2RlLT5pX3dyaXRlY291bnQgPiAwKQ0KKwkvKiBXQVJO
SU5HLiBSZWFkIGNvbW1lbnRzIGluIGZzL25hbWVpLmM6OmdldF93cml0ZV9h
Y2Nlc3MoKSAqLw0KKwlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRl
Y291bnQpID4gMCkNCiAJCXJldHVybiAtRVRYVEJTWTsNCiANCiAJYnBybS0+
ZV91aWQgPSBjdXJyZW50LT5ldWlkOw0KZGlmZiAtdXJOIGxpbnV4LTIuMy43
LXByZTkvZnMvZmlsZV90YWJsZS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9m
aWxlX3RhYmxlLmMNCi0tLSBsaW51eC0yLjMuNy1wcmU5L2ZzL2ZpbGVfdGFi
bGUuYwlXZWQgSnVuICAyIDIyOjM5OjQzIDE5OTkNCisrKyBsaW51eC1iaXJk
LmZfY291bnQvZnMvZmlsZV90YWJsZS5jCUZyaSBKdW4gMTggMjA6MjY6Mzkg
MTk5OQ0KQEAgLTgwLDcgKzgwLDcgQEANCiAJCW5yX2ZyZWVfZmlsZXMtLTsN
CiAJbmV3X29uZToNCiAJCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsNCi0J
CWYtPmZfY291bnQgPSAxOw0KKwkJYXRvbWljX3NldCgmZi0+Zl9jb3VudCwx
KTsNCiAJCWYtPmZfdmVyc2lvbiA9ICsrZXZlbnQ7DQogCQlmLT5mX3VpZCA9
IGN1cnJlbnQtPmZzdWlkOw0KIAkJZi0+Zl9naWQgPSBjdXJyZW50LT5mc2dp
ZDsNCkBAIC0xMjAsNyArMTIwLDcgQEANCiB7DQogCW1lbXNldChmaWxwLCAw
LCBzaXplb2YoKmZpbHApKTsNCiAJZmlscC0+Zl9tb2RlICAgPSBtb2RlOw0K
LQlmaWxwLT5mX2NvdW50ICA9IDE7DQorCWF0b21pY19zZXQoJmZpbHAtPmZf
Y291bnQsIDEpOw0KIAlmaWxwLT5mX2RlbnRyeSA9IGRlbnRyeTsNCiAJZmls
cC0+Zl91aWQgICAgPSBjdXJyZW50LT5mc3VpZDsNCiAJZmlscC0+Zl9naWQg
ICAgPSBjdXJyZW50LT5mc2dpZDsNCkBAIC0xMzMsMjEgKzEzMywyMSBAQA0K
IA0KIHZvaWQgZnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSkNCiB7DQotCWludCBj
b3VudCA9IGZpbGUtPmZfY291bnQtMTsNCi0NCi0JaWYgKCFjb3VudCkgew0K
KwkvKiBXZSBzdGlsbCBuZWVkIGJpZyBsb2NrIGhlcmUgKi8NCisJaWYgKGF0
b21pY19kZWNfYW5kX3Rlc3QoJmZpbGUtPmZfY291bnQpKSB7DQorCQlhdG9t
aWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCiAJCWxvY2tzX3JlbW92ZV9mbG9j
ayhmaWxlKTsNCiAJCV9fZnB1dChmaWxlKTsNCi0JCWZpbGUtPmZfY291bnQg
PSAwOw0KKwkJYXRvbWljX3NldCgmZmlsZS0+Zl9jb3VudCwgMCk7DQogCQly
ZW1vdmVfZmlscChmaWxlKTsNCiAJCWluc2VydF9maWxlX2ZyZWUoZmlsZSk7
DQotCX0gZWxzZQ0KLQkJZmlsZS0+Zl9jb3VudCA9IGNvdW50Ow0KKwl9DQog
fQ0KIA0KIHZvaWQgcHV0X2ZpbHAoc3RydWN0IGZpbGUgKmZpbGUpDQogew0K
LQlpZigtLWZpbGUtPmZfY291bnQgPT0gMCkgew0KKwlpZihhdG9taWNfZGVj
X2FuZF90ZXN0KCZmaWxlLT5mX2NvdW50KSkgew0KKwkJLyogWFhYWFhYWFhY
WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICovDQogCQlyZW1v
dmVfZmlscChmaWxlKTsNCiAJCWluc2VydF9maWxlX2ZyZWUoZmlsZSk7DQog
CX0NCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2ZzL2hwZnMvbW1hcC5j
IGxpbnV4LWJpcmQuZl9jb3VudC9mcy9ocGZzL21tYXAuYw0KLS0tIGxpbnV4
LTIuMy43LXByZTkvZnMvaHBmcy9tbWFwLmMJRnJpIE1heSAxNCAyMzo1NDoy
NyAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2hwZnMvbW1hcC5j
CUZyaSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAgLTExOSw5ICsxMTksOSBA
QA0KIAkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7DQogCX0qLw0KIA0KLQl2
bWEtPnZtX2ZpbGUgPSBmaWxlOw0KIAkvKmlub2RlLT5pX2NvdW50Kys7Ki8N
Ci0JZmlsZS0+Zl9jb3VudCsrOw0KKwlhdG9taWNfaW5jKCZmaWxlLT5mX2Nv
dW50KTsNCisJdm1hLT52bV9maWxlID0gZmlsZTsNCiAJdm1hLT52bV9vcHMg
PSAmaHBmc19maWxlX21tYXA7DQogCS8qcHJpbnRrKCJlbmQgbW1hcFxuIik7
Ki8NCiAJcmV0dXJuIDA7DQpkaWZmIC11ck4gbGludXgtMi4zLjctcHJlOS9m
cy9pbm9kZS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9pbm9kZS5jDQotLS0g
bGludXgtMi4zLjctcHJlOS9mcy9pbm9kZS5jCUZyaSBKdW4gMTggMjA6MjY6
MDkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9pbm9kZS5jCUZy
aSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAgLTEzMCw2ICsxMzAsNyBAQA0K
IAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfaGFzaCk7DQogCUlOSVRfTElT
VF9IRUFEKCZpbm9kZS0+aV9kZW50cnkpOw0KIAlzZW1hX2luaXQoJmlub2Rl
LT5pX3NlbSwgMSk7DQorCXNwaW5fbG9ja19pbml0KCZpbm9kZS0+aV9zaGFy
ZWRfbG9jayk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9p
bm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KQEAgLTUyMSw3ICs1MjIsNyBA
QA0KIAlpbm9kZS0+aV9zb2NrID0gMDsNCiAJaW5vZGUtPmlfb3AgPSBOVUxM
Ow0KIAlpbm9kZS0+aV9ubGluayA9IDE7DQotCWlub2RlLT5pX3dyaXRlY291
bnQgPSAwOw0KKwlhdG9taWNfc2V0KCZpbm9kZS0+aV93cml0ZWNvdW50LCAw
KTsNCiAJaW5vZGUtPmlfc2l6ZSA9IDA7DQogCWlub2RlLT5pX2dlbmVyYXRp
b24gPSAwOw0KIAltZW1zZXQoJmlub2RlLT5pX2RxdW90LCAwLCBzaXplb2Yo
aW5vZGUtPmlfZHF1b3QpKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5
L2ZzL2xvY2tzLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL2xvY2tzLmMNCi0t
LSBsaW51eC0yLjMuNy1wcmU5L2ZzL2xvY2tzLmMJVGh1IE1heSAxMyAwNzo1
MToxMSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL2xvY2tzLmMJ
RnJpIEp1biAxOCAyMDoyNjozOSAxOTk5DQpAQCAtNDAwLDE2ICs0MDAsMjMg
QEANCiANCiAJLyogRG9uJ3QgYWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGZp
bGVzIHRoYXQgbWF5IGJlIG1lbW9yeSBtYXBwZWQNCiAJICogYW5kIHNoYXJl
ZC4NCisJICoNCisJICogU2luY2UgZG9fbW1hcCgpIGlzIHByb3RlY3RlZCBi
eSBiaWcgbG9jayB3ZSBhcmUgc2FmZSBoZXJlLCBidXQgYXMNCisJICogc29v
biBhcyBpdCB3aWxsIGdvIHdlIHdpbGwgaGF2ZSBhIGJ1bmNoIG9mIGludGVy
ZXN0aW5nIHN0dWZmIHRvDQorCSAqIGNhcmUgb2YuDQogCSAqLw0KIAlpZiAo
SVNfTUFORExPQ0soaW5vZGUpICYmDQogCSAgICAoaW5vZGUtPmlfbW9kZSAm
IChTX0lTR0lEIHwgU19JWEdSUCkpID09IFNfSVNHSUQgJiYNCiAJICAgIGlu
b2RlLT5pX21tYXApIHsNCi0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h
ID0gaW5vZGUtPmlfbW1hcDsNCisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq
dm1hOw0KIAkJZXJyb3IgPSAtRUFHQUlOOw0KKwkJc3Bpbl9sb2NrKCZpbm9k
ZS0+aV9zaGFyZWRfbG9jayk7DQorCQl2bWEgPSBpbm9kZS0+aV9tbWFwOw0K
IAkJZG8gew0KIAkJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUp
DQotCQkJCWdvdG8gb3V0X3B1dGY7DQorCQkJCWdvdG8gb3V0X3B1dGZfdW5s
b2NrOw0KIAkJfSB3aGlsZSAoKHZtYSA9IHZtYS0+dm1fbmV4dF9zaGFyZSkg
IT0gTlVMTCk7DQorCQlzcGluX3VubG9jaygmaW5vZGUtPmlfc2hhcmVkX2xv
Y2spOw0KIAl9DQogDQogCWVycm9yID0gLUVJTlZBTDsNCkBAIC00NjEsNiAr
NDY4LDkgQEANCiAJZnB1dChmaWxwKTsNCiBvdXQ6DQogCXJldHVybiBlcnJv
cjsNCitvdXRfcHV0Zl91bmxvY2s6DQorCXNwaW5fdW5sb2NrKCZpbm9kZS0+
aV9zaGFyZWRfbG9jayk7DQorCWdvdG8gb3V0X3B1dGY7DQogfQ0KIA0KIC8q
DQpkaWZmIC11ck4gbGludXgtMi4zLjctcHJlOS9mcy9uYW1laS5jIGxpbnV4
LWJpcmQuZl9jb3VudC9mcy9uYW1laS5jDQotLS0gbGludXgtMi4zLjctcHJl
OS9mcy9uYW1laS5jCU1vbiBNYXkgMTcgMDc6MzQ6MzEgMTk5OQ0KKysrIGxp
bnV4LWJpcmQuZl9jb3VudC9mcy9uYW1laS5jCUZyaSBKdW4gMTggMjA6MjY6
MzkgMTk5OQ0KQEAgLTE3MSwxOCArMTcxLDIyIEBADQogICogMDogbm8gd3Jp
dGVycywgbm8gVk1fREVOWVdSSVRFIG1hcHBpbmdzDQogICogPCAwOiAoLWlf
d3JpdGVjb3VudCkgdm1fYXJlYV9zdHJ1Y3RzIHdpdGggVk1fREVOWVdSSVRF
IHNldCBleGlzdA0KICAqID4gMDogKGlfd3JpdGVjb3VudCkgdXNlcnMgYXJl
IHdyaXRpbmcgdG8gdGhlIGZpbGUuDQorICoNCisgKiBXQVJOSU5HOiBhcyBz
b29uIGFzIHdlIHdpbGwgbW92ZSBnZXRfd3JpdGVfYWNjZXNzKCksIGRvX21t
YXAoKSBvcg0KKyAqIHByZXBhcmVfYmluZm10KCkgb3V0IG9mIHRoZSBiaWcg
bG9jayB3ZSB3aWxsIG5lZWQgYSBzcGlubG9jayBwcm90ZWN0aW5nDQorICog
dGhlIGNoZWNrcyBpbiBhbGwgMy4gRm9yIHRoZSB0aW1lIGJlaW5nIGl0IGlz
IG5vdCBuZWVkZWQuDQogICovDQogaW50IGdldF93cml0ZV9hY2Nlc3Moc3Ry
dWN0IGlub2RlICogaW5vZGUpDQogew0KLQlpZiAoaW5vZGUtPmlfd3JpdGVj
b3VudCA8IDApDQorCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVj
b3VudCkgPCAwKQ0KIAkJcmV0dXJuIC1FVFhUQlNZOw0KLQlpbm9kZS0+aV93
cml0ZWNvdW50Kys7DQorCWF0b21pY19pbmMoJmlub2RlLT5pX3dyaXRlY291
bnQpOw0KIAlyZXR1cm4gMDsNCiB9DQogDQogdm9pZCBwdXRfd3JpdGVfYWNj
ZXNzKHN0cnVjdCBpbm9kZSAqIGlub2RlKQ0KIHsNCi0JaW5vZGUtPmlfd3Jp
dGVjb3VudC0tOw0KKwlhdG9taWNfZGVjKCZpbm9kZS0+aV93cml0ZWNvdW50
KTsNCiB9DQogDQogLyoNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2Zz
L25mcy93cml0ZS5jIGxpbnV4LWJpcmQuZl9jb3VudC9mcy9uZnMvd3JpdGUu
Yw0KLS0tIGxpbnV4LTIuMy43LXByZTkvZnMvbmZzL3dyaXRlLmMJRnJpIEp1
biAxOCAyMDoyNjoxMCAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2Zz
L25mcy93cml0ZS5jCUZyaSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAgLTMw
Miw2ICszMDIsNyBAQA0KIAkJZ290byBvdXRfcmVxOw0KIA0KIAkvKiBQdXQg
dGhlIHRhc2sgb24gaW5vZGUncyB3cml0ZWJhY2sgcmVxdWVzdCBsaXN0LiAq
Lw0KKwlhdG9taWNfaW5jKCZmaWxlLT5mX2NvdW50KTsNCiAJd3JlcS0+d2Jf
ZmlsZSA9IGZpbGU7DQogCXdyZXEtPndiX3BpZCAgICA9IGN1cnJlbnQtPnBp
ZDsNCiAJd3JlcS0+d2JfcGFnZSAgID0gcGFnZTsNCkBAIC00NjQsNyArNDY1
LDYgQEANCiAJICogVGhlIElPIGNvbXBsZXRpb24gd2lsbCB0aGVuIGZyZWUg
dGhlIHBhZ2UgYW5kIHRoZSBkZW50cnkuDQogCSAqLw0KIAlnZXRfcGFnZShw
YWdlKTsNCi0JZmlsZS0+Zl9jb3VudCsrOw0KIA0KIAkvKiBTY2hlZHVsZSBy
ZXF1ZXN0ICovDQogCXN5bmNocm9ub3VzID0gc2NoZWR1bGVfd3JpdGVfcmVx
dWVzdChyZXEsIHN5bmNocm9ub3VzKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMu
Ny1wcmU5L2ZzL25mc2QvdmZzLmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL25m
c2QvdmZzLmMNCi0tLSBsaW51eC0yLjMuNy1wcmU5L2ZzL25mc2QvdmZzLmMJ
TW9uIE1heSAxNyAwNzozNDo0MyAxOTk5DQorKysgbGludXgtYmlyZC5mX2Nv
dW50L2ZzL25mc2QvdmZzLmMJRnJpIEp1biAxOCAyMDoyNjozOSAxOTk5DQpA
QCAtMzQyLDcgKzM0Miw3IEBADQogDQogCW1lbXNldChmaWxwLCAwLCBzaXpl
b2YoKmZpbHApKTsNCiAJZmlscC0+Zl9vcCAgICA9IGlub2RlLT5pX29wLT5k
ZWZhdWx0X2ZpbGVfb3BzOw0KLQlmaWxwLT5mX2NvdW50ID0gMTsNCisJYXRv
bWljX3NldCgmZmlscC0+Zl9jb3VudCwgMSk7DQogCWZpbHAtPmZfZmxhZ3Mg
PSB3ZmxhZz8gT19XUk9OTFkgOiBPX1JET05MWTsNCiAJZmlscC0+Zl9tb2Rl
ICA9IHdmbGFnPyBGTU9ERV9XUklURSA6IEZNT0RFX1JFQUQ7DQogCWZpbHAt
PmZfZGVudHJ5ID0gZGVudHJ5Ow0KQEAgLTM2MCw3ICszNjAsNyBAQA0KIAkJ
CS8qIEkgbmVhcmx5IGFkZGVkIHB1dF9maWxwKCkgY2FsbCBoZXJlLCBidXQg
dGhpcyBmaWxwDQogCQkJICogaXMgcmVhbGx5IG9uIGNhbGxlcnMgc3RhY2sg
ZnJhbWUuIC1EYXZlTQ0KIAkJCSAqLw0KLQkJCWZpbHAtPmZfY291bnQtLTsN
CisJCQlhdG9taWNfZGVjKCZmaWxwLT5mX2NvdW50KTsNCiAJCX0NCiAJfQ0K
IG91dF9uZnNlcnI6DQpAQCAtNTg1LDcgKzU4NSw3IEBADQogCQkgKiBuaWNl
IGFuZCBzaW1wbGUgc29sdXRpb24gKElNSE8pLCBhbmQgaXQgc2VlbXMgdG8N
CiAJCSAqIHdvcms6LSkNCiAJCSAqLw0KLQkJaWYgKEVYX1dHQVRIRVIoZXhw
KSAmJiAoaW5vZGUtPmlfd3JpdGVjb3VudCA+IDENCisJCWlmIChFWF9XR0FU
SEVSKGV4cCkgJiYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50
KSA+IDENCiAJCSB8fCAobGFzdF9pbm8gPT0gaW5vZGUtPmlfaW5vICYmIGxh
c3RfZGV2ID09IGlub2RlLT5pX2RldikpKSB7DQogI2lmIDANCiAJCQlpbnRl
cnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJmlub2RlLT5pX3dhaXQsIDEw
ICogSFogLyAxMDAwKTsNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2Zz
L29wZW4uYyBsaW51eC1iaXJkLmZfY291bnQvZnMvb3Blbi5jDQotLS0gbGlu
dXgtMi4zLjctcHJlOS9mcy9vcGVuLmMJU2F0IE1heSAyOSAxODowNDozMyAx
OTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2ZzL29wZW4uYwlGcmkgSnVu
IDE4IDIwOjI2OjM5IDE5OTkNCkBAIC03OTAsNyArNzkwLDcgQEANCiAJaW50
IHJldHZhbDsNCiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9k
ZW50cnk7DQogDQotCWlmIChmaWxwLT5mX2NvdW50ID09IDApIHsNCisJaWYg
KGF0b21pY19yZWFkKCZmaWxwLT5mX2NvdW50KSA9PSAwKSB7DQogCQlwcmlu
dGsoIlZGUzogQ2xvc2U6IGZpbGUgY291bnQgaXMgMFxuIik7DQogCQlyZXR1
cm4gMDsNCiAJfQ0KZGlmZiAtdXJOIGxpbnV4LTIuMy43LXByZTkvZnMvc2Vs
ZWN0LmMgbGludXgtYmlyZC5mX2NvdW50L2ZzL3NlbGVjdC5jDQotLS0gbGlu
dXgtMi4zLjctcHJlOS9mcy9zZWxlY3QuYwlTYXQgTWF5IDI5IDE4OjA0OjMz
IDE5OTkNCisrKyBsaW51eC1iaXJkLmZfY291bnQvZnMvc2VsZWN0LmMJRnJp
IEp1biAxOCAyMDoyNjozOSAxOTk5DQpAQCAtNjUsOCArNjUsOCBAQA0KIAkJ
CXN0cnVjdCBwb2xsX3RhYmxlX2VudHJ5ICogZW50cnk7DQogb2tfdGFibGU6
DQogCQkgCWVudHJ5ID0gcC0+ZW50cnkgKyBwLT5ucjsNCisJCSAJYXRvbWlj
X2luYygmZmlscC0+Zl9jb3VudCk7DQogCQkgCWVudHJ5LT5maWxwID0gZmls
cDsNCi0JCSAJZmlscC0+Zl9jb3VudCsrOw0KIAkJCWVudHJ5LT53YWl0X2Fk
ZHJlc3MgPSB3YWl0X2FkZHJlc3M7DQogCQkJaW5pdF93YWl0cXVldWVfZW50
cnkoJmVudHJ5LT53YWl0LCBjdXJyZW50KTsNCiAJCQlhZGRfd2FpdF9xdWV1
ZSh3YWl0X2FkZHJlc3MsJmVudHJ5LT53YWl0KTsNCmRpZmYgLXVyTiBsaW51
eC0yLjMuNy1wcmU5L2luY2x1ZGUvbGludXgvZmlsZS5oIGxpbnV4LWJpcmQu
Zl9jb3VudC9pbmNsdWRlL2xpbnV4L2ZpbGUuaA0KLS0tIGxpbnV4LTIuMy43
LXByZTkvaW5jbHVkZS9saW51eC9maWxlLmgJV2VkIEp1biAgOSAwODowNDow
OSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUvbGludXgv
ZmlsZS5oCUZyaSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAgLTMyLDEyICsz
MiwxMyBAQA0KIAlyZXR1cm4gZmlsZTsNCiB9DQogDQorLyogU3RpbGwgbmVl
ZHMgYSBwcm90ZWN0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBvZiBjdXJy
ZW50LT5maWxlcy0+ZmRbXSAqLw0KIGV4dGVybiBpbmxpbmUgc3RydWN0IGZp
bGUgKiBmZ2V0KHVuc2lnbmVkIGludCBmZCkNCiB7DQogCXN0cnVjdCBmaWxl
ICogZmlsZSA9IGZjaGVjayhmZCk7DQogDQogCWlmIChmaWxlKQ0KLQkJZmls
ZS0+Zl9jb3VudCsrOw0KKwkJYXRvbWljX2luYygmZmlsZS0+Zl9jb3VudCk7
DQogCXJldHVybiBmaWxlOw0KIH0NCiANCmRpZmYgLXVyTiBsaW51eC0yLjMu
Ny1wcmU5L2luY2x1ZGUvbGludXgvZnMuaCBsaW51eC1iaXJkLmZfY291bnQv
aW5jbHVkZS9saW51eC9mcy5oDQotLS0gbGludXgtMi4zLjctcHJlOS9pbmNs
dWRlL2xpbnV4L2ZzLmgJRnJpIEp1biAxOCAyMDoyNjoxMSAxOTk5DQorKysg
bGludXgtYmlyZC5mX2NvdW50L2luY2x1ZGUvbGludXgvZnMuaAlGcmkgSnVu
IDE4IDIwOjI2OjM5IDE5OTkNCkBAIC0zNDUsNiArMzQ1LDcgQEANCiAJc3Ry
dWN0IGZpbGVfbG9jawkqaV9mbG9jazsNCiAJc3RydWN0IHZtX2FyZWFfc3Ry
dWN0CSppX21tYXA7DQogCXN0cnVjdCBwYWdlCQkqaV9wYWdlczsNCisJc3Bp
bmxvY2tfdAkJaV9zaGFyZWRfbG9jazsNCiAJc3RydWN0IGRxdW90CQkqaV9k
cXVvdFtNQVhRVU9UQVNdOw0KIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpp
X3BpcGU7DQogDQpAQCAtMzUzLDcgKzM1NCw3IEBADQogCXVuc2lnbmVkIGlu
dAkJaV9mbGFnczsNCiAJdW5zaWduZWQgY2hhcgkJaV9zb2NrOw0KIA0KLQlp
bnQJCQlpX3dyaXRlY291bnQ7DQorCWF0b21pY190CQlpX3dyaXRlY291bnQ7
DQogCXVuc2lnbmVkIGludAkJaV9hdHRyX2ZsYWdzOw0KIAlfX3UzMgkJCWlf
Z2VuZXJhdGlvbjsNCiAJdW5pb24gew0KQEAgLTQwNCw3ICs0MDUsOCBAQA0K
IAlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOw0KIAltb2RlX3QJCQlm
X21vZGU7DQogCWxvZmZfdAkJCWZfcG9zOw0KLQl1bnNpZ25lZCBpbnQgCQlm
X2NvdW50LCBmX2ZsYWdzOw0KKwlhdG9taWNfdCAJCWZfY291bnQ7DQorCXVu
c2lnbmVkIGludAkJZl9mbGFnczsNCiAJdW5zaWduZWQgbG9uZyAJCWZfcmVh
ZGEsIGZfcmFtYXgsIGZfcmFlbmQsIGZfcmFsZW4sIGZfcmF3aW47DQogCXN0
cnVjdCBmb3duX3N0cnVjdAlmX293bmVyOw0KIAl1bnNpZ25lZCBpbnQJCWZf
dWlkLCBmX2dpZDsNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L2lwYy9z
aG0uYyBsaW51eC1iaXJkLmZfY291bnQvaXBjL3NobS5jDQotLS0gbGludXgt
Mi4zLjctcHJlOS9pcGMvc2htLmMJRnJpIEp1biAxOCAyMDoyNjoxMiAxOTk5
DQorKysgbGludXgtYmlyZC5mX2NvdW50L2lwYy9zaG0uYwlGcmkgSnVuIDE4
IDIwOjI2OjM5IDE5OTkNCkBAIC01NDcsNiArNTQ3LDcgQEANCiAJdW5zaWdu
ZWQgaW50IGlkOw0KIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7DQogDQor
CWxvY2tfa2VybmVsKCk7DQogCWlkID0gU1dQX09GRlNFVChzaG1kLT52bV9w
dGUpICYgU0hNX0lEX01BU0s7DQogCXNocCA9IHNobV9zZWdzW2lkXTsNCiAJ
aWYgKHNocCA9PSBJUENfVU5VU0VEKSB7DQpAQCAtNTU3LDYgKzU1OCw3IEBA
DQogCXNocC0+dS5zaG1fbmF0dGNoKys7DQogCXNocC0+dS5zaG1fYXRpbWUg
PSBDVVJSRU5UX1RJTUU7DQogCXNocC0+dS5zaG1fbHBpZCA9IGN1cnJlbnQt
PnBpZDsNCisJdW5sb2NrX2tlcm5lbCgpOw0KIH0NCiANCiAvKg0KQEAgLTU3
MCw2ICs1NzIsNyBAQA0KIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7DQog
CWludCBpZDsNCiANCisJbG9ja19rZXJuZWwoKTsNCiAJLyogcmVtb3ZlIGZy
b20gdGhlIGxpc3Qgb2YgYXR0YWNoZXMgb2YgdGhlIHNobSBzZWdtZW50ICov
DQogCWlkID0gU1dQX09GRlNFVChzaG1kLT52bV9wdGUpICYgU0hNX0lEX01B
U0s7DQogCXNocCA9IHNobV9zZWdzW2lkXTsNCkBAIC01NzgsNiArNTgxLDcg
QEANCiAJc2hwLT51LnNobV9kdGltZSA9IENVUlJFTlRfVElNRTsNCiAJaWYg
KC0tc2hwLT51LnNobV9uYXR0Y2ggPD0gMCAmJiBzaHAtPnUuc2htX3Blcm0u
bW9kZSAmIFNITV9ERVNUKQ0KIAkJa2lsbHNlZyAoaWQpOw0KKwl1bmxvY2tf
a2VybmVsKCk7DQogfQ0KIA0KIC8qDQpkaWZmIC11ck4gbGludXgtMi4zLjct
cHJlOS9rZXJuZWwvYWNjdC5jIGxpbnV4LWJpcmQuZl9jb3VudC9rZXJuZWwv
YWNjdC5jDQotLS0gbGludXgtMi4zLjctcHJlOS9rZXJuZWwvYWNjdC5jCUZy
aSBKdW4gMTggMjA6MjY6MTIgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3Vu
dC9rZXJuZWwvYWNjdC5jCUZyaSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAg
LTI3Niw3ICsyNzYsNyBAQA0KIAkgKi8NCiAJaWYgKCFmaWxlKQ0KIAkJcmV0
dXJuIDA7DQotCWZpbGUtPmZfY291bnQrKzsNCisJYXRvbWljX2luYygmZmls
ZS0+Zl9jb3VudCk7DQogCWlmICghY2hlY2tfZnJlZV9zcGFjZShmaWxlKSkg
ew0KIAkJZnB1dChmaWxlKTsNCiAJCXJldHVybiAwOw0KZGlmZiAtdXJOIGxp
bnV4LTIuMy43LXByZTkva2VybmVsL2ZvcmsuYyBsaW51eC1iaXJkLmZfY291
bnQva2VybmVsL2ZvcmsuYw0KLS0tIGxpbnV4LTIuMy43LXByZTkva2VybmVs
L2ZvcmsuYwlTYXQgTWF5IDI5IDE4OjA1OjQzIDE5OTkNCisrKyBsaW51eC1i
aXJkLmZfY291bnQva2VybmVsL2ZvcmsuYwlGcmkgSnVuIDE4IDIwOjI2OjM5
IDE5OTkNCkBAIC0yNDMsMjIgKzI0MywyOCBAQA0KIAkJaWYgKCF0bXApDQog
CQkJZ290byBmYWlsX25vbWVtOw0KIAkJKnRtcCA9ICptcG50Ow0KKwkJLyoN
CisJCSAqIEFjY3VyYXRlIGhlcmUuIFdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0
IG5vdGhpbmcgd2lsbA0KKwkJICogYWx0ZXIgbXBudC0+dm1fZmlsZSBiZWZv
cmUgd2UgaW5jcmVtZW50IGZfY291bnQuDQorCQkgKi8NCiAJCXRtcC0+dm1f
ZmxhZ3MgJj0gflZNX0xPQ0tFRDsNCiAJCXRtcC0+dm1fbW0gPSBtbTsNCiAJ
CW1tLT5tYXBfY291bnQrKzsNCiAJCXRtcC0+dm1fbmV4dCA9IE5VTEw7DQog
CQlmaWxlID0gdG1wLT52bV9maWxlOw0KIAkJaWYgKGZpbGUpIHsNCi0JCQlm
aWxlLT5mX2NvdW50Kys7DQorCQkJYXRvbWljX2luYygmZmlsZS0+Zl9jb3Vu
dCk7DQogCQkJaWYgKHRtcC0+dm1fZmxhZ3MgJiBWTV9ERU5ZV1JJVEUpDQot
CQkJCWZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQtLTsN
CisJCQkJYXRvbWljX2RlYygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlf
d3JpdGVjb3VudCk7DQogICAgICAgDQorCQkJc3Bpbl9sb2NrKCZmaWxlLT5m
X2RlbnRyeS0+ZF9pbm9kZS0+aV9zaGFyZWRfbG9jayk7DQogCQkJLyogaW5z
ZXJ0IHRtcCBpbnRvIHRoZSBzaGFyZSBsaXN0LCBqdXN0IGFmdGVyIG1wbnQg
Ki8NCiAJCQlpZigodG1wLT52bV9uZXh0X3NoYXJlID0gbXBudC0+dm1fbmV4
dF9zaGFyZSkgIT0gTlVMTCkNCiAJCQkJbXBudC0+dm1fbmV4dF9zaGFyZS0+
dm1fcHByZXZfc2hhcmUgPQ0KIAkJCQkJJnRtcC0+dm1fbmV4dF9zaGFyZTsN
CiAJCQltcG50LT52bV9uZXh0X3NoYXJlID0gdG1wOw0KIAkJCXRtcC0+dm1f
cHByZXZfc2hhcmUgPSAmbXBudC0+dm1fbmV4dF9zaGFyZTsNCisJCQlzcGlu
X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2hhcmVkX2xv
Y2spOw0KIAkJfQ0KIA0KIAkJLyogQ29weSB0aGUgcGFnZXMsIGJ1dCBkZWZl
ciBjaGVja2luZyBmb3IgZXJyb3JzICovDQpAQCAtNDgzLDkgKzQ4OSw5IEBA
DQogCW9sZF9mZHMgPSBvbGRmLT5mZDsNCiAJZm9yICg7IGkgIT0gMDsgaS0t
KSB7DQogCQlzdHJ1Y3QgZmlsZSAqZiA9ICpvbGRfZmRzKys7DQotCQkqbmV3
X2ZkcyA9IGY7DQogCQlpZiAoZikNCi0JCQlmLT5mX2NvdW50Kys7DQorCQkJ
YXRvbWljX2luYygmZi0+Zl9jb3VudCk7DQorCQkqbmV3X2ZkcyA9IGY7DQog
CQluZXdfZmRzKys7DQogCX0NCiAJLyogVGhpcyBpcyBsb25nIHdvcmQgYWxp
Z25lZCB0aHVzIGNvdWxkIHVzZSBhIG9wdGltaXplZCB2ZXJzaW9uICovIA0K
ZGlmZiAtdXJOIGxpbnV4LTIuMy43LXByZTkvbW0vZmlsZW1hcC5jIGxpbnV4
LWJpcmQuZl9jb3VudC9tbS9maWxlbWFwLmMNCi0tLSBsaW51eC0yLjMuNy1w
cmU5L21tL2ZpbGVtYXAuYwlGcmkgSnVuIDE4IDIwOjI2OjEyIDE5OTkNCisr
KyBsaW51eC1iaXJkLmZfY291bnQvbW0vZmlsZW1hcC5jCUZyaSBKdW4gMTgg
MjA6MjY6MzkgMTk5OQ0KQEAgLTE0ODIsNyArMTQ4Miw3IEBADQogCSAqIElm
IGEgdGFzayB0ZXJtaW5hdGVzIHdoaWxlIHdlJ3JlIHN3YXBwaW5nIHRoZSBw
YWdlLCB0aGUgdm1hIGFuZA0KIAkgKiBhbmQgZmlsZSBjb3VsZCBiZSByZWxl
YXNlZCAuLi4gaW5jcmVtZW50IHRoZSBjb3VudCB0byBiZSBzYWZlLg0KIAkg
Ki8NCi0JZmlsZS0+Zl9jb3VudCsrOw0KKwlhdG9taWNfaW5jKCZmaWxlLT5m
X2NvdW50KTsNCiANCiAJLyogDQogCSAqIElmIHRoaXMgaXMgYSBzd2FwcGlu
ZyBvcGVyYXRpb24gcmF0aGVyIHRoYW4gbXN5bmMoKSwgdGhlbg0KZGlmZiAt
dXJOIGxpbnV4LTIuMy43LXByZTkvbW0vbWVtb3J5LmMgbGludXgtYmlyZC5m
X2NvdW50L21tL21lbW9yeS5jDQotLS0gbGludXgtMi4zLjctcHJlOS9tbS9t
ZW1vcnkuYwlGcmkgSnVuIDE4IDIwOjI2OjEyIDE5OTkNCisrKyBsaW51eC1i
aXJkLmZfY291bnQvbW0vbWVtb3J5LmMJRnJpIEp1biAxOCAyMDoyNjozOSAx
OTk5DQpAQCAtNzIzLDggKzcyMyw5IEBADQogCXN0cnVjdCB2bV9hcmVhX3N0
cnVjdCAqIG1wbnQ7DQogDQogCXRydW5jYXRlX2lub2RlX3BhZ2VzKGlub2Rl
LCBvZmZzZXQpOw0KKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2tfc2hhcmVk
KTsNCiAJaWYgKCFpbm9kZS0+aV9tbWFwKQ0KLQkJcmV0dXJuOw0KKwkJZ290
byBvdXRfdW5sb2NrOw0KIAltcG50ID0gaW5vZGUtPmlfbW1hcDsNCiAJZG8g
ew0KIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBtcG50LT52bV9tbTsNCkBA
IC03NTUsNiArNzU2LDggQEANCiAJCXphcF9wYWdlX3JhbmdlKG1tLCBzdGFy
dCwgbGVuKTsNCiAJCWZsdXNoX3RsYl9yYW5nZShtbSwgc3RhcnQsIGVuZCk7
DQogCX0gd2hpbGUgKChtcG50ID0gbXBudC0+dm1fbmV4dF9zaGFyZSkgIT0g
TlVMTCk7DQorb3V0X3VubG9jazoNCisJc3Bpbl91bmxvY2soJmlub2RlLT5p
X2xvY2tfc2hhcmVkKTsNCiB9DQogDQogDQpkaWZmIC11ck4gbGludXgtMi4z
LjctcHJlOS9tbS9tbG9jay5jIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tbG9j
ay5jDQotLS0gbGludXgtMi4zLjctcHJlOS9tbS9tbG9jay5jCU1vbiBNYXkg
MTcgMDc6MzU6MzkgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9t
bG9jay5jCUZyaSBKdW4gMTggMjA6MjY6MzkgMTk5OQ0KQEAgLTMxLDcgKzMx
LDcgQEANCiAJdm1hLT52bV9vZmZzZXQgKz0gdm1hLT52bV9zdGFydCAtIG4t
PnZtX3N0YXJ0Ow0KIAluLT52bV9mbGFncyA9IG5ld2ZsYWdzOw0KIAlpZiAo
bi0+dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZfY291bnQrKzsNCisJCWF0
b21pY19pbmMoJm4tPnZtX2ZpbGUtPmZfY291bnQpOw0KIAlpZiAobi0+dm1f
b3BzICYmIG4tPnZtX29wcy0+b3BlbikNCiAJCW4tPnZtX29wcy0+b3Blbihu
KTsNCiAJaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgbik7DQpAQCAt
NTIsNyArNTIsNyBAQA0KIAluLT52bV9vZmZzZXQgKz0gbi0+dm1fc3RhcnQg
LSB2bWEtPnZtX3N0YXJ0Ow0KIAluLT52bV9mbGFncyA9IG5ld2ZsYWdzOw0K
IAlpZiAobi0+dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZfY291bnQrKzsN
CisJCWF0b21pY19pbmMoJm4tPnZtX2ZpbGUtPmZfY291bnQpOw0KIAlpZiAo
bi0+dm1fb3BzICYmIG4tPnZtX29wcy0+b3BlbikNCiAJCW4tPnZtX29wcy0+
b3BlbihuKTsNCiAJaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgbik7
DQpAQCAtODIsNyArODIsNyBAQA0KIAlyaWdodC0+dm1fb2Zmc2V0ICs9IHJp
Z2h0LT52bV9zdGFydCAtIGxlZnQtPnZtX3N0YXJ0Ow0KIAl2bWEtPnZtX2Zs
YWdzID0gbmV3ZmxhZ3M7DQogCWlmICh2bWEtPnZtX2ZpbGUpDQotCQl2bWEt
PnZtX2ZpbGUtPmZfY291bnQgKz0gMjsNCisJCWF0b21pY19hZGQoJnZtYS0+
dm1fZmlsZS0+Zl9jb3VudCwgMik7DQogDQogCWlmICh2bWEtPnZtX29wcyAm
JiB2bWEtPnZtX29wcy0+b3Blbikgew0KIAkJdm1hLT52bV9vcHMtPm9wZW4o
bGVmdCk7DQpAQCAtMTc5LDcgKzE3OSw2IEBADQogCWludCBlcnJvciA9IC1F
Tk9NRU07DQogDQogCWRvd24oJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQot
CWxvY2tfa2VybmVsKCk7DQogCWxlbiA9IChsZW4gKyAoc3RhcnQgJiB+UEFH
RV9NQVNLKSArIH5QQUdFX01BU0spICYgUEFHRV9NQVNLOw0KIAlzdGFydCAm
PSBQQUdFX01BU0s7DQogDQpAQCAtMjAwLDcgKzE5OSw2IEBADQogDQogCWVy
cm9yID0gZG9fbWxvY2soc3RhcnQsIGxlbiwgMSk7DQogb3V0Og0KLQl1bmxv
Y2tfa2VybmVsKCk7DQogCXVwKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0K
IAlyZXR1cm4gZXJyb3I7DQogfQ0KQEAgLTIxMCwxMSArMjA4LDkgQEANCiAJ
aW50IHJldDsNCiANCiAJZG93bigmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsN
Ci0JbG9ja19rZXJuZWwoKTsNCiAJbGVuID0gKGxlbiArIChzdGFydCAmIH5Q
QUdFX01BU0spICsgflBBR0VfTUFTSykgJiBQQUdFX01BU0s7DQogCXN0YXJ0
ICY9IFBBR0VfTUFTSzsNCiAJcmV0ID0gZG9fbWxvY2soc3RhcnQsIGxlbiwg
MCk7DQotCXVubG9ja19rZXJuZWwoKTsNCiAJdXAoJmN1cnJlbnQtPm1tLT5t
bWFwX3NlbSk7DQogCXJldHVybiByZXQ7DQogfQ0KQEAgLTI1NCw3ICsyNTAs
NiBAQA0KIAlpbnQgcmV0ID0gLUVJTlZBTDsNCiANCiAJZG93bigmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsNCi0JbG9ja19rZXJuZWwoKTsNCiAJaWYgKCFm
bGFncyB8fCAoZmxhZ3MgJiB+KE1DTF9DVVJSRU5UIHwgTUNMX0ZVVFVSRSkp
KQ0KIAkJZ290byBvdXQ7DQogDQpAQCAtMjcyLDcgKzI2Nyw2IEBADQogDQog
CXJldCA9IGRvX21sb2NrYWxsKGZsYWdzKTsNCiBvdXQ6DQotCXVubG9ja19r
ZXJuZWwoKTsNCiAJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7DQogCXJl
dHVybiByZXQ7DQogfQ0KQEAgLTI4Miw5ICsyNzYsNyBAQA0KIAlpbnQgcmV0
Ow0KIA0KIAlkb3duKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOw0KLQlsb2Nr
X2tlcm5lbCgpOw0KIAlyZXQgPSBkb19tbG9ja2FsbCgwKTsNCi0JdW5sb2Nr
X2tlcm5lbCgpOw0KIAl1cCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsNCiAJ
cmV0dXJuIHJldDsNCiB9DQpkaWZmIC11ck4gbGludXgtMi4zLjctcHJlOS9t
bS9tbWFwLmMgbGludXgtYmlyZC5mX2NvdW50L21tL21tYXAuYw0KLS0tIGxp
bnV4LTIuMy43LXByZTkvbW0vbW1hcC5jCUZyaSBKdW4gMTggMjA6MjY6MTIg
MTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tbWFwLmMJRnJpIEp1
biAxOCAyMDoyNjo0MCAxOTk5DQpAQCAtNzcsMTAgKzc3LDEyIEBADQogDQog
CWlmIChmaWxlKSB7DQogCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0RFTllX
UklURSkNCi0JCQlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNv
dW50Kys7DQorCQkJYXRvbWljX2luYygmZmlsZS0+Zl9kZW50cnktPmRfaW5v
ZGUtPmlfd3JpdGVjb3VudCk7DQorCQlzcGluX2xvY2soZmlsZS0+Zl9kZW50
cnktPmRfaW5vZGUtPmlfc2hhcmVkX2xvY2spOw0KIAkJaWYodm1hLT52bV9u
ZXh0X3NoYXJlKQ0KIAkJCXZtYS0+dm1fbmV4dF9zaGFyZS0+dm1fcHByZXZf
c2hhcmUgPSB2bWEtPnZtX3BwcmV2X3NoYXJlOw0KIAkJKnZtYS0+dm1fcHBy
ZXZfc2hhcmUgPSB2bWEtPnZtX25leHRfc2hhcmU7DQorCQlzcGluX3VubG9j
ayhmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zaGFyZWRfbG9jayk7DQog
CX0NCiB9DQogDQpAQCAtMjk0LDcgKzI5NiwxMiBAQA0KIAlpZiAoZmlsZSkg
ew0KIAkJaW50IGNvcnJlY3Rfd2NvdW50ID0gMDsNCiAJCWlmICh2bWEtPnZt
X2ZsYWdzICYgVk1fREVOWVdSSVRFKSB7DQotCQkJaWYgKGZpbGUtPmZfZGVu
dHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQgPiAwKSB7DQorCQkJLyoNCisJ
CQkgKiBXQVJOSU5HOiB3aGVuIHdlIHdpbGwgdGFrZSBpdCBvdXQgb2YgdGhl
IGJpZyBsb2NrDQorCQkJICogd2Ugd2lsbCBuZWVkIGEgc3BpbmxvY2sgaGVy
ZS4gU2VlIGNvbW1lbnRzIGluDQorCQkJICogZnMvbmFtZWkuYzo6Z2V0X3dy
aXRlX2FjY2VzcygpDQorCQkJICovDQorCQkJaWYgKGF0b21pY19yZWFkKCZm
aWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KSA+IDApIHsN
CiAJCQkJZXJyb3IgPSAtRVRYVEJTWTsNCiAJCQkJZ290byBmcmVlX3ZtYTsN
CiAJCQl9DQpAQCAtMzAzLDE3ICszMTAsMTcgQEANCiAJCQkgKiBtaWdodCku
IEluIGFueSBjYXNlLCB0aGlzIHRha2VzIGNhcmUgb2YgYW55DQogCQkJICog
cmFjZSB0aGF0IHRoaXMgbWlnaHQgY2F1c2UuDQogCQkJICovDQotCQkJZmls
ZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudC0tOw0KKwkJCWF0
b21pY19kZWMoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291
bnQpOw0KIAkJCWNvcnJlY3Rfd2NvdW50ID0gMTsNCiAJCX0NCiAJCWVycm9y
ID0gZmlsZS0+Zl9vcC0+bW1hcChmaWxlLCB2bWEpOw0KIAkJLyogRml4IHVw
IHRoZSBjb3VudCBpZiBuZWNlc3NhcnksIHRoZW4gY2hlY2sgZm9yIGFuIGVy
cm9yICovDQogCQlpZiAoY29ycmVjdF93Y291bnQpDQotCQkJZmlsZS0+Zl9k
ZW50cnktPmRfaW5vZGUtPmlfd3JpdGVjb3VudCsrOw0KKwkJCWF0b21pY19p
bmMoJmZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3dyaXRlY291bnQpOw0K
IAkJaWYgKGVycm9yKQ0KIAkJCWdvdG8gdW5tYXBfYW5kX2ZyZWVfdm1hOw0K
KwkJYXRvbWljX2luYygmZmlsZS0+Zl9jb3VudCk7DQogCQl2bWEtPnZtX2Zp
bGUgPSBmaWxlOw0KLQkJZmlsZS0+Zl9jb3VudCsrOw0KIAl9DQogDQogCS8q
DQpAQCAtNTQ3LDcgKzU1NCw3IEBADQogCQltcG50LT52bV9maWxlID0gYXJl
YS0+dm1fZmlsZTsNCiAJCW1wbnQtPnZtX3B0ZSA9IGFyZWEtPnZtX3B0ZTsN
CiAJCWlmIChtcG50LT52bV9maWxlKQ0KLQkJCW1wbnQtPnZtX2ZpbGUtPmZf
Y291bnQrKzsNCisJCQlhdG9taWNfaW5jKCZtcG50LT52bV9maWxlLT5mX2Nv
dW50KTsNCiAJCWlmIChtcG50LT52bV9vcHMgJiYgbXBudC0+dm1fb3BzLT5v
cGVuKQ0KIAkJCW1wbnQtPnZtX29wcy0+b3BlbihtcG50KTsNCiAJCWFyZWEt
PnZtX2VuZCA9IGFkZHI7CS8qIFRydW5jYXRlIGFyZWEgKi8NCkBAIC04NzUs
MTMgKzg4MiwxNCBAQA0KIAlpZiAoZmlsZSkgew0KIAkJc3RydWN0IGlub2Rl
ICogaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsNCiAJCWlmICh2
bXAtPnZtX2ZsYWdzICYgVk1fREVOWVdSSVRFKQ0KLQkJCWlub2RlLT5pX3dy
aXRlY291bnQtLTsNCi0gICAgICANCisJCQlhdG9taWNfZGVjKCZpbm9kZS0+
aV93cml0ZWNvdW50KTsNCisgICAgICAJCXNwaW5fbG9jaygmaW5vZGUtPmlf
c2hhcmVkX2xvY2spOw0KIAkJLyogaW5zZXJ0IHZtcCBpbnRvIGlub2RlJ3Mg
c2hhcmUgbGlzdCAqLw0KIAkJaWYoKHZtcC0+dm1fbmV4dF9zaGFyZSA9IGlu
b2RlLT5pX21tYXApICE9IE5VTEwpDQogCQkJaW5vZGUtPmlfbW1hcC0+dm1f
cHByZXZfc2hhcmUgPSAmdm1wLT52bV9uZXh0X3NoYXJlOw0KIAkJaW5vZGUt
PmlfbW1hcCA9IHZtcDsNCiAJCXZtcC0+dm1fcHByZXZfc2hhcmUgPSAmaW5v
ZGUtPmlfbW1hcDsNCisgICAgICAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9z
aGFyZWRfbG9jayk7DQogCX0NCiB9DQogDQpAQCAtOTQ4LDcgKzk1Niw3IEBA
DQogCQltbS0+bWFwX2NvdW50LS07DQogCQlyZW1vdmVfc2hhcmVkX3ZtX3N0
cnVjdChtcG50KTsNCiAJCWlmIChtcG50LT52bV9maWxlKQ0KLQkJCWZwdXQo
bXBudC0+dm1fZmlsZSk7DQorCQkJZnB1dChtcG50LT52bV9maWxlKTsJLyog
VGhpcyBvbmUgaXMgc2FmZSAqLw0KIAkJa21lbV9jYWNoZV9mcmVlKHZtX2Fy
ZWFfY2FjaGVwLCBtcG50KTsNCiAJCW1wbnQgPSBwcmV2Ow0KIAl9DQpkaWZm
IC11ck4gbGludXgtMi4zLjctcHJlOS9tbS9tcHJvdGVjdC5jIGxpbnV4LWJp
cmQuZl9jb3VudC9tbS9tcHJvdGVjdC5jDQotLS0gbGludXgtMi4zLjctcHJl
OS9tbS9tcHJvdGVjdC5jCVRodSBNYXkgMTMgMDc6MDM6MzAgMTk5OQ0KKysr
IGxpbnV4LWJpcmQuZl9jb3VudC9tbS9tcHJvdGVjdC5jCUZyaSBKdW4gMTgg
MjA6MjY6NDAgMTk5OQ0KQEAgLTEwMyw3ICsxMDMsNyBAQA0KIAluLT52bV9m
bGFncyA9IG5ld2ZsYWdzOw0KIAluLT52bV9wYWdlX3Byb3QgPSBwcm90Ow0K
IAlpZiAobi0+dm1fZmlsZSkNCi0JCW4tPnZtX2ZpbGUtPmZfY291bnQrKzsN
CisJCWF0b21pY19pbmMoJm4tPnZtX2ZpbGUtPmZfY291bnQpOw0KIAlpZiAo
bi0+dm1fb3BzICYmIG4tPnZtX29wcy0+b3BlbikNCiAJCW4tPnZtX29wcy0+
b3BlbihuKTsNCiAJaW5zZXJ0X3ZtX3N0cnVjdChjdXJyZW50LT5tbSwgbik7
DQpAQCAtMTI2LDcgKzEyNiw3IEBADQogCW4tPnZtX2ZsYWdzID0gbmV3Zmxh
Z3M7DQogCW4tPnZtX3BhZ2VfcHJvdCA9IHByb3Q7DQogCWlmIChuLT52bV9m
aWxlKQ0KLQkJbi0+dm1fZmlsZS0+Zl9jb3VudCsrOw0KKwkJYXRvbWljX2lu
Yygmbi0+dm1fZmlsZS0+Zl9jb3VudCk7DQogCWlmIChuLT52bV9vcHMgJiYg
bi0+dm1fb3BzLT5vcGVuKQ0KIAkJbi0+dm1fb3BzLT5vcGVuKG4pOw0KIAlp
bnNlcnRfdm1fc3RydWN0KGN1cnJlbnQtPm1tLCBuKTsNCkBAIC0xNTgsNyAr
MTU4LDcgQEANCiAJdm1hLT52bV9mbGFncyA9IG5ld2ZsYWdzOw0KIAl2bWEt
PnZtX3BhZ2VfcHJvdCA9IHByb3Q7DQogCWlmICh2bWEtPnZtX2ZpbGUpDQot
CQl2bWEtPnZtX2ZpbGUtPmZfY291bnQgKz0gMjsNCisJCWF0b21pY19hZGQo
JnZtYS0+dm1fZmlsZS0+Zl9jb3VudCk7DQogCWlmICh2bWEtPnZtX29wcyAm
JiB2bWEtPnZtX29wcy0+b3Blbikgew0KIAkJdm1hLT52bV9vcHMtPm9wZW4o
bGVmdCk7DQogCQl2bWEtPnZtX29wcy0+b3BlbihyaWdodCk7DQpAQCAtMjEy
LDcgKzIxMiw2IEBADQogCQlyZXR1cm4gMDsNCiANCiAJZG93bigmY3VycmVu
dC0+bW0tPm1tYXBfc2VtKTsNCi0JbG9ja19rZXJuZWwoKTsNCiANCiAJdm1h
ID0gZmluZF92bWEoY3VycmVudC0+bW0sIHN0YXJ0KTsNCiAJZXJyb3IgPSAt
RUZBVUxUOw0KQEAgLTI0OSw3ICsyNDgsNiBAQA0KIAl9DQogCW1lcmdlX3Nl
Z21lbnRzKGN1cnJlbnQtPm1tLCBzdGFydCwgZW5kKTsNCiBvdXQ6DQotCXVu
bG9ja19rZXJuZWwoKTsNCiAJdXAoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7
DQogCXJldHVybiBlcnJvcjsNCiB9DQpkaWZmIC11ck4gbGludXgtMi4zLjct
cHJlOS9tbS9tcmVtYXAuYyBsaW51eC1iaXJkLmZfY291bnQvbW0vbXJlbWFw
LmMNCi0tLSBsaW51eC0yLjMuNy1wcmU5L21tL21yZW1hcC5jCVdlZCBKdW4g
IDkgMDg6MDQ6MjggMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9tbS9t
cmVtYXAuYwlGcmkgSnVuIDE4IDIwOjI2OjQwIDE5OTkNCkBAIC0xMzQsMTQg
KzEzNCwxMiBAQA0KIAkJCW5ld192bWEtPnZtX3N0YXJ0ID0gbmV3X2FkZHI7
DQogCQkJbmV3X3ZtYS0+dm1fZW5kID0gbmV3X2FkZHIrbmV3X2xlbjsNCiAJ
CQluZXdfdm1hLT52bV9vZmZzZXQgPSB2bWEtPnZtX29mZnNldCArIChhZGRy
IC0gdm1hLT52bV9zdGFydCk7DQotCQkJbG9ja19rZXJuZWwoKTsNCiAJCQlp
ZiAobmV3X3ZtYS0+dm1fZmlsZSkNCi0JCQkJbmV3X3ZtYS0+dm1fZmlsZS0+
Zl9jb3VudCsrOw0KKwkJCQlhdG9taWNfaW5jKCZuZXdfdm1hLT52bV9maWxl
LT5mX2NvdW50KTsNCiAJCQlpZiAobmV3X3ZtYS0+dm1fb3BzICYmIG5ld192
bWEtPnZtX29wcy0+b3BlbikNCiAJCQkJbmV3X3ZtYS0+dm1fb3BzLT5vcGVu
KG5ld192bWEpOw0KIAkJCWluc2VydF92bV9zdHJ1Y3QoY3VycmVudC0+bW0s
IG5ld192bWEpOw0KIAkJCW1lcmdlX3NlZ21lbnRzKGN1cnJlbnQtPm1tLCBu
ZXdfdm1hLT52bV9zdGFydCwgbmV3X3ZtYS0+dm1fZW5kKTsNCi0JCQl1bmxv
Y2tfa2VybmVsKCk7DQogCQkJZG9fbXVubWFwKGFkZHIsIG9sZF9sZW4pOw0K
IAkJCWN1cnJlbnQtPm1tLT50b3RhbF92bSArPSBuZXdfbGVuID4+IFBBR0Vf
U0hJRlQ7DQogCQkJaWYgKG5ld192bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VE
KSB7DQpkaWZmIC11ck4gbGludXgtMi4zLjctcHJlOS9uZXQvY29yZS9zY20u
YyBsaW51eC1iaXJkLmZfY291bnQvbmV0L2NvcmUvc2NtLmMNCi0tLSBsaW51
eC0yLjMuNy1wcmU5L25ldC9jb3JlL3NjbS5jCVRodSBNYXkgMTMgMDc6MDM6
MzIgMTk5OQ0KKysrIGxpbnV4LWJpcmQuZl9jb3VudC9uZXQvY29yZS9zY20u
YwlGcmkgSnVuIDE4IDIwOjI2OjQwIDE5OTkNCkBAIC0yMzIsNyArMjMyLDcg
QEANCiAJCQlicmVhazsNCiAJCX0NCiAJCS8qIEJ1bXAgdGhlIHVzYWdlIGNv
dW50IGFuZCBpbnN0YWxsIHRoZSBmaWxlLiAqLw0KLQkJZnBbaV0tPmZfY291
bnQrKzsNCisJCWF0b21pY19pbmMoJmZwW2ldLT5mX2NvdW50KTsNCiAJCWN1
cnJlbnQtPmZpbGVzLT5mZFtuZXdfZmRdID0gZnBbaV07DQogCX0NCiANCkBA
IC0yNzEsMTAgKzI3MSw5IEBADQogDQogCW5ld19mcGwgPSBrbWFsbG9jKHNp
emVvZigqZnBsKSwgR0ZQX0tFUk5FTCk7DQogCWlmIChuZXdfZnBsKSB7DQot
CQltZW1jcHkobmV3X2ZwbCwgZnBsLCBzaXplb2YoKmZwbCkpOw0KLQ0KIAkJ
Zm9yIChpPWZwbC0+Y291bnQtMTsgaT49MDsgaS0tKQ0KLQkJCWZwbC0+ZnBb
aV0tPmZfY291bnQrKzsNCisJCQlhdG9taWNfaW5jKCZmcGwtPmZwW2ldLT5m
X2NvdW50KTsNCisJCW1lbWNweShuZXdfZnBsLCBmcGwsIHNpemVvZigqZnBs
KSk7DQogCX0NCiAJcmV0dXJuIG5ld19mcGw7DQogfQ0KZGlmZiAtdXJOIGxp
bnV4LTIuMy43LXByZTkvbmV0L3N1bnJwYy94cHJ0LmMgbGludXgtYmlyZC5m
X2NvdW50L25ldC9zdW5ycGMveHBydC5jDQotLS0gbGludXgtMi4zLjctcHJl
OS9uZXQvc3VucnBjL3hwcnQuYwlXZWQgSnVuICA5IDA4OjA0OjQ5IDE5OTkN
CisrKyBsaW51eC1iaXJkLmZfY291bnQvbmV0L3N1bnJwYy94cHJ0LmMJRnJp
IEp1biAxOCAyMDoyNjo0MCAxOTk5DQpAQCAtMTQ1NSw4ICsxNDU1LDggQEAN
CiANCiAJcHJvdG8gPSAoc29jay0+dHlwZSA9PSBTT0NLX0RHUkFNKT8gSVBQ
Uk9UT19VRFAgOiBJUFBST1RPX1RDUDsNCiAJaWYgKCh4cHJ0ID0geHBydF9z
ZXR1cChzb2NrLCBwcm90bywgYXAsIHRvKSkgIT0gTlVMTCkgew0KKwkJYXRv
bWljX2luYygmZmlsZS0+Zl9jb3VudCk7DQogCQl4cHJ0LT5maWxlID0gZmls
ZTsNCi0JCWZpbGUtPmZfY291bnQrKzsNCiAJfQ0KIA0KIAlyZXR1cm4geHBy
dDsNCmRpZmYgLXVyTiBsaW51eC0yLjMuNy1wcmU5L25ldC91bml4L2dhcmJh
Z2UuYyBsaW51eC1iaXJkLmZfY291bnQvbmV0L3VuaXgvZ2FyYmFnZS5jDQot
LS0gbGludXgtMi4zLjctcHJlOS9uZXQvdW5peC9nYXJiYWdlLmMJVGh1IE1h
eSAxMyAwNzowMzozOSAxOTk5DQorKysgbGludXgtYmlyZC5mX2NvdW50L25l
dC91bml4L2dhcmJhZ2UuYwlGcmkgSnVuIDE4IDIwOjI2OjQwIDE5OTkNCkBA
IC0xOTksNyArMTk5LDggQEANCiAJCSAqCWluIGZsaWdodCB3ZSBhcmUgaW4g
dXNlLg0KIAkJICovDQogCQlpZihzLT5zb2NrZXQgJiYgcy0+c29ja2V0LT5m
aWxlICYmDQotCQkgICBzLT5zb2NrZXQtPmZpbGUtPmZfY291bnQgPiBzLT5w
cm90aW5mby5hZl91bml4LmluZmxpZ2h0KQ0KKwkJICAgYXRvbWljX3JlYWQo
JnMtPnNvY2tldC0+ZmlsZS0+Zl9jb3VudCkgPg0KKwkJCQkgICBzLT5wcm90
aW5mby5hZl91bml4LmluZmxpZ2h0KQ0KIAkJCW1heWJlX3VubWFya19hbmRf
cHVzaChzKTsNCiAJfQ0KIA0K
---559023410-486725371-929753729=:5639--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/