From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v2 07/13] optee: add std call handling Date: Wed, 5 Sep 2018 16:17:53 +0100 Message-ID: <71623728-5776-16b3-1adc-39a3f2ff8939@arm.com> References: <1535993677-20816-1-git-send-email-volodymyr_babchuk@epam.com> <1535993677-20816-8-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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.89) (envelope-from ) id 1fxZZ7-0005mS-VH for xen-devel@lists.xenproject.org; Wed, 05 Sep 2018 15:17:58 +0000 In-Reply-To: <1535993677-20816-8-git-send-email-volodymyr_babchuk@epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Volodymyr Babchuk , xen-devel@lists.xenproject.org, xen-devel@lists.xen.org Cc: tee-dev@lists.linaro.org, Stefano Stabellini List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwOS8wMy8yMDE4IDA1OjU0IFBNLCBWb2xvZHlteXIgQmFiY2h1ayB3cm90ZToKPiBN YWluIHdheSB0byBjb21tdW5pY2F0ZSB3aXRoIE9QLVRFRSBpcyB0byBpc3N1ZSBzdGFuZGFyZCBT TUNDQwoKTklUOiBUaGUgbWFpbiB3YXkKCj4gY2FsbC4gIlN0YW5kYXJkIiBpcyBhIFNNQ0NDIHRl cm0gYW5kIGl0IG1lYW5zIHRoYXQgY2FsbCBjYW4gYmUKPiBpbnRlcnJ1cHRlZCBhbmQgT1AtVEVF IGNhbiByZXR1cm4gY29udHJvbCB0byBOVyBiZWZvcmUgY29tcGxldGluZwo+IHRoZSBjYWxsLgo+ IAo+IEluIGNvbnRyYW5zdCB3aXRoIGZhc3QgY2FsbHMsIHdoZXJlIGFyZ3VtZW50cyBhbmQgcmV0 dXJuIHZhbHVlcwoKTklUOiBzL2NvbnRyYW5zdC9jb250cmFzdC8KCj4gYXJlIHBhc3NlZCBpbiBy ZWdpc3RlcnMsIHN0YW5kYXJkIGNhbGxzIHVzZSBzaGFyZWQgbWVtb3J5LiBSZWdpc3Rlcgo+IHBh aXIgcjEscjIgaG9sZHMgNjQtYml0IFBBIG9mIGNvbW1hbmQgYnVmZmVyLCB3aGVyZSBhbGwgYXJn dW1lbnRzCgpEbyB5b3UgbWVhbiB3MSwgdzI/Cgo+IGFyZSBzdG9yZWQgYW5kIHdoaWNoIGlzIHVz ZWQgdG8gcmV0dXJuIGRhdGEuIE9QLVRFRSBpbnRlcm5hbGx5Cj4gY29waWVzIGNvbnRlbnRzIG9m IHRoaXMgYnVmZmVyIGludG8gb3duIHNlY3VyZSBtZW1vcnkgYmVmb3JlIGFjY2Vzc2luZwo+IGFu ZCB2YWxpZGF0aW5nIGFueSBkYXRhIGluIGNvbW1hbmQgYnVmZmVyLiBUaGlzIGlzIGRvbmUgdG8g bWFrZSBzdXJlCj4gdGhhdCBOVyB3aWxsIG5vdCBjaGFuZ2UgY29udGVudHMgb2YgdGhlIHZhbGlk YXRlZCBwYXJhbWV0ZXJzLgo+IAo+IE1lZGlhdG9yIG5lZWRzIHRvIGRvIHRoZSBzYW1lIGZvciBu dW1iZXIgb2YgcmVhc29uczoKPiAKPiAxLiBUbyBtYWtlIHN1cmUgdGhhdCBndWVzdCB3aWxsIG5v dCBjaGFuZ2UgZGF0YSBhZnRlciB2YWxpZGF0aW9uLgo+IDIuIFRvIHRyYW5zbGF0ZSBJUEFzIHRv IFBBcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgKHRoaXMgaXMgbm90IGRvbmUKPiAgICAgaW4gdGhp cyBwYXRjaCkuCj4gMy4gVG8gaGlkZSB0cmFuc2xhdGVkIGFkZHJlc3MgZnJvbSBndWVzdCwgc28g aXQgd2lsbCBub3QgYmUgYWJsZQo+ICAgICB0byBkbyBJUEEtPlBBIHRyYW5zbGF0aW9uIGJ5IG1p c3VzaW5nIG1lZGlhdG9yLgo+IAo+IEFsc28gbWVkaWF0b3IgcGlucyB0aGUgcGFnZSB3aXRoIG9y aWdpbmFsIGNvbW1hbmQgYnVmZmVyIGJlY2F1c2UKPiBpdCB3aWxsIHdyaXRlIHRvIGl0IGxhdGVy LCB3aGVuIHJldHVybmluZyByZXNwb25zZSBmcm9tIE9QLVRFRS4KCkkgZG9uJ3QgdGhpbmsgaXQg aXMgbmVjZXNzYXJ5IHRvIHBpbiB0aGUgZ3Vlc3QgY29tbWFuZCBidWZmZXIuIFlvdSBjYW4gCnVz ZSBndWVzdGNvcHkgaGVscGVyIHRvIGNvcHkgdG8vZnJvbSB0aGUgZ3Vlc3QgbWVtb3J5LgoKSWYg dGhlIGd1ZXN0IG1vZGlmeSB0aGUgUDJNIGF0IHRoZSBzYW1lIHRpbWUsIHRoZW4gaXQgaXMgbm90 IG91ciAKYnVzaW5lc3MgaWYgc29tZXRoaW5nIHdyb25nIGhhcHBlbi4gVGhlIG9ubHkgdGhpbmdz IHdlIG5lZWQgdG8gcHJldmVudCAKaGVyZSBpcyB3cml0aW5nIGJhY2sgdG8gYW4gTUZOIHRoYXQg ZG9lcyBub3QgYmVsb25nIHRvIHRoZSBkb21haW4uCgo+IAo+IER1cmluZyBzdGFuZGFyZCBjYWxs IE9QLVRFRSBjYW4gaXNzdWUgbXVsdGlwbGUgIlJQQyByZXR1cm5zIiwgYXNraW5nCj4gTlcgdG8g ZG8gc29tZSB3b3JrIGZvciBPUC1URUUuIE5XIHRoZW4gaXNzdWVzIHNwZWNpYWwgY2FsbAo+IE9Q VEVFX1NNQ19DQUxMX1JFVFVSTl9GUk9NX1JQQyB0byByZXN1bWUgaGFuZGxpbmcgb2YgdGhlIG9y aWdpbmFsIGNhbGwuCj4gVGh1cywgbWVkaWF0b3IgbmVlZHMgdG8gbWFpbnRhaW4gY29udGV4dCBm b3Igb3JpZ2luYWwgc3RhbmRhcmQgY2FsbAo+IGR1cmluZyBtdWx0aXBsZSBTTUNDQyBjYWxscy4K PiAKPiBTdGFuZGFyZCBjYWxsIGlzIGNvbnNpZGVyZWQgY29tcGxldGUsIHdoZW4gcmV0dXJuZWQg dmFsdWUgaXMKPiBub3QgUlBDIHJlcXVlc3QuCj4gCj4gU2lnbmVkLW9mZi1ieTogVm9sb2R5bXly IEJhYmNodWsgPHZvbG9keW15cl9iYWJjaHVrQGVwYW0uY29tPgo+IC0tLQo+ICAgeGVuL2FyY2gv YXJtL3RlZS9vcHRlZS5jIHwgMzE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKystCj4gICAxIGZpbGUgY2hhbmdlZCwgMzE2IGluc2VydGlvbnMoKyksIDMgZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyBiL3hl bi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+IGluZGV4IGM4OTVhOTkuLjEwMDhlYmEgMTAwNjQ0Cj4g LS0tIGEveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4gKysrIGIveGVuL2FyY2gvYXJtL3RlZS9v cHRlZS5jCj4gQEAgLTEyLDYgKzEyLDcgQEAKPiAgICAqLwo+ICAgCj4gICAjaW5jbHVkZSA8eGVu L2RldmljZV90cmVlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KPiAgICNpbmNs dWRlIDx4ZW4vc2NoZWQuaD4KPiAgICNpbmNsdWRlIDxhc20vc21jY2MuaD4KPiAgICNpbmNsdWRl IDxhc20vdGVlL3RlZS5oPgo+IEBAIC0xOSw5ICsyMCwyNyBAQAo+ICAgI2luY2x1ZGUgPGFzbS90 ZWUvb3B0ZWVfbXNnLmg+Cj4gICAjaW5jbHVkZSA8YXNtL3RlZS9vcHRlZV9zbWMuaD4KPiAgIAo+ ICsjZGVmaW5lIE1BWF9TVERfQ0FMTFMgICAxNgoKSSBzdXNwZWN0IHRoaXMgaXMgdXNlZCB0byBy ZXN0cmljdCB0aGUgbnVtYmVyIG9mIGNhbGxzIGluIGZsaWdodC4gSWYgc28sIApJIHdvdWxkIGFw cHJlY2lhdGUgaWYgdGhpcyBpcyBkb2N1bWVudGVkIGluIHRoZSBjb2RlIGFuZCB0aGUgbGltaXRh dGlvbnMgCmV4cGxhaW5lZCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuCgo+ICsKPiArLyoKPiArICog Q2FsbCBjb250ZXh0LiBPUC1URUUgY2FuIGlzc3VlIG11bHRpcGxlIFJQQyByZXR1cm5zIGR1cmlu ZyBvbmUgY2FsbC4KPiArICogV2UgbmVlZCB0byBwcmVzZXJ2ZSBjb250ZXh0IGR1cmluZyB0aGVt Lgo+ICsgKi8KPiArc3RydWN0IHN0ZF9jYWxsX2N0eCB7Cj4gKyAgICBzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7Cj4gKyAgICBzdHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqZ3Vlc3RfYXJnOwo+ICsgICAgc3Ry dWN0IG9wdGVlX21zZ19hcmcgKnhlbl9hcmc7Cj4gKyAgICBtZm5fdCBndWVzdF9hcmdfbWZuOwo+ ICsgICAgaW50IG9wdGVlX3RocmVhZF9pZDsKPiArICAgIGludCBycGNfb3A7Cj4gK307Cj4gKwo+ ICAgc3RydWN0IGRvbWFpbl9jdHggewo+ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAr ICAgIHN0cnVjdCBsaXN0X2hlYWQgY2FsbF9jdHhfbGlzdDsKPiAgICAgICBzdHJ1Y3QgZG9tYWlu ICpkb21haW47Cj4gKyAgICBhdG9taWNfdCBjYWxsX2N0eF9jb3VudDsKPiArICAgIHNwaW5sb2Nr X3QgbG9jazsKPiAgIH07Cj4gICAKPiAgIHN0YXRpYyBMSVNUX0hFQUQoZG9tYWluX2N0eF9saXN0 KTsKPiBAQCAtNDksNiArNjgsNDQgQEAgc3RhdGljIGJvb2wgb3B0ZWVfcHJvYmUodm9pZCkKPiAg ICAgICByZXR1cm4gdHJ1ZTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgbWZuX3QgbG9va3VwX2FuZF9w aW5fZ3Vlc3RfcmFtX2FkZHIocGFkZHJfdCBnYWRkciwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICoqcGcpCgpJIGRvbid0IHRo aW5rIHRoZXJlIGFyZSBuZWVkIHRvIHJldHVybiBib3RoIGFuIE1GTiBhbmQgYSBwYWdlLiBZb3Ug Y2FuIApkZWR1Y2UgZWFzaWx5IGZyb20gdGhlIG90aGVyLiBJbiB0aGlzIGNvbnRleHQsIGl0IHdv dWxkIGJlIGJldHRlciB0byAKcmV0dXJuIGEgcGFnZS4KCkFsc28sIEkgd291bGQgcHJlZmVyIGlm IHRoaXMgZnVuY3Rpb24gdGFrZSBhIGd1ZXN0IGZyYW1lIGFkZHJlc3Mgb3ZlciBhIApndWVzdCBw aHlzaWNhbCBhZGRyZXNzLgoKTGFzdGx5IHRoaXMgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGEgcmUt aW1wbGVtZW50YXRpb24gb2YgCmdldF9wYWdlX2Zyb21fZ2ZuIHdpdGggYSByZXN0cmljdGlvbiBv biB0aGUgcDJtIHR5cGUuIFBsZWFzZSAKcmUtaW1wbGVtZW50IGl0IHVzaW5nIHRoYXQgZnVuY3Rp b24uCgo+ICt7Cj4gKyAgICBtZm5fdCBtZm47Cj4gKyAgICBnZm5fdCBnZm47Cj4gKyAgICBwMm1f dHlwZV90IHQ7Cj4gKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwo+ICsgICAgc3RydWN0IGRv bWFpbiAqZCA9IGN1cnJlbnQtPmRvbWFpbjsKPiArCj4gKyAgICBnZm4gPSBnYWRkcl90b19nZm4o Z2FkZHIpOwo+ICsgICAgbWZuID0gcDJtX2xvb2t1cChkLCBnZm4sICZ0KTsKPiArCj4gKyAgICBp ZiAoIHQgIT0gcDJtX3JhbV9ydyB8fCBtZm5fZXEobWZuLCBJTlZBTElEX01GTikgKQo+ICsgICAg ICAgIHJldHVybiBJTlZBTElEX01GTjsKPiArCj4gKyAgICBwYWdlID0gbWZuX3RvX3BhZ2UobWZu KTsKCm1mbl90b19wYWdlIGNhbiBuZXZlciBmYWlsZWQuIElmIHlvdSB3YW50IHRvIGNoZWNrIHdo ZXRoZXIgYW4gTUZOIGlzIAp2YWxpZCwgdGhlbiB5b3UgY2FuIHVzZSBtZm5fdmFsaWQoLi4uKS4K Cj4gKyAgICBpZiAoICFwYWdlICkKPiArICAgICAgICByZXR1cm4gSU5WQUxJRF9NRk47Cj4gKwo+ ICsgICAgaWYgKCAhZ2V0X3BhZ2UocGFnZSwgZCkgKQo+ICsgICAgICAgIHJldHVybiBJTlZBTElE X01GTjsKPiArCj4gKyAgICBpZiAoIHBnICkKPiArICAgICAgICAqcGcgPSBwYWdlOwo+ICsKPiAr ICAgIHJldHVybiBtZm47Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVucGluX2d1ZXN0X3JhbV9h ZGRyKG1mbl90IG1mbikKPiArewo+ICsgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKPiArICAg IHBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOwo+ICsgICAgaWYgKCAhcGFnZSApCj4gKyAgICAgICAg cmV0dXJuOwo+ICsKPiArICAgIHB1dF9wYWdlKHBhZ2UpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHN0 cnVjdCBkb21haW5fY3R4ICpmaW5kX2RvbWFpbl9jdHgoc3RydWN0IGRvbWFpbiogZCkKPiAgIHsK PiAgICAgICBzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4Owo+IEBAIC04Nyw2ICsxNDQsMTAgQEAgc3Rh dGljIGludCBvcHRlZV9lbmFibGUoc3RydWN0IGRvbWFpbiAqZCkKPiAgICAgICB9Cj4gICAKPiAg ICAgICBjdHgtPmRvbWFpbiA9IGQ7Cj4gKyAgICBJTklUX0xJU1RfSEVBRCgmY3R4LT5jYWxsX2N0 eF9saXN0KTsKPiArCj4gKyAgICBhdG9taWNfc2V0KCZjdHgtPmNhbGxfY3R4X2NvdW50LCAwKTsK PiArICAgIHNwaW5fbG9ja19pbml0KCZjdHgtPmxvY2spOwo+ICAgCj4gICAgICAgc3Bpbl9sb2Nr KCZkb21haW5fY3R4X2xpc3RfbG9jayk7Cj4gICAgICAgbGlzdF9hZGRfdGFpbCgmY3R4LT5saXN0 LCAmZG9tYWluX2N0eF9saXN0KTsKPiBAQCAtMTM0LDExICsxOTUsNzIgQEAgc3RhdGljIHZvaWQg c2V0X3JldHVybihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywgdWludDMyX3QgcmV0KQo+ICAg ICAgIHNldF91c2VyX3JlZyhyZWdzLCA3LCAwKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgc3RydWN0 IHN0ZF9jYWxsX2N0eCAqYWxsb2NhdGVfc3RkX2NhbGxfY3R4KHN0cnVjdCBkb21haW5fY3R4ICpj dHgpCj4gK3sKPiArICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGw7Cj4gKyAgICBpbnQgY291 bnQ7Cj4gKwo+ICsgICAgY291bnQgPSBhdG9taWNfYWRkX3VubGVzcygmY3R4LT5jYWxsX2N0eF9j b3VudCwgMSwgTUFYX1NURF9DQUxMUyk7CgpQbGVhc2UgYSBjb21tZW50IGV4cGxhaW5pbmcgdGhl IHJhdGlvbmFsZSBmb3IgdGhpcy4KCj4gKyAgICBpZiAoIGNvdW50ID09IE1BWF9TVERfQ0FMTFMg KQo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgIGNhbGwgPSB4emFsbG9jKHN0cnVj dCBzdGRfY2FsbF9jdHgpOwo+ICsgICAgaWYgKCAhY2FsbCApIHsKCkNvZGluZyBzdHlsZToKCmlm CnsKCj4gKyAgICAgICAgYXRvbWljX2RlYygmY3R4LT5jYWxsX2N0eF9jb3VudCk7Cj4gKyAgICAg ICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgY2FsbC0+b3B0ZWVfdGhyZWFkX2lk ID0gLTE7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwo+ICsgICAgbGlzdF9hZGRf dGFpbCgmY2FsbC0+bGlzdCwgJmN0eC0+Y2FsbF9jdHhfbGlzdCk7Cj4gKyAgICBzcGluX3VubG9j aygmY3R4LT5sb2NrKTsKPiArCj4gKyAgICByZXR1cm4gY2FsbDsKPiArfQo+ICsKPiArc3RhdGlj IHZvaWQgZnJlZV9zdGRfY2FsbF9jdHgoc3RydWN0IGRvbWFpbl9jdHggKmN0eCwgc3RydWN0IHN0 ZF9jYWxsX2N0eCAqY2FsbCkKPiArewo+ICsgICAgYXRvbWljX2RlYygmY3R4LT5jYWxsX2N0eF9j b3VudCk7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZjdHgtPmxvY2spOwo+ICsgICAgbGlzdF9kZWwo JmNhbGwtPmxpc3QpOwo+ICsgICAgc3Bpbl91bmxvY2soJmN0eC0+bG9jayk7Cj4gKwo+ICsgICAg aWYgKCBjYWxsLT54ZW5fYXJnICkKPiArICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZShjYWxsLT54 ZW5fYXJnKTsKCmZyZWVfeGVuaGVhcF9wYWdlIGlzIGFibGUgdG8gY29wZSB3aXRoIE5VTEwgcG9p bnRlci4KCj4gKwo+ICsgICAgaWYgKCBjYWxsLT5ndWVzdF9hcmcgKSB7Cj4gKyAgICAgICAgdW5t YXBfZG9tYWluX3BhZ2VfZ2xvYmFsKGNhbGwtPmd1ZXN0X2FyZyk7Cj4gKyAgICAgICAgdW5waW5f Z3Vlc3RfcmFtX2FkZHIoY2FsbC0+Z3Vlc3RfYXJnX21mbik7Cj4gKyAgICB9Cj4gKwo+ICsgICAg eGZyZWUoY2FsbCk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpmaW5k X2NhbGxfY3R4KHN0cnVjdCBkb21haW5fY3R4ICpjdHgsIGludCB0aHJlYWRfaWQpCj4gK3sKPiAr ICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGw7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZjdHgt PmxvY2spOwo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggY2FsbCwgJmN0eC0+Y2FsbF9jdHhf bGlzdCwgbGlzdCApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBjYWxsLT5vcHRlZV90aHJlYWRf aWQgPT0gdGhyZWFkX2lkICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBzcGluX3Vu bG9jaygmY3R4LT5sb2NrKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBjYWxsOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArICAgIHNwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwo+ICsKPiArICAg IHJldHVybiBOVUxMOwo+ICt9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9kZXN0 cm95KHN0cnVjdCBkb21haW4gKmQpCj4gICB7Cj4gICAgICAgc3RydWN0IGFybV9zbWNjY19yZXMg cmVzcDsKPiAgICAgICBzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4Owo+ICsgICAgc3RydWN0IHN0ZF9j YWxsX2N0eCAqY2FsbCwgKmNhbGxfdG1wOwo+ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKPiAg IAo+ICAgICAgIC8qIEF0IHRoaXMgdGltZSBhbGwgZG9tYWluIFZDUFVzIHNob3VsZCBiZSBzdG9w cGVkICovCj4gQEAgLTE2Myw5ICsyODUsMjAxIEBAIHN0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9k ZXN0cm95KHN0cnVjdCBkb21haW4gKmQpCj4gICAgICAgaWYgKCAhZm91bmQgKQo+ICAgICAgICAg ICByZXR1cm47Cj4gICAKPiArICAgIEFTU0VSVCghc3Bpbl9pc19sb2NrZWQoJmN0eC0+bG9jaykp Owo+ICsKPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSggY2FsbCwgY2FsbF90bXAsICZj dHgtPmNhbGxfY3R4X2xpc3QsIGxpc3QgKQo+ICsgICAgICAgIGZyZWVfc3RkX2NhbGxfY3R4KGN0 eCwgY2FsbCk7Cj4gKwo+ICsgICAgQVNTRVJUKCFhdG9taWNfcmVhZCgmY3R4LT5jYWxsX2N0eF9j b3VudCkpOwo+ICsKPiAgICAgICB4ZnJlZShjdHgpOwo+ICAgfQo+ICAgCj4gKy8qCj4gKyAqIENv cHkgY29tbWFuZCBidWZmZXIgaW50byB4ZW4gbWVtb3J5IHRvOgo+ICsgKiAxKSBIaWRlIHRyYW5z bGF0ZWQgYWRkcmVzc2VzIGZyb20gZ3Vlc3QKPiArICogMikgTWFrZSBzdXJlIHRoYXQgZ3Vlc3Qg d291bGRuJ3QgY2hhbmdlIGRhdGEgaW4gY29tbWFuZCBidWZmZXIgZHVyaW5nIGNhbGwKPiArICov Cj4gK3N0YXRpYyBib29sIGNvcHlfc3RkX3JlcXVlc3Qoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJl Z3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0ZF9jYWxsX2N0eCAq Y2FsbCkKPiArewo+ICsgICAgcGFkZHJfdCBjbWRfZ2FkZHIsIHhlbl9hZGRyOwo+ICsKPiArICAg IGNtZF9nYWRkciA9IChwYWRkcl90KWdldF91c2VyX3JlZyhyZWdzLCAxKSA8PCAzMiB8Cj4gKyAg ICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpOwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBDb21t YW5kIGJ1ZmZlciBzaG91bGQgc3RhcnQgYXQgcGFnZSBib3VuZGFyeS4KPiArICAgICAqIFRoaXMg aXMgT1AtVEVFIEFCSSByZXF1aXJlbWVudC4KPiArICAgICAqLwo+ICsgICAgaWYgKCBjbWRfZ2Fk ZHIgJiAoT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKSApCj4gKyAgICAgICAgcmV0 dXJuIGZhbHNlOwo+ICsKPiArICAgIGNhbGwtPmd1ZXN0X2FyZ19tZm4gPSBsb29rdXBfYW5kX3Bp bl9ndWVzdF9yYW1fYWRkcihjbWRfZ2FkZHIsIE5VTEwpOwo+ICsgICAgaWYgKCBtZm5fZXEoY2Fs bC0+Z3Vlc3RfYXJnX21mbiwgSU5WQUxJRF9NRk4pICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7 Cj4gKwo+ICsgICAgY2FsbC0+Z3Vlc3RfYXJnID0gbWFwX2RvbWFpbl9wYWdlX2dsb2JhbChjYWxs LT5ndWVzdF9hcmdfbWZuKTsKPiArICAgIGlmICggIWNhbGwtPmd1ZXN0X2FyZyApIHsKPiArICAg ICAgICB1bnBpbl9ndWVzdF9yYW1fYWRkcihjYWxsLT5ndWVzdF9hcmdfbWZuKTsKPiArICAgICAg ICByZXR1cm4gZmFsc2U7Cj4gKyAgICB9CgpJdCBsb29rIGxpa2UgdG8gbWUgeW91IHdhbnQgdG8g dXNlIGFjY2Vzc19ndWVzdF9tZW1vcnlfYnlfaXBhIGhlcmUuIFRoaXMgCndvdWxkIGF2b2lkIHRo ZSBwYWdlIHRvIGJlIG1hcHBlZCBnbG9iYWwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC4K Cj4gKwo+ICsgICAgY2FsbC0+eGVuX2FyZyA9IGFsbG9jX3hlbmhlYXBfcGFnZSgpOwoKSSBkb24n dCBzZWUgYW55dGhpbmcgaW4gdGhlIGNvZGUgbWFraW5nIHN1cmUgdGhhdCAKT1BURUVfTVNHX05P TkNPTlRJR19QQUdFX1NJWkUgZml0cyBpbiBhIFhlbiBwYWdlLXNpemUuIFlvdSBwcm9iYWJseSB3 YW50IAp0byBhZGQgYSBCVUlMRF9CVUdfT04oT1BURUVfTVNHX05PTkNPTlRJR19QQUdFID4gUEFH RV9TSVpFKS4KCkFsc28sIGZvciBiZWVuIG1vcmUgZnV0dXJlLXByb29mIChpLmUgWGVuIHVzaW5n IGFuIGhpZ2hlciBwYWdlIHNpemUpLCBpdCAKd291bGQgYmUgYmV0dGVyIHRvIHVzZSBfeG1hbGxv YyhPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSwgCk9QVEVFX01TR19OT05DT05USUdfUEFH RV9TSVpFKS4KCl94bWFsbG9jIHdpbGwgYWxsb2NfeGVuaGVhcF9wYWdlKCkgaWYgaXQgaXMgbmVj ZXNzYXJ5LgoKCj4gKyAgICBpZiAoICFjYWxsLT54ZW5fYXJnICkgewo+ICsgICAgICAgIHVucGlu X2d1ZXN0X3JhbV9hZGRyKGNhbGwtPmd1ZXN0X2FyZ19tZm4pOwo+ICsgICAgICAgIHJldHVybiBm YWxzZTsKPiArICAgIH0KPiArCj4gKyAgICBtZW1jcHkoY2FsbC0+eGVuX2FyZywgY2FsbC0+Z3Vl c3RfYXJnLCBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7Cj4gKwo+ICsgICAgeGVuX2Fk ZHIgPSB2aXJ0X3RvX21hZGRyKGNhbGwtPnhlbl9hcmcpOwo+ICsKPiArICAgIHNldF91c2VyX3Jl ZyhyZWdzLCAxLCB4ZW5fYWRkciA+PiAzMik7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMiwg eGVuX2FkZHIgJiAweEZGRkZGRkZGKTsKPiArCj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsK PiArc3RhdGljIGJvb2wgY29weV9zdGRfcmVxdWVzdF9iYWNrKHN0cnVjdCBkb21haW5fY3R4ICpj dHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz dGRfY2FsbF9jdHggKmNhbGwpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgdWlu dDMyX3QgYXR0cjsKClRoaXMgZnVuY3Rpb24gbWlnaHQgYmUgYSBiaXQgdHJpY2t5IHRvIGltcGxl bWVudCB1c2luZyAKYWNjZXNzX2d1ZXN0X21lbW9yeV9ieV9pcGEuIEhvd2V2ZXIsIHlvdSBjYW4g anVzdCBtYXAgdGhlIHJlZ2lvbiAKdGVtcG9yYXJpbHkuIFRoaXMgd291bGQgYXZvaWQgdG8gdXNl IG1hcF9kb21haW5fcGFnZV9nbG9iYWwoKSB3aXRoaW4gCnRoZW4gY29kZSBhbmQgYXZvaWQgb25l IGxlc3MgcG90ZW50aWFsbHkgZXJyb3IgaW4gdGhlIGNsZWFudXAgcGF0aC4KCj4gKwo+ICsgICAg Y2FsbC0+Z3Vlc3RfYXJnLT5yZXQgPSBjYWxsLT54ZW5fYXJnLT5yZXQ7Cj4gKyAgICBjYWxsLT5n dWVzdF9hcmctPnJldF9vcmlnaW4gPSBjYWxsLT54ZW5fYXJnLT5yZXRfb3JpZ2luOwo+ICsgICAg Y2FsbC0+Z3Vlc3RfYXJnLT5zZXNzaW9uID0gY2FsbC0+eGVuX2FyZy0+c2Vzc2lvbjsKPiArICAg IGZvciAoIGkgPSAwOyBpIDwgY2FsbC0+eGVuX2FyZy0+bnVtX3BhcmFtczsgaSsrICkgewoKZm9y ICggLi4uICkKewoKPiArICAgICAgICBhdHRyID0gY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLmF0 dHI7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAoIGF0dHIgJiBPUFRFRV9NU0dfQVRUUl9UWVBFX01B U0sgKSB7Cgpzd2l0Y2ggKCAuLi4gKQp7Cgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9UTUVNX09VVFBVVDoKPiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1F TV9JTk9VVDoKPiArICAgICAgICAgICAgY2FsbC0+Z3Vlc3RfYXJnLT5wYXJhbXNbaV0udS50bWVt LnNpemUgPQo+ICsgICAgICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLnUudG1l bS5zaXplOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICBjYXNlIE9QVEVFX01T R19BVFRSX1RZUEVfVkFMVUVfT1VUUFVUOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9WQUxVRV9JTk9VVDoKPiArICAgICAgICAgICAgY2FsbC0+Z3Vlc3RfYXJnLT5wYXJhbXNb aV0udS52YWx1ZS5hID0KPiArICAgICAgICAgICAgICAgIGNhbGwtPnhlbl9hcmctPnBhcmFtc1tp XS51LnZhbHVlLmE7Cj4gKyAgICAgICAgICAgIGNhbGwtPmd1ZXN0X2FyZy0+cGFyYW1zW2ldLnUu dmFsdWUuYiA9Cj4gKyAgICAgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbaV0udS52 YWx1ZS5iOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICBjYXNlIE9QVEVFX01T R19BVFRSX1RZUEVfUk1FTV9PVVRQVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9U WVBFX1JNRU1fSU5PVVQ6Cj4gKyAgICAgICAgICAgIGNhbGwtPmd1ZXN0X2FyZy0+cGFyYW1zW2ld LnUucm1lbS5zaXplID0KPiArICAgICAgICAgICAgICAgIGNhbGwtPnhlbl9hcmctPnBhcmFtc1tp XS51LnJtZW0uc2l6ZTsKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgY2FzZSBP UFRFRV9NU0dfQVRUUl9UWVBFX05PTkU6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9U WVBFX1JNRU1fSU5QVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1f SU5QVVQ6Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgZXhlY3V0ZV9zdGRf Y2FsbChzdHJ1Y3QgZG9tYWluX2N0eCAqY3R4LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmNhbGwpCj4gK3sKPiArICAgIHJlZ2lzdGVyX3Qg b3B0ZWVfcmV0Owo+ICsKPiArICAgIGZvcndhcmRfY2FsbChyZWdzKTsKCkkgZmluZCBhIGJpdCBv ZGQgdGhhdCB5b3UgaW50cm9kdWNlIGEgcmV0dXJuIGZvciBmb3J3YXJkX2NhbGwgaW4gdGhlIApw cmV2aW91cyBwYXRjaC4gQnV0IHlvdSBiYXJlbHkgdXNlIGl0LgoKSSB0aGluayBJIHdvdWxkIHBy ZWZlciBpZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUgYW5kIHlvdSAKanVz dCByZWx5IG9uIGdldF91c2VyX3JlZyhyZWdzLCAwKS4KCj4gKwo+ICsgICAgb3B0ZWVfcmV0ID0g Z2V0X3VzZXJfcmVnKHJlZ3MsIDApOwo+ICsgICAgaWYgKCBPUFRFRV9TTUNfUkVUVVJOX0lTX1JQ QyhvcHRlZV9yZXQpICkKPiArICAgIHsKPiArICAgICAgICBjYWxsLT5vcHRlZV90aHJlYWRfaWQg PSBnZXRfdXNlcl9yZWcocmVncywgMyk7Cj4gKyAgICAgICAgY2FsbC0+cnBjX29wID0gT1BURUVf U01DX1JFVFVSTl9HRVRfUlBDX0ZVTkMob3B0ZWVfcmV0KTsKPiArICAgICAgICByZXR1cm4gdHJ1 ZTsKPiArICAgIH0KPiArCj4gKyAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soY3R4LCByZWdzLCBj YWxsKTsKCkhlcmUgYW5vdGhlciBmdW5jdGlvbiByZXR1cm4gYSB2YWx1ZSBidXQgaXQgaXMgbm90 IHVzZWQuIElmIHlvdSBkb24ndCAKcGxhbiB0byB1c2UgdGhlIHJldHVybiwgdGhlbiBwbGVhc2Ug ZHJvcC4gSWYgeW91IHBsYW4gdG8gdXNlIGl0LCB0aGVuIGRvIAppdCBldmVyeXdoZXJlLgoKPiAr Cj4gKyAgICBmcmVlX3N0ZF9jYWxsX2N0eChjdHgsIGNhbGwpOwo+ICsKPiArICAgIHJldHVybiB0 cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYW5kbGVfc3RkX2NhbGwoc3RydWN0IGRvbWFp bl9jdHggKmN0eCwgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4gK3sKPiArICAgIHN0cnVj dCBzdGRfY2FsbF9jdHggKmNhbGw7Cj4gKyAgICBib29sIHJldDsKPiArCj4gKyAgICBjYWxsID0g YWxsb2NhdGVfc3RkX2NhbGxfY3R4KGN0eCk7Cj4gKwo+ICsgICAgaWYgKCFjYWxsKQo+ICsgICAg ICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICByZXQgPSBjb3B5X3N0ZF9yZXF1ZXN0KHJlZ3Ms IGNhbGwpOwo+ICsgICAgaWYgKCAhcmV0ICkKPiArICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAg ICAvKiBOb3cgd2UgY2FuIHNhZmVseSBleGFtaW5lIGNvbnRlbnRzIG9mIGNvbW1hbmQgYnVmZmVy ICovCj4gKyAgICBpZiAoIE9QVEVFX01TR19HRVRfQVJHX1NJWkUoY2FsbC0+eGVuX2FyZy0+bnVt X3BhcmFtcykgPgo+ICsgICAgICAgICBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSApIHsK CmlmICggLi4uICkKewoKPiArICAgICAgICByZXQgPSBmYWxzZTsKPiArICAgICAgICBnb3RvIG91 dDsKPiArICAgIH0KPiArCj4gKyAgICBzd2l0Y2ggKCBjYWxsLT54ZW5fYXJnLT5jbWQgKQo+ICsg ICAgewo+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX09QRU5fU0VTU0lPTjoKPiArICAgIGNhc2Ug T1BURUVfTVNHX0NNRF9DTE9TRV9TRVNTSU9OOgo+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0lO Vk9LRV9DT01NQU5EOgo+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0NBTkNFTDoKPiArICAgIGNh c2UgT1BURUVfTVNHX0NNRF9SRUdJU1RFUl9TSE06Cj4gKyAgICBjYXNlIE9QVEVFX01TR19DTURf VU5SRUdJU1RFUl9TSE06Cj4gKyAgICAgICAgcmV0ID0gdHJ1ZTsKPiArICAgICAgICBicmVhazsK PiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgcmV0ID0gZmFsc2U7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgaWYgKCFyZXQpCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgcmV0ID0gZXhlY3V0 ZV9zdGRfY2FsbChjdHgsIHJlZ3MsIGNhbGwpOwo+ICsKPiArb3V0Ogo+ICsgICAgaWYgKCFyZXQp Cj4gKyAgICAgICAgZnJlZV9zdGRfY2FsbF9jdHgoY3R4LCBjYWxsKTsKPiArCj4gKyAgICByZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYW5kbGVfcnBjKHN0cnVjdCBkb21haW5f Y3R4ICpjdHgsIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQo+ICt7Cj4gKyAgICBzdHJ1Y3Qg c3RkX2NhbGxfY3R4ICpjYWxsOwo+ICsKCk5vIG5lZWQgZm9yIHRoZSBuZXdsaW5lIGhlcmUuCgo+ ICsgICAgaW50IG9wdGVlX3RocmVhZF9pZCA9IGdldF91c2VyX3JlZyhyZWdzLCAzKTsKPiArCj4g KyAgICBjYWxsID0gZmluZF9jYWxsX2N0eChjdHgsIG9wdGVlX3RocmVhZF9pZCk7Cj4gKwo+ICsg ICAgaWYgKCAhY2FsbCApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIHN3aXRj aCAoIGNhbGwtPnJwY19vcCApIHsKCnN3aXRjaCAoIC4uLiApCnsKCj4gKyAgICBjYXNlIE9QVEVF X1NNQ19SUENfRlVOQ19BTExPQzoKPiArICAgICAgICAvKiBUT0RPOiBBZGQgaGFuZGxpbmcgKi8K PiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgT1BURUVfU01DX1JQQ19GVU5DX0ZSRUU6Cj4g KyAgICAgICAgLyogVE9ETzogQWRkIGhhbmRsaW5nICovCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAg ICBjYXNlIE9QVEVFX1NNQ19SUENfRlVOQ19GT1JFSUdOX0lOVFI6Cj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICBjYXNlIE9QVEVFX1NNQ19SUENfRlVOQ19DTUQ6Cj4gKyAgICAgICAgLyogVE9ETzog QWRkIGhhbmRsaW5nICovCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0 dXJuIGV4ZWN1dGVfc3RkX2NhbGwoY3R4LCByZWdzLCBjYWxsKTsKPiArfQo+ICsKPiAgIHN0YXRp YyBib29sIGhhbmRsZV9leGNoYW5nZV9jYXBhYmlsaXRpZXMoc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCj4gICB7Cj4gICAgICAgdWludDMyX3QgY2FwczsKPiBAQCAtMjI1LDEwICs1MzksOSBA QCBzdGF0aWMgYm9vbCBvcHRlZV9oYW5kbGVfY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cykKPiAgICAgICBjYXNlIE9QVEVFX1NNQ19FWENIQU5HRV9DQVBBQklMSVRJRVM6Cj4gICAgICAg ICAgIHJldHVybiBoYW5kbGVfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKHJlZ3MpOwo+ICAgICAgIGNh c2UgT1BURUVfU01DX0NBTExfV0lUSF9BUkc6Cj4gKyAgICAgICAgcmV0dXJuIGhhbmRsZV9zdGRf Y2FsbChjdHgsIHJlZ3MpOwo+ICAgICAgIGNhc2UgT1BURUVfU01DX0NBTExfUkVUVVJOX0ZST01f UlBDOgo+IC0gICAgICAgIC8qIFRPRE86IEFkZCBwcm9wZXIgaGFuZGxpbmcgZm9yIHRoaXMgY2Fs bHMgKi8KPiAtICAgICAgICBmb3J3YXJkX2NhbGwocmVncyk7Cj4gLSAgICAgICAgcmV0dXJuIHRy dWU7Cj4gKyAgICAgICAgcmV0dXJuIGhhbmRsZV9ycGMoY3R4LCByZWdzKTsKPiAgICAgICBkZWZh dWx0Ogo+ICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gICAgICAgfQo+IAoKQ2hlZXJzLAoKLS0g Ckp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZl bA==