From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paulo Zanoni Subject: Re: [PATCH 1/2] drm/i915: Treat stolen memory as DMA addresses Date: Fri, 27 Jan 2017 18:50:54 -0200 Message-ID: <1485550254.2429.56.camel@intel.com> References: <20170127165531.28135-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id A05736EE3B for ; Fri, 27 Jan 2017 20:50:58 +0000 (UTC) In-Reply-To: <20170127165531.28135-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 , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RW0gU2V4LCAyMDE3LTAxLTI3IMOgcyAxNjo1NSArMDAwMCwgQ2hyaXMgV2lsc29uIGVzY3JldmV1 Ogo+IFRoZSBjb252ZXJzaW9uIG9mIHN0b2xlbiB0byB1c2UgcGh5c19hZGRyX3QgKGZyb20gZXNz ZW50aWFsbHkgdTMyKQo+IHNwYXJrZWQgYW4gaW50ZXJlc3RpbmcgZGlzY3Vzc2lvbi4gV2UgdHJl YXQgc3RvbGVuIG1lbW9yeSBhcyBvbmx5Cj4gYWNjZXNzaWJsZSBmcm9tIHRoZSBHUFUgKHRoZSBE TUEgZGV2aWNlKSAtIGFuIGF0dGVtcHQgdG8gdXNlIGl0IGZyb20KPiB0aGUKPiBDUFUgd2lsbCBn ZW5lcmF0ZSBhIE1DRSBvbiBnZW42IG9ud2FyZHMsIGFsdGhvdWdoIGl0IGlzIGluIHRoZW9yeSBh Cj4gcGh5c2ljYWwgYWRkcmVzcyB0aGF0IGNhbiBiZSBkZXJlZmVyZW5jZWQgZnJvbSB0aGUgQ1BV IGFzCj4gZGVtb25zdHJhdGVkCj4gYnkgZWFybGllciBnZW5lcmF0aW9ucy4gQXMgc3VjaCwgdXNp bmcgcGh5c19hZGRyX3QgaGFzIHRoZSB3cm9uZwo+IGNvbm5vdGF0aW9ucyBhbmQgYXMgd2UgcGFz cyB0aGUgYWRkcmVzcyBpbnRvIHRoZSBETUEgZGV2aWNlIHZpYQo+IGRtYV9hZGRyX3QgKHRocm91 Z2ggdGhlIHNjYXR0ZXJsaXN0cyB1c2VkIHRvIHByb2dyYW0gdGhlIEdUVAo+IGVudHJpZXMpLAo+ IHdlIHNob3VsZCB0cmVhdCBpdCBhcyBkbWFfYWRkcl90IHRocm91Z2hvdXQuCgpJJ20gbm90IGEg c3BlY2lhbGlzdCBoZXJlLCBidXQgZnJvbSB3aGF0IEkgY291bGQgbGVhcm4vdW5kZXJzdGFuZCwg dGhpcwpzZWVtcyBnb29kLiBUaGUgcGF0Y2ggc2VlbXMgdG8gZG8gd2hhdCBpdCBzYXlzLCBzbzoK ClJldmlld2VkLWJ5OiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGludGVsLmNvbT4KCkJ1 dCBub3cgdGhhdCBJIGxvb2tlZCBzb21lIG1vcmUgYXQgdGhlIGNvZGUsIEkgc3RhcnRlZCB0byB0 aGluayBhYm91dAp0aGUgZm9sbG93aW5nOiBzaG91bGRuJ3Qgd2UgY29udmVydCBvdXIgInN0b2xl biBvZmZzZXQiIHZhcmlhYmxlcyBmcm9tCnUzMiB0byBkbWFfYWRkcl90IG9yIHNvbWUgb3RoZXIg YXBwcm9wcmlhdGUgdHlwZT8gSSBtZWFuLCBpZiB3ZSBldmVyCmdldCA2NCBiaXQgc3RvbGVuIHBv aW50ZXJzIHdlIG1heSBhbHNvIGdldCA2NCBiaXQgc3RvbGVuIG9mZnNldHMuLi4gVGhlCmk5MTVf Z2d0dCBzdHJ1Y3QgY29udGFpbnMgNCBvZiBzdWNoIHUzMiBwb2ludGVycy4KCkZvciBleGFtcGxl LCBpOTE1X2dndHQtPnN0b2xlbl9yZXNlcnZlZF9iYXNlIGlzIGFub3RoZXIgcG9pbnRlciB0bwpz dG9sZW4gbWVtb3J5LCBpdCdzIGdlbmVyYXRlZCBkaXJlY3RseSBmcm9tIG9uZSBvZiBvdXIgZHJt X2FkZHJfdAp2YXJpYWJsZXMuCgpPZiBjb3Vyc2UsIHRoaXMgY291bGQgYmUgYSBzZXBhcmF0ZSBw YXRjaC4KCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxz b24uY28udWs+Cj4gQ2M6IFBhdWxvIFphbm9uaSA8cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+IC0t LQo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoMKgwqB8wqDC oDIgKy0KPiDCoGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jIHwgMzYgKysr KysrKysrKysrKysrKystLS0tLS0tCj4gLS0tLS0tLS0tLQo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAx OSBpbnNlcnRpb25zKCspLCAxOSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+IGluZGV4IGQwYTQ4Y2NlYjE1Yi4uYTQzYmE3ODcyZDdjIDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oCj4gQEAgLTE0NjcsNyArMTQ2Nyw3IEBAIHN0cnVjdCBpOTE1X2dlbV9tbSB7 Cj4gwqAJc3RydWN0IHdvcmtfc3RydWN0IGZyZWVfd29yazsKPiDCoAo+IMKgCS8qKiBVc2FibGUg cG9ydGlvbiBvZiB0aGUgR1RUIGZvciBHRU0gKi8KPiAtCXBoeXNfYWRkcl90IHN0b2xlbl9iYXNl OyAvKiBsaW1pdGVkIHRvIGxvdyBtZW1vcnkgKDMyLWJpdCkKPiAqLwo+ICsJZG1hX2FkZHJfdCBz dG9sZW5fYmFzZTsgLyogbGltaXRlZCB0byBsb3cgbWVtb3J5ICgzMi1iaXQpICovCj4gwqAKPiDC oAkvKiogUFBHVFQgdXNlZCBmb3IgYWxpYXNpbmcgdGhlIFBQR1RUIHdpdGggdGhlIEdUVCAqLwo+ IMKgCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICphbGlhc2luZ19wcGd0dDsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMKPiBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gaW5kZXggNzIyNmU0YTIxMDk3Li40MmJiYzRiMDRm ZDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVuLmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IEBAIC03OSwx MiArNzksMTIgQEAgdm9pZCBpOTE1X2dlbV9zdG9sZW5fcmVtb3ZlX25vZGUoc3RydWN0Cj4gZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gwqAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+bW0u c3RvbGVuX2xvY2spOwo+IMKgfQo+IMKgCj4gLXN0YXRpYyBwaHlzX2FkZHJfdCBpOTE1X3N0b2xl bl90b19waHlzaWNhbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdikKPiArc3Rh dGljIGRtYV9hZGRyX3QgaTkxNV9zdG9sZW5fdG9fZG1hKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl Cj4gKmRldl9wcml2KQo+IMKgewo+IMKgCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2X3ByaXYt PmRybS5wZGV2Owo+IMKgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmZGV2X3ByaXYtPmdndHQ7 Cj4gwqAJc3RydWN0IHJlc291cmNlICpyOwo+IC0JcGh5c19hZGRyX3QgYmFzZTsKPiArCWRtYV9h ZGRyX3QgYmFzZTsKPiDCoAo+IMKgCS8qIEFsbW9zdCB1bml2ZXJzYWxseSB3ZSBjYW4gZmluZCB0 aGUgR3JhcGhpY3MgQmFzZSBvZgo+IFN0b2xlbiBNZW1vcnkKPiDCoAnCoCogYXQgcmVnaXN0ZXIg QlNNICgweDVjKSBpbiB0aGUgaWdmeCBjb25maWd1cmF0aW9uIHNwYWNlLgo+IE9uIGEgZmV3Cj4g QEAgLTE5Niw3ICsxOTYsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgaTkxNV9zdG9sZW5fdG9fcGh5 c2ljYWwoc3RydWN0Cj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gwqAJaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPD0gNCAmJgo+IMKgCcKgwqDCoMKgIUlTX0czMyhkZXZfcHJpdikgJiYg IUlTX1BJTkVWSUVXKGRldl9wcml2KSAmJgo+ICFJU19HNFgoZGV2X3ByaXYpKSB7Cj4gwqAJCXN0 cnVjdCB7Cj4gLQkJCXBoeXNfYWRkcl90IHN0YXJ0LCBlbmQ7Cj4gKwkJCWRtYV9hZGRyX3Qgc3Rh cnQsIGVuZDsKPiDCoAkJfSBzdG9sZW5bMl0gPSB7Cj4gwqAJCQl7IC5zdGFydCA9IGJhc2UsIC5l bmQgPSBiYXNlICsgZ2d0dC0KPiA+c3RvbGVuX3NpemUsIH0sCj4gwqAJCQl7IC5zdGFydCA9IGJh c2UsIC5lbmQgPSBiYXNlICsgZ2d0dC0KPiA+c3RvbGVuX3NpemUsIH0sCj4gQEAgLTIyOCwxMiAr MjI4LDEyIEBAIHN0YXRpYyBwaHlzX2FkZHJfdAo+IGk5MTVfc3RvbGVuX3RvX3BoeXNpY2FsKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiDCoAo+IMKgCQlpZiAoc3RvbGVuWzBd LnN0YXJ0ICE9IHN0b2xlblsxXS5zdGFydCB8fAo+IMKgCQnCoMKgwqDCoHN0b2xlblswXS5lbmQg IT0gc3RvbGVuWzFdLmVuZCkgewo+IC0JCQlwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICsgZ2d0dC0+ c3RvbGVuX3NpemUgLQo+IDE7Cj4gKwkJCWRtYV9hZGRyX3QgZW5kID0gYmFzZSArIGdndHQtPnN0 b2xlbl9zaXplIC0KPiAxOwo+IMKgCj4gwqAJCQlEUk1fREVCVUdfS01TKCJHVFQgd2l0aGluIHN0 b2xlbiBtZW1vcnkgYXQKPiAweCVsbHgtMHglbGx4XG4iLAo+IMKgCQkJCcKgwqDCoMKgwqDCoCh1 bnNpZ25lZCBsb25nCj4gbG9uZylnZ3R0X3N0YXJ0LAo+IMKgCQkJCcKgwqDCoMKgwqDCoCh1bnNp Z25lZCBsb25nIGxvbmcpZ2d0dF9lbmQgLQo+IDEpOwo+IC0JCQlEUk1fREVCVUdfS01TKCJTdG9s ZW4gbWVtb3J5IGFkanVzdGVkIHRvICVwYQo+IC0gJXBhXG4iLAo+ICsJCQlEUk1fREVCVUdfS01T KCJTdG9sZW4gbWVtb3J5IGFkanVzdGVkIHRvCj4gJXBhZCAtICVwYWRcbiIsCj4gwqAJCQkJwqDC oMKgwqDCoMKgJmJhc2UsICZlbmQpOwo+IMKgCQl9Cj4gwqAJfQo+IEBAIC0yNjMsOSArMjYzLDkg QEAgc3RhdGljIHBoeXNfYWRkcl90IGk5MTVfc3RvbGVuX3RvX3BoeXNpY2FsKHN0cnVjdAo+IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+IMKgCQnCoCogcmFuZ2UuIEFwcGFyZW50bHkgdGhp cyB3b3Jrcy4KPiDCoAkJwqAqLwo+IMKgCQlpZiAociA9PSBOVUxMICYmICFJU19HRU4zKGRldl9w cml2KSkgewo+IC0JCQlwaHlzX2FkZHJfdCBlbmQgPSBiYXNlICsgZ2d0dC0+c3RvbGVuX3NpemU7 Cj4gKwkJCWRtYV9hZGRyX3QgZW5kID0gYmFzZSArIGdndHQtPnN0b2xlbl9zaXplOwo+IMKgCj4g LQkJCURSTV9FUlJPUigiY29uZmxpY3QgZGV0ZWN0ZWQgd2l0aCBzdG9sZW4KPiByZWdpb246IFsl cGEgLSAlcGFdXG4iLAo+ICsJCQlEUk1fRVJST1IoImNvbmZsaWN0IGRldGVjdGVkIHdpdGggc3Rv bGVuCj4gcmVnaW9uOiBbJXBhZCAtICVwYWRdXG4iLAo+IMKgCQkJCcKgwqAmYmFzZSwgJmVuZCk7 Cj4gwqAJCQliYXNlID0gMDsKPiDCoAkJfQo+IEBAIC0yODUsMTMgKzI4NSwxMyBAQCB2b2lkIGk5 MTVfZ2VtX2NsZWFudXBfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlCj4gKmRldikKPiDCoH0KPiDC oAo+IMKgc3RhdGljIHZvaWQgZzR4X2dldF9zdG9sZW5fcmVzZXJ2ZWQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUKPiAqZGV2X3ByaXYsCj4gLQkJCQnCoMKgwqDCoHBoeXNfYWRkcl90ICpiYXNlLCB1 MzIgKnNpemUpCj4gKwkJCQnCoMKgwqDCoGRtYV9hZGRyX3QgKmJhc2UsIHUzMiAqc2l6ZSkKPiDC oHsKPiDCoAlzdHJ1Y3QgaTkxNV9nZ3R0ICpnZ3R0ID0gJmRldl9wcml2LT5nZ3R0Owo+IMKgCXVp bnQzMl90IHJlZ192YWwgPSBJOTE1X1JFQUQoSVNfR000NShkZXZfcHJpdikgPwo+IMKgCQkJCcKg wqDCoMKgwqBDVEdfU1RPTEVOX1JFU0VSVkVEIDoKPiDCoAkJCQnCoMKgwqDCoMKgRUxLX1NUT0xF Tl9SRVNFUlZFRCk7Cj4gLQlwaHlzX2FkZHJfdCBzdG9sZW5fdG9wID0gZGV2X3ByaXYtPm1tLnN0 b2xlbl9iYXNlICsgZ2d0dC0KPiA+c3RvbGVuX3NpemU7Cj4gKwlkbWFfYWRkcl90IHN0b2xlbl90 b3AgPSBkZXZfcHJpdi0+bW0uc3RvbGVuX2Jhc2UgKyBnZ3R0LQo+ID5zdG9sZW5fc2l6ZTsKPiDC oAo+IMKgCSpiYXNlID0gKHJlZ192YWwgJiBHNFhfU1RPTEVOX1JFU0VSVkVEX0FERFIyX01BU0sp IDw8IDE2Owo+IMKgCj4gQEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgdm9pZCBnNHhfZ2V0X3N0 b2xlbl9yZXNlcnZlZChzdHJ1Y3QKPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoH0K PiDCoAo+IMKgc3RhdGljIHZvaWQgZ2VuNl9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlCj4gKmRldl9wcml2LAo+IC0JCQkJwqDCoMKgwqDCoHBoeXNfYWRkcl90ICpi YXNlLCB1MzIgKnNpemUpCj4gKwkJCQnCoMKgwqDCoMKgZG1hX2FkZHJfdCAqYmFzZSwgdTMyICpz aXplKQo+IMKgewo+IMKgCXVpbnQzMl90IHJlZ192YWwgPSBJOTE1X1JFQUQoR0VONl9TVE9MRU5f UkVTRVJWRUQpOwo+IMKgCj4gQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgdm9pZCBnZW42X2dl dF9zdG9sZW5fcmVzZXJ2ZWQoc3RydWN0Cj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g wqB9Cj4gwqAKPiDCoHN0YXRpYyB2b2lkIGdlbjdfZ2V0X3N0b2xlbl9yZXNlcnZlZChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdiwKPiAtCQkJCcKgwqDCoMKgwqBwaHlzX2FkZHJf dCAqYmFzZSwgdTMyICpzaXplKQo+ICsJCQkJwqDCoMKgwqDCoGRtYV9hZGRyX3QgKmJhc2UsIHUz MiAqc2l6ZSkKPiDCoHsKPiDCoAl1aW50MzJfdCByZWdfdmFsID0gSTkxNV9SRUFEKEdFTjZfU1RP TEVOX1JFU0VSVkVEKTsKPiDCoAo+IEBAIC0zNTQsNyArMzU0LDcgQEAgc3RhdGljIHZvaWQgZ2Vu N19nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZCBjaHZfZ2V0X3N0b2xlbl9yZXNlcnZlZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdiwKPiAtCQkJCcKgwqDCoMKgcGh5c19hZGRy X3QgKmJhc2UsIHUzMiAqc2l6ZSkKPiArCQkJCcKgwqDCoMKgZG1hX2FkZHJfdCAqYmFzZSwgdTMy ICpzaXplKQo+IMKgewo+IMKgCXVpbnQzMl90IHJlZ192YWwgPSBJOTE1X1JFQUQoR0VONl9TVE9M RU5fUkVTRVJWRUQpOwo+IMKgCj4gQEAgLTM4MCwxMSArMzgwLDExIEBAIHN0YXRpYyB2b2lkIGNo dl9nZXRfc3RvbGVuX3Jlc2VydmVkKHN0cnVjdAo+IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAo+IMKgfQo+IMKgCj4gwqBzdGF0aWMgdm9pZCBiZHdfZ2V0X3N0b2xlbl9yZXNlcnZlZChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ICpkZXZfcHJpdiwKPiAtCQkJCcKgwqDCoMKgcGh5c19hZGRy X3QgKmJhc2UsIHUzMiAqc2l6ZSkKPiArCQkJCcKgwqDCoMKgZG1hX2FkZHJfdCAqYmFzZSwgdTMy ICpzaXplKQo+IMKgewo+IMKgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmZGV2X3ByaXYtPmdn dHQ7Cj4gwqAJdWludDMyX3QgcmVnX3ZhbCA9IEk5MTVfUkVBRChHRU42X1NUT0xFTl9SRVNFUlZF RCk7Cj4gLQlwaHlzX2FkZHJfdCBzdG9sZW5fdG9wOwo+ICsJZG1hX2FkZHJfdCBzdG9sZW5fdG9w Owo+IMKgCj4gwqAJc3RvbGVuX3RvcCA9IGRldl9wcml2LT5tbS5zdG9sZW5fYmFzZSArIGdndHQt PnN0b2xlbl9zaXplOwo+IMKgCj4gQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgdm9pZCBiZHdf Z2V0X3N0b2xlbl9yZXNlcnZlZChzdHJ1Y3QKPiBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK PiDCoGludCBpOTE1X2dlbV9pbml0X3N0b2xlbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCj4gwqB7Cj4gwqAJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0dCA9ICZkZXZfcHJpdi0+Z2d0 dDsKPiAtCXBoeXNfYWRkcl90IHJlc2VydmVkX2Jhc2UsIHN0b2xlbl90b3A7Cj4gKwlkbWFfYWRk cl90IHJlc2VydmVkX2Jhc2UsIHN0b2xlbl90b3A7Cj4gwqAJdTMyIHJlc2VydmVkX3RvdGFsLCBy ZXNlcnZlZF9zaXplOwo+IMKgCXUzMiBzdG9sZW5fdXNhYmxlX3N0YXJ0Owo+IMKgCj4gQEAgLTQy NCw3ICs0MjQsNyBAQCBpbnQgaTkxNV9nZW1faW5pdF9zdG9sZW4oc3RydWN0IGRybV9pOTE1X3By aXZhdGUKPiAqZGV2X3ByaXYpCj4gwqAJaWYgKGdndHQtPnN0b2xlbl9zaXplID09IDApCj4gwqAJ CXJldHVybiAwOwo+IMKgCj4gLQlkZXZfcHJpdi0+bW0uc3RvbGVuX2Jhc2UgPQo+IGk5MTVfc3Rv bGVuX3RvX3BoeXNpY2FsKGRldl9wcml2KTsKPiArCWRldl9wcml2LT5tbS5zdG9sZW5fYmFzZSA9 IGk5MTVfc3RvbGVuX3RvX2RtYShkZXZfcHJpdik7Cj4gwqAJaWYgKGRldl9wcml2LT5tbS5zdG9s ZW5fYmFzZSA9PSAwKQo+IMKgCQlyZXR1cm4gMDsKPiDCoAo+IEBAIC00NzMsOCArNDczLDggQEAg aW50IGk5MTVfZ2VtX2luaXRfc3RvbGVuKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlCj4gKmRldl9w cml2KQo+IMKgCj4gwqAJaWYgKHJlc2VydmVkX2Jhc2UgPCBkZXZfcHJpdi0+bW0uc3RvbGVuX2Jh c2UgfHwKPiDCoAnCoMKgwqDCoHJlc2VydmVkX2Jhc2UgKyByZXNlcnZlZF9zaXplID4gc3RvbGVu X3RvcCkgewo+IC0JCXBoeXNfYWRkcl90IHJlc2VydmVkX3RvcCA9IHJlc2VydmVkX2Jhc2UgKwo+ IHJlc2VydmVkX3NpemU7Cj4gLQkJRFJNX0RFQlVHX0tNUygiU3RvbGVuIHJlc2VydmVkIGFyZWEg WyVwYSAtICVwYV0KPiBvdXRzaWRlIHN0b2xlbiBtZW1vcnkgWyVwYSAtICVwYV1cbiIsCj4gKwkJ ZG1hX2FkZHJfdCByZXNlcnZlZF90b3AgPSByZXNlcnZlZF9iYXNlICsKPiByZXNlcnZlZF9zaXpl Owo+ICsJCURSTV9ERUJVR19LTVMoIlN0b2xlbiByZXNlcnZlZCBhcmVhIFslcGFkIC0gJXBhZF0K PiBvdXRzaWRlIHN0b2xlbiBtZW1vcnkgWyVwYWQgLSAlcGFkXVxuIiwKPiDCoAkJCcKgwqDCoMKg wqDCoCZyZXNlcnZlZF9iYXNlLCAmcmVzZXJ2ZWRfdG9wLAo+IMKgCQkJwqDCoMKgwqDCoMKgJmRl dl9wcml2LT5tbS5zdG9sZW5fYmFzZSwKPiAmc3RvbGVuX3RvcCk7Cj4gwqAJCXJldHVybiAwOwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK