From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: Re: [PATCH 01/10] xen/arm: vpl011: Add pl011 uart emulation in Xen Date: Wed, 19 Apr 2017 12:58:06 +0530 Message-ID: References: <1491212673-13476-1-git-send-email-bhupinder.thakur@linaro.org> <1491212673-13476-2-git-send-email-bhupinder.thakur@linaro.org> 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 1d0k26-0003sg-7o for xen-devel@lists.xenproject.org; Wed, 19 Apr 2017 07:28:10 +0000 Received: by mail-ua0-f176.google.com with SMTP id h2so8991923uaa.1 for ; Wed, 19 Apr 2017 00:28:08 -0700 (PDT) In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: xen-devel@lists.xenproject.org, Julien Grall , Ian Jackson , Wei Liu List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKClRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4KCk9uIDE5IEFwcmlsIDIwMTcg YXQgMDU6NDUsIFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2VybmVsLm9yZz4gd3Jv dGU6Cj4+ICtzdGF0aWMgdm9pZCB2cGwwMTFfcmVhZF9kYXRhKHN0cnVjdCBkb21haW4gKmQsIHVp bnQ4X3QgKmRhdGEpCj4+ICt7Cj4+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gKyAgICBz dHJ1Y3QgdnBsMDExX3MgKnZwbDAxMT0mZC0+YXJjaC52cGwwMTE7Cj4KPiBUaGUgY29kZSBzdHls ZSBpczoKPgo+ICAgICB2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTEKPgo+Cj4+ICsgICAgc3RydWN0 IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmPShzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKil2cGww MTEtPnJpbmdfYnVmOwo+Cj4gU2FtZSBoZXJlLiBQbGVhc2UgZml4IGl0IGV2ZXJ5d2hlcmUuCj4K SSB3aWxsIGZpeCB0aGUgY29kaW5nIHN0eWxlIGhlcmUuCgo+Cj4+ICsgICAgLyoKPj4gKyAgICAg KiBJbml0aWFsaXplIHRoZSBkYXRhIHNvIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBubyBkYXRhIGlu IHJpbmcgYnVmZmVyCj4+ICsgICAgICogMCBpcyByZXR1cm5lZC4KPj4gKyAgICAgKi8KPj4gKyAg ICAqZGF0YSA9IDA7Cj4+ICsKPj4gKyAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7Cj4+ICsKPj4g KyAgICAvKgo+PiArICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRh IGluIHRoZSByaW5nIGJ1ZmZlciB3aGVuIHRoaXMKPj4gKyAgICAgKiBmdW5jdGlvbiBpcyBjYWxs ZWQgc2luY2UgdGhlIGd1ZXN0IGlzIGV4cGVjdGVkIHRvIHJlYWQgdGhlIGRhdGEgcmVnaXN0ZXIK Pj4gKyAgICAgKiBvbmx5IGlmIHRoZSBUWEZFIGZsYWcgaXMgbm90IHNldC4KPj4gKyAgICAgKiBJ ZiB0aGUgZ3Vlc3Qgc3RpbGwgZG9lcyByZWFkIGV2ZW50IHdoZW4gVFhGRSBiaXQgaXMgc2V0IHRo ZW4gMCB3aWxsCj4+ICsgICAgICogYmUgcmV0dXJuZWQuCj4+ICsgICAgICovCj4+ICsgICAgaWYg KCAhVlBMMDExX0lOX1JJTkdfRU1QVFkoaW50ZikgKQo+PiArICAgIHsKPj4gKyAgICAgICAgKmRh dGEgPSBpbnRmLT5pbltNQVNLX1hFTkNPTlNfSURYKGludGYtPmluX2NvbnMrKywgaW50Zi0+aW4p XTsKPgo+IEZvciBjb3JyZWN0bmVzcywgaXQgaXMgaW1wb3J0YW50IHRvIG1haW50YWluIHRoZSBy aWdodCBvcmRlcmluZyBhbmQgdXNlCj4gYmFycmllcnM6Cj4KPiAgICAgICAgIGluX2NvbnMgPSBp bnRmLT5pbl9jb25zOwo+ICAgICAgICAgKmRhdGEgPSBpbnRmLT5pbltNQVNLX1hFTkNPTlNfSURY KGluX2NvbnMsIGludGYtPmluKV07Cj4gICAgICAgICBzbWJfbWIoKTsKPiAgICAgICAgIGludGYt PmluX2NvbnMgPSBpbl9jb25zICsgMTsKPgo+Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKCBW UEwwMTFfSU5fUklOR19FTVBUWShpbnRmKSApCj4+ICsgICAgewo+PiArICAgICAgICB2cGwwMTEt PnVhcnRmciB8PSAoUlhGRSk7Cj4+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+KFJYSSk7 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgdnBsMDExLT51YXJ0ZnIgJj0gfihSWEZGKTsKPj4gKwo+ PiArICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOwo+Cj4gSSB0aGluayB3ZSBuZWVkIHRvIG5v dGlmeSB4ZW5jb25zb2xlZCBoZXJlLCBpbiBjYXNlIHRoZSByaW5nIHdhcwo+IHByZXZpb3N1bHkg ZnVsbD8gTm93IHRoYXQgd2UgaGF2ZSByZWFkIHNvbWUgZGF0YSwgeGVuY29uc29sZWQgY2FuIGdv Cj4gYmFjayBhbmQgd3JpdGUgbW9yZS4KPgpZZXMgdGhpcyBpcyBhIHZhbGlkIHBvaW50LiBJIHdp bGwgc2VuZCBhbiBldmVudCBoZXJlLgoKPgo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB2cGww MTFfd3JpdGVfZGF0YShzdHJ1Y3QgZG9tYWluICpkLCB1aW50OF90IGRhdGEpCj4+ICt7Cj4+ICsg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMT0m ZC0+YXJjaC52cGwwMTE7Cj4+ICsgICAgc3RydWN0IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmPShz dHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKil2cGwwMTEtPnJpbmdfYnVmOwo+PiArCj4+ICsgICAg VlBMMDExX0xPQ0soZCwgZmxhZ3MpOwo+PiArCj4+ICsgICAgLyoKPj4gKyAgICAgKiBJdCBpcyBl eHBlY3RlZCB0aGF0IHRoZSByaW5nIGlzIG5vdCBmdWxsIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBj YWxsZWQKPj4gKyAgICAgKiBhcyB0aGUgZ3Vlc3QgaXMgZXhwZWN0ZWQgdG8gd3JpdGUgdG8gdGhl IGRhdGEgcmVnaXN0ZXIgb25seSB3aGVuIHRoZQo+PiArICAgICAqIFRYRkYgZmxhZyBpcyBub3Qg c2V0Lgo+PiArICAgICAqIEluIGNhc2UgdGhlIGd1ZXN0IGRvZXMgd3JpdGUgZXZlbiB3aGVuIHRo ZSBUWEZGIGZsYWcgaXMgc2V0IHRoZW4gdGhlCj4+ICsgICAgICogZGF0YSB3aWxsIGJlIHNpbGVu dGx5IGRyb3BwZWQuCj4+ICsgICAgICovCj4+ICsgICAgaWYgKCAhVlBMMDExX09VVF9SSU5HX0ZV TEwoaW50ZikgKQo+PiArICAgIHsKPj4gKyAgICAgICAgaW50Zi0+b3V0W01BU0tfWEVOQ09OU19J RFgoaW50Zi0+b3V0X3Byb2QrKywgaW50Zi0+b3V0KV0gPSBkYXRhOwo+PiArICAgICAgICBzbXBf d21iKCk7Cj4KPiBTaW1pbGFybHksIHRoZSBvcmRlciBzaG91bGQgYmU6Cj4KPiAgICAgb3V0X3By b2QgPSBpbnRmLT5vdXRfcHJvZDsKPiAgICAgaW50Zi0+b3V0W01BU0tfWEVOQ09OU19JRFgob3V0 X3Byb2QsIGludGYtPm91dCldID0gZGF0YTsKPiAgICAgc21iX3dtYigpOwo+ICAgICBpbnRmLT5v dXRfcHJvZCA9IG91dF9wcm9kICsgMTsKPgpJIHdpbGwgdXNlIHRoZSBzdWdnZXN0ZWQgb3JkZXIu Cj4KPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBpZiAoIFZQTDAxMV9PVVRfUklOR19GVUxMKGludGYp ICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIHZwbDAxMS0+dWFydGZyIHw9IChUWEZGKTsKPj4gKyAg ICAgICAgdnBsMDExLT51YXJ0cmlzICY9IH4oVFhJKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICB2 cGwwMTEtPnVhcnRmciB8PSAoQlVTWSk7Cj4+ICsKPj4gKyAgICB2cGwwMTEtPnVhcnRmciAmPSB+ KFRYRkUpOwo+PiArCj4+ICsgICAgVlBMMDExX1VOTE9DSyhkLCBmbGFncyk7Cj4+ICsKPj4gKyAg ICAvKiByYWlzZSBhbiBldmVudCB0byB4ZW5jb25zb2xlZCBvbmx5IGlmIGl0IGlzIHRoZSBmaXJz dCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciAqLwo+PiArICAgIGlmICggVlBMMDExX1JJTkdfREVQ VEgoaW50Ziwgb3V0KSA9PSAxICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIG5vdGlmeV92aWFfeGVu X2V2ZW50X2NoYW5uZWwoZCwgZC0+YXJjaC5odm1fZG9tYWluLnBhcmFtc1tIVk1fUEFSQU1fVkNP TlNPTEVfRVZUQ0hOXSk7Cj4+ICsgICAgfQo+Cj4gV2h5IG9ubHkgaW4gY2FzZSBpcyB0aGUgZmly c3QgY2hhcmFjdGVyPyB4ZW5jb25zb2xlZCB3aWxsIG1pc3MgdXBkYXRlcwo+IGlmIHdlIGRvbid0 IHNlbmQgYSBub3RpZmljYXRpb24sIHJpZ2h0Pwo+CldoZW5ldmVyIHhlbmNvbnNvbGVkIHNlbmRz IGFuIGV2ZW50LCB0aGUgdnBsMDExX2RhdGFfYXZhaWwgZnVuY3Rpb24Kd2lsbCBtYWtlIHN1cmUg dGhhdCBpZiB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgdGhlbiBpdAphZ2Fp bgpzZW5kcyBhbiBldmVudCB0byB4ZW5jb25zb2xlZC4gQWxzbyBpdCBhdm9pZHMgdGhlIG5lZWQg b2Ygc2VuZGluZyBhbgpldmVudCBmb3IgZXZlcnkgY2hhcmFjdGVyIHdyaXR0ZW4gaW4gdGhlIE9V VCByaW5nIGJ1ZmZlci4KPgo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHZwbDAxMV9tbWlvX3Jl YWQoc3RydWN0IHZjcHUgKnYsIG1taW9faW5mb190ICppbmZvLCByZWdpc3Rlcl90ICpyLCB2b2lk ICpwcml2KQo+PiArewo+PiArICAgIHVpbnQ4X3QgY2g7Cj4+ICsgICAgc3RydWN0IGhzcl9kYWJ0 IGRhYnQgPSBpbmZvLT5kYWJ0Owo+PiArICAgIGludCB2cGwwMTFfcmVnID0gKGludCkoaW5mby0+ Z3BhIC0gR1VFU1RfUEwwMTFfQkFTRSk7Cj4+ICsgICAgc3RydWN0IHZwbDAxMV9zICp2cGwwMTEg PSAmdi0+ZG9tYWluLT5hcmNoLnZwbDAxMTsKPj4gKwo+PiArICAgIHN3aXRjaCAoIHZwbDAxMV9y ZWcgKQo+PiArICAgIHsKPj4gKyAgICBjYXNlIERSOgo+PiArICAgICAgICBpZiAoICFWQUxJRF9X X1NJWkUoZGFidC5zaXplKSApIGdvdG8gYmFkX3dpZHRoOwo+PiArICAgICAgICB2cGwwMTFfcmVh ZF9kYXRhKHYtPmRvbWFpbiwgJmNoKTsKPj4gKyAgICAgICAgKnIgPSBjaDsKPj4gKyAgICAgICAg YnJlYWs7Cj4+ICsKPj4gKyAgICBjYXNlIFJTUjoKPj4gKyAgICAgICAgaWYgKCAhVkFMSURfQldf U0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsKPj4gKyAgICAgICAgLyogSXQg YWx3YXlzIHJldHVybnMgMCBhcyB0aGVyZSBhcmUgbm8gcGh5c2ljYWwgZXJyb3JzLiAqLwo+PiAr ICAgICAgICAqciA9IDA7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgY2FzZSBGUjoK Pj4gKyAgICAgICAgaWYgKCAhVkFMSURfQldfU0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lk dGg7Cj4+ICsgICAgICAgICpyID0gKHZwbDAxMS0+dWFydGZyICYgdnBsMDExX3JlZ19tYXNrW2Rh YnQuc2l6ZV0pOwo+PiArICAgICAgICBicmVhazsKPj4gKwo+PiArICAgIGNhc2UgUklTOgo+PiAr ICAgICAgICBpZiAoICFWQUxJRF9XX1NJWkUoZGFidC5zaXplKSApIGdvdG8gYmFkX3dpZHRoOwo+ PiArICAgICAgICAqciA9ICh2cGwwMTEtPnVhcnRyaXMgJiB2cGwwMTFfcmVnX21hc2tbZGFidC5z aXplXSk7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgY2FzZSBNSVM6Cj4+ICsgICAg ICAgIGlmICggIVZBTElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsg ICAgICAgICpyID0gKHZwbDAxMS0+dWFydHJpcyAmCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdnBsMDExLT51YXJ0aW1zYyAmIHZwbDAxMV9yZWdfbWFza1tkYWJ0LnNpemVdKTsKPj4g KyAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBjYXNlIElNU0M6Cj4+ICsgICAgICAgIGlmICgg IVZBTElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsgICAgICAgICpy ID0gKHZwbDAxMS0+dWFydGltc2MgJiB2cGwwMTFfcmVnX21hc2tbZGFidC5zaXplXSk7Cj4+ICsg ICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgY2FzZSBJQ1I6Cj4+ICsgICAgICAgIGlmICggIVZB TElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsKPj4gKyAgICAgICAg LyogT25seSB3cml0ZSBpcyB2YWxpZC4gKi8KPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+ICsKPj4g KyAgICBkZWZhdWx0Ogo+PiArICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IHVu aGFuZGxlZCByZWFkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+PiArICAgICAgICByZXR1cm4gMDsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXR1cm4gMTsKPj4gKwo+PiArYmFkX3dpZHRoOgo+PiAr ICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogYmFkIHJlYWQgd2lkdGggJWQgciVkIG9m ZnNldCAlIzA4eFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgZGFidC5zaXplLCBkYWJ0 LnJlZywgdnBsMDExX3JlZyk7Cj4+ICsgICAgZG9tYWluX2NyYXNoX3N5bmNocm9ub3VzKCk7Cj4+ ICsgICAgcmV0dXJuIDA7Cj4+ICsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB2cGwwMTFfbW1p b193cml0ZShzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZvX3QgKmluZm8sIHJlZ2lzdGVyX3Qgciwg dm9pZCAqcHJpdikKPj4gK3sKPj4gKyAgICB1aW50OF90IGNoID0gKChzdHJ1Y3QgdWFydGRyX3Jl ZyAqKSZyKS0+ZGF0YTsKPj4gKyAgICBzdHJ1Y3QgaHNyX2RhYnQgZGFidCA9IGluZm8tPmRhYnQ7 Cj4+ICsgICAgaW50IHZwbDAxMV9yZWcgPSAoaW50KShpbmZvLT5ncGEgLSBHVUVTVF9QTDAxMV9C QVNFKTsKPj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZ2LT5kb21haW4tPmFyY2gu dnBsMDExOwo+PiArCj4+ICsgICAgc3dpdGNoICggdnBsMDExX3JlZyApCj4+ICsgICAgewo+PiAr ICAgIGNhc2UgRFI6Cj4+ICsKPj4gKyAgICAgICAgaWYgKCAhVkFMSURfQldfU0laRShkYWJ0LnNp emUpICkgZ290byBiYWRfd2lkdGg7Cj4+ICsgICAgICAgIHZwbDAxMV93cml0ZV9kYXRhKHYtPmRv bWFpbiwgY2gpOwo+PiArICAgICAgICBicmVhazsKPj4gKwo+PiArICAgIGNhc2UgUlNSOiAvKiBO b3RoaW5nIHRvIGNsZWFyLiAqLwo+PiArICAgICAgICBpZiAoICFWQUxJRF9CV19TSVpFKGRhYnQu c2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBj YXNlIEZSOgo+PiArICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZTsKPj4gKyAgICBjYXNlIFJJUzoK Pj4gKyAgICBjYXNlIE1JUzoKPj4gKyAgICAgICAgZ290byB3b3JkX3dyaXRlX2lnbm9yZTsKPj4g Kwo+PiArICAgIGNhc2UgSU1TQzoKPj4gKyAgICAgICAgaWYgKCAhVkFMSURfV19TSVpFKGRhYnQu c2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKyAgICAgICAgdnBsMDExLT51YXJ0aW1zYyA9IChy ICYgdnBsMDExX3JlZ19tYXNrW2RhYnQuc2l6ZV0pOwo+PiArICAgICAgICB2Z2ljX2luamVjdF92 cGwwMTFfc3BpKHYtPmRvbWFpbik7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgY2Fz ZSBJQ1I6Cj4+ICsgICAgICAgIGlmICggIVZBTElEX1dfU0laRShkYWJ0LnNpemUpICkgZ290byBi YWRfd2lkdGg7Cj4+ICsgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+KHIgJiB2cGwwMTFfcmVn X21hc2tbZGFidC5zaXplXSk7Cj4+ICsgICAgICAgIHZnaWNfaW5qZWN0X3ZwbDAxMV9zcGkodi0+ ZG9tYWluKTsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsKPj4gKyAgICBkZWZhdWx0Ogo+PiArICAg ICAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IHVuaGFuZGxlZCB3cml0ZSByJWQgb2Zm c2V0ICUjMDh4XG4iLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhYnQucmVn LCB2cGwwMTFfcmVnKTsKPj4gKyAgICAgICAgcmV0dXJuIDA7Cj4+ICsgICAgfQo+PiArCj4+ICsg ICAgcmV0dXJuIDE7Cj4+ICsKPj4gK3dyaXRlX2lnbm9yZToKPj4gKyAgICBpZiAoICFWQUxJRF9C V19TSVpFKGRhYnQuc2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKyAgICByZXR1cm4gMTsKPj4g Kwo+PiArd29yZF93cml0ZV9pZ25vcmU6Cj4+ICsgICAgaWYgKCAhVkFMSURfV19TSVpFKGRhYnQu c2l6ZSkgKSBnb3RvIGJhZF93aWR0aDsKPj4gKyAgICByZXR1cm4gMTsKPj4gKwo+PiArYmFkX3dp ZHRoOgo+PiArICAgIGdwcmludGsoWEVOTE9HX0VSUiwgInZwbDAxMTogYmFkIHdyaXRlIHdpZHRo ICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGRhYnQu c2l6ZSwgZGFidC5yZWcsIHZwbDAxMV9yZWcpOwo+PiArICAgIGRvbWFpbl9jcmFzaF9zeW5jaHJv bm91cygpOwo+PiArICAgIHJldHVybiAwOwo+PiArCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbW1pb19oYW5kbGVyX29wcyB2cGwwMTFfbW1pb19oYW5kbGVyID0gewo+PiArICAg IC5yZWFkID0gdnBsMDExX21taW9fcmVhZCwKPj4gKyAgICAud3JpdGUgPSB2cGwwMTFfbW1pb193 cml0ZSwKPj4gK307Cj4+ICsKPj4gK2ludCB2cGwwMTFfbWFwX2d1ZXN0X3BhZ2Uoc3RydWN0IGRv bWFpbiAqZCkKPj4gK3sKPj4gKyAgICBzdHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZkLT5hcmNo LnZwbDAxMTsKPj4gKwo+PiArICAgIC8qIE1hcCB0aGUgZ3Vlc3QgUEZOIHRvIFhlbiBhZGRyZXNz IHNwYWNlLiAqLwo+PiArICAgIHJldHVybiBwcmVwYXJlX3JpbmdfZm9yX2hlbHBlcihkLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLmh2bV9kb21haW4ucGFy YW1zW0hWTV9QQVJBTV9WQ09OU09MRV9QRk5dLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdnBsMDExLT5yaW5nX3BhZ2UsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ2cGwwMTEtPnJpbmdfYnVmKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgdnBsMDExX2RhdGFfYXZhaWwoc3RydWN0IGRvbWFpbiAqZCkKPj4gK3sKPj4gKyAgICB1bnNp Z25lZCBsb25nIGZsYWdzOwo+PiArICAgIHN0cnVjdCB2cGwwMTFfcyAqdnBsMDExID0gJmQtPmFy Y2gudnBsMDExOwo+PiArICAgIHN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50Zj0oc3RydWN0 IHhlbmNvbnNfaW50ZXJmYWNlICopdnBsMDExLT5yaW5nX2J1ZjsKPj4gKwo+PiArICAgIFZQTDAx MV9MT0NLKGQsIGZsYWdzKTsKPj4gKwo+PiArICAgIC8qIFVwZGF0ZSB0aGUgdWFydCByeCBzdGF0 ZSBpZiB0aGUgYnVmZmVyIGlzIG5vdCBlbXB0eS4gKi8KPj4gKyAgICBpZiAoICFWUEwwMTFfSU5f UklOR19FTVBUWShpbnRmKSApCj4+ICsgICAgewo+PiArICAgICAgICB2cGwwMTEtPnVhcnRmciAm PSB+KFJYRkUpOwo+PiArICAgICAgICBpZiAoIFZQTDAxMV9JTl9SSU5HX0ZVTEwoaW50ZikgKQo+ PiArICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIgfD0gKFJYRkYpOwo+PiArICAgICAgICB2cGww MTEtPnVhcnRyaXMgfD0gKFJYSSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyogVXBkYXRlIHRo ZSB1YXJ0IHR4IHN0YXRlIGlmIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwuICovCj4+ICsgICAgaWYg KCAhVlBMMDExX09VVF9SSU5HX0ZVTEwoaW50ZikgKQo+PiArICAgIHsKPj4gKyAgICAgICAgdnBs MDExLT51YXJ0ZnIgJj0gfihUWEZGKTsKPj4gKyAgICAgICAgdnBsMDExLT51YXJ0cmlzIHw9IChU WEkpOwo+PiArICAgICAgICBpZiAoIFZQTDAxMV9PVVRfUklOR19FTVBUWShpbnRmKSApCj4+ICsg ICAgICAgIHsKPj4gKyAgICAgICAgICAgIHZwbDAxMS0+dWFydGZyICY9IH4oQlVTWSk7Cj4+ICsg ICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSAoVFhGRSk7Cj4KPiBJdCBpcyBub3QgYSBnb29k IGlkZWEgdG8gY2hlY2sgdGhlIGludGYgdmFsdWVzIHR3aWNlOiB4ZW5jb25zb2xlZCBtaWdodAo+ IGJlIG1vZGlmeWluZyB0aGVtLCBzbyB3ZSBjYW4gZ2V0IGludG8gdGhlIHNpdHVhdGlvbiB3aGVy ZSBpbnRmLT5vdXQqCj4gY2hhbmdlIGluIGJldHdlZW4gdGhlIHR3byBjaGVja3MuIFBsZWFzZSBy ZWFkIG91dF9jb25zIGFuZCBvdXRfcHJvZCBvbmx5Cj4gb25jZSBpbiB0aGlzIGZ1bmN0aW9uLgoK U2luY2UgdGhpcyBjb2RlIGlzIHVuZGVyIExPQ0ssIHRoZSBJTiBhbmQgT1VUIHJpbmcgYnVmZmVy cyB3aWxsIG5vdCBiZQp1cGRhdGVkIGJ5IHRoZSBndWVzdC4gU3BlY2lmaWNhbGx5LCB0aGUgZm9s bG93aW5nIHRyYW5zaXRpb25zIGFyZQpydWxlZCBvdXQ6CgpJTiByaW5nIGJ1ZmZlcgpub24tZW1w dHkgLS0tLT4gZW1wdHkgKGFzIHRoZSByZWFkZXIgaXMgYmxvY2tlZCBkdWUgdG8gbG9jaykKCk9V VCByaW5nIGJ1ZmZlcgpub3QtZnVsbCAtLS0tPiBmdWxsIChhcyB3cml0ZXIgaXMgYmxvY2tlZCBk dWUgdG8gbG9jaykuCgpTbyB0aGUgY29kZSBpbnNpZGUgdGhlIElGIGJsb2NrIHJlbWFpbnMgdmFs aWQgZXZlbiBpZiB0aGUgYnVmZmVyIHN0YXRlIGNoYW5nZXMuCkZvciB0aGUgSU4gcmluZyBidWZm ZXIgaXQgY2FuIGdvIGZyb20gbm9uLWVtcHR5IHRvIGZ1bGwuIFNpbWlsYXJseSBmb3IKT1VUIHJp bmcgYnVmZmVyIGl0IGNhbiBnbyBmcm9tIEZVTEwgdG8gZW1wdHkuCgpBbHNvIGNoZWNraW5nIHRo ZSBsYXRlc3QgYnVmZmVyIGluZGV4IChpbnN0ZWFkIG9mIGNoZWNraW5nIGJ1ZmZlcgppbmRleCBy ZWFkIGFzIGxvY2FsIHZhcmlhYmxlcykgYWxsb3dzIHRvIHVwZGF0ZSB0aGUgcGwwMTEgc3RhdGUg YXQgdGhlCmVhcmxpZXN0Lgo+Cj4KPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiArICAg IFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOwo+PiArCj4+ICsgICAgdmdpY19pbmplY3RfdnBsMDEx X3NwaShkKTsKPj4gKwo+PiArICAgIGlmICggIVZQTDAxMV9PVVRfUklOR19FTVBUWShpbnRmKSAp Cj4+ICsgICAgewo+PiArICAgICAgICBBU1NFUlQoIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNb SFZNX1BBUkFNX1ZDT05TT0xFX0VWVENITl0gIT0gMCApOwo+PiArICAgICAgICBub3RpZnlfdmlh X3hlbl9ldmVudF9jaGFubmVsKGQsIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNbSFZNX1BBUkFN X1ZDT05TT0xFX0VWVENITl0pOwo+Cj4gV2h5IGFyZSB3ZSBzZW5kaW5nIG5vdGlmaWNhdGlvbnMg YXQgdGhpcyBwb2ludD8gVGhlIG91dCBidWZmZXIgaGFzbid0Cj4gY2hhbmdlZCBzaW5jZSB4ZW5j b25zb2xlZCBzZW50IHRoZSBldnRjaG4gdG8gWGVuLCBzbyB4ZW5jb25zb2xlZCBhbHJlYWR5Cj4g a25vd3MgYXQgdGhpcyBwb2ludCB0aGF0IHRoZSBvdXQgcmluZyBpcyBub3QgZW1wdHkuCgpUaGUg T1VUIGJ1ZmZlciBtYXkgYmUgZW1wdHkgd2hlbiB4ZW5jb25zb2xlZCBzZW5kcyB0aGUgZXZlbnQu IEJ5IHRoZQp0aW1lIHRoZSBldmVudCBpcyBoYW5kbGVkLCB0aGUgZ3Vlc3QgbWF5IHdyaXRlIG1v cmUgZGF0YSB0byBPVVQKYnVmZmVyLiBUaGlzIGNvbmRpdGlvbiBtYWtlcyBzdXJlIHRoYXQgaWYg dGhlIE9VVCByaW5nIGJ1ZmZlciBpcyBub3QKZW1wdHkgdGhlbiBpdCBzZW5kcyBhbiBldmVudCB0 byB4ZW5jb25zb2xlZC4KPgo+Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICsKPj4gK3N0YXRpYyB2 b2lkIHZwbDAxMV9ub3RpZmljYXRpb24oc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGludCBwb3J0 KQo+PiArewo+PiArICAgIHZwbDAxMV9kYXRhX2F2YWlsKHYtPmRvbWFpbik7Cj4+ICt9Cj4+ICsK Pj4gK2ludCBkb21haW5fdnBsMDExX2luaXQoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHhlbl9h cmNoX2RvbWFpbmNvbmZpZyAqY29uZmlnKQo+PiArewo+PiArICAgIGludCByYzsKPj4gKyAgICBz dHJ1Y3QgdnBsMDExX3MgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKPj4gKwo+PiArICAgIHJj ID0gYWxsb2NfdW5ib3VuZF94ZW5fZXZlbnRfY2hhbm5lbChkLCAwLCBjb25maWctPmNvbnNvbGVf ZG9taWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwbDAx MV9ub3RpZmljYXRpb24pOwo+PiArICAgIGlmIChyYyA8IDApCj4+ICsgICAgewo+PiArICAgICAg ICByZXR1cm4gcmM7Cj4+ICsgICAgfQo+PiArICAgIGQtPmFyY2guaHZtX2RvbWFpbi5wYXJhbXNb SFZNX1BBUkFNX1ZDT05TT0xFX0VWVENITl0gPSByYzsKPj4gKyAgICByYyA9IHZnaWNfcmVzZXJ2 ZV92aXJxKGQsIEdVRVNUX1ZQTDAxMV9TUEkpOwo+PiArICAgIGlmICggIXJjICkKPj4gKyAgICAg ICAgcmV0dXJuIHJjOwo+Cj4gV2Ugc2hvdWxkIGZyZWUgdGhlIGFsbG9jYXRlZCBldnRjaG4gaW4g Y2FzZSBvZiBlcnJvciBoZXJlCkkgd2lsbCBmcmVlIHRoZSBldmVudCBjaGFubmVsLgoKUmVnYXJk cywKQmh1cGluZGVyCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBz Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK