[PATCH] rw_semaphores, optimisations

D.W.Howells (dhowells@astarte.free-online.co.uk)
Sun, 22 Apr 2001 01:27:20 +0100


--------------Boundary-00=_KX36T7DOAVAKJABQ8AXX
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

This patch (made against linux-2.4.4-pre6) makes a number of changes to the
rwsem implementation:

(1) Fixes a subtle contention bug between up_write and the down_* functions.

(2) Optimises the i386 fastpath implementation and changed the slowpath
implementation to aid it.
- The arch/i386/lib/rwsem.c is now gone.
- Better inline asm constraints have been applied.

(3) Changed the sparc64 fastpath implementation to use revised slowpath
interface.
[Dave Miller: can you check this please]

(4) Makes the generic spinlock implementation non-inline.
- lib/rwsem.c has been duplicated to lib/rwsem-spinlock.c and a
slightly different algorithm has been created. This one is simpler
since it does not have to use atomic operations on the counters as
all accesses to them are governed by a blanket spinlock.

David

--------------Boundary-00=_KX36T7DOAVAKJABQ8AXX
Content-Type: text/plain;
charset="iso-8859-1";
name="rwsem-opt.diff"
Content-Transfer-Encoding: base64
Content-Description: rw-semaphore optimisations patch
Content-Disposition: attachment; filename="rwsem-opt.diff"

ZGlmZiAtdU5yIGxpbnV4LTIuNC40LXByZTYvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMg
bGludXgvYXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMKLS0tIGxpbnV4LTIuNC40LXByZTYv
YXJjaC9pMzg2L2tlcm5lbC9pMzg2X2tzeW1zLmMJU2F0IEFwciAyMSAyMToyNDoyNSAyMDAxCisr
KyBsaW51eC9hcmNoL2kzODYva2VybmVsL2kzODZfa3N5bXMuYwlTYXQgQXByIDIxIDIyOjUyOjUw
IDIwMDEKQEAgLTgwLDExICs4MCw2IEBACiBFWFBPUlRfU1lNQk9MX05PVkVSUyhfX2Rvd25fZmFp
bGVkX2ludGVycnVwdGlibGUpOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoX19kb3duX2ZhaWxlZF90
cnlsb2NrKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKF9fdXBfd2FrZXVwKTsKLSNpZmRlZiBDT05G
SUdfUldTRU1fWENIR0FERF9BTEdPUklUSE0KLUVYUE9SVF9TWU1CT0xfTk9WRVJTKF9fcndzZW1f
ZG93bl93cml0ZV9mYWlsZWQpOwotRVhQT1JUX1NZTUJPTF9OT1ZFUlMoX19yd3NlbV9kb3duX3Jl
YWRfZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0xfTk9WRVJTKF9fcndzZW1fd2FrZSk7Ci0jZW5kaWYK
IC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3Bh
cnRpYWxfY29weV9nZW5lcmljKTsKIC8qIERlbGF5IGxvb3BzICovCmRpZmYgLXVOciBsaW51eC0y
LjQuNC1wcmU2L2FyY2gvaTM4Ni9saWIvTWFrZWZpbGUgbGludXgvYXJjaC9pMzg2L2xpYi9NYWtl
ZmlsZQotLS0gbGludXgtMi40LjQtcHJlNi9hcmNoL2kzODYvbGliL01ha2VmaWxlCVNhdCBBcHIg
MjEgMjE6MjQ6MjUgMjAwMQorKysgbGludXgvYXJjaC9pMzg2L2xpYi9NYWtlZmlsZQlTYXQgQXBy
IDIxIDIyOjUyOjUwIDIwMDEKQEAgLTksNyArOSw3IEBACiAKIG9iai15ID0gY2hlY2tzdW0ubyBv
bGQtY2hlY2tzdW0ubyBkZWxheS5vIFwKIAl1c2VyY29weS5vIGdldHVzZXIubyBwdXR1c2VyLm8g
XAotCW1lbWNweS5vIHN0cnN0ci5vIHJ3c2VtLm8KKwltZW1jcHkubyBzdHJzdHIubwogCiBvYmot
JChDT05GSUdfWDg2X1VTRV8zRE5PVykgKz0gbW14Lm8KIG9iai0kKENPTkZJR19IQVZFX0RFQ19M
T0NLKSArPSBkZWNfYW5kX2xvY2subwpkaWZmIC11TnIgbGludXgtMi40LjQtcHJlNi9hcmNoL2kz
ODYvbGliL3J3c2VtLlMgbGludXgvYXJjaC9pMzg2L2xpYi9yd3NlbS5TCi0tLSBsaW51eC0yLjQu
NC1wcmU2L2FyY2gvaTM4Ni9saWIvcndzZW0uUwlTYXQgQXByIDIxIDIxOjI0OjI1IDIwMDEKKysr
IGxpbnV4L2FyY2gvaTM4Ni9saWIvcndzZW0uUwlUaHUgSmFuICAxIDAxOjAwOjAwIDE5NzAKQEAg
LTEsMzYgKzAsMCBAQAotLyogcndzZW0uUzogUi9XIHNlbWFwaG9yZXMsIHJlZ2lzdGVyIHNhdmlu
ZyB3cmFwcGVyIGZ1bmN0aW9uIHN0dWJzCi0gKgotICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxz
IChkaG93ZWxsc0ByZWRoYXQuY29tKS4KLSAqIERlcml2ZWQgZnJvbSBhcmNoL2kzODYva2VybmVs
L3NlbWFwaG9yZS5jCi0gKi8KLQotLnRleHQKLS5hbGlnbiA0Ci0uZ2xvYmwgX19yd3NlbV9kb3du
X3JlYWRfZmFpbGVkCi1fX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWQ6Ci0JcHVzaGwJJWVkeAotCXB1
c2hsCSVlY3gKLQljYWxsCXJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQKLQlwb3BsCSVlY3gKLQlwb3Bs
CSVlZHgKLQlyZXQKLQotLmFsaWduIDQKLS5nbG9ibCBfX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVk
Ci1fX3J3c2VtX2Rvd25fd3JpdGVfZmFpbGVkOgotCXB1c2hsCSVlZHgKLQlwdXNobAklZWN4Ci0J
Y2FsbAlyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZAotCXBvcGwJJWVjeAotCXBvcGwJJWVkeAotCXJl
dAotCi0uYWxpZ24gNAotLmdsb2JsIF9fcndzZW1fd2FrZQotX19yd3NlbV93YWtlOgotCXB1c2hs
CSVlZHgKLQlwdXNobAklZWN4Ci0JY2FsbAlyd3NlbV93YWtlCi0JcG9wbAklZWN4Ci0JcG9wbAkl
ZWR4Ci0JcmV0CmRpZmYgLXVOciBsaW51eC0yLjQuNC1wcmU2L2luY2x1ZGUvYXNtLWkzODYvcndz
ZW0uaCBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L3J3c2VtLmgKLS0tIGxpbnV4LTIuNC40LXByZTYv
aW5jbHVkZS9hc20taTM4Ni9yd3NlbS5oCVNhdCBBcHIgMjEgMjE6MjQ6MzIgMjAwMQorKysgbGlu
dXgvaW5jbHVkZS9hc20taTM4Ni9yd3NlbS5oCVN1biBBcHIgMjIgMDA6NTQ6MTUgMjAwMQpAQCAt
MTcsMTEgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgv
c3BpbmxvY2suaD4KIAotLyogd2UgdXNlIEZBU1RDQUxMIGNvbnZlbnRpb24gZm9yIHRoZSBoZWxw
ZXJzICovCi1leHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqRkFTVENBTEwoX19yd3NlbV9kb3du
X3JlYWRfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOwotZXh0ZXJuIHN0cnVjdCBy
d19zZW1hcGhvcmUgKkZBU1RDQUxMKF9fcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc3RydWN0IHJ3
X3NlbWFwaG9yZSAqc2VtKSk7Ci1leHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqRkFTVENBTEwo
X19yd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOwotCiBzdHJ1Y3QgcndzZW1f
d2FpdGVyOwogCiAvKgpAQCAtNDEsMTEgKzM2LDYgQEAKICNpZiBSV1NFTV9ERUJVRwogCWludAkJ
CWRlYnVnOwogI2VuZGlmCi0jaWYgUldTRU1fREVCVUdfTUFHSUMKLQlsb25nCQkJX19tYWdpYzsK
LQlhdG9taWNfdAkJcmVhZGVyczsKLQlhdG9taWNfdAkJd3JpdGVyczsKLSNlbmRpZgogfTsKIAog
LyoKQEAgLTU2LDE1ICs0NiwxMCBAQAogI2Vsc2UKICNkZWZpbmUgX19SV1NFTV9ERUJVR19JTklU
CS8qICovCiAjZW5kaWYKLSNpZiBSV1NFTV9ERUJVR19NQUdJQwotI2RlZmluZSBfX1JXU0VNX0RF
QlVHX01JTklUKG5hbWUpCSwgKGludCkmKG5hbWUpLl9fbWFnaWMsIEFUT01JQ19JTklUKDApLCBB
VE9NSUNfSU5JVCgwKQotI2Vsc2UKLSNkZWZpbmUgX19SV1NFTV9ERUJVR19NSU5JVChuYW1lKQkv
KiAqLwotI2VuZGlmCiAKICNkZWZpbmUgX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKSBcCiB7IFJX
U0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIE5VTEwsICYobmFtZSkud2Fp
dF9mcm9udCBcCi0JX19SV1NFTV9ERUJVR19JTklUIF9fUldTRU1fREVCVUdfTUlOSVQobmFtZSkg
fQorCV9fUldTRU1fREVCVUdfSU5JVCB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBc
CiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQpA
QCAtNzgsMTEgKzYzLDYgQEAKICNpZiBSV1NFTV9ERUJVRwogCXNlbS0+ZGVidWcgPSAwOwogI2Vu
ZGlmCi0jaWYgUldTRU1fREVCVUdfTUFHSUMKLQlzZW0tPl9fbWFnaWMgPSAobG9uZykmc2VtLT5f
X21hZ2ljOwotCWF0b21pY19zZXQoJnNlbS0+cmVhZGVycywgMCk7Ci0JYXRvbWljX3NldCgmc2Vt
LT53cml0ZXJzLCAwKTsKLSNlbmRpZgogfQogCiAvKgpAQCAtOTcsNyArNzcsMTEgQEAKIAkJIjE6
XG5cdCIKIAkJIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAJCSIyOlxuXHQiCi0JCSIg
IGNhbGwgICAgICBfX3J3c2VtX2Rvd25fcmVhZF9mYWlsZWRcblx0IgorCQkiICBwdXNobCAgICAg
JSVlY3hcblx0IgorCQkiICBwdXNobCAgICAgJSVlZHhcblx0IgorCQkiICBjYWxsICAgICAgcndz
ZW1fZG93bl9yZWFkX2ZhaWxlZFxuXHQiCisJCSIgIHBvcGwgICAgICAlJWVkeFxuXHQiCisJCSIg
IHBvcGwgICAgICAlJWVjeFxuXHQiCiAJCSIgIGptcCAgICAgICAxYlxuIgogCQkiLnByZXZpb3Vz
IgogCQkiIyBlbmRpbmcgZG93bl9yZWFkXG5cdCIKQEAgLTExNiwxNyArMTAwLDE5IEBACiAJdG1w
ID0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSIj
IGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKLUxPQ0tfUFJFRklYCSIgIHhhZGQgICAgICAlMCwo
JSVlYXgpXG5cdCIgLyogc3VidHJhY3QgMHgwMDAxMDAwMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVl
ICovCitMT0NLX1BSRUZJWAkiICB4YWRkICAgICAgJTAsKCUlZWF4KVxuXHQiIC8qIHN1YnRyYWN0
IDB4MDAwMGZmZmYsIHJldHVybnMgdGhlIG9sZCB2YWx1ZSAqLwogCQkiICB0ZXN0bCAgICAgJTAs
JTBcblx0IiAvKiB3YXMgdGhlIGNvdW50IDAgYmVmb3JlPyAqLwogCQkiICBqbnogICAgICAgMmZc
blx0IiAvKiBqdW1wIGlmIHdlIHdlcmVuJ3QgZ3JhbnRlZCB0aGUgbG9jayAqLwogCQkiMTpcblx0
IgogCQkiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKIAkJIjI6XG5cdCIKLQkJIiAgY2Fs
bCAgICAgIF9fcndzZW1fZG93bl93cml0ZV9mYWlsZWRcblx0IgorCQkiICBwdXNobCAgICAgJSVl
Y3hcblx0IgorCQkiICBjYWxsICAgICAgcndzZW1fZG93bl93cml0ZV9mYWlsZWRcblx0IgorCQki
ICBwb3BsICAgICAgJSVlY3hcblx0IgogCQkiICBqbXAgICAgICAgMWJcbiIKIAkJIi5wcmV2aW91
c1xuIgogCQkiIyBlbmRpbmcgZG93bl93cml0ZSIKLQkJOiAiK3IiKHRtcCksICI9bSIoc2VtLT5j
b3VudCkKKwkJOiAiK2QiKHRtcCksICI9bSIoc2VtLT5jb3VudCkKIAkJOiAiYSIoc2VtKSwgIm0i
KHNlbS0+Y291bnQpCiAJCTogIm1lbW9yeSIpOwogfQpAQCAtMTM2LDI2ICsxMjIsMjMgQEAKICAq
Lwogc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0p
CiB7Ci0JaW50IHRtcDsKLQotCXRtcCA9IC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOwogCV9fYXNt
X18gX192b2xhdGlsZV9fKAogCQkiIyBiZWdpbm5pbmcgX191cF9yZWFkXG5cdCIKLUxPQ0tfUFJF
RklYCSIgIHhhZGQgICAgICAlMCwoJSVlYXgpXG5cdCIgLyogc3VidHJhY3RzIDEsIHJldHVybnMg
dGhlIG9sZCB2YWx1ZSAqLworTE9DS19QUkVGSVgJIiAgeGFkZCAgICAgICUlZWF4LCglJWVkeClc
blx0IiAvKiBzdWJ0cmFjdHMgMSwgcmV0dXJucyB0aGUgb2xkIHZhbHVlICovCiAJCSIgIGpzICAg
ICAgICAyZlxuXHQiIC8qIGp1bXAgaWYgdGhlIGxvY2sgaXMgYmVpbmcgd2FpdGVkIHVwb24gKi8K
IAkJIjE6XG5cdCIKIAkJIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAJCSIyOlxuXHQi
Ci0JCSIgIGRlY2wgICAgICAlMFxuXHQiIC8qIHhhZGQgZ2F2ZSB1cyB0aGUgb2xkIGNvdW50ICov
Ci0JCSIgIHRlc3RsICAgICAlMywlMFxuXHQiIC8qIGRvIG5vdGhpbmcgaWYgc3RpbGwgb3V0c3Rh
bmRpbmcgYWN0aXZlIHJlYWRlcnMgKi8KKwkJIiAgZGVjbCAgICAgICUlZWF4XG5cdCIgLyogeGFk
ZCBnYXZlIHVzIHRoZSBvbGQgY291bnQgKi8KKwkJIiAgdGVzdGwgICAgICUzLCUlZWF4XG5cdCIg
LyogZG8gbm90aGluZyBpZiBzdGlsbCBvdXRzdGFuZGluZyBhY3RpdmUgcmVhZGVycyAqLwogCQki
ICBqbnogICAgICAgMWJcblx0IgotCQkiICBjYWxsICAgICAgX19yd3NlbV93YWtlXG5cdCIKKwkJ
IiAgY2FsbCAgICAgIHJ3c2VtX3VwX3JlYWRfd2FrZVxuXHQiCiAJCSIgIGptcCAgICAgICAxYlxu
IgogCQkiLnByZXZpb3VzXG4iCiAJCSIjIGVuZGluZyBfX3VwX3JlYWRcbiIKLQkJOiAiK3IiKHRt
cCksICI9bSIoc2VtLT5jb3VudCkKLQkJOiAiYSIoc2VtKSwgImkiKFJXU0VNX0FDVElWRV9NQVNL
KSwgIm0iKHNlbS0+Y291bnQpCi0JCTogIm1lbW9yeSIpOworCQk6ICI9bSIoc2VtLT5jb3VudCkK
KwkJOiAiZCIoc2VtKSwgImEiKC1SV1NFTV9BQ1RJVkVfUkVBRF9CSUFTKSwgImkiKFJXU0VNX0FD
VElWRV9NQVNLKSwgIm0iKHNlbS0+Y291bnQpCisJCTogIm1lbW9yeSIsICJlY3giKTsKIH0KIAog
LyoKQEAgLTE2NSwyMSArMTQ4LDMyIEBACiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJCSIj
IGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIKLUxPQ0tfUFJFRklYCSIgIGFkZGwgICAgICAlMiwo
JSVlYXgpXG5cdCIgLyogYWRkcyAweDAwMDBmZmZmICovCi0JCSIgIGpzICAgICAgICAyZlxuXHQi
IC8qIGp1bXAgaWYgdGhlIGxvY2sgaXMgYmVpbmcgd2FpdGVkIHVwb24gKi8KK0xPQ0tfUFJFRklY
CSIgIGNtcHhjaGdsICAlJWVjeCwoJSVlZHgpXG5cdCIgLyogdHJpZXMgdG8gdHJhbnNpdGlvbiAw
eGZmZmYwMDAxIC0+IDB4MDAwMDAwMDAgKi8KKwkJIiAgam56ICAgICAgIDJmXG5cdCIgLyoganVt
cCBpZiB0aGUgbG9jayBpcyBiZWluZyB3YWl0ZWQgdXBvbiAqLwogCQkiMTpcblx0IgogCQkiLnNl
Y3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKIAkJIjI6XG5cdCIKLQkJIiAgY2FsbCAgICAgIF9f
cndzZW1fd2FrZVxuXHQiCisJCSIgIGNhbGwgICAgICByd3NlbV91cF93cml0ZV93YWtlXG5cdCIK
IAkJIiAgam1wICAgICAgIDFiXG4iCiAJCSIucHJldmlvdXNcbiIKIAkJIiMgZW5kaW5nIF9fdXBf
d3JpdGVcbiIKIAkJOiAiPW0iKHNlbS0+Y291bnQpCi0JCTogImEiKHNlbSksICJpIigtUldTRU1f
QUNUSVZFX1dSSVRFX0JJQVMpLCAibSIoc2VtLT5jb3VudCkKKwkJOiAiZCIoc2VtKSwgImEiKFJX
U0VNX0FDVElWRV9XUklURV9CSUFTKSwgImMiKDApLCAibSIoc2VtLT5jb3VudCkKIAkJOiAibWVt
b3J5Iik7CiB9CiAKIC8qCisgKiBpbXBsZW1lbnQgYXRvbWljIGFkZCBmdW5jdGlvbmFsaXR5Cisg
Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZCByd3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0
IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKAorTE9DS19QUkVG
SVgJImFkZGwgJTEsJTAiCisJCToiPW0iKHNlbS0+Y291bnQpCisJCToiaXIiKGRlbHRhKSwgIm0i
KHNlbS0+Y291bnQpKTsKK30KKworLyoKICAqIGltcGxlbWVudCBleGNoYW5nZSBhbmQgYWRkIGZ1
bmN0aW9uYWxpdHkKICAqLwogc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShp
bnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKQEAgLTE4Nyw5ICsxODEsOSBAQAog
CWludCB0bXAgPSBkZWx0YTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQlMT0NLX1BSRUZJ
WCAieGFkZCAlMCwoJTEpIgotCQk6ICIrciIodG1wKQotCQk6ICJyIihzZW0pCitMT0NLX1BSRUZJ
WAkieGFkZCAlMCwoJTIpIgorCQk6ICIrciIodG1wKSwgIj1tIihzZW0tPmNvdW50KQorCQk6ICJy
IihzZW0pLCAibSIoc2VtLT5jb3VudCkKIAkJOiAibWVtb3J5Iik7CiAKIAlyZXR1cm4gdG1wK2Rl
bHRhOwpAQCAtMjAwLDcgKzE5NCwzMSBAQAogICovCiBzdGF0aWMgaW5saW5lIF9fdTE2IHJ3c2Vt
X2NtcHhjaGd3KHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSwgX191MTYgb2xkLCBfX3UxNiBuZXcp
CiB7Ci0JcmV0dXJuIGNtcHhjaGcoKF9fdTE2Kikmc2VtLT5jb3VudCwwLFJXU0VNX0FDVElWRV9C
SUFTKTsKKwlfX3UxNiB0bXAgPSBvbGQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKK0xPQ0tf
UFJFRklYCSJjbXB4Y2hndyAldzIsJTMiCisJCTogIj1hIih0bXApLCAiPW0iKHNlbS0+Y291bnQp
CisJCTogInIiKG5ldyksICJtMSIoc2VtLT5jb3VudCksICJhIih0bXApCisJCTogIm1lbW9yeSIp
OworCisJcmV0dXJuIHRtcDsKK30KKworLyoKKyAqIGltcGxlbWVudCBjb21wYXJlIGFuZCBleGNo
YW5nZSBmdW5jdGlvbmFsaXR5IG9uIHRoZSBydy1zZW1hcGhvcmUgY291bnQKKyAqLworc3RhdGlj
IGlubGluZSBzaWduZWQgbG9uZyByd3NlbV9jbXB4Y2hnKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl
bSwgc2lnbmVkIGxvbmcgb2xkLCBzaWduZWQgbG9uZyBuZXcpCit7CisJc2lnbmVkIGxvbmcgdG1w
ID0gb2xkOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCitMT0NLX1BSRUZJWAkiY21weGNoZ2wg
JTIsJTMiCisJCTogIj1hIih0bXApLCAiPW0iKHNlbS0+Y291bnQpCisJCTogInIiKG5ldyksICJt
MSIoc2VtLT5jb3VudCksICJhIih0bXApCisJCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHRtcDsK
IH0KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtdU5yIGxpbnV4LTIuNC40LXByZTYv
aW5jbHVkZS9hc20tc3BhcmM2NC9yd3NlbS5oIGxpbnV4L2luY2x1ZGUvYXNtLXNwYXJjNjQvcndz
ZW0uaAotLS0gbGludXgtMi40LjQtcHJlNi9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2VtLmgJU2F0
IEFwciAyMSAyMToyNDozMyAyMDAxCisrKyBsaW51eC9pbmNsdWRlL2FzbS1zcGFyYzY0L3J3c2Vt
LmgJU2F0IEFwciAyMSAyMzoxMjoyMiAyMDAxCkBAIC0yLDcgKzIsNyBAQAogICogcndzZW0uaDog
Ui9XIHNlbWFwaG9yZXMgaW1wbGVtZW50ZWQgdXNpbmcgQ0FTCiAgKgogICogV3JpdHRlbiBieSBE
YXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pLCAyMDAxLgotICogRGVyaXZlZCBmcm9t
IGFzbS1pMzg2L3J3c2VtLXhhZGQuaAorICogRGVyaXZlZCBmcm9tIGFzbS1pMzg2L3J3c2VtLmgK
ICAqLwogI2lmbmRlZiBfU1BBUkM2NF9SV1NFTV9ICiAjZGVmaW5lIF9TUEFSQzY0X1JXU0VNX0gK
QEAgLTEyNywxNCArMTI3LDE1IEBACiAJCSJzYXZlCQklJXNwLCAtMTYwLCAlJXNwXG5cdCIKIAkJ
Im1vdgkJJSVnMiwgJSVsMlxuXHQiCiAJCSJtb3YJCSUlZzMsICUlbDNcblx0IgorCQkiIG1vdgkJ
JSVnNywgJSVvMFxuXHQiCiAJCSJjYWxsCQklMVxuXHQiCi0JCSIgbW92CQklJWc1LCAlJW8wXG5c
dCIKKwkJIiBtb3YJCSUlZzUsICUlbzFcblx0IgogCQkibW92CQklJWwyLCAlJWcyXG5cdCIKIAkJ
ImJhLHB0CQklJXhjYywgMmJcblx0IgogCQkiIHJlc3RvcmUJJSVsMywgJSVnMCwgJSVnM1xuXHQi
CiAJCSIucHJldmlvdXNcblx0IgogCQkiISBlbmRpbmcgX191cF9yZWFkIgotCQk6IDogInIiIChz
ZW0pLCAiaSIgKHJ3c2VtX3dha2UpLAorCQk6IDogInIiIChzZW0pLCAiaSIgKHJ3c2VtX3VwX3Jl
YWRfd2FrZSksCiAJCSAgICAiaSIgKFJXU0VNX0FDVElWRV9NQVNLKQogCQk6ICJnMSIsICJnNSIs
ICJnNyIsICJtZW1vcnkiLCAiY2MiKTsKIH0KQEAgLTE0NSwzMSArMTQ2LDI4IEBACiAJCSIhIGJl
Z2lubmluZyBfX3VwX3dyaXRlXG5cdCIKIAkJInNldGhpCQklJWhpKCUyKSwgJSVnMVxuXHQiCiAJ
CSJvcgkJJSVnMSwgJSVsbyglMiksICUlZzFcbiIKLQkJIjE6XHRsZHV3CVslMF0sICUlZzVcblx0
IgotCQkic3ViCQklJWc1LCAlJWcxLCAlJWc3XG5cdCIKLQkJImNhcwkJWyUwXSwgJSVnNSwgJSVn
N1xuXHQiCi0JCSJjbXAJCSUlZzUsICUlZzdcblx0IgotCQkiYm5lLHBuCQklJWljYywgMWJcblx0
IgotCQkiIHN1YgkJJSVnNywgJSVnMSwgJSVnN1xuXHQiCi0JCSJjbXAJCSUlZzcsIDBcblx0Igot
CQkiYmwscG4JCSUlaWNjLCAzZlxuXHQiCisJCSJzdWIJCSUlZzUsICUlZzUsICUlZzVcblx0Igor
CQkiY2FzCQlbJTBdLCAlJWcxLCAlJWc1XG5cdCIKKwkJImNtcAkJJSVnMSwgJSVnNVxuXHQiCisJ
CSJibmUscG4JCSUlaWNjLCAxZlxuXHQiCiAJCSIgbWVtYmFyCSNTdG9yZVN0b3JlXG4iCiAJCSIy
OlxuXHQiCiAJCSIuc3Vic2VjdGlvbiAyXG4iCi0JCSIzOlx0bW92CSUwLCAlJWc1XG5cdCIKKwkJ
IjM6XHRtb3YJJTAsICUlZzFcblx0IgogCQkic2F2ZQkJJSVzcCwgLTE2MCwgJSVzcFxuXHQiCiAJ
CSJtb3YJCSUlZzIsICUlbDJcblx0IgogCQkibW92CQklJWczLCAlJWwzXG5cdCIKKwkJIm1vdgkJ
JSVnMSwgJSVvMFxuXHQiCiAJCSJjYWxsCQklMVxuXHQiCi0JCSIgbW92CQklJWc1LCAlJW8wXG5c
dCIKKwkJIiBtb3YJCSUlZzUsICUlbzFcblx0IgogCQkibW92CQklJWwyLCAlJWcyXG5cdCIKIAkJ
ImJhLHB0CQklJXhjYywgMmJcblx0IgogCQkiIHJlc3RvcmUJJSVsMywgJSVnMCwgJSVnM1xuXHQi
CiAJCSIucHJldmlvdXNcblx0IgogCQkiISBlbmRpbmcgX191cF93cml0ZSIKLQkJOiA6ICJyIiAo
c2VtKSwgImkiIChyd3NlbV93YWtlKSwKKwkJOiA6ICJyIiAoc2VtKSwgImkiIChyd3NlbV91cF93
cml0ZV93YWtlKSwKIAkJICAgICJpIiAoUldTRU1fQUNUSVZFX1dSSVRFX0JJQVMpCi0JCTogImcx
IiwgImc1IiwgImc3IiwgIm1lbW9yeSIsICJjYyIpOworCQk6ICJnMSIsICJnNSIsICJtZW1vcnki
LCAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShpbnQg
ZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKQEAgLTE5MSw2ICsxODksOCBAQAogCXJl
dHVybiB0bXAgKyBkZWx0YTsKIH0KIAorI2RlZmluZSByd3NlbV9hdG9taWNfYWRkIHJ3c2VtX2F0
b21pY191cGRhdGUKKwogc3RhdGljIGlubGluZSBfX3UxNiByd3NlbV9jbXB4Y2hndyhzdHJ1Y3Qg
cndfc2VtYXBob3JlICpzZW0sIF9fdTE2IF9fb2xkLCBfX3UxNiBfX25ldykKIHsKIAl1MzIgb2xk
ID0gKHNlbS0+Y291bnQgJiAweGZmZmYwMDAwKSB8ICh1MzIpIF9fb2xkOwpAQCAtMjEyLDYgKzIx
MiwxMSBAQAogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIHByZXYgJiAweGZmZmY7Cit9CisKK3N0
YXRpYyBpbmxpbmUgc2lnbmVkIGxvbmcgcndzZW1fY21weGNoZyhzdHJ1Y3Qgcndfc2VtYXBob3Jl
ICpzZW0sIHNpZ25lZCBsb25nIG9sZCwgc2lnbmVkIGxvbmcgbmV3KQoreworCXJldHVybiBjbXB4
Y2hnKCZzZW0tPmNvdW50LG9sZCxuZXcpOwogfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpk
aWZmIC11TnIgbGludXgtMi40LjQtcHJlNi9pbmNsdWRlL2xpbnV4L3J3c2VtLXNwaW5sb2NrLmgg
bGludXgvaW5jbHVkZS9saW51eC9yd3NlbS1zcGlubG9jay5oCi0tLSBsaW51eC0yLjQuNC1wcmU2
L2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaAlTYXQgQXByIDIxIDIxOjI0OjMzIDIwMDEK
KysrIGxpbnV4L2luY2x1ZGUvbGludXgvcndzZW0tc3BpbmxvY2suaAlTdW4gQXByIDIyIDAwOjU0
OjE1IDIwMDEKQEAgLTIyLDI0ICsyMiwxNCBAQAogICogdGhlIHNlbWFwaG9yZSBkZWZpbml0aW9u
CiAgKi8KIHN0cnVjdCByd19zZW1hcGhvcmUgewotCXNpZ25lZCBsb25nCQljb3VudDsKLSNkZWZp
bmUgUldTRU1fVU5MT0NLRURfVkFMVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgUldTRU1fQUNUSVZF
X0JJQVMJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUldTRU1fQUNUSVZFX01BU0sJCTB4MDAwMGZmZmYK
LSNkZWZpbmUgUldTRU1fV0FJVElOR19CSUFTCQkoLTB4MDAwMTAwMDApCi0jZGVmaW5lIFJXU0VN
X0FDVElWRV9SRUFEX0JJQVMJCVJXU0VNX0FDVElWRV9CSUFTCi0jZGVmaW5lIFJXU0VNX0FDVElW
RV9XUklURV9CSUFTCQkoUldTRU1fV0FJVElOR19CSUFTICsgUldTRU1fQUNUSVZFX0JJQVMpCisJ
X191MzIJCQlhY3RpdmU7CisJX191MzIJCQl3YWl0aW5nOwogCXNwaW5sb2NrX3QJCXdhaXRfbG9j
azsKIAlzdHJ1Y3QgcndzZW1fd2FpdGVyCSp3YWl0X2Zyb250OwogCXN0cnVjdCByd3NlbV93YWl0
ZXIJKip3YWl0X2JhY2s7CiAjaWYgUldTRU1fREVCVUcKIAlpbnQJCQlkZWJ1ZzsKICNlbmRpZgot
I2lmIFJXU0VNX0RFQlVHX01BR0lDCi0JbG9uZwkJCV9fbWFnaWM7Ci0JYXRvbWljX3QJCXJlYWRl
cnM7Ci0JYXRvbWljX3QJCXdyaXRlcnM7Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC01MCwxMTkgKzQw
LDE4IEBACiAjZWxzZQogI2RlZmluZSBfX1JXU0VNX0RFQlVHX0lOSVQJLyogKi8KICNlbmRpZgot
I2lmIFJXU0VNX0RFQlVHX01BR0lDCi0jZGVmaW5lIF9fUldTRU1fREVCVUdfTUlOSVQobmFtZSkJ
LCAoaW50KSYobmFtZSkuX19tYWdpYywgQVRPTUlDX0lOSVQoMCksIEFUT01JQ19JTklUKDApCi0j
ZWxzZQotI2RlZmluZSBfX1JXU0VNX0RFQlVHX01JTklUKG5hbWUpCS8qICovCi0jZW5kaWYKIAog
I2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLXsgUldTRU1fVU5MT0NLRURfVkFM
VUUsIFNQSU5fTE9DS19VTkxPQ0tFRCwgTlVMTCwgJihuYW1lKS53YWl0X2Zyb250IFwKLQlfX1JX
U0VNX0RFQlVHX0lOSVQgX19SV1NFTV9ERUJVR19NSU5JVChuYW1lKSB9Cit7IDAsIDAsIFNQSU5f
TE9DS19VTkxPQ0tFRCwgTlVMTCwgJihuYW1lKS53YWl0X2Zyb250IF9fUldTRU1fREVCVUdfSU5J
VCB9CiAKICNkZWZpbmUgREVDTEFSRV9SV1NFTShuYW1lKSBcCiAJc3RydWN0IHJ3X3NlbWFwaG9y
ZSBuYW1lID0gX19SV1NFTV9JTklUSUFMSVpFUihuYW1lKQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
aW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0Jc2VtLT5jb3VudCA9IFJX
U0VNX1VOTE9DS0VEX1ZBTFVFOwotCXNwaW5fbG9ja19pbml0KCZzZW0tPndhaXRfbG9jayk7Ci0J
c2VtLT53YWl0X2Zyb250ID0gTlVMTDsKLQlzZW0tPndhaXRfYmFjayA9ICZzZW0tPndhaXRfZnJv
bnQ7Ci0jaWYgUldTRU1fREVCVUcKLQlzZW0tPmRlYnVnID0gMDsKLSNlbmRpZgotI2lmIFJXU0VN
X0RFQlVHX01BR0lDCi0Jc2VtLT5fX21hZ2ljID0gKGxvbmcpJnNlbS0+X19tYWdpYzsKLQlhdG9t
aWNfc2V0KCZzZW0tPnJlYWRlcnMsIDApOwotCWF0b21pY19zZXQoJnNlbS0+d3JpdGVycywgMCk7
Ci0jZW5kaWYKLX0KLQotLyoKLSAqIGxvY2sgZm9yIHJlYWRpbmcKLSAqLwotc3RhdGljIGlubGlu
ZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgY291
bnQ7Ci0Jc3Bpbl9sb2NrKCZzZW0tPndhaXRfbG9jayk7Ci0Jc2VtLT5jb3VudCArPSBSV1NFTV9B
Q1RJVkVfUkVBRF9CSUFTOwotCWNvdW50ID0gc2VtLT5jb3VudDsKLQlzcGluX3VubG9jaygmc2Vt
LT53YWl0X2xvY2spOwotCWlmIChjb3VudDwwKQotCQlyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHNl
bSk7Ci19Ci0KLS8qCi0gKiBsb2NrIGZvciB3cml0aW5nCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCWludCBjb3VudDsK
LQlzcGluX2xvY2soJnNlbS0+d2FpdF9sb2NrKTsKLQljb3VudCA9IHNlbS0+Y291bnQ7Ci0Jc2Vt
LT5jb3VudCArPSBSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKLQlzcGluX3VubG9jaygmc2VtLT53
YWl0X2xvY2spOwotCWlmIChjb3VudCkKLQkJcndzZW1fZG93bl93cml0ZV9mYWlsZWQoc2VtKTsK
LX0KLQotLyoKLSAqIHVubG9jayBhZnRlciByZWFkaW5nCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBfX3VwX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQotewotCWludCBjb3VudDsKLQlz
cGluX2xvY2soJnNlbS0+d2FpdF9sb2NrKTsKLQljb3VudCA9IHNlbS0+Y291bnQ7Ci0Jc2VtLT5j
b3VudCAtPSBSV1NFTV9BQ1RJVkVfUkVBRF9CSUFTOwotCXNwaW5fdW5sb2NrKCZzZW0tPndhaXRf
bG9jayk7Ci0JaWYgKGNvdW50PDAgJiYgISgoY291bnQtUldTRU1fQUNUSVZFX1JFQURfQklBUykm
UldTRU1fQUNUSVZFX01BU0spKQotCQlyd3NlbV93YWtlKHNlbSk7Ci19Ci0KLS8qCi0gKiB1bmxv
Y2sgYWZ0ZXIgd3JpdGluZwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX191cF93cml0ZShzdHJ1
Y3Qgcndfc2VtYXBob3JlICpzZW0pCi17Ci0JaW50IGNvdW50OwotCXNwaW5fbG9jaygmc2VtLT53
YWl0X2xvY2spOwotCXNlbS0+Y291bnQgLT0gUldTRU1fQUNUSVZFX1dSSVRFX0JJQVM7Ci0JY291
bnQgPSBzZW0tPmNvdW50OwotCXNwaW5fdW5sb2NrKCZzZW0tPndhaXRfbG9jayk7Ci0JaWYgKGNv
dW50PDApCi0JCXJ3c2VtX3dha2Uoc2VtKTsKLX0KLQotLyoKLSAqIGltcGxlbWVudCBleGNoYW5n
ZSBhbmQgYWRkIGZ1bmN0aW9uYWxpdHkKLSAqIC0gb25seSBjYWxsZWQgd2hlbiBzcGlubG9jayBp
cyBhbHJlYWR5IGhlbGQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0
ZShpbnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKLXsKLQlpbnQgY291bnQ7Ci0K
LQlzZW0tPmNvdW50ICs9IGRlbHRhOwotCWNvdW50ID0gc2VtLT5jb3VudDsKLQotCXJldHVybiBj
b3VudDsKLX0KLQotLyoKLSAqIGltcGxlbWVudCBjb21wYXJlIGFuZCBleGNoYW5nZSBmdW5jdGlv
bmFsaXR5IG9uIHRoZSBydy1zZW1hcGhvcmUgY291bnQgTFNXCi0gKiAtIG9ubHkgY2FsbGVkIGJ5
IF9fcndzZW1fZG9fd2FrZSgpLCBzbyBzcGlubG9jayBpcyBhbHJlYWR5IGhlbGQgd2hlbiBjYWxs
ZWQKLSAqLwotc3RhdGljIGlubGluZSBfX3UxNiByd3NlbV9jbXB4Y2hndyhzdHJ1Y3Qgcndfc2Vt
YXBob3JlICpzZW0sIF9fdTE2IG9sZCwgX191MTYgbmV3KQotewotCV9fdTE2IHByZXY7Ci0KLQlw
cmV2ID0gc2VtLT5jb3VudCAmIFJXU0VNX0FDVElWRV9NQVNLOwotCWlmIChwcmV2PT1vbGQpCi0J
CXNlbS0+Y291bnQgPSAoc2VtLT5jb3VudCAmIH5SV1NFTV9BQ1RJVkVfTUFTSykgfCBuZXc7Ci0K
LQlyZXR1cm4gcHJldjsKLX0KK2V4dGVybiB2b2lkIEZBU1RDQUxMKGluaXRfcndzZW0oc3RydWN0
IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CitleHRlcm4gdm9pZCBGQVNUQ0FMTChfX2Rvd25fcmVhZChz
dHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9fZG93bl93
cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKF9f
dXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxM
KF9fdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSk7CiAKICNlbmRpZiAvKiBfX0tF
Uk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX1JXU0VNX1NQSU5MT0NLX0ggKi8KZGlmZiAtdU5y
IGxpbnV4LTIuNC40LXByZTYvaW5jbHVkZS9saW51eC9yd3NlbS5oIGxpbnV4L2luY2x1ZGUvbGlu
dXgvcndzZW0uaAotLS0gbGludXgtMi40LjQtcHJlNi9pbmNsdWRlL2xpbnV4L3J3c2VtLmgJU2F0
IEFwciAyMSAyMToyNDozMyAyMDAxCisrKyBsaW51eC9pbmNsdWRlL2xpbnV4L3J3c2VtLmgJU3Vu
IEFwciAyMiAwMDo1NDoxNSAyMDAxCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgv
bGlua2FnZS5oPgogCiAjZGVmaW5lIFJXU0VNX0RFQlVHIDAKLSNkZWZpbmUgUldTRU1fREVCVUdf
TUFHSUMgMAogCiAjaWZkZWYgX19LRVJORUxfXwogCkBAIC00NywxMSArNDYsMTIgQEAKIC8qIGRl
ZmluZWQgY29udGVudGlvbiBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGdlbmVyaWMgY2FzZQog
ICogLSB0aGVzZSBhcmUgYWxzbyB1c2VkIGZvciB0aGUgZXhjaGFuZ2UtYW5kLWFkZCBiYXNlZCBh
bGdvcml0aG0KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0sp
IHx8IGRlZmluZWQoQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNKQorI2lmZGVmIENPTkZJ
R19SV1NFTV9YQ0hHQUREX0FMR09SSVRITQogLyogd2UgdXNlIEZBU1RDQUxMIGNvbnZlbnRpb24g
Zm9yIHRoZSBoZWxwZXJzICovCiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqRkFTVENBTEwo
cndzZW1fZG93bl9yZWFkX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKIGV4dGVy
biBzdHJ1Y3Qgcndfc2VtYXBob3JlICpGQVNUQ0FMTChyd3NlbV9kb3duX3dyaXRlX2ZhaWxlZChz
dHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pKTsKLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpG
QVNUQ0FMTChyd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkpOworZXh0ZXJuIHZv
aWQgRkFTVENBTEwocndzZW1fdXBfcmVhZF93YWtlKHNpZ25lZCBsb25nLCBzdHJ1Y3Qgcndfc2Vt
YXBob3JlICopKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKHJ3c2VtX3VwX3dyaXRlX3dha2Uoc2ln
bmVkIGxvbmcsIHN0cnVjdCByd19zZW1hcGhvcmUgKikpOwogI2VuZGlmCiAKICNpZmRlZiBDT05G
SUdfUldTRU1fR0VORVJJQ19TUElOTE9DSwpAQCAtNzQsMjAgKzc0LDcgQEAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBkb3duX3JlYWQoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCXJ3c2VtdHJh
Y2Uoc2VtLCJFbnRlcmluZyBkb3duX3JlYWQiKTsKLQotI2lmIFJXU0VNX0RFQlVHX01BR0lDCi0J
aWYgKHNlbS0+X19tYWdpYyAhPSAobG9uZykmc2VtLT5fX21hZ2ljKQotCQlCVUcoKTsKLSNlbmRp
ZgotCiAJX19kb3duX3JlYWQoc2VtKTsKLQotI2lmIFJXU0VNX0RFQlVHX01BR0lDCi0JaWYgKGF0
b21pY19yZWFkKCZzZW0tPndyaXRlcnMpKQotCQlCVUcoKTsKLQlhdG9taWNfaW5jKCZzZW0tPnJl
YWRlcnMpOwotI2VuZGlmCi0KIAlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBkb3duX3JlYWQiKTsK
IH0KIApAQCAtOTcsMjIgKzg0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3dyaXRlKHN0
cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKIHsKIAlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgZG93
bl93cml0ZSIpOwotCi0jaWYgUldTRU1fREVCVUdfTUFHSUMKLQlpZiAoc2VtLT5fX21hZ2ljICE9
IChsb25nKSZzZW0tPl9fbWFnaWMpCi0JCUJVRygpOwotI2VuZGlmCi0KIAlfX2Rvd25fd3JpdGUo
c2VtKTsKLQotI2lmIFJXU0VNX0RFQlVHX01BR0lDCi0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndy
aXRlcnMpKQotCQlCVUcoKTsKLQlpZiAoYXRvbWljX3JlYWQoJnNlbS0+cmVhZGVycykpCi0JCUJV
RygpOwotCWF0b21pY19pbmMoJnNlbS0+d3JpdGVycyk7Ci0jZW5kaWYKLQogCXJ3c2VtdHJhY2Uo
c2VtLCJMZWF2aW5nIGRvd25fd3JpdGUiKTsKIH0KIApAQCAtMTIyLDE0ICs5NCw3IEBACiBzdGF0
aWMgaW5saW5lIHZvaWQgdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJcndz
ZW10cmFjZShzZW0sIkVudGVyaW5nIHVwX3JlYWQiKTsKLQotI2lmIFJXU0VNX0RFQlVHX01BR0lD
Ci0JaWYgKGF0b21pY19yZWFkKCZzZW0tPndyaXRlcnMpKQotCQlCVUcoKTsKLQlhdG9taWNfZGVj
KCZzZW0tPnJlYWRlcnMpOwotI2VuZGlmCiAJX191cF9yZWFkKHNlbSk7Ci0KIAlyd3NlbXRyYWNl
KHNlbSwiTGVhdmluZyB1cF9yZWFkIik7CiB9CiAKQEAgLTEzOSwxNiArMTA0LDcgQEAKIHN0YXRp
YyBpbmxpbmUgdm9pZCB1cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7CiAJcndz
ZW10cmFjZShzZW0sIkVudGVyaW5nIHVwX3dyaXRlIik7Ci0KLSNpZiBSV1NFTV9ERUJVR19NQUdJ
QwotCWlmIChhdG9taWNfcmVhZCgmc2VtLT5yZWFkZXJzKSkKLQkJQlVHKCk7Ci0JaWYgKGF0b21p
Y19yZWFkKCZzZW0tPndyaXRlcnMpICE9IDEpCi0JCUJVRygpOwotCWF0b21pY19kZWMoJnNlbS0+
d3JpdGVycyk7Ci0jZW5kaWYKIAlfX3VwX3dyaXRlKHNlbSk7Ci0KIAlyd3NlbXRyYWNlKHNlbSwi
TGVhdmluZyB1cF93cml0ZSIpOwogfQogCmRpZmYgLXVOciBsaW51eC0yLjQuNC1wcmU2L2xpYi9N
YWtlZmlsZSBsaW51eC9saWIvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNC40LXByZTYvbGliL01ha2Vm
aWxlCVNhdCBBcHIgMjEgMjE6MjQ6MzMgMjAwMQorKysgbGludXgvbGliL01ha2VmaWxlCVN1biBB
cHIgMjIgMDA6MDc6MzMgMjAwMQpAQCAtOCwxNCArOCwxMiBAQAogCiBMX1RBUkdFVCA6PSBsaWIu
YQogCi1leHBvcnQtb2JqcyA6PSBjbWRsaW5lLm8KK2V4cG9ydC1vYmpzIDo9IGNtZGxpbmUubyBy
d3NlbS1zcGlubG9jay5vIHJ3c2VtLm8KIAogb2JqLXkgOj0gZXJybm8ubyBjdHlwZS5vIHN0cmlu
Zy5vIHZzcHJpbnRmLm8gYnJsb2NrLm8gY21kbGluZS5vCiAKLWlmbmVxICgkKENPTkZJR19SV1NF
TV9HRU5FUklDX1NQSU5MT0NLKSQoQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNKSxubikK
LWV4cG9ydC1vYmpzICs9IHJ3c2VtLm8KLW9iai15ICs9IHJ3c2VtLm8KLWVuZGlmCitvYmotJChD
T05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSykgKz0gcndzZW0tc3BpbmxvY2subworb2JqLSQo
Q09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNKSArPSByd3NlbS5vCiAKIGlmbmVxICgkKENP
TkZJR19IQVZFX0RFQ19MT0NLKSx5KSAKICAgb2JqLXkgKz0gZGVjX2FuZF9sb2NrLm8KZGlmZiAt
dU5yIGxpbnV4LTIuNC40LXByZTYvbGliL3J3c2VtLXNwaW5sb2NrLmMgbGludXgvbGliL3J3c2Vt
LXNwaW5sb2NrLmMKLS0tIGxpbnV4LTIuNC40LXByZTYvbGliL3J3c2VtLXNwaW5sb2NrLmMJVGh1
IEphbiAgMSAwMTowMDowMCAxOTcwCisrKyBsaW51eC9saWIvcndzZW0tc3BpbmxvY2suYwlTdW4g
QXByIDIyIDAwOjU4OjQ1IDIwMDEKQEAgLTAsMCArMSwyNDUgQEAKKy8qIHJ3c2VtLXNwaW5sb2Nr
LmM6IFIvVyBzZW1hcGhvcmVzOiBjb250ZW50aW9uIGhhbmRsaW5nIGZ1bmN0aW9ucyBmb3IgZ2Vu
ZXJpYyBzcGlubG9jaworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxl
bWVudGF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxICAgRGF2aWQgSG93ZWxscyAoZGhv
d2VsbHNAcmVkaGF0LmNvbSkuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1
ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0cnVjdCBy
d3NlbV93YWl0ZXIgeworCXN0cnVjdCByd3NlbV93YWl0ZXIJKm5leHQ7CisJc3RydWN0IHRhc2tf
c3RydWN0CSp0YXNrOworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisjZGVmaW5lIFJXU0VNX1dBSVRJ
TkdfRk9SX1JFQUQJMHgwMDAwMDAwMQorI2RlZmluZSBSV1NFTV9XQUlUSU5HX0ZPUl9XUklURQkw
eDAwMDAwMDAyCit9OworCisjaWYgUldTRU1fREVCVUcKK3ZvaWQgcndzZW10cmFjZShzdHJ1Y3Qg
cndfc2VtYXBob3JlICpzZW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoc2VtLT5kZWJ1ZykK
KwkJcHJpbnRrKCJbJWRdICVzKHslZCwlZH0pXG4iLGN1cnJlbnQtPnBpZCxzdHIsc2VtLT5hY3Rp
dmUsc2VtLT53YWl0aW5nKTsKK30KKyNlbmRpZgorCisvKgorICogaW5pdGlhbGlzZSB0aGUgc2Vt
YXBob3JlCisgKi8KK3ZvaWQgaW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7
CisJc2VtLT5hY3RpdmUgPSAwOworCXNlbS0+d2FpdGluZyA9IDA7CisJc3Bpbl9sb2NrX2luaXQo
JnNlbS0+d2FpdF9sb2NrKTsKKwlzZW0tPndhaXRfZnJvbnQgPSBOVUxMOworCXNlbS0+d2FpdF9i
YWNrID0gJnNlbS0+d2FpdF9mcm9udDsKKyNpZiBSV1NFTV9ERUJVRworCXNlbS0+ZGVidWcgPSAw
OworI2VuZGlmCit9CisKKy8qCisgKiBoYW5kbGUgdGhlIGxvY2sgYmVpbmcgcmVsZWFzZWQgd2hp
bHN0IHRoZXJlIGFyZSBwcm9jZXNzZXMgYmxvY2tlZCBvbiBpdCB0aGF0IGNhbiBub3cgcnVuCisg
KiAtIGlmIHdlIGNvbWUgaGVyZSwgdGhlbjoKKyAqICAgLSB0aGUgJ2FjdGl2ZSBjb3VudCcgX3Jl
YWNoZWRfIHplcm8KKyAqICAgLSB0aGUgJ3dhaXRpbmcgY291bnQnIGlzIG5vbi16ZXJvCisgKiAt
IHRoZSBzcGlubG9jayBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlcgorICogLSB3b2tlbiBwcm9j
ZXNzIGJsb2NrcyBhcmUgZGlzY2FyZGVkIGZyb20gdGhlIGxpc3QgYWZ0ZXIgaGF2aW5nIGZsYWdz
IHplcm9pc2VkCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ3X3NlbWFwaG9yZSAqX19yd3Nl
bV9kb193YWtlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKK3sKKwlzdHJ1Y3QgcndzZW1fd2Fp
dGVyICp3YWl0ZXIsICpuZXh0OworCWludCB3b2tlbiwgbG9vcDsKKworCXJ3c2VtdHJhY2Uoc2Vt
LCJFbnRlcmluZyBfX3J3c2VtX2RvX3dha2UiKTsKKworCXdhaXRlciA9IHNlbS0+d2FpdF9mcm9u
dDsKKworCWlmIChfX2J1aWx0aW5fZXhwZWN0KCF3YWl0ZXIsMCkpCisJICBnb3RvIGxpc3RfdW5l
eHBlY3RlZGx5X2VtcHR5OworCisJbmV4dCA9IE5VTEw7CisKKwkvKiB0cnkgdG8gZ3JhbnQgYSBz
aW5nbGUgd3JpdGUgbG9jayBpZiB0aGVyZSdzIGEgd3JpdGVyIGF0IHRoZSBmcm9udCBvZiB0aGUg
cXVldWUKKwkgKiAtIHdlIGxlYXZlIHRoZSAnd2FpdGluZyBjb3VudCcgaW5jcmVtZW50ZWQgdG8g
c2lnbmlmeSBwb3RlbnRpYWwgY29udGVudGlvbgorCSAqLworCWlmICh3YWl0ZXItPmZsYWdzICYg
UldTRU1fV0FJVElOR19GT1JfV1JJVEUpIHsKKwkJc2VtLT5hY3RpdmUrKzsKKwkJbmV4dCA9IHdh
aXRlci0+bmV4dDsKKwkJd2FpdGVyLT5mbGFncyA9IDA7CisJCXdha2VfdXBfcHJvY2Vzcyh3YWl0
ZXItPnRhc2spOworCQlnb3RvIGRpc2NhcmRfd29rZW5fcHJvY2Vzc2VzOworCX0KKworCS8qIGdy
YW50IGFuIGluZmluaXRlIG51bWJlciBvZiByZWFkIGxvY2tzIHRvIHRoZSByZWFkZXJzIGF0IHRo
ZSBmcm9udCBvZiB0aGUgcXVldWUgKi8KKwl3b2tlbiA9IDA7CisJZG8geworCQl3b2tlbisrOwor
CQl3YWl0ZXIgPSB3YWl0ZXItPm5leHQ7CisJfSB3aGlsZSAod2FpdGVyICYmIHdhaXRlci0+Zmxh
Z3MmUldTRU1fV0FJVElOR19GT1JfUkVBRCk7CisKKwlzZW0tPmFjdGl2ZSArPSB3b2tlbjsKKwlz
ZW0tPndhaXRpbmcgLT0gd29rZW47CisKKwl3YWl0ZXIgPSBzZW0tPndhaXRfZnJvbnQ7CisJZm9y
IChsb29wPXdva2VuOyBsb29wPjA7IGxvb3AtLSkgeworCQluZXh0ID0gd2FpdGVyLT5uZXh0Owor
CQl3YWl0ZXItPmZsYWdzID0gMDsKKwkJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+dGFzayk7CisJ
CXdhaXRlciA9IG5leHQ7CisJfQorCisgZGlzY2FyZF93b2tlbl9wcm9jZXNzZXM6CisJc2VtLT53
YWl0X2Zyb250ID0gbmV4dDsKKwlpZiAoIW5leHQpIHNlbS0+d2FpdF9iYWNrID0gJnNlbS0+d2Fp
dF9mcm9udDsKKworIG91dDoKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBfX3J3c2VtX2RvX3dh
a2UiKTsKKwlyZXR1cm4gc2VtOworCisgbGlzdF91bmV4cGVjdGVkbHlfZW1wdHk6CisJcHJpbnRr
KCJfX3J3c2VtX2RvX3dha2UoKTogd2FpdF9saXN0IHVuZXhwZWN0ZWRseSBlbXB0eVxuIik7CisJ
cHJpbnRrKCJbJWRdICVwID0geyAlZCwgJWQgfSlcbiIsY3VycmVudC0+cGlkLHNlbSxzZW0tPmFj
dGl2ZSxzZW0tPndhaXRpbmcpOworCUJVRygpOworCWdvdG8gb3V0OworfQorCisvKgorICogZ2V0
IGEgcmVhZCBsb2NrIG9uIHRoZSBzZW1hcGhvcmUKKyAqLwordm9pZCBfX2Rvd25fcmVhZChzdHJ1
Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc3RydWN0IHJ3c2VtX3dhaXRlciB3YWl0ZXI7CisJ
c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJcndzZW10cmFjZShzZW0sIkVu
dGVyaW5nIF9fZG93bl9yZWFkIik7CisKKwlzcGluX2xvY2soJnNlbS0+d2FpdF9sb2NrKTsKKwor
CWlmICghc2VtLT53YWl0aW5nKSB7CisJCS8qIGdyYW50ZWQgKi8KKwkJc2VtLT5hY3RpdmUrKzsK
KwkJc3Bpbl91bmxvY2soJnNlbS0+d2FpdF9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCXNlbS0+
d2FpdGluZysrOworCisJc2V0X3Rhc2tfc3RhdGUodHNrLFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsK
KworCS8qIHNldCB1cCBteSBvd24gc3R5bGUgb2Ygd2FpdHF1ZXVlICovCisJd2FpdGVyLm5leHQg
PSBOVUxMOworCXdhaXRlci50YXNrID0gdHNrOworCXdhaXRlci5mbGFncyA9IFJXU0VNX1dBSVRJ
TkdfRk9SX1JFQUQ7CisKKwkqc2VtLT53YWl0X2JhY2sgPSAmd2FpdGVyOyAvKiBhZGQgdG8gYmFj
ayBvZiBxdWV1ZSAqLworCXNlbS0+d2FpdF9iYWNrID0gJndhaXRlci5uZXh0OworCisJLyogd2Ug
ZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgc2VtYXBob3JlIHN0cnVjdCBhbnltb3JlICovCisJc3Bp
bl91bmxvY2soJnNlbS0+d2FpdF9sb2NrKTsKKworCS8qIHdhaXQgdG8gYmUgZ2l2ZW4gdGhlIGxv
Y2sgKi8KKwlmb3IgKDs7KSB7CisJCWlmICghd2FpdGVyLmZsYWdzKQorCQkJYnJlYWs7CisJCXNj
aGVkdWxlKCk7CisJCXNldF90YXNrX3N0YXRlKHRzaywgVEFTS19VTklOVEVSUlVQVElCTEUpOwor
CX0KKworCXRzay0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisKKyBvdXQ6CisJcndzZW10cmFjZShz
ZW0sIkxlYXZpbmcgX19kb3duX3JlYWQiKTsKK30KKworLyoKKyAqIGdldCBhIHdyaXRlIGxvY2sg
b24gdGhlIHNlbWFwaG9yZQorICogLSBub3RlIHRoYXQgd2UgaW5jcmVtZW50IHRoZSB3YWl0aW5n
IGNvdW50IGFueXdheSB0byBpbmRpY2F0ZSBhbiBleGNsdXNpdmUgbG9jaworICovCit2b2lkIF9f
ZG93bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJc3RydWN0IHJ3c2VtX3dh
aXRlciB3YWl0ZXI7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJcndz
ZW10cmFjZShzZW0sIkVudGVyaW5nIF9fZG93bl93cml0ZSIpOworCisJc3Bpbl9sb2NrKCZzZW0t
PndhaXRfbG9jayk7CisKKwlpZiAoIXNlbS0+d2FpdGluZyAmJiAhc2VtLT5hY3RpdmUpIHsKKwkJ
LyogZ3JhbnRlZCAqLworCQlzZW0tPmFjdGl2ZSsrOworCQlzZW0tPndhaXRpbmcrKzsKKwkJc3Bp
bl91bmxvY2soJnNlbS0+d2FpdF9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCXNlbS0+d2FpdGlu
ZysrOworCisJc2V0X3Rhc2tfc3RhdGUodHNrLFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCS8q
IHNldCB1cCBteSBvd24gc3R5bGUgb2Ygd2FpdHF1ZXVlICovCisJd2FpdGVyLm5leHQgPSBOVUxM
OworCXdhaXRlci50YXNrID0gdHNrOworCXdhaXRlci5mbGFncyA9IFJXU0VNX1dBSVRJTkdfRk9S
X1dSSVRFOworCisJKnNlbS0+d2FpdF9iYWNrID0gJndhaXRlcjsgLyogYWRkIHRvIGJhY2sgb2Yg
cXVldWUgKi8KKwlzZW0tPndhaXRfYmFjayA9ICZ3YWl0ZXIubmV4dDsKKworCS8qIHdlIGRvbid0
IG5lZWQgdG8gdG91Y2ggdGhlIHNlbWFwaG9yZSBzdHJ1Y3QgYW55bW9yZSAqLworCXNwaW5fdW5s
b2NrKCZzZW0tPndhaXRfbG9jayk7CisKKwkvKiB3YWl0IHRvIGJlIGdpdmVuIHRoZSBsb2NrICov
CisJZm9yICg7OykgeworCQlpZiAoIXdhaXRlci5mbGFncykKKwkJCWJyZWFrOworCQlzY2hlZHVs
ZSgpOworCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwl9CisK
Kwl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOworCisgb3V0OgorCXJ3c2VtdHJhY2Uoc2VtLCJM
ZWF2aW5nIF9fZG93bl93cml0ZSIpOworfQorCisvKgorICogcmVsZWFzZSBhIHJlYWQgbG9jayBv
biB0aGUgc2VtYXBob3JlCisgKi8KK3ZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUg
KnNlbSkKK3sKKwlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgX191cF9yZWFkIik7CisKKwlzcGlu
X2xvY2soJnNlbS0+d2FpdF9sb2NrKTsKKworCWlmICgtLXNlbS0+YWN0aXZlPT0wICYmIHNlbS0+
d2FpdGluZykKKwkJX19yd3NlbV9kb193YWtlKHNlbSk7CisKKwlzcGluX3VubG9jaygmc2VtLT53
YWl0X2xvY2spOworCisJcndzZW10cmFjZShzZW0sIkxlYXZpbmcgX191cF9yZWFkIik7Cit9CisK
Ky8qCisgKiByZWxlYXNlIGEgd3JpdGUgbG9jayBvbiB0aGUgc2VtYXBob3JlCisgKi8KK3ZvaWQg
X191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCit7CisJcndzZW10cmFjZShzZW0s
IkVudGVyaW5nIF9fdXBfd3JpdGUiKTsKKworCXNwaW5fbG9jaygmc2VtLT53YWl0X2xvY2spOwor
CisJc2VtLT53YWl0aW5nLS07CisJaWYgKC0tc2VtLT5hY3RpdmU9PTAgJiYgc2VtLT53YWl0aW5n
KQorCQlfX3J3c2VtX2RvX3dha2Uoc2VtKTsKKworCXNwaW5fdW5sb2NrKCZzZW0tPndhaXRfbG9j
ayk7CisKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBfX3VwX3dyaXRlIik7Cit9CisKK0VYUE9S
VF9TWU1CT0woaW5pdF9yd3NlbSk7CitFWFBPUlRfU1lNQk9MKF9fZG93bl9yZWFkKTsKK0VYUE9S
VF9TWU1CT0woX19kb3duX3dyaXRlKTsKK0VYUE9SVF9TWU1CT0woX191cF9yZWFkKTsKK0VYUE9S
VF9TWU1CT0woX191cF93cml0ZSk7CisjaWYgUldTRU1fREVCVUcKK0VYUE9SVF9TWU1CT0wocndz
ZW10cmFjZSk7CisjZW5kaWYKZGlmZiAtdU5yIGxpbnV4LTIuNC40LXByZTYvbGliL3J3c2VtLmMg
bGludXgvbGliL3J3c2VtLmMKLS0tIGxpbnV4LTIuNC40LXByZTYvbGliL3J3c2VtLmMJU2F0IEFw
ciAyMSAyMToyNDozMyAyMDAxCisrKyBsaW51eC9saWIvcndzZW0uYwlTdW4gQXByIDIyIDAwOjMy
OjI2IDIwMDEKQEAgLTE0LDU3ICsxNCwzNiBAQAogI2RlZmluZSBSV1NFTV9XQUlUSU5HX0ZPUl9S
RUFECTB4MDAwMDAwMDEKICNkZWZpbmUgUldTRU1fV0FJVElOR19GT1JfV1JJVEUJMHgwMDAwMDAw
MgogfTsKLSNkZWZpbmUgUldTRU1fV0FJVEVSX01BR0lDIDB4NTI1NzUzNDUKLQotc3RhdGljIHN0
cnVjdCByd19zZW1hcGhvcmUgKkZBU1RDQUxMKF9fcndzZW1fZG9fd2FrZShzdHJ1Y3Qgcndfc2Vt
YXBob3JlICpzZW0pKTsKIAogI2lmIFJXU0VNX0RFQlVHCiB2b2lkIHJ3c2VtdHJhY2Uoc3RydWN0
IHJ3X3NlbWFwaG9yZSAqc2VtLCBjb25zdCBjaGFyICpzdHIpCiB7CiAJaWYgKHNlbS0+ZGVidWcp
Ci0JCXByaW50aygiWyVkXSAlcyhjb3VudD0lMDhseClcbiIsY3VycmVudC0+cGlkLHN0cixzZW0t
PmNvdW50KTsKKwkJcHJpbnRrKCJbJWRdICVzKHslMDhseH0pXG4iLGN1cnJlbnQtPnBpZCxzdHIs
c2VtLT5jb3VudCk7CiB9CiAjZW5kaWYKIAogLyoKICAqIGhhbmRsZSB0aGUgbG9jayBiZWluZyBy
ZWxlYXNlZCB3aGlsc3QgdGhlcmUgYXJlIHByb2Nlc3NlcyBibG9ja2VkIG9uIGl0IHRoYXQgY2Fu
IG5vdyBydW4KKyAqIC0gdGhlIGNhbGxlciBjYW4gc3BlY2lmeSBhbiBhZGp1c3RtZW50IHRoYXQg
d2lsbCBuZWVkIHRvIGJlIG1hZGUgdG8gdGhlIHNlbWFwaG9yZSBjb3VudCB0bworICogICBoZWxw
IHJlZHVjZSB0aGUgbnVtYmVyIG9mIGF0b21pYyBvcGVyYXRpb25zIGludm9rZWQKICAqIC0gaWYg
d2UgY29tZSBoZXJlLCB0aGVuOgotICogICAtIHRoZSAnYWN0aXZlIHBhcnQnIG9mIHRoZSBjb3Vu
dCAoJjB4MDAwMGZmZmYpIHJlYWNoZWQgemVybyAoYnV0IG1heSBubyBsb25nZXIgYmUgemVybykK
KyAqICAgLSB0aGUgJ2FjdGl2ZSBwYXJ0JyBvZiB0aGUgY291bnQgKCYweDAwMDBmZmZmKSByZWFj
aGVkIHplcm8gYnV0IGhhcyBiZWVuIHJlLWluY3JlbWVudGVkCiAgKiAgIC0gdGhlICd3YWl0aW5n
IHBhcnQnIG9mIHRoZSBjb3VudCAoJjB4ZmZmZjAwMDApIGlzIG5lZ2F0aXZlIChhbmQgd2lsbCBz
dGlsbCBiZSBzbykKLSAqICAgLSB0aGUgc3BpbmxvY2sgbXVzdCBiZSBoZWxkIGJlZm9yZSBlbnRy
eQotICogICAtIHdva2VuIHByb2Nlc3MgYmxvY2tzIGFyZSBkaXNjYXJkZWQgZnJvbSB0aGUgbGlz
dCBhZnRlciBoYXZpbmcgZmxhZ3MgemVyb2lzZWQKKyAqIC0gdGhlIHNwaW5sb2NrIG11c3QgYmUg
aGVsZCBieSB0aGUgY2FsbGVyCisgKiAtIHdva2VuIHByb2Nlc3MgYmxvY2tzIGFyZSBkaXNjYXJk
ZWQgZnJvbSB0aGUgbGlzdCBhZnRlciBoYXZpbmcgZmxhZ3MgemVyb2lzZWQKICAqLwotc3RhdGlj
IHN0cnVjdCByd19zZW1hcGhvcmUgKl9fcndzZW1fZG9fd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3Jl
ICpzZW0pCitzdGF0aWMgaW5saW5lIHN0cnVjdCByd19zZW1hcGhvcmUgKl9fcndzZW1fZG9fd2Fr
ZShpbnQgYWRqdXN0bWVudCwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQogewogCXN0cnVjdCBy
d3NlbV93YWl0ZXIgKndhaXRlciwgKm5leHQ7CiAJaW50IHdva2VuLCBsb29wOwogCiAJcndzZW10
cmFjZShzZW0sIkVudGVyaW5nIF9fcndzZW1fZG9fd2FrZSIpOwogCi0JLyogdHJ5IHRvIGdyYWIg
YW4gJ2FjdGl2aXR5JyBtYXJrZXIKLQkgKiAtIG5lZWQgdG8gbWFrZSBzdXJlIHR3byBjb3BpZXMg
b2YgcndzZW1fd2FrZSgpIGRvbid0IGRvIHRoaXMgZm9yIHR3byBzZXBhcmF0ZSBwcm9jZXNzZXMK
LQkgKiAgIHNpbXVsdGFuZW91c2x5Ci0JICogLSBiZSBob3JyaWJseSBuYXVnaHR5LCBhbmQgb25s
eSBkZWFsIHdpdGggdGhlIExTVyBvZiB0aGUgYXRvbWljIGNvdW50ZXIKLQkgKi8KLQlpZiAocndz
ZW1fY21weGNoZ3coc2VtLDAsUldTRU1fQUNUSVZFX0JJQVMpIT0wKSB7Ci0JCXJ3c2VtdHJhY2Uo
c2VtLCJfX3J3c2VtX2RvX3dha2U6IGFib3J0IHdha2V1cCBkdWUgdG8gcmVuZXdlZCBhY3Rpdml0
eSIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBjaGVjayB0aGUgd2FpdCBxdWV1ZSBpcyBwb3B1
bGF0ZWQgKi8KIAl3YWl0ZXIgPSBzZW0tPndhaXRfZnJvbnQ7CiAKLQlpZiAoX19idWlsdGluX2V4
cGVjdCghd2FpdGVyLDApKSB7Ci0JCXByaW50aygiX19yd3NlbV9kb193YWtlKCk6IHdhaXRfbGlz
dCB1bmV4cGVjdGVkbHkgZW1wdHlcbiIpOwotCQlCVUcoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0J
aWYgKF9fYnVpbHRpbl9leHBlY3QoIXdhaXRlci0+ZmxhZ3MsMCkpIHsKLQkJcHJpbnRrKCJfX3J3
c2VtX2RvX3dha2UoKTogd2FpdF9saXN0IGZyb250IGFwcGFyZW50bHkgbm90IHdhaXRpbmdcbiIp
OwotCQlCVUcoKTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChfX2J1aWx0aW5fZXhwZWN0KCF3YWl0
ZXIsMCkpCisJICBnb3RvIGxpc3RfdW5leHBlY3RlZGx5X2VtcHR5OwogCiAJbmV4dCA9IE5VTEw7
CiAKQEAgLTczLDYgKzUyLDggQEAKIAkgKiAgIGluY3JlbWVudGVkIGJ5IDB4MDAwMTAwMDAKIAkg
Ki8KIAlpZiAod2FpdGVyLT5mbGFncyAmIFJXU0VNX1dBSVRJTkdfRk9SX1dSSVRFKSB7CisJCWlm
IChhZGp1c3RtZW50KQorCQkJcndzZW1fYXRvbWljX2FkZChhZGp1c3RtZW50LHNlbSk7CiAJCW5l
eHQgPSB3YWl0ZXItPm5leHQ7CiAJCXdhaXRlci0+ZmxhZ3MgPSAwOwogCQl3YWtlX3VwX3Byb2Nl
c3Mod2FpdGVyLT50YXNrKTsKQEAgLTkyLDcgKzczLDggQEAKIAlsb29wID0gd29rZW47CiAJd29r
ZW4gKj0gUldTRU1fQUNUSVZFX0JJQVMtUldTRU1fV0FJVElOR19CSUFTOwogCXdva2VuIC09IFJX
U0VNX0FDVElWRV9CSUFTOwotCXJ3c2VtX2F0b21pY191cGRhdGUod29rZW4sc2VtKTsKKwl3b2tl
biArPSBhZGp1c3RtZW50OworCXJ3c2VtX2F0b21pY19hZGQod29rZW4sc2VtKTsKIAogCXdhaXRl
ciA9IHNlbS0+d2FpdF9mcm9udDsKIAlmb3IgKDsgbG9vcD4wOyBsb29wLS0pIHsKQEAgLTEwOSw2
ICs5MSwxMiBAQAogIG91dDoKIAlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyBfX3J3c2VtX2RvX3dh
a2UiKTsKIAlyZXR1cm4gc2VtOworCisgbGlzdF91bmV4cGVjdGVkbHlfZW1wdHk6CisJcHJpbnRr
KCJfX3J3c2VtX2RvX3dha2UoKTogd2FpdF9saXN0IHVuZXhwZWN0ZWRseSBlbXB0eVxuIik7CisJ
cHJpbnRrKCJbJWRdICVwID0geyAlMDhseCB9KVxuIixjdXJyZW50LT5waWQsc2VtLHNlbS0+Y291
bnQpOworCUJVRygpOworCWdvdG8gb3V0OwogfQogCiAvKgpAQCAtMTIzLDcgKzExMSw3IEBACiAJ
c2lnbmVkIGxvbmcgY291bnQ7CiAKIAlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgcndzZW1fZG93
bl9yZWFkX2ZhaWxlZCIpOwotCQorCiAJc2V0X3Rhc2tfc3RhdGUodHNrLFRBU0tfVU5JTlRFUlJV
UFRJQkxFKTsKIAogCS8qIHNldCB1cCBteSBvd24gc3R5bGUgb2Ygd2FpdHF1ZXVlICovCkBAIC0x
NDEsOSArMTI5LDExIEBACiAKIAkvKiBpZiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFjdGl2ZSBsb2Nr
cywgd2FrZSB0aGUgZnJvbnQgcXVldWVkIHByb2Nlc3MoZXMpIHVwCiAJICogLSBpdCBtaWdodCBl
dmVuIGJlIHRoaXMgcHJvY2Vzcywgc2luY2UgdGhlIHdha2VyIHRha2VzIGEgbW9yZSBhY3RpdmUg
cGFydAorCSAqIC0gc2hvdWxkIG9ubHkgZW50ZXIgX19yd3NlbV9kb193YWtlKCkgb25seSBvbiBh
IHRyYW5zaXRpb24gMC0+MSBpbiB0aGUgTFNXCiAJICovCiAJaWYgKCEoY291bnQgJiBSV1NFTV9B
Q1RJVkVfTUFTSykpCi0JCV9fcndzZW1fZG9fd2FrZShzZW0pOworCQlpZiAocndzZW1fY21weGNo
Z3coc2VtLDAsUldTRU1fQUNUSVZFX0JJQVMpPT0wKQorCQkJX19yd3NlbV9kb193YWtlKDAsc2Vt
KTsKIAogCXNwaW5fdW5sb2NrKCZzZW0tPndhaXRfbG9jayk7CiAKQEAgLTE4OSw5ICsxNzksMTEg
QEAKIAogCS8qIGlmIHRoZXJlIGFyZSBubyBsb25nZXIgYWN0aXZlIGxvY2tzLCB3YWtlIHRoZSBm
cm9udCBxdWV1ZWQgcHJvY2VzcyhlcykgdXAKIAkgKiAtIGl0IG1pZ2h0IGV2ZW4gYmUgdGhpcyBw
cm9jZXNzLCBzaW5jZSB0aGUgd2FrZXIgdGFrZXMgYSBtb3JlIGFjdGl2ZSBwYXJ0CisJICogLSBz
aG91bGQgb25seSBlbnRlciBfX3J3c2VtX2RvX3dha2UoKSBvbmx5IG9uIGEgdHJhbnNpdGlvbiAw
LT4xIGluIHRoZSBMU1cKIAkgKi8KIAlpZiAoIShjb3VudCAmIFJXU0VNX0FDVElWRV9NQVNLKSkK
LQkJX19yd3NlbV9kb193YWtlKHNlbSk7CisJCWlmIChyd3NlbV9jbXB4Y2hndyhzZW0sMCxSV1NF
TV9BQ1RJVkVfQklBUyk9PTApCisJCQlfX3J3c2VtX2RvX3dha2UoMCxzZW0pOwogCiAJc3Bpbl91
bmxvY2soJnNlbS0+d2FpdF9sb2NrKTsKIApAQCAtMjEwLDI1ICsyMDIsNjQgQEAKIH0KIAogLyoK
LSAqIHNwaW5sb2NrIGdyYWJiaW5nIHdyYXBwZXIgZm9yIF9fcndzZW1fZG9fd2FrZSgpCisgKiBo
YW5kbGUgdXBfcmVhZCgpIGZpbmRpbmcgYSB3YWl0ZXIgb24gdGhlIHNlbWFwaG9yZQorICogLSB1
cF9yZWFkIGhhcyBkZWNyZW1lbnRlZCB0aGUgYWN0aXZlIHBhcnQgb2YgdGhlIGNvdW50IGlmIHdl
IGNvbWUgaGVyZQogICovCi1zdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV93YWtlKHN0cnVjdCBy
d19zZW1hcGhvcmUgKnNlbSkKK3ZvaWQgcndzZW1fdXBfcmVhZF93YWtlKHNpZ25lZCBsb25nIGNv
dW50LCBzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCiB7Ci0JcndzZW10cmFjZShzZW0sIkVudGVy
aW5nIHJ3c2VtX3dha2UiKTsKKwlyd3NlbXRyYWNlKHNlbSwiRW50ZXJpbmcgcndzZW1fdXBfcmVh
ZF93YWtlIik7CiAKIAlzcGluX2xvY2soJnNlbS0+d2FpdF9sb2NrKTsKIAotCXNlbSA9IF9fcndz
ZW1fZG9fd2FrZShzZW0pOworCS8qIG5lZWQgdG8gd2FrZSB1cCBhIHdhaXRlciB1bmxlc3MgdGhl
IHNlbWFwaG9yZSBoYXMgZ29uZSBhY3RpdmUgYWdhaW4KKwkgKiAtIHNob3VsZCBvbmx5IGVudGVy
IF9fcndzZW1fZG9fd2FrZSgpIG9ubHkgb24gYSB0cmFuc2l0aW9uIDAtPjEgaW4gdGhlIExTVwor
CSAqLworCWlmIChyd3NlbV9jbXB4Y2hndyhzZW0sMCxSV1NFTV9BQ1RJVkVfQklBUyk9PTApCisJ
CXNlbSA9IF9fcndzZW1fZG9fd2FrZSgwLHNlbSk7CiAKIAlzcGluX3VubG9jaygmc2VtLT53YWl0
X2xvY2spOwogCi0JcndzZW10cmFjZShzZW0sIkxlYXZpbmcgcndzZW1fd2FrZSIpOwotCXJldHVy
biBzZW07CisJcndzZW10cmFjZShzZW0sIkxlYXZpbmcgcndzZW1fdXBfcmVhZF93YWtlIik7Cit9
CisKKy8qCisgKiBoYW5kbGUgdXBfd3JpdGUoKSBmaW5kaW5nIGEgd2FpdGVyIG9uIHRoZSBzZW1h
cGhvcmUKKyAqIC0gdXBfd3JpdGUgaGFzIG5vdCBtb2RpZmllZCB0aGUgY291bnQgaWYgd2UgY29t
ZSBoZXJlCisgKi8KK3ZvaWQgcndzZW1fdXBfd3JpdGVfd2FrZShzaWduZWQgbG9uZyBjb3VudCwg
c3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQoreworCXNpZ25lZCBsb25nIG5ldzsKKworCXJ3c2Vt
dHJhY2Uoc2VtLCJFbnRlcmluZyByd3NlbV91cF93cml0ZV93YWtlIik7CisKKwlzcGluX2xvY2so
JnNlbS0+d2FpdF9sb2NrKTsKKworIHRyeV9hZ2FpbjoKKwkvKiBpZiB0aGUgYWN0aXZlIHBhcnQg
b2YgdGhlIGNvdW50IGlzIDEsIHdlIHNob3VsZCBwZXJmb3JtIGEgd2FrZS11cCwgZWxzZSB3ZSBz
aG91bGQKKwkgKiBkZWNyZW1lbnQgdGhlIGNvdW50IGFuZCByZXR1cm4KKwkgKi8KKwlpZiAoKGNv
dW50JlJXU0VNX0FDVElWRV9NQVNLKT09UldTRU1fQUNUSVZFX0JJQVMpIHsKKwkJc2VtID0gX19y
d3NlbV9kb193YWtlKC1SV1NFTV9XQUlUSU5HX0JJQVMsc2VtKTsKKwl9CisJZWxzZSB7CisJCS8q
IHRyaWNreSAtIHdlIG11c3RuJ3QgcmV0dXJuIHRoZSBhY3RpdmUgcGFydCBvZiB0aGUgY291bnQg
dG8gMCAqLworCQluZXcgPSBjb3VudCAtIFJXU0VNX0FDVElWRV9XUklURV9CSUFTOworCQluZXcg
PSByd3NlbV9jbXB4Y2hnKHNlbSxjb3VudCxuZXcpOworCQlpZiAoY291bnQhPW5ldykgeworCQkJ
Y291bnQgPSBuZXc7CisJCQlnb3RvIHRyeV9hZ2FpbjsKKwkJfQorCX0KKworCXNwaW5fdW5sb2Nr
KCZzZW0tPndhaXRfbG9jayk7CisKKwlyd3NlbXRyYWNlKHNlbSwiTGVhdmluZyByd3NlbV91cF93
cml0ZV93YWtlIik7CiB9CiAKIEVYUE9SVF9TWU1CT0wocndzZW1fZG93bl9yZWFkX2ZhaWxlZCk7
CiBFWFBPUlRfU1lNQk9MKHJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKTsKLUVYUE9SVF9TWU1CT0wo
cndzZW1fd2FrZSk7CitFWFBPUlRfU1lNQk9MKHJ3c2VtX3VwX3JlYWRfd2FrZSk7CitFWFBPUlRf
U1lNQk9MKHJ3c2VtX3VwX3dyaXRlX3dha2UpOwogI2lmIFJXU0VNX0RFQlVHCiBFWFBPUlRfU1lN
Qk9MKHJ3c2VtdHJhY2UpOwogI2VuZGlmCg==

--------------Boundary-00=_KX36T7DOAVAKJABQ8AXX--
-
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/