From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: [PATCHv2 2/2] xen/privcmd: add ioctls for locking/unlocking hypercall buffers Date: Thu, 4 Aug 2016 16:16:40 +0100 Message-ID: <1470323800-9481-3-git-send-email-david.vrabel@citrix.com> References: <1470323800-9481-1-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bVKOI-0006zG-Sn for xen-devel@lists.xenproject.org; Thu, 04 Aug 2016 15:16:58 +0000 In-Reply-To: <1470323800-9481-1-git-send-email-david.vrabel@citrix.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: Juergen Gross , Boris Ostrovsky , David Vrabel List-Id: xen-devel@lists.xenproject.org VXNpbmcgbWxvY2soKSBmb3IgaHlwZXJjYWxsIGJ1ZmZlcnMgaXMgbm90IHN1ZmZpY2llbnQgc2lu Y2UgbWxvY2tlZApwYWdlcyBhcmUgc3RpbGwgc3ViamVjdCB0byBjb21wYWN0aW9uIGFuZCBwYWdl IG1pZ3JhdGlvbi4gIFBhZ2UKbWlncmF0aW9uIGNhbiBiZSBwcmV2ZW50ZWQgYnkgdGFraW5nIGFk ZGl0aW9uYWwgcmVmZXJlbmNlcyB0byB0aGUKcGFnZXMuCgpJbnRyb2R1Y2UgdHdvIG5ldyBpb2N0 bHM6IElPQ1RMX1BSSVZDTURfSENBTExfQlVGX0xPQ0sgYW5kCklPQ1RMX1BSSVZDTURfSENBTExf QlVGX1VOTE9DSyB3aGljaCBnZXQgYW5kIHB1dCB0aGUgbmVjZXNzYXJ5IHBhZ2UKcmVmZXJlbmNl cy4gIFRoZSBidWZmZXJzIGRvIG5vdCBuZWVkIHRvIGJlIHBhZ2UgYWxpZ25lZCBhbmQgdGhleSBt YXkKb3ZlcmxhcCB3aXRoIG90aGVyIGJ1ZmZlcnMuICBIb3dldmVyLCBpdCBpcyBub3QgcG9zc2li bGUgdG8gcGFydGlhbGx5CnVubG9jayBhIGJ1ZmZlciAoaS5lLiwgdGhlIExPQ0svVU5MT0NLIG11 c3QgYWx3YXlzIGJlIHBhaXJlZCkuICBBbnkKbG9ja2VkIGJ1ZmZlcnMgYXJlIGF1dG9tYXRpY2Fs bHkgdW5sb2NrZWQgd2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzCmNsb3NlZC4KCkFuIGFsdGVy bmF0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGV4dGVuZCB0aGUgZHJpdmVyIHdpdGggYW4gaW9j dGwgdG8KcG9wdWxhdGUgYSBWTUEgd2l0aCAic3BlY2lhbCIsIG5vbi1taWdyYXRhYmxlIHBhZ2Vz LiAgQnV0IHRoZQpMT0NLL1VOTE9DSyBpb2N0bHMgYXJlIG1vcmUgZmxleGlibGUgYXMgdGhleSBh bGxvdyBhbnkgcGFnZSB0byBiZSB1c2VkCmZvciBoeXBlcmNhbGxzIChlLmcuLCBzdGFjaywgbW1h cCdkIGZpbGVzLCBldGMuKS4gIFRoaXMgY291bGQgYmUgdXNlZAp0byBtaW5pbWl6ZSBib3VuY2lu ZyBmb3IgcGVyZm9ybWFuY2UgY3JpdGljYWwgaHlwZXJjYWxscy4KClNpZ25lZC1vZmYtYnk6IERh dmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNpdHJpeC5jb20+Ci0tLQp2MjoKLSBPbmx5IHRha2Ug b25lIHJlZmVyZW5jZSBwZXIgYnVmZmVyLgotIEludGVyYXRlIG92ZXIgdGhlIHRyZWUgdG8gdW5s b2NrL2ZyZWUgYWxsIGJ1ZmZlcnMuCi0gTWF4IDFHQiBzaXplIHBlciBidWZmZXIuCi0gT25seSB1 c2Ugb25lIG1lbW9yeSBhbGxvY2F0aW9uIHBlciBidWZmZXIuCi0gRml4IG92ZXJmbG93IGlzc3Vl cyBpbiBwcml2Y21kX2hidWZfY29tcGFyZSgpLgotIFJldHVybiAtRU5YSU8gd2hlbiB1bmxvY2tp bmcgYW4gdW5sb2NrZWQgYnVmZmVyLgotLS0KIGRyaXZlcnMveGVuL3ByaXZjbWQuYyAgICAgIHwg MjE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVk ZS91YXBpL3hlbi9wcml2Y21kLmggfCAgMzggKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjU0 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9wcml2Y21kLmMgYi9kcml2 ZXJzL3hlbi9wcml2Y21kLmMKaW5kZXggYWM3NmJjNC4uNTQxOWIzMSAxMDA2NDQKLS0tIGEvZHJp dmVycy94ZW4vcHJpdmNtZC5jCisrKyBiL2RyaXZlcnMveGVuL3ByaXZjbWQuYwpAQCAtMjIsNiAr MjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFf ZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9y YnRyZWUuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFi bGUuaD4KQEAgLTQzLDYgKzQ0LDE5IEBAIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2RlZmlu ZSBQUklWX1ZNQV9MT0NLRUQgKCh2b2lkICopMSkKIAorc3RydWN0IHByaXZjbWRfZGF0YSB7CisJ c3RydWN0IHJiX3Jvb3QgaGJ1Zl9yb290OworCXN0cnVjdCBtdXRleCBoYnVmX211dGV4OworfTsK Kworc3RydWN0IHByaXZjbWRfaGJ1ZiB7CisJc3RydWN0IHJiX25vZGUgbm9kZTsKKwlzdHJ1Y3Qg cHJpdmNtZF9oY2FsbF9idWYgYnVmOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBp bnQgbnJfcGFnZXM7CisJc3RydWN0IHBhZ2UgKnBhZ2VzWzBdOworfTsKKwogc3RhdGljIGludCBw cml2Y21kX3ZtYV9yYW5nZV9pc19tYXBwZWQoCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSwKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTU0 OCw5ICs1NjIsMTc1IEBAIG91dF91bmxvY2s6CiAJZ290byBvdXQ7CiB9CiAKK3N0YXRpYyB2b2lk IHByaXZjbWRfaGJ1Zl9mcmVlKHN0cnVjdCBwcml2Y21kX2hidWYgKmhidWYpCit7CisJdW5zaWdu ZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaGJ1Zi0+bnJfcGFnZXM7IGkrKykKKwkJcHV0 X3BhZ2UoaGJ1Zi0+cGFnZXNbaV0pOworCisJa2ZyZWUoaGJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcHJpdmNtZF9oYnVmICpwcml2Y21kX2hidWZfYWxsb2Moc3RydWN0IHByaXZjbWRfaGNhbGxf YnVmICpidWYpCit7CisJc3RydWN0IHByaXZjbWRfaGJ1ZiAqaGJ1ZjsKKwl1bnNpZ25lZCBsb25n IHN0YXJ0LCBlbmQsIG5yX3BhZ2VzOworCWludCByZXQ7CisKKwlzdGFydCA9ICh1bnNpZ25lZCBs b25nKWJ1Zi0+c3RhcnQgJiBQQUdFX01BU0s7CisJZW5kID0gQUxJR04oKHVuc2lnbmVkIGxvbmcp YnVmLT5zdGFydCArIGJ1Zi0+bGVuLCBQQUdFX1NJWkUpOworCW5yX3BhZ2VzID0gKGVuZCAtIHN0 YXJ0KSAvIFBBR0VfU0laRTsKKworCWhidWYgPSBremFsbG9jKHNpemVvZigqaGJ1ZikgKyBucl9w YWdlcyAqIHNpemVvZihoYnVmLT5wYWdlc1swXSksCisJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlp ZiAoIWhidWYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyoKKwkgKiBUYWtlIGEg cmVmZXJlbmNlIHRvIGVhY2ggcGFnZSwgdGhpcyB3aWxsIHByZXZlbnQgc3dhcHBpbmcKKwkgKiBh bmQgcGFnZSBtaWdyYXRpb24uCisJICovCisJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChzdGFy dCwgbnJfcGFnZXMsIDEsIGhidWYtPnBhZ2VzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJv cjsKKworCWhidWYtPmJ1ZiA9ICpidWY7CisJaGJ1Zi0+Y291bnQgPSAxOworCWhidWYtPm5yX3Bh Z2VzID0gcmV0OworCisJaWYgKGhidWYtPm5yX3BhZ2VzICE9IG5yX3BhZ2VzKSB7CisJCXJldCA9 IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJcmV0dXJuIGhidWY7CisKKyAgZXJyb3I6 CisJcHJpdmNtZF9oYnVmX2ZyZWUoaGJ1Zik7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwor c3RhdGljIGludCBwcml2Y21kX2hidWZfY29tcGFyZShzdHJ1Y3QgcHJpdmNtZF9oY2FsbF9idWYg KmEsCisJCQkJc3RydWN0IHByaXZjbWRfaGNhbGxfYnVmICpiKQoreworCWlmIChiLT5zdGFydCA+ IGEtPnN0YXJ0KQorCQlyZXR1cm4gMTsKKwlpZiAoYi0+c3RhcnQgPCBhLT5zdGFydCkKKwkJcmV0 dXJuIC0xOworCWlmIChiLT5sZW4gPiBhLT5sZW4pCisJCXJldHVybiAxOworCWlmIChiLT5sZW4g PCBhLT5sZW4pCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcml2 Y21kX2hidWZfaW5zZXJ0KHN0cnVjdCBwcml2Y21kX2RhdGEgKnByaXYsCisJCQkJc3RydWN0IHBy aXZjbWRfaGNhbGxfYnVmICpidWYpCit7CisJc3RydWN0IHJiX25vZGUgKipuZXcgPSAmcHJpdi0+ aGJ1Zl9yb290LnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBwcml2Y21kX2hidWYg KmhidWY7CisKKwkvKiBGaWd1cmUgb3V0IHdoZXJlIHRvIHB1dCBuZXcgbm9kZSAqLworCXdoaWxl ICgqbmV3KSB7CisJCXN0cnVjdCBwcml2Y21kX2hidWYgKnRoaXMgPSBjb250YWluZXJfb2YoKm5l dywgc3RydWN0IHByaXZjbWRfaGJ1Ziwgbm9kZSk7CisJCWludCByZXN1bHQgPSBwcml2Y21kX2hi dWZfY29tcGFyZShidWYsICZ0aGlzLT5idWYpOworCisJCXBhcmVudCA9ICpuZXc7CisJCWlmIChy ZXN1bHQgPCAwKQorCQkJbmV3ID0gJigqbmV3KS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAocmVzdWx0 ID4gMCkKKwkJCW5ldyA9ICYoKm5ldyktPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXRoaXMtPmNv dW50Kys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIEFsbG9jYXRlIGFuZCBpbnNlcnQg YSBuZXcgbm9kZS4gKi8KKwloYnVmID0gcHJpdmNtZF9oYnVmX2FsbG9jKGJ1Zik7CisJaWYgKElT X0VSUihoYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGJ1Zik7CisKKwlyYl9saW5rX25vZGUoJmhi dWYtPm5vZGUsIHBhcmVudCwgbmV3KTsKKwlyYl9pbnNlcnRfY29sb3IoJmhidWYtPm5vZGUsICZw cml2LT5oYnVmX3Jvb3QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpdmNtZF9o YnVmX3JlbW92ZShzdHJ1Y3QgcHJpdmNtZF9kYXRhICpwcml2LAorCQkJICAgICAgIHN0cnVjdCBw cml2Y21kX2hjYWxsX2J1ZiAqa2V5KQoreworCXN0cnVjdCByYl9ub2RlICpub2RlID0gcHJpdi0+ aGJ1Zl9yb290LnJiX25vZGU7CisKKwl3aGlsZSAobm9kZSkgeworCQlzdHJ1Y3QgcHJpdmNtZF9o YnVmICpoYnVmID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBwcml2Y21kX2hidWYsIG5vZGUp OworCQlpbnQgcmVzdWx0OworCisJCXJlc3VsdCA9IHByaXZjbWRfaGJ1Zl9jb21wYXJlKGtleSwg JmhidWYtPmJ1Zik7CisKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlub2RlID0gbm9kZS0+cmJfbGVm dDsKKwkJZWxzZSBpZiAocmVzdWx0ID4gMCkKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdodDsKKwkJ ZWxzZSB7CisJCQlpZiAoLS1oYnVmLT5jb3VudCA9PSAwKSB7CisJCQkJcmJfZXJhc2UoJmhidWYt Pm5vZGUsICZwcml2LT5oYnVmX3Jvb3QpOworCQkJCXByaXZjbWRfaGJ1Zl9mcmVlKGhidWYpOwor CQkJfQorCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTlhJTzsKK30KKworc3RhdGlj IGludCBwcml2Y21kX2lvY3RsX2hjYWxsX2J1Zl9sb2NrKHN0cnVjdCBwcml2Y21kX2RhdGEgKnBy aXYsCisJCQkJCXZvaWQgX191c2VyICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgcHJpdmNtZF9oY2FsbF9i dWYgYnVmOworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWRhdGEsIHNp emVvZihidWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoYnVmLmxlbiA+ICgxIDw8IDMw KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwcml2LT5oYnVmX211dGV4KTsK KwlyZXQgPSBwcml2Y21kX2hidWZfaW5zZXJ0KHByaXYsICZidWYpOworCW11dGV4X3VubG9jaygm cHJpdi0+aGJ1Zl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByaXZj bWRfaW9jdGxfaGNhbGxfYnVmX3VubG9jayhzdHJ1Y3QgcHJpdmNtZF9kYXRhICpwcml2LAorCQkJ CQkgIHZvaWQgX191c2VyICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgcHJpdmNtZF9oY2FsbF9idWYgYnVm OworCWludCByZXQ7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWRhdGEsIHNpemVvZihi dWYpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5oYnVmX211dGV4 KTsKKwlyZXQgPSBwcml2Y21kX2hidWZfcmVtb3ZlKHByaXYsICZidWYpOworCW11dGV4X3VubG9j aygmcHJpdi0+aGJ1Zl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBw cml2Y21kX2hidWZfdW5sb2NrX2FsbChzdHJ1Y3QgcHJpdmNtZF9kYXRhICpwcml2KQoreworCXN0 cnVjdCBwcml2Y21kX2hidWYgKmhidWYsICpuOworCisJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFj aF9lbnRyeV9zYWZlKGhidWYsIG4sICZwcml2LT5oYnVmX3Jvb3QsIG5vZGUpCisJCXByaXZjbWRf aGJ1Zl9mcmVlKGhidWYpOworfQorCiBzdGF0aWMgbG9uZyBwcml2Y21kX2lvY3RsKHN0cnVjdCBm aWxlICpmaWxlLAogCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpCiB7 CisJc3RydWN0IHByaXZjbWRfZGF0YSAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQg cmV0ID0gLUVOT1NZUzsKIAl2b2lkIF9fdXNlciAqdWRhdGEgPSAodm9pZCBfX3VzZXIgKikgZGF0 YTsKIApAQCAtNTcxLDYgKzc1MSwxNCBAQCBzdGF0aWMgbG9uZyBwcml2Y21kX2lvY3RsKHN0cnVj dCBmaWxlICpmaWxlLAogCQlyZXQgPSBwcml2Y21kX2lvY3RsX21tYXBfYmF0Y2godWRhdGEsIDIp OwogCQlicmVhazsKIAorCWNhc2UgSU9DVExfUFJJVkNNRF9IQ0FMTF9CVUZfTE9DSzoKKwkJcmV0 ID0gcHJpdmNtZF9pb2N0bF9oY2FsbF9idWZfbG9jayhwcml2LCB1ZGF0YSk7CisJCWJyZWFrOwor CisJY2FzZSBJT0NUTF9QUklWQ01EX0hDQUxMX0JVRl9VTkxPQ0s6CisJCXJldCA9IHByaXZjbWRf aW9jdGxfaGNhbGxfYnVmX3VubG9jayhwcml2LCB1ZGF0YSk7CisJCWJyZWFrOworCiAJZGVmYXVs dDoKIAkJcmV0ID0gLUVOT1RUWTsKIAkJYnJlYWs7CkBAIC02NDQsOCArODMyLDM2IEBAIHN0YXRp YyBpbnQgcHJpdmNtZF92bWFfcmFuZ2VfaXNfbWFwcGVkKAogCQkJCSAgIGlzX21hcHBlZF9mbiwg TlVMTCkgIT0gMDsKIH0KIAorc3RhdGljIGludCBwcml2Y21kX29wZW4oc3RydWN0IGlub2RlICpp bm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHByaXZjbWRfZGF0YSAqcHJpdjsK KworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghcHJp dikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5oYnVmX3Jvb3QgPSBSQl9ST09UOworCW11 dGV4X2luaXQoJnByaXYtPmhidWZfbXV0ZXgpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcHJp djsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaXZjbWRfcmVsZWFzZShzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgcHJpdmNtZF9kYXRh ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJcHJpdmNtZF9oYnVmX3VubG9ja19hbGwo cHJpdik7CisKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gMDsKK30KKwogY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyB4ZW5fcHJpdmNtZF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxF LAorCS5vcGVuID0gcHJpdmNtZF9vcGVuLAorCS5yZWxlYXNlID0gcHJpdmNtZF9yZWxlYXNlLAog CS51bmxvY2tlZF9pb2N0bCA9IHByaXZjbWRfaW9jdGwsCiAJLm1tYXAgPSBwcml2Y21kX21tYXAs CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3hlbi9wcml2Y21kLmggYi9pbmNsdWRlL3Vh cGkveGVuL3ByaXZjbWQuaAppbmRleCA3ZGRlZWRhLi5kNTlkMTIyIDEwMDY0NAotLS0gYS9pbmNs dWRlL3VhcGkveGVuL3ByaXZjbWQuaAorKysgYi9pbmNsdWRlL3VhcGkveGVuL3ByaXZjbWQuaApA QCAtNzcsNiArNzcsMTEgQEAgc3RydWN0IHByaXZjbWRfbW1hcGJhdGNoX3YyIHsKIAlpbnQgX191 c2VyICplcnI7ICAvKiBhcnJheSBvZiBlcnJvciBjb2RlcyAqLwogfTsKIAorc3RydWN0IHByaXZj bWRfaGNhbGxfYnVmIHsKKwl2b2lkIF9fdXNlciAqc3RhcnQ7CisJc2l6ZV90IGxlbjsKK307CisK IC8qCiAgKiBAY21kOiBJT0NUTF9QUklWQ01EX0hZUEVSQ0FMTAogICogQGFyZzogJnByaXZjbWRf aHlwZXJjYWxsX3QKQEAgLTk5LDQgKzEwNCwzNyBAQCBzdHJ1Y3QgcHJpdmNtZF9tbWFwYmF0Y2hf djIgewogI2RlZmluZSBJT0NUTF9QUklWQ01EX01NQVBCQVRDSF9WMgkJCQlcCiAJX0lPQyhfSU9D X05PTkUsICdQJywgNCwgc2l6ZW9mKHN0cnVjdCBwcml2Y21kX21tYXBiYXRjaF92MikpCiAKKy8q CisgKiBAY21kOiBJT0NUTF9QUklWQ01EX0hDQUxMX0JVRl9MT0NLCisgKiBAYXJnOiBzdHJ1Y3Qg cHJpdmNtZCBoY2FsbF9idWYgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MuIE9uIGFuIGVycm9y LCAtMSBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMgc2V0CisgKiB0byBFSU5WQUwgKGJ1ZmZlciB0 b28gbGFyZ2UpLCBFTk9NRU0sIG9yIEVGQVVMVC4KKyAqCisgKiBMb2NrcyBhIG1lbW9yeSBidWZm ZXIgc28gaXQgbWF5IGJlIHVzZWQgaW4gYSBoeXBlcmNhbGwuICBUaGlzIGlzCisgKiBzaW1pbGFy IHRvIG1sb2NrKDIpIGJ1dCBhbHNvIHByZXZlbnRzIGNvbXBhY3Rpb24vcGFnZSBtaWdyYXRpb24u CisgKgorICogVGhlIGJ1ZmZlcnMgbWF5IGhhdmUgYW55IGFsaWdubWVudCBhbmQgYW55IHNpemUg PD0gMSBHaUIuIFRoZXkgbWF5CisgKiBvdmVybGFwIG90aGVyIGJ1ZmZlcnMuCisgKgorICogTG9j a2VkIGJ1ZmZlcnMgYXJlIHVubG9ja2VkIHdpdGggSU9DVExfUFJJVkNNRF9IQ0FMTF9CVUZfVU5M T0NLIG9yCisgKiBieSBjbG9zaW5nIHRoZSBmaWxlIGhhbmRsZS4KKyAqLworI2RlZmluZSBJT0NU TF9QUklWQ01EX0hDQUxMX0JVRl9MT0NLCQkJCVwKKwlfSU9DKF9JT0NfTk9ORSwgJ1AnLCA1LCBz aXplb2Yoc3RydWN0IHByaXZjbWRfaGNhbGxfYnVmKSkKKworLyoKKyAqIEBjbWQ6IElPQ1RMX1BS SVZDTURfSENBTExfQlVGX1VOTE9DSworICogQGFyZzogc3RydWN0IHByaXZjbWQgaGNhbGxfYnVm ICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLiBPbiBhbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQg YW5kIGVycm5vIGlzIHNldAorICogdG8gRU5YSU8gKGJ1ZmZlciB3YXMgbm90IGxvY2tlZCksIG9y IEVGQVVMVC4KKyAqCisgKiBVbmxvY2tzIGEgbWVtb3J5IGJ1ZmZlciBwcmV2aW91c2x5IGxvY2tl ZCB3aXRoCisgKiBJT0NUTF9QUklWQ01EX0hDQUxMX0JVRl9MT0NLLgorICoKKyAqIEl0IGlzIG5v dCBwb3NzaWJsZSB0byBwYXJ0aWFsbHkgdW5sb2NrIGEgYnVmZmVyLiAgaS5lLiwgdGhlCisgKiBM T0NLL1VOTE9DSyBtdXN0IGJlIGV4YWN0bHkgcGFpcmVkLgorICovCisjZGVmaW5lIElPQ1RMX1BS SVZDTURfSENBTExfQlVGX1VOTE9DSwkJCQlcCisJX0lPQyhfSU9DX05PTkUsICdQJywgNiwgc2l6 ZW9mKHN0cnVjdCBwcml2Y21kX2hjYWxsX2J1ZikpCisKICNlbmRpZiAvKiBfX0xJTlVYX1BVQkxJ Q19QUklWQ01EX0hfXyAqLwotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK