From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Durrant Subject: [PATCH 4/7] amd-iommu: reduce code duplication... Date: Thu, 20 Sep 2018 15:11:46 +0100 Message-ID: <20180920141149.1643-5-paul.durrant@citrix.com> References: <20180920141149.1643-1-paul.durrant@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1g2zj6-0004fO-Gc for xen-devel@lists.xenproject.org; Thu, 20 Sep 2018 14:14:40 +0000 In-Reply-To: <20180920141149.1643-1-paul.durrant@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Paul Durrant , Brian Woods , Suravee Suthikulpanit List-Id: xen-devel@lists.xenproject.org Li4uYnkgY2FsbGluZyB1cGRhdGVfcGFnaW5nX21vZGUoKSBpbnNpZGUgaW9tbXVfcGRlX2Zyb21f ZGZuKCkuCgpBbHNvIGhhdmUgaW9tbXVfcGRlX2Zyb21fZGZuKCkgcmV0dXJuIC1FRkFVTFQgaWYg cHRfbWZuWzFdIGlzIHplcm8sIHRvIGF2b2lkCnRoZSBjYWxsZXJzIGhhdmluZyB0byBleHBsaWN0 bHkgdGVzdCBpdC4KCk5PVEU6IFRoZSByZXR1cm4gdmFsdWUgb2YgaW9tbXVfcGRlX2Zyb21fZGZu KCkgaXMgaWdub3JlZCBieQogICAgICBhbWRfaW9tbXVfbWFwX3BhZ2UoKS4gSW5zdGVhZCwgdG8g cHJlc2VydmUgdGhlIGV4aXN0aW5nIHJldHVybgogICAgICBzZW1hbnRpY3MsIC1FRkFVTFQgaXMg cmV0dXJuZWQgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIGVycm9yLgoKU2lnbmVkLW9mZi1ieTog UGF1bCBEdXJyYW50IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCkNjOiBTdXJhdmVlIFN1 dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgpDYzogQnJpYW4gV29v ZHMgPGJyaWFuLndvb2RzQGFtZC5jb20+Ci0tLQogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1k L2lvbW11X21hcC5jIHwgMjc2ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMTM4IGluc2VydGlvbnMoKyksIDEzOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMgYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hbWQvaW9tbXVfbWFwLmMKaW5kZXggZDdkZjhiOTE2MS4uYTE4NmM4ZDI4 YiAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYW1kL2lvbW11X21hcC5jCisr KyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FtZC9pb21tdV9tYXAuYwpAQCAtNDMxLDYgKzQz MSwxMDIgQEAgc3RhdGljIGludCBpb21tdV9tZXJnZV9wYWdlcyhzdHJ1Y3QgZG9tYWluICpkLCB1 bnNpZ25lZCBsb25nIHB0X21mbiwKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1cGRh dGVfcGFnaW5nX21vZGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBkZm4pCit7Cisg ICAgdWludDE2X3QgYmRmOworICAgIHZvaWQgKmRldmljZV9lbnRyeTsKKyAgICB1bnNpZ25lZCBp bnQgcmVxX2lkLCBsZXZlbCwgb2Zmc2V0OworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAg c3RydWN0IHBjaV9kZXYgKnBkZXY7CisgICAgc3RydWN0IGFtZF9pb21tdSAqaW9tbXUgPSBOVUxM OworICAgIHN0cnVjdCBwYWdlX2luZm8gKm5ld19yb290ID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpvbGRfcm9vdCA9IE5VTEw7CisgICAgdm9pZCAqbmV3X3Jvb3RfdmFkZHI7CisgICAg dW5zaWduZWQgbG9uZyBvbGRfcm9vdF9tZm47CisgICAgc3RydWN0IGRvbWFpbl9pb21tdSAqaGQg PSBkb21faW9tbXUoZCk7CisKKyAgICBBU1NFUlQoZGZuICE9IGRmbl94KElOVkFMSURfREZOKSk7 CisgICAgQVNTRVJUKCEoZGZuID4+IERFRkFVTFRfRE9NQUlOX0FERFJFU1NfV0lEVEgpKTsKKwor ICAgIGxldmVsID0gaGQtPmFyY2gucGFnaW5nX21vZGU7CisgICAgb2xkX3Jvb3QgPSBoZC0+YXJj aC5yb290X3RhYmxlOworICAgIG9mZnNldCA9IGRmbiA+PiAoUFRFX1BFUl9UQUJMRV9TSElGVCAq IChsZXZlbCAtIDEpKTsKKworICAgIEFTU0VSVChzcGluX2lzX2xvY2tlZCgmaGQtPmFyY2gubWFw cGluZ19sb2NrKSAmJiBpc19odm1fZG9tYWluKGQpKTsKKworICAgIHdoaWxlICggb2Zmc2V0ID49 IFBURV9QRVJfVEFCTEVfU0laRSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBBbGxv Y2F0ZSBhbmQgaW5zdGFsbCBhIG5ldyByb290IHRhYmxlLgorICAgICAgICAgKiBPbmx5IHVwcGVy IEkvTyBwYWdlIHRhYmxlIGdyb3dzLCBubyBuZWVkIHRvIGZpeCBuZXh0IGxldmVsIGJpdHMuCisg ICAgICAgICAqLworICAgICAgICBuZXdfcm9vdCA9IGFsbG9jX2FtZF9pb21tdV9wZ3RhYmxlKCk7 CisgICAgICAgIGlmICggIW5ld19yb290ICkKKyAgICAgICAgeworICAgICAgICAgICAgQU1EX0lP TU1VX0RFQlVHKCIlcyBDYW5ub3QgYWxsb2NhdGUgSS9PIHBhZ2UgdGFibGVcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOworICAgICAgICAgICAgcmV0dXJuIC1FTk9N RU07CisgICAgICAgIH0KKworICAgICAgICBuZXdfcm9vdF92YWRkciA9IF9fbWFwX2RvbWFpbl9w YWdlKG5ld19yb290KTsKKyAgICAgICAgb2xkX3Jvb3RfbWZuID0gbWZuX3gocGFnZV90b19tZm4o b2xkX3Jvb3QpKTsKKyAgICAgICAgc2V0X2lvbW11X3BkZV9wcmVzZW50KG5ld19yb290X3ZhZGRy LCBvbGRfcm9vdF9tZm4sIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISFJ T01NVUZfd3JpdGFibGUsICEhSU9NTVVGX3JlYWRhYmxlKTsKKworICAgICAgICBsZXZlbCsrOwor ICAgICAgICBvbGRfcm9vdCA9IG5ld19yb290OworICAgICAgICBvZmZzZXQgPj49IFBURV9QRVJf VEFCTEVfU0hJRlQ7CisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKG5ld19yb290X3ZhZGRyKTsK KyAgICB9CisKKyAgICBpZiAoIG5ld19yb290ICkKKyAgICB7CisgICAgICAgIGhkLT5hcmNoLnBh Z2luZ19tb2RlID0gbGV2ZWw7CisgICAgICAgIGhkLT5hcmNoLnJvb3RfdGFibGUgPSBuZXdfcm9v dDsKKworICAgICAgICBpZiAoICFwY2lkZXZzX2xvY2tlZCgpICkKKyAgICAgICAgICAgIEFNRF9J T01NVV9ERUJVRygiJXMgVHJ5IHRvIGFjY2VzcyBwZGV2X2xpc3QgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ3aXRob3V0IGFxdWlyaW5nIHBjaWRldnNfbG9jay5cbiIsIF9fZnVuY19f KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBVcGRhdGUgZGV2aWNlIHRhYmxlIGVudHJpZXMg dXNpbmcgbmV3IHJvb3QgdGFibGUgYW5kIHBhZ2luZworICAgICAgICAgKiBtb2RlLgorICAgICAg ICAgKi8KKyAgICAgICAgZm9yX2VhY2hfcGRldiAoIGQsIHBkZXYgKQorICAgICAgICB7CisgICAg ICAgICAgICBiZGYgPSBQQ0lfQkRGMihwZGV2LT5idXMsIHBkZXYtPmRldmZuKTsKKyAgICAgICAg ICAgIGlvbW11ID0gZmluZF9pb21tdV9mb3JfZGV2aWNlKHBkZXYtPnNlZywgYmRmKTsKKyAgICAg ICAgICAgIGlmICggIWlvbW11ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBTURf SU9NTVVfREVCVUcoIiVzIEZhaWwgdG8gZmluZCBpb21tdS5cbiIsIF9fZnVuY19fKTsKKyAgICAg ICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg c3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisgICAgICAgICAgICBkbyB7 CisgICAgICAgICAgICAgICAgcmVxX2lkID0gZ2V0X2RtYV9yZXF1ZXN0b3JfaWQocGRldi0+c2Vn LCBiZGYpOworICAgICAgICAgICAgICAgIGRldmljZV9lbnRyeSA9IGlvbW11LT5kZXZfdGFibGUu YnVmZmVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxX2lkICogSU9NTVVf REVWX1RBQkxFX0VOVFJZX1NJWkUpOworCisgICAgICAgICAgICAgICAgLyogdmFsaWQgPSAwIG9u bHkgd29ya3MgZm9yIGRvbTAgcGFzc3Rocm91Z2ggbW9kZSAqLworICAgICAgICAgICAgICAgIGFt ZF9pb21tdV9zZXRfcm9vdF9wYWdlX3RhYmxlKAorICAgICAgICAgICAgICAgICAgICBkZXZpY2Vf ZW50cnksIHBhZ2VfdG9fbWFkZHIoaGQtPmFyY2gucm9vdF90YWJsZSksCisgICAgICAgICAgICAg ICAgICAgIGQtPmRvbWFpbl9pZCwgaGQtPmFyY2gucGFnaW5nX21vZGUsIDEpOworCisgICAgICAg ICAgICAgICAgYW1kX2lvbW11X2ZsdXNoX2RldmljZShpb21tdSwgcmVxX2lkKTsKKyAgICAgICAg ICAgICAgICBiZGYgKz0gcGRldi0+cGhhbnRvbV9zdHJpZGU7CisgICAgICAgICAgICB9IHdoaWxl ICggUENJX0RFVkZOMihiZGYpICE9IHBkZXYtPmRldmZuICYmCisgICAgICAgICAgICAgICAgICAg ICAgUENJX1NMT1QoYmRmKSA9PSBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKTsKKyAgICAgICAgICAg IHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisgICAgICAgIH0K KworICAgICAgICAvKiBGb3Igc2FmZXR5LCBpbnZhbGlkYXRlIGFsbCBlbnRyaWVzICovCisgICAg ICAgIGFtZF9pb21tdV9mbHVzaF9hbGxfcGFnZXMoZCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7 Cit9CisKIC8qIFdhbGsgaW8gcGFnZSB0YWJsZXMgYW5kIGJ1aWxkIGxldmVsIHBhZ2UgdGFibGVz IGlmIG5lY2Vzc2FyeQogICoge1JlLCB1bn1tYXBwaW5nIHN1cGVyIHBhZ2UgZnJhbWVzIGNhdXNl cyByZS1hbGxvY2F0aW9uIG9mIGlvCiAgKiBwYWdlIHRhYmxlcy4KQEAgLTQ0NSwyMyArNTQxLDM3 IEBAIHN0YXRpYyBpbnQgaW9tbXVfcGRlX2Zyb21fZGZuKHN0cnVjdCBkb21haW4gKmQsIHVuc2ln bmVkIGxvbmcgZGZuLAogICAgIHN0cnVjdCBwYWdlX2luZm8gKnRhYmxlOwogICAgIGNvbnN0IHN0 cnVjdCBkb21haW5faW9tbXUgKmhkID0gZG9tX2lvbW11KGQpOwogCisgICAgLyoKKyAgICAgKiBT aW5jZSBIVk0gZG9tYWluIGlzIGluaXRpYWxpemVkIHdpdGggMiBsZXZlbCBJTyBwYWdlIHRhYmxl LAorICAgICAqIHdlIG1pZ2h0IG5lZWQgYSBkZWVwZXIgcGFnZSB0YWJsZSBmb3Igd2lkZXIgZGZu IG5vdy4KKyAgICAgKi8KKyAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQorICAgIHsKKyAgICAg ICAgaW50IHJjID0gdXBkYXRlX3BhZ2luZ19tb2RlKGQsIGRmbik7CisKKyAgICAgICAgaWYgKCBy YyApCisgICAgICAgIHsKKyAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiVXBkYXRlIHBhZ2Ug bW9kZSBmYWlsZWQgZGZuID0gJSJQUklfZGZuIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZm4pOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorCiAg ICAgdGFibGUgPSBoZC0+YXJjaC5yb290X3RhYmxlOwogICAgIGxldmVsID0gaGQtPmFyY2gucGFn aW5nX21vZGU7CiAKLSAgICBCVUdfT04oIHRhYmxlID09IE5VTEwgfHwgbGV2ZWwgPCBJT01NVV9Q QUdJTkdfTU9ERV9MRVZFTF8xIHx8IAorICAgIEJVR19PTiggIXRhYmxlIHx8IGxldmVsIDwgSU9N TVVfUEFHSU5HX01PREVfTEVWRUxfMSB8fAogICAgICAgICAgICAgbGV2ZWwgPiBJT01NVV9QQUdJ TkdfTU9ERV9MRVZFTF82ICk7CiAKICAgICBuZXh0X3RhYmxlX21mbiA9IG1mbl94KHBhZ2VfdG9f bWZuKHRhYmxlKSk7CiAKICAgICBpZiAoIGxldmVsID09IElPTU1VX1BBR0lOR19NT0RFX0xFVkVM XzEgKQotICAgIHsKLSAgICAgICAgcHRfbWZuW2xldmVsXSA9IG5leHRfdGFibGVfbWZuOwotICAg ICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgICAgIGdvdG8gb3V0OwogCiAgICAgd2hpbGUgKCBs ZXZlbCA+IElPTU1VX1BBR0lOR19NT0RFX0xFVkVMXzEgKQogICAgIHsKICAgICAgICAgdW5zaWdu ZWQgaW50IG5leHRfbGV2ZWwgPSBsZXZlbCAtIDE7CisKICAgICAgICAgcHRfbWZuW2xldmVsXSA9 IG5leHRfdGFibGVfbWZuOwogCiAgICAgICAgIG5leHRfdGFibGVfdmFkZHIgPSBtYXBfZG9tYWlu X3BhZ2UoX21mbihuZXh0X3RhYmxlX21mbikpOwpAQCAtNDg1LDExICs1OTUsMTEgQEAgc3RhdGlj IGludCBpb21tdV9wZGVfZnJvbV9kZm4oc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBk Zm4sCiAKICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGxvd2VyIGxldmVsIHBhZ2UgdGFibGUgKi8K ICAgICAgICAgICAgIHRhYmxlID0gYWxsb2NfYW1kX2lvbW11X3BndGFibGUoKTsKLSAgICAgICAg ICAgIGlmICggdGFibGUgPT0gTlVMTCApCisgICAgICAgICAgICBpZiAoICF0YWJsZSApCiAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgQU1EX0lPTU1VX0RFQlVHKCJDYW5ub3QgYWxsb2Nh dGUgSS9PIHBhZ2UgdGFibGVcbiIpOwogICAgICAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdl KG5leHRfdGFibGVfdmFkZHIpOwotICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAg ICAgICAgIHJldHVybiAtRUZBVUxUOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZXh0 X3RhYmxlX21mbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHRhYmxlKSk7CkBAIC01MTAsMTQgKzYyMCwx NCBAQCBzdGF0aWMgaW50IGlvbW11X3BkZV9mcm9tX2RmbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNp Z25lZCBsb25nIGRmbiwKICAgICAgICAgLyogSW5zdGFsbCBsb3dlciBsZXZlbCBwYWdlIHRhYmxl IGZvciBub24tcHJlc2VudCBlbnRyaWVzICovCiAgICAgICAgIGVsc2UgaWYgKCAhaW9tbXVfaXNf cHRlX3ByZXNlbnQocGRlKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggbmV4dF90YWJs ZV9tZm4gPT0gMCApCisgICAgICAgICAgICBpZiAoICFuZXh0X3RhYmxlX21mbiApCiAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgdGFibGUgPSBhbGxvY19hbWRfaW9tbXVfcGd0YWJsZSgp OwogICAgICAgICAgICAgICAgIGlmICggdGFibGUgPT0gTlVMTCApCiAgICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICBBTURfSU9NTVVfREVCVUcoIkNhbm5vdCBhbGxvY2F0ZSBJ L08gcGFnZSB0YWJsZVxuIik7CiAgICAgICAgICAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdl KG5leHRfdGFibGVfdmFkZHIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgIG5leHRfdGFibGVfbWZuID0gbWZuX3gocGFnZV90b19tZm4odGFibGUpKTsKICAg ICAgICAgICAgICAgICBzZXRfaW9tbXVfcGRlX3ByZXNlbnQocGRlLCBuZXh0X3RhYmxlX21mbiwg bmV4dF9sZXZlbCwKQEAgLTUyNiw3ICs2MzYsNyBAQCBzdGF0aWMgaW50IGlvbW11X3BkZV9mcm9t X2RmbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGRmbiwKICAgICAgICAgICAgIGVs c2UgLyogc2hvdWxkIG5ldmVyIHJlYWNoIGhlcmUgKi8KICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICB1bm1hcF9kb21haW5fcGFnZShuZXh0X3RhYmxlX3ZhZGRyKTsKLSAgICAgICAgICAg ICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKICAgICAgICAg ICAgIH0KICAgICAgICAgfQogCkBAIC01MzQsOTkgKzY0NCwxNyBAQCBzdGF0aWMgaW50IGlvbW11 X3BkZV9mcm9tX2RmbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGRmbiwKICAgICAg ICAgbGV2ZWwtLTsKICAgICB9CiAKLSAgICAvKiBtZm4gb2YgbGV2ZWwgMSBwYWdlIHRhYmxlICov Ci0gICAgcHRfbWZuW2xldmVsXSA9IG5leHRfdGFibGVfbWZuOwotICAgIHJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IHVwZGF0ZV9wYWdpbmdfbW9kZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25l ZCBsb25nIGRmbikKLXsKLSAgICB1aW50MTZfdCBiZGY7Ci0gICAgdm9pZCAqZGV2aWNlX2VudHJ5 OwotICAgIHVuc2lnbmVkIGludCByZXFfaWQsIGxldmVsLCBvZmZzZXQ7Ci0gICAgdW5zaWduZWQg bG9uZyBmbGFnczsKLSAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLSAgICBzdHJ1Y3QgYW1kX2lv bW11ICppb21tdSA9IE5VTEw7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqbmV3X3Jvb3QgPSBOVUxM OwotICAgIHN0cnVjdCBwYWdlX2luZm8gKm9sZF9yb290ID0gTlVMTDsKLSAgICB2b2lkICpuZXdf cm9vdF92YWRkcjsKLSAgICB1bnNpZ25lZCBsb25nIG9sZF9yb290X21mbjsKLSAgICBzdHJ1Y3Qg ZG9tYWluX2lvbW11ICpoZCA9IGRvbV9pb21tdShkKTsKLQotICAgIGlmICggZGZuID09IGRmbl94 KElOVkFMSURfREZOKSApCi0gICAgICAgIHJldHVybiAtRUFERFJOT1RBVkFJTDsKLSAgICBBU1NF UlQoIShkZm4gPj4gREVGQVVMVF9ET01BSU5fQUREUkVTU19XSURUSCkpOwotCi0gICAgbGV2ZWwg PSBoZC0+YXJjaC5wYWdpbmdfbW9kZTsKLSAgICBvbGRfcm9vdCA9IGhkLT5hcmNoLnJvb3RfdGFi bGU7Ci0gICAgb2Zmc2V0ID0gZGZuID4+IChQVEVfUEVSX1RBQkxFX1NISUZUICogKGxldmVsIC0g MSkpOwotCi0gICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2sp ICYmIGlzX2h2bV9kb21haW4oZCkpOwotCi0gICAgd2hpbGUgKCBvZmZzZXQgPj0gUFRFX1BFUl9U QUJMRV9TSVpFICkKKyBvdXQ6CisgICAgaWYgKCAhbmV4dF90YWJsZV9tZm4gKQogICAgIHsKLSAg ICAgICAgLyogQWxsb2NhdGUgYW5kIGluc3RhbGwgYSBuZXcgcm9vdCB0YWJsZS4KLSAgICAgICAg ICogT25seSB1cHBlciBJL08gcGFnZSB0YWJsZSBncm93cywgbm8gbmVlZCB0byBmaXggbmV4dCBs ZXZlbCBiaXRzICovCi0gICAgICAgIG5ld19yb290ID0gYWxsb2NfYW1kX2lvbW11X3BndGFibGUo KTsKLSAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSBOVUxMICkKLSAgICAgICAgewotICAgICAgICAg ICAgQU1EX0lPTU1VX0RFQlVHKCIlcyBDYW5ub3QgYWxsb2NhdGUgSS9PIHBhZ2UgdGFibGVcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18pOwotICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdfcm9vdF92YWRkciA9IF9fbWFw X2RvbWFpbl9wYWdlKG5ld19yb290KTsKLSAgICAgICAgb2xkX3Jvb3RfbWZuID0gbWZuX3gocGFn ZV90b19tZm4ob2xkX3Jvb3QpKTsKLSAgICAgICAgc2V0X2lvbW11X3BkZV9wcmVzZW50KG5ld19y b290X3ZhZGRyLCBvbGRfcm9vdF9tZm4sIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgISFJT01NVUZfd3JpdGFibGUsICEhSU9NTVVGX3JlYWRhYmxlKTsKLSAgICAgICAgbGV2 ZWwrKzsKLSAgICAgICAgb2xkX3Jvb3QgPSBuZXdfcm9vdDsKLSAgICAgICAgb2Zmc2V0ID4+PSBQ VEVfUEVSX1RBQkxFX1NISUZUOwotICAgICAgICB1bm1hcF9kb21haW5fcGFnZShuZXdfcm9vdF92 YWRkcik7CisgICAgICAgIEFNRF9JT01NVV9ERUJVRygiSW52YWxpZCBJTyBwYWdldGFibGUgZW50 cnkgZGZuID0gJSJQUklfZGZuIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRmbik7Cisg ICAgICAgIHJldHVybiAtRUZBVUxUOwogICAgIH0KIAotICAgIGlmICggbmV3X3Jvb3QgIT0gTlVM TCApCi0gICAgewotICAgICAgICBoZC0+YXJjaC5wYWdpbmdfbW9kZSA9IGxldmVsOwotICAgICAg ICBoZC0+YXJjaC5yb290X3RhYmxlID0gbmV3X3Jvb3Q7Ci0KLSAgICAgICAgaWYgKCAhcGNpZGV2 c19sb2NrZWQoKSApCi0gICAgICAgICAgICBBTURfSU9NTVVfREVCVUcoIiVzIFRyeSB0byBhY2Nl c3MgcGRldl9saXN0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aG91dCBhcXVp cmluZyBwY2lkZXZzX2xvY2suXG4iLCBfX2Z1bmNfXyk7Ci0KLSAgICAgICAgLyogVXBkYXRlIGRl dmljZSB0YWJsZSBlbnRyaWVzIHVzaW5nIG5ldyByb290IHRhYmxlIGFuZCBwYWdpbmcgbW9kZSAq LwotICAgICAgICBmb3JfZWFjaF9wZGV2KCBkLCBwZGV2ICkKLSAgICAgICAgewotICAgICAgICAg ICAgYmRmID0gUENJX0JERjIocGRldi0+YnVzLCBwZGV2LT5kZXZmbik7Ci0gICAgICAgICAgICBp b21tdSA9IGZpbmRfaW9tbXVfZm9yX2RldmljZShwZGV2LT5zZWcsIGJkZik7Ci0gICAgICAgICAg ICBpZiAoICFpb21tdSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCIlcyBGYWlsIHRvIGZpbmQgaW9tbXUuXG4iLCBfX2Z1bmNfXyk7Ci0gICAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNwaW5f bG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgZG8gewotICAg ICAgICAgICAgICAgIHJlcV9pZCA9IGdldF9kbWFfcmVxdWVzdG9yX2lkKHBkZXYtPnNlZywgYmRm KTsKLSAgICAgICAgICAgICAgICBkZXZpY2VfZW50cnkgPSBpb21tdS0+ZGV2X3RhYmxlLmJ1ZmZl ciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcV9pZCAqIElPTU1VX0RFVl9U QUJMRV9FTlRSWV9TSVpFKTsKLQotICAgICAgICAgICAgICAgIC8qIHZhbGlkID0gMCBvbmx5IHdv cmtzIGZvciBkb20wIHBhc3N0aHJvdWdoIG1vZGUgKi8KLSAgICAgICAgICAgICAgICBhbWRfaW9t bXVfc2V0X3Jvb3RfcGFnZV90YWJsZShkZXZpY2VfZW50cnksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV90b19tYWRkcihoZC0+YXJjaC5yb290X3Rh YmxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5k b21haW5faWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aGQtPmFyY2gucGFnaW5nX21vZGUsIDEpOwotCi0gICAgICAgICAgICAgICAgYW1kX2lvbW11X2Zs dXNoX2RldmljZShpb21tdSwgcmVxX2lkKTsKLSAgICAgICAgICAgICAgICBiZGYgKz0gcGRldi0+ cGhhbnRvbV9zdHJpZGU7Ci0gICAgICAgICAgICB9IHdoaWxlICggUENJX0RFVkZOMihiZGYpICE9 IHBkZXYtPmRldmZuICYmCi0gICAgICAgICAgICAgICAgICAgICAgUENJX1NMT1QoYmRmKSA9PSBQ Q0lfU0xPVChwZGV2LT5kZXZmbikgKTsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlvbW11LT5sb2NrLCBmbGFncyk7Ci0gICAgICAgIH0KKyAgICBBU1NFUlQobGV2ZWwgPT0g SU9NTVVfUEFHSU5HX01PREVfTEVWRUxfMSk7CisgICAgcHRfbWZuW2xldmVsXSA9IG5leHRfdGFi bGVfbWZuOwogCi0gICAgICAgIC8qIEZvciBzYWZldHksIGludmFsaWRhdGUgYWxsIGVudHJpZXMg Ki8KLSAgICAgICAgYW1kX2lvbW11X2ZsdXNoX2FsbF9wYWdlcyhkKTsKLSAgICB9CiAgICAgcmV0 dXJuIDA7CiB9CiAKQEAgLTYzNiwxMyArNjY0LDE0IEBAIGludCBhbWRfaW9tbXVfbWFwX3BhZ2Uo c3RydWN0IGRvbWFpbiAqZCwgZGZuX3QgZGZuLCBtZm5fdCBtZm4sCiAgICAgYm9vbCBuZWVkX2Zs dXNoID0gZmFsc2U7CiAgICAgc3RydWN0IGRvbWFpbl9pb21tdSAqaGQgPSBkb21faW9tbXUoZCk7 CiAgICAgaW50IHJjOwotICAgIHVuc2lnbmVkIGxvbmcgcHRfbWZuWzddOworICAgIHVuc2lnbmVk IGxvbmcgcHRfbWZuWzddID0ge307CiAgICAgdW5zaWduZWQgaW50IG1lcmdlX2xldmVsOwogCiAg ICAgaWYgKCBpb21tdV91c2VfaGFwX3B0KGQpICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBt ZW1zZXQocHRfbWZuLCAwLCBzaXplb2YocHRfbWZuKSk7CisgICAgaWYgKCBkZm5fZXEoZGZuLCBJ TlZBTElEX0RGTikgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKIAogICAgIHNwaW5fbG9jaygm aGQtPmFyY2gubWFwcGluZ19sb2NrKTsKIApAQCAtNjU1LDI0ICs2ODQsOSBAQCBpbnQgYW1kX2lv bW11X21hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIGRmbl90IGRmbiwgbWZuX3QgbWZuLAogICAg ICAgICByZXR1cm4gcmM7CiAgICAgfQogCi0gICAgLyogU2luY2UgSFZNIGRvbWFpbiBpcyBpbml0 aWFsaXplZCB3aXRoIDIgbGV2ZWwgSU8gcGFnZSB0YWJsZSwKLSAgICAgKiB3ZSBtaWdodCBuZWVk IGEgZGVlcGVyIHBhZ2UgdGFibGUgZm9yIHdpZGVyIGRmbiBub3cgKi8KLSAgICBpZiAoIGlzX2h2 bV9kb21haW4oZCkgKQotICAgIHsKLSAgICAgICAgaWYgKCB1cGRhdGVfcGFnaW5nX21vZGUoZCwg ZGZuX3goZGZuKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmaGQtPmFy Y2gubWFwcGluZ19sb2NrKTsKLSAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiVXBkYXRlIHBh Z2UgbW9kZSBmYWlsZWQgZGZuID0gJSJQUklfZGZuIlxuIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZm5feChkZm4pKTsKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgaWYgKCBpb21tdV9wZGVfZnJvbV9kZm4oZCwgZGZuX3goZGZuKSwg cHRfbWZuKSB8fCAocHRfbWZuWzFdID09IDApICkKKyAgICBpZiAoIGlvbW11X3BkZV9mcm9tX2Rm bihkLCBkZm5feChkZm4pLCBwdF9tZm4pICkKICAgICB7CiAgICAgICAgIHNwaW5fdW5sb2NrKCZo ZC0+YXJjaC5tYXBwaW5nX2xvY2spOwotICAgICAgICBBTURfSU9NTVVfREVCVUcoIkludmFsaWQg SU8gcGFnZXRhYmxlIGVudHJ5IGRmbiA9ICUiUFJJX2RmbiJcbiIsCi0gICAgICAgICAgICAgICAg ICAgICAgICBkZm5feChkZm4pKTsKICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CiAgICAgfQogCkBA IC03MjEsMTMgKzczNSwxNSBAQCBvdXQ6CiAKIGludCBhbWRfaW9tbXVfdW5tYXBfcGFnZShzdHJ1 Y3QgZG9tYWluICpkLCBkZm5fdCBkZm4pCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBwdF9tZm5bN107 CisgICAgdW5zaWduZWQgbG9uZyBwdF9tZm5bN10gPSB7fTsKICAgICBzdHJ1Y3QgZG9tYWluX2lv bW11ICpoZCA9IGRvbV9pb21tdShkKTsKKyAgICBpbnQgcmM7CiAKICAgICBpZiAoIGlvbW11X3Vz ZV9oYXBfcHQoZCkgKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1lbXNldChwdF9tZm4sIDAs IHNpemVvZihwdF9tZm4pKTsKKyAgICBpZiAoIGRmbl9lcShkZm4sIElOVkFMSURfREZOKSApCisg ICAgICAgIHJldHVybiAtRUFERFJOT1RBVkFJTDsKIAogICAgIHNwaW5fbG9jaygmaGQtPmFyY2gu bWFwcGluZ19sb2NrKTsKIApAQCAtNzM3LDI3ICs3NTMsMTEgQEAgaW50IGFtZF9pb21tdV91bm1h cF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIGRmbl90IGRmbikKICAgICAgICAgcmV0dXJuIDA7CiAg ICAgfQogCi0gICAgLyogU2luY2UgSFZNIGRvbWFpbiBpcyBpbml0aWFsaXplZCB3aXRoIDIgbGV2 ZWwgSU8gcGFnZSB0YWJsZSwKLSAgICAgKiB3ZSBtaWdodCBuZWVkIGEgZGVlcGVyIHBhZ2UgdGFi bGUgZm9yIGxhZ2VyIGRmbiBub3cgKi8KLSAgICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQotICAg IHsKLSAgICAgICAgaW50IHJjID0gdXBkYXRlX3BhZ2luZ19tb2RlKGQsIGRmbl94KGRmbikpOwot Ci0gICAgICAgIGlmICggcmMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9jaygm aGQtPmFyY2gubWFwcGluZ19sb2NrKTsKLSAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiVXBk YXRlIHBhZ2UgbW9kZSBmYWlsZWQgZGZuID0gJSJQUklfZGZuIlxuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkZm5feChkZm4pKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICggaW9tbXVfcGRlX2Zyb21fZGZuKGQsIGRmbl94KGRmbiks IHB0X21mbikgfHwgKHB0X21mblsxXSA9PSAwKSApCisgICAgcmMgPSBpb21tdV9wZGVfZnJvbV9k Zm4oZCwgZGZuX3goZGZuKSwgcHRfbWZuKTsKKyAgICBpZiAoIHJjICkKICAgICB7CiAgICAgICAg IHNwaW5fdW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwotICAgICAgICBBTURfSU9NTVVf REVCVUcoIkludmFsaWQgSU8gcGFnZXRhYmxlIGVudHJ5IGRmbiA9ICUiUFJJX2RmbiJcbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICBkZm5feChkZm4pKTsKLSAgICAgICAgcmV0dXJuIC1FRkFV TFQ7CisgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKICAgICAvKiBtYXJrIFBURSBhcyAncGFn ZSBub3QgcHJlc2VudCcgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxp c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby94ZW4tZGV2ZWw=