From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH v9 11/27] xsplice: Implement payload loading Date: Tue, 26 Apr 2016 07:39:11 -0600 Message-ID: <571F8B9F02000078000E5E09@prv-mh.provo.novell.com> References: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> <1461598514-5440-12-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.bemta6.messagelabs.com ([85.158.143.247]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1av3Cs-00075s-70 for xen-devel@lists.xenproject.org; Tue, 26 Apr 2016 13:39:14 +0000 In-Reply-To: <1461598514-5440-12-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: Stefano Stabellini , Keir Fraser , ross.lagerwall@citrix.com, andrew.cooper3@citrix.com, mpohlack@amazon.de, Julien Grall , sasha.levin@oracle.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org Pj4+IE9uIDI1LjA0LjE2IGF0IDE3OjM0LCA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4gd3JvdGU6 Cj4gRnJvbTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxsQGNpdHJpeC5jb20+Cj4gCj4g QWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgeHNwbGljZSBwYXlsb2Fkcy4gVGhpcyBpcyBzb21ld2hh dCBzaW1pbGFyIHRvCj4gdGhlIExpbnV4IGtlcm5lbCBtb2R1bGUgbG9hZGVyLCBpbXBsZW1lbnRp bmcgdGhlIGZvbGxvd2luZyBzdGVwczoKPiAtIFZlcmlmeSB0aGUgZWxmIGZpbGUuCj4gLSBQYXJz ZSB0aGUgZWxmIGZpbGUuCj4gLSBBbGxvY2F0ZSBhIHJlZ2lvbiBvZiBtZW1vcnkgbWFwcGVkIHdp dGhpbiBhIGZyZWUgYXJlYSBvZgo+ICAgW3hlbl92aXJ0X2VuZCwgWEVOX1ZJUlRfRU5EXS4KPiAt IENvcHkgYWxsb2NhdGVkIHNlY3Rpb25zIGludG8gdGhlIG5ldyByZWdpb24uIFNwbGl0IHRoZW0g aW4gdGhyZWUKPiAgIHJlZ2lvbnMgLSAudGV4dCwgLmRhdGEsIGFuZCAucm9kYXRhLiBNVVNUIGhh dmUgYXQgbGVhc3QgLnRleHQuCj4gLSBSZXNvbHZlIHNlY3Rpb24gc3ltYm9scy4gQWxsIG90aGVy IHN5bWJvbHMgbXVzdCBiZSBhYnNvbHV0ZSBhZGRyZXNzZXMuCj4gICAoTm90ZSB0aGF0IHBhdGNo IHRpdGxlZCAieHNwbGljZSxzeW1ib2xzOiBJbXBsZW1lbnQgc3ltYm9sIG5hbWUgcmVzb2x1dGlv bgo+ICAgIG9uIGFkZHJlc3MiIGltcGxlbWVudHMgdGhhdCkKPiAtIFBlcmZvcm0gcmVsb2NhdGlv bnMuCj4gLSBTZWN1cmUgdGhlIHRoZSByZWdpb25zICgudGV4dCwuZGF0YSwucm9kYXRhKSB3aXRo IHByb3BlciBwZXJtaXNzaW9ucy4KPiAKPiBXZSBjYXBpdGFsaXplIG9uIHRoZSB2bWFsbG9jIGNh bGxiYWNrIEFQSSAoc2VlIHBhdGNoIHRpdGxlZDoKPiAicm0veDg2L3ZtYXA6IEFkZCB2W3p8bV1h bGxvY194ZW4sIGFuZCB2bV9pbml0X3R5cGUiKSB0byBhbGxvY2F0ZQo+IGEgcmVnaW9uIG9mIG1l bW9yeSB3aXRoaW4gdGhlIFt4ZW5fdmlydF9lbmQsIFhFTl9WSVJUX0VORF0gZm9yIHRoZSBjb2Rl Lgo+IAo+IFdlIGFsc28gdXNlIHRoZSAieDg2L21tOiBJbnRyb2R1Y2UgbW9kaWZ5X3hlbl9tYXBw aW5ncygpIgo+IHRvIGNoYW5nZSB0aGUgdmlydHVhbCBhZGRyZXNzIHBhZ2UtdGFibGUgcGVybWlz c2lvbnMuCj4gCj4gU2lnbmVkLW9mZi1ieTogUm9zcyBMYWdlcndhbGwgPHJvc3MubGFnZXJ3YWxs QGNpdHJpeC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25y YWQud2lsa0BvcmFjbGUuY29tPgo+IFJldmlld2VkLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcu Y29vcGVyM0BjaXRyaXguY29tPgo+IEFja2VkLWJ5OiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFs bEBhcm0uY29tPgoKQnkgbm93IEkgZ3Vlc3MgeW91IGNhbiBndWVzcyB3aGF0IEkgdGhpbmsgYWJv dXQgdGhlIGFib3ZlIHZzIC4uLgoKPiB2OToKPiAgIC0gUmViYXNlIG9uIGRpZmZlcmVudCBzcGlu bG9jayB1c2FnZSBpbiB4c3BsaWNlX3VwbG9hZC4KPiAgIC0gRG8gcHJvcGVyIGJvdW5kIGFuZCBv dmVyZmxvdyBjaGVja2luZy4KPiAgIC0gQWRkZWQgJ2NvbnN0JyBvbiBbdGV4dCxybyxyd11fYWRk ci4KPiAgIC0gTWFkZSAnY2FsY19zZWN0aW9uJyBhbmQgJ21vdmVfcGF5bG9hZCcgdXNlIGFuIGR5 bmFtaWNhbGx5Cj4gICAgIGFsbG9jYXRlZCBhcnJheSBmb3IgY29tcHV0ZWQgb2Zmc2V0cyBpbnN0 ZWFkIG9mIG1vZGlmeWluZyBzaF9lbnRzaXplLgo+ICAgLSBSZW1vdmUgYXJjaF94c3BsaWNlX1th bGxvY19wYXlsb2FkfGZyZWVdIGFuZCB1c2UgdnphbGxvY194ZW4gYW5kCj4gICAgIHZmcmVlLgo+ ICAgLSBDb2xsYXBzZSBmb3IgbG9vcCBpbiBtb3ZlX3BheWxvYWQuCj4gICAtIE1vdmUgeHNwbGlj ZS5vIGluIE1ha2VmaWxlCj4gICAtIEFkZCBtb3JlIGNoZWNrcyBpbiBhcmNoX3hzcGxpY2VfcGVy Zm9ybV9yZWxhIChyX29mZnNldCBhbmQKPiAgICAgIHNoX3NpemUgJSBzaF9lbnRzaXplKQo+ICAg LSBVc2UgaW50MzJfdCBhbmQgaW50NjRfdCBpbiBhcmNoX3hzcGxpY2VfcGVyZm9ybV9yZWxhLgo+ ICAgLSBUaWdodGVuIHRoZSBsaXN0IG9mIHNoX2ZsYWdzIHdlIGNoZWNrCj4gICAtIFVzZSBpbnRl cm1lZGlhdGUgb24gJ2J1Zicgc28gdGhhdCB3ZSBjYW4gZG8gJ2NvbnN0IHZvaWQgKicKPiAgIC0g VXNlIGludGVybWVkaWF0ZSBpbiB4c3BsaWNlX2VsZl9yZXNvbHZlX3N5bWJvbHMgZm9yICdjb25z dCcgb2YgZWxmLT5zeW0uCj4gICAtIEZhaWwgaWYgKGFuZCBvbmx5KSBTSEZfQUxMT0MgYW5kIFNI VF9OT0JJVFMgc2VjdGlvbiBpcyBzZWVuLgoKLi4uIHRoaXMgbG9uZyBsaXN0LgoKPiAraW50IGFy Y2hfeHNwbGljZV9wZXJmb3JtX3JlbGEoc3RydWN0IHhzcGxpY2VfZWxmICplbGYsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB4c3BsaWNlX2VsZl9zZWMgKmJh c2UsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB4c3BsaWNl X2VsZl9zZWMgKnJlbGEpCj4gK3sKPiArICAgIGNvbnN0IEVsZl9SZWxBICpyOwo+ICsgICAgdW5z aWduZWQgaW50IHN5bW5keCwgaTsKPiArICAgIHVpbnQ2NF90IHZhbDsKPiArICAgIHVpbnQ4X3Qg KmRlc3Q7Cj4gKwo+ICsgICAgLyogTm90aGluZyB0byBkby4gKi8KPiArICAgIGlmICggIXJlbGEt PnNlYy0+c2hfc2l6ZSApCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgaWYgKCAhcmVs YS0+c2VjLT5zaF9lbnRzaXplIHx8Cj4gKyAgICAgICAgIHJlbGEtPnNlYy0+c2hfZW50c2l6ZSA8 IHNpemVvZihFbGZfUmVsQSkgfHwKClNhbWUgdGhpbmcgaGVyZSBhcyBpbiB2OC4xIGluIGFub3Ro ZXIgcGF0Y2g6IFRoZSBmaXJzdCBjaGVjayBpcwpwb2ludGxlc3Mgbm93IHRoYXQgeW91IGhhdmUg dGhlIHNlY29uZCBvbmUuCgo+ICsgICAgICAgICByZWxhLT5zZWMtPnNoX3NpemUgJSByZWxhLT5z ZWMtPnNoX2VudHNpemUgKQo+ICsgICAgewo+ICsgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwg WFNQTElDRSAiJXM6IFNlY3Rpb24gcmVsYXRpdmUgaGVhZGVyIGlzIGNvcnJ1cHRlZCFcbiIsCj4g KyAgICAgICAgICAgICAgICBlbGYtPm5hbWUpOwo+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ ICsgICAgfQo+ICsKPiArICAgIGZvciAoIGkgPSAwOyBpIDwgKHJlbGEtPnNlYy0+c2hfc2l6ZSAv IHJlbGEtPnNlYy0+c2hfZW50c2l6ZSk7IGkrKyApCj4gKyAgICB7Cj4gKyAgICAgICAgciA9IHJl bGEtPmRhdGEgKyBpICogcmVsYS0+c2VjLT5zaF9lbnRzaXplOwo+ICsKPiArICAgICAgICBzeW1u ZHggPSBFTEY2NF9SX1NZTShyLT5yX2luZm8pOwo+ICsKPiArICAgICAgICBpZiAoIHN5bW5keCA+ IGVsZi0+bnN5bSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19F UlIsIFhTUExJQ0UgIiVzOiBSZWxhdGl2ZSByZWxvY2F0aW9uIHdhbnRzIHN5bWJvbEAldSB3aGlj aCBpcyBwYXN0IGVuZCFcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgZWxmLT5uYW1lLCBzeW1u ZHgpOwo+ICsgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGlmICggci0+cl9vZmZzZXQgPiBiYXNlLT5zZWMtPnNoX3NpemUgKQoKPj0gYXQgdGhl IHZlcnkgbGVhc3QuIFRoZSBzaXplIG9mIHRoZSByZWxvY2F0ZWQgbG9jYXRpb24gd291bGQgcmVh bGx5CmFsc28gbmVlZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQsIGJ1dCB0aGF0IGNhbiBvbmx5 IGJlIGRvbmUgaW4gdGhlCnN3aXRjaCBiZWxvdy4KCj4gK3ZvaWQgYXJjaF94c3BsaWNlX2luaXQo dm9pZCkKCl9faW5pdAoKPiArc3RhdGljIHZvaWQgZnJlZV9wYXlsb2FkX2RhdGEoc3RydWN0IHBh eWxvYWQgKnBheWxvYWQpCj4gK3sKPiArICAgIC8qIFNldCB0byB6ZXJvIHVudGlsICJtb3ZlX3Bh eWxvYWQiLiAqLwo+ICsgICAgaWYgKCAhcGF5bG9hZC0+dGV4dF9hZGRyICkKPiArICAgICAgICBy ZXR1cm47Cj4gKwo+ICsgICAgdmZyZWUoKHZvaWQgKilwYXlsb2FkLT50ZXh0X2FkZHIpOwo+ICsK PiArICAgIHBheWxvYWQtPnBhZ2VzID0gMDsKCkkgdGhpbmsgd2hhdCB5b3UgY2hlY2sgYW5kIHdo YXQgeW91IGNsZWFyIHNob3VsZCBtYXRjaCB1cCwgc3VjaCB0aGF0CnJlZHVuZGFudCBpbnZvY2F0 aW9uIG9mIHRoZSBmdW5jdGlvbiB3b3VsZG4ndCBsZWFkIHRvIHByb2JsZW1zLgoKPiArc3RhdGlj IGludCBtb3ZlX3BheWxvYWQoc3RydWN0IHBheWxvYWQgKnBheWxvYWQsIHN0cnVjdCB4c3BsaWNl X2VsZiAqZWxmKQo+ICt7Cj4gKyAgICB1aW50OF90ICp0ZXh0X2J1ZiwgKnJvX2J1ZiwgKnJ3X2J1 ZjsKCkFueSBwYXJ0aWN1bGFyIHJlYXNvbiBmb3IgdGhlbSBub3QgYmVpbmcgdm9pZCAqPwoKPiAr ICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgc2l6ZV90IHNpemUgPSAwOwo+ICsgICAgdW5zaWdu ZWQgaW50ICpvZmZzZXQ7Cj4gKyAgICBpbnQgcmMgPSAwOwo+ICsKPiArICAgIG9mZnNldCA9IHh6 YWxsb2NfYXJyYXkodW5zaWduZWQgaW50LCBlbGYtPmhkci0+ZV9zaG51bSk7CgpXaHkgbm90IHht YWxsb2NfYXJyYXkoKT8KCj4gKyAgICBpZiAoICFvZmZzZXQgKQo+ICsgICAgICAgIHJldHVybiAt RU5PTUVNOwo+ICsKPiArICAgIC8qIENvbXB1dGUgc2l6ZSBvZiBkaWZmZXJlbnQgcmVnaW9ucy4g Ki8KPiArICAgIGZvciAoIGkgPSAxOyBpIDwgZWxmLT5oZHItPmVfc2hudW07IGkrKyApCj4gKyAg ICB7Cj4gKyAgICAgICAgaWYgKCAoZWxmLT5zZWNbaV0uc2VjLT5zaF9mbGFncyAmIChTSEZfQUxM T0N8U0hGX0VYRUNJTlNUUikpID09Cj4gKyAgICAgICAgICAgICAoU0hGX0FMTE9DfFNIRl9FWEVD SU5TVFIpICkKPiArICAgICAgICAgICAgY2FsY19zZWN0aW9uKCZlbGYtPnNlY1tpXSwgJnBheWxv YWQtPnRleHRfc2l6ZSwgJm9mZnNldFtpXSk7CgpUaGlzIHNpbGVudGx5IGFjY2VwdHMgd3JpdGFi bGUgdGV4dCBzZWN0aW9ucywgeWV0IHRoZSBwb3J0aW9uIG9mIHRoZQptZW1vcnkgdGhpcyBnZXRz IHBsYWNlZCBpbiB3aWxsIGJlIG1hcHBlZCBSWC4KCj4gKyAgICAgICAgZWxzZSBpZiAoIChlbGYt PnNlY1tpXS5zZWMtPnNoX2ZsYWdzICYgU0hGX0FMTE9DKSAmJgo+ICsgICAgICAgICAgICAgICAg ICAhKGVsZi0+c2VjW2ldLnNlYy0+c2hfZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKSAmJgo+ICsgICAg ICAgICAgICAgICAgICAoZWxmLT5zZWNbaV0uc2VjLT5zaF9mbGFncyAmIFNIRl9XUklURSkgKQo+ ICsgICAgICAgICAgICBjYWxjX3NlY3Rpb24oJmVsZi0+c2VjW2ldLCAmcGF5bG9hZC0+cndfc2l6 ZSwgJm9mZnNldFtpXSk7Cj4gKyAgICAgICAgZWxzZSBpZiAoIChlbGYtPnNlY1tpXS5zZWMtPnNo X2ZsYWdzICYgU0hGX0FMTE9DKSAmJgo+ICsgICAgICAgICAgICAgICAgICAhKGVsZi0+c2VjW2ld LnNlYy0+c2hfZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKSAmJgo+ICsgICAgICAgICAgICAgICAgICAh KGVsZi0+c2VjW2ldLnNlYy0+c2hfZmxhZ3MgJiBTSEZfV1JJVEUpICkKPiArICAgICAgICAgICAg Y2FsY19zZWN0aW9uKCZlbGYtPnNlY1tpXSwgJnBheWxvYWQtPnJvX3NpemUsICZvZmZzZXRbaV0p Owo+ICsgICAgICAgIGVsc2UgaWYgKCAhZWxmLT5zZWNbaV0uc2VjLT5zaF9mbGFncyB8fAo+ICsg ICAgICAgICAgICAgICAgICAoZWxmLT5zZWNbaV0uc2VjLT5zaF9mbGFncyAmIFNIRl9FWEVDSU5T VFIpIHx8Cj4gKyAgICAgICAgICAgICAgICAgIChlbGYtPnNlY1tpXS5zZWMtPnNoX2ZsYWdzICYg U0hGX01BU0tQUk9DKSApCj4gKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcuKi87Cj4gKyAgICAg ICAgZWxzZSBpZiAoIChlbGYtPnNlY1tpXS5zZWMtPnNoX2ZsYWdzICYgU0hGX0FMTE9DKSAmJgo+ ICsgICAgICAgICAgICAgICAgICAoZWxmLT5zZWNbaV0uc2VjLT5zaF90eXBlID09IFNIVF9OT0JJ VFMpICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RFQlVHLCBY U1BMSUNFICIlczogTm90IHN1cHBvcnRpbmcgJXMgc2VjdGlvbiFcbiIsCj4gKyAgICAgICAgICAg ICAgICAgICAgZWxmLT5uYW1lLCBlbGYtPnNlY1tpXS5uYW1lKTsKPiArICAgICAgICAgICAgcmMg PSAtRU9QTk9UU1VQUDsKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgfQoKSSBz YXcgdGhpcyBpbiB0aGUgY2hhbmdlbG9nLCBidXQgSSBkb24ndCByZWFsbHkgdW5kZXJzdGFuZCB0 aGVzZSBsYXN0CnR3byBjb25kaXRpb25hbHMuIFdvdWxkbid0IHlvdSB3YW50IHRvIGJhaWwgb24g X2FueV8gc2VjdGlvbnMgd2hpY2gKaGF2ZSBTSEZfQUxMT0Mgc2V0IGJ1dCBkb24ndCBnZXQgbWFw cGVkIHRvIG9uZSBvZiB0aGUgdGhyZWUKYmxvY2tzPyBBbmQgd291bGRuJ3QgeW91IChzaWxlbnRs eSkgaWdub3JlIGFueSBzZWN0aW9ucyB3aXRoIFNIRl9BTExPQwpjbGVhcj8KCj4gKyAgICAgICAg ZWxzZSAvKiBTdWNoIGFzIC5jb21tZW50LiAqLwo+ICsgICAgICAgICAgICBkcHJpbnRrKFhFTkxP R19ERUJVRywgWFNQTElDRSAiJXM6IElnbm9yaW5nICVzIHNlY3Rpb24hXG4iLAo+ICsgICAgICAg ICAgICAgICAgICAgIGVsZi0+bmFtZSwgZWxmLT5zZWNbaV0ubmFtZSk7Cj4gKyAgICB9Cj4gKwo+ ICsgICAgLyoKPiArICAgICAqIFRvdGFsIG9mIGFsbCB0aHJlZSByZWdpb25zIC0gUlgsIFJXLCBh bmQgUk8uIFdlIGhhdmUgdG8gaGF2ZQo+ICsgICAgICoga2VlcCB0aGVtIGluIHNlcGVyYXRlIHBh Z2VzIHNvIHdlIFBBR0VfQUxJR04gdGhlIFJYIGFuZCBSVyB0byBoYXZlCj4gKyAgICAgKiB0aGVt IG9uIHNlcGVyYXRlIHBhZ2VzLiBUaGUgbGFzdCBvbmUgd2lsbCBieSBkZWZhdWx0IGZhbGwgb24g aXRzCj4gKyAgICAgKiBvd24gcGFnZS4KPiArICAgICAqLwo+ICsgICAgc2l6ZSA9IFBBR0VfQUxJ R04ocGF5bG9hZC0+dGV4dF9zaXplKSArIFBBR0VfQUxJR04ocGF5bG9hZC0+cndfc2l6ZSkgKwo+ ICsgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC0+cm9fc2l6ZTsKPiArCj4gKyAgICBzaXpl ID0gUEZOX1VQKHNpemUpOyAvKiBOciBvZiBwYWdlcy4gKi8KPiArICAgIHRleHRfYnVmID0gdnph bGxvY194ZW4oc2l6ZSAqIFBBR0VfU0laRSk7Cj4gKyAgICBpZiAoICF0ZXh0X2J1ZiApCj4gKyAg ICB7Cj4gKyAgICAgICAgZHByaW50ayhYRU5MT0dfRVJSLCBYU1BMSUNFICIlczogQ291bGQgbm90 IGFsbG9jYXRlIG1lbW9yeSBmb3IgcGF5bG9hZCFcbiIsCj4gKyAgICAgICAgICAgICAgICBlbGYt Pm5hbWUpOwo+ICsgICAgICAgIHJjID0gLUVOT01FTTsKPiArICAgICAgICBnb3RvIG91dDsKPiAr ICAgIH0KPiArICAgIHJ3X2J1ZiA9IHRleHRfYnVmICsgICsgUEFHRV9BTElHTihwYXlsb2FkLT50 ZXh0X3NpemUpOwo+ICsgICAgcm9fYnVmID0gcndfYnVmICsgUEFHRV9BTElHTihwYXlsb2FkLT5y d19zaXplKTsKPiArCj4gKyAgICBwYXlsb2FkLT5wYWdlcyA9IHNpemU7Cj4gKyAgICBwYXlsb2Fk LT50ZXh0X2FkZHIgPSB0ZXh0X2J1ZjsKPiArICAgIHBheWxvYWQtPnJ3X2FkZHIgPSByd19idWY7 Cj4gKyAgICBwYXlsb2FkLT5yb19hZGRyID0gcm9fYnVmOwo+ICsKPiArICAgIGZvciAoIGkgPSAx OyBpIDwgZWxmLT5oZHItPmVfc2hudW07IGkrKyApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCBl bGYtPnNlY1tpXS5zZWMtPnNoX2ZsYWdzICYgU0hGX0FMTE9DICkKPiArICAgICAgICB7Cj4gKyAg ICAgICAgICAgIHVpbnQ4X3QgKmJ1ZjsKClBlcmhhcHMgdm9pZCAqIGFnYWluPyBBbmQgbWlzc2lu ZyBhIGJsYW5rIGxpbmUgYWZ0ZXJ3YXJkcy4KCj4gKyAgICAgICAgICAgIGlmICggKGVsZi0+c2Vj W2ldLnNlYy0+c2hfZmxhZ3MgJiBTSEZfRVhFQ0lOU1RSKSApCj4gKyAgICAgICAgICAgICAgICBi dWYgPSB0ZXh0X2J1ZjsKPiArICAgICAgICAgICAgZWxzZSBpZiAoIChlbGYtPnNlY1tpXS5zZWMt PnNoX2ZsYWdzICYgU0hGX1dSSVRFKSApCj4gKyAgICAgICAgICAgICAgICBidWYgPSByd19idWY7 Cj4gKyAgICAgICAgICAgICBlbHNlCgpUaGUgaW5kZW50YXRpb24gaGVyZSBpcyBzdGlsbCBvbmUg b2ZmLgoKPiArICAgICAgICAgICAgICAgIGJ1ZiA9IHJvX2J1ZjsKPiArCj4gKyAgICAgICAgICAg IGVsZi0+c2VjW2ldLmxvYWRfYWRkciA9IGJ1ZiArIG9mZnNldFtpXTsKPiArCj4gKyAgICAgICAg ICAgIC8qCj4gKyAgICAgICAgICAgICAqIERvbid0IGNvcHkgTk9CSVRTIC0gc3VjaCBhcyBCU1Mu IFdlIGRvbid0IG1lbXNldCBCU1MgYXMKPiArICAgICAgICAgICAgICogYXJjaF94c3BsaWNlX2Fs bG9jX3BheWxvYWQgaGFzIHplcm9lZCBpdCBvdXQgZm9yIHVzLgoKU3RhbGUgY29tbWVudCAtIHRo ZSBtZW50aW9uZWQgZnVuY3Rpb24gZG9lc24ndCBleGlzdCBhbnltb3JlLgooU2FtZSBlbHNld2hl cmUgZnVydGhlciBkb3duIGluIHhzcGxpY2UuaC4pIEFuZCBJIHJlYWxseSB0aGluawp1c2luZyBt ZW1zZXQoKSBoZXJlIHdvdWxkIGJlIGJldHRlciB0aGFuIHVzaW5nIHZ6YWxsb2NfeGVuKCkKYWJv dmUuIE9yIGlzIHRoZXJlIGEgcGFydGljdWxhciByZWFzb24gdG8gemVybyB0aGUgd2hvbGUgYXJl YSwKanVzdCB0byBvdmVyd3JpdGUgYWxtb3N0IGV2ZXJ5dGhpbmcgb2YgaXQgYWdhaW4gcmlnaHQg YWZ0ZXJ3YXJkcz8KCj4gK2ludCB4c3BsaWNlX2VsZl9yZXNvbHZlX3N5bWJvbHMoc3RydWN0IHhz cGxpY2VfZWxmICplbGYpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgaW50IHJj ID0gMDsKPiArCj4gKyAgICBBU1NFUlQoZWxmLT5zeW0pOwo+ICsKPiArICAgIGZvciAoIGkgPSAx OyBpIDwgZWxmLT5uc3ltOyBpKysgKQo+ICsgICAgewo+ICsgICAgICAgIHVuc2lnbmVkIGludCBp ZHggPSBlbGYtPnN5bVtpXS5zeW0tPnN0X3NobmR4Owo+ICsgICAgICAgIEVsZl9TeW0gKnN5bSA9 IChFbGZfU3ltICopZWxmLT5zeW1baV0uc3ltOwoKV2VsbCwgSSBhZG1pdCB0aGF0IHRoaXMgaXMg dGhlIG1vcmUgc3RyYWlnaHRmb3J3YXJkIHNvbHV0aW9uLCBidXQgaXQKb3BlbnMgdXAgYWxsIG9m IHdoYXQgc3ltIHBvaW50cyB0byBmb3Igd3JpdGluZy4gSS5lLiBJJ2QgaGF2ZQpjb25zaWRlcmVk IGl0IG11Y2ggYmV0dGVyIHRvIHJlYWxseSBvbmx5IGRvIHRoZSBjYXN0aW5nIGF3YXkgb2YKY29u c3QgaW4gdGhlIG9uZSBzcG90IHdoZXJlIHlvdSBuZWVkIGl0IChzZWUgYmVsb3cpLgoKPiArICAg ICAgICBzd2l0Y2ggKCBpZHggKQo+ICsgICAgICAgIHsKPiArICAgICAgICBjYXNlIFNITl9DT01N T046Cj4gKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFVuZXhw ZWN0ZWQgY29tbW9uIHN5bWJvbDogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgZWxmLT5u YW1lLCBlbGYtPnN5bVtpXS5uYW1lKTsKPiArICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwo+ICsg ICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgY2FzZSBTSE5fVU5ERUY6Cj4gKyAgICAg ICAgICAgIGRwcmludGsoWEVOTE9HX0VSUiwgWFNQTElDRSAiJXM6IFVua25vd24gc3ltYm9sOiAl c1xuIiwKPiArICAgICAgICAgICAgICAgICAgICBlbGYtPm5hbWUsIGVsZi0+c3ltW2ldLm5hbWUp Owo+ICsgICAgICAgICAgICByYyA9IC1FTk9FTlQ7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsK PiArICAgICAgICBjYXNlIFNITl9BQlM6Cj4gKyAgICAgICAgICAgIGRwcmludGsoWEVOTE9HX0RF QlVHLCBYU1BMSUNFICIlczogQWJzb2x1dGUgc3ltYm9sOiAlcyA9PiAlIyJQUkl4RWxmQWRkciJc biIsCj4gKyAgICAgICAgICAgICAgICAgICAgZWxmLT5uYW1lLCBlbGYtPnN5bVtpXS5uYW1lLCBz eW0tPnN0X3ZhbHVlKTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICAgIGRlZmF1 bHQ6Cj4gKyAgICAgICAgICAgIGlmICggaWR4IDwgZWxmLT5oZHItPmVfc2hudW0gJiYKPiArICAg ICAgICAgICAgICAgICAhKGVsZi0+c2VjW2lkeF0uc2VjLT5zaF9mbGFncyAmIFNIRl9BTExPQykg KQo+ICsgICAgICAgICAgICAgICAgYnJlYWs7CgpJJ20gYWZyYWlkIEkgZ290IGNvbmZ1c2VkIG9u IHY4LjEgYW5kIG1pc2d1aWRlZCB5b3UgaGVyZS4gRm9yIHNvbWUKcmVhc29uIEkgdGhvdWdodCB0 aGUgY2hlY2sgb3JpZ2luYWxseSBzYXQgcGFzdCB0aGUgc3dpdGNoKCkgc3RhdGVtZW50LAp3aGlj aCBvYnZpb3VzbHkgaXQgY2FuJ3QuIFdpdGggdGhlIG5vdyByZWR1bmRhbnQgaWR4IHJhbmdlIGNo ZWNrIGl0CmlzIHByZXR0eSBjbGVhciB0aGF0IHNob3VsZCByZWFsbHkgaGF2ZSByZW1haW5lZCB3 aGVyZSBpdCB3YXMuCgo+ICsgICAgICAgICAgICAvKiBTSE5fQ09NTU9OIGFuZCBTSE5fQUJTIGFy ZSBhYm92ZS4gKi8KPiArICAgICAgICAgICAgaWYgKCBpZHggPj0gU0hOX0xPUkVTRVJWRSApCj4g KyAgICAgICAgICAgICAgICByYyA9IC1FT1BOT1RTVVBQOwo+ICsgICAgICAgICAgICBlbHNlIGlm ICggaWR4ID49IGVsZi0+aGRyLT5lX3NobnVtICkKPiArICAgICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKPiArCj4gKyAgICAgICAgICAgIGlmICggcmMgKQo+ICsgICAgICAgICAgICB7Cj4gKyAg ICAgICAgICAgICAgICBkcHJpbnRrKFhFTkxPR19FUlIsIFhTUExJQ0UgIiVzOiBVbmtub3duIHR5 cGU9JSMiUFJJeDE2IlxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgZWxmLT5uYW1lLCBp ZHgpOwo+ICsgICAgICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAg ICAgICAgICAgIHN5bS0+c3RfdmFsdWUgKz0gKHVuc2lnbmVkIGxvbmcpZWxmLT5zZWNbaWR4XS5s b2FkX2FkZHI7CgoqKDx0eXBlPiAqKSZzeW0tPnN0X3ZhbHVlICs9IC4uLgoKQnV0IGFueXdheS4K Cj4gK2ludCB4c3BsaWNlX2VsZl9wZXJmb3JtX3JlbG9jcyhzdHJ1Y3QgeHNwbGljZV9lbGYgKmVs ZikKPiArewo+ICsgICAgc3RydWN0IHhzcGxpY2VfZWxmX3NlYyAqciwgKmJhc2U7Cj4gKyAgICB1 bnNpZ25lZCBpbnQgaTsKPiArICAgIGludCByYyA9IDA7Cj4gKwo+ICsgICAgLyoKPiArICAgICAq IFRoZSBmaXJzdCBlbnRyeSBvZiBhbiBFTEYgc3ltYm9sIHRhYmxlIGlzIHRoZSAidW5kZWZpbmVk IHN5bWJvbCBpbmRleCIuCj4gKyAgICAgKiBha2EgcmVzZXJ2ZWQgc28gd2Ugc2tpcCBpdC4KPiAr ICAgICAqLwoKU2FtZSBjb21tZW50IGFzIG9uIHY4LjE6ICJUaGlzIGNvbW1lbnQgc2VlbXMgYXQg bGVhc3QgbWlzcGxhY2VkLAppZiBub3QgcG9pbnRsZXNzLiIKCkphbgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK