From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 16/18] drm/i915/gtt: One instance of scratch page table/directory Date: Fri, 26 Jun 2015 11:10:23 +0200 Message-ID: <20150626091023.GZ25769@phenom.ffwll.local> References: <1435246520-14745-1-git-send-email-mika.kuoppala@intel.com> <1435246520-14745-17-git-send-email-mika.kuoppala@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f175.google.com (mail-wi0-f175.google.com [209.85.212.175]) by gabe.freedesktop.org (Postfix) with ESMTP id 2D9936ED8B for ; Fri, 26 Jun 2015 02:07:37 -0700 (PDT) Received: by wicnd19 with SMTP id nd19so39506185wic.1 for ; Fri, 26 Jun 2015 02:07:36 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1435246520-14745-17-git-send-email-mika.kuoppala@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Mika Kuoppala Cc: intel-gfx@lists.freedesktop.org, miku@iki.fi List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBKdW4gMjUsIDIwMTUgYXQgMDY6MzU6MThQTSArMDMwMCwgTWlrYSBLdW9wcGFsYSB3 cm90ZToKPiArc3RhdGljIGludCBzZXR1cF9zY3JhdGNoKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICpnZ3R0X3ZtID0gJnRv X2k5MTUodm0tPmRldiktPmd0dC5iYXNlOwo+ICsKPiArCWlmIChpOTE1X2lzX2dndHQodm0pKQo+ ICsJCXJldHVybiBzZXR1cF9zY3JhdGNoX2dndHQodm0pOwo+ICsKPiArCXZtLT5zY3JhdGNoX3Bh Z2UgPSBnZ3R0X3ZtLT5zY3JhdGNoX3BhZ2U7Cj4gKwl2bS0+c2NyYXRjaF9wdCA9IGdndHRfdm0t PnNjcmF0Y2hfcHQ7Cj4gKwl2bS0+c2NyYXRjaF9wZCA9IGdndHRfdm0tPnNjcmF0Y2hfcGQ7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KClRoZSBwb2ludCBvZiBhIHBwZ3R0IGlzIGZ1bGwgaXNvbGF0 aW9uLCBzaGFyaW5nIHRoZSBzY3JhdGNoIHBhZ2UgZGVzdHJveXMKdGhhdC4gSGVuY2UgbmFjay4g SWYgeW91IHdhbnQgYSBiaXQgb2YgcG9saXNoLCByZW5hbWluZyBpbml0aWFsaXplX3BkL3B0CnRv IGluaXRpYWxpemVfc2NyYXRjaF9wZC9wdCB3b3VsZCBtYWtlIHNlbnNlIHRob3VnaCBJIHRoaW5r LgotRGFuaWVsCgo+ICsKPiArc3RhdGljIHZvaWQgY2hlY2tfc2NyYXRjaF9wYWdlKHN0cnVjdCBp OTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBn dHQgPQo+ICsJCWNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfaHdfcHBndHQsIGJhc2UpOwo+ ICsJaW50IGk7Cj4gKwl1NjQgKnZhZGRyOwo+ICsKPiArCXZhZGRyID0ga21hcF9weCh2bS0+c2Ny YXRjaF9wYWdlKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKHU2 NCk7IGkrKykgewo+ICsJCWlmICh2YWRkcltpXSA9PSBTQ1JBVENIX1BBR0VfTUFHSUMpCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCQlEUk1fRVJST1IoIiVwIHNjcmF0Y2hbJWRdID0gMHglMDhsbHhc biIsIHZtLCBpLCB2YWRkcltpXSk7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJa3VubWFwX3B4 KHBwZ3R0LCB2YWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFudXBfc2NyYXRjaF9n Z3R0KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICt7Cj4gKwljaGVja19zY3JhdGNo X3BhZ2Uodm0pOwo+ICsJZnJlZV9zY3JhdGNoX3BhZ2Uodm0pOwo+ICsKPiArCWlmIChJTlRFTF9J TkZPKHZtLT5kZXYpLT5nZW4gPCA2KQo+ICsJCXJldHVybjsKPiArCj4gKwlmcmVlX3B0KHZtLT5k ZXYsIHZtLT5zY3JhdGNoX3B0KTsKPiArCj4gKwlpZiAoSU5URUxfSU5GTyh2bS0+ZGV2KS0+Z2Vu ID49IDgpCj4gKwkJZnJlZV9wZCh2bS0+ZGV2LCB2bS0+c2NyYXRjaF9wZCk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNsZWFudXBfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKPiArewo+ICsJaWYgKGk5MTVfaXNfZ2d0dCh2bSkpCj4gKwkJY2xlYW51cF9zY3JhdGNoX2dn dHQodm0pOwo+ICsKPiArCXZtLT5zY3JhdGNoX3BhZ2UgPSBOVUxMOwo+ICsJdm0tPnNjcmF0Y2hf cHQgPSBOVUxMOwo+ICsJdm0tPnNjcmF0Y2hfcGQgPSBOVUxMOwo+ICt9Cj4gKwo+ICAvKiBCcm9h ZHdlbGwgUGFnZSBEaXJlY3RvcnkgUG9pbnRlciBEZXNjcmlwdG9ycyAqLwo+ICBzdGF0aWMgaW50 IGdlbjhfd3JpdGVfcGRwKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxLAo+ICAJCQkg IHVuc2lnbmVkIGVudHJ5LAo+IEBAIC01MjUsNyArNjg2LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9w cGd0dF9jbGVhcl9yYW5nZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCXVuc2ln bmVkIG51bV9lbnRyaWVzID0gbGVuZ3RoID4+IFBBR0VfU0hJRlQ7Cj4gIAl1bnNpZ25lZCBsYXN0 X3B0ZSwgaTsKPiAgCj4gLQlzY3JhdGNoX3B0ZSA9IGdlbjhfcHRlX2VuY29kZShweF9kbWEocHBn dHQtPmJhc2Uuc2NyYXRjaF9wYWdlKSwKPiArCXNjcmF0Y2hfcHRlID0gZ2VuOF9wdGVfZW5jb2Rl KHB4X2RtYSh2bS0+c2NyYXRjaF9wYWdlKSwKPiAgCQkJCSAgICAgIEk5MTVfQ0FDSEVfTExDLCB1 c2Vfc2NyYXRjaCk7Cj4gIAo+ICAJd2hpbGUgKG51bV9lbnRyaWVzKSB7Cj4gQEAgLTYwOSwxNiAr NzcwLDYgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9pbnNlcnRfZW50cmllcyhzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQlrdW5tYXBfcHgocHBndHQsIHB0X3ZhZGRyKTsKPiAg fQo+ICAKPiAtc3RhdGljIHZvaWQgZ2VuOF9pbml0aWFsaXplX3BkKHN0cnVjdCBpOTE1X2FkZHJl c3Nfc3BhY2UgKnZtLAo+IC0JCQkgICAgICAgc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBk KQo+IC17Cj4gLQlnZW44X3BkZV90IHNjcmF0Y2hfcGRlOwo+IC0KPiAtCXNjcmF0Y2hfcGRlID0g Z2VuOF9wZGVfZW5jb2RlKHB4X2RtYSh2bS0+c2NyYXRjaF9wdCksIEk5MTVfQ0FDSEVfTExDKTsK PiAtCj4gLQlmaWxsX3B4KHZtLT5kZXYsIHBkLCBzY3JhdGNoX3BkZSk7Cj4gLX0KPiAtCj4gIHN0 YXRpYyB2b2lkIGdlbjhfZnJlZV9wYWdlX3RhYmxlcyhzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9y eSAqcGQsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIHsKPiAgCWludCBpOwo+IEBAIC02NDks OCArODAwLDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtKQo+ICAJCWZyZWVfcGQocHBndHQtPmJhc2UuZGV2LCBwcGd0dC0+cGRw LnBhZ2VfZGlyZWN0b3J5W2ldKTsKPiAgCX0KPiAgCj4gLQlmcmVlX3BkKHZtLT5kZXYsIHZtLT5z Y3JhdGNoX3BkKTsKPiAtCWZyZWVfcHQodm0tPmRldiwgdm0tPnNjcmF0Y2hfcHQpOwo+ICsJY2xl YW51cF9zY3JhdGNoKHZtKTsKPiAgfQo+ICAKPiAgLyoqCj4gQEAgLTkzNywxNiArMTA4Nyw3IEBA IGVycl9vdXQ6Cj4gICAqLwo+ICBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdChzdHJ1Y3QgaTkx NV9od19wcGd0dCAqcHBndHQpCj4gIHsKPiAtCXBwZ3R0LT5iYXNlLnNjcmF0Y2hfcHQgPSBhbGxv Y19wdChwcGd0dC0+YmFzZS5kZXYpOwo+IC0JaWYgKElTX0VSUihwcGd0dC0+YmFzZS5zY3JhdGNo X3B0KSkKPiAtCQlyZXR1cm4gUFRSX0VSUihwcGd0dC0+YmFzZS5zY3JhdGNoX3B0KTsKPiAtCj4g LQlwcGd0dC0+YmFzZS5zY3JhdGNoX3BkID0gYWxsb2NfcGQocHBndHQtPmJhc2UuZGV2KTsKPiAt CWlmIChJU19FUlIocHBndHQtPmJhc2Uuc2NyYXRjaF9wZCkpCj4gLQkJcmV0dXJuIFBUUl9FUlIo cHBndHQtPmJhc2Uuc2NyYXRjaF9wZCk7Cj4gLQo+IC0JZ2VuOF9pbml0aWFsaXplX3B0KCZwcGd0 dC0+YmFzZSwgcHBndHQtPmJhc2Uuc2NyYXRjaF9wdCk7Cj4gLQlnZW44X2luaXRpYWxpemVfcGQo JnBwZ3R0LT5iYXNlLCBwcGd0dC0+YmFzZS5zY3JhdGNoX3BkKTsKPiArCWludCByZXQ7Cj4gIAo+ ICAJcHBndHQtPmJhc2Uuc3RhcnQgPSAwOwo+ICAJcHBndHQtPmJhc2UudG90YWwgPSAxVUxMIDw8 IDMyOwo+IEBAIC05NjYsNiArMTEwNywxMCBAQCBzdGF0aWMgaW50IGdlbjhfcHBndHRfaW5pdChz dHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gIAo+ICAJcHBndHQtPnN3aXRjaF9tbSA9IGdl bjhfbW1fc3dpdGNoOwo+ICAKPiArCXJldCA9IHNldHVwX3NjcmF0Y2goJnBwZ3R0LT5iYXNlKTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAK PiBAQCAtMTI3MiwxOSArMTQxNyw2IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfaW5zZXJ0X2Vu dHJpZXMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCj4gIAkJa3VubWFwX3B4KHBwZ3R0 LCBwdF92YWRkcik7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGdlbjZfaW5pdGlhbGl6ZV9wdChz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAtCQkJICAgICAgIHN0cnVjdCBpOTE1X3Bh Z2VfdGFibGUgKnB0KQo+IC17Cj4gLQlnZW42X3B0ZV90IHNjcmF0Y2hfcHRlOwo+IC0KPiAtCVdB Uk5fT04ocHhfZG1hKHZtLT5zY3JhdGNoX3BhZ2UpID09IDApOwo+IC0KPiAtCXNjcmF0Y2hfcHRl ID0gdm0tPnB0ZV9lbmNvZGUocHhfZG1hKHZtLT5zY3JhdGNoX3BhZ2UpLAo+IC0JCQkJICAgICBJ OTE1X0NBQ0hFX0xMQywgdHJ1ZSwgMCk7Cj4gLQo+IC0JZmlsbDMyX3B4KHZtLT5kZXYsIHB0LCBz Y3JhdGNoX3B0ZSk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShz dHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPiAgCQkJICAgICAgIHVpbnQ2NF90IHN0YXJ0 X2luLCB1aW50NjRfdCBsZW5ndGhfaW4pCj4gIHsKPiBAQCAtMTM4OSw3ICsxNTIxLDcgQEAgc3Rh dGljIHZvaWQgZ2VuNl9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt KQo+ICAJCQlmcmVlX3B0KHBwZ3R0LT5iYXNlLmRldiwgcHQpOwo+ICAJfQo+ICAKPiAtCWZyZWVf cHQodm0tPmRldiwgdm0tPnNjcmF0Y2hfcHQpOwo+ICsJY2xlYW51cF9zY3JhdGNoKHZtKTsKPiAg fQo+ICAKPiAgc3RhdGljIGludCBnZW42X3BwZ3R0X2FsbG9jYXRlX3BhZ2VfZGlyZWN0b3JpZXMo c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+IEBAIC0xNDA0LDExICsxNTM2LDEwIEBAIHN0 YXRpYyBpbnQgZ2VuNl9wcGd0dF9hbGxvY2F0ZV9wYWdlX2RpcmVjdG9yaWVzKHN0cnVjdCBpOTE1 X2h3X3BwZ3R0ICpwcGd0dCkKPiAgCSAqIHNpemUuIFdlIGFsbG9jYXRlIGF0IHRoZSB0b3Agb2Yg dGhlIEdUVCB0byBhdm9pZCBmcmFnbWVudGF0aW9uLgo+ICAJICovCj4gIAlCVUdfT04oIWRybV9t bV9pbml0aWFsaXplZCgmZGV2X3ByaXYtPmd0dC5iYXNlLm1tKSk7Cj4gLQlwcGd0dC0+YmFzZS5z Y3JhdGNoX3B0ID0gYWxsb2NfcHQocHBndHQtPmJhc2UuZGV2KTsKPiAtCWlmIChJU19FUlIocHBn dHQtPmJhc2Uuc2NyYXRjaF9wdCkpCj4gLQkJcmV0dXJuIFBUUl9FUlIocHBndHQtPmJhc2Uuc2Ny YXRjaF9wdCk7Cj4gIAo+IC0JZ2VuNl9pbml0aWFsaXplX3B0KCZwcGd0dC0+YmFzZSwgcHBndHQt PmJhc2Uuc2NyYXRjaF9wdCk7Cj4gKwlyZXQgPSBzZXR1cF9zY3JhdGNoKCZwcGd0dC0+YmFzZSk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gIAo+ICBhbGxvYzoKPiAgCXJldCA9IGRy bV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljKCZkZXZfcHJpdi0+Z3R0LmJhc2UubW0s Cj4gQEAgLTE0MzksNyArMTU3MCw3IEBAIGFsbG9jOgo+ICAJcmV0dXJuIDA7Cj4gIAo+ICBlcnJf b3V0Ogo+IC0JZnJlZV9wdChwcGd0dC0+YmFzZS5kZXYsIHBwZ3R0LT5iYXNlLnNjcmF0Y2hfcHQp Owo+ICsJY2xlYW51cF9zY3JhdGNoKCZwcGd0dC0+YmFzZSk7Cj4gIAlyZXR1cm4gcmV0Owo+ICB9 Cj4gIAo+IEBAIC0xNTEzLDEwICsxNjQ0LDcgQEAgc3RhdGljIGludCBnZW42X3BwZ3R0X2luaXQo c3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+ICAKPiAgc3RhdGljIGludCBfX2h3X3BwZ3R0 X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0 KQo+ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+IC0KPiAgCXBwZ3R0LT5iYXNlLmRldiA9IGRldjsKPiAtCXBwZ3R0LT5iYXNlLnNj cmF0Y2hfcGFnZSA9IGRldl9wcml2LT5ndHQuYmFzZS5zY3JhdGNoX3BhZ2U7Cj4gIAo+ICAJaWYg KElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgOCkKPiAgCQlyZXR1cm4gZ2VuNl9wcGd0dF9pbml0KHBw Z3R0KTsKPiBAQCAtMjEyNCw0NSArMjI1Miw2IEBAIHZvaWQgaTkxNV9nbG9iYWxfZ3R0X2NsZWFu dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCXZtLT5jbGVhbnVwKHZtKTsKPiAgfQo+ICAK PiAtI2RlZmluZSBTQ1JBVENIX1BBR0VfTUFHSUMgMHhmZmZmMDBmZmZmZmYwMGZmVUxMCj4gLQo+ IC1zdGF0aWMgaW50IGFsbG9jX3NjcmF0Y2hfcGFnZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfcGFnZV9zY3JhdGNoICpzcDsKPiAtCWludCByZXQ7 Cj4gLQo+IC0JV0FSTl9PTih2bS0+c2NyYXRjaF9wYWdlKTsKPiAtCj4gLQlzcCA9IGt6YWxsb2Mo c2l6ZW9mKCpzcCksIEdGUF9LRVJORUwpOwo+IC0JaWYgKHNwID09IE5VTEwpCj4gLQkJcmV0dXJu IC1FTk9NRU07Cj4gLQo+IC0JcmV0ID0gX19zZXR1cF9wYWdlX2RtYSh2bS0+ZGV2LCBweF9iYXNl KHNwKSwgR0ZQX0RNQTMyIHwgX19HRlBfWkVSTyk7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJa2ZyZWUo c3ApOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JZmlsbF9weCh2bS0+ZGV2LCBzcCwg U0NSQVRDSF9QQUdFX01BR0lDKTsKPiAtCXNldF9wYWdlc191YyhweF9wYWdlKHNwKSwgMSk7Cj4g LQo+IC0Jdm0tPnNjcmF0Y2hfcGFnZSA9IHNwOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBmcmVlX3NjcmF0Y2hfcGFnZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSkKPiAtewo+IC0Jc3RydWN0IGk5MTVfcGFnZV9zY3JhdGNoICpzcCA9IHZtLT5zY3JhdGNo X3BhZ2U7Cj4gLQo+IC0Jc2V0X3BhZ2VzX3diKHB4X3BhZ2Uoc3ApLCAxKTsKPiAtCj4gLQljbGVh bnVwX3B4KHZtLT5kZXYsIHNwKTsKPiAtCWtmcmVlKHNwKTsKPiAtCj4gLQl2bS0+c2NyYXRjaF9w YWdlID0gTlVMTDsKPiAtfQo+IC0KPiAgc3RhdGljIHVuc2lnbmVkIGludCBnZW42X2dldF90b3Rh bF9ndHRfc2l6ZSh1MTYgc25iX2dtY2hfY3RsKQo+ICB7Cj4gIAlzbmJfZ21jaF9jdGwgPj49IFNO Ql9HTUNIX0dHTVNfU0hJRlQ7Cj4gQEAgLTIyNDYsNyArMjMzNSw2IEBAIHN0YXRpYyBpbnQgZ2d0 dF9wcm9iZV9jb21tb24oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgewo+ICAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgCXBoeXNfYWRk cl90IGd0dF9waHlzX2FkZHI7Cj4gLQlpbnQgcmV0Owo+ICAKPiAgCS8qIEZvciBNb2Rlcm4gR0VO cyB0aGUgUFRFcyBhbmQgcmVnaXN0ZXIgc3BhY2UgYXJlIHNwbGl0IGluIHRoZSBCQVIgKi8KPiAg CWd0dF9waHlzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArCj4gQEAg LTIyNjgsMTQgKzIzNTYsNyBAQCBzdGF0aWMgaW50IGdndHRfcHJvYmVfY29tbW9uKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gIAkJcmV0dXJuIC1FTk9NRU07Cj4gIAl9Cj4gIAo+IC0JcmV0ID0g YWxsb2Nfc2NyYXRjaF9wYWdlKCZkZXZfcHJpdi0+Z3R0LmJhc2UpOwo+IC0JaWYgKHJldCkgewo+ IC0JCURSTV9FUlJPUigiU2NyYXRjaCBzZXR1cCBmYWlsZWRcbiIpOwo+IC0JCS8qIGlvdW5tYXAg d2lsbCBhbHNvIGdldCBjYWxsZWQgYXQgcmVtb3ZlLCBidXQgbWVoICovCj4gLQkJaW91bm1hcChk ZXZfcHJpdi0+Z3R0LmdzbSk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiArCXJldHVybiBz ZXR1cF9zY3JhdGNoKCZkZXZfcHJpdi0+Z3R0LmJhc2UpOwo+ICB9Cj4gIAo+ICAvKiBUaGUgR0dU VCBhbmQgUFBHVFQgbmVlZCBhIHByaXZhdGUgUFBBVCBzZXR1cCBpbiBvcmRlciB0byBoYW5kbGUg Y2FjaGVhYmlsaXR5Cj4gQEAgLTI0NDcsNyArMjUyOCw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfZ21j aF9yZW1vdmUoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0pCj4gIAlzdHJ1Y3QgaTkxNV9n dHQgKmd0dCA9IGNvbnRhaW5lcl9vZih2bSwgc3RydWN0IGk5MTVfZ3R0LCBiYXNlKTsKPiAgCj4g IAlpb3VubWFwKGd0dC0+Z3NtKTsKPiAtCWZyZWVfc2NyYXRjaF9wYWdlKHZtKTsKPiArCWNsZWFu dXBfc2NyYXRjaCh2bSk7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgaTkxNV9nbWNoX3Byb2JlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gLS0gCj4gMS45LjEKPiAKPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QK PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29m dHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==