From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Tyshchenko Subject: [PATCH v2 13/13] [RFC] iommu: AMD-Vi: Squash map_pages/unmap_pages with map_page/unmap_page Date: Tue, 25 Jul 2017 20:26:55 +0300 Message-ID: <1501003615-15274-14-git-send-email-olekstysh@gmail.com> References: <1501003615-15274-1-git-send-email-olekstysh@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1da3cE-0000DC-TA for xen-devel@lists.xenproject.org; Tue, 25 Jul 2017 17:27:27 +0000 Received: by mail-lf0-f68.google.com with SMTP id 65so1225247lfa.0 for ; Tue, 25 Jul 2017 10:27:25 -0700 (PDT) In-Reply-To: <1501003615-15274-1-git-send-email-olekstysh@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Oleksandr Tyshchenko , Suravee Suthikulpanit , Jan Beulich List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtvQGVwYW0uY29t PgoKUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgVE9ETyBieSBzcXVhc2hpbmcgc2luZ2xlLXBhZ2Ug c3R1ZmYgd2l0aAptdWx0aS1wYWdlIG9uZS4gTmV4dCB0YXJnZXQgaXMgdG8gdXNlIGxhcmdlIHBh Z2VzIHdoZW5ldmVyIHBvc3NpYmxlCmluIHRoZSBjYXNlIHRoYXQgaGFyZHdhcmUgc3VwcG9ydHMg dGhlbS4KClNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBUeXNoY2hlbmtvIDxvbGVrc2FuZHJfdHlz aGNoZW5rb0BlcGFtLmNvbT4KQ0M6IEphbiBCZXVsaWNoIDxqYmV1bGljaEBzdXNlLmNvbT4KQ0M6 IFN1cmF2ZWUgU3V0aGlrdWxwYW5pdCA8c3VyYXZlZS5zdXRoaWt1bHBhbml0QGFtZC5jb20+Cgot LS0KICAgQ2hhbmdlcyBpbiB2MToKICAgICAgLQoKICAgQ2hhbmdlcyBpbiB2MjoKICAgICAgLQoK U2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIFR5c2hjaGVua28gPG9sZWtzYW5kcl90eXNoY2hlbmtv QGVwYW0uY29tPgotLS0KIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9tYXAuYyB8 IDI1MCArKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEy MSBpbnNlcnRpb25zKCspLCAxMjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11X21hcC5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv YW1kL2lvbW11X21hcC5jCmluZGV4IGVhM2E3MjguLjIyZDBjYzYgMTAwNjQ0Ci0tLSBhL3hlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9tYXAuYworKysgYi94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMKQEAgLTYzMSwxODggKzYzMSwxODAgQEAgc3RhdGljIGlu dCB1cGRhdGVfcGFnaW5nX21vZGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4p CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFtZF9pb21tdV9t YXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1mbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3Mp CisvKgorICogVE9ETzogT3B0aW1pemUgYnkgdXNpbmcgbGFyZ2UgcGFnZXMgd2hlbmV2ZXIgcG9z c2libGUgaW4gdGhlIGNhc2UKKyAqIHRoYXQgaGFyZHdhcmUgc3VwcG9ydHMgdGhlbS4KKyAqLwor aW50IF9fbXVzdF9jaGVjayBhbWRfaW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBkb21haW4gKmQsIHVu c2lnbmVkIGxvbmcgZ2ZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0gICAgYm9vbF90IG5lZWRfZmx1c2ggPSAwOwogICAgIHN0 cnVjdCBkb21haW5faW9tbXUgKmhkID0gZG9tX2lvbW11KGQpOwogICAgIGludCByYzsKLSAgICB1 bnNpZ25lZCBsb25nIHB0X21mbls3XTsKLSAgICB1bnNpZ25lZCBpbnQgbWVyZ2VfbGV2ZWw7Cisg ICAgdW5zaWduZWQgbG9uZyBvcmlnX2dmbiA9IGdmbjsKKyAgICB1bnNpZ25lZCBsb25nIGk7CiAK ICAgICBpZiAoIGlvbW11X3VzZV9oYXBfcHQoZCkgKQogICAgICAgICByZXR1cm4gMDsKIAotICAg IG1lbXNldChwdF9tZm4sIDAsIHNpemVvZihwdF9tZm4pKTsKLQogICAgIHNwaW5fbG9jaygmaGQt PmFyY2gubWFwcGluZ19sb2NrKTsKLQogICAgIHJjID0gYW1kX2lvbW11X2FsbG9jX3Jvb3QoaGQp OworICAgIHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwogICAgIGlmICggcmMg KQogICAgIHsKLSAgICAgICAgc3Bpbl91bmxvY2soJmhkLT5hcmNoLm1hcHBpbmdfbG9jayk7CiAg ICAgICAgIEFNRF9JT01NVV9ERUJVRygiUm9vdCB0YWJsZSBhbGxvYyBmYWlsZWQsIGdmbiA9ICVs eFxuIiwgZ2ZuKTsKICAgICAgICAgZG9tYWluX2NyYXNoKGQpOwogICAgICAgICByZXR1cm4gcmM7 CiAgICAgfQogCi0gICAgLyogU2luY2UgSFZNIGRvbWFpbiBpcyBpbml0aWFsaXplZCB3aXRoIDIg bGV2ZWwgSU8gcGFnZSB0YWJsZSwKLSAgICAgKiB3ZSBtaWdodCBuZWVkIGEgZGVlcGVyIHBhZ2Ug dGFibGUgZm9yIGxhZ2VyIGdmbiBub3cgKi8KLSAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQor ICAgIGZvciAoIGkgPSAwOyBpIDwgKDFVTCA8PCBvcmRlcik7IGkrKywgZ2ZuKyssIG1mbisrICkK ICAgICB7Ci0gICAgICAgIGlmICggdXBkYXRlX3BhZ2luZ19tb2RlKGQsIGdmbikgKQorICAgICAg ICBib29sX3QgbmVlZF9mbHVzaCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcHRfbWZuWzdd OworICAgICAgICB1bnNpZ25lZCBpbnQgbWVyZ2VfbGV2ZWw7CisKKyAgICAgICAgbWVtc2V0KHB0 X21mbiwgMCwgc2l6ZW9mKHB0X21mbikpOworCisgICAgICAgIHNwaW5fbG9jaygmaGQtPmFyY2gu bWFwcGluZ19sb2NrKTsKKworICAgICAgICAvKiBTaW5jZSBIVk0gZG9tYWluIGlzIGluaXRpYWxp emVkIHdpdGggMiBsZXZlbCBJTyBwYWdlIHRhYmxlLAorICAgICAgICAgKiB3ZSBtaWdodCBuZWVk IGEgZGVlcGVyIHBhZ2UgdGFibGUgZm9yIGxhZ2VyIGdmbiBub3cgKi8KKyAgICAgICAgaWYgKCBp c19odm1fZG9tYWluKGQpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB1cGRhdGVfcGFn aW5nX21vZGUoZCwgZ2ZuKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Bpbl91 bmxvY2soJmhkLT5hcmNoLm1hcHBpbmdfbG9jayk7CisgICAgICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCJVcGRhdGUgcGFnZSBtb2RlIGZhaWxlZCBnZm4gPSAlbHhcbiIsIGdmbik7CisgICAg ICAgICAgICAgICAgZG9tYWluX2NyYXNoKGQpOworICAgICAgICAgICAgICAgIHJjID0gLUVGQVVM VDsKKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIGlmICggaW9tbXVfcGRlX2Zyb21fZ2ZuKGQsIGdmbiwgcHRfbWZuKSB8fCAocHRf bWZuWzFdID09IDApICkKICAgICAgICAgewogICAgICAgICAgICAgc3Bpbl91bmxvY2soJmhkLT5h cmNoLm1hcHBpbmdfbG9jayk7Ci0gICAgICAgICAgICBBTURfSU9NTVVfREVCVUcoIlVwZGF0ZSBw YWdlIG1vZGUgZmFpbGVkIGdmbiA9ICVseFxuIiwgZ2ZuKTsKKyAgICAgICAgICAgIEFNRF9JT01N VV9ERUJVRygiSW52YWxpZCBJTyBwYWdldGFibGUgZW50cnkgZ2ZuID0gJWx4XG4iLCBnZm4pOwog ICAgICAgICAgICAgZG9tYWluX2NyYXNoKGQpOwotICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 CisgICAgICAgICAgICByYyA9IC1FRkFVTFQ7CisgICAgICAgICAgICBnb3RvIGVycjsKICAgICAg ICAgfQotICAgIH0KIAotICAgIGlmICggaW9tbXVfcGRlX2Zyb21fZ2ZuKGQsIGdmbiwgcHRfbWZu KSB8fCAocHRfbWZuWzFdID09IDApICkKLSAgICB7Ci0gICAgICAgIHNwaW5fdW5sb2NrKCZoZC0+ YXJjaC5tYXBwaW5nX2xvY2spOwotICAgICAgICBBTURfSU9NTVVfREVCVUcoIkludmFsaWQgSU8g cGFnZXRhYmxlIGVudHJ5IGdmbiA9ICVseFxuIiwgZ2ZuKTsKLSAgICAgICAgZG9tYWluX2NyYXNo KGQpOwotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9CisgICAgICAgIC8qIEluc3RhbGwg NGsgbWFwcGluZyBmaXJzdCAqLworICAgICAgICBuZWVkX2ZsdXNoID0gc2V0X2lvbW11X3B0ZV9w cmVzZW50KHB0X21mblsxXSwgZ2ZuLCBtZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgSU9NTVVfUEFHSU5HX01PREVfTEVWRUxfMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIShmbGFncyAmIElPTU1VRl93cml0YWJsZSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEoZmxhZ3MgJiBJ T01NVUZfcmVhZGFibGUpKTsKIAotICAgIC8qIEluc3RhbGwgNGsgbWFwcGluZyBmaXJzdCAqLwot ICAgIG5lZWRfZmx1c2ggPSBzZXRfaW9tbXVfcHRlX3ByZXNlbnQocHRfbWZuWzFdLCBnZm4sIG1m biwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT01NVV9QQUdJTkdf TU9ERV9MRVZFTF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEo ZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgISEoZmxhZ3MgJiBJT01NVUZfcmVhZGFibGUpKTsKKyAgICAgICAgLyogRG8gbm90 IGluY3JlYXNlIHBkZSBjb3VudCBpZiBpbyBtYXBwaW5nIGhhcyBub3QgYmVlbiBjaGFuZ2VkICov CisgICAgICAgIGlmICggIW5lZWRfZmx1c2ggKQorICAgICAgICB7CisgICAgICAgICAgICBzcGlu X3VubG9jaygmaGQtPmFyY2gubWFwcGluZ19sb2NrKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor ICAgICAgICB9CiAKLSAgICAvKiBEbyBub3QgaW5jcmVhc2UgcGRlIGNvdW50IGlmIGlvIG1hcHBp bmcgaGFzIG5vdCBiZWVuIGNoYW5nZWQgKi8KLSAgICBpZiAoICFuZWVkX2ZsdXNoICkKLSAgICAg ICAgZ290byBvdXQ7CisgICAgICAgIC8qIDRLIG1hcHBpbmcgZm9yIFBWIGd1ZXN0cyBuZXZlciBj aGFuZ2VzLAorICAgICAgICAgKiBubyBuZWVkIHRvIGZsdXNoIGlmIHdlIHRydXN0IG5vbi1wcmVz ZW50IGJpdHMgKi8KKyAgICAgICAgaWYgKCBpc19odm1fZG9tYWluKGQpICkKKyAgICAgICAgICAg IGFtZF9pb21tdV9mbHVzaF9wYWdlcyhkLCBnZm4sIDApOwogCi0gICAgLyogNEsgbWFwcGluZyBm b3IgUFYgZ3Vlc3RzIG5ldmVyIGNoYW5nZXMsIAotICAgICAqIG5vIG5lZWQgdG8gZmx1c2ggaWYg d2UgdHJ1c3Qgbm9uLXByZXNlbnQgYml0cyAqLwotICAgIGlmICggaXNfaHZtX2RvbWFpbihkKSAp Ci0gICAgICAgIGFtZF9pb21tdV9mbHVzaF9wYWdlcyhkLCBnZm4sIDApOwotCi0gICAgZm9yICgg bWVyZ2VfbGV2ZWwgPSBJT01NVV9QQUdJTkdfTU9ERV9MRVZFTF8yOwotICAgICAgICAgIG1lcmdl X2xldmVsIDw9IGhkLT5hcmNoLnBhZ2luZ19tb2RlOyBtZXJnZV9sZXZlbCsrICkKLSAgICB7Ci0g ICAgICAgIGlmICggcHRfbWZuW21lcmdlX2xldmVsXSA9PSAwICkKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICBpZiAoICFpb21tdV91cGRhdGVfcGRlX2NvdW50KGQsIHB0X21mblttZXJnZV9s ZXZlbF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZuLCBtZm4sIG1l cmdlX2xldmVsKSApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoIGlvbW11X21l cmdlX3BhZ2VzKGQsIHB0X21mblttZXJnZV9sZXZlbF0sIGdmbiwgCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZmxhZ3MsIG1lcmdlX2xldmVsKSApCisgICAgICAgIGZvciAoIG1lcmdl X2xldmVsID0gSU9NTVVfUEFHSU5HX01PREVfTEVWRUxfMjsKKyAgICAgICAgICAgICAgbWVyZ2Vf bGV2ZWwgPD0gaGQtPmFyY2gucGFnaW5nX21vZGU7IG1lcmdlX2xldmVsKysgKQogICAgICAgICB7 Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmaGQtPmFyY2gubWFwcGluZ19sb2NrKTsKLSAgICAg ICAgICAgIEFNRF9JT01NVV9ERUJVRygiTWVyZ2UgaW9tbXUgcGFnZSBmYWlsZWQgYXQgbGV2ZWwg JWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2ZuID0gJWx4IG1mbiA9ICVseFxu IiwgbWVyZ2VfbGV2ZWwsIGdmbiwgbWZuKTsKLSAgICAgICAgICAgIGRvbWFpbl9jcmFzaChkKTsK LSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgaWYgKCBwdF9tZm5bbWVy Z2VfbGV2ZWxdID09IDAgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYg KCAhaW9tbXVfdXBkYXRlX3BkZV9jb3VudChkLCBwdF9tZm5bbWVyZ2VfbGV2ZWxdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZm4sIG1mbiwgbWVyZ2VfbGV2ZWwp ICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKCBpb21tdV9tZXJn ZV9wYWdlcyhkLCBwdF9tZm5bbWVyZ2VfbGV2ZWxdLCBnZm4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZsYWdzLCBtZXJnZV9sZXZlbCkgKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOworICAgICAg ICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiTWVyZ2UgaW9tbXUgcGFnZSBmYWlsZWQgYXQgbGV2 ZWwgJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdmbiA9ICVseCBtZm4g PSAlbHhcbiIsIG1lcmdlX2xldmVsLCBnZm4sIG1mbik7CisgICAgICAgICAgICAgICAgZG9tYWlu X2NyYXNoKGQpOworICAgICAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKKyAgICAgICAgICAgICAg ICBnb3RvIGVycjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRGVhbGxvY2F0ZSBs b3dlciBsZXZlbCBwYWdlIHRhYmxlICovCisgICAgICAgICAgICBmcmVlX2FtZF9pb21tdV9wZ3Rh YmxlKG1mbl90b19wYWdlKHB0X21mblttZXJnZV9sZXZlbCAtIDFdKSk7CiAgICAgICAgIH0KIAot ICAgICAgICAvKiBEZWFsbG9jYXRlIGxvd2VyIGxldmVsIHBhZ2UgdGFibGUgKi8KLSAgICAgICAg ZnJlZV9hbWRfaW9tbXVfcGd0YWJsZShtZm5fdG9fcGFnZShwdF9tZm5bbWVyZ2VfbGV2ZWwgLSAx XSkpOworICAgICAgICBzcGluX3VubG9jaygmaGQtPmFyY2gubWFwcGluZ19sb2NrKTsKICAgICB9 CiAKLW91dDoKLSAgICBzcGluX3VubG9jaygmaGQtPmFyY2gubWFwcGluZ19sb2NrKTsKICAgICBy ZXR1cm4gMDsKKworZXJyOgorICAgIHdoaWxlICggaS0tICkKKyAgICAgICAgLyogSWYgc3RhdGVt ZW50IHRvIHNhdGlzZnkgX19tdXN0X2NoZWNrLiAqLworICAgICAgICBpZiAoIGFtZF9pb21tdV91 bm1hcF9wYWdlcyhkLCBvcmlnX2dmbiArIGksIDApICkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhbWRfaW9tbXVf dW5tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnZm4pCitpbnQgX19tdXN0X2NoZWNrIGFt ZF9pb21tdV91bm1hcF9wYWdlcyhzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnZm4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0gICAgdW5zaWdu ZWQgbG9uZyBwdF9tZm5bN107CiAgICAgc3RydWN0IGRvbWFpbl9pb21tdSAqaGQgPSBkb21faW9t bXUoZCk7CisgICAgaW50IHJ0ID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGk7CiAKICAgICBpZiAo IGlvbW11X3VzZV9oYXBfcHQoZCkgKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1lbXNldChw dF9tZm4sIDAsIHNpemVvZihwdF9tZm4pKTsKLQotICAgIHNwaW5fbG9jaygmaGQtPmFyY2gubWFw cGluZ19sb2NrKTsKLQogICAgIGlmICggIWhkLT5hcmNoLnJvb3RfdGFibGUgKQotICAgIHsKLSAg ICAgICAgc3Bpbl91bmxvY2soJmhkLT5hcmNoLm1hcHBpbmdfbG9jayk7CiAgICAgICAgIHJldHVy biAwOwotICAgIH0KIAotICAgIC8qIFNpbmNlIEhWTSBkb21haW4gaXMgaW5pdGlhbGl6ZWQgd2l0 aCAyIGxldmVsIElPIHBhZ2UgdGFibGUsCi0gICAgICogd2UgbWlnaHQgbmVlZCBhIGRlZXBlciBw YWdlIHRhYmxlIGZvciBsYWdlciBnZm4gbm93ICovCi0gICAgaWYgKCBpc19odm1fZG9tYWluKGQp ICkKKyAgICBmb3IgKCBpID0gMDsgaSA8ICgxVUwgPDwgb3JkZXIpOyBpKyssIGdmbisrICkKICAg ICB7Ci0gICAgICAgIGludCByYyA9IHVwZGF0ZV9wYWdpbmdfbW9kZShkLCBnZm4pOworICAgICAg ICB1bnNpZ25lZCBsb25nIHB0X21mbls3XTsKIAotICAgICAgICBpZiAoIHJjICkKLSAgICAgICAg ewotICAgICAgICAgICAgc3Bpbl91bmxvY2soJmhkLT5hcmNoLm1hcHBpbmdfbG9jayk7Ci0gICAg ICAgICAgICBBTURfSU9NTVVfREVCVUcoIlVwZGF0ZSBwYWdlIG1vZGUgZmFpbGVkIGdmbiA9ICVs eFxuIiwgZ2ZuKTsKLSAgICAgICAgICAgIGlmICggcmMgIT0gLUVBRERSTk9UQVZBSUwgKQotICAg ICAgICAgICAgICAgIGRvbWFpbl9jcmFzaChkKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAg ICAgICAgfQotICAgIH0KKyAgICAgICAgbWVtc2V0KHB0X21mbiwgMCwgc2l6ZW9mKHB0X21mbikp OwogCi0gICAgaWYgKCBpb21tdV9wZGVfZnJvbV9nZm4oZCwgZ2ZuLCBwdF9tZm4pIHx8IChwdF9t Zm5bMV0gPT0gMCkgKQotICAgIHsKLSAgICAgICAgc3Bpbl91bmxvY2soJmhkLT5hcmNoLm1hcHBp bmdfbG9jayk7Ci0gICAgICAgIEFNRF9JT01NVV9ERUJVRygiSW52YWxpZCBJTyBwYWdldGFibGUg ZW50cnkgZ2ZuID0gJWx4XG4iLCBnZm4pOwotICAgICAgICBkb21haW5fY3Jhc2goZCk7Ci0gICAg ICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAgIC8qIG1hcmsgUFRFIGFzICdwYWdlIG5v dCBwcmVzZW50JyAqLwotICAgIGNsZWFyX2lvbW11X3B0ZV9wcmVzZW50KHB0X21mblsxXSwgZ2Zu KTsKLSAgICBzcGluX3VubG9jaygmaGQtPmFyY2gubWFwcGluZ19sb2NrKTsKKyAgICAgICAgc3Bp bl9sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwogCi0gICAgYW1kX2lvbW11X2ZsdXNoX3Bh Z2VzKGQsIGdmbiwgMCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyogVE9ETzogT3B0aW1pemUg Ynkgc3F1YXNoaW5nIG1hcF9wYWdlcy91bm1hcF9wYWdlcyB3aXRoIG1hcF9wYWdlL3VubWFwX3Bh Z2UgKi8KLWludCBfX211c3RfY2hlY2sgYW1kX2lvbW11X21hcF9wYWdlcyhzdHJ1Y3QgZG9tYWlu ICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgaW50IG9yZGVyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKLXsKLSAgICB1bnNp Z25lZCBsb25nIGk7Ci0gICAgaW50IHJjID0gMDsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgKDFV TCA8PCBvcmRlcik7IGkrKyApCi0gICAgewotICAgICAgICByYyA9IGFtZF9pb21tdV9tYXBfcGFn ZShkLCBnZm4gKyBpLCBtZm4gKyBpLCBmbGFncyk7Ci0gICAgICAgIGlmICggdW5saWtlbHkocmMp ICkKKyAgICAgICAgLyogU2luY2UgSFZNIGRvbWFpbiBpcyBpbml0aWFsaXplZCB3aXRoIDIgbGV2 ZWwgSU8gcGFnZSB0YWJsZSwKKyAgICAgICAgICogd2UgbWlnaHQgbmVlZCBhIGRlZXBlciBwYWdl IHRhYmxlIGZvciBsYWdlciBnZm4gbm93ICovCisgICAgICAgIGlmICggaXNfaHZtX2RvbWFpbihk KSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICggaS0tICkKLSAgICAgICAgICAgICAg ICAvKiBJZiBzdGF0ZW1lbnQgdG8gc2F0aXNmeSBfX211c3RfY2hlY2suICovCi0gICAgICAgICAg ICAgICAgaWYgKCBhbWRfaW9tbXVfdW5tYXBfcGFnZShkLCBnZm4gKyBpKSApCi0gICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IHJjID0gdXBkYXRlX3BhZ2luZ19t b2RlKGQsIGdmbik7CiAKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKCByYyAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmhkLT5hcmNoLm1h cHBpbmdfbG9jayk7CisgICAgICAgICAgICAgICAgQU1EX0lPTU1VX0RFQlVHKCJVcGRhdGUgcGFn ZSBtb2RlIGZhaWxlZCBnZm4gPSAlbHhcbiIsIGdmbik7CisgICAgICAgICAgICAgICAgaWYgKCBy YyAhPSAtRUFERFJOT1RBVkFJTCApCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9jcmFzaChk KTsKKyAgICAgICAgICAgICAgICBpZiAoICFydCApCisgICAgICAgICAgICAgICAgICAgIHJ0ID0g cmM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K LSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19CiAKLWludCBfX211c3RfY2hlY2sgYW1kX2lvbW11 X3VubWFwX3BhZ2VzKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcgZ2ZuLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9yZGVyKQotewot ICAgIHVuc2lnbmVkIGxvbmcgaTsKLSAgICBpbnQgcmMgPSAwOworICAgICAgICBpZiAoIGlvbW11 X3BkZV9mcm9tX2dmbihkLCBnZm4sIHB0X21mbikgfHwgKHB0X21mblsxXSA9PSAwKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwor ICAgICAgICAgICAgQU1EX0lPTU1VX0RFQlVHKCJJbnZhbGlkIElPIHBhZ2V0YWJsZSBlbnRyeSBn Zm4gPSAlbHhcbiIsIGdmbik7CisgICAgICAgICAgICBkb21haW5fY3Jhc2goZCk7CisgICAgICAg ICAgICBpZiAoICFydCApCisgICAgICAgICAgICAgICAgcnQgPSAtRUZBVUxUOworICAgICAgICAg ICAgY29udGludWU7CisgICAgICAgIH0KIAotICAgIGZvciAoIGkgPSAwOyBpIDwgKDFVTCA8PCBv cmRlcik7IGkrKyApCi0gICAgewotICAgICAgICBpbnQgcmV0ID0gYW1kX2lvbW11X3VubWFwX3Bh Z2UoZCwgZ2ZuICsgaSk7CisgICAgICAgIC8qIG1hcmsgUFRFIGFzICdwYWdlIG5vdCBwcmVzZW50 JyAqLworICAgICAgICBjbGVhcl9pb21tdV9wdGVfcHJlc2VudChwdF9tZm5bMV0sIGdmbik7Cisg ICAgICAgIHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwogCi0gICAgICAgIGlm ICggIXJjICkKLSAgICAgICAgICAgIHJjID0gcmV0OworICAgICAgICBhbWRfaW9tbXVfZmx1c2hf cGFnZXMoZCwgZ2ZuLCAwKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmM7CisgICAgcmV0dXJuIHJ0 OwogfQogCiBpbnQgYW1kX2lvbW11X3Jlc2VydmVfZG9tYWluX3VuaXR5X21hcChzdHJ1Y3QgZG9t YWluICpkb21haW4sCkBAIC04MzEsNyArODIzLDcgQEAgaW50IGFtZF9pb21tdV9yZXNlcnZlX2Rv bWFpbl91bml0eV9tYXAoc3RydWN0IGRvbWFpbiAqZG9tYWluLAogICAgIGdmbiA9IHBoeXNfYWRk ciA+PiBQQUdFX1NISUZUOwogICAgIGZvciAoIGkgPSAwOyBpIDwgbnBhZ2VzOyBpKysgKQogICAg IHsKLSAgICAgICAgcnQgPSBhbWRfaW9tbXVfbWFwX3BhZ2UoZG9tYWluLCBnZm4gK2ksIGdmbiAr aSwgZmxhZ3MpOworICAgICAgICBydCA9IGFtZF9pb21tdV9tYXBfcGFnZXMoZG9tYWluLCBnZm4g K2ksIGdmbiAraSwgZmxhZ3MsIDApOwogICAgICAgICBpZiAoIHJ0ICE9IDAgKQogICAgICAgICAg ICAgcmV0dXJuIHJ0OwogICAgIH0KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==