From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH 1/2] drm/i915/overlay: Allocate physical registers from stolen Date: Tue, 11 Sep 2018 16:07:18 +0300 Message-ID: <20180911130718.GA5565@intel.com> References: <20180906190144.1272-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id F221E6E0EE for ; Tue, 11 Sep 2018 13:07:21 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20180906190144.1272-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBTZXAgMDYsIDIwMTggYXQgMDg6MDE6NDNQTSArMDEwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IEdpdmVuIHRoYXQgd2UgYXJlIG5vdyByZWFzb25hYmx5IGNvbmZpZGVudCBpbiBvdXIg YWJpbGl0eSB0byBkZXRlY3QgYW5kCj4gcmVzZXJ2ZSB0aGUgc3RvbGVuIG1lbW9yeSAocGh5c2lj YWwgbWVtb3J5IHJlc2VydmVkIGZvciBncmFwaGljcyBieSB0aGUKPiBCSU9TKSBmb3Igb3Vyc2Vs dmVzIG9uIG1vc3QgbWFjaGluZXMsIHdlIGNhbiBwdXQgaXQgdG8gdXNlLiBJbiB0aGlzCj4gY2Fz ZSwgd2UgbmVlZCBhIHBhZ2UgdG8gaG9sZCB0aGUgb3ZlcmxheSByZWdpc3RlcnMuCj4gCj4gT24g YW4gaTkxNWcgcnVubmluZyBNeXRoVHYsIEggQnV1cyBub3RpY2VkIHRoYXQKPiAKPiAJY29tbWl0 IDZhMmM0MjMyZWNlMTQ1ZDhiNWE4Zjk1Zjc2N2JkNmQwZDJkMmYyYmIKPiAJQXV0aG9yOiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAJRGF0ZTogICBUdWUgTm92IDQg MDQ6NTE6NDAgMjAxNCAtMDgwMAo+IAlkcm0vaTkxNTogTWFrZSB0aGUgcGh5c2ljYWwgb2JqZWN0 IGNvaGVyZW50IHdpdGggR1RUCj4gCj4gaW50cm9kdWNlZCBzdHV0dGVyaW5nIGludG8gaGlzIHZp ZGVvIHBsYXliYWNrLiBBZnRlciBkaXNjYXJkaW5nIHRoZQo+IGxpa2VseSBzdXNwZWN0IG9mIGl0 IGJlaW5nIHRoZSBwaHlzaWNhbCBjdXJzb3IgdXBkYXRlcywgd2Ugd2VyZSBsZWZ0Cj4gd2l0aCB0 aGUgdXNlIG9mIHRoZSBwaHlzIG9iamVjdCBmb3IgdGhlIG92ZXJsYXkuIEFuZCBsbywgaWYgd2UK PiBjb21wbGV0ZWx5IGF2b2lkIHVzaW5nIHRoZSBwaHlzIG9iamVjdCAoYWxsb2NhdGVkIGp1c3Qg b25jZSBvbiBtb2R1bGUKPiBsb2FkISkgYnkgc3dpdGNoaW5nIHRvIHN0b2xlbiBtZW1vcnksIHRo ZSBzdHV0dGVyaW5nIGdvZXMgYXdheS4KPiAKPiBGb3IgbGFjayBvZiBhIGJldHRlciBleHBsYW5h dGlvbiwgY2xhaW0gdmljdG9yeSBhbmQga2lsbCB0d28gYmlyZHMgd2l0aAo+IG9uZSBzdG9uZS4K CkEgYnV0IHBlY3VsaWFyLiBCdXQgbG9va3MgZmluZSB0byBtZS4gQW5kIHdlIHNob3VsZCBoYXZl IHNvbWUKc3RvbGVuIHByZXR0eSBtdWNoIGV2ZXJ5d2hlcmUuIEkgZ3Vlc3MgbXkgb25seSBjb25j ZXJuIGlzIHBlcm1hbmVudGx5CmZyYWdtZW50aW5nIHN0b2xlbiB3aXRoIHRoaXMuIE9yIGRvZXMg dGhlIGFsbG9jYXRvciBncmFiIGl0IGZyb20gdGhlCnZlcnkgZW5kPwoKUmV2aWV3ZWQtYnk6IFZp bGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cgo+IAo+IEJ1Z3pp bGxhOiBodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2MDAK PiBGaXhlczogNmEyYzQyMzJlY2UxICgiZHJtL2k5MTU6IE1ha2UgdGhlIHBoeXNpY2FsIG9iamVj dCBjb2hlcmVudCB3aXRoIEdUVCIpCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFs YUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292 ZXJsYXkuYyB8IDIyOCArKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5n ZWQsIDc1IGluc2VydGlvbnMoKyksIDE1MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfb3ZlcmxheS5jCj4gaW5kZXggYzJmMTBkODk5MzI5Li40NDNkZmFlZmQ3YTYgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCj4gQEAgLTE4MSw4ICsxODEsOSBA QCBzdHJ1Y3QgaW50ZWxfb3ZlcmxheSB7Cj4gIAl1MzIgYnJpZ2h0bmVzcywgY29udHJhc3QsIHNh dHVyYXRpb247Cj4gIAl1MzIgb2xkX3hzY2FsZSwgb2xkX3lzY2FsZTsKPiAgCS8qIHJlZ2lzdGVy IGFjY2VzcyAqLwo+IC0JdTMyIGZsaXBfYWRkcjsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpyZWdfYm87Cj4gKwlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVnczsK PiArCXUzMiBmbGlwX2FkZHI7Cj4gIAkvKiBmbGlwIGhhbmRsaW5nICovCj4gIAlzdHJ1Y3QgaTkx NV9nZW1fYWN0aXZlIGxhc3RfZmxpcDsKPiAgfTsKPiBAQCAtMjEwLDI5ICsyMTEsNiBAQCBzdGF0 aWMgdm9pZCBpODMwX292ZXJsYXlfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAgCQkJCSAgUENJX0RFVkZOKDAsIDApLCBJODMwX0NMT0NLX0dBVEUsIHZh bCk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAq Cj4gLWludGVsX292ZXJsYXlfbWFwX3JlZ3Moc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkp Cj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG92ZXJsYXktPmk5 MTU7Cj4gLQlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVnczsKPiAtCj4gLQlp ZiAoT1ZFUkxBWV9ORUVEU19QSFlTSUNBTChkZXZfcHJpdikpCj4gLQkJcmVncyA9IChzdHJ1Y3Qg b3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqKW92ZXJsYXktPnJlZ19iby0+cGh5c19oYW5kbGUt PnZhZGRyOwo+IC0JZWxzZQo+IC0JCXJlZ3MgPSBpb19tYXBwaW5nX21hcF93YygmZGV2X3ByaXYt PmdndHQuaW9tYXAsCj4gLQkJCQkJIG92ZXJsYXktPmZsaXBfYWRkciwKPiAtCQkJCQkgUEFHRV9T SVpFKTsKPiAtCj4gLQlyZXR1cm4gcmVnczsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaW50ZWxf b3ZlcmxheV91bm1hcF9yZWdzKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LAo+IC0JCQkJ ICAgICBzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVncykKPiAtewo+IC0JaWYg KCFPVkVSTEFZX05FRURTX1BIWVNJQ0FMKG92ZXJsYXktPmk5MTUpKQo+IC0JCWlvX21hcHBpbmdf dW5tYXAocmVncyk7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGludGVsX292ZXJsYXlfc3VibWl0 X3JlcXVlc3Qoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXksCj4gIAkJCQkJIHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLAo+ICAJCQkJCSBpOTE1X2dlbV9yZXRpcmVfZm4gcmV0aXJlKQo+IEBA IC03ODQsMTMgKzc2MiwxMyBAQCBzdGF0aWMgaW50IGludGVsX292ZXJsYXlfZG9fcHV0X2ltYWdl KHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LAo+ICAJCQkJICAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm5ld19ibywKPiAgCQkJCSAgICAgIHN0cnVjdCBwdXRfaW1hZ2VfcGFy YW1zICpwYXJhbXMpCj4gIHsKPiAtCWludCByZXQsIHRtcF93aWR0aDsKPiAtCXN0cnVjdCBvdmVy bGF5X3JlZ2lzdGVycyBfX2lvbWVtICpyZWdzOwo+IC0JYm9vbCBzY2FsZV9jaGFuZ2VkID0gZmFs c2U7Cj4gKwlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVncyA9IG92ZXJsYXkt PnJlZ3M7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBvdmVybGF5LT5p OTE1Owo+ICAJdTMyIHN3aWR0aCwgc3dpZHRoc3csIHNoZWlnaHQsIG9zdHJpZGU7Cj4gIAllbnVt IHBpcGUgcGlwZSA9IG92ZXJsYXktPmNydGMtPnBpcGU7Cj4gKwlib29sIHNjYWxlX2NoYW5nZWQg PSBmYWxzZTsKPiAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJaW50IHJldCwgdG1wX3dpZHRo Owo+ICAKPiAgCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4 KTsKPiAgCVdBUk5fT04oIWRybV9tb2Rlc2V0X2lzX2xvY2tlZCgmZGV2X3ByaXYtPmRybS5tb2Rl X2NvbmZpZy5jb25uZWN0aW9uX211dGV4KSk7Cj4gQEAgLTgxNSwzMCArNzkzLDE5IEBAIHN0YXRp YyBpbnQgaW50ZWxfb3ZlcmxheV9kb19wdXRfaW1hZ2Uoc3RydWN0IGludGVsX292ZXJsYXkgKm92 ZXJsYXksCj4gIAo+ICAJaWYgKCFvdmVybGF5LT5hY3RpdmUpIHsKPiAgCQl1MzIgb2NvbmZpZzsK PiAtCQlyZWdzID0gaW50ZWxfb3ZlcmxheV9tYXBfcmVncyhvdmVybGF5KTsKPiAtCQlpZiAoIXJl Z3MpIHsKPiAtCQkJcmV0ID0gLUVOT01FTTsKPiAtCQkJZ290byBvdXRfdW5waW47Cj4gLQkJfQo+ ICsKPiAgCQlvY29uZmlnID0gT0NPTkZfQ0NfT1VUXzhCSVQ7Cj4gIAkJaWYgKElTX0dFTjQoZGV2 X3ByaXYpKQo+ICAJCQlvY29uZmlnIHw9IE9DT05GX0NTQ19NT0RFX0JUNzA5Owo+ICAJCW9jb25m aWcgfD0gcGlwZSA9PSAwID8KPiAgCQkJT0NPTkZfUElQRV9BIDogT0NPTkZfUElQRV9COwo+ICAJ CWlvd3JpdGUzMihvY29uZmlnLCAmcmVncy0+T0NPTkZJRyk7Cj4gLQkJaW50ZWxfb3ZlcmxheV91 bm1hcF9yZWdzKG92ZXJsYXksIHJlZ3MpOwo+ICAKPiAgCQlyZXQgPSBpbnRlbF9vdmVybGF5X29u KG92ZXJsYXkpOwo+ICAJCWlmIChyZXQgIT0gMCkKPiAgCQkJZ290byBvdXRfdW5waW47Cj4gIAl9 Cj4gIAo+IC0JcmVncyA9IGludGVsX292ZXJsYXlfbWFwX3JlZ3Mob3ZlcmxheSk7Cj4gLQlpZiAo IXJlZ3MpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gb3V0X3VucGluOwo+IC0JfQo+ IC0KPiAgCWlvd3JpdGUzMigocGFyYW1zLT5kc3RfeSA8PCAxNikgfCBwYXJhbXMtPmRzdF94LCAm cmVncy0+RFdJTlBPUyk7Cj4gIAlpb3dyaXRlMzIoKHBhcmFtcy0+ZHN0X2ggPDwgMTYpIHwgcGFy YW1zLT5kc3RfdywgJnJlZ3MtPkRXSU5TWik7Cj4gIAo+IEBAIC04ODIsOCArODQ5LDYgQEAgc3Rh dGljIGludCBpbnRlbF9vdmVybGF5X2RvX3B1dF9pbWFnZShzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAq b3ZlcmxheSwKPiAgCj4gIAlpb3dyaXRlMzIob3ZlcmxheV9jbWRfcmVnKHBhcmFtcyksICZyZWdz LT5PQ01EKTsKPiAgCj4gLQlpbnRlbF9vdmVybGF5X3VubWFwX3JlZ3Mob3ZlcmxheSwgcmVncyk7 Cj4gLQo+ICAJcmV0ID0gaW50ZWxfb3ZlcmxheV9jb250aW51ZShvdmVybGF5LCB2bWEsIHNjYWxl X2NoYW5nZWQpOwo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIG91dF91bnBpbjsKPiBAQCAtOTAxLDcg Kzg2Niw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfb3ZlcmxheV9kb19wdXRfaW1hZ2Uoc3RydWN0IGlu dGVsX292ZXJsYXkgKm92ZXJsYXksCj4gIGludCBpbnRlbF9vdmVybGF5X3N3aXRjaF9vZmYoc3Ry dWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkpCj4gIHsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IG92ZXJsYXktPmk5MTU7Cj4gLQlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3Rl cnMgX19pb21lbSAqcmVnczsKPiAgCWludCByZXQ7Cj4gIAo+ICAJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+IEBAIC05MTgsOSArODgyLDcgQEAgaW50 IGludGVsX292ZXJsYXlfc3dpdGNoX29mZihzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheSkK PiAgCWlmIChyZXQgIT0gMCkKPiAgCQlyZXR1cm4gcmV0Owo+ICAKPiAtCXJlZ3MgPSBpbnRlbF9v dmVybGF5X21hcF9yZWdzKG92ZXJsYXkpOwo+IC0JaW93cml0ZTMyKDAsICZyZWdzLT5PQ01EKTsK PiAtCWludGVsX292ZXJsYXlfdW5tYXBfcmVncyhvdmVybGF5LCByZWdzKTsKPiArCWlvd3JpdGUz MigwLCAmb3ZlcmxheS0+cmVncy0+T0NNRCk7Cj4gIAo+ICAJcmV0dXJuIGludGVsX292ZXJsYXlf b2ZmKG92ZXJsYXkpOwo+ICB9Cj4gQEAgLTEzMDUsNyArMTI2Nyw2IEBAIGludCBpbnRlbF9vdmVy bGF5X2F0dHJzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gIAlz dHJ1Y3QgZHJtX2ludGVsX292ZXJsYXlfYXR0cnMgKmF0dHJzID0gZGF0YTsKPiAgCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiAgCXN0cnVjdCBpbnRl bF9vdmVybGF5ICpvdmVybGF5Owo+IC0Jc3RydWN0IG92ZXJsYXlfcmVnaXN0ZXJzIF9faW9tZW0g KnJlZ3M7Cj4gIAlpbnQgcmV0Owo+ICAKPiAgCW92ZXJsYXkgPSBkZXZfcHJpdi0+b3ZlcmxheTsK PiBAQCAtMTM0NSwxNSArMTMwNiw3IEBAIGludCBpbnRlbF9vdmVybGF5X2F0dHJzX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gIAkJb3ZlcmxheS0+Y29udHJhc3Qg ICA9IGF0dHJzLT5jb250cmFzdDsKPiAgCQlvdmVybGF5LT5zYXR1cmF0aW9uID0gYXR0cnMtPnNh dHVyYXRpb247Cj4gIAo+IC0JCXJlZ3MgPSBpbnRlbF9vdmVybGF5X21hcF9yZWdzKG92ZXJsYXkp Owo+IC0JCWlmICghcmVncykgewo+IC0JCQlyZXQgPSAtRU5PTUVNOwo+IC0JCQlnb3RvIG91dF91 bmxvY2s7Cj4gLQkJfQo+IC0KPiAtCQl1cGRhdGVfcmVnX2F0dHJzKG92ZXJsYXksIHJlZ3MpOwo+ IC0KPiAtCQlpbnRlbF9vdmVybGF5X3VubWFwX3JlZ3Mob3ZlcmxheSwgcmVncyk7Cj4gKwkJdXBk YXRlX3JlZ19hdHRycyhvdmVybGF5LCBvdmVybGF5LT5yZWdzKTsKPiAgCj4gIAkJaWYgKGF0dHJz LT5mbGFncyAmIEk5MTVfT1ZFUkxBWV9VUERBVEVfR0FNTUEpIHsKPiAgCQkJaWYgKElTX0dFTjIo ZGV2X3ByaXYpKQo+IEBAIC0xMzg2LDEyICsxMzM5LDQ3IEBAIGludCBpbnRlbF9vdmVybGF5X2F0 dHJzX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gIAlyZXR1cm4g cmV0Owo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoc3RydWN0IGludGVsX292 ZXJsYXkgKm92ZXJsYXksIGJvb2wgdXNlX3BoeXMpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiArCWludCBlcnI7Cj4g Kwo+ICsJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW4ob3ZlcmxheS0+aTkxNSwg UEFHRV9TSVpFKTsKPiArCWlmIChvYmogPT0gTlVMTCkKPiArCQlvYmogPSBpOTE1X2dlbV9vYmpl Y3RfY3JlYXRlX2ludGVybmFsKG92ZXJsYXktPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNf RVJSKG9iaikpCj4gKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiArCj4gKwl2bWEgPSBpOTE1X2dl bV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCAwLCBQSU5fTUFQUEFCTEUpOwo+ICsJaWYg KElTX0VSUih2bWEpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUih2bWEpOwo+ICsJCWdvdG8gZXJyX3B1 dF9ibzsKPiArCX0KPiArCj4gKwlpZiAodXNlX3BoeXMpCj4gKwkJb3ZlcmxheS0+ZmxpcF9hZGRy ID0gc2dfZG1hX2FkZHJlc3Mob2JqLT5tbS5wYWdlcy0+c2dsKTsKPiArCWVsc2UKPiArCQlvdmVy bGF5LT5mbGlwX2FkZHIgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSk7Cj4gKwlvdmVybGF5LT5yZWdz ID0gaTkxNV92bWFfcGluX2lvbWFwKHZtYSk7Cj4gKwlpOTE1X3ZtYV91bnBpbih2bWEpOwo+ICsK PiArCWlmIChJU19FUlIob3ZlcmxheS0+cmVncykpIHsKPiArCQllcnIgPSBQVFJfRVJSKG92ZXJs YXktPnJlZ3MpOwo+ICsJCWdvdG8gZXJyX3B1dF9ibzsKPiArCX0KPiArCj4gKwlvdmVybGF5LT5y ZWdfYm8gPSBvYmo7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9wdXRfYm86Cj4gKwlpOTE1X2dl bV9vYmplY3RfcHV0KG9iaik7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICB2b2lkIGludGVs X3NldHVwX292ZXJsYXkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICB7Cj4g IAlzdHJ1Y3QgaW50ZWxfb3ZlcmxheSAqb3ZlcmxheTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpyZWdfYm87Cj4gLQlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVn czsKPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1hID0gTlVMTDsKPiAgCWludCByZXQ7Cj4gIAo+ICAJ aWYgKCFIQVNfT1ZFUkxBWShkZXZfcHJpdikpCj4gQEAgLTE0MDEsNDYgKzEzODksOCBAQCB2b2lk IGludGVsX3NldHVwX292ZXJsYXkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ ICAJaWYgKCFvdmVybGF5KQo+ICAJCXJldHVybjsKPiAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJp di0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gLQlpZiAoV0FSTl9PTihkZXZfcHJpdi0+b3ZlcmxheSkp Cj4gLQkJZ290byBvdXRfZnJlZTsKPiAtCj4gIAlvdmVybGF5LT5pOTE1ID0gZGV2X3ByaXY7Cj4g IAo+IC0JcmVnX2JvID0gTlVMTDsKPiAtCWlmICghT1ZFUkxBWV9ORUVEU19QSFlTSUNBTChkZXZf cHJpdikpCj4gLQkJcmVnX2JvID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW4oZGV2X3By aXYsIFBBR0VfU0laRSk7Cj4gLQlpZiAocmVnX2JvID09IE5VTEwpCj4gLQkJcmVnX2JvID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgUEFHRV9TSVpFKTsKPiAtCWlmIChJU19FUlIo cmVnX2JvKSkKPiAtCQlnb3RvIG91dF9mcmVlOwo+IC0Jb3ZlcmxheS0+cmVnX2JvID0gcmVnX2Jv Owo+IC0KPiAtCWlmIChPVkVSTEFZX05FRURTX1BIWVNJQ0FMKGRldl9wcml2KSkgewo+IC0JCXJl dCA9IGk5MTVfZ2VtX29iamVjdF9hdHRhY2hfcGh5cyhyZWdfYm8sIFBBR0VfU0laRSk7Cj4gLQkJ aWYgKHJldCkgewo+IC0JCQlEUk1fRVJST1IoImZhaWxlZCB0byBhdHRhY2ggcGh5cyBvdmVybGF5 IHJlZ3NcbiIpOwo+IC0JCQlnb3RvIG91dF9mcmVlX2JvOwo+IC0JCX0KPiAtCQlvdmVybGF5LT5m bGlwX2FkZHIgPSByZWdfYm8tPnBoeXNfaGFuZGxlLT5idXNhZGRyOwo+IC0JfSBlbHNlIHsKPiAt CQl2bWEgPSBpOTE1X2dlbV9vYmplY3RfZ2d0dF9waW4ocmVnX2JvLCBOVUxMLAo+IC0JCQkJCSAg ICAgICAwLCBQQUdFX1NJWkUsIFBJTl9NQVBQQUJMRSk7Cj4gLQkJaWYgKElTX0VSUih2bWEpKSB7 Cj4gLQkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHBpbiBvdmVybGF5IHJlZ2lzdGVyIGJvXG4iKTsK PiAtCQkJcmV0ID0gUFRSX0VSUih2bWEpOwo+IC0JCQlnb3RvIG91dF9mcmVlX2JvOwo+IC0JCX0K PiAtCQlvdmVybGF5LT5mbGlwX2FkZHIgPSBpOTE1X2dndHRfb2Zmc2V0KHZtYSk7Cj4gLQo+IC0J CXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihyZWdfYm8sIHRydWUpOwo+ IC0JCWlmIChyZXQpIHsKPiAtCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbW92ZSBvdmVybGF5IHJl Z2lzdGVyIGJvIGludG8gdGhlIEdUVFxuIik7Cj4gLQkJCWdvdG8gb3V0X3VucGluX2JvOwo+IC0J CX0KPiAtCX0KPiAtCj4gLQkvKiBpbml0IGFsbCB2YWx1ZXMgKi8KPiAgCW92ZXJsYXktPmNvbG9y X2tleSA9IDB4MDEwMWZlOwo+ICAJb3ZlcmxheS0+Y29sb3Jfa2V5X2VuYWJsZWQgPSB0cnVlOwo+ ICAJb3ZlcmxheS0+YnJpZ2h0bmVzcyA9IC0xOTsKPiBAQCAtMTQ0OSw0NCArMTM5OSw1MSBAQCB2 b2lkIGludGVsX3NldHVwX292ZXJsYXkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAKPiAgCWluaXRfcmVxdWVzdF9hY3RpdmUoJm92ZXJsYXktPmxhc3RfZmxpcCwgTlVMTCk7 Cj4gIAo+IC0JcmVncyA9IGludGVsX292ZXJsYXlfbWFwX3JlZ3Mob3ZlcmxheSk7Cj4gLQlpZiAo IXJlZ3MpCj4gLQkJZ290byBvdXRfdW5waW5fYm87Cj4gKwltdXRleF9sb2NrKCZkZXZfcHJpdi0+ ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJcmV0ID0gZ2V0X3JlZ2lzdGVycyhvdmVybGF5LCBP VkVSTEFZX05FRURTX1BIWVNJQ0FMKGRldl9wcml2KSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g b3V0X2ZyZWU7Cj4gKwo+ICsJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWlu KG92ZXJsYXktPnJlZ19ibywgdHJ1ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X3JlZ19i bzsKPiAgCj4gLQltZW1zZXRfaW8ocmVncywgMCwgc2l6ZW9mKHN0cnVjdCBvdmVybGF5X3JlZ2lz dGVycykpOwo+IC0JdXBkYXRlX3BvbHlwaGFzZV9maWx0ZXIocmVncyk7Cj4gLQl1cGRhdGVfcmVn X2F0dHJzKG92ZXJsYXksIHJlZ3MpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gIAo+IC0JaW50ZWxfb3ZlcmxheV91bm1hcF9yZWdzKG92ZXJsYXksIHJl Z3MpOwo+ICsJbWVtc2V0X2lvKG92ZXJsYXktPnJlZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgb3Zlcmxh eV9yZWdpc3RlcnMpKTsKPiArCXVwZGF0ZV9wb2x5cGhhc2VfZmlsdGVyKG92ZXJsYXktPnJlZ3Mp Owo+ICsJdXBkYXRlX3JlZ19hdHRycyhvdmVybGF5LCBvdmVybGF5LT5yZWdzKTsKPiAgCj4gIAlk ZXZfcHJpdi0+b3ZlcmxheSA9IG92ZXJsYXk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5k cm0uc3RydWN0X211dGV4KTsKPiAtCURSTV9JTkZPKCJpbml0aWFsaXplZCBvdmVybGF5IHN1cHBv cnRcbiIpOwo+ICsJRFJNX0lORk8oIkluaXRpYWxpemVkIG92ZXJsYXkgc3VwcG9ydC5cbiIpOwo+ ICAJcmV0dXJuOwo+ICAKPiAtb3V0X3VucGluX2JvOgo+IC0JaWYgKHZtYSkKPiAtCQlpOTE1X3Zt YV91bnBpbih2bWEpOwo+IC1vdXRfZnJlZV9ibzoKPiAtCWk5MTVfZ2VtX29iamVjdF9wdXQocmVn X2JvKTsKPiArb3V0X3JlZ19ibzoKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQob3ZlcmxheS0+cmVn X2JvKTsKPiAgb3V0X2ZyZWU6Cj4gIAltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0 X211dGV4KTsKPiAgCWtmcmVlKG92ZXJsYXkpOwo+IC0JcmV0dXJuOwo+ICB9Cj4gIAo+ICB2b2lk IGludGVsX2NsZWFudXBfb3ZlcmxheShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Cj4gIHsKPiAtCWlmICghZGV2X3ByaXYtPm92ZXJsYXkpCj4gKwlzdHJ1Y3QgaW50ZWxfb3Zlcmxh eSAqb3ZlcmxheTsKPiArCj4gKwlvdmVybGF5ID0gZmV0Y2hfYW5kX3plcm8oJmRldl9wcml2LT5v dmVybGF5KTsKPiArCWlmICghb3ZlcmxheSkKPiAgCQlyZXR1cm47Cj4gIAo+IC0JLyogVGhlIGJv J3Mgc2hvdWxkIGJlIGZyZWUnZCBieSB0aGUgZ2VuZXJpYyBjb2RlIGFscmVhZHkuCj4gKwkvKgo+ ICsJICogVGhlIGJvJ3Mgc2hvdWxkIGJlIGZyZWUnZCBieSB0aGUgZ2VuZXJpYyBjb2RlIGFscmVh ZHkuCj4gIAkgKiBGdXJ0aGVybW9yZSBtb2Rlc2V0dGluZyB0ZWFyZG93biBoYXBwZW5zIGJlZm9y ZWhhbmQgc28gdGhlCj4gLQkgKiBoYXJkd2FyZSBzaG91bGQgYmUgb2ZmIGFscmVhZHkgKi8KPiAt CVdBUk5fT04oZGV2X3ByaXYtPm92ZXJsYXktPmFjdGl2ZSk7Cj4gKwkgKiBoYXJkd2FyZSBzaG91 bGQgYmUgb2ZmIGFscmVhZHkuCj4gKwkgKi8KPiArCVdBUk5fT04ob3ZlcmxheS0+YWN0aXZlKTsK PiArCj4gKwlpOTE1X2dlbV9vYmplY3RfcHV0KG92ZXJsYXktPnJlZ19ibyk7Cj4gIAo+IC0JaTkx NV9nZW1fb2JqZWN0X3B1dChkZXZfcHJpdi0+b3ZlcmxheS0+cmVnX2JvKTsKPiAtCWtmcmVlKGRl dl9wcml2LT5vdmVybGF5KTsKPiArCWtmcmVlKG92ZXJsYXkpOwo+ICB9Cj4gIAo+ICAjaWYgSVNf RU5BQkxFRChDT05GSUdfRFJNX0k5MTVfQ0FQVFVSRV9FUlJPUikKPiBAQCAtMTQ5OCwzNyArMTQ1 NSwxMSBAQCBzdHJ1Y3QgaW50ZWxfb3ZlcmxheV9lcnJvcl9zdGF0ZSB7Cj4gIAl1MzIgaXNyOwo+ ICB9Owo+ICAKPiAtc3RhdGljIHN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycyBfX2lvbWVtICoKPiAt aW50ZWxfb3ZlcmxheV9tYXBfcmVnc19hdG9taWMoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJs YXkpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IG92ZXJsYXkt Pmk5MTU7Cj4gLQlzdHJ1Y3Qgb3ZlcmxheV9yZWdpc3RlcnMgX19pb21lbSAqcmVnczsKPiAtCj4g LQlpZiAoT1ZFUkxBWV9ORUVEU19QSFlTSUNBTChkZXZfcHJpdikpCj4gLQkJLyogQ2FzdCB0byBt YWtlIHNwYXJzZSBoYXBweSwgYnV0IGl0J3Mgd2MgbWVtb3J5IGFueXdheSwgc28KPiAtCQkgKiBl cXVpdmFsZW50IHRvIHRoZSB3YyBpbyBtYXBwaW5nIG9uIFg4Ni4gKi8KPiAtCQlyZWdzID0gKHN0 cnVjdCBvdmVybGF5X3JlZ2lzdGVycyBfX2lvbWVtICopCj4gLQkJCW92ZXJsYXktPnJlZ19iby0+ cGh5c19oYW5kbGUtPnZhZGRyOwo+IC0JZWxzZQo+IC0JCXJlZ3MgPSBpb19tYXBwaW5nX21hcF9h dG9taWNfd2MoJmRldl9wcml2LT5nZ3R0LmlvbWFwLAo+IC0JCQkJCQlvdmVybGF5LT5mbGlwX2Fk ZHIpOwo+IC0KPiAtCXJldHVybiByZWdzOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBpbnRlbF9v dmVybGF5X3VubWFwX3JlZ3NfYXRvbWljKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5LAo+ IC0JCQkJCXN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycyBfX2lvbWVtICpyZWdzKQo+IC17Cj4gLQlp ZiAoIU9WRVJMQVlfTkVFRFNfUEhZU0lDQUwob3ZlcmxheS0+aTkxNSkpCj4gLQkJaW9fbWFwcGlu Z191bm1hcF9hdG9taWMocmVncyk7Cj4gLX0KPiAtCj4gIHN0cnVjdCBpbnRlbF9vdmVybGF5X2Vy cm9yX3N0YXRlICoKPiAgaW50ZWxfb3ZlcmxheV9jYXB0dXJlX2Vycm9yX3N0YXRlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgewo+ICAJc3RydWN0IGludGVsX292ZXJsYXkg Km92ZXJsYXkgPSBkZXZfcHJpdi0+b3ZlcmxheTsKPiAgCXN0cnVjdCBpbnRlbF9vdmVybGF5X2Vy cm9yX3N0YXRlICplcnJvcjsKPiAtCXN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycyBfX2lvbWVtICpy ZWdzOwo+ICAKPiAgCWlmICghb3ZlcmxheSB8fCAhb3ZlcmxheS0+YWN0aXZlKQo+ICAJCXJldHVy biBOVUxMOwo+IEBAIC0xNTQxLDE4ICsxNDcyLDkgQEAgaW50ZWxfb3ZlcmxheV9jYXB0dXJlX2Vy cm9yX3N0YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiAgCWVycm9yLT5p c3IgPSBJOTE1X1JFQUQoSVNSKTsKPiAgCWVycm9yLT5iYXNlID0gb3ZlcmxheS0+ZmxpcF9hZGRy Owo+ICAKPiAtCXJlZ3MgPSBpbnRlbF9vdmVybGF5X21hcF9yZWdzX2F0b21pYyhvdmVybGF5KTsK PiAtCWlmICghcmVncykKPiAtCQlnb3RvIGVycjsKPiAtCj4gLQltZW1jcHlfZnJvbWlvKCZlcnJv ci0+cmVncywgcmVncywgc2l6ZW9mKHN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycykpOwo+IC0JaW50 ZWxfb3ZlcmxheV91bm1hcF9yZWdzX2F0b21pYyhvdmVybGF5LCByZWdzKTsKPiArCW1lbWNweV9m cm9taW8oJmVycm9yLT5yZWdzLCBvdmVybGF5LT5yZWdzLCBzaXplb2YoZXJyb3ItPnJlZ3MpKTsK PiAgCj4gIAlyZXR1cm4gZXJyb3I7Cj4gLQo+IC1lcnI6Cj4gLQlrZnJlZShlcnJvcik7Cj4gLQly ZXR1cm4gTlVMTDsKPiAgfQo+ICAKPiAgdm9pZAo+IC0tIAo+IDIuMTkuMC5yYzIKCi0tIApWaWxs ZSBTeXJqw6Rsw6QKSW50ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==