From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH v4 12/34] xen/xsplice: Hypervisor implementation of XEN_XSPLICE_op Date: Wed, 23 Mar 2016 07:51:29 -0600 Message-ID: <56F2AD7102000078000DFAEB@prv-mh.provo.novell.com> References: <1458064616-23101-1-git-send-email-konrad.wilk@oracle.com> <1458064616-23101-13-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aijCC-0005a8-8M for xen-devel@lists.xenproject.org; Wed, 23 Mar 2016 13:51:36 +0000 In-Reply-To: <1458064616-23101-13-git-send-email-konrad.wilk@oracle.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Konrad Rzeszutek Wilk Cc: Wei Liu , Stefano Stabellini , andrew.cooper3@citrix.com, Ian Jackson , mpohlack@amazon.de, ross.lagerwall@citrix.com, xen-devel@lists.xenproject.org, Daniel De Graaf , sasha.levin@oracle.com List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDE1LjAzLjE2IGF0IDE4OjU2LCA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4gd3JvdGU6 Cj4gLS0tIGEveGVuL2NvbW1vbi9LY29uZmlnCj4gKysrIGIveGVuL2NvbW1vbi9LY29uZmlnCj4g QEAgLTE2OCw0ICsxNjgsMTUgQEAgY29uZmlnIFNDSEVEX0RFRkFVTFQKPiAgCj4gIGVuZG1lbnUK PiAgCj4gKyMgRW5hYmxlL0Rpc2FibGUgeHNwbGljZSBzdXBwb3J0Cj4gK2NvbmZpZyBYU1BMSUNF Cj4gKwlib29sICJ4U3BsaWNlIGxpdmUgcGF0Y2hpbmcgc3VwcG9ydCIKPiArCWRlZmF1bHQgeQoK SXNuJ3QgaXQgYSBsaXR0bGUgZWFybHkgaW4gdGhlIHNlcmllcyB0byBkZWZhdWx0IHRoaXMgdG8g b24/CgpBbmQgdGhlbiBvZiBjb3Vyc2UgdGhlIEVYUEVSVCBxdWVzdGlvbiBjb21lcyB1cCBhZ2Fp bi4gTm8KbWF0dGVyIHRoYXQgSWFuQyBpcyBubyBsb25nZXIgYXJvdW5kIHRvIGhlbHAgd2l0aCB0 aGUKYXJndW1lbnRhdGlvbiwgdGhlIHBvaW50IGhlIGhhcyBiZWVuIG1ha2luZyBhYm91dCB0b28g bWFueQpmbGF2b3JzIGVuZGluZyB1cCBpbiB0aGUgd2lsZCBjb250aW51ZXMgdG8gYXBwbHkuCgo+ IEBAIC00NjAsNiArNDYxLDEyIEBAIGxvbmcgZG9fc3lzY3RsKFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0oeGVuX3N5c2N0bF90KSB1X3N5c2N0bCkKPiAgICAgICAgICByZXQgPSB0bWVtX2NvbnRyb2wo Jm9wLT51LnRtZW1fb3ApOwo+ICAgICAgICAgIGJyZWFrOwo+ICAKPiArICAgIGNhc2UgWEVOX1NZ U0NUTF94c3BsaWNlX29wOgo+ICsgICAgICAgIHJldCA9IHhzcGxpY2Vfb3AoJm9wLT51LnhzcGxp Y2UpOwo+ICsgICAgICAgIGlmICggcmV0ICE9IC1FTk9TWVMgKQo+ICsgICAgICAgICAgICBjb3B5 YmFjayA9IDE7Cj4gKyAgICAgICAgYnJlYWs7CgpXaHkgaXMgRU5PU1lTIHNwZWNpYWwgaGVyZSwg YnV0IG5vdCBlLmcuIEVPUE5PVFNVUFA/Cgo+ICtzdHJ1Y3QgcGF5bG9hZCB7Cj4gKyAgICB1aW50 MzJfdCBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgLyogT25lIG9mIHRoZSBYU1BMSUNFX1NU QVRFXyouICovCj4gKyAgICBpbnQzMl90IHJjOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyog MCBvciAtWEVOX0VYWC4gKi8KPiArICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgICAgICAgICAg ICAgICAvKiBMaW5rZWQgdG8gJ3BheWxvYWRfbGlzdCcuICovCj4gKyAgICBjaGFyIG5hbWVbWEVO X1hTUExJQ0VfTkFNRV9TSVpFICsgMV07LyogTmFtZSBvZiBpdC4gKi8KCkNvdWxkIEkgdGFsayB5 b3UgaW50byByZWR1Y2luZyBYRU5fWFNQTElDRV9OQU1FX1NJWkUgdG8gMTI3LAp0byBhdm9pZCBu ZWVkbGVzcyBwYWRkaW5nIGluIHBsYWNlcyBsaWtlIHRoaXMgb25lPwoKPiArc3RhdGljIGludCB2 ZXJpZnlfbmFtZShjb25zdCB4ZW5feHNwbGljZV9uYW1lX3QgKm5hbWUpCj4gK3sKPiArICAgIGlm ICggbmFtZS0+c2l6ZSA9PSAwIHx8IG5hbWUtPnNpemUgPiBYRU5fWFNQTElDRV9OQU1FX1NJWkUg KQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIGlmICggbmFtZS0+cGFkWzBd IHx8IG5hbWUtPnBhZFsxXSB8fCBuYW1lLT5wYWRbMl0gKQoKSSdkIGxpa2UgdG8gYXNrIGZvciBj b25zaXN0ZW5jeSBoZXJlOiBFaXRoZXIgYWx3YXlzIHVzZSA9PSAwIC8gIT0gMCwKb3IgYWx3YXlz IG9taXQgdGhlIGxhdHRlciBhbmQgdXNlICEgaW4gcGxhY2Ugb2YgdGhlIGZvcm1lci4KCj4gK3N0 YXRpYyBpbnQgdmVyaWZ5X3BheWxvYWQoY29uc3QgeGVuX3N5c2N0bF94c3BsaWNlX3VwbG9hZF90 ICp1cGxvYWQpCj4gK3sKPiArICAgIGlmICggdmVyaWZ5X25hbWUoJnVwbG9hZC0+bmFtZSkgKQo+ ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIGlmICggdXBsb2FkLT5zaXplID09 IDAgKQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ICsKPiArICAgIGlmICggIWd1ZXN0X2hh bmRsZV9va2F5KHVwbG9hZC0+cGF5bG9hZCwgdXBsb2FkLT5zaXplKSApCgpDYXJlZnVsIGhlcmUg LSB1cGxvYWQtPnNpemUgaXMgdWludDY0X3QsIHlldCBhcnJheV9hY2Nlc3Nfb2soKSBtYWtlcwph c3N1bXB0aW9ucyBvbiBub3QgdG9vIGxhcmdlIGEgc2l6ZSBnZXR0aW5nIHBhc3NlZC4gSS5lLiBJ IHRoaW5rIHlvdQp3YW50IHRvIGFwcGx5IGFuIHVwcGVyIGJvdW5kIHRvIHRoZSBzaXplIHJpZ2h0 IGhlcmUgLSBmb3IgZXhhbXBsZSwgaXQKY2FuJ3QgcmVhc29uYWJseSBiZSBiaWdnZXIgdGhhbiBY RU5fVklSVF9FTkQgLSBYRU5fVklSVF9TVEFSVAppZiBJIHJlbWVtYmVyIGNvcnJlY3RseSBob3cg eW91IGludGVuZCB0byBwbGFjZSB0aG9zZSBwYXlsb2Fkcy4KCj4gK3N0YXRpYyBpbnQgZmluZF9w YXlsb2FkKGNvbnN0IHhlbl94c3BsaWNlX25hbWVfdCAqbmFtZSwgc3RydWN0IHBheWxvYWQgKipm KQoKUGVyaGFwcyBuZWF0ZXIgdG8gdXNlIHRoZSB4ZW4vZXJyLmggY29uc3RydWN0cyBoZXJlIGlu c3RlYWQKb2YgaW5kaXJlY3Rpb24/Cgo+ICt7Cj4gKyAgICBzdHJ1Y3QgcGF5bG9hZCAqZGF0YTsK PiArICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY2hhcikgc3RyOwo+ICsgICAgY2hhciBuW1hF Tl9YU1BMSUNFX05BTUVfU0laRSArIDFdID0geyAwIH07CgpUaGlzIHBvaW50bGVzc2x5IHplcm9l cyB0aGUgZW50aXJlIGFycmF5LiBKdXN0IHNldCBzdHJbbmFtZS0+c2l6ZV0KdG8gemVybyBhZnRl ciB0aGUgY29weS1pbi4KCj4gKyAgICBpbnQgcmMgPSAtRUlOVkFMOwoKUG9pbnRsZXNzIGluaXRp YWxpemVyLgoKPiArICAgIHJjID0gdmVyaWZ5X25hbWUobmFtZSk7Cj4gKyAgICBpZiAoIHJjICkK PiArICAgICAgICByZXR1cm4gcmM7Cj4gKwo+ICsgICAgc3RyID0gZ3Vlc3RfaGFuZGxlX2Nhc3Qo bmFtZS0+bmFtZSwgY2hhcik7CgpXaHkgZG8geW91IG5lZWQgYSBjYXN0IGhlcmU/Cgo+ICsgICAg aWYgKCBjb3B5X2Zyb21fZ3Vlc3Qobiwgc3RyLCBuYW1lLT5zaXplKSApCgpZb3UgdmFsaWRhdGVk IHRoZSBhZGRyZXNzIHJhbmdlIGFscmVhZHksIHNvIF9fY29weV9mcm9tX2d1ZXN0KCkKd2lsbCBi ZSBqdXN0IGZpbmUgYW5kIG1vcmUgZWZmaWNpZW50LgoKPiArICAgICAgICByZXR1cm4gLUVGQVVM VDsKPiArCj4gKyAgICBzcGluX2xvY2tfcmVjdXJzaXZlKCZwYXlsb2FkX2xvY2spOwoKV2h5IGRv IHlvdSBuZWVkIGEgcmVjdXJzaXZlIGxvY2sgaGVyZT8gSSB0aGluayBzb21ldGhpbmcgbGlrZSB0 aGlzCnNob3VsZCBiZSByZWFzb25lZCBhYm91dCBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuCgo+ICsv Kgo+ICsgKiBXZSBNVVNUIGJlIGhvbGRpbmcgdGhlIHBheWxvYWRfbG9jayBzcGlubG9jay4KPiAr ICovCgpTaW5nbGUgbGluZSBjb21tZW50IChidXQga2luZCBvZiByZWR1bmRhbnQgd2l0aCAuLi4K Cj4gK3N0YXRpYyB2b2lkIGZyZWVfcGF5bG9hZChzdHJ1Y3QgcGF5bG9hZCAqZGF0YSkKPiArewo+ ICsgICAgQVNTRVJUKHNwaW5faXNfbG9ja2VkKCZwYXlsb2FkX2xvY2spKTsKCi4uLiB0aGlzIGFu eXdheSkuCgo+ICtzdGF0aWMgaW50IHhzcGxpY2VfdXBsb2FkKHhlbl9zeXNjdGxfeHNwbGljZV91 cGxvYWRfdCAqdXBsb2FkKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcGF5bG9hZCAqZGF0YSA9IE5VTEw7 CgpQb2ludGxlc3MgaW5pdGlhbGl6ZXIuCgo+ICsgICAgdm9pZCAqcmF3X2RhdGEgPSBOVUxMOwo+ ICsgICAgaW50IHJjOwo+ICsKPiArICAgIHJjID0gdmVyaWZ5X3BheWxvYWQodXBsb2FkKTsKPiAr ICAgIGlmICggcmMgKQo+ICsgICAgICAgIHJldHVybiByYzsKPiArCj4gKyAgICByYyA9IGZpbmRf cGF5bG9hZCgmdXBsb2FkLT5uYW1lLCAmZGF0YSk7Cj4gKyAgICBpZiAoIHJjID09IDAgLyogRm91 bmQuICovICkKPiArICAgICAgICByZXR1cm4gLUVFWElTVDsKPiArCj4gKyAgICBpZiAoIHJjICE9 IC1FTk9FTlQgKQo+ICsgICAgICAgIHJldHVybiByYzsKPiArCj4gKyAgICBkYXRhID0geHphbGxv YyhzdHJ1Y3QgcGF5bG9hZCk7Cj4gKyAgICBpZiAoICFkYXRhICkKPiArICAgICAgICByZXR1cm4g LUVOT01FTTsKPiArCj4gKyAgICByYyA9IC1FRkFVTFQ7Cj4gKyAgICBpZiAoIGNvcHlfZnJvbV9n dWVzdChkYXRhLT5uYW1lLCB1cGxvYWQtPm5hbWUubmFtZSwgdXBsb2FkLT5uYW1lLnNpemUpICkK Cl9fY29weV9mcm9tX2d1ZXN0KCkKCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgcmMg PSAtRU5PTUVNOwo+ICsgICAgcmF3X2RhdGEgPSB2emFsbG9jKHVwbG9hZC0+c2l6ZSk7Cgp2bWFs bG9jKCkKCj4gKyAgICBpZiAoICFyYXdfZGF0YSApCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ ICsgICAgcmMgPSAtRUZBVUxUOwo+ICsgICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QocmF3X2RhdGEs IHVwbG9hZC0+cGF5bG9hZCwgdXBsb2FkLT5zaXplKSApCgpfX2NvcHlfZnJvbV9ndWVzdCgpCgo+ ICsgICAgICAgIGdvdG8gb3V0Owo+ICsKPiArICAgIGRhdGEtPnN0YXRlID0gWFNQTElDRV9TVEFU RV9DSEVDS0VEOwo+ICsgICAgZGF0YS0+cmMgPSAwOwoKVGhpcyBpcyByZWR1bmRhbnQgd2l0aCB0 aGUgeHphbGxvYygpIGFib3ZlLgoKPiArICAgIElOSVRfTElTVF9IRUFEKCZkYXRhLT5saXN0KTsK PiArCj4gKyAgICBzcGluX2xvY2tfcmVjdXJzaXZlKCZwYXlsb2FkX2xvY2spOwo+ICsgICAgbGlz dF9hZGRfdGFpbCgmZGF0YS0+bGlzdCwgJnBheWxvYWRfbGlzdCk7Cj4gKyAgICBwYXlsb2FkX2Nu dCsrOwo+ICsgICAgcGF5bG9hZF92ZXJzaW9uKys7Cj4gKyAgICBzcGluX3VubG9ja19yZWN1cnNp dmUoJnBheWxvYWRfbG9jayk7Cj4gKwo+ICsgb3V0Ogo+ICsgICAgdmZyZWUocmF3X2RhdGEpOwoK QnkgaGVyZSB5b3UgYWxsb2NhdGVkIGFuZCBmaWxsZWQgcmF3X2RhdGEuIEFuZCBub3cgeW91CnVu Y29uZGl0aW9uYWxseSBmcmVlIGl0LiBXaGF0IGlzIHRoYXQgZ29vZCBmb3I/Cgo+ICsgICAgaWYg KCByYyApCj4gKyAgICB7Cj4gKyAgICAgICAgeGZyZWUoZGF0YSk7Cj4gKyAgICB9CgpUaGUgdXNl IG9mIGJyYWNlcyBoZXJlIGlzIGluY29uc2lzdGVudCB3aXRoIGFsbCBvZiB0aGUgcmVzdCBvZiB0 aGlzCmZ1bmN0aW9uLgoKPiArc3RhdGljIGludCB4c3BsaWNlX2dldCh4ZW5fc3lzY3RsX3hzcGxp Y2VfZ2V0X3QgKmdldCkKPiArewo+ICsgICAgc3RydWN0IHBheWxvYWQgKmRhdGE7Cj4gKyAgICBp bnQgcmM7Cj4gKwo+ICsgICAgcmMgPSB2ZXJpZnlfbmFtZSgmZ2V0LT5uYW1lKTsKPiArICAgIGlm ICggcmMgKQo+ICsgICAgICAgIHJldHVybiByYzsKPiArCj4gKyAgICByYyA9IGZpbmRfcGF5bG9h ZCgmZ2V0LT5uYW1lLCAmZGF0YSk7Cj4gKyAgICBpZiAoIHJjICkKPiArICAgICAgICByZXR1cm4g cmM7Cj4gKwo+ICsgICAgZ2V0LT5zdGF0dXMuc3RhdGUgPSBkYXRhLT5zdGF0ZTsKPiArICAgIGdl dC0+c3RhdHVzLnJjID0gZGF0YS0+cmM7CgpXaGF0IGd1YXJhbnRlZXMgdGhhdCBkYXRhIGRpZG4n dCBnZXQgZnJlZWQgYnkgdGhlIHRpbWUgeW91IGdldCBoZXJlPwoKPiArc3RhdGljIGludCB4c3Bs aWNlX2xpc3QoeGVuX3N5c2N0bF94c3BsaWNlX2xpc3RfdCAqbGlzdCkKPiArewo+ICsgICAgeGVu X3hzcGxpY2Vfc3RhdHVzX3Qgc3RhdHVzOwo+ICsgICAgc3RydWN0IHBheWxvYWQgKmRhdGE7Cj4g KyAgICB1bnNpZ25lZCBpbnQgaWR4ID0gMCwgaSA9IDA7Cj4gKyAgICBpbnQgcmMgPSAwOwo+ICsK PiArICAgIGlmICggbGlzdC0+bnIgPiAxMDI0ICkKPiArICAgICAgICByZXR1cm4gLUUyQklHOwo+ ICsKPiArICAgIGlmICggbGlzdC0+cGFkICE9IDAgKQo+ICsgICAgICAgIHJldHVybiAtRUlOVkFM Owo+ICsKPiArICAgIGlmICggIWd1ZXN0X2hhbmRsZV9va2F5KGxpc3QtPnN0YXR1cywgc2l6ZW9m KHN0YXR1cykgKiBsaXN0LT5ucikgfHwKPiArICAgICAgICAgIWd1ZXN0X2hhbmRsZV9va2F5KGxp c3QtPm5hbWUsIFhFTl9YU1BMSUNFX05BTUVfU0laRSAqIGxpc3QtPm5yKSB8fAo+ICsgICAgICAg ICAhZ3Vlc3RfaGFuZGxlX29rYXkobGlzdC0+bGVuLCBzaXplb2YodWludDMyX3QpICogbGlzdC0+ bnIpICkKCmd1ZXN0X2hhbmRsZV9va2F5KCkgYWxyZWFkeSB0YWtlcyBpbnRvIGFjY291bnQgdGhl IGVsZW1lbnQgc2l6ZSwKaS5lLiBpdCdzIG9ubHkgdGhlIG1pZGRsZSBvbmUgd2hpY2ggbmVlZHMg dG8gZG8gYW55IG11bHRpcGxpY2F0aW9uLgoKPiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiAr Cj4gKyAgICBzcGluX2xvY2tfcmVjdXJzaXZlKCZwYXlsb2FkX2xvY2spOwo+ICsgICAgaWYgKCBs aXN0LT5pZHggPiBwYXlsb2FkX2NudCB8fCAhbGlzdC0+bnIgKQoKVGhlIGxpc3QtPm5yIGNoZWNr IGNvdWxkIG1vdmUgdXAgb3V0c2lkZSB0aGUgbG9ja2VkIHJlZ2lvbiAoZS5nLgptZXJnZSB3aXRo IHRoZSBwYWQgZmllbGQgY2hlY2spLgoKPiArICAgIHsKPiArICAgICAgICBzcGluX3VubG9ja19y ZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7Cj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSggZGF0YSwgJnBheWxvYWRfbGlzdCwg bGlzdCApCgpBcmVuJ3QgeW91IGxhY2tpbmcgYSBsaXN0LT52ZXJzaW9uIGNoZWNrIHByaW9yIHRv IGVudGVyaW5nIHRoaXMgbG9vcAood2hpY2ggd291bGQgdGhlbiBtZWFuIHlvdSBkb24ndCBuZWVk IHRvIHN0b3JlIGl0IGJlbG93LCBidXQgb25seQpvbiB0aGUgZXJyb3IgcGF0aCBmcm9tIHRoYXQg Y2hlY2spPwoKPiArICAgIHsKPiArICAgICAgICB1aW50MzJfdCBsZW47Cj4gKwo+ICsgICAgICAg IGlmICggbGlzdC0+aWR4ID4gaSsrICkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsg ICAgICAgIHN0YXR1cy5zdGF0ZSA9IGRhdGEtPnN0YXRlOwo+ICsgICAgICAgIHN0YXR1cy5yYyA9 IGRhdGEtPnJjOwo+ICsgICAgICAgIGxlbiA9IHN0cmxlbihkYXRhLT5uYW1lKTsKPiArCj4gKyAg ICAgICAgLyogTi5CLiAnaWR4JyAhPSAnaScuICovCj4gKyAgICAgICAgaWYgKCBfX2NvcHlfdG9f Z3Vlc3Rfb2Zmc2V0KGxpc3QtPm5hbWUsIGlkeCAqIFhFTl9YU1BMSUNFX05BTUVfU0laRSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+bmFtZSwgbGVuKSB8fAo+ ICsgICAgICAgICAgICAgX19jb3B5X3RvX2d1ZXN0X29mZnNldChsaXN0LT5sZW4sIGlkeCwgJmxl biwgMSkgfHwKCllvdSdyZSBub3QgY29waW5nIHRoZSBOVUwgdGVybWluYXRvciBoZXJlLCB3aGlj aCBtYWtlcyB0aGUgcmVzdWx0Cm1vcmUgY3VtYmVyc29tZSB0byBjb25zdW1lIGJ5IHRoZSBjYWxs ZXIuIFBlcmhhcHMKWEVOX1hTUExJQ0VfTkFNRV9TSVpFIHNob3VsZCByZW1haW4gdG8gYmUgMTI4 IChvdGhlciB0aGFuCnN1Z2dlc3RlZCBhYm92ZSksIGJ1dCBiZSBzcGVjaWZpZWQgdG8gaW5jbHVk ZSB0aGUgdGVybWluYXRvcj8KCj4gKyAgICAgICAgICAgICBfX2NvcHlfdG9fZ3Vlc3Rfb2Zmc2V0 KGxpc3QtPnN0YXR1cywgaWR4LCAmc3RhdHVzLCAxKSApCj4gKyAgICAgICAgewo+ICsgICAgICAg ICAgICByYyA9IC1FRkFVTFQ7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgaWR4Kys7Cj4gKwo+ICsgICAgICAgIGlmICggaHlwZXJjYWxsX3ByZWVtcHRf Y2hlY2soKSB8fCAoaWR4ICsgMSA+IGxpc3QtPm5yKSApCgppZHggPj0gbGlzdC0+bnIgd291bGQg c2VlbSBlYXNpZXIgdG8gZ3Jvay4gQWxzbyB0aGUgdHdvIHNob3VsZCBiZQpzd2l0Y2hlZCwgYXMg aHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSBpcyB0aGUgbW9yZSBleHBlbnNpdmUgb2YKdGhlIHR3 byBjaGVja3MuCgo+ICtzdGF0aWMgaW50IHhzcGxpY2VfYWN0aW9uKHhlbl9zeXNjdGxfeHNwbGlj ZV9hY3Rpb25fdCAqYWN0aW9uKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcGF5bG9hZCAqZGF0YTsKPiAr ICAgIGludCByYzsKPiArCj4gKyAgICByYyA9IHZlcmlmeV9uYW1lKCZhY3Rpb24tPm5hbWUpOwo+ ICsgICAgaWYgKCByYyApCj4gKyAgICAgICAgcmV0dXJuIHJjOwo+ICsKPiArICAgIHNwaW5fbG9j a19yZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7Cj4gKyAgICByYyA9IGZpbmRfcGF5bG9hZCgmYWN0 aW9uLT5uYW1lLCAmZGF0YSk7Cj4gKyAgICBpZiAoIHJjICkKPiArICAgICAgICBnb3RvIG91dDsK PiArCj4gKyAgICBzd2l0Y2ggKCBhY3Rpb24tPmNtZCApCj4gKyAgICB7Cj4gKyAgICBjYXNlIFhT UExJQ0VfQUNUSU9OX0NIRUNLOgo+ICsgICAgICAgIGlmICggZGF0YS0+c3RhdGUgPT0gWFNQTElD RV9TVEFURV9DSEVDS0VEICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIC8qIE5vIGltcGxl bWVudGF0aW9uIHlldC4gKi8KPiArICAgICAgICAgICAgZGF0YS0+c3RhdGUgPSBYU1BMSUNFX1NU QVRFX0NIRUNLRUQ7Cj4gKyAgICAgICAgICAgIGRhdGEtPnJjID0gMDsKPiArICAgICAgICAgICAg cmMgPSAwOwoKcmMgaXMgemVybyBhbHJlYWR5LgoKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgY2FzZSBYU1BMSUNFX0FDVElPTl9VTkxPQUQ6Cj4gKyAgICAgICAgaWYg KCBkYXRhLT5zdGF0ZSA9PSBYU1BMSUNFX1NUQVRFX0NIRUNLRUQgKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgZnJlZV9wYXlsb2FkKGRhdGEpOwo+ICsgICAgICAgICAgICAvKiBObyB0b3Vj aGluZyAnZGF0YScgZnJvbSBoZXJlIG9uISAqLwoKUG9pc29uIHRoZSBwb2ludGVyIHRvIG1ha2Ug c3VyZT8KCj4gKyAgICAgICAgICAgIHJjID0gMDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgY2FzZSBYU1BMSUNFX0FDVElPTl9SRVZFUlQ6Cj4gKyAgICAgICAgaWYg KCBkYXRhLT5zdGF0ZSA9PSBYU1BMSUNFX1NUQVRFX0FQUExJRUQgKQo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgLyogTm8gaW1wbGVtZW50YXRpb24geWV0LiAqLwo+ICsgICAgICAgICAgICBk YXRhLT5zdGF0ZSA9IFhTUExJQ0VfU1RBVEVfQ0hFQ0tFRDsKPiArICAgICAgICAgICAgZGF0YS0+ cmMgPSAwOwo+ICsgICAgICAgICAgICByYyA9IDA7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGJy ZWFrOwo+ICsKPiArICAgIGNhc2UgWFNQTElDRV9BQ1RJT05fQVBQTFk6Cj4gKyAgICAgICAgaWYg KCAoZGF0YS0+c3RhdGUgPT0gWFNQTElDRV9TVEFURV9DSEVDS0VEKSApCgpTdHJheSBwYXJlbnRo ZXNlcy4KCj4gK3N0YXRpYyB2b2lkIHhzcGxpY2VfcHJpbnRhbGwodW5zaWduZWQgY2hhciBrZXkp Cj4gK3sKPiArICAgIHN0cnVjdCBwYXlsb2FkICpkYXRhOwo+ICsKPiArICAgIHNwaW5fbG9ja19y ZWN1cnNpdmUoJnBheWxvYWRfbG9jayk7CgpJIHRoaW5rIHRoaXMgd291bGQgYmV0dGVyIGJlIGEg dHJ5LWxvY2ssIGJhaWxpbmcgaWYgdGhlIGFjcXVpcmUgZmFpbGVkLgoKSmFuCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl bAo=