From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sat, 21 Apr 2001 20:29:00 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sat, 21 Apr 2001 20:28:52 -0400 Received: from maniola.plus.net.uk ([195.166.135.195]:15032 "HELO mail.plus.net.uk") by vger.kernel.org with SMTP id ; Sat, 21 Apr 2001 20:28:45 -0400 Content-Type: Multipart/Mixed; charset="iso-8859-1"; boundary="------------Boundary-00=_KX36T7DOAVAKJABQ8AXX" From: "D.W.Howells" To: torvalds@transmeta.com Subject: [PATCH] rw_semaphores, optimisations Date: Sun, 22 Apr 2001 01:27:20 +0100 X-Mailer: KMail [version 1.2] Cc: linux-kernel@vger.kernel.org, dhowells@redhat.com, andrea@suse.de, davem@redhat.com MIME-Version: 1.0 Message-Id: <01042201272000.01091@orion.ddi.co.uk> Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --------------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--