From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 04/17] drm/i915: Unify aliasing ppgtt handling Date: Fri, 17 Apr 2015 19:21:11 +0300 Message-ID: <87h9se20aw.fsf@gaia.fi.intel.com> References: <1429025727-15380-1-git-send-email-daniel.vetter@ffwll.ch> <1429025727-15380-5-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 9B6436E42A for ; Fri, 17 Apr 2015 09:22:12 -0700 (PDT) In-Reply-To: <1429025727-15380-5-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel Graphics Development Cc: Daniel Vetter , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4gd3JpdGVzOgoKPiBXaXRoIHRo ZSBkeW5hbWljIHBhZ2V0YWJsZSBhbGxvYyBjb2RlIGFsaWFzaW5nIHBwZ3R0IHNwZWNpYWwtY2Fz ZXMKPiB3aGVyZSBhZ2FpbiBtaXhlZCBpbiBhbGwgb3ZlciB0aGUgcGxhY2Ugd2l0aCB0aGUgbG93 LWxldmVsIGluaXQgY29kZS4KPgo+IEV4dHJhY3QgdGhlIHZhIHByZWFsbG9jYXRpb24gYW5kIGNs ZWFyaW5nIGFnYWluIGludG8gdGhlIGNvbW1vbiBjb2RlCj4gd2hlcmUgYWxpYXNpbmcgcHBndHQg Z2V0cyBzZXQgdXAuCj4KPiBOb3RlIHRoYXQgd2l0aCB0aGlzIHdlIGRvbid0IHNldCB0aGUgc2l6 ZSBvZiB0aGUgYWxpYXNpbmcgcHBndHQgdG8gdGhlCj4gc2l6ZSBvZiB0aGUgcGFyZW50IGdndHQg YWRkcmVzcyBzcGFjZS4gV2hpY2ggaXNuJ3QgcmVxdWlyZWQgYXQgYWxsCj4gc2luY2UgZXhjZXB0 IGZvciB0aGUgcHBndHQgc2V0dXAvY2xlYW51cCBjb2RlIG5vIG9uZSBldmVyIGxvb2tzIGF0Cj4g dGhpcy4KPgo+IFNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50 ZWwuY29tPgoKUmV2aWV3ZWQtYnk6IE1pa2EgS3VvcHBhbGEgPG1pa2Eua3VvcHBhbGFAaW50ZWwu Y29tPgoKPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgfCAxMzQg KysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAy NCBpbnNlcnRpb25zKCspLCAxMTAgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYwo+IGluZGV4IGFiYjExZjEzOWQyNS4uNzU3ODdmMWQyNzUxIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBAQCAtMzg3LDUwICszODcsNiBAQCBmYWlsX2Jp dG1hcDoKPiAgCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gIH0KPiAgCj4gLS8qKgo+IC0gKiBhbGxv Y19wdF9yYW5nZSgpIC0gQWxsb2NhdGUgYSBtdWx0aXBsZSBwYWdlIHRhYmxlcwo+IC0gKiBAcGQ6 CQlUaGUgcGFnZSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBoYXZlIGF0IGxlYXN0IEBjb3VudCBlbnRy aWVzCj4gLSAqCQlhdmFpbGFibGUgdG8gcG9pbnQgdG8gdGhlIGFsbG9jYXRlZCBwYWdlIHRhYmxl cy4KPiAtICogQHBkZToJRmlyc3QgcGFnZSBkaXJlY3RvcnkgZW50cnkgZm9yIHdoaWNoIHdlIGFy ZSBhbGxvY2F0aW5nLgo+IC0gKiBAY291bnQ6CU51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZS4K PiAtICogQGRldjoJRFJNIGRldmljZS4KPiAtICoKPiAtICogQWxsb2NhdGVzIG11bHRpcGxlIHBh Z2UgdGFibGUgcGFnZXMgYW5kIHNldHMgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXMgaW4gdGhlCj4g LSAqIHBhZ2UgdGFibGUgc3RydWN0dXJlIHdpdGhpbiB0aGUgcGFnZSBkaXJlY3RvcnkuIEZ1bmN0 aW9uIGNsZWFucyB1cCBhZnRlcgo+IC0gKiBpdHNlbGYgb24gYW55IGZhaWx1cmVzLgo+IC0gKgo+ IC0gKiBSZXR1cm46IDAgaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQuCj4gLSAqLwo+IC1zdGF0aWMg aW50IGFsbG9jX3B0X3JhbmdlKHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZCwgdWludDE2 X3QgcGRlLCBzaXplX3QgY291bnQsCj4gLQkJCSAgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAt ewo+IC0JaW50IGksIHJldDsKPiAtCj4gLQkvKiA1MTIgaXMgdGhlIG1heCBwYWdlIHRhYmxlcyBw ZXIgcGFnZV9kaXJlY3Rvcnkgb24gYW55IHBsYXRmb3JtLiAqLwo+IC0JaWYgKFdBUk5fT04ocGRl ICsgY291bnQgPiBJOTE1X1BERVMpKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWZvciAo aSA9IHBkZTsgaSA8IHBkZSArIGNvdW50OyBpKyspIHsKPiAtCQlzdHJ1Y3QgaTkxNV9wYWdlX3Rh YmxlICpwdCA9IGFsbG9jX3B0X3NpbmdsZShkZXYpOwo+IC0KPiAtCQlpZiAoSVNfRVJSKHB0KSkg ewo+IC0JCQlyZXQgPSBQVFJfRVJSKHB0KTsKPiAtCQkJZ290byBlcnJfb3V0Owo+IC0JCX0KPiAt CQlXQVJOKHBkLT5wYWdlX3RhYmxlW2ldLAo+IC0JCSAgICAgIkxlYWtpbmcgcGFnZSBkaXJlY3Rv cnkgZW50cnkgJWQgKCVwKVxuIiwKPiAtCQkgICAgIGksIHBkLT5wYWdlX3RhYmxlW2ldKTsKPiAt CQlwZC0+cGFnZV90YWJsZVtpXSA9IHB0Owo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC0KPiAt ZXJyX291dDoKPiAtCXdoaWxlIChpLS0gPiBwZGUpCj4gLQkJdW5tYXBfYW5kX2ZyZWVfcHQocGQt PnBhZ2VfdGFibGVbaV0sIGRldik7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICBzdGF0aWMg dm9pZCB1bm1hcF9hbmRfZnJlZV9wZChzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQsCj4g IAkJCSAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiBAQCAtOTcxLDcgKzkyNyw3 IEBAIGVycl9vdXQ6Cj4gICAqIHNwYWNlLgo+ICAgKgo+ICAgKi8KPiAtc3RhdGljIGludCBnZW44 X3BwZ3R0X2luaXRfY29tbW9uKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgdWludDY0X3Qg c2l6ZSkKPiArc3RhdGljIGludCBnZW44X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQg KnBwZ3R0KQo+ICB7Cj4gIAlwcGd0dC0+c2NyYXRjaF9wdCA9IGFsbG9jX3B0X3NpbmdsZShwcGd0 dC0+YmFzZS5kZXYpOwo+ICAJaWYgKElTX0VSUihwcGd0dC0+c2NyYXRjaF9wdCkpCj4gQEAgLTk4 NSw4ICs5NDEsOSBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdF9jb21tb24oc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0LCB1aW50NjRfdCBzaXplKQo+ICAJZ2VuOF9pbml0aWFsaXplX3Bk KCZwcGd0dC0+YmFzZSwgcHBndHQtPnNjcmF0Y2hfcGQpOwo+ICAKPiAgCXBwZ3R0LT5iYXNlLnN0 YXJ0ID0gMDsKPiAtCXBwZ3R0LT5iYXNlLnRvdGFsID0gc2l6ZTsKPiArCXBwZ3R0LT5iYXNlLnRv dGFsID0gMVVMTCA8PCAzMjsKPiAgCXBwZ3R0LT5iYXNlLmNsZWFudXAgPSBnZW44X3BwZ3R0X2Ns ZWFudXA7Cj4gKwlwcGd0dC0+YmFzZS5hbGxvY2F0ZV92YV9yYW5nZSA9IGdlbjhfYWxsb2NfdmFf cmFuZ2U7Cj4gIAlwcGd0dC0+YmFzZS5pbnNlcnRfZW50cmllcyA9IGdlbjhfcHBndHRfaW5zZXJ0 X2VudHJpZXM7Cj4gIAlwcGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IGdlbjhfcHBndHRfY2xlYXJf cmFuZ2U7Cj4gIAlwcGd0dC0+YmFzZS51bmJpbmRfdm1hID0gcHBndHRfdW5iaW5kX3ZtYTsKPiBA QCAtOTk3LDQ2ICs5NTQsNiBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdF9jb21tb24oc3Ry dWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCB1aW50NjRfdCBzaXplKQo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyBpbnQgZ2VuOF9hbGlhc2luZ19wcGd0dF9pbml0KHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCkKPiAtewo+IC0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBwZ3R0 LT5iYXNlLmRldjsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gLQl1aW50NjRfdCBzdGFydCA9IDAsIHNpemUgPSBkZXZfcHJpdi0+Z3R0 LmJhc2UudG90YWw7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXJldCA9IGdlbjhfcHBndHRfaW5pdF9j b21tb24ocHBndHQsIGRldl9wcml2LT5ndHQuYmFzZS50b3RhbCk7Cj4gLQlpZiAocmV0KQo+IC0J CXJldHVybiByZXQ7Cj4gLQo+IC0JLyogQWxpYXNpbmcgUFBHVFQgaGFzIHRvIGFsd2F5cyB3b3Jr IGFuZCBiZSBtYXBwZWQgYmVjYXVzZSBvZiB0aGUgd2F5IHdlCj4gLQkgKiB1c2UgUkVTVE9SRV9J TkhJQklUIGluIHRoZSBjb250ZXh0IHN3aXRjaC4gVGhpcyB3aWxsIGJlIGZpeGVkCj4gLQkgKiBl dmVudHVhbGx5LiAqLwo+IC0JcmV0ID0gZ2VuOF9hbGxvY192YV9yYW5nZSgmcHBndHQtPmJhc2Us IHN0YXJ0LCBzaXplKTsKPiAtCWlmIChyZXQpIHsKPiAtCQl1bm1hcF9hbmRfZnJlZV9wZChwcGd0 dC0+c2NyYXRjaF9wZCwgcHBndHQtPmJhc2UuZGV2KTsKPiAtCQl1bm1hcF9hbmRfZnJlZV9wdChw cGd0dC0+c2NyYXRjaF9wdCwgcHBndHQtPmJhc2UuZGV2KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0J fQo+IC0KPiAtCXBwZ3R0LT5iYXNlLmFsbG9jYXRlX3ZhX3JhbmdlID0gTlVMTDsKPiAtCXBwZ3R0 LT5iYXNlLmNsZWFyX3JhbmdlKCZwcGd0dC0+YmFzZSwgMCwgcHBndHQtPmJhc2UudG90YWwsIHRy dWUpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGdlbjhfcHBndHRf aW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gLXsKPiAtCWludCByZXQ7Cj4gLQo+ IC0JcmV0ID0gZ2VuOF9wcGd0dF9pbml0X2NvbW1vbihwcGd0dCwgKDFVTEwgPDwgMzIpKTsKPiAt CWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlwcGd0dC0+YmFzZS5hbGxvY2F0ZV92 YV9yYW5nZSA9IGdlbjhfYWxsb2NfdmFfcmFuZ2U7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gIHN0YXRpYyB2b2lkIGdlbjZfZHVtcF9wcGd0dChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBn dHQsIHN0cnVjdCBzZXFfZmlsZSAqbSkKPiAgewo+ICAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0gPSAmcHBndHQtPmJhc2U7Cj4gQEAgLTE1MzMsNyArMTQ1MCw3IEBAIHN0YXRpYyB2b2lk IGdlbjZfc2NyYXRjaF92YV9yYW5nZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsCj4gIAkJ cHBndHQtPnBkLnBhZ2VfdGFibGVbcGRlXSA9IHBwZ3R0LT5zY3JhdGNoX3B0Owo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGdlbjZfcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQs IGJvb2wgYWxpYXNpbmcpCj4gK3N0YXRpYyBpbnQgZ2VuNl9wcGd0dF9pbml0KHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCkKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBwZ3R0 LT5iYXNlLmRldjsKPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ ZGV2X3ByaXZhdGU7Cj4gQEAgLTE1NTYsMTggKzE0NzMsNyBAQCBzdGF0aWMgaW50IGdlbjZfcHBn dHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIGJvb2wgYWxpYXNpbmcpCj4gIAlp ZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JaWYgKGFsaWFzaW5nKSB7Cj4gLQkJLyog cHJlYWxsb2NhdGUgYWxsIHB0cyAqLwo+IC0JCXJldCA9IGFsbG9jX3B0X3JhbmdlKCZwcGd0dC0+ cGQsIDAsIEk5MTVfUERFUywKPiAtCQkJCXBwZ3R0LT5iYXNlLmRldik7Cj4gLQo+IC0JCWlmIChy ZXQpIHsKPiAtCQkJZ2VuNl9wcGd0dF9jbGVhbnVwKCZwcGd0dC0+YmFzZSk7Cj4gLQkJCXJldHVy biByZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXBwZ3R0LT5iYXNlLmFsbG9jYXRlX3ZhX3Jhbmdl ID0gYWxpYXNpbmcgPyBOVUxMIDogZ2VuNl9hbGxvY192YV9yYW5nZTsKPiArCXBwZ3R0LT5iYXNl LmFsbG9jYXRlX3ZhX3JhbmdlID0gZ2VuNl9hbGxvY192YV9yYW5nZTsKPiAgCXBwZ3R0LT5iYXNl LmNsZWFyX3JhbmdlID0gZ2VuNl9wcGd0dF9jbGVhcl9yYW5nZTsKPiAgCXBwZ3R0LT5iYXNlLmlu c2VydF9lbnRyaWVzID0gZ2VuNl9wcGd0dF9pbnNlcnRfZW50cmllczsKPiAgCXBwZ3R0LT5iYXNl LnVuYmluZF92bWEgPSBwcGd0dF91bmJpbmRfdm1hOwo+IEBAIC0xNTgzLDEwICsxNDg5LDcgQEAg c3RhdGljIGludCBnZW42X3BwZ3R0X2luaXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LCBi b29sIGFsaWFzaW5nKQo+ICAJcHBndHQtPnBkX2FkZHIgPSAoZ2VuNl9wdGVfdCBfX2lvbWVtICop ZGV2X3ByaXYtPmd0dC5nc20gKwo+ICAJCXBwZ3R0LT5wZC5wZF9vZmZzZXQgLyBzaXplb2YoZ2Vu Nl9wdGVfdCk7Cj4gIAo+IC0JaWYgKGFsaWFzaW5nKQo+IC0JCXBwZ3R0LT5iYXNlLmNsZWFyX3Jh bmdlKCZwcGd0dC0+YmFzZSwgMCwgcHBndHQtPmJhc2UudG90YWwsIHRydWUpOwo+IC0JZWxzZQo+ IC0JCWdlbjZfc2NyYXRjaF92YV9yYW5nZShwcGd0dCwgMCwgcHBndHQtPmJhc2UudG90YWwpOwo+ ICsJZ2VuNl9zY3JhdGNoX3ZhX3JhbmdlKHBwZ3R0LCAwLCBwcGd0dC0+YmFzZS50b3RhbCk7Cj4g IAo+ICAJZ2VuNl93cml0ZV9wYWdlX3JhbmdlKGRldl9wcml2LCAmcHBndHQtPnBkLCAwLCBwcGd0 dC0+YmFzZS50b3RhbCk7Cj4gIAo+IEBAIC0xNjAwLDggKzE1MDMsNyBAQCBzdGF0aWMgaW50IGdl bjZfcHBndHRfaW5pdChzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQsIGJvb2wgYWxpYXNpbmcp Cj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBfX2h3X3BwZ3R0X2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+IC0JCWJv b2wgYWxpYXNpbmcpCj4gK3N0YXRpYyBpbnQgX19od19wcGd0dF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgewo+ICAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCj4gQEAgLTE2 MDksOSArMTUxMSw3IEBAIHN0YXRpYyBpbnQgX19od19wcGd0dF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwKPiAgCXBwZ3R0LT5iYXNlLnNj cmF0Y2ggPSBkZXZfcHJpdi0+Z3R0LmJhc2Uuc2NyYXRjaDsKPiAgCj4gIAlpZiAoSU5URUxfSU5G TyhkZXYpLT5nZW4gPCA4KQo+IC0JCXJldHVybiBnZW42X3BwZ3R0X2luaXQocHBndHQsIGFsaWFz aW5nKTsKPiAtCWVsc2UgaWYgKGFsaWFzaW5nKQo+IC0JCXJldHVybiBnZW44X2FsaWFzaW5nX3Bw Z3R0X2luaXQocHBndHQpOwo+ICsJCXJldHVybiBnZW42X3BwZ3R0X2luaXQocHBndHQpOwo+ICAJ ZWxzZQo+ICAJCXJldHVybiBnZW44X3BwZ3R0X2luaXQocHBndHQpOwo+ICB9Cj4gQEAgLTE2MjAs NyArMTUyMCw3IEBAIGludCBpOTE1X3BwZ3R0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCWludCByZXQgPSAwOwo+ICAKPiAtCXJl dCA9IF9faHdfcHBndHRfaW5pdChkZXYsIHBwZ3R0LCBmYWxzZSk7Cj4gKwlyZXQgPSBfX2h3X3Bw Z3R0X2luaXQoZGV2LCBwcGd0dCk7Cj4gIAlpZiAocmV0ID09IDApIHsKPiAgCQlrcmVmX2luaXQo JnBwZ3R0LT5yZWYpOwo+ICAJCWRybV9tbV9pbml0KCZwcGd0dC0+YmFzZS5tbSwgcHBndHQtPmJh c2Uuc3RhcnQsCj4gQEAgLTIyNTUsMTMgKzIxNTUsMjcgQEAgc3RhdGljIGludCBpOTE1X2dlbV9z ZXR1cF9nbG9iYWxfZ3R0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAkJaWYgKCFwcGd0dCkK PiAgCQkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+IC0JCXJldCA9IF9faHdfcHBndHRfaW5pdChkZXYs IHBwZ3R0LCB0cnVlKTsKPiArCQlyZXQgPSBfX2h3X3BwZ3R0X2luaXQoZGV2LCBwcGd0dCk7Cj4g KwkJaWYgKHJldCkgewo+ICsJCQlwcGd0dC0+YmFzZS5jbGVhbnVwKCZwcGd0dC0+YmFzZSk7Cj4g KwkJCWtmcmVlKHBwZ3R0KTsKPiArCQkJcmV0dXJuIHJldDsKPiArCQl9Cj4gKwo+ICsJCWlmIChw cGd0dC0+YmFzZS5hbGxvY2F0ZV92YV9yYW5nZSkKPiArCQkJcmV0ID0gcHBndHQtPmJhc2UuYWxs b2NhdGVfdmFfcmFuZ2UoJnBwZ3R0LT5iYXNlLCAwLAo+ICsJCQkJCQkJICAgIHBwZ3R0LT5iYXNl LnRvdGFsKTsKPiAgCQlpZiAocmV0KSB7Cj4gIAkJCXBwZ3R0LT5iYXNlLmNsZWFudXAoJnBwZ3R0 LT5iYXNlKTsKPiAgCQkJa2ZyZWUocHBndHQpOwo+ICAJCQlyZXR1cm4gcmV0Owo+ICAJCX0KPiAg Cj4gKwkJcHBndHQtPmJhc2UuY2xlYXJfcmFuZ2UoJnBwZ3R0LT5iYXNlLAo+ICsJCQkJCXBwZ3R0 LT5iYXNlLnN0YXJ0LAo+ICsJCQkJCXBwZ3R0LT5iYXNlLnRvdGFsLAo+ICsJCQkJCXRydWUpOwo+ ICsKPiAgCQlkZXZfcHJpdi0+bW0uYWxpYXNpbmdfcHBndHQgPSBwcGd0dDsKPiAgCX0KPiAgCj4g LS0gCj4gMi4xLjAKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==