From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v2 15/20] block/xen-blkfront: Make it running on 64KB page granularity Date: Thu, 9 Jul 2015 21:42:27 +0100 Message-ID: <1436474552-31789-16-git-send-email-julien.grall@citrix.com> References: <1436474552-31789-1-git-send-email-julien.grall@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZDIho-0001A0-3K for xen-devel@lists.xenproject.org; Thu, 09 Jul 2015 20:46:04 +0000 In-Reply-To: <1436474552-31789-1-git-send-email-julien.grall@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com, Julien Grall , linux-kernel@vger.kernel.org, Julien Grall , David Vrabel , Boris Ostrovsky , linux-arm-kernel@lists.infradead.org, =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= List-Id: xen-devel@lists.xenproject.org RnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAbGluYXJvLm9yZz4KClRoZSBQViBibG9j ayBwcm90b2NvbCBpcyB1c2luZyA0S0IgcGFnZSBncmFudWxhcml0eS4gVGhlIGdvYWwgb2YgdGhp cwpwYXRjaCBpcyB0byBhbGxvdyBhIExpbnV4IHVzaW5nIDY0S0IgcGFnZSBncmFudWxhcml0eSB1 c2luZyBibG9jawpkZXZpY2Ugb24gYSBub24tbW9kaWZpZWQgWGVuLgoKVGhlIGJsb2NrIEFQSSBp cyB1c2luZyBzZWdtZW50IHdoaWNoIHNob3VsZCBhdCBsZWFzdCBiZSB0aGUgc2l6ZSBvZiBhCkxp bnV4IHBhZ2UuIFRoZXJlZm9yZSwgdGhlIGRyaXZlciB3aWxsIGhhdmUgdG8gYnJlYWsgdGhlIHBh Z2UgaW4gY2h1bmsKb2YgNEsgYmVmb3JlIGdpdmluZyB0aGUgcGFnZSB0byB0aGUgYmFja2VuZC4K CkJyZWFraW5nIGEgNjRLQiBzZWdtZW50IGluIDRLQiBjaHVuayB3aWxsIHJlc3VsdCB0byBoYXZl IHNvbWUgY2h1bmsgd2l0aApubyBkYXRhLiBBcyB0aGUgUFYgcHJvdG9jb2wgYWx3YXlzIHJlcXVp cmUgdG8gaGF2ZSBkYXRhIGluIHRoZSBjaHVuaywgd2UKaGF2ZSB0byBjb3VudCB0aGUgbnVtYmVy IG9mIFhlbiBwYWdlIHdoaWNoIHdpbGwgYmUgaW4gdXNlIGFuZCBhdm9pZCB0bwpzZW50IGVtcHR5 IGNodW5rLgoKTm90ZSB0aGF0LCBhIHByZS1kZWZpbmVkIG51bWJlciBvZiBncmFudCBpcyByZXNl cnZlZCBiZWZvcmUgcHJlcGFyaW5nCnRoZSByZXF1ZXN0LiBUaGlzIHByZS1kZWZpbmVkIG51bWJl ciBpcyBiYXNlZCBvbiB0aGUgbnVtYmVyIGFuZCB0aGUKbWF4aW11bSBzaXplIG9mIHRoZSBzZWdt ZW50cy4gSWYgZWFjaCBzZWdtZW50IGNvbnRhaW4gYSB2ZXJ5IHNtYWxsCmFtb3VudCBvZiBkYXRh LCB0aGUgZHJpdmVyIG1heSByZXNlcnZlIHRvbyBtdWNoIGdyYW50ICgxNiBncmFudCBpcwpyZXNl cnZlZCBwZXIgc2VnbWVudCB3aXRoIDY0S0IgcGFnZSBncmFudWxhcml0eSkuCgpGdXRoZXJtb3Jl LCBpbiB0aGUgY2FzZSBvZiBwZXJzaXN0ZW50IGdyYW50IHdlIGFsbG9jYXRlIG9uZSBMaW51eCBw YWdlCnBlciBncmFudCBhbHRob3VnaCBvbmx5IHRoZSA0S0Igb2YgdGhlIHBhZ2Ugd2lsbCBiZSBl ZmZlY3RpdmVseSB1c2UuClRoaXMgY291bGQgYmUgaW1wcm92ZWQgYnkgc2hhcmUgdGhlIHBhZ2Ug d2l0aCBtdWx0aXBsZSBncmFudHMuCgpTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gR3JhbGwgPGp1bGll bi5ncmFsbEBjaXRyaXguY29tPgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2ls a0BvcmFjbGUuY29tPgpDYzogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+ CkNjOiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPgpDYzogRGF2 aWQgVnJhYmVsIDxkYXZpZC52cmFiZWxAY2l0cml4LmNvbT4KLS0tCgpJbXByb3ZlbWVudCBzdWNo IGFzIHN1cHBvcnQgNjRLQiBncmFudCBpcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGlu CnRoaXMgcGF0Y2ggYmVjYXVzZSB3ZSBoYXZlIHRoZSByZXF1aXJlbWVudCB0byBydW4gYSBMaW51 eCB1c2luZyA2NEtCIHBhZ2UKb24gYSBub24tbW9kaWZpZWQgWGVuLgoKICAgIENoYW5nZXMgaW4g djI6CiAgICAgICAgLSBVc2UgZ250dGFiX2ZvcmVhY2hfZ3JhbnQgdG8gc3BsaXQgYSBMaW51eCBw YWdlIGludG8gZ3JhbnQKLS0tCiBkcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jIHwgMzA0ICsr KysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxOTggaW5zZXJ0aW9ucygrKSwgMTA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvYmxvY2sveGVuLWJsa2Zyb250LmMgYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtmcm9udC5jCmlu ZGV4IDk1ZmQwNjcuLjY0NGJhNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2Zy b250LmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrZnJvbnQuYwpAQCAtNzcsNiArNzcsNyBA QCBzdHJ1Y3QgYmxrX3NoYWRvdyB7CiAJc3RydWN0IGdyYW50ICoqZ3JhbnRzX3VzZWQ7CiAJc3Ry dWN0IGdyYW50ICoqaW5kaXJlY3RfZ3JhbnRzOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJ dW5zaWduZWQgaW50IG51bV9zZzsKIH07CiAKIHN0cnVjdCBzcGxpdF9iaW8gewpAQCAtMTA2LDgg KzEwNyw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGVuX2Jsa2lmX21heF9yaW5nX29yZGVyOwog bW9kdWxlX3BhcmFtX25hbWVkKG1heF9yaW5nX3BhZ2Vfb3JkZXIsIHhlbl9ibGtpZl9tYXhfcmlu Z19vcmRlciwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3JpbmdfcGFnZV9v cmRlciwgIk1heGltdW0gb3JkZXIgb2YgcGFnZXMgdG8gYmUgdXNlZCBmb3IgdGhlIHNoYXJlZCBy aW5nIik7CiAKLSNkZWZpbmUgQkxLX1JJTkdfU0laRShpbmZvKSBfX0NPTlNUX1JJTkdfU0laRShi bGtpZiwgUEFHRV9TSVpFICogKGluZm8pLT5ucl9yaW5nX3BhZ2VzKQotI2RlZmluZSBCTEtfTUFY X1JJTkdfU0laRSBfX0NPTlNUX1JJTkdfU0laRShibGtpZiwgUEFHRV9TSVpFICogWEVOQlVTX01B WF9SSU5HX1BBR0VTKQorI2RlZmluZSBCTEtfUklOR19TSVpFKGluZm8pIF9fQ09OU1RfUklOR19T SVpFKGJsa2lmLCBYRU5fUEFHRV9TSVpFICogKGluZm8pLT5ucl9yaW5nX3BhZ2VzKQorI2RlZmlu ZSBCTEtfTUFYX1JJTkdfU0laRSBfX0NPTlNUX1JJTkdfU0laRShibGtpZiwgWEVOX1BBR0VfU0la RSAqIFhFTkJVU19NQVhfUklOR19QQUdFUykKIC8qCiAgKiByaW5nLXJlZiVpIGk9KC0xVUwpIHdv dWxkIHRha2UgMTEgY2hhcmFjdGVycyArICdyaW5nLXJlZicgaXMgOCwgc28gMTkKICAqIGNoYXJh Y3RlcnMgYXJlIGVub3VnaC4gRGVmaW5lIHRvIDIwIHRvIGtlZXAgY29uc2lzdCB3aXRoIGJhY2tl bmQuCkBAIC0xNDYsNiArMTQ3LDcgQEAgc3RydWN0IGJsa2Zyb250X2luZm8KIAl1bnNpZ25lZCBp bnQgZGlzY2FyZF9ncmFudWxhcml0eTsKIAl1bnNpZ25lZCBpbnQgZGlzY2FyZF9hbGlnbm1lbnQ7 CiAJdW5zaWduZWQgaW50IGZlYXR1cmVfcGVyc2lzdGVudDoxOworCS8qIE51bWJlciBvZiA0SyBz ZWdtZW50IGhhbmRsZWQgKi8KIAl1bnNpZ25lZCBpbnQgbWF4X2luZGlyZWN0X3NlZ21lbnRzOwog CWludCBpc19yZWFkeTsKIH07CkBAIC0xNzMsMTAgKzE3NSwxOSBAQCBzdGF0aWMgREVGSU5FX1NQ SU5MT0NLKG1pbm9yX2xvY2spOwogCiAjZGVmaW5lIERFVl9OQU1FCSJ4dmQiCS8qIG5hbWUgaW4g L2RldiAqLwogCi0jZGVmaW5lIFNFR1NfUEVSX0lORElSRUNUX0ZSQU1FIFwKLQkoUEFHRV9TSVpF L3NpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50KSkKLSNkZWZpbmUgSU5ESVJFQ1Rf R1JFRlMoX3NlZ3MpIFwKLQkoKF9zZWdzICsgU0VHU19QRVJfSU5ESVJFQ1RfRlJBTUUgLSAxKS9T RUdTX1BFUl9JTkRJUkVDVF9GUkFNRSkKKy8qCisgKiBYZW4gdXNlIDRLIHBhZ2VzLiBUaGUgZ3Vl c3QgbWF5IHVzZSBkaWZmZXJlbnQgcGFnZSBzaXplICg0SyBvciA2NEspCisgKiBOdW1iZXIgb2Yg WGVuIHBhZ2VzIHBlciBzZWdtZW50CisgKi8KKyNkZWZpbmUgWEVOX1BBR0VTX1BFUl9TRUdNRU5U ICAgKFBBR0VfU0laRSAvIFhFTl9QQUdFX1NJWkUpCisKKyNkZWZpbmUgU0VHU19QRVJfSU5ESVJF Q1RfRlJBTUUJXAorCShYRU5fUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgYmxraWZfcmVxdWVzdF9z ZWdtZW50KSAvIFhFTl9QQUdFU19QRVJfU0VHTUVOVCkKKyNkZWZpbmUgWEVOX1BBR0VTX1BFUl9J TkRJUkVDVF9GUkFNRSBcCisJKFhFTl9QQUdFX1NJWkUvc2l6ZW9mKHN0cnVjdCBibGtpZl9yZXF1 ZXN0X3NlZ21lbnQpKQorCisjZGVmaW5lIElORElSRUNUX0dSRUZTKF9wYWdlcykgXAorCSgoX3Bh Z2VzICsgWEVOX1BBR0VTX1BFUl9JTkRJUkVDVF9GUkFNRSAtIDEpL1hFTl9QQUdFU19QRVJfSU5E SVJFQ1RfRlJBTUUpCiAKIHN0YXRpYyBpbnQgYmxrZnJvbnRfc2V0dXBfaW5kaXJlY3Qoc3RydWN0 IGJsa2Zyb250X2luZm8gKmluZm8pOwogCkBAIC00NjMsMTQgKzQ3NCwxMDAgQEAgc3RhdGljIGlu dCBibGtpZl9xdWV1ZV9kaXNjYXJkX3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogCXJldHVybiAw OwogfQogCitzdHJ1Y3Qgc2V0dXBfcndfcmVxIHsKKwl1bnNpZ25lZCBpbnQgZ3JhbnRfaWR4Owor CXN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQgKnNlZ21lbnRzOworCXN0cnVjdCBibGtmcm9u dF9pbmZvICppbmZvOworCXN0cnVjdCBibGtpZl9yZXF1ZXN0ICpyaW5nX3JlcTsKKwlncmFudF9y ZWZfdCBncmVmX2hlYWQ7CisJdW5zaWduZWQgaW50IGlkOworCS8qIE9ubHkgdXNlZCB3aGVuIHBl cnNpc3RlbnQgZ3JhbnQgaXMgdXNlZCBhbmQgaXQncyBhIHJlYWQgcmVxdWVzdCAqLworCWJvb2wg bmVlZF9jb3B5OworCXVuc2lnbmVkIGludCBidmVjX29mZjsKKwljaGFyICpidmVjX2RhdGE7Cit9 OworCitzdGF0aWMgdm9pZCBibGtpZl9zZXR1cF9yd19yZXFfZ3JhbnQodW5zaWduZWQgbG9uZyBt Zm4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmxlbiwgdm9p ZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc2V0dXBfcndfcmVxICpzZXR1cCA9IGRhdGE7CisJaW50IG4s IHJlZjsKKwlzdHJ1Y3QgZ3JhbnQgKmdudF9saXN0X2VudHJ5OworCXVuc2lnbmVkIGludCBmc2Vj dCwgbHNlY3Q7CisJLyogQ29udmVuaWVudCBhbGlhc2VzICovCisJdW5zaWduZWQgaW50IGdyYW50 X2lkeCA9IHNldHVwLT5ncmFudF9pZHg7CisJc3RydWN0IGJsa2lmX3JlcXVlc3QgKnJpbmdfcmVx ID0gc2V0dXAtPnJpbmdfcmVxOworCXN0cnVjdCBibGtmcm9udF9pbmZvICppbmZvID0gc2V0dXAt PmluZm87CisJc3RydWN0IGJsa19zaGFkb3cgKnNoYWRvdyA9ICZpbmZvLT5zaGFkb3dbc2V0dXAt PmlkXTsKKworCWlmICgocmluZ19yZXEtPm9wZXJhdGlvbiA9PSBCTEtJRl9PUF9JTkRJUkVDVCkg JiYKKwkgICAgKGdyYW50X2lkeCAlIFhFTl9QQUdFU19QRVJfSU5ESVJFQ1RfRlJBTUUgPT0gMCkp IHsKKwkJaWYgKHNldHVwLT5zZWdtZW50cykKKwkJCWt1bm1hcF9hdG9taWMoc2V0dXAtPnNlZ21l bnRzKTsKKworCQluID0gZ3JhbnRfaWR4IC8gWEVOX1BBR0VTX1BFUl9JTkRJUkVDVF9GUkFNRTsK KwkJZ250X2xpc3RfZW50cnkgPSBnZXRfaW5kaXJlY3RfZ3JhbnQoJnNldHVwLT5ncmVmX2hlYWQs IGluZm8pOworCQlzaGFkb3ctPmluZGlyZWN0X2dyYW50c1tuXSA9IGdudF9saXN0X2VudHJ5Owor CQlzZXR1cC0+c2VnbWVudHMgPSBrbWFwX2F0b21pYyhnbnRfbGlzdF9lbnRyeS0+cGFnZSk7CisJ CXJpbmdfcmVxLT51LmluZGlyZWN0LmluZGlyZWN0X2dyZWZzW25dID0gZ250X2xpc3RfZW50cnkt PmdyZWY7CisJfQorCisJZ250X2xpc3RfZW50cnkgPSBnZXRfZ3JhbnQoJnNldHVwLT5ncmVmX2hl YWQsIG1mbiwgaW5mbyk7CisJcmVmID0gZ250X2xpc3RfZW50cnktPmdyZWY7CisJc2hhZG93LT5n cmFudHNfdXNlZFtncmFudF9pZHhdID0gZ250X2xpc3RfZW50cnk7CisKKwlpZiAoc2V0dXAtPm5l ZWRfY29weSkgeworCQl2b2lkICpzaGFyZWRfZGF0YTsKKworCQlzaGFyZWRfZGF0YSA9IGttYXBf YXRvbWljKGdudF9saXN0X2VudHJ5LT5wYWdlKTsKKwkJLyoKKwkJICogdGhpcyBkb2VzIG5vdCB3 aXBlIGRhdGEgc3RvcmVkIG91dHNpZGUgdGhlCisJCSAqIHJhbmdlIHNnLT5vZmZzZXQuLnNnLT5v ZmZzZXQrc2ctPmxlbmd0aC4KKwkJICogVGhlcmVmb3JlLCBibGtiYWNrICpjb3VsZCogc2VlIGRh dGEgZnJvbQorCQkgKiBwcmV2aW91cyByZXF1ZXN0cy4gVGhpcyBpcyBPSyBhcyBsb25nIGFzCisJ CSAqIHBlcnNpc3RlbnQgZ3JhbnRzIGFyZSBzaGFyZWQgd2l0aCBqdXN0IG9uZQorCQkgKiBkb21h aW4uIEl0IG1heSBuZWVkIHJlZmFjdG9yaW5nIGlmIHRoaXMKKwkJICogY2hhbmdlcworCQkgKi8K KwkJbWVtY3B5KHNoYXJlZF9kYXRhICsgb2Zmc2V0LAorCQkgICAgICAgc2V0dXAtPmJ2ZWNfZGF0 YSArIHNldHVwLT5idmVjX29mZiwKKwkJICAgICAgICpsZW4pOworCisJCWt1bm1hcF9hdG9taWMo c2hhcmVkX2RhdGEpOworCQlzZXR1cC0+YnZlY19vZmYgKz0gKmxlbjsKKwl9CisKKwlmc2VjdCA9 IG9mZnNldCA+PiA5OworCWxzZWN0ID0gZnNlY3QgKyAoKmxlbiA+PiA5KSAtIDE7CisJaWYgKHJp bmdfcmVxLT5vcGVyYXRpb24gIT0gQkxLSUZfT1BfSU5ESVJFQ1QpIHsKKwkJcmluZ19yZXEtPnUu cncuc2VnW2dyYW50X2lkeF0gPQorCQkJKHN0cnVjdCBibGtpZl9yZXF1ZXN0X3NlZ21lbnQpIHsK KwkJCQkuZ3JlZiAgICAgICA9IHJlZiwKKwkJCQkuZmlyc3Rfc2VjdCA9IGZzZWN0LAorCQkJCS5s YXN0X3NlY3QgID0gbHNlY3QgfTsKKwl9IGVsc2UgeworCQlzZXR1cC0+c2VnbWVudHNbZ3JhbnRf aWR4ICUgWEVOX1BBR0VTX1BFUl9JTkRJUkVDVF9GUkFNRV0gPQorCQkJKHN0cnVjdCBibGtpZl9y ZXF1ZXN0X3NlZ21lbnQpIHsKKwkJCQkuZ3JlZiAgICAgICA9IHJlZiwKKwkJCQkuZmlyc3Rfc2Vj dCA9IGZzZWN0LAorCQkJCS5sYXN0X3NlY3QgID0gbHNlY3QgfTsKKwl9CisKKwkoc2V0dXAtPmdy YW50X2lkeCkrKzsKK30KKwogc3RhdGljIGludCBibGtpZl9xdWV1ZV9yd19yZXEoc3RydWN0IHJl cXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbyA9IHJlcS0+cnFfZGlz ay0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBibGtpZl9yZXF1ZXN0ICpyaW5nX3JlcTsKIAl1bnNp Z25lZCBsb25nIGlkOwotCXVuc2lnbmVkIGludCBmc2VjdCwgbHNlY3Q7Ci0JaW50IGksIHJlZiwg bjsKLQlzdHJ1Y3QgYmxraWZfcmVxdWVzdF9zZWdtZW50ICpzZWdtZW50cyA9IE5VTEw7CisJaW50 IGk7CisJc3RydWN0IHNldHVwX3J3X3JlcSBzZXR1cCA9IHsKKwkJLmdyYW50X2lkeCA9IDAsCisJ CS5zZWdtZW50cyA9IE5VTEwsCisJCS5pbmZvID0gaW5mbywKKwkJLm5lZWRfY29weSA9IHJxX2Rh dGFfZGlyKHJlcSkgJiYgaW5mby0+ZmVhdHVyZV9wZXJzaXN0ZW50LAorCX07CiAKIAkvKgogCSAq IFVzZWQgdG8gc3RvcmUgaWYgd2UgYXJlIGFibGUgdG8gcXVldWUgdGhlIHJlcXVlc3QgYnkganVz dCB1c2luZwpAQCAtNDc4LDI1ICs1NzUsMjMgQEAgc3RhdGljIGludCBibGtpZl9xdWV1ZV9yd19y ZXEoc3RydWN0IHJlcXVlc3QgKnJlcSkKIAkgKiBhcyB0aGVyZSBhcmUgbm90IHN1ZmZpY2llbnRs eSBtYW55IGZyZWUuCiAJICovCiAJYm9vbCBuZXdfcGVyc2lzdGVudF9nbnRzOwotCWdyYW50X3Jl Zl90IGdyZWZfaGVhZDsKLQlzdHJ1Y3QgZ3JhbnQgKmdudF9saXN0X2VudHJ5ID0gTlVMTDsKIAlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCWludCBuc2VnLCBtYXhfZ3JlZnM7CisJaW50IG5zZWcs IG1heF9ncmVmcywgbnJfcGFnZTsKIAotCW1heF9ncmVmcyA9IHJlcS0+bnJfcGh5c19zZWdtZW50 czsKKwltYXhfZ3JlZnMgPSByZXEtPm5yX3BoeXNfc2VnbWVudHMgKiBYRU5fUEFHRVNfUEVSX1NF R01FTlQ7CiAJaWYgKG1heF9ncmVmcyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkK IAkJLyoKIAkJICogSWYgd2UgYXJlIHVzaW5nIGluZGlyZWN0IHNlZ21lbnRzIHdlIG5lZWQgdG8g YWNjb3VudAogCQkgKiBmb3IgdGhlIGluZGlyZWN0IGdyZWZzIHVzZWQgaW4gdGhlIHJlcXVlc3Qu CiAJCSAqLwotCQltYXhfZ3JlZnMgKz0gSU5ESVJFQ1RfR1JFRlMocmVxLT5ucl9waHlzX3NlZ21l bnRzKTsKKwkJbWF4X2dyZWZzICs9IElORElSRUNUX0dSRUZTKHJlcS0+bnJfcGh5c19zZWdtZW50 cyAqIFhFTl9QQUdFU19QRVJfU0VHTUVOVCk7CiAKIAkvKiBDaGVjayBpZiB3ZSBoYXZlIGVub3Vn aCBncmFudHMgdG8gYWxsb2NhdGUgYSByZXF1ZXN0cyAqLwogCWlmIChpbmZvLT5wZXJzaXN0ZW50 X2dudHNfYyA8IG1heF9ncmVmcykgewogCQluZXdfcGVyc2lzdGVudF9nbnRzID0gMTsKIAkJaWYg KGdudHRhYl9hbGxvY19ncmFudF9yZWZlcmVuY2VzKAogCQkgICAgbWF4X2dyZWZzIC0gaW5mby0+ cGVyc2lzdGVudF9nbnRzX2MsCi0JCSAgICAmZ3JlZl9oZWFkKSA8IDApIHsKKwkJICAgICZzZXR1 cC5ncmVmX2hlYWQpIDwgMCkgewogCQkJZ250dGFiX3JlcXVlc3RfZnJlZV9jYWxsYmFjaygKIAkJ CQkmaW5mby0+Y2FsbGJhY2ssCiAJCQkJYmxraWZfcmVzdGFydF9xdWV1ZV9jYWxsYmFjaywKQEAg LTUxMywxMiArNjA4LDE4IEBAIHN0YXRpYyBpbnQgYmxraWZfcXVldWVfcndfcmVxKHN0cnVjdCBy ZXF1ZXN0ICpyZXEpCiAJaW5mby0+c2hhZG93W2lkXS5yZXF1ZXN0ID0gcmVxOwogCiAJQlVHX09O KGluZm8tPm1heF9pbmRpcmVjdF9zZWdtZW50cyA9PSAwICYmCi0JICAgICAgIHJlcS0+bnJfcGh5 c19zZWdtZW50cyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCk7CisJICAgICAgIChY RU5fUEFHRVNfUEVSX1NFR01FTlQgKiByZXEtPm5yX3BoeXNfc2VnbWVudHMpID4gQkxLSUZfTUFY X1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKIAlCVUdfT04oaW5mby0+bWF4X2luZGlyZWN0X3NlZ21l bnRzICYmCi0JICAgICAgIHJlcS0+bnJfcGh5c19zZWdtZW50cyA+IGluZm8tPm1heF9pbmRpcmVj dF9zZWdtZW50cyk7CisJCShyZXEtPm5yX3BoeXNfc2VnbWVudHMgKiBYRU5fUEFHRVNfUEVSX1NF R01FTlQpID4gaW5mby0+bWF4X2luZGlyZWN0X3NlZ21lbnRzKTsKIAluc2VnID0gYmxrX3JxX21h cF9zZyhyZXEtPnEsIHJlcSwgaW5mby0+c2hhZG93W2lkXS5zZyk7CisJbnJfcGFnZSA9IDA7CisJ LyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgWGVuIHBhZ2VzIHVzZWQgKi8KKwlmb3JfZWFjaF9z ZyhpbmZvLT5zaGFkb3dbaWRdLnNnLCBzZywgbnNlZywgaSkgeworCQlucl9wYWdlICs9IChyb3Vu ZF91cChzZy0+b2Zmc2V0ICsgc2ctPmxlbmd0aCwgWEVOX1BBR0VfU0laRSkgLSByb3VuZF9kb3du KHNnLT5vZmZzZXQsIFhFTl9QQUdFX1NJWkUpKSA+PiBYRU5fUEFHRV9TSElGVDsKKwl9CiAJcmlu Z19yZXEtPnUucncuaWQgPSBpZDsKLQlpZiAobnNlZyA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJf UkVRVUVTVCkgeworCWluZm8tPnNoYWRvd1tpZF0ubnVtX3NnID0gbnNlZzsKKwlpZiAobnJfcGFn ZSA+IEJMS0lGX01BWF9TRUdNRU5UU19QRVJfUkVRVUVTVCkgewogCQkvKgogCQkgKiBUaGUgaW5k aXJlY3Qgb3BlcmF0aW9uIGNhbiBvbmx5IGJlIGEgQkxLSUZfT1BfUkVBRCBvcgogCQkgKiBCTEtJ Rl9PUF9XUklURQpAQCAtNTI5LDcgKzYzMCw3IEBAIHN0YXRpYyBpbnQgYmxraWZfcXVldWVfcndf cmVxKHN0cnVjdCByZXF1ZXN0ICpyZXEpCiAJCQlCTEtJRl9PUF9XUklURSA6IEJMS0lGX09QX1JF QUQ7CiAJCXJpbmdfcmVxLT51LmluZGlyZWN0LnNlY3Rvcl9udW1iZXIgPSAoYmxraWZfc2VjdG9y X3QpYmxrX3JxX3BvcyhyZXEpOwogCQlyaW5nX3JlcS0+dS5pbmRpcmVjdC5oYW5kbGUgPSBpbmZv LT5oYW5kbGU7Ci0JCXJpbmdfcmVxLT51LmluZGlyZWN0Lm5yX3NlZ21lbnRzID0gbnNlZzsKKwkJ cmluZ19yZXEtPnUuaW5kaXJlY3QubnJfc2VnbWVudHMgPSBucl9wYWdlOwogCX0gZWxzZSB7CiAJ CXJpbmdfcmVxLT51LnJ3LnNlY3Rvcl9udW1iZXIgPSAoYmxraWZfc2VjdG9yX3QpYmxrX3JxX3Bv cyhyZXEpOwogCQlyaW5nX3JlcS0+dS5ydy5oYW5kbGUgPSBpbmZvLT5oYW5kbGU7CkBAIC01NTcs NzMgKzY1OCwzMCBAQCBzdGF0aWMgaW50IGJsa2lmX3F1ZXVlX3J3X3JlcShzdHJ1Y3QgcmVxdWVz dCAqcmVxKQogCQkJCXJpbmdfcmVxLT5vcGVyYXRpb24gPSAwOwogCQkJfQogCQl9Ci0JCXJpbmdf cmVxLT51LnJ3Lm5yX3NlZ21lbnRzID0gbnNlZzsKKwkJcmluZ19yZXEtPnUucncubnJfc2VnbWVu dHMgPSBucl9wYWdlOwogCX0KLQlmb3JfZWFjaF9zZyhpbmZvLT5zaGFkb3dbaWRdLnNnLCBzZywg bnNlZywgaSkgewotCQlmc2VjdCA9IHNnLT5vZmZzZXQgPj4gOTsKLQkJbHNlY3QgPSBmc2VjdCAr IChzZy0+bGVuZ3RoID4+IDkpIC0gMTsKLQotCQlpZiAoKHJpbmdfcmVxLT5vcGVyYXRpb24gPT0g QkxLSUZfT1BfSU5ESVJFQ1QpICYmCi0JCSAgICAoaSAlIFNFR1NfUEVSX0lORElSRUNUX0ZSQU1F ID09IDApKSB7Ci0JCQlpZiAoc2VnbWVudHMpCi0JCQkJa3VubWFwX2F0b21pYyhzZWdtZW50cyk7 Ci0KLQkJCW4gPSBpIC8gU0VHU19QRVJfSU5ESVJFQ1RfRlJBTUU7Ci0JCQlnbnRfbGlzdF9lbnRy eSA9IGdldF9pbmRpcmVjdF9ncmFudCgmZ3JlZl9oZWFkLCBpbmZvKTsKLQkJCWluZm8tPnNoYWRv d1tpZF0uaW5kaXJlY3RfZ3JhbnRzW25dID0gZ250X2xpc3RfZW50cnk7Ci0JCQlzZWdtZW50cyA9 IGttYXBfYXRvbWljKGdudF9saXN0X2VudHJ5LT5wYWdlKTsKLQkJCXJpbmdfcmVxLT51LmluZGly ZWN0LmluZGlyZWN0X2dyZWZzW25dID0gZ250X2xpc3RfZW50cnktPmdyZWY7Ci0JCX0KIAotCQln bnRfbGlzdF9lbnRyeSA9IGdldF9ncmFudCgmZ3JlZl9oZWFkLAotCQkJCQkgICBwYWdlX3RvX21m bihzZ19wYWdlKHNnKSksCi0JCQkJCSAgIGluZm8pOwotCQlyZWYgPSBnbnRfbGlzdF9lbnRyeS0+ Z3JlZjsKLQotCQlpbmZvLT5zaGFkb3dbaWRdLmdyYW50c191c2VkW2ldID0gZ250X2xpc3RfZW50 cnk7Ci0KLQkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgJiYgaW5mby0+ZmVhdHVyZV9wZXJzaXN0ZW50 KSB7Ci0JCQljaGFyICpidmVjX2RhdGE7Ci0JCQl2b2lkICpzaGFyZWRfZGF0YTsKLQotCQkJQlVH X09OKHNnLT5vZmZzZXQgKyBzZy0+bGVuZ3RoID4gUEFHRV9TSVpFKTsKKwlzZXR1cC5yaW5nX3Jl cSA9IHJpbmdfcmVxOworCXNldHVwLmlkID0gaWQ7CisJZm9yX2VhY2hfc2coaW5mby0+c2hhZG93 W2lkXS5zZywgc2csIG5zZWcsIGkpIHsKKwkJQlVHX09OKHNnLT5vZmZzZXQgKyBzZy0+bGVuZ3Ro ID4gUEFHRV9TSVpFKTsKIAotCQkJc2hhcmVkX2RhdGEgPSBrbWFwX2F0b21pYyhnbnRfbGlzdF9l bnRyeS0+cGFnZSk7Ci0JCQlidmVjX2RhdGEgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSk7CisJ CWlmIChzZXR1cC5uZWVkX2NvcHkpIHsKKwkJCXNldHVwLmJ2ZWNfb2ZmID0gc2ctPm9mZnNldDsK KwkJCXNldHVwLmJ2ZWNfZGF0YSA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpKTsKKwkJfQogCi0J CQkvKgotCQkJICogdGhpcyBkb2VzIG5vdCB3aXBlIGRhdGEgc3RvcmVkIG91dHNpZGUgdGhlCi0J CQkgKiByYW5nZSBzZy0+b2Zmc2V0Li5zZy0+b2Zmc2V0K3NnLT5sZW5ndGguCi0JCQkgKiBUaGVy ZWZvcmUsIGJsa2JhY2sgKmNvdWxkKiBzZWUgZGF0YSBmcm9tCi0JCQkgKiBwcmV2aW91cyByZXF1 ZXN0cy4gVGhpcyBpcyBPSyBhcyBsb25nIGFzCi0JCQkgKiBwZXJzaXN0ZW50IGdyYW50cyBhcmUg c2hhcmVkIHdpdGgganVzdCBvbmUKLQkJCSAqIGRvbWFpbi4gSXQgbWF5IG5lZWQgcmVmYWN0b3Jp bmcgaWYgdGhpcwotCQkJICogY2hhbmdlcwotCQkJICovCi0JCQltZW1jcHkoc2hhcmVkX2RhdGEg KyBzZy0+b2Zmc2V0LAotCQkJICAgICAgIGJ2ZWNfZGF0YSAgICsgc2ctPm9mZnNldCwKLQkJCSAg ICAgICBzZy0+bGVuZ3RoKTsKKwkJZ250dGFiX2ZvcmVhY2hfZ3JhbnQoc2dfcGFnZShzZyksCisJ CQkJICAgICBzZy0+b2Zmc2V0LAorCQkJCSAgICAgc2ctPmxlbmd0aCwKKwkJCQkgICAgIGJsa2lm X3NldHVwX3J3X3JlcV9ncmFudCwKKwkJCQkgICAgICZzZXR1cCk7CiAKLQkJCWt1bm1hcF9hdG9t aWMoYnZlY19kYXRhKTsKLQkJCWt1bm1hcF9hdG9taWMoc2hhcmVkX2RhdGEpOwotCQl9Ci0JCWlm IChyaW5nX3JlcS0+b3BlcmF0aW9uICE9IEJMS0lGX09QX0lORElSRUNUKSB7Ci0JCQlyaW5nX3Jl cS0+dS5ydy5zZWdbaV0gPQotCQkJCQkoc3RydWN0IGJsa2lmX3JlcXVlc3Rfc2VnbWVudCkgewot CQkJCQkJLmdyZWYgICAgICAgPSByZWYsCi0JCQkJCQkuZmlyc3Rfc2VjdCA9IGZzZWN0LAotCQkJ CQkJLmxhc3Rfc2VjdCAgPSBsc2VjdCB9OwotCQl9IGVsc2UgewotCQkJbiA9IGkgJSBTRUdTX1BF Ul9JTkRJUkVDVF9GUkFNRTsKLQkJCXNlZ21lbnRzW25dID0KLQkJCQkoc3RydWN0IGJsa2lmX3Jl cXVlc3Rfc2VnbWVudCkgewotCQkJCQkJLmdyZWYgICAgICAgPSByZWYsCi0JCQkJCQkuZmlyc3Rf c2VjdCA9IGZzZWN0LAotCQkJCQkJLmxhc3Rfc2VjdCAgPSBsc2VjdCB9OwotCQl9CisJCWlmIChz ZXR1cC5uZWVkX2NvcHkpCisJCQlrdW5tYXBfYXRvbWljKHNldHVwLmJ2ZWNfZGF0YSk7CiAJfQot CWlmIChzZWdtZW50cykKLQkJa3VubWFwX2F0b21pYyhzZWdtZW50cyk7CisJaWYgKHNldHVwLnNl Z21lbnRzKQorCQlrdW5tYXBfYXRvbWljKHNldHVwLnNlZ21lbnRzKTsKIAogCWluZm8tPnJpbmcu cmVxX3Byb2RfcHZ0Kys7CiAKQEAgLTYzMSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IGJsa2lmX3F1 ZXVlX3J3X3JlcShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogCWluZm8tPnNoYWRvd1tpZF0ucmVxID0g KnJpbmdfcmVxOwogCiAJaWYgKG5ld19wZXJzaXN0ZW50X2dudHMpCi0JCWdudHRhYl9mcmVlX2dy YW50X3JlZmVyZW5jZXMoZ3JlZl9oZWFkKTsKKwkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNl cyhzZXR1cC5ncmVmX2hlYWQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDgsMTQgKzgwNiwxNCBA QCBzdGF0aWMgaW50IHhsdmJkX2luaXRfYmxrX3F1ZXVlKHN0cnVjdCBnZW5kaXNrICpnZCwgdTE2 IHNlY3Rvcl9zaXplLAogCS8qIEhhcmQgc2VjdG9yIHNpemUgYW5kIG1heCBzZWN0b3JzIGltcGVy c29uYXRlIHRoZSBlcXVpdi4gaGFyZHdhcmUuICovCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tf c2l6ZShycSwgc2VjdG9yX3NpemUpOwogCWJsa19xdWV1ZV9waHlzaWNhbF9ibG9ja19zaXplKHJx LCBwaHlzaWNhbF9zZWN0b3Jfc2l6ZSk7Ci0JYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHJxLCAo c2VnbWVudHMgKiBQQUdFX1NJWkUpIC8gNTEyKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMo cnEsIChzZWdtZW50cyAqIFhFTl9QQUdFX1NJWkUpIC8gNTEyKTsKIAogCS8qIEVhY2ggc2VnbWVu dCBpbiBhIHJlcXVlc3QgaXMgdXAgdG8gYW4gYWxpZ25lZCBwYWdlIGluIHNpemUuICovCiAJYmxr X3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocnEsIFBBR0VfU0laRSAtIDEpOwogCWJsa19xdWV1ZV9t YXhfc2VnbWVudF9zaXplKHJxLCBQQUdFX1NJWkUpOwogCiAJLyogRW5zdXJlIGEgbWVyZ2VkIHJl cXVlc3Qgd2lsbCBmaXQgaW4gYSBzaW5nbGUgSS9PIHJpbmcgc2xvdC4gKi8KLQlibGtfcXVldWVf bWF4X3NlZ21lbnRzKHJxLCBzZWdtZW50cyk7CisJYmxrX3F1ZXVlX21heF9zZWdtZW50cyhycSwg c2VnbWVudHMgLyBYRU5fUEFHRVNfUEVSX1NFR01FTlQpOwogCiAJLyogTWFrZSBzdXJlIGJ1ZmZl ciBhZGRyZXNzZXMgYXJlIHNlY3Rvci1hbGlnbmVkLiAqLwogCWJsa19xdWV1ZV9kbWFfYWxpZ25t ZW50KHJxLCA1MTEpOwpAQCAtMTEyMCwzMiArMTE3OCw2NSBAQCBmcmVlX3NoYWRvdzoKIAogfQog CitzdHJ1Y3QgY29weV9mcm9tX2dyYW50IHsKKwljb25zdCBzdHJ1Y3QgYmxrX3NoYWRvdyAqczsK Kwl1bnNpZ25lZCBpbnQgZ3JhbnRfaWR4OworCXVuc2lnbmVkIGludCBidmVjX29mZnNldDsKKwlj aGFyICpidmVjX2RhdGE7Cit9OworCitzdGF0aWMgdm9pZCBibGtpZl9jb3B5X2Zyb21fZ3JhbnQo dW5zaWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBp bnQgKmxlbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29weV9mcm9tX2dyYW50ICppbmZvID0g ZGF0YTsKKwljaGFyICpzaGFyZWRfZGF0YTsKKwkvKiBDb252ZW5pZW50IGFsaWFzZXMgKi8KKwlj b25zdCBzdHJ1Y3QgYmxrX3NoYWRvdyAqcyA9IGluZm8tPnM7CisKKwlzaGFyZWRfZGF0YSA9IGtt YXBfYXRvbWljKHMtPmdyYW50c191c2VkW2luZm8tPmdyYW50X2lkeF0tPnBhZ2UpOworCisJbWVt Y3B5KGluZm8tPmJ2ZWNfZGF0YSArIGluZm8tPmJ2ZWNfb2Zmc2V0LAorCSAgICAgICBzaGFyZWRf ZGF0YSArIG9mZnNldCwgKmxlbik7CisKKwlpbmZvLT5idmVjX29mZnNldCArPSAqbGVuOworCWlu Zm8tPmdyYW50X2lkeCsrOworCisJa3VubWFwX2F0b21pYyhzaGFyZWRfZGF0YSk7Cit9CisKIHN0 YXRpYyB2b2lkIGJsa2lmX2NvbXBsZXRpb24oc3RydWN0IGJsa19zaGFkb3cgKnMsIHN0cnVjdCBi bGtmcm9udF9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgYmxraWZfcmVzcG9uc2UgKmJyZXQp CiB7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JY2hhciAqYnZlY19k YXRhOwotCXZvaWQgKnNoYXJlZF9kYXRhOwotCWludCBuc2VnOworCWludCBuc2VnLCBucl9wYWdl OworCXN0cnVjdCBjb3B5X2Zyb21fZ3JhbnQgZGF0YSA9IHsKKwkJLnMgPSBzLAorCQkuZ3JhbnRf aWR4ID0gMCwKKwl9OwogCi0JbnNlZyA9IHMtPnJlcS5vcGVyYXRpb24gPT0gQkxLSUZfT1BfSU5E SVJFQ1QgPworCW5yX3BhZ2UgPSBzLT5yZXEub3BlcmF0aW9uID09IEJMS0lGX09QX0lORElSRUNU ID8KIAkJcy0+cmVxLnUuaW5kaXJlY3QubnJfc2VnbWVudHMgOiBzLT5yZXEudS5ydy5ucl9zZWdt ZW50czsKKwluc2VnID0gcy0+bnVtX3NnOwogCiAJaWYgKGJyZXQtPm9wZXJhdGlvbiA9PSBCTEtJ Rl9PUF9SRUFEICYmIGluZm8tPmZlYXR1cmVfcGVyc2lzdGVudCkgewogCQlmb3JfZWFjaF9zZyhz LT5zZywgc2csIG5zZWcsIGkpIHsKIAkJCUJVR19PTihzZy0+b2Zmc2V0ICsgc2ctPmxlbmd0aCA+ IFBBR0VfU0laRSk7Ci0JCQlzaGFyZWRfZGF0YSA9IGttYXBfYXRvbWljKHMtPmdyYW50c191c2Vk W2ldLT5wYWdlKTsKLQkJCWJ2ZWNfZGF0YSA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpKTsKLQkJ CW1lbWNweShidmVjX2RhdGEgICArIHNnLT5vZmZzZXQsCi0JCQkgICAgICAgc2hhcmVkX2RhdGEg KyBzZy0+b2Zmc2V0LAotCQkJICAgICAgIHNnLT5sZW5ndGgpOwotCQkJa3VubWFwX2F0b21pYyhi dmVjX2RhdGEpOwotCQkJa3VubWFwX2F0b21pYyhzaGFyZWRfZGF0YSk7CisKKwkJCWRhdGEuYnZl Y19vZmZzZXQgPSBzZy0+b2Zmc2V0OworCQkJZGF0YS5idmVjX2RhdGEgPSBrbWFwX2F0b21pYyhz Z19wYWdlKHNnKSk7CisKKwkJCWdudHRhYl9mb3JlYWNoX2dyYW50KHNnX3BhZ2Uoc2cpLAorCQkJ CQkgICAgIHNnLT5vZmZzZXQsCisJCQkJCSAgICAgc2ctPmxlbmd0aCwKKwkJCQkJICAgICBibGtp Zl9jb3B5X2Zyb21fZ3JhbnQsCisJCQkJCSAgICAgJmRhdGEpOworCisJCQlrdW5tYXBfYXRvbWlj KGRhdGEuYnZlY19kYXRhKTsKIAkJfQogCX0KIAkvKiBBZGQgdGhlIHBlcnNpc3RlbnQgZ3JhbnQg aW50byB0aGUgbGlzdCBvZiBmcmVlIGdyYW50cyAqLwotCWZvciAoaSA9IDA7IGkgPCBuc2VnOyBp KyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZTsgaSsrKSB7CiAJCWlmIChnbnR0YWJfcXVl cnlfZm9yZWlnbl9hY2Nlc3Mocy0+Z3JhbnRzX3VzZWRbaV0tPmdyZWYpKSB7CiAJCQkvKgogCQkJ ICogSWYgdGhlIGdyYW50IGlzIHN0aWxsIG1hcHBlZCBieSB0aGUgYmFja2VuZCAodGhlCkBAIC0x MTcxLDcgKzEyNjIsNyBAQCBzdGF0aWMgdm9pZCBibGtpZl9jb21wbGV0aW9uKHN0cnVjdCBibGtf c2hhZG93ICpzLCBzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbywKIAkJfQogCX0KIAlpZiAocy0+ cmVxLm9wZXJhdGlvbiA9PSBCTEtJRl9PUF9JTkRJUkVDVCkgewotCQlmb3IgKGkgPSAwOyBpIDwg SU5ESVJFQ1RfR1JFRlMobnNlZyk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgSU5ESVJFQ1Rf R1JFRlMobnJfcGFnZSk7IGkrKykgewogCQkJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vz cyhzLT5pbmRpcmVjdF9ncmFudHNbaV0tPmdyZWYpKSB7CiAJCQkJaWYgKCFpbmZvLT5mZWF0dXJl X3BlcnNpc3RlbnQpCiAJCQkJCXByX2FsZXJ0X3JhdGVsaW1pdGVkKCJiYWNrZWQgaGFzIG5vdCB1 bm1hcHBlZCBncmFudDogJXVcbiIsCkBAIC0xMzE0LDcgKzE0MDUsNyBAQCBzdGF0aWMgaW50IHNl dHVwX2Jsa3Jpbmcoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgYmxraWZf c3JpbmcgKnNyaW5nOwogCWludCBlcnIsIGk7Ci0JdW5zaWduZWQgbG9uZyByaW5nX3NpemUgPSBp bmZvLT5ucl9yaW5nX3BhZ2VzICogUEFHRV9TSVpFOworCXVuc2lnbmVkIGxvbmcgcmluZ19zaXpl ID0gaW5mby0+bnJfcmluZ19wYWdlcyAqIFhFTl9QQUdFX1NJWkU7CiAJZ3JhbnRfcmVmX3QgZ3Jl ZltYRU5CVVNfTUFYX1JJTkdfUEFHRVNdOwogCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX3Jp bmdfcGFnZXM7IGkrKykKQEAgLTE2NjYsOCArMTc1Nyw4IEBAIHN0YXRpYyBpbnQgYmxraWZfcmVj b3ZlcihzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbykKIAkJCWF0b21pY19zZXQoJnNwbGl0X2Jp by0+cGVuZGluZywgcGVuZGluZyk7CiAJCQlzcGxpdF9iaW8tPmJpbyA9IGJpbzsKIAkJCWZvciAo aSA9IDA7IGkgPCBwZW5kaW5nOyBpKyspIHsKLQkJCQlvZmZzZXQgPSAoaSAqIHNlZ3MgKiBQQUdF X1NJWkUpID4+IDk7Ci0JCQkJc2l6ZSA9IG1pbigodW5zaWduZWQgaW50KShzZWdzICogUEFHRV9T SVpFKSA+PiA5LAorCQkJCW9mZnNldCA9IChpICogc2VncyAqIFhFTl9QQUdFX1NJWkUpID4+IDk7 CisJCQkJc2l6ZSA9IG1pbigodW5zaWduZWQgaW50KShzZWdzICogWEVOX1BBR0VfU0laRSkgPj4g OSwKIAkJCQkJICAgKHVuc2lnbmVkIGludCliaW9fc2VjdG9ycyhiaW8pIC0gb2Zmc2V0KTsKIAkJ CQljbG9uZWRfYmlvID0gYmlvX2Nsb25lKGJpbywgR0ZQX05PSU8pOwogCQkJCUJVR19PTihjbG9u ZWRfYmlvID09IE5VTEwpOwpAQCAtMTc3OCw3ICsxODY5LDcgQEAgc3RhdGljIHZvaWQgYmxrZnJv bnRfc2V0dXBfZGlzY2FyZChzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbykKIAogc3RhdGljIGlu dCBibGtmcm9udF9zZXR1cF9pbmRpcmVjdChzdHJ1Y3QgYmxrZnJvbnRfaW5mbyAqaW5mbykKIHsK LQl1bnNpZ25lZCBpbnQgaW5kaXJlY3Rfc2VnbWVudHMsIHNlZ3M7CisJdW5zaWduZWQgaW50IGlu ZGlyZWN0X3NlZ21lbnRzLCBzZWdzLCBucl9wYWdlOwogCWludCBlcnIsIGk7CiAKIAllcnIgPSB4 ZW5idXNfZ2F0aGVyKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5vdGhlcmVuZCwKQEAgLTE3ODYsMTQg KzE4NzcsMTUgQEAgc3RhdGljIGludCBibGtmcm9udF9zZXR1cF9pbmRpcmVjdChzdHJ1Y3QgYmxr ZnJvbnRfaW5mbyAqaW5mbykKIAkJCSAgICBOVUxMKTsKIAlpZiAoZXJyKSB7CiAJCWluZm8tPm1h eF9pbmRpcmVjdF9zZWdtZW50cyA9IDA7Ci0JCXNlZ3MgPSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVS X1JFUVVFU1Q7CisJCW5yX3BhZ2UgPSBCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1Q7CiAJ fSBlbHNlIHsKIAkJaW5mby0+bWF4X2luZGlyZWN0X3NlZ21lbnRzID0gbWluKGluZGlyZWN0X3Nl Z21lbnRzLAogCQkJCQkJICB4ZW5fYmxraWZfbWF4X3NlZ21lbnRzKTsKLQkJc2VncyA9IGluZm8t Pm1heF9pbmRpcmVjdF9zZWdtZW50czsKKwkgICAgbnJfcGFnZSA9IGluZm8tPm1heF9pbmRpcmVj dF9zZWdtZW50czsKIAl9CisJc2VncyA9IG5yX3BhZ2UgLyBYRU5fUEFHRVNfUEVSX1NFR01FTlQ7 CiAKLQllcnIgPSBmaWxsX2dyYW50X2J1ZmZlcihpbmZvLCAoc2VncyArIElORElSRUNUX0dSRUZT KHNlZ3MpKSAqIEJMS19SSU5HX1NJWkUoaW5mbykpOworCWVyciA9IGZpbGxfZ3JhbnRfYnVmZmVy KGluZm8sIChucl9wYWdlICsgSU5ESVJFQ1RfR1JFRlMobnJfcGFnZSkpICogQkxLX1JJTkdfU0la RShpbmZvKSk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfb2ZfbWVtb3J5OwogCkBAIC0xODAzLDcg KzE4OTUsNyBAQCBzdGF0aWMgaW50IGJsa2Zyb250X3NldHVwX2luZGlyZWN0KHN0cnVjdCBibGtm cm9udF9pbmZvICppbmZvKQogCQkgKiBncmFudHMsIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBzZXQg b2YgcGFnZXMgdGhhdCBjYW4gYmUKIAkJICogdXNlZCBmb3IgbWFwcGluZyBpbmRpcmVjdCBncmVm cwogCQkgKi8KLQkJaW50IG51bSA9IElORElSRUNUX0dSRUZTKHNlZ3MpICogQkxLX1JJTkdfU0la RShpbmZvKTsKKwkJaW50IG51bSA9IElORElSRUNUX0dSRUZTKG5yX3BhZ2UpICogQkxLX1JJTkdf U0laRShpbmZvKTsKIAogCQlCVUdfT04oIWxpc3RfZW1wdHkoJmluZm8tPmluZGlyZWN0X3BhZ2Vz KSk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewpAQCAtMTgxNiwxMyArMTkwOCwxMyBA QCBzdGF0aWMgaW50IGJsa2Zyb250X3NldHVwX2luZGlyZWN0KHN0cnVjdCBibGtmcm9udF9pbmZv ICppbmZvKQogCiAJZm9yIChpID0gMDsgaSA8IEJMS19SSU5HX1NJWkUoaW5mbyk7IGkrKykgewog CQlpbmZvLT5zaGFkb3dbaV0uZ3JhbnRzX3VzZWQgPSBremFsbG9jKAotCQkJc2l6ZW9mKGluZm8t PnNoYWRvd1tpXS5ncmFudHNfdXNlZFswXSkgKiBzZWdzLAorCQkJc2l6ZW9mKGluZm8tPnNoYWRv d1tpXS5ncmFudHNfdXNlZFswXSkgKiBucl9wYWdlLAogCQkJR0ZQX05PSU8pOwogCQlpbmZvLT5z aGFkb3dbaV0uc2cgPSBremFsbG9jKHNpemVvZihpbmZvLT5zaGFkb3dbaV0uc2dbMF0pICogc2Vn cywgR0ZQX05PSU8pOwogCQlpZiAoaW5mby0+bWF4X2luZGlyZWN0X3NlZ21lbnRzKQogCQkJaW5m by0+c2hhZG93W2ldLmluZGlyZWN0X2dyYW50cyA9IGt6YWxsb2MoCiAJCQkJc2l6ZW9mKGluZm8t PnNoYWRvd1tpXS5pbmRpcmVjdF9ncmFudHNbMF0pICoKLQkJCQlJTkRJUkVDVF9HUkVGUyhzZWdz KSwKKwkJCQlJTkRJUkVDVF9HUkVGUyhucl9wYWdlKSwKIAkJCQlHRlBfTk9JTyk7CiAJCWlmICgo aW5mby0+c2hhZG93W2ldLmdyYW50c191c2VkID09IE5VTEwpIHx8CiAJCQkoaW5mby0+c2hhZG93 W2ldLnNnID09IE5VTEwpIHx8Ci0tIAoyLjEuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==