From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandru Isaila Subject: [PATCH v4 3/3] x86/hvm: Implement hvmemul_write() using real mappings Date: Wed, 20 Sep 2017 12:22:33 +0300 Message-ID: <1505899353-13554-4-git-send-email-aisaila@bitdefender.com> References: <1505899353-13554-1-git-send-email-aisaila@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1505899353-13554-1-git-send-email-aisaila@bitdefender.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: jun.nakajima@intel.com, kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, suravee.suthikulpanit@amd.com, george.dunlap@eu.citrix.com, andrew.cooper3@citrix.com, tim@xen.org, paul.durrant@citrix.com, jbeulich@suse.com, Alexandru Isaila , boris.ostrovsky@oracle.com, ian.jackson@eu.citrix.com List-Id: xen-devel@lists.xenproject.org RnJvbTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KCkFuIGFjY2Vz cyB3aGljaCBjcm9zc2VzIGEgcGFnZSBib3VuZGFyeSBpcyBwZXJmb3JtZWQgYXRvbWljYWxseSBi eSB4ODYKaGFyZHdhcmUsIGFsYmVpdCB3aXRoIGEgc2V2ZXJlIHBlcmZvcm1hbmNlIHBlbmFsdHku ICBBbiBpbXBvcnRhbnQgY29ybmVyIGNhc2UKaXMgd2hlbiBhIHN0cmFkZGxlZCBhY2Nlc3MgaGl0 cyB0d28gcGFnZXMgd2hpY2ggZGlmZmVyIGluIHdoZXRoZXIgYQp0cmFuc2xhdGlvbiBleGlzdHMs IG9yIGluIG5ldCBhY2Nlc3MgcmlnaHRzLgoKVGhlIHVzZSBvZiBodm1fY29weSooKSBpbiBodm1l bXVsX3dyaXRlKCkgaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXQgcGVyZm9ybXMKYSB0cmFuc2xh dGlvbiB0aGVuIGNvbXBsZXRlcyB0aGUgcGFydGlhbCB3cml0ZSwgYmVmb3JlIG1vdmluZyBvbnRv IHRoZSBuZXh0CnRyYW5zbGF0aW9uLgoKSWYgYW4gaW5kaXZpZHVhbCBlbXVsYXRlZCB3cml0ZSBz dHJhZGRsZXMgdHdvIHBhZ2VzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMKd3JpdGFibGUsIGFuZCB0 aGUgc2Vjb25kIG9mIHdoaWNoIGlzIG5vdCwgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIHdyaXRlIHdp bGwKY29tcGxldGUgYmVmb3JlICNQRiBpcyByYWlzZWQgZnJvbSB0aGUgc2Vjb25kIGhhbGYuCgpU aGlzIHJlc3VsdHMgaW4gZ3Vlc3Qgc3RhdGUgY29ycnVwdGlvbiBhcyBhIHNpZGUgZWZmZWN0IG9m IGVtdWxhdGlvbiwgd2hpY2gKaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gY2F1c2Ugd2luZG93cyB0byBj cmFzaCB3aGlsZSB1bmRlciBpbnRyb3NwZWN0aW9uLgoKSW50cm9kdWNlIHRoZSBodm1lbXVsX3ss dW59bWFwX2xpbmVhcl9hZGRyKCkgaGVscGVycywgd2hpY2ggdHJhbnNsYXRlIGFuCmVudGlyZSBj b250ZW50cyBvZiBhIGxpbmVhciBhY2Nlc3MsIGFuZCB2bWFwKCkgdGhlIHVuZGVybHlpbmcgZnJh bWVzIHRvCnByb3ZpZGUgYSBjb250aWd1b3VzIHZpcnR1YWwgbWFwcGluZyBmb3IgdGhlIGVtdWxh dG9yIHRvIHVzZS4gIFRoaXMgaXMgdGhlCnNhbWUgbWVjaGFuaXNtIGFzIHVzZWQgYnkgdGhlIHNo YWRvdyBlbXVsYXRpb24gY29kZS4KClRoaXMgd2lsbCBjYXRjaCBhbnkgdHJhbnNsYXRpb24gaXNz dWVzIGFuZCBhYm9ydCB0aGUgZW11bGF0aW9uIGJlZm9yZSBhbnkKbW9kaWZpY2F0aW9ucyBvY2N1 ci4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b20+ClNpZ25lZC1vZmYtYnk6IEFsZXhhbmRydSBJc2FpbGEgPGFpc2FpbGFAYml0ZGVmZW5kZXIu Y29tPgoKLS0tCkNoYW5nZXMgc2luY2UgVjM6CgktIENoYW5nZWQgdGhlIGlmIGNvbmRpdGlvbiBm b3JtIC4uLiA+IC4uLiAtMSB0byAuLi4gPj0gLi4uCgktIFJlbW92ZWQgbG9uZyBjYXN0IHRvIHRo ZSBlcnIgdmFyCgktIE1vdmVkIHRoZSBtZm4rKyBjbG9zZXIgdG8gdGhlIGVuZCBvZiB0aGUgbG9v cAoJLSBJbnRlZ3JhdGVkIHRoZSArK2ZyYW1lIGluIHRoZSB3aGlsZSBjb25kaXRpb24KLS0tCiB4 ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYyAgICAgICAgfCAxNzUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2VtdWxhdGUuaCB8 ICAgNyArKwogMiBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMgYi94ZW4vYXJjaC94 ODYvaHZtL2VtdWxhdGUuYwppbmRleCBjYzg3NGNlLi45ODY2ZDY0IDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvaHZtL2VtdWxhdGUuYworKysgYi94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwpA QCAtNDk4LDYgKzQ5OCwxNTcgQEAgc3RhdGljIGludCBodm1lbXVsX2RvX21taW9fYWRkcihwYWRk cl90IG1taW9fZ3BhLAogfQogCiAvKgorICogTWFwIHRoZSBmcmFtZShzKSBjb3ZlcmluZyBhbiBp bmRpdmlkdWFsIGxpbmVhciBhY2Nlc3MsIGZvciB3cml0ZWFibGUKKyAqIGFjY2Vzcy4gIE1heSBy ZXR1cm4gTlVMTCBmb3IgTU1JTywgb3IgRVJSX1BUUih+WDg2RU1VTF8qKSBmb3Igb3RoZXIgZXJy b3JzCisgKiBpbmNsdWRpbmcgRVJSX1BUUih+WDg2RU1VTF9PS0FZKSBmb3Igd3JpdGUtZGlzY2Fy ZCBtYXBwaW5ncy4KKyAqCisgKiBJbiBkZWJ1ZyBidWlsZHMsIG1hcCgpIGNoZWNrcyB0aGF0IGVh Y2ggc2xvdCBpbiBodm1lbXVsX2N0eHQtPm1mbltdIGlzCisgKiBjbGVhbiBiZWZvcmUgdXNlLCBh bmQgcG9pc2lvbnMgdW51c2VkIHNsb3RzIHdpdGggSU5WQUxJRF9NRk4uCisgKi8KK3N0YXRpYyB2 b2lkICpodm1lbXVsX21hcF9saW5lYXJfYWRkcigKKyAgICB1bnNpZ25lZCBsb25nIGxpbmVhciwg dW5zaWduZWQgaW50IGJ5dGVzLCB1aW50MzJfdCBwZmVjLAorICAgIHN0cnVjdCBodm1fZW11bGF0 ZV9jdHh0ICpodm1lbXVsX2N0eHQpCit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50 OworICAgIHZvaWQgKmVyciwgKm1hcHBpbmc7CisKKyAgICAvKiBGaXJzdCBhbmQgZmluYWwgZ2Zu cyB3aGljaCBuZWVkIG1hcHBpbmcuICovCisgICAgdW5zaWduZWQgbG9uZyBmcmFtZSA9IGxpbmVh ciA+PiBQQUdFX1NISUZULCBmaXJzdCA9IGZyYW1lOworICAgIHVuc2lnbmVkIGxvbmcgZmluYWwg PSAobGluZWFyICsgYnl0ZXMgLSAhIWJ5dGVzKSA+PiBQQUdFX1NISUZUOworCisgICAgLyoKKyAg ICAgKiBtZm4gcG9pbnRzIHRvIHRoZSBuZXh0IGZyZWUgc2xvdC4gIEFsbCB1c2VkIHNsb3RzIGhh dmUgYSBwYWdlIHJlZmVyZW5jZQorICAgICAqIGhlbGQgb24gdGhlbS4KKyAgICAgKi8KKyAgICBt Zm5fdCAqbWZuID0gJmh2bWVtdWxfY3R4dC0+bWZuWzBdOworCisgICAgLyoKKyAgICAgKiBUaGUg Y2FsbGVyIGhhcyBubyBsZWdpdGltYXRlIHJlYXNvbiBmb3IgdHJ5aW5nIGEgemVyby1ieXRlIHdy aXRlLCBidXQKKyAgICAgKiBmaW5hbCBpcyBjYWxjdWxhdGUgdG8gZmFpbCBzYWZlIGluIHJlbGVh c2UgYnVpbGRzLgorICAgICAqCisgICAgICogVGhlIG1heGltdW0gd3JpdGUgc2l6ZSBkZXBlbmRz IG9uIHRoZSBudW1iZXIgb2YgYWRqYWNlbnQgbWZuc1tdIHdoaWNoCisgICAgICogY2FuIGJlIHZt YXAoKSdkLCBhY2NvdXRpbmcgZm9yIHBvc3NpYmxlIG1pc2FsaWdubWVudCB3aXRoaW4gdGhlIHJl Z2lvbi4KKyAgICAgKiBUaGUgaGlnaGVyIGxldmVsIGVtdWxhdGlvbiBjYWxsZXJzIGFyZSByZXNw b25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdAorICAgICAqIG1mbnNbXSBpcyBsYXJnZSBlbm91Z2gg Zm9yIHRoZSByZXF1ZXN0ZWQgd3JpdGUgc2l6ZS4KKyAgICAgKi8KKyAgICBpZiAoIGJ5dGVzID09 IDAgfHwKKyAgICAgICAgIGZpbmFsIC0gZmlyc3QgPj0gQVJSQVlfU0laRShodm1lbXVsX2N0eHQt Pm1mbikgKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7CisgICAgICAgIGdv dG8gdW5oYW5kbGVhYmxlOworICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgZW51bSBodm1fdHJh bnNsYXRpb25fcmVzdWx0IHJlczsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAg ICAgICAgcGFnZWZhdWx0X2luZm9fdCBwZmluZm87CisgICAgICAgIHAybV90eXBlX3QgcDJtdDsK KworICAgICAgICAvKiBFcnJvciBjaGVja2luZy4gIENvbmZpcm0gdGhhdCB0aGUgY3VycmVudCBz bG90IGlzIGNsZWFuLiAqLworICAgICAgICBBU1NFUlQobWZuX3goKm1mbikgPT0gMCk7CisKKyAg ICAgICAgcmVzID0gaHZtX3RyYW5zbGF0ZV9nZXRfcGFnZShjdXJyLCBmcmFtZSA8PCBQQUdFX1NI SUZULCB0cnVlLCBwZmVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZw ZmluZm8sICZwYWdlLCBOVUxMLCAmcDJtdCk7CisKKyAgICAgICAgc3dpdGNoICggcmVzICkKKyAg ICAgICAgeworICAgICAgICBjYXNlIEhWTVRSQU5TX29rYXk6CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlIEhWTVRSQU5TX2JhZF9saW5lYXJfdG9fZ2ZuOgorICAgICAgICAgICAg eDg2X2VtdWxfcGFnZWZhdWx0KHBmaW5mby5lYywgcGZpbmZvLmxpbmVhciwgJmh2bWVtdWxfY3R4 dC0+Y3R4dCk7CisgICAgICAgICAgICBlcnIgPSBFUlJfUFRSKH5YODZFTVVMX0VYQ0VQVElPTik7 CisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBjYXNlIEhWTVRSQU5TX2JhZF9nZm5f dG9fbWZuOgorICAgICAgICAgICAgZXJyID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gb3V0Owor CisgICAgICAgIGNhc2UgSFZNVFJBTlNfZ2ZuX3BhZ2VkX291dDoKKyAgICAgICAgY2FzZSBIVk1U UkFOU19nZm5fc2hhcmVkOgorICAgICAgICAgICAgZXJyID0gRVJSX1BUUih+WDg2RU1VTF9SRVRS WSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgZ290byB1bmhhbmRsZWFibGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHAybV9pc19k aXNjYXJkX3dyaXRlKHAybXQpICkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyID0gRVJSX1BU Uih+WDg2RU1VTF9PS0FZKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAg ICAgICAgKm1mbisrID0gX21mbihwYWdlX3RvX21mbihwYWdlKSk7CisKKyAgICB9IHdoaWxlICgg KytmcmFtZSA8IGZpbmFsICk7CisKKyAgICAvKiBFbnRpcmUgYWNjZXNzIHdpdGhpbiBhIHNpbmds ZSBmcmFtZT8gKi8KKyAgICBpZiAoIGZpcnN0ID09IGZpbmFsICkKKyAgICAgICAgbWFwcGluZyA9 IG1hcF9kb21haW5fcGFnZShodm1lbXVsX2N0eHQtPm1mblswXSk7CisgICAgLyogTXVsdGlwbGUg ZnJhbWVzPyBOZWVkIHRvIHZtYXAoKS4gKi8KKyAgICBlbHNlIGlmICggKG1hcHBpbmcgPSB2bWFw KGh2bWVtdWxfY3R4dC0+bWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwg LSBmaXJzdCArIDEpKSA9PSBOVUxMICkKKyAgICAgICAgZ290byB1bmhhbmRsZWFibGU7CisKKyNp Zm5kZWYgTkRFQlVHIC8qIFBvaXNpb24gdW51c2VkIG1mbltdcyB3aXRoIElOVkFMSURfTUZOLiAq LworICAgIHdoaWxlICggbWZuIDwgaHZtZW11bF9jdHh0LT5tZm4gKyBBUlJBWV9TSVpFKGh2bWVt dWxfY3R4dC0+bWZuKSApCisgICAgeworICAgICAgICBBU1NFUlQobWZuX3goKm1mbikgPT0gMCk7 CisgICAgICAgICptZm4rKyA9IElOVkFMSURfTUZOOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0 dXJuIG1hcHBpbmcgKyAobGluZWFyICYgflBBR0VfTUFTSyk7CisKKyB1bmhhbmRsZWFibGU6Cisg ICAgZXJyID0gRVJSX1BUUih+WDg2RU1VTF9VTkhBTkRMRUFCTEUpOworCisgb3V0OgorICAgIC8q IERyb3AgYWxsIGhlbGQgcmVmZXJlbmNlcy4gKi8KKyAgICB3aGlsZSAoIG1mbi0tID4gaHZtZW11 bF9jdHh0LT5tZm4gKQorICAgICAgICBwdXRfcGFnZShtZm5fdG9fcGFnZShtZm5feCgqbWZuKSkp OworCisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaHZtZW11bF91bm1hcF9saW5l YXJfYWRkcigKKyAgICB2b2lkICptYXBwaW5nLCB1bnNpZ25lZCBsb25nIGxpbmVhciwgdW5zaWdu ZWQgaW50IGJ5dGVzLAorICAgIHN0cnVjdCBodm1fZW11bGF0ZV9jdHh0ICpodm1lbXVsX2N0eHQp Cit7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyZW50LT5kb21haW47CisgICAgdW5z aWduZWQgbG9uZyBmcmFtZSA9IGxpbmVhciA+PiBQQUdFX1NISUZUOworICAgIHVuc2lnbmVkIGxv bmcgZmluYWwgPSAobGluZWFyICsgYnl0ZXMgLSAhIWJ5dGVzKSA+PiBQQUdFX1NISUZUOworICAg IG1mbl90ICptZm4gPSAmaHZtZW11bF9jdHh0LT5tZm5bMF07CisKKyAgICBBU1NFUlQoYnl0ZXMg PiAwKTsKKworICAgIGlmICggZnJhbWUgPT0gZmluYWwgKQorICAgICAgICB1bm1hcF9kb21haW5f cGFnZShtYXBwaW5nKTsKKyAgICBlbHNlCisgICAgICAgIHZ1bm1hcChtYXBwaW5nKTsKKworICAg IGRvCisgICAgeworICAgICAgICBBU1NFUlQobWZuX3ZhbGlkKCptZm4pKTsKKyAgICAgICAgcGFn aW5nX21hcmtfZGlydHkoY3VycmQsICptZm4pOworICAgICAgICBwdXRfcGFnZShtZm5fdG9fcGFn ZShtZm5feCgqbWZuKSkpOworCisgICAgICAgICptZm4rKyA9IF9tZm4oMCk7IC8qIENsZWFuIHNs b3QgZm9yIG1hcCgpJ3MgZXJyb3IgY2hlY2tpbmcuICovCisKKyAgICB9IHdoaWxlICggKytmcmFt ZSA8IGZpbmFsICk7CisKKworI2lmbmRlZiBOREVCVUcgLyogQ2hlY2sgKGFuZCBjbGVhbikgYWxs IHVudXNlZCBtZm5zLiAqLworICAgIHdoaWxlICggbWZuIDwgaHZtZW11bF9jdHh0LT5tZm4gKyBB UlJBWV9TSVpFKGh2bWVtdWxfY3R4dC0+bWZuKSApCisgICAgeworICAgICAgICBBU1NFUlQobWZu X2VxKCptZm4sIElOVkFMSURfTUZOKSk7CisgICAgICAgICptZm4rKyA9IF9tZm4oMCk7CisgICAg fQorI2VuZGlmCit9CisKKy8qCiAgKiBDb252ZXJ0IGFkZHIgZnJvbSBsaW5lYXIgdG8gcGh5c2lj YWwgZm9ybSwgdmFsaWQgb3ZlciB0aGUgcmFuZ2UKICAqIFthZGRyLCBhZGRyICsgKnJlcHMgKiBi eXRlc19wZXJfcmVwXS4gKnJlcHMgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nIHRvCiAgKiB0aGUgdmFs aWQgY29tcHV0ZWQgcmFuZ2UuIEl0IGlzIGFsd2F5cyA+MCB3aGVuIFg4NkVNVUxfT0tBWSBpcyBy ZXR1cm5lZC4KQEAgLTk4OCwxMSArMTEzOSwxMSBAQCBzdGF0aWMgaW50IGh2bWVtdWxfd3JpdGUo CiAgICAgc3RydWN0IGh2bV9lbXVsYXRlX2N0eHQgKmh2bWVtdWxfY3R4dCA9CiAgICAgICAgIGNv bnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCwgY3R4dCk7CiAgICAgc3Ry dWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwotICAgIHBhZ2VmYXVsdF9pbmZvX3QgcGZpbmZvOwog ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcmVwcyA9IDE7CiAgICAgdWludDMyX3QgcGZlYyA9IFBG RUNfcGFnZV9wcmVzZW50IHwgUEZFQ193cml0ZV9hY2Nlc3M7CiAgICAgc3RydWN0IGh2bV92Y3B1 X2lvICp2aW8gPSAmY3Vyci0+YXJjaC5odm1fdmNwdS5odm1faW87CiAgICAgaW50IHJjOworICAg IHZvaWQgKm1hcHBpbmc7CiAKICAgICBpZiAoIGlzX3g4Nl9zeXN0ZW1fc2VnbWVudChzZWcpICkK ICAgICAgICAgcGZlYyB8PSBQRkVDX2ltcGxpY2l0OwpAQCAtMTAwOCwyMyArMTE1OSwxMyBAQCBz dGF0aWMgaW50IGh2bWVtdWxfd3JpdGUoCiAgICAgICAgICAodmlvLT5tbWlvX2dsYSA9PSAoYWRk ciAmIFBBR0VfTUFTSykpICkKICAgICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fd3Jp dGUoYWRkciwgYnl0ZXMsIHBfZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0LCAxKTsKIAotICAgIHJj ID0gaHZtX2NvcHlfdG9fZ3Vlc3RfbGluZWFyKGFkZHIsIHBfZGF0YSwgYnl0ZXMsIHBmZWMsICZw ZmluZm8pOworICAgIG1hcHBpbmcgPSBodm1lbXVsX21hcF9saW5lYXJfYWRkcihhZGRyLCBieXRl cywgcGZlYywgaHZtZW11bF9jdHh0KTsKKyAgICBpZiAoIElTX0VSUihtYXBwaW5nKSApCisgICAg ICAgIHJldHVybiB+UFRSX0VSUihtYXBwaW5nKTsKIAotICAgIHN3aXRjaCAoIHJjICkKLSAgICB7 Ci0gICAgY2FzZSBIVk1UUkFOU19va2F5OgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEhWTVRS QU5TX2JhZF9saW5lYXJfdG9fZ2ZuOgotICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQocGZpbmZv LmVjLCBwZmluZm8ubGluZWFyLCAmaHZtZW11bF9jdHh0LT5jdHh0KTsKLSAgICAgICAgcmV0dXJu IFg4NkVNVUxfRVhDRVBUSU9OOwotICAgIGNhc2UgSFZNVFJBTlNfYmFkX2dmbl90b19tZm46Ci0g ICAgICAgIHJldHVybiBodm1lbXVsX2xpbmVhcl9tbWlvX3dyaXRlKGFkZHIsIGJ5dGVzLCBwX2Rh dGEsIHBmZWMsIGh2bWVtdWxfY3R4dCwgMCk7Ci0gICAgY2FzZSBIVk1UUkFOU19nZm5fcGFnZWRf b3V0OgotICAgIGNhc2UgSFZNVFJBTlNfZ2ZuX3NoYXJlZDoKLSAgICAgICAgcmV0dXJuIFg4NkVN VUxfUkVUUlk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOwotICAgIH0KKyAgICBtZW1jcHkobWFwcGluZywgcF9kYXRhLCBieXRlcyk7CisKKyAgICBo dm1lbXVsX3VubWFwX2xpbmVhcl9hZGRyKG1hcHBpbmcsIGFkZHIsIGJ5dGVzLCBodm1lbXVsX2N0 eHQpOwogCiAgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKIH0KZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS14ODYvaHZtL2VtdWxhdGUuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2VtdWxh dGUuaAppbmRleCA4ODY0Nzc1Li5kMzc5YTRhIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20t eDg2L2h2bS9lbXVsYXRlLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9odm0vZW11bGF0ZS5o CkBAIC0zNyw2ICszNywxMyBAQCBzdHJ1Y3QgaHZtX2VtdWxhdGVfY3R4dCB7CiAgICAgdW5zaWdu ZWQgbG9uZyBzZWdfcmVnX2FjY2Vzc2VkOwogICAgIHVuc2lnbmVkIGxvbmcgc2VnX3JlZ19kaXJ0 eTsKIAorICAgIC8qCisgICAgICogTUZOcyBiZWhpbmQgdGVtcG9yYXJ5IG1hcHBpbmdzIGluIHRo ZSB3cml0ZSBjYWxsYmFjay4gIFRoZSBsZW5ndGggaXMKKyAgICAgKiBhcmJpdHJhcnksIGFuZCBj YW4gYmUgaW5jcmVhc2VkIGlmIHdyaXRlcyBsb25nZXIgdGhhbiBQQUdFX1NJWkUrMSBhcmUKKyAg ICAgKiBuZWVkZWQuCisgICAgICovCisgICAgbWZuX3QgbWZuWzJdOworCiAgICAgdWludDMyX3Qg aW50cl9zaGFkb3c7CiAKICAgICBib29sX3Qgc2V0X2NvbnRleHQ7Ci0tIAoyLjcuNAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=