From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: Re: [PATCH 1/7] drm/ttm: call ttm_bo_swapout directly when ttm shrink Date: Thu, 21 Dec 2017 08:34:10 +0100 Message-ID: References: <1513766101-15993-1-git-send-email-Hongbo.He@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1513766101-15993-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Roger He , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org Um9nZXIsCgo1IG91dCBvZiA3IHBhdGNoZXMgaW4gdGhpcyBzZXJpZXMgYXJlIGNvbXBsZXRlbHkg bGFja2luZyBhIGNvbW1pdCBsb2cgCm1lc3NhZ2UsIGFuZCB0aGF0cyBub3QgT0suIFJlYWxseS4K Cmh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvdjQuMTIvcHJvY2Vzcy9zdWJtaXR0aW5n LXBhdGNoZXMuaHRtbCNkZXNjcmliZS15b3VyLWNoYW5nZXMKCkknbGwgcmV2aWV3IHRoZXNlLCBi dXQgSUlSQyB0aGUgbm9fd2FpdCBpbiB0aGUgbWVtb3J5IGFjY291bnRpbmcgY29kZSBpcyAKZGlm ZmVyZW50IGluIHRoYXQgaXQgZG9lc24ndCBhbGxvdyBzbGVlcGluZywKd2hlcmVhcyBpbiB0aGUg Ym8gY29kZSB3ZSBoYWQgb3JpZ2luYWxseSBoYWQgbm9fd2FpdF9ncHUgYW5kIGFsc28gCm5vX3dh aXQuIChJSVJDIE1hYXJ0ZW4gb3IgSmVyb21lIHJlbW92ZWQgdGhlIGxhdHRlciBkdWUgdG8gbGFj ayBvZiAKdXNlcnMuKSBTZWVtcyBsaWtlIHRoZXNlIHBhdGNoZXMgY29uZnVzZSB0aGUgdG8uIEF0 IHRoZSB2ZXJ5IGxlYXN0IHRoYXQgCnJlcXVpcmVzIHNvbWUgZm9ybSBvZiBtb3RpdmF0aW9uLgoK QWxzbyBJIHdvbmRlciB3aGF0IHRlc3RpbmcgaXMgYmVpbmcgcGVyZm9ybWVkIG9uIHRoZXNlIGNo YW5nZXMgcHJpb3IgdG8gCnN1Ym1pc3Npb24/CldlIGhhdmUgcHJldHR5IGhpZ2ggbnVtYmVyIG9m IGNyaXRpY2FsIGRlcGxveW1lbnRzIG91dCB0aGVyZSwgdGhhdCB3ZSAKbmVlZCB0byBzdXBwb3J0 LgoKL1Rob21hcwoKCk9uIDEyLzIwLzIwMTcgMTE6MzQgQU0sIFJvZ2VyIEhlIHdyb3RlOgo+IHRo ZW4gcmVtb3ZlIHN1cGVyZmx1b3VzIGZ1bmN0aW9ucwo+Cj4gQ2hhbmdlLUlkOiBJZWEwMjBmMGUz MGEyMzllMDI2NWU3YTE1MDAxNjhjN2Q3ZjgxOWJkOQo+IFNpZ25lZC1vZmYtYnk6IFJvZ2VyIEhl IDxIb25nYm8uSGVAYW1kLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv LmMgICAgIHwgMjEgKysrLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1v cnkuYyB8IDEyICsrLS0tLS0KPiAgIGluY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggICAgIHwg IDEgKwo+ICAgaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaCAgfCAgMSAtCj4gICBpbmNs dWRlL2RybS90dG0vdHRtX21lbW9yeS5oICAgICB8IDY5ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KPiAgIDUgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA5 NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9i by5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+IGluZGV4IDYwYmI1YzEuLmZhNTdh YTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPiBAQCAtNDIsNyArNDIsNiBAQAo+ICAgI2luY2x1 ZGUgPGxpbnV4L2F0b21pYy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+Cj4g ICAKPiAtc3RhdGljIGludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNo cmluayk7Cj4gICBzdGF0aWMgdm9pZCB0dG1fYm9fZ2xvYmFsX2tvYmpfcmVsZWFzZShzdHJ1Y3Qg a29iamVjdCAqa29iaik7Cj4gICAKPiAgIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHR0bV9ib19j b3VudCA9IHsKPiBAQCAtMTQ1NCw3ICsxNDUzLDYgQEAgc3RhdGljIHZvaWQgdHRtX2JvX2dsb2Jh bF9rb2JqX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCj4gICAJc3RydWN0IHR0bV9ib19n bG9iYWwgKmdsb2IgPQo+ICAgCQljb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHR0bV9ib19nbG9i YWwsIGtvYmopOwo+ICAgCj4gLQl0dG1fbWVtX3VucmVnaXN0ZXJfc2hyaW5rKGdsb2ItPm1lbV9n bG9iLCAmZ2xvYi0+c2hyaW5rKTsKPiAgIAlfX2ZyZWVfcGFnZShnbG9iLT5kdW1teV9yZWFkX3Bh Z2UpOwo+ICAgCWtmcmVlKGdsb2IpOwo+ICAgfQo+IEBAIC0xNDc5LDYgKzE0NzcsNyBAQCBpbnQg dHRtX2JvX2dsb2JhbF9pbml0KHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQo+ICAg CW11dGV4X2luaXQoJmdsb2ItPmRldmljZV9saXN0X211dGV4KTsKPiAgIAlzcGluX2xvY2tfaW5p dCgmZ2xvYi0+bHJ1X2xvY2spOwo+ICAgCWdsb2ItPm1lbV9nbG9iID0gYm9fcmVmLT5tZW1fZ2xv YjsKPiArCWdsb2ItPm1lbV9nbG9iLT5ib19nbG9iID0gZ2xvYjsKPiAgIAlnbG9iLT5kdW1teV9y ZWFkX3BhZ2UgPSBhbGxvY19wYWdlKF9fR0ZQX1pFUk8gfCBHRlBfRE1BMzIpOwo+ICAgCj4gICAJ aWYgKHVubGlrZWx5KGdsb2ItPmR1bW15X3JlYWRfcGFnZSA9PSBOVUxMKSkgewo+IEBAIC0xNDg5 LDE0ICsxNDg4LDYgQEAgaW50IHR0bV9ib19nbG9iYWxfaW5pdChzdHJ1Y3QgZHJtX2dsb2JhbF9y ZWZlcmVuY2UgKnJlZikKPiAgIAlmb3IgKGkgPSAwOyBpIDwgVFRNX01BWF9CT19QUklPUklUWTsg KytpKQo+ICAgCQlJTklUX0xJU1RfSEVBRCgmZ2xvYi0+c3dhcF9scnVbaV0pOwo+ICAgCUlOSVRf TElTVF9IRUFEKCZnbG9iLT5kZXZpY2VfbGlzdCk7Cj4gLQo+IC0JdHRtX21lbV9pbml0X3Nocmlu aygmZ2xvYi0+c2hyaW5rLCB0dG1fYm9fc3dhcG91dCk7Cj4gLQlyZXQgPSB0dG1fbWVtX3JlZ2lz dGVyX3NocmluayhnbG9iLT5tZW1fZ2xvYiwgJmdsb2ItPnNocmluayk7Cj4gLQlpZiAodW5saWtl bHkocmV0ICE9IDApKSB7Cj4gLQkJcHJfZXJyKCJDb3VsZCBub3QgcmVnaXN0ZXIgYnVmZmVyIG9i amVjdCBzd2Fwb3V0XG4iKTsKPiAtCQlnb3RvIG91dF9ub19zaHJpbms7Cj4gLQl9Cj4gLQo+ICAg CWF0b21pY19zZXQoJmdsb2ItPmJvX2NvdW50LCAwKTsKPiAgIAo+ICAgCXJldCA9IGtvYmplY3Rf aW5pdF9hbmRfYWRkKAo+IEBAIC0xNTA0LDggKzE0OTUsNiBAQCBpbnQgdHRtX2JvX2dsb2JhbF9p bml0KHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQo+ICAgCWlmICh1bmxpa2VseShy ZXQgIT0gMCkpCj4gICAJCWtvYmplY3RfcHV0KCZnbG9iLT5rb2JqKTsKPiAgIAlyZXR1cm4gcmV0 Owo+IC1vdXRfbm9fc2hyaW5rOgo+IC0JX19mcmVlX3BhZ2UoZ2xvYi0+ZHVtbXlfcmVhZF9wYWdl KTsKPiAgIG91dF9ub19kcnA6Cj4gICAJa2ZyZWUoZ2xvYik7Cj4gICAJcmV0dXJuIHJldDsKPiBA QCAtMTY4OCwxMSArMTY3Nyw4IEBAIEVYUE9SVF9TWU1CT0wodHRtX2JvX3N5bmNjcHVfd3JpdGVf cmVsZWFzZSk7Cj4gICAgKiBBIGJ1ZmZlciBvYmplY3Qgc2hyaW5rIG1ldGhvZCB0aGF0IHRyaWVz IHRvIHN3YXAgb3V0IHRoZSBmaXJzdAo+ICAgICogYnVmZmVyIG9iamVjdCBvbiB0aGUgYm9fZ2xv YmFsOjpzd2FwX2xydSBsaXN0Lgo+ICAgICovCj4gLQo+IC1zdGF0aWMgaW50IHR0bV9ib19zd2Fw b3V0KHN0cnVjdCB0dG1fbWVtX3NocmluayAqc2hyaW5rKQo+ICtpbnQgdHRtX2JvX3N3YXBvdXQo c3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IpCj4gICB7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2dsb2Jh bCAqZ2xvYiA9Cj4gLQkgICAgY29udGFpbmVyX29mKHNocmluaywgc3RydWN0IHR0bV9ib19nbG9i YWwsIHNocmluayk7Cj4gICAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibzsKPiAgIAlpbnQg cmV0ID0gLUVCVVNZOwo+ICAgCXVuc2lnbmVkIGk7Cj4gQEAgLTE3NzQsMTAgKzE3NjAsMTEgQEAg c3RhdGljIGludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluaykK PiAgIAlrcmVmX3B1dCgmYm8tPmxpc3Rfa3JlZiwgdHRtX2JvX3JlbGVhc2VfbGlzdCk7Cj4gICAJ cmV0dXJuIHJldDsKPiAgIH0KPiArRVhQT1JUX1NZTUJPTCh0dG1fYm9fc3dhcG91dCk7Cj4gICAK PiAgIHZvaWQgdHRtX2JvX3N3YXBvdXRfYWxsKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2KQo+ ICAgewo+IC0Jd2hpbGUgKHR0bV9ib19zd2Fwb3V0KCZiZGV2LT5nbG9iLT5zaHJpbmspID09IDAp Cj4gKwl3aGlsZSAodHRtX2JvX3N3YXBvdXQoYmRldi0+Z2xvYikgPT0gMCkKPiAgIAkJOwo+ICAg fQo+ICAgRVhQT1JUX1NZTUJPTCh0dG1fYm9fc3dhcG91dF9hbGwpOwo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X21lbW9yeS5jCj4gaW5kZXggZTk2Mzc0OS4uOTEzMGJkZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRt X21lbW9yeS5jCj4gQEAgLTIxNCwyNiArMjE0LDIwIEBAIHN0YXRpYyB2b2lkIHR0bV9zaHJpbmso c3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iLCBib29sIGZyb21fd3EsCj4gICAJCSAgICAgICB1 aW50NjRfdCBleHRyYSkKPiAgIHsKPiAgIAlpbnQgcmV0Owo+IC0Jc3RydWN0IHR0bV9tZW1fc2hy aW5rICpzaHJpbms7Cj4gICAKPiAgIAlzcGluX2xvY2soJmdsb2ItPmxvY2spOwo+IC0JaWYgKGds b2ItPnNocmluayA9PSBOVUxMKQo+IC0JCWdvdG8gb3V0Owo+ICAgCj4gICAJd2hpbGUgKHR0bV96 b25lc19hYm92ZV9zd2FwX3RhcmdldChnbG9iLCBmcm9tX3dxLCBleHRyYSkpIHsKPiAtCQlzaHJp bmsgPSBnbG9iLT5zaHJpbms7Cj4gICAJCXNwaW5fdW5sb2NrKCZnbG9iLT5sb2NrKTsKPiAtCQly ZXQgPSBzaHJpbmstPmRvX3NocmluayhzaHJpbmspOwo+ICsJCXJldCA9IHR0bV9ib19zd2Fwb3V0 KGdsb2ItPmJvX2dsb2IpOwo+ICAgCQlzcGluX2xvY2soJmdsb2ItPmxvY2spOwo+ICAgCQlpZiAo dW5saWtlbHkocmV0ICE9IDApKQo+IC0JCQlnb3RvIG91dDsKPiArCQkJYnJlYWs7Cj4gICAJfQo+ IC1vdXQ6Cj4gKwo+ICAgCXNwaW5fdW5sb2NrKCZnbG9iLT5sb2NrKTsKPiAgIH0KPiAgIAo+IC0K PiAtCj4gICBzdGF0aWMgdm9pZCB0dG1fc2hyaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ICAgewo+ICAgCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqZ2xvYiA9Cj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fYXBpLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2Jv X2FwaS5oCj4gaW5kZXggYzEyNjMzMC4uMjRhOGRiNyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2Ry bS90dG0vdHRtX2JvX2FwaS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19hcGkuaAo+ IEBAIC03NTIsNiArNzUyLDcgQEAgc3NpemVfdCB0dG1fYm9faW8oc3RydWN0IHR0bV9ib19kZXZp Y2UgKmJkZXYsIHN0cnVjdCBmaWxlICpmaWxwLAo+ICAgCQkgIGNvbnN0IGNoYXIgX191c2VyICp3 YnVmLCBjaGFyIF9fdXNlciAqcmJ1ZiwKPiAgIAkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9w b3MsIGJvb2wgd3JpdGUpOwo+ICAgCj4gK2ludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX2Jv X2dsb2JhbCAqZ2xvYik7Cj4gICB2b2lkIHR0bV9ib19zd2Fwb3V0X2FsbChzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldik7Cj4gICBpbnQgdHRtX2JvX3dhaXRfdW5yZXNlcnZlZChzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKmJvKTsKPiAgICNlbmRpZgo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2Ry bS90dG0vdHRtX2JvX2RyaXZlci5oIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaAo+ IGluZGV4IDUxMTU3MTguLjkzNGZlY2YgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vdHRtL3R0 bV9ib19kcml2ZXIuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKPiBA QCAtNTIyLDcgKzUyMiw2IEBAIHN0cnVjdCB0dG1fYm9fZ2xvYmFsIHsKPiAgIAlzdHJ1Y3Qga29i amVjdCBrb2JqOwo+ICAgCXN0cnVjdCB0dG1fbWVtX2dsb2JhbCAqbWVtX2dsb2I7Cj4gICAJc3Ry dWN0IHBhZ2UgKmR1bW15X3JlYWRfcGFnZTsKPiAtCXN0cnVjdCB0dG1fbWVtX3NocmluayBzaHJp bms7Cj4gICAJc3RydWN0IG11dGV4IGRldmljZV9saXN0X211dGV4Owo+ICAgCXNwaW5sb2NrX3Qg bHJ1X2xvY2s7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vdHRtL3R0bV9tZW1vcnku aCBiL2luY2x1ZGUvZHJtL3R0bS90dG1fbWVtb3J5LmgKPiBpbmRleCAyYzFlMzU5Li44NWYzYWQ2 IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fbWVtb3J5LmgKPiArKysgYi9pbmNs dWRlL2RybS90dG0vdHRtX21lbW9yeS5oCj4gQEAgLTM3LDIwICszNyw2IEBACj4gICAjaW5jbHVk ZSA8bGludXgvbW0uaD4KPiAgIAo+ICAgLyoqCj4gLSAqIHN0cnVjdCB0dG1fbWVtX3NocmluayAt IGNhbGxiYWNrIHRvIHNocmluayBUVE0gbWVtb3J5IHVzYWdlLgo+IC0gKgo+IC0gKiBAZG9fc2hy aW5rOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uCj4gLSAqCj4gLSAqIEFyZ3VtZW50cyB0byB0aGUg ZG9fc2hyaW5rIGZ1bmN0aW9ucyBhcmUgaW50ZW5kZWQgdG8gYmUgcGFzc2VkIHVzaW5nCj4gLSAq IGluaGVyaXRhbmNlLiBUaGF0IGlzLCB0aGUgYXJndW1lbnQgY2xhc3MgZGVyaXZlcyBmcm9tIHN0 cnVjdCB0dG1fbWVtX3NocmluaywKPiAtICogYW5kIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBjb250 YWluZXJfb2YoKS4KPiAtICovCj4gLQo+IC1zdHJ1Y3QgdHRtX21lbV9zaHJpbmsgewo+IC0JaW50 ICgqZG9fc2hyaW5rKSAoc3RydWN0IHR0bV9tZW1fc2hyaW5rICopOwo+IC19Owo+IC0KPiAtLyoq Cj4gICAgKiBzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgLSBHbG9iYWwgbWVtb3J5IGFjY291bnRpbmcg c3RydWN0dXJlLgo+ICAgICoKPiAgICAqIEBzaHJpbms6IEEgc2luZ2xlIGNhbGxiYWNrIHRvIHNo cmluayBUVE0gbWVtb3J5IHVzYWdlLiBFeHRlbmQgdGhpcwo+IEBAIC03Niw3ICs2Miw3IEBAIHN0 cnVjdCB0dG1fbWVtX3NocmluayB7Cj4gICBzdHJ1Y3QgdHRtX21lbV96b25lOwo+ICAgc3RydWN0 IHR0bV9tZW1fZ2xvYmFsIHsKPiAgIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwo+IC0Jc3RydWN0IHR0 bV9tZW1fc2hyaW5rICpzaHJpbms7Cj4gKwlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqYm9fZ2xvYjsK PiAgIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3dhcF9xdWV1ZTsKPiAgIAlzdHJ1Y3Qgd29y a19zdHJ1Y3Qgd29yazsKPiAgIAlzcGlubG9ja190IGxvY2s7Cj4gQEAgLTkwLDU5ICs3Niw2IEBA IHN0cnVjdCB0dG1fbWVtX2dsb2JhbCB7Cj4gICAjZW5kaWYKPiAgIH07Cj4gICAKPiAtLyoqCj4g LSAqIHR0bV9tZW1faW5pdF9zaHJpbmsgLSBpbml0aWFsaXplIGEgc3RydWN0IHR0bV9tZW1fc2hy aW5rIG9iamVjdAo+IC0gKgo+IC0gKiBAc2hyaW5rOiBUaGUgb2JqZWN0IHRvIGluaXRpYWxpemUu Cj4gLSAqIEBmdW5jOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uCj4gLSAqLwo+IC0KPiAtc3RhdGlj IGlubGluZSB2b2lkIHR0bV9tZW1faW5pdF9zaHJpbmsoc3RydWN0IHR0bV9tZW1fc2hyaW5rICpz aHJpbmssCj4gLQkJCQkgICAgICAgaW50ICgqZnVuYykgKHN0cnVjdCB0dG1fbWVtX3NocmluayAq KSkKPiAtewo+IC0Jc2hyaW5rLT5kb19zaHJpbmsgPSBmdW5jOwo+IC19Cj4gLQo+IC0vKioKPiAt ICogdHRtX21lbV9yZWdpc3Rlcl9zaHJpbmsgLSByZWdpc3RlciBhIHN0cnVjdCB0dG1fbWVtX3No cmluayBvYmplY3QuCj4gLSAqCj4gLSAqIEBnbG9iOiBUaGUgc3RydWN0IHR0bV9tZW1fZ2xvYmFs IG9iamVjdCB0byByZWdpc3RlciB3aXRoLgo+IC0gKiBAc2hyaW5rOiBBbiBpbml0aWFsaXplZCBz dHJ1Y3QgdHRtX21lbV9zaHJpbmsgb2JqZWN0IHRvIHJlZ2lzdGVyLgo+IC0gKgo+IC0gKiBSZXR1 cm5zOgo+IC0gKiAtRUJVU1k6IFRoZXJlJ3MgYWxyZWFkeSBhIGNhbGxiYWNrIHJlZ2lzdGVyZWQu IChNYXkgY2hhbmdlKS4KPiAtICovCj4gLQo+IC1zdGF0aWMgaW5saW5lIGludCB0dG1fbWVtX3Jl Z2lzdGVyX3NocmluayhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCj4gLQkJCQkJICBzdHJ1 Y3QgdHRtX21lbV9zaHJpbmsgKnNocmluaykKPiAtewo+IC0Jc3Bpbl9sb2NrKCZnbG9iLT5sb2Nr KTsKPiAtCWlmIChnbG9iLT5zaHJpbmsgIT0gTlVMTCkgewo+IC0JCXNwaW5fdW5sb2NrKCZnbG9i LT5sb2NrKTsKPiAtCQlyZXR1cm4gLUVCVVNZOwo+IC0JfQo+IC0JZ2xvYi0+c2hyaW5rID0gc2hy aW5rOwo+IC0Jc3Bpbl91bmxvY2soJmdsb2ItPmxvY2spOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAt Cj4gLS8qKgo+IC0gKiB0dG1fbWVtX3VucmVnaXN0ZXJfc2hyaW5rIC0gdW5yZWdpc3RlciBhIHN0 cnVjdCB0dG1fbWVtX3NocmluayBvYmplY3QuCj4gLSAqCj4gLSAqIEBnbG9iOiBUaGUgc3RydWN0 IHR0bV9tZW1fZ2xvYmFsIG9iamVjdCB0byB1bnJlZ2lzdGVyIGZyb20uCj4gLSAqIEBzaHJpbms6 IEEgcHJldmlvdXNseSByZWdpc3RlcnQgc3RydWN0IHR0bV9tZW1fc2hyaW5rIG9iamVjdC4KPiAt ICoKPiAtICovCj4gLQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgdHRtX21lbV91bnJlZ2lzdGVyX3No cmluayhzdHJ1Y3QgdHRtX21lbV9nbG9iYWwgKmdsb2IsCj4gLQkJCQkJICAgICBzdHJ1Y3QgdHRt X21lbV9zaHJpbmsgKnNocmluaykKPiAtewo+IC0Jc3Bpbl9sb2NrKCZnbG9iLT5sb2NrKTsKPiAt CUJVR19PTihnbG9iLT5zaHJpbmsgIT0gc2hyaW5rKTsKPiAtCWdsb2ItPnNocmluayA9IE5VTEw7 Cj4gLQlzcGluX3VubG9jaygmZ2xvYi0+bG9jayk7Cj4gLX0KPiAtCj4gICBleHRlcm4gaW50IHR0 bV9tZW1fZ2xvYmFsX2luaXQoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9iKTsKPiAgIGV4dGVy biB2b2lkIHR0bV9tZW1fZ2xvYmFsX3JlbGVhc2Uoc3RydWN0IHR0bV9tZW1fZ2xvYmFsICpnbG9i KTsKPiAgIGV4dGVybiBpbnQgdHRtX21lbV9nbG9iYWxfYWxsb2Moc3RydWN0IHR0bV9tZW1fZ2xv YmFsICpnbG9iLCB1aW50NjRfdCBtZW1vcnksCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4Cg==