From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH RFC 07/10] passthrough/amd: split out hvm code from iommu_map.c Date: Wed, 21 Feb 2018 21:46:58 +0000 Message-ID: <20180221214701.1646-8-wei.liu2@citrix.com> References: <20180221214701.1646-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eocEE-0001gJ-OU for xen-devel@lists.xenproject.org; Wed, 21 Feb 2018 21:47:06 +0000 In-Reply-To: <20180221214701.1646-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Suravee Suthikulpanit , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSBhbmQgcmVuYW1lIHVwZGF0ZV9wYWdpbmdfbW9kZS4gQ3JlYXRlIGEgbG9jYWwgaGVhZGVy IGZpbGUgZm9yCnRoaXMgYW5kIG90aGVyIGZ1bmN0aW9ucyB0aGF0IG5lZWQgZXhwb3J0aW5nLgoK U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCkNjOiBTdXJh dmVlIFN1dGhpa3VscGFuaXQgPHN1cmF2ZWUuc3V0aGlrdWxwYW5pdEBhbWQuY29tPgotLS0KIHhl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvTWFrZWZpbGUgICAgfCAgIDEgKwogeGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9odm0uYyAgICAgICB8IDEwOCArKysrKysrKysrKysr KysrKysrKysrKysrKysrCiB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL2lvbW11Lmgg ICAgIHwgIDMyICsrKysrKysrKwogeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9pb21t dV9tYXAuYyB8IDEwMyArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFuZ2Vk LCAxNDggaW5zZXJ0aW9ucygrKSwgOTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9odm0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaW9tbXUuaAoKZGlmZiAtLWdpdCBhL3hl bi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvTWFrZWZpbGUgYi94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC94ODYvYW1kL01ha2VmaWxlCmluZGV4IDQxNTE0NmZjZGIuLmVkMjhmZGI2NjAgMTAw NjQ0Ci0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvTWFrZWZpbGUKKysrIGIv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAK K29iai0kKENPTkZJR19IVk0pICs9IGh2bS5vCiBvYmotYmluLXkgKz0gaW9tbXVfZGV0ZWN0Lmlu aXQubwogb2JqLXkgKz0gaW9tbXVfaW5pdC5vCiBvYmoteSArPSBpb21tdV9tYXAubwpkaWZmIC0t Z2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9odm0uYyBiL3hlbi9kcml2ZXJz L3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaHZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMzVjNzZjMjU0NQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0 aHJvdWdoL3g4Ni9hbWQvaHZtLmMKQEAgLTAsMCArMSwxMDggQEAKKyNpbmNsdWRlIDx4ZW4vc2No ZWQuaD4KKyNpbmNsdWRlIDxhc20vYW1kLWlvbW11Lmg+CisjaW5jbHVkZSA8YXNtL2h2bS9zdm0v YW1kLWlvbW11LXByb3RvLmg+CisjaW5jbHVkZSAiLi4vLi4vYXRzLmgiCisjaW5jbHVkZSA8eGVu L3BjaS5oPgorCisjaW5jbHVkZSAiaW9tbXUuaCIKKworaW50IGh2bV91cGRhdGVfcGFnaW5nX21v ZGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCit7CisgICAgdTE2IGJkZjsK KyAgICB2b2lkICpkZXZpY2VfZW50cnk7CisgICAgdW5zaWduZWQgaW50IHJlcV9pZCwgbGV2ZWws IG9mZnNldDsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIHN0cnVjdCBwY2lfZGV2ICpw ZGV2OworICAgIHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11ID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpuZXdfcm9vdCA9IE5VTEw7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqb2xkX3Jvb3Qg PSBOVUxMOworICAgIHZvaWQgKm5ld19yb290X3ZhZGRyOworICAgIHVuc2lnbmVkIGxvbmcgb2xk X3Jvb3RfbWZuOworICAgIHN0cnVjdCBkb21haW5faW9tbXUgKmhkID0gZG9tX2lvbW11KGQpOwor CisgICAgaWYgKCBnZm4gPT0gZ2ZuX3goSU5WQUxJRF9HRk4pICkKKyAgICAgICAgcmV0dXJuIC1F QUREUk5PVEFWQUlMOworICAgIEFTU0VSVCghKGdmbiA+PiBERUZBVUxUX0RPTUFJTl9BRERSRVNT X1dJRFRIKSk7CisKKyAgICBsZXZlbCA9IGhkLT5hcmNoLnBhZ2luZ19tb2RlOworICAgIG9sZF9y b290ID0gaGQtPmFyY2gucm9vdF90YWJsZTsKKyAgICBvZmZzZXQgPSBnZm4gPj4gKFBURV9QRVJf VEFCTEVfU0hJRlQgKiAobGV2ZWwgLSAxKSk7CisKKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQo JmhkLT5hcmNoLm1hcHBpbmdfbG9jaykgJiYgaXNfaHZtX2RvbWFpbihkKSk7CisKKyAgICB3aGls ZSAoIG9mZnNldCA+PSBQVEVfUEVSX1RBQkxFX1NJWkUgKQorICAgIHsKKyAgICAgICAgLyogQWxs b2NhdGUgYW5kIGluc3RhbGwgYSBuZXcgcm9vdCB0YWJsZS4KKyAgICAgICAgICogT25seSB1cHBl ciBJL08gcGFnZSB0YWJsZSBncm93cywgbm8gbmVlZCB0byBmaXggbmV4dCBsZXZlbCBiaXRzICov CisgICAgICAgIG5ld19yb290ID0gYWxsb2NfYW1kX2lvbW11X3BndGFibGUoKTsKKyAgICAgICAg aWYgKCBuZXdfcm9vdCA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCIlcyBDYW5ub3QgYWxsb2NhdGUgSS9PIHBhZ2UgdGFibGVcbiIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18pOworICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07 CisgICAgICAgIH0KKworICAgICAgICBuZXdfcm9vdF92YWRkciA9IF9fbWFwX2RvbWFpbl9wYWdl KG5ld19yb290KTsKKyAgICAgICAgb2xkX3Jvb3RfbWZuID0gcGFnZV90b19tZm4ob2xkX3Jvb3Qp OworICAgICAgICBzZXRfaW9tbXVfcGRlX3ByZXNlbnQobmV3X3Jvb3RfdmFkZHIsIG9sZF9yb290 X21mbiwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIUlPTU1VRl93cml0 YWJsZSwgISFJT01NVUZfcmVhZGFibGUpOworICAgICAgICBsZXZlbCsrOworICAgICAgICBvbGRf cm9vdCA9IG5ld19yb290OworICAgICAgICBvZmZzZXQgPj49IFBURV9QRVJfVEFCTEVfU0hJRlQ7 CisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKG5ld19yb290X3ZhZGRyKTsKKyAgICB9CisKKyAg ICBpZiAoIG5ld19yb290ICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgaGQtPmFyY2gucGFnaW5n X21vZGUgPSBsZXZlbDsKKyAgICAgICAgaGQtPmFyY2gucm9vdF90YWJsZSA9IG5ld19yb290Owor CisgICAgICAgIGlmICggIXBjaWRldnNfbG9ja2VkKCkgKQorICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCIlcyBUcnkgdG8gYWNjZXNzIHBkZXZfbGlzdCAiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIndpdGhvdXQgYXF1aXJpbmcgcGNpZGV2c19sb2NrLlxuIiwgX19mdW5jX18pOwor CisgICAgICAgIC8qIFVwZGF0ZSBkZXZpY2UgdGFibGUgZW50cmllcyB1c2luZyBuZXcgcm9vdCB0 YWJsZSBhbmQgcGFnaW5nIG1vZGUgKi8KKyAgICAgICAgZm9yX2VhY2hfcGRldiggZCwgcGRldiAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGJkZiA9IFBDSV9CREYyKHBkZXYtPmJ1cywgcGRldi0+ ZGV2Zm4pOworICAgICAgICAgICAgaW9tbXUgPSBmaW5kX2lvbW11X2Zvcl9kZXZpY2UocGRldi0+ c2VnLCBiZGYpOworICAgICAgICAgICAgaWYgKCAhaW9tbXUgKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiJXMgRmFpbCB0byBmaW5kIGlvbW11LlxuIiwg X19mdW5jX18pOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsK KyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICByZXFfaWQgPSBnZXRfZG1hX3JlcXVl c3Rvcl9pZChwZGV2LT5zZWcsIGJkZik7CisgICAgICAgICAgICAgICAgZGV2aWNlX2VudHJ5ID0g aW9tbXUtPmRldl90YWJsZS5idWZmZXIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChyZXFfaWQgKiBJT01NVV9ERVZfVEFCTEVfRU5UUllfU0laRSk7CisKKyAgICAgICAgICAgICAg ICAvKiB2YWxpZCA9IDAgb25seSB3b3JrcyBmb3IgZG9tMCBwYXNzdGhyb3VnaCBtb2RlICovCisg ICAgICAgICAgICAgICAgYW1kX2lvbW11X3NldF9yb290X3BhZ2VfdGFibGUoKHUzMiAqKWRldmlj ZV9lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YWdlX3RvX21hZGRyKGhkLT5hcmNoLnJvb3RfdGFibGUpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZC0+YXJjaC5wYWdpbmdfbW9kZSwgMSk7CisK KyAgICAgICAgICAgICAgICBhbWRfaW9tbXVfZmx1c2hfZGV2aWNlKGlvbW11LCByZXFfaWQpOwor ICAgICAgICAgICAgICAgIGJkZiArPSBwZGV2LT5waGFudG9tX3N0cmlkZTsKKyAgICAgICAgICAg IH0gd2hpbGUgKCBQQ0lfREVWRk4yKGJkZikgIT0gcGRldi0+ZGV2Zm4gJiYKKyAgICAgICAgICAg ICAgICAgICAgICBQQ0lfU0xPVChiZGYpID09IFBDSV9TTE9UKHBkZXYtPmRldmZuKSApOworICAg ICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKyAg ICAgICAgfQorCisgICAgICAgIC8qIEZvciBzYWZldHksIGludmFsaWRhdGUgYWxsIGVudHJpZXMg Ki8KKyAgICAgICAgYW1kX2lvbW11X2ZsdXNoX2FsbF9wYWdlcyhkKTsKKyAgICB9CisgICAgcmV0 dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZp bGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0Cisg KiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2Ry aXZlcnMvcGFzc3Rocm91Z2gveDg2L2FtZC9pb21tdS5oIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91 Z2gveDg2L2FtZC9pb21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmJiMzFkZTYxYWUKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94 ODYvYW1kL2lvbW11LmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfWDg2X0FNRF9JT01NVV9I XworI2RlZmluZSBfWDg2X0FNRF9JT01NVV9IXworCitib29sX3Qgc2V0X2lvbW11X3BkZV9wcmVz ZW50KHUzMiAqcGRlLCB1bnNpZ25lZCBsb25nIG5leHRfbWZuLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV4dF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYm9vbF90IGl3LCBib29sX3QgaXIpOworCisjaWZkZWYgQ09ORklHX0hWTQorCitp bnQgaHZtX3VwZGF0ZV9wYWdpbmdfbW9kZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25n IGdmbik7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGh2bV91cGRhdGVfcGFnaW5nX21v ZGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCit7CisgICAgQVNTRVJUX1VO UkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZgorCisjZW5kaWYK KworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTog IkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10 YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC94ODYvYW1kL2lvbW11X21hcC5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gveDg2 L2FtZC9pb21tdV9tYXAuYwppbmRleCAwZjliZDUzOGFmLi5lNTFhNWM1ZmZlIDEwMDY0NAotLS0g YS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC94ODYvYW1kL2lvbW11X21hcC5jCisrKyBiL3hlbi9k cml2ZXJzL3Bhc3N0aHJvdWdoL3g4Ni9hbWQvaW9tbXVfbWFwLmMKQEAgLTI1LDYgKzI1LDggQEAK ICNpbmNsdWRlICIuLi8uLi9hdHMuaCIKICNpbmNsdWRlIDx4ZW4vcGNpLmg+CiAKKyNpbmNsdWRl ICJpb21tdS5oIgorCiAvKiBHaXZlbiBwZm4gYW5kIHBhZ2UgdGFibGUgbGV2ZWwsIHJldHVybiBw ZGUgaW5kZXggKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGZuX3RvX3BkZV9pZHgodW5zaWduZWQg bG9uZyBwZm4sIHVuc2lnbmVkIGludCBsZXZlbCkKIHsKQEAgLTQ1LDkgKzQ3LDkgQEAgdm9pZCBj bGVhcl9pb21tdV9wdGVfcHJlc2VudCh1bnNpZ25lZCBsb25nIGwxX21mbiwgdW5zaWduZWQgbG9u ZyBnZm4pCiAgICAgdW5tYXBfZG9tYWluX3BhZ2UodGFibGUpOwogfQogCi1zdGF0aWMgYm9vbF90 IHNldF9pb21tdV9wZGVfcHJlc2VudCh1MzIgKnBkZSwgdW5zaWduZWQgbG9uZyBuZXh0X21mbiwg Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV4dF9s ZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xfdCBpdywgYm9v bF90IGlyKQorYm9vbF90IHNldF9pb21tdV9wZGVfcHJlc2VudCh1MzIgKnBkZSwgdW5zaWduZWQg bG9uZyBuZXh0X21mbiwKKwkJCSAgICAgdW5zaWduZWQgaW50IG5leHRfbGV2ZWwsCisJCQkgICAg IGJvb2xfdCBpdywgYm9vbF90IGlyKQogewogICAgIHU2NCBhZGRyX2xvLCBhZGRyX2hpLCBtYWRk cl9vbGQsIG1hZGRyX25leHQ7CiAgICAgdTMyIGVudHJ5OwpAQCAtNTQwLDk3ICs1NDIsNiBAQCBz dGF0aWMgaW50IGlvbW11X3BkZV9mcm9tX2dmbihzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBs b25nIHBmbiwKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1cGRhdGVfcGFnaW5nX21v ZGUoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgbG9uZyBnZm4pCi17Ci0gICAgdTE2IGJkZjsK LSAgICB2b2lkICpkZXZpY2VfZW50cnk7Ci0gICAgdW5zaWduZWQgaW50IHJlcV9pZCwgbGV2ZWws IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgIHN0cnVjdCBwY2lfZGV2ICpw ZGV2OwotICAgIHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11ID0gTlVMTDsKLSAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpuZXdfcm9vdCA9IE5VTEw7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqb2xkX3Jvb3Qg PSBOVUxMOwotICAgIHZvaWQgKm5ld19yb290X3ZhZGRyOwotICAgIHVuc2lnbmVkIGxvbmcgb2xk X3Jvb3RfbWZuOwotICAgIHN0cnVjdCBkb21haW5faW9tbXUgKmhkID0gZG9tX2lvbW11KGQpOwot Ci0gICAgaWYgKCBnZm4gPT0gZ2ZuX3goSU5WQUxJRF9HRk4pICkKLSAgICAgICAgcmV0dXJuIC1F QUREUk5PVEFWQUlMOwotICAgIEFTU0VSVCghKGdmbiA+PiBERUZBVUxUX0RPTUFJTl9BRERSRVNT X1dJRFRIKSk7Ci0KLSAgICBsZXZlbCA9IGhkLT5hcmNoLnBhZ2luZ19tb2RlOwotICAgIG9sZF9y b290ID0gaGQtPmFyY2gucm9vdF90YWJsZTsKLSAgICBvZmZzZXQgPSBnZm4gPj4gKFBURV9QRVJf VEFCTEVfU0hJRlQgKiAobGV2ZWwgLSAxKSk7Ci0KLSAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQo JmhkLT5hcmNoLm1hcHBpbmdfbG9jaykgJiYgaXNfaHZtX2RvbWFpbihkKSk7Ci0KLSAgICB3aGls ZSAoIG9mZnNldCA+PSBQVEVfUEVSX1RBQkxFX1NJWkUgKQotICAgIHsKLSAgICAgICAgLyogQWxs b2NhdGUgYW5kIGluc3RhbGwgYSBuZXcgcm9vdCB0YWJsZS4KLSAgICAgICAgICogT25seSB1cHBl ciBJL08gcGFnZSB0YWJsZSBncm93cywgbm8gbmVlZCB0byBmaXggbmV4dCBsZXZlbCBiaXRzICov Ci0gICAgICAgIG5ld19yb290ID0gYWxsb2NfYW1kX2lvbW11X3BndGFibGUoKTsKLSAgICAgICAg aWYgKCBuZXdfcm9vdCA9PSBOVUxMICkKLSAgICAgICAgewotICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCIlcyBDYW5ub3QgYWxsb2NhdGUgSS9PIHBhZ2UgdGFibGVcbiIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mdW5jX18pOwotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07 Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdfcm9vdF92YWRkciA9IF9fbWFwX2RvbWFpbl9wYWdl KG5ld19yb290KTsKLSAgICAgICAgb2xkX3Jvb3RfbWZuID0gcGFnZV90b19tZm4ob2xkX3Jvb3Qp OwotICAgICAgICBzZXRfaW9tbXVfcGRlX3ByZXNlbnQobmV3X3Jvb3RfdmFkZHIsIG9sZF9yb290 X21mbiwgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIUlPTU1VRl93cml0 YWJsZSwgISFJT01NVUZfcmVhZGFibGUpOwotICAgICAgICBsZXZlbCsrOwotICAgICAgICBvbGRf cm9vdCA9IG5ld19yb290OwotICAgICAgICBvZmZzZXQgPj49IFBURV9QRVJfVEFCTEVfU0hJRlQ7 Ci0gICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKG5ld19yb290X3ZhZGRyKTsKLSAgICB9Ci0KLSAg ICBpZiAoIG5ld19yb290ICE9IE5VTEwgKQotICAgIHsKLSAgICAgICAgaGQtPmFyY2gucGFnaW5n X21vZGUgPSBsZXZlbDsKLSAgICAgICAgaGQtPmFyY2gucm9vdF90YWJsZSA9IG5ld19yb290Owot Ci0gICAgICAgIGlmICggIXBjaWRldnNfbG9ja2VkKCkgKQotICAgICAgICAgICAgQU1EX0lPTU1V X0RFQlVHKCIlcyBUcnkgdG8gYWNjZXNzIHBkZXZfbGlzdCAiCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIndpdGhvdXQgYXF1aXJpbmcgcGNpZGV2c19sb2NrLlxuIiwgX19mdW5jX18pOwot Ci0gICAgICAgIC8qIFVwZGF0ZSBkZXZpY2UgdGFibGUgZW50cmllcyB1c2luZyBuZXcgcm9vdCB0 YWJsZSBhbmQgcGFnaW5nIG1vZGUgKi8KLSAgICAgICAgZm9yX2VhY2hfcGRldiggZCwgcGRldiAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJkZiA9IFBDSV9CREYyKHBkZXYtPmJ1cywgcGRldi0+ ZGV2Zm4pOwotICAgICAgICAgICAgaW9tbXUgPSBmaW5kX2lvbW11X2Zvcl9kZXZpY2UocGRldi0+ c2VnLCBiZGYpOwotICAgICAgICAgICAgaWYgKCAhaW9tbXUgKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIEFNRF9JT01NVV9ERUJVRygiJXMgRmFpbCB0byBmaW5kIGlvbW11LlxuIiwg X19mdW5jX18pOwotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICAgICAg fQotCi0gICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsK LSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICByZXFfaWQgPSBnZXRfZG1hX3JlcXVl c3Rvcl9pZChwZGV2LT5zZWcsIGJkZik7Ci0gICAgICAgICAgICAgICAgZGV2aWNlX2VudHJ5ID0g aW9tbXUtPmRldl90YWJsZS5idWZmZXIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChyZXFfaWQgKiBJT01NVV9ERVZfVEFCTEVfRU5UUllfU0laRSk7Ci0KLSAgICAgICAgICAgICAg ICAvKiB2YWxpZCA9IDAgb25seSB3b3JrcyBmb3IgZG9tMCBwYXNzdGhyb3VnaCBtb2RlICovCi0g ICAgICAgICAgICAgICAgYW1kX2lvbW11X3NldF9yb290X3BhZ2VfdGFibGUoKHUzMiAqKWRldmlj ZV9lbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YWdlX3RvX21hZGRyKGhkLT5hcmNoLnJvb3RfdGFibGUpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9pZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZC0+YXJjaC5wYWdpbmdfbW9kZSwgMSk7Ci0K LSAgICAgICAgICAgICAgICBhbWRfaW9tbXVfZmx1c2hfZGV2aWNlKGlvbW11LCByZXFfaWQpOwot ICAgICAgICAgICAgICAgIGJkZiArPSBwZGV2LT5waGFudG9tX3N0cmlkZTsKLSAgICAgICAgICAg IH0gd2hpbGUgKCBQQ0lfREVWRk4yKGJkZikgIT0gcGRldi0+ZGV2Zm4gJiYKLSAgICAgICAgICAg ICAgICAgICAgICBQQ0lfU0xPVChiZGYpID09IFBDSV9TTE9UKHBkZXYtPmRldmZuKSApOwotICAg ICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLSAg ICAgICAgfQotCi0gICAgICAgIC8qIEZvciBzYWZldHksIGludmFsaWRhdGUgYWxsIGVudHJpZXMg Ki8KLSAgICAgICAgYW1kX2lvbW11X2ZsdXNoX2FsbF9wYWdlcyhkKTsKLSAgICB9Ci0gICAgcmV0 dXJuIDA7Ci19Ci0KIGludCBhbWRfaW9tbXVfbWFwX3BhZ2Uoc3RydWN0IGRvbWFpbiAqZCwgdW5z aWduZWQgbG9uZyBnZm4sIHVuc2lnbmVkIGxvbmcgbWZuLAogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CkBAIC02NjAsNyArNTcxLDcgQEAgaW50IGFtZF9pb21t dV9tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwgdW5zaWduZWQg bG9uZyBtZm4sCiAgICAgICogd2UgbWlnaHQgbmVlZCBhIGRlZXBlciBwYWdlIHRhYmxlIGZvciBs YWdlciBnZm4gbm93ICovCiAgICAgaWYgKCBpc19odm1fZG9tYWluKGQpICkKICAgICB7Ci0gICAg ICAgIGlmICggdXBkYXRlX3BhZ2luZ19tb2RlKGQsIGdmbikgKQorICAgICAgICBpZiAoIGh2bV91 cGRhdGVfcGFnaW5nX21vZGUoZCwgZ2ZuKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIHNwaW5f dW5sb2NrKCZoZC0+YXJjaC5tYXBwaW5nX2xvY2spOwogICAgICAgICAgICAgQU1EX0lPTU1VX0RF QlVHKCJVcGRhdGUgcGFnZSBtb2RlIGZhaWxlZCBnZm4gPSAlbHhcbiIsIGdmbik7CkBAIC03NDIs NyArNjUzLDcgQEAgaW50IGFtZF9pb21tdV91bm1hcF9wYWdlKHN0cnVjdCBkb21haW4gKmQsIHVu c2lnbmVkIGxvbmcgZ2ZuKQogICAgICAqIHdlIG1pZ2h0IG5lZWQgYSBkZWVwZXIgcGFnZSB0YWJs ZSBmb3IgbGFnZXIgZ2ZuIG5vdyAqLwogICAgIGlmICggaXNfaHZtX2RvbWFpbihkKSApCiAgICAg ewotICAgICAgICBpbnQgcmMgPSB1cGRhdGVfcGFnaW5nX21vZGUoZCwgZ2ZuKTsKKyAgICAgICAg aW50IHJjID0gaHZtX3VwZGF0ZV9wYWdpbmdfbW9kZShkLCBnZm4pOwogCiAgICAgICAgIGlmICgg cmMgKQogICAgICAgICB7Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz dGluZm8veGVuLWRldmVs