From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: Re: [PATCH 26/33] drm/i915: Track pinned VMA Date: Thu, 11 Aug 2016 13:37:26 +0100 Message-ID: <20160811123726.GK12148@nuc-i3427.alporthouse.com> References: <1470581141-14432-1-git-send-email-chris@chris-wilson.co.uk> <1470581141-14432-27-git-send-email-chris@chris-wilson.co.uk> <1470917924.4722.75.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E1B66E1E9 for ; Thu, 11 Aug 2016 12:37:31 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1470917924.4722.75.camel@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joonas Lahtinen Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBBdWcgMTEsIDIwMTYgYXQgMDM6MTg6NDRQTSArMDMwMCwgSm9vbmFzIExhaHRpbmVu IHdyb3RlOgo+IE9uIHN1LCAyMDE2LTA4LTA3IGF0IDE1OjQ1ICswMTAwLCBDaHJpcyBXaWxzb24g d3JvdGU6Cj4gPiBAQCAtMTYxNiw3ICsxNjE4LDcgQEAgaTkxNV9nZW1fbW1hcF9pb2N0bChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ID4gwqAKPiA+IMKgLyoqCj4gPiDCoCAq IGk5MTVfZ2VtX2ZhdWx0IC0gZmF1bHQgYSBwYWdlIGludG8gdGhlIEdUVAo+ID4gLSAqIEB2bWE6 IFZNQSBpbiBxdWVzdGlvbgo+ID4gKyAqIEBtbTogVk1BIGluIHF1ZXN0aW9uCj4gCj4gc2hvdWxk IGJlIEB2bSBvciB3aGF0ZXZlciB0aGUgY29ycmVjdCBuYW1lLgo+IAo+ID4gwqAgKiBAdm1mOiBm YXVsdCBpbmZvCj4gPiDCoCAqCj4gPiDCoCAqIFRoZSBmYXVsdCBoYW5kbGVyIGlzIHNldCB1cCBi eSBkcm1fZ2VtX21tYXAoKSB3aGVuIGEgb2JqZWN0IGlzIEdUVCBtYXBwZWQKPiA+IEBAIC0xNjMw LDIwICsxNjMyLDIxIEBAIGk5MTVfZ2VtX21tYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKPiA+IMKgICogc3VmZmVyIGlmIHRoZSBHVFQgd29ya2luZyBzZXQgaXMg bGFyZ2Ugb3IgdGhlcmUgYXJlIGZldyBmZW5jZSByZWdpc3RlcnMKPiA+IMKgICogbGVmdC4KPiA+ IMKgICovCj4gPiAtaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h LCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKPiA+ICtpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gCj4gJ3ZtJyBpcyB1c2Vk IGVsc2V3aGVyZSBmb3IgdGhlIGFkZHJlc3Mgc3BhY2UsIG1heWJlICdrdm1hJz8gT3IgJ2FyZWEn Cj4gKHVzZWQgaW4gbGludXgvbW0uaCB0b28gb2NjYXNpb25hbGx5KQoKSSBhbHNvIHdhcyB0ZW1w dGVkIGJ5IGt2bWEuIEJ1dCBhcmVhIGlzIGJldHRlci4KCj4gCj4gPiBAQCAtMTcyMiwxMyArMTcy NiwxMyBAQCBpbnQgaTkxNV9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0 cnVjdCB2bV9mYXVsdCAqdm1mKQo+ID4gwqAJfSBlbHNlIHsKPiA+IMKgCQlpZiAoIW9iai0+ZmF1 bHRfbWFwcGFibGUpIHsKPiA+IMKgCQkJdW5zaWduZWQgbG9uZyBzaXplID0gbWluX3QodW5zaWdu ZWQgbG9uZywKPiA+IC0JCQkJCQnCoMKgwqB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCj4g PiArCQkJCQkJwqDCoMKgdm0tPnZtX2VuZCAtIHZtLT52bV9zdGFydCwKPiA+IMKgCQkJCQkJwqDC oMKgb2JqLT5iYXNlLnNpemUpOwo+ID4gwqAJCQlpbnQgaTsKPiA+IMKgCj4gPiDCoAkJCWZvciAo aSA9IDA7IGkgPCBzaXplID4+IFBBR0VfU0hJRlQ7IGkrKykgewo+ID4gLQkJCQlyZXQgPSB2bV9p bnNlcnRfcGZuKHZtYSwKPiA+IC0JCQkJCQnCoMKgwqDCoCh1bnNpZ25lZCBsb25nKXZtYS0+dm1f c3RhcnQgKyBpICogUEFHRV9TSVpFLAo+ID4gKwkJCQlyZXQgPSB2bV9pbnNlcnRfcGZuKHZtLAo+ ID4gKwkJCQkJCcKgwqDCoMKgKHVuc2lnbmVkIGxvbmcpdm0tPnZtX3N0YXJ0ICsgaSAqIFBBR0Vf U0laRSwKPiAKPiBIbW0sIHZtLT52bV9zdGFydCBpcyBhbHJlYWR5IHVuc2lnbmVkIGxvbmcsIHNv IGNhc3QgY291bGQgYmUKPiBlbGltaW5hdGVkLgo+IAo+ID4gwqAJCQkJCQnCoMKgwqDCoHBmbiAr IGkpOwo+ID4gwqAJCQkJaWYgKHJldCkKPiA+IMKgCQkJCQlicmVhazsKPiA+IEBAIC0xNzM2LDEy ICsxNzQwLDEyIEBAIGludCBpOTE1X2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZt YSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCj4gPiDCoAo+ID4gwqAJCQlvYmotPmZhdWx0X21hcHBh YmxlID0gdHJ1ZTsKPiA+IMKgCQl9IGVsc2UKPiA+IC0JCQlyZXQgPSB2bV9pbnNlcnRfcGZuKHZt YSwKPiA+ICsJCQlyZXQgPSB2bV9pbnNlcnRfcGZuKHZtLAo+ID4gwqAJCQkJCcKgwqDCoMKgKHVu c2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsCj4gPiDCoAkJCQkJwqDCoMKgwqBwZm4g KyBwYWdlX29mZnNldCk7Cj4gPiDCoAl9Cj4gPiDCoGVycl91bnBpbjoKPiA+IC0JaTkxNV9nZW1f b2JqZWN0X2dndHRfdW5waW5fdmlldyhvYmosICZ2aWV3KTsKPiA+ICsJX19pOTE1X3ZtYV91bnBp bih2bWEpOwo+ID4gwqBlcnJfdW5sb2NrOgo+ID4gwqAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gPiDCoGVycl9ycG06Cj4gPiBAQCAtMzE5MCw3ICszMTk0LDcgQEAgaTkxNV9n ZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosIGJvb2wgd3JpdGUpCj4gPiDCoAkJCQkJwqDCoMKgwqBvbGRfd3JpdGVfZG9tYWluKTsKPiA+ IMKgCj4gPiDCoAkvKiBBbmQgYnVtcCB0aGUgTFJVIGZvciB0aGlzIGFjY2VzcyAqLwo+ID4gLQl2 bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChvYmopOwo+ID4gKwl2bWEgPSBpOTE1X2dlbV9vYmpl Y3RfdG9fZ2d0dChvYmosIE5VTEwpOwo+ID4gwqAJaWYgKHZtYSAmJgo+ID4gwqAJwqDCoMKgwqBk cm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkgJiYKPiA+IMKgCcKgwqDCoMKgIWk5MTVf dm1hX2lzX2FjdGl2ZSh2bWEpKQo+ID4gQEAgLTM0MTQsMTEgKzM0MTgsMTIgQEAgcnBtX3B1dDoK PiA+IMKgICogQ2FuIGJlIGNhbGxlZCBmcm9tIGFuIHVuaW50ZXJydXB0aWJsZSBwaGFzZSAobW9k ZXNldHRpbmcpIGFuZCBhbGxvd3MKPiA+IMKgICogYW55IGZsdXNoZXMgdG8gYmUgcGlwZWxpbmVk IChmb3IgcGFnZWZsaXBzKS4KPiA+IMKgICovCj4gPiAtaW50Cj4gPiArc3RydWN0IGk5MTVfdm1h ICoKPiA+IMKgaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiDCoAkJCQnCoMKgwqDCoMKgdTMyIGFsaWdubWVudCwK PiA+IMKgCQkJCcKgwqDCoMKgwqBjb25zdCBzdHJ1Y3QgaTkxNV9nZ3R0X3ZpZXcgKnZpZXcpCj4g PiDCoHsKPiA+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gPiDCoAl1MzIgb2xkX3JlYWRfZG9t YWlucywgb2xkX3dyaXRlX2RvbWFpbjsKPiA+IMKgCWludCByZXQ7Cj4gPiDCoAo+ID4gQEAgLTM0 MzgsMTkgKzM0NDMsMjMgQEAgaTkxNV9nZW1fb2JqZWN0X3Bpbl90b19kaXNwbGF5X3BsYW5lKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiDCoAnCoCovCj4gPiDCoAlyZXQgPSBp OTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2xldmVsKG9iaiwKPiA+IMKgCQkJCQnCoMKgwqDCoMKg wqBIQVNfV1Qob2JqLT5iYXNlLmRldikgPyBJOTE1X0NBQ0hFX1dUIDogSTkxNV9DQUNIRV9OT05F KTsKPiA+IC0JaWYgKHJldCkKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJdm1hID0gRVJSX1BUUihy ZXQpOwo+ID4gwqAJCWdvdG8gZXJyX3VucGluX2Rpc3BsYXk7Cj4gPiArCX0KPiA+IMKgCj4gPiDC oAkvKiBBcyB0aGUgdXNlciBtYXkgbWFwIHRoZSBidWZmZXIgb25jZSBwaW5uZWQgaW4gdGhlIGRp c3BsYXkgcGxhbmUKPiA+IMKgCcKgKiAoZS5nLiBsaWJrbXMgZm9yIHRoZSBib290dXAgc3BsYXNo KSwgd2UgaGF2ZSB0byBlbnN1cmUgdGhhdCB3ZQo+ID4gwqAJwqAqIGFsd2F5cyB1c2UgbWFwX2Fu ZF9mZW5jZWFibGUgZm9yIGFsbCBzY2Fub3V0IGJ1ZmZlcnMuCj4gPiDCoAnCoCovCj4gPiAtCXJl dCA9IGk5MTVfZ2VtX29iamVjdF9nZ3R0X3BpbihvYmosIHZpZXcsIDAsIGFsaWdubWVudCwKPiA+ ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKG9iaiwgdmlldywgMCwgYWxpZ25tZW50 LAo+ID4gwqAJCQkJwqDCoMKgwqDCoMKgwqB2aWV3LT50eXBlID09IEk5MTVfR0dUVF9WSUVXX05P Uk1BTCA/Cj4gPiDCoAkJCQnCoMKgwqDCoMKgwqDCoFBJTl9NQVBQQUJMRSA6IDApOwo+ID4gLQlp ZiAocmV0KQo+ID4gKwlpZiAoSVNfRVJSKHZtYSkpCj4gPiDCoAkJZ290byBlcnJfdW5waW5fZGlz cGxheTsKPiA+IMKgCj4gPiArCVdBUk5fT04ob2JqLT5waW5fZGlzcGxheSA+IGk5MTVfdm1hX3Bp bl9jb3VudCh2bWEpKTsKPiA+ICsKPiA+IMKgCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3Jp dGVfZG9tYWluKG9iaik7Cj4gPiDCoAo+ID4gwqAJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+YmFz ZS53cml0ZV9kb21haW47Cj4gPiBAQCAtMzQ2NiwyMyArMzQ3NSwyMyBAQCBpOTE1X2dlbV9vYmpl Y3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK PiA+IMKgCQkJCQnCoMKgwqDCoG9sZF9yZWFkX2RvbWFpbnMsCj4gPiDCoAkJCQkJwqDCoMKgwqBv bGRfd3JpdGVfZG9tYWluKTsKPiA+IMKgCj4gPiAtCXJldHVybiAwOwo+ID4gKwlyZXR1cm4gdm1h Owo+ID4gwqAKPiA+IMKgZXJyX3VucGluX2Rpc3BsYXk6Cj4gPiDCoAlvYmotPnBpbl9kaXNwbGF5 LS07Cj4gPiAtCXJldHVybiByZXQ7Cj4gPiArCXJldHVybiB2bWE7Cj4gPiDCoH0KPiA+IMKgCj4g PiDCoHZvaWQKPiA+IC1pOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3BsYW5lKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gPiAtCQkJCQnCoGNvbnN0IHN0cnVjdCBp OTE1X2dndHRfdmlldyAqdmlldykKPiA+ICtpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNw bGF5X3BsYW5lKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ID4gwqB7Cj4gPiAtCWlmIChXQVJOX09O KG9iai0+cGluX2Rpc3BsYXkgPT0gMCkpCj4gPiArCWlmIChXQVJOX09OKHZtYS0+b2JqLT5waW5f ZGlzcGxheSA9PSAwKSkKPiA+IMKgCQlyZXR1cm47Cj4gPiDCoAo+ID4gLQlpOTE1X2dlbV9vYmpl Y3RfZ2d0dF91bnBpbl92aWV3KG9iaiwgdmlldyk7Cj4gPiArCXZtYS0+b2JqLT5waW5fZGlzcGxh eS0tOwo+ID4gwqAKPiA+IC0Jb2JqLT5waW5fZGlzcGxheS0tOwo+ID4gKwlpOTE1X3ZtYV91bnBp bih2bWEpOwo+ID4gKwlXQVJOX09OKHZtYS0+b2JqLT5waW5fZGlzcGxheSA+IGk5MTVfdm1hX3Bp bl9jb3VudCh2bWEpKTsKPiA+IMKgfQo+ID4gwqAKPiA+IMKgLyoqCj4gPiBAQCAtMzY3OSwyNyAr MzY4OCwyNSBAQCBlcnI6Cj4gPiDCoAlyZXR1cm4gcmV0Owo+ID4gwqB9Cj4gPiDCoAo+ID4gLWlu dAo+ID4gK3N0cnVjdCBpOTE1X3ZtYSAqCj4gPiDCoGk5MTVfZ2VtX29iamVjdF9nZ3R0X3Bpbihz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gLQkJCcKgY29uc3Qgc3RydWN0IGk5 MTVfZ2d0dF92aWV3ICp2aWV3LAo+ID4gKwkJCcKgY29uc3Qgc3RydWN0IGk5MTVfZ2d0dF92aWV3 ICpnZ3R0X3ZpZXcsCj4gCj4gSG1tLCB3aHkgZGlzdGluY3RpdmUgbmFtZSBjb21wYXJlZCB0byBv dGhlciBwbGFjZXM/IFRoaXMgZnVuY3Rpb24gaGFzCj4gX2dndHRfIGluIHRoZSBuYW1lLCBzbyBz aG91bGQgYmUgaW1wbGljaXQuCj4gCj4gPiDCoAkJCcKgdTY0IHNpemUsCj4gPiDCoAkJCcKgdTY0 IGFsaWdubWVudCwKPiA+IMKgCQkJwqB1NjQgZmxhZ3MpCj4gPiDCoHsKPiAKPiA8U05JUD4KPiAK PiA+IC0vKiBBbGwgdGhlIG5ldyBWTSBzdHVmZiAqLwo+IAo+IE9oIG5vZXMsIHdlIGRlc3Ryb3kg YWxsIHRoZSBuZXcgc3R1ZmYgOlAKPiAKPiA+IEBAIC0zNDksMzAgKzM0OSwzNCBAQCByZWxvY2F0 ZV9lbnRyeV9ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+IMKgCQnCoMKg wqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ID4gwqAJCcKg wqDCoHVpbnQ2NF90IHRhcmdldF9vZmZzZXQpCj4gPiDCoHsKPiA+IC0Jc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IG9iai0+YmFzZS5kZXY7Cj4gPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiA+IMKgCXN0cnVjdCBpOTE1X2dndHQg KmdndHQgPSAmZGV2X3ByaXYtPmdndHQ7Cj4gPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ID4g wqAJdWludDY0X3QgZGVsdGEgPSByZWxvY2F0aW9uX3RhcmdldChyZWxvYywgdGFyZ2V0X29mZnNl dCk7Cj4gPiDCoAl1aW50NjRfdCBvZmZzZXQ7Cj4gPiDCoAl2b2lkIF9faW9tZW0gKnJlbG9jX3Bh Z2U7Cj4gPiDCoAlpbnQgcmV0Owo+ID4gwqAKPiA+ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dn dHRfcGluKG9iaiwgTlVMTCwgMCwgMCwgUElOX01BUFBBQkxFKTsKPiA+ICsJaWYgKElTX0VSUih2 bWEpKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIodm1hKTsKPiA+ICsKPiA+IMKgCXJldCA9IGk5MTVf Z2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIHRydWUpOwo+ID4gwqAJaWYgKHJldCkK PiA+IC0JCXJldHVybiByZXQ7Cj4gPiArCQlnb3RvIHVucGluOwo+ID4gwqAKPiA+IMKgCXJldCA9 IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKPiA+IMKgCWlmIChyZXQpCj4gPiAtCQly ZXR1cm4gcmV0Owo+ID4gKwkJZ290byB1bnBpbjsKPiA+IMKgCj4gPiDCoAkvKiBNYXAgdGhlIHBh Z2UgY29udGFpbmluZyB0aGUgcmVsb2NhdGlvbiB3ZSdyZSBnb2luZyB0byBwZXJmb3JtLsKgwqAq Lwo+ID4gLQlvZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKPiA+ICsJb2Zm c2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ID4gwqAJb2Zmc2V0ICs9IHJlbG9jLT5vZmZzZXQ7Cj4g Cj4gQ291bGQgY29uY2F0ZW5hdGUgdG8gcHJldmlvdXMgbGluZSBub3c7Cj4gCj4gb2Zmc2V0ID0g dm1hLT5ub2RlLnN0YXJ0ICvCoHJlbG9jLT5vZmZzZXQ7Cj4gCj4gPiAtc3RhdGljIHN0cnVjdCBp OTE1X3ZtYSoKPiA+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiA+IMKgaTkxNV9nZW1fZXhl Y2J1ZmZlcl9wYXJzZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gPiDCoAkJCcKg wqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqc2hhZG93X2V4ZWNfZW50cnksCj4g PiDCoAkJCcKgwqBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYmF0Y2hfb2JqLAo+ID4gQEAg LTEzMDUsMzEgKzEzMTEsMzAgQEAgaTkxNV9nZW1fZXhlY2J1ZmZlcl9wYXJzZShzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gPiDCoAkJCQnCoMKgwqDCoMKgwqBiYXRjaF9zdGFydF9v ZmZzZXQsCj4gPiDCoAkJCQnCoMKgwqDCoMKgwqBiYXRjaF9sZW4sCj4gPiDCoAkJCQnCoMKgwqDC oMKgwqBpc19tYXN0ZXIpOwo+ID4gLQlpZiAocmV0KQo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlp ZiAocmV0ID09IC1FQUNDRVMpIC8qIHVuaGFuZGxlZCBjaGFpbmVkIGJhdGNoICovCj4gPiArCQkJ dm1hID0gTlVMTDsKPiA+ICsJCWVsc2UKPiA+ICsJCQl2bWEgPSBFUlJfUFRSKHJldCk7Cj4gPiDC oAkJZ290byBlcnI7Cj4gPiArCX0KPiA+IMKgCj4gPiAtCXJldCA9IGk5MTVfZ2VtX29iamVjdF9n Z3R0X3BpbihzaGFkb3dfYmF0Y2hfb2JqLCBOVUxMLCAwLCAwLCAwKTsKPiA+IC0JaWYgKHJldCkK PiA+ICsJdm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKHNoYWRvd19iYXRjaF9vYmosIE5V TEwsIDAsIDAsIDApOwo+ID4gKwlpZiAoSVNfRVJSKHZtYSkpIHsKPiA+ICsJCXJldCA9IFBUUl9F UlIodm1hKTsKPiAKPiBIbW0sICdlcnInIGxhYmVsIG5vIGxvbmdlciBjYXJlcyBhYm91dCByZXQs IHNvIHRoaXMgaXMgcmVkdW5kYW50LiBPcgo+IHNob3VsZCB0aGUgcmV0LXRvLXZtYSB0cmFuc2xh dGlvbiBiZWVuIGtlcHQgYXQgdGhlIGVuZD8KPiAKPiA+IMKgCQlnb3RvIGVycjsKPiA+IC0KPiA+ IC0JaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKHNoYWRvd19iYXRjaF9vYmopOwo+ID4gKwl9 Cj4gPiDCoAo+ID4gwqAJbWVtc2V0KHNoYWRvd19leGVjX2VudHJ5LCAwLCBzaXplb2YoKnNoYWRv d19leGVjX2VudHJ5KSk7Cj4gPiDCoAo+ID4gLQl2bWEgPSBpOTE1X2dlbV9vYmpfdG9fZ2d0dChz aGFkb3dfYmF0Y2hfb2JqKTsKPiA+IMKgCXZtYS0+ZXhlY19lbnRyeSA9IHNoYWRvd19leGVjX2Vu dHJ5Owo+ID4gwqAJdm1hLT5leGVjX2VudHJ5LT5mbGFncyA9IF9fRVhFQ19PQkpFQ1RfSEFTX1BJ TjsKPiA+IMKgCWk5MTVfZ2VtX29iamVjdF9nZXQoc2hhZG93X2JhdGNoX29iaik7Cj4gPiDCoAls aXN0X2FkZF90YWlsKCZ2bWEtPmV4ZWNfbGlzdCwgJmViLT52bWFzKTsKPiA+IMKgCj4gPiAtCXJl dHVybiB2bWE7Cj4gPiAtCj4gPiDCoGVycjoKPiA+IMKgCWk5MTVfZ2VtX29iamVjdF91bnBpbl9w YWdlcyhzaGFkb3dfYmF0Y2hfb2JqKTsKPiA+IC0JaWYgKHJldCA9PSAtRUFDQ0VTKSAvKiB1bmhh bmRsZWQgY2hhaW5lZCBiYXRjaCAqLwo+ID4gLQkJcmV0dXJuIE5VTEw7Cj4gPiAtCWVsc2UKPiA+ IC0JCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gPiArCXJldHVybiB2bWE7Cj4gPiDCoH0KPiA+IMKg Cj4gCj4gPFNOSVA+Cj4gCj4gPiBAQCAtNDMyLDEzICs0MzIsNyBAQCBib29sCj4gPiDCoGk5MTVf Z2VtX29iamVjdF9waW5fZmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiA+ IMKgewo+ID4gwqAJaWYgKG9iai0+ZmVuY2VfcmVnICE9IEk5MTVfRkVOQ0VfUkVHX05PTkUpIHsK PiA+IC0JCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUob2JqLT5i YXNlLmRldik7Cj4gPiAtCQlzdHJ1Y3QgaTkxNV92bWEgKmdndHRfdm1hID0gaTkxNV9nZW1fb2Jq X3RvX2dndHQob2JqKTsKPiA+IC0KPiA+IC0JCVdBUk5fT04oIWdndHRfdm1hIHx8Cj4gPiAtCQkJ ZGV2X3ByaXYtPmZlbmNlX3JlZ3Nbb2JqLT5mZW5jZV9yZWddLnBpbl9jb3VudCA+Cj4gPiAtCQkJ aTkxNV92bWFfcGluX2NvdW50KGdndHRfdm1hKSk7Cj4gCj4gSXMgdGhpcyBXQVJOX09OIGRlbGli ZXJhdGVseSByZW1vdmVkLCBub3Qgd29ydGh5IEdFTV9CVUdfT04/CgpUaGUgcGluX2NvdW50IGNo ZWNrIGlzIG5vdCBzdHJpY3RseSB0cnVlIGZvciBhbGwgZnV0dXJlcywgYW5kIHRoZQpnZ3R0X3Zt YSBjYW4ganVzdCBleHBsb2RlIGlmIE5VTEwgdW50aWwgaXQgdG9vIGlzIHJlcGxhY2VkIGluIGEg ZmV3CnBhdGNoZXMgdGltZS4KCj4gPiAtCQlkZXZfcHJpdi0+ZmVuY2VfcmVnc1tvYmotPmZlbmNl X3JlZ10ucGluX2NvdW50Kys7Cj4gPiArCQl0b19pOTE1KG9iai0+YmFzZS5kZXYpLT5mZW5jZV9y ZWdzW29iai0+ZmVuY2VfcmVnXS5waW5fY291bnQrKzsKPiAKPiBUaGlzIGlzIG5vdCB0aGUgbW9z dCByZWFkYWJsZSBsaW5lIG9mIGNvZGUgb25lIGNhbiBpbWFnaW5lLiBkZXZfcHJpdgo+IGFsaWFz IGRvZXMgbWFrZSByZWFkYWJpbGl0eSBiZXR0ZXIgb2NjYXNpb25hbGx5LgoKVGhpcyBqdXN0IG1h a2VzIGFub3RoZXIgcGF0Y2ggc21hbGxlci4gSSd2ZSBub3QgcXVhbG1zIGFib3V0IHRoaXMgbGlu ZQo7KQoKPiA+IEBAIC0zMzUxLDE0ICszMzUxLDEwIEBAIF9faTkxNV9nZW1fdm1hX2NyZWF0ZShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ID4gwqAKPiA+IMKgCUdFTV9CVUdfT04o dm0tPmNsb3NlZCk7Cj4gPiDCoAo+ID4gLQlpZiAoV0FSTl9PTihpOTE1X2lzX2dndHQodm0pICE9 ICEhdmlldykpCj4gPiAtCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+IC0KPiA+IMKgCXZt YSA9IGttZW1fY2FjaGVfemFsbG9jKHRvX2k5MTUob2JqLT5iYXNlLmRldiktPnZtYXMsIEdGUF9L RVJORUwpOwo+ID4gwqAJaWYgKHZtYSA9PSBOVUxMKQo+ID4gwqAJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOwo+ID4gwqAKPiA+IC0JSU5JVF9MSVNUX0hFQUQoJnZtYS0+b2JqX2xpbmspOwo+IAo+ IFRoaXMgZGlzYXBwZWFycyBjb21wbGV0ZWx5PwoKSXQgd2FzIG5ldmVyIHJlcXVpcmVkLgogCj4g PiBAQCAtMzM3OCw1NiArMzM3Myw3NiBAQCBfX2k5MTVfZ2VtX3ZtYV9jcmVhdGUoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiA+ICtzdGF0aWMgaW5saW5lIGJvb2wgdm1hX21hdGNo ZXMoc3RydWN0IGk5MTVfdm1hICp2bWEsCj4gPiArCQkJwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPiA+ICsJCQnCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBp OTE1X2dndHRfdmlldyAqdmlldykKPiAKPiBGdW5jdGlvbiBuYW1lIGlzIG5vdCBjbGVhcmVzdC4g QnV0IEkgY2FuIG5vdCBzdWdnZXN0IGEgYmV0dGVyIG9uZSBvZmYKPiB0aGUgdG9wIG9mIG15IGhl YWQuCj4gwqAKPiA+IMKgc3RhdGljIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKgo+ID4g wqBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAo+ID4gLQkJCcKgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnNyYywKPiA+IC0JCQnC oHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ID4gKwkJCcKgc3RydWN0IGk5MTVfdm1h ICp2bWEpCj4gPiDCoHsKPiA+IMKgCXN0cnVjdCBpOTE1X2dndHQgKmdndHQgPSAmZGV2X3ByaXYt PmdndHQ7Cj4gPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmM7Cj4gPiDCoAlzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpkc3Q7Cj4gPiAtCXN0cnVjdCBpOTE1X3ZtYSAqdm1h ID0gTlVMTDsKPiA+IMKgCWludCBudW1fcGFnZXM7Cj4gPiDCoAlib29sIHVzZV9nZ3R0Owo+ID4g wqAJaW50IGkgPSAwOwo+ID4gwqAJdTY0IHJlbG9jX29mZnNldDsKPiA+IMKgCj4gPiAtCWlmIChz cmMgPT0gTlVMTCB8fCBzcmMtPnBhZ2VzID09IE5VTEwpCj4gPiArCWlmICghdm1hKQo+ID4gKwkJ cmV0dXJuIE5VTEw7Cj4gPiArCj4gPiArCXNyYyA9IHZtYS0+b2JqOwo+ID4gKwlpZiAoIXNyYy0+ cGFnZXMpCj4gPiDCoAkJcmV0dXJuIE5VTEw7Cj4gPiDCoAo+ID4gwqAJbnVtX3BhZ2VzID0gc3Jj LT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiA+IMKgCj4gPiDCoAlkc3QgPSBrbWFsbG9jKHNp emVvZigqZHN0KSArIG51bV9wYWdlcyAqIHNpemVvZih1MzIgKiksIEdGUF9BVE9NSUMpOwo+ID4g LQlpZiAoZHN0ID09IE5VTEwpCj4gPiArCWlmICghZHN0KQo+ID4gwqAJCXJldHVybiBOVUxMOwo+ ID4gwqAKPiA+IC0JaWYgKGk5MTVfZ2VtX29ial9ib3VuZChzcmMsIHZtKSkKPiA+IC0JCWRzdC0+ Z3R0X29mZnNldCA9IGk5MTVfZ2VtX29ial9vZmZzZXQoc3JjLCB2bSk7Cj4gPiAtCWVsc2UKPiA+ IC0JCWRzdC0+Z3R0X29mZnNldCA9IC0xOwo+IAo+IFdoYXQgd2FzIHRoZSBwdXJwb3NlIG9mIHRo aXMgbGluZSBwcmV2aW91c2x5LCB0aGUgY2FsY3VsYXRpb25zIHdvdWxkCj4gZ2V0IG1hamVzdGlj YWxseSBtZXNzZWQgdXA/CgpObyBwdXJwb3NlLiBJdCB3b3VsZCBoYXZlIHRha2VuIHF1aXRlIGEg Yml0IG9mIGFidXNlIHRvIGJlIGFibGUgdG8KdHJpZ2dlciBpdCwgYW5kIGNlcnRhaW5seSBub3Ro aW5nIHJlbGV2YW50IHRvIHRoZSBoYW5nLgogCj4gPiBAQCAtMTAzNSwxMSArMTAyOSw4IEBAIHN0 YXRpYyB2b2lkIGk5MTVfZ2VtX3JlY29yZF9yaW5ncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCj4gPiDCoAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4g PiDCoAlpbnQgaSwgY291bnQ7Cj4gPiDCoAo+ID4gLQlpZiAoZGV2X3ByaXYtPnNlbWFwaG9yZSkg ewo+ID4gLQkJZXJyb3ItPnNlbWFwaG9yZSA9Cj4gPiAtCQkJaTkxNV9lcnJvcl9nZ3R0X29iamVj dF9jcmVhdGUoZGV2X3ByaXYsCj4gPiAtCQkJCQkJwqDCoMKgwqDCoMKgZGV2X3ByaXYtPnNlbWFw aG9yZS0+b2JqKTsKPiA+IC0JfQo+ID4gKwllcnJvci0+c2VtYXBob3JlID0KPiA+ICsJCWk5MTVf ZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXZfcHJpdiwgZGV2X3ByaXYtPnNlbWFwaG9yZSk7Cj4gCj4g Tm90IHN1cmUgaWYgSSBsaWtlIGhpZGluZyB0aGUgTlVMTCB0b2xlcmFuY3kgaW5zaWRlIHRoZSBm dW5jdGlvbi4KCk90b2gsIGl0IG1ha2VzIGl0IGEgbG90IGNsZWFuZXIuCiAKPiA+IEBAIC0yMjkx LDcgKzIyOTMsOCBAQCB2b2lkIGludGVsX3VucGluX2ZiX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwgdW5zaWduZWQgaW50IHJvdGF0aW9uKQo+ID4gwqAJaWYgKHZpZXcudHlwZSA9PSBJ OTE1X0dHVFRfVklFV19OT1JNQUwpCj4gPiDCoAkJaTkxNV9nZW1fb2JqZWN0X3VucGluX2ZlbmNl KG9iaik7Cj4gPiDCoAo+ID4gLQlpOTE1X2dlbV9vYmplY3RfdW5waW5fZnJvbV9kaXNwbGF5X3Bs YW5lKG9iaiwgJnZpZXcpOwo+ID4gKwl2bWEgPSBpOTE1X2dlbV9vYmplY3RfdG9fZ2d0dChvYmos ICZ2aWV3KTsKPiAKPiBHRU1fQlVHX09OKCF2bWEpPwoKVGhlIGdvYWwgYW5kIG9yaWdpbmFsIHBh dGNoIHBhc3NlZCBpbiB0aGUgdm1hIHRvIGZyZWUuIEkgZ2F2ZSB1cAp0cmFja2luZyB0aGF0IHBh dGNoIHRocm91Z2ggdGhlIG9uZ29pbmcgYXRvbWljIHRyYW5zaXRpb24uCgo+IFRoaXMgbWlnaHQg YmUgdGhlIG9ubHkgYWNjZXB0YWJsZSB1c2Ugb2YgaWYgKCkgaW4gdGVhcmRvd24gcGF0aC4KPiAK PiBJIGhvcGUgdGhlcmUgaXMgYW4gZXhjZWxsZW50IHJldmlzaW9uIGxpc3RpbmcgaW4gdGhlIG5l eHQgaXRlcmF0aW9uLgo+IFRoaXMgd2FzIGEgcGFpbiB0byBnbyB0aHJvdWdoLgoKdk46IEFkZHJl c3Mgc29tZSBvZiBKb29uYXMncyBzdHlsaXN0aWMgbml0cGlja3MuCi1DaHJpcwoKLS0gCkNocmlz IFdpbHNvbiwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5vbG9neSBDZW50cmUKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==