From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: Re: [PATCH 15/33] drm/i915: Track pinned vma inside guc Date: Thu, 11 Aug 2016 17:19:43 +0100 Message-ID: <82c1fa33-6f73-1871-1afd-61e7e777ea75@intel.com> References: <1470581141-14432-1-git-send-email-chris@chris-wilson.co.uk> <1470581141-14432-16-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id F15556E962 for ; Thu, 11 Aug 2016 16:19:45 +0000 (UTC) In-Reply-To: <1470581141-14432-16-git-send-email-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 T24gMDcvMDgvMTYgMTU6NDUsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTaW5jZSB0aGUgZ3VjIGFs bG9jYXRlcyBhbmQgcGlucyBhbmQgb2JqZWN0IGludG8gdGhlIEdHVFQgZm9yIGl0cyB1c2FnZSwK PiBpdCBpcyBtb3JlIG5hdHVyYWwgdG8gdXNlIHRoYXQgcGlubmVkIFZNQSBhcyBvdXIgcmVzb3Vy Y2UgY29va2llLgoKV2VsbCBpdCBpc24ndCByZWFsbHkgYW55IG1vcmUgbmF0dXJhbCwgYXMgd2Ug aGFyZGx5IGV2ZXIgY2FyZSBhYm91dCB0aGUgCm1hcHBpbmcsIHdoZXJlYXMgd2UgbW9yZSBmcmVx dWVudGx5IHdvcmsgd2l0aCB0aGUgb2JqZWN0LiBTbyBpdCBqdXN0IApzZWVtcyB0byBpbnRyb2R1 Y2UgYW4gdW5uZWNlc3NhcnkgZXh0cmEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gYXMgd2UgZ28gCmZy b20gdm1hIHRvIG9iamVjdCB0byB3aGF0ZXZlciB3ZSByZWFsbHkgd2FudC4KCj4gU2lnbmVkLW9m Zi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICB8ICAxMCArLS0KPiAgZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIHwgMTMxICsrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAg ICAgICAgICB8ICAgOSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVy LmMgICAgfCAgIDcgKy0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCA4MCBk ZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggYjQx YzA1NzY3ZGVmLi5lMmE5ZmMzNTNlZjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kZWJ1Z2ZzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVn ZnMuYwo+IEBAIC0yNTI0LDE1ICsyNTI0LDE1IEBAIHN0YXRpYyBpbnQgaTkxNV9ndWNfbG9nX2R1 bXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ICAJc3RydWN0IGRybV9pbmZvX25v ZGUgKm5vZGUgPSBtLT5wcml2YXRlOwo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUt Pm1pbm9yLT5kZXY7Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbG9nX29iaiA9IGRldl9w cml2LT5ndWMubG9nX29iajsKPiAtCXUzMiAqbG9nOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iajsKCkl0IGlzIGNvbXBsZXRlbHkgdW5uZWNlc3NhcnkgKGFuZCB1bmRlc2lyYWJs ZSkgdG8gcmVuYW1lIHRoaXMgbG9jYWwuIEEgCnZhcmlhYmxlIGNhbGxlZCAnb2JqJyBjb3VsZCBi ZSBhbnkgc29ydCBvZiBhbiBvYmplY3QsIGJ1dCB3ZSBrbm93IHRoYXQgCndlIGFyZSBkZWFsaW5n IHdpdGggKmhlcmUqIGlzIGEgKnNwZWNpZmljKiBvYmplY3QgdGhhdCBob2xkcyB0aGUgcGFnZXMg Cm9mIEd1QyBsb2cgZGF0YSwgc28gaXQgc2hvdWxkIGhhdmUgaXQgYSBuYW1lIHRoYXQgdGVsbHMg dXMgc28uCgo+ICAJaW50IGkgPSAwLCBwZzsKPgo+IC0JaWYgKCFsb2dfb2JqKQo+ICsJaWYgKCFk ZXZfcHJpdi0+Z3VjLmxvZykKPiAgCQlyZXR1cm4gMDsKPgo+IC0JZm9yIChwZyA9IDA7IHBnIDwg bG9nX29iai0+YmFzZS5zaXplIC8gUEFHRV9TSVpFOyBwZysrKSB7Cj4gLQkJbG9nID0ga21hcF9h dG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGxvZ19vYmosIHBnKSk7Cj4gKwlvYmogPSBk ZXZfcHJpdi0+Z3VjLmxvZy0+b2JqOwo+ICsJZm9yIChwZyA9IDA7IHBnIDwgb2JqLT5iYXNlLnNp emUgLyBQQUdFX1NJWkU7IHBnKyspIHsKPiArCQl1MzIgKmxvZyA9IGttYXBfYXRvbWljKGk5MTVf Z2VtX29iamVjdF9nZXRfcGFnZShvYmosIHBnKSk7Cj4KPiAgCQlmb3IgKGkgPSAwOyBpIDwgUEFH RV9TSVpFIC8gc2l6ZW9mKHUzMik7IGkgKz0gNCkKPiAgCQkJc2VxX3ByaW50ZihtLCAiMHglMDh4 IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1 Y19zdWJtaXNzaW9uLmMKPiBpbmRleCAwM2E1Y2VmMzUzZWIuLmY1NmQ2ODE3M2FlNiAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKPiBAQCAtMTgzLDcg KzE4Myw3IEBAIHN0YXRpYyBpbnQgZ3VjX3VwZGF0ZV9kb29yYmVsbF9pZChzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsCj4gIAkJCQkgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCwKPiAgCQkJ CSAgdTE2IG5ld19pZCkKPiAgewo+IC0Jc3RydWN0IHNnX3RhYmxlICpzZyA9IGd1Yy0+Y3R4X3Bv b2xfb2JqLT5wYWdlczsKPiArCXN0cnVjdCBzZ190YWJsZSAqc2cgPSBndWMtPmN0eF9wb29sLT5v YmotPnBhZ2VzOwoKSGktaG8sIGhpLWhvLCBpdCdzIG9mZiB0byBSQU0gd2UgZ28uCk5vdGljZSB0 aGUgZXh0cmEgJy0+JwoKPiAgCXZvaWQgKmRvb3JiZWxsX2JpdG1hcCA9IGd1Yy0+ZG9vcmJlbGxf Yml0bWFwOwo+ICAJc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsKPiAgCXN0cnVj dCBndWNfY29udGV4dF9kZXNjIGRlc2M7Cj4gQEAgLTMyNSw4ICszMjUsOCBAQCBzdGF0aWMgdm9p ZCBndWNfaW5pdF9wcm9jX2Rlc2Moc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICBzdGF0aWMgdm9p ZCBndWNfaW5pdF9jdHhfZGVzYyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gIAkJCSAgICAgIHN0 cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKmNsaWVudF9vYmogPSBjbGllbnQtPmNsaWVudF9vYmo7Cj4gIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+ICsJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKmNsaWVudF9vYmogPSBjbGllbnQtPmNsaWVudC0+b2JqOwoKKlVn aCoKCj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7Cj4gIAlzdHJ1Y3QgaTkxNV9n ZW1fY29udGV4dCAqY3R4ID0gY2xpZW50LT5vd25lcjsKPiAgCXN0cnVjdCBndWNfY29udGV4dF9k ZXNjIGRlc2M7Cj4gQEAgLTM4MCw3ICszODAsNyBAQCBzdGF0aWMgdm9pZCBndWNfaW5pdF9jdHhf ZGVzYyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gIAkgKiBUaGUgZG9vcmJlbGwsIHByb2Nlc3Mg ZGVzY3JpcHRvciwgYW5kIHdvcmtxdWV1ZSBhcmUgYWxsIHBhcnRzCj4gIAkgKiBvZiB0aGUgY2xp ZW50IG9iamVjdCwgd2hpY2ggdGhlIEd1QyB3aWxsIHJlZmVyZW5jZSB2aWEgdGhlIEdHVFQKPiAg CSAqLwo+IC0JZ2Z4X2FkZHIgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoY2xpZW50X29iaik7 Cj4gKwlnZnhfYWRkciA9IGNsaWVudC0+Y2xpZW50LT5ub2RlLnN0YXJ0OwoKSW5zdWZmaWNpZW50 IGFic3RyYWN0aW9uLgoKSWYgeW91IHdhbnQgVk1BcyB0byBiZSBhIHByaW1hcnkgc29ydCBvZiB0 aGluZyBmb3IgY29kZSB0aGF0IGlzbid0IApwcmltYXJpbHkgYWJvdXQgbWFwcGluZ3MgdG8gbm9u ZXRoZWxlc3Mgd29yayB3aXRoLCB0aGVyZSBzaG91bGQgYmUgYW4gCmFic3RyYWN0aW9uIGxheWVy IChtYWNyb3Mgb3IgdHJpdmlhbCBpbmxpbmUgYWNjZXNzb3JzKSB0byByZXRyaWV2ZSB0aGUgCnRo aW5ncyB0aGF0IGNvZGUgY2FyZXMgYWJvdXQgZnJvbSB0aGUgJ1ZNQScuCgoJZ2Z4X2FkZHIgPSBp OTE1X3ZtYV9nZ3R0X2FkZHIodm1hKTsJLy8gT3Igc29tZXRoaW5nCgpHdUMgY29kZSBzaG91bGRu J3QgaGF2ZSB0byBtZW50aW9uICdub2RlJyBvciBhbnkgb3RoZXIgb2YgdGhlIGludGVybmFscyAK b2YgYSBWTUEgb3IgdGhlIHVuZGVybHlpbmcgRFJNIG1lbW9yeS1tYW5hZ2VyIHN0cnVjdHVyZS4K Cj4gIAlkZXNjLmRiX3RyaWdnZXJfcGh5ID0gc2dfZG1hX2FkZHJlc3MoY2xpZW50X29iai0+cGFn ZXMtPnNnbCkgKwo+ICAJCQkJY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7Cj4gIAlkZXNjLmRiX3Ry aWdnZXJfY3B1ID0gKHVpbnRwdHJfdCljbGllbnQtPmNsaWVudF9iYXNlICsKPiBAQCAtMzk3LDcg KzM5Nyw3IEBAIHN0YXRpYyB2b2lkIGd1Y19pbml0X2N0eF9kZXNjKHN0cnVjdCBpbnRlbF9ndWMg Kmd1YywKPiAgCWRlc2MuZGVzY19wcml2YXRlID0gKHVpbnRwdHJfdCljbGllbnQ7Cj4KPiAgCS8q IFBvb2wgY29udGV4dCBpcyBwaW5uZWQgYWxyZWFkeSAqLwo+IC0Jc2cgPSBndWMtPmN0eF9wb29s X29iai0+cGFnZXM7Cj4gKwlzZyA9IGd1Yy0+Y3R4X3Bvb2wtPm9iai0+cGFnZXM7Cj4gIAlzZ19w Y29weV9mcm9tX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2YoZGVzYyks Cj4gIAkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5jdHhfaW5kZXgpOwo+ICB9Cj4gQEAg LTQxMCw3ICs0MTAsNyBAQCBzdGF0aWMgdm9pZCBndWNfZmluaV9jdHhfZGVzYyhzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsCj4KPiAgCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKPgo+IC0J c2cgPSBndWMtPmN0eF9wb29sX29iai0+cGFnZXM7Cj4gKwlzZyA9IGd1Yy0+Y3R4X3Bvb2wtPm9i ai0+cGFnZXM7Cj4gIAlzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZk ZXNjLCBzaXplb2YoZGVzYyksCj4gIAkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5jdHhf aW5kZXgpOwo+ICB9Cj4gQEAgLTQ5Miw3ICs0OTIsNyBAQCBzdGF0aWMgdm9pZCBndWNfYWRkX3dv cmtxdWV1ZV9pdGVtKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmdjLAo+ICAJLyogV1Egc3RhcnRz IGZyb20gdGhlIHBhZ2UgYWZ0ZXIgZG9vcmJlbGwgLyBwcm9jZXNzX2Rlc2MgKi8KPiAgCXdxX3Bh Z2UgPSAod3Ffb2ZmICsgR1VDX0RCX1NJWkUpID4+IFBBR0VfU0hJRlQ7Cj4gIAl3cV9vZmYgJj0g UEFHRV9TSVpFIC0gMTsKPiAtCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0 X3BhZ2UoZ2MtPmNsaWVudF9vYmosIHdxX3BhZ2UpKTsKPiArCWJhc2UgPSBrbWFwX2F0b21pYyhp OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoZ2MtPmNsaWVudC0+b2JqLCB3cV9wYWdlKSk7Cj4gIAl3 cWkgPSAoc3RydWN0IGd1Y193cV9pdGVtICopKChjaGFyICopYmFzZSArIHdxX29mZik7Cj4KPiAg CS8qIE5vdyBmaWxsIGluIHRoZSA0LXdvcmQgd29yayBxdWV1ZSBpdGVtICovCj4gQEAgLTYxMSw4 ICs2MTEsOCBAQCBzdGF0aWMgdm9pZCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpycSkKPiAgICovCj4KPiAgLyoqCj4gLSAqIGdlbV9hbGxvY2F0ZV9ndWNfb2Jq KCkgLSBBbGxvY2F0ZSBnZW0gb2JqZWN0IGZvciBHdUMgdXNhZ2UKPiAtICogQGRldl9wcml2Oglk cml2ZXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQo+ICsgKiBndWNfYWxsb2NhdGVfdm1hKCkgLSBB bGxvY2F0ZSBhIEdHVFQgVk1BIGZvciBHdUMgdXNhZ2UKPiArICogQGd1YzoJdGhlIGd1Ywo+ICAg KiBAc2l6ZToJc2l6ZSBvZiBvYmplY3QKPiAgICoKPiAgICogVGhpcyBpcyBhIHdyYXBwZXIgdG8g Y3JlYXRlIGEgZ2VtIG9iai4gSW4gb3JkZXIgdG8gdXNlIGl0IGluc2lkZSBHdUMsIHRoZQo+IEBA IC02MjEsNDUgKzYyMSw0OSBAQCBzdGF0aWMgdm9pZCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiAgICoKPiAgICogUmV0dXJuOglBIGRybV9pOTE1X2dl bV9vYmplY3QgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIE5VTEwuCgpUaGlzIGNvbW1lbnQgaXMg bm8gbG9uZ2VyIGNvcnJlY3QuCgo+ICAgKi8KPiAtc3RhdGljIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICoKPiAtZ2VtX2FsbG9jYXRlX2d1Y19vYmooc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCB1MzIgc2l6ZSkKPiArc3RhdGljIHN0cnVjdCBpOTE1X3ZtYSAqZ3VjX2FsbG9j YXRlX3ZtYShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiBzaXplKQo+ICB7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwo+ICAJc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJ aW50IHJldDsKPgo+ICAJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZSgmZGV2X3ByaXYtPmRy bSwgc2l6ZSk7Cj4gIAlpZiAoSVNfRVJSKG9iaikpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gKwkJcmV0 dXJuIEVSUl9DQVNUKG9iaik7Cj4KPiAtCWlmIChpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9i aikpIHsKPiAtCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4g LQl9Cj4gKwl2bWEgPSBpOTE1X3ZtYV9jcmVhdGUob2JqLCAmZGV2X3ByaXYtPmdndHQuYmFzZSwg TlVMTCk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpCj4gKwkJZ290byBlcnI7Cj4KPiAtCWlmIChpOTE1 X2dlbV9vYmplY3RfZ2d0dF9waW4ob2JqLCBOVUxMLCAwLCBQQUdFX1NJWkUsCj4gLQkJCQkgICAg IFBJTl9PRkZTRVRfQklBUyB8IEdVQ19XT1BDTV9UT1ApKSB7Cj4gLQkJaTkxNV9nZW1fb2JqZWN0 X3B1dChvYmopOwo+IC0JCXJldHVybiBOVUxMOwo+ICsJcmV0ID0gaTkxNV92bWFfcGluKHZtYSwg MCwgUEFHRV9TSVpFLAo+ICsJCQkgICBQSU5fR0xPQkFMIHwgUElOX09GRlNFVF9CSUFTIHwgR1VD X1dPUENNX1RPUCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJdm1hID0gRVJSX1BUUihyZXQpOwo+ICsJ CWdvdG8gZXJyOwo+ICAJfQo+Cj4gIAkvKiBJbnZhbGlkYXRlIEd1QyBUTEIgdG8gbGV0IEd1QyB0 YWtlIHRoZSBsYXRlc3QgdXBkYXRlcyB0byBHVFQuICovCj4gIAlJOTE1X1dSSVRFKEdFTjhfR1RD UiwgR0VOOF9HVENSX0lOVkFMSURBVEUpOwo+Cj4gLQlyZXR1cm4gb2JqOwo+ICsJcmV0dXJuIHZt YTsKPiArCj4gK2VycjoKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKPiArCXJldHVybiB2 bWE7Cj4gIH0KPgo+ICAvKioKPiAtICogZ2VtX3JlbGVhc2VfZ3VjX29iaigpIC0gUmVsZWFzZSBn ZW0gb2JqZWN0IGFsbG9jYXRlZCBmb3IgR3VDIHVzYWdlCj4gLSAqIEBvYmo6CWdlbSBvYmogdG8g YmUgcmVsZWFzZWQKPiArICogZ3VjX3JlbGVhc2Vfdm1hKCkgLSBSZWxlYXNlIGdlbSBvYmplY3Qg YWxsb2NhdGVkIGZvciBHdUMgdXNhZ2UKPiArICogQHZtYToJZ2VtIG9iaiB0byBiZSByZWxlYXNl ZAo+ICAgKi8KPiAtc3RhdGljIHZvaWQgZ2VtX3JlbGVhc2VfZ3VjX29iaihzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICtzdGF0aWMgdm9pZCBndWNfcmVsZWFzZV92bWEoc3RydWN0 IGk5MTVfdm1hICp2bWEpCj4gIHsKPiAtCWlmICghb2JqKQo+ICsJaWYgKCF2bWEpCj4gIAkJcmV0 dXJuOwo+Cj4gLQlpZiAoaTkxNV9nZW1fb2JqX2lzX3Bpbm5lZChvYmopKQo+IC0JCWk5MTVfZ2Vt X29iamVjdF9nZ3R0X3VucGluKG9iaik7Cj4gLQo+IC0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmop Owo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQodm1hLT5v YmopOwo+ICB9Cj4KPiAgc3RhdGljIHZvaWQKPiBAQCAtNjg2LDcgKzY5MCw3IEBAIGd1Y19jbGll bnRfZnJlZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gIAkJa3VubWFwKGtt YXBfdG9fcGFnZShjbGllbnQtPmNsaWVudF9iYXNlKSk7Cj4gIAl9Cj4KPiAtCWdlbV9yZWxlYXNl X2d1Y19vYmooY2xpZW50LT5jbGllbnRfb2JqKTsKPiArCWd1Y19yZWxlYXNlX3ZtYShjbGllbnQt PmNsaWVudCk7Cj4KPiAgCWlmIChjbGllbnQtPmN0eF9pbmRleCAhPSBHVUNfSU5WQUxJRF9DVFhf SUQpIHsKPiAgCQlndWNfZmluaV9jdHhfZGVzYyhndWMsIGNsaWVudCk7Cj4gQEAgLTc1Nyw3ICs3 NjEsNyBAQCBndWNfY2xpZW50X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwKPiAgewo+ICAJc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50Owo+ICAJc3RydWN0IGlu dGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gIAl1aW50MTZfdCBkYl9pZDsK Pgo+ICAJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwo+IEBA IC03NzcsMTMgKzc4MSwxMyBAQCBndWNfY2xpZW50X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwKPiAgCX0KPgo+ICAJLyogVGhlIGZpcnN0IHBhZ2UgaXMgZG9vcmJlbGwv cHJvY19kZXNjLiBUd28gZm9sbG93ZWQgcGFnZXMgYXJlIHdxLiAqLwo+IC0Jb2JqID0gZ2VtX2Fs bG9jYXRlX2d1Y19vYmooZGV2X3ByaXYsIEdVQ19EQl9TSVpFICsgR1VDX1dRX1NJWkUpOwo+IC0J aWYgKCFvYmopCj4gKwl2bWEgPSBndWNfYWxsb2NhdGVfdm1hKGd1YywgR1VDX0RCX1NJWkUgKyBH VUNfV1FfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKHZtYSkpCj4gIAkJZ290byBlcnI7Cj4KPiAgCS8q IFdlJ2xsIGtlZXAganVzdCB0aGUgZmlyc3QgKGRvb3JiZWxsL3Byb2MpIHBhZ2UgcGVybWFuZW50 bHkga21hcCdkLiAqLwo+IC0JY2xpZW50LT5jbGllbnRfb2JqID0gb2JqOwo+IC0JY2xpZW50LT5j bGllbnRfYmFzZSA9IGttYXAoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKG9iaiwgMCkpOwo+ICsJ Y2xpZW50LT5jbGllbnQgPSB2bWE7Cj4gKwljbGllbnQtPmNsaWVudF9iYXNlID0ga21hcChpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2Uodm1hLT5vYmosIDApKTsKPiAgCWNsaWVudC0+d3Ffb2Zmc2V0 ID0gR1VDX0RCX1NJWkU7Cj4gIAljbGllbnQtPndxX3NpemUgPSBHVUNfV1FfU0laRTsKPgo+IEBA IC04MjUsOCArODI5LDcgQEAgZXJyOgo+Cj4gIHN0YXRpYyB2b2lkIGd1Y19jcmVhdGVfbG9nKHN0 cnVjdCBpbnRlbF9ndWMgKmd1YykKPiAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmo7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiAgCXVuc2lnbmVkIGxvbmcgb2Zmc2V0 Owo+ICAJdWludDMyX3Qgc2l6ZSwgZmxhZ3M7Cj4KPiBAQCAtODQyLDE2ICs4NDUsMTYgQEAgc3Rh dGljIHZvaWQgZ3VjX2NyZWF0ZV9sb2coc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAJCUdVQ19M T0dfSVNSX1BBR0VTICsgMSArCj4gIAkJR1VDX0xPR19DUkFTSF9QQUdFUyArIDEpIDw8IFBBR0Vf U0hJRlQ7Cj4KPiAtCW9iaiA9IGd1Yy0+bG9nX29iajsKPiAtCWlmICghb2JqKSB7Cj4gLQkJb2Jq ID0gZ2VtX2FsbG9jYXRlX2d1Y19vYmooZGV2X3ByaXYsIHNpemUpOwo+IC0JCWlmICghb2JqKSB7 Cj4gKwl2bWEgPSBndWMtPmxvZzsKPiArCWlmICghdm1hKSB7Cj4gKwkJdm1hID0gZ3VjX2FsbG9j YXRlX3ZtYShndWMsIHNpemUpOwo+ICsJCWlmIChJU19FUlIodm1hKSkgewo+ICAJCQkvKiBsb2dn aW5nIHdpbGwgYmUgb2ZmICovCj4gIAkJCWk5MTUuZ3VjX2xvZ19sZXZlbCA9IC0xOwo+ICAJCQly ZXR1cm47Cj4gIAkJfQo+Cj4gLQkJZ3VjLT5sb2dfb2JqID0gb2JqOwo+ICsJCWd1Yy0+bG9nID0g dm1hOwo+ICAJfQo+Cj4gIAkvKiBlYWNoIGFsbG9jYXRlZCB1bml0IGlzIGEgcGFnZSAqLwo+IEBA IC04NjAsNyArODYzLDcgQEAgc3RhdGljIHZvaWQgZ3VjX2NyZWF0ZV9sb2coc3RydWN0IGludGVs X2d1YyAqZ3VjKQo+ICAJCShHVUNfTE9HX0lTUl9QQUdFUyA8PCBHVUNfTE9HX0lTUl9TSElGVCkg fAo+ICAJCShHVUNfTE9HX0NSQVNIX1BBR0VTIDw8IEdVQ19MT0dfQ1JBU0hfU0hJRlQpOwo+Cj4g LQlvZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSA+PiBQQUdFX1NISUZUOyAv KiBpbiBwYWdlcyAqLwo+ICsJb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7 IC8qIGluIHBhZ2VzICovCj4gIAlndWMtPmxvZ19mbGFncyA9IChvZmZzZXQgPDwgR1VDX0xPR19C VUZfQUREUl9TSElGVCkgfCBmbGFnczsKPiAgfQo+Cj4gQEAgLTg4OSw3ICs4OTIsNyBAQCBzdGF0 aWMgdm9pZCBpbml0X2d1Y19wb2xpY2llcyhzdHJ1Y3QgZ3VjX3BvbGljaWVzICpwb2xpY2llcykK PiAgc3RhdGljIHZvaWQgZ3VjX2NyZWF0ZV9hZHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICB7 Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMp Owo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3Zt YSAqdm1hOwo+ICAJc3RydWN0IGd1Y19hZHMgKmFkczsKPiAgCXN0cnVjdCBndWNfcG9saWNpZXMg KnBvbGljaWVzOwo+ICAJc3RydWN0IGd1Y19tbWlvX3JlZ19zdGF0ZSAqcmVnX3N0YXRlOwo+IEBA IC05MDIsMTYgKzkwNSwxNiBAQCBzdGF0aWMgdm9pZCBndWNfY3JlYXRlX2FkcyhzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMpCj4gIAkJCXNpemVvZihzdHJ1Y3QgZ3VjX21taW9fcmVnX3N0YXRlKSArCj4g IAkJCUdVQ19TM19TQVZFX1NQQUNFX1BBR0VTICogUEFHRV9TSVpFOwo+Cj4gLQlvYmogPSBndWMt PmFkc19vYmo7Cj4gLQlpZiAoIW9iaikgewo+IC0JCW9iaiA9IGdlbV9hbGxvY2F0ZV9ndWNfb2Jq KGRldl9wcml2LCBQQUdFX0FMSUdOKHNpemUpKTsKPiAtCQlpZiAoIW9iaikKPiArCXZtYSA9IGd1 Yy0+YWRzOwo+ICsJaWYgKCF2bWEpIHsKPiArCQl2bWEgPSBndWNfYWxsb2NhdGVfdm1hKGd1Yywg UEFHRV9BTElHTihzaXplKSk7Cj4gKwkJaWYgKElTX0VSUih2bWEpKQo+ICAJCQlyZXR1cm47Cj4K PiAtCQlndWMtPmFkc19vYmogPSBvYmo7Cj4gKwkJZ3VjLT5hZHMgPSB2bWE7Cj4gIAl9Cj4KPiAt CXBhZ2UgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2Uob2JqLCAwKTsKPiArCXBhZ2UgPSBpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2Uodm1hLT5vYmosIDApOwo+ICAJYWRzID0ga21hcChwYWdlKTsK CkNoYW5naW5nIHRoZSBuYW1lcyAmIHR5cGVzIGluIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlIGxl YWRzIHRvIGNvbmZ1c2lvbiAKaGVyZSwgYXMgdGhlIG1lbWJlciAnZ3VjLT5hZHMnIGFuZCB0aGUg ZXhpc3RpbmcgbG9jYWwgJ2Fkcycgbm93IGhhdmUgdGhlIApzYW1lIG5hbWUgYnV0IHF1aXRlIGRp ZmZlcmVudCB0eXBlcy4KCj4gIAkvKgo+IEBAIC05MzEsOCArOTM0LDcgQEAgc3RhdGljIHZvaWQg Z3VjX2NyZWF0ZV9hZHMoc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICAJcG9saWNpZXMgPSAodm9p ZCAqKWFkcyArIHNpemVvZihzdHJ1Y3QgZ3VjX2Fkcyk7Cj4gIAlpbml0X2d1Y19wb2xpY2llcyhw b2xpY2llcyk7Cj4KPiAtCWFkcy0+c2NoZWR1bGVyX3BvbGljaWVzID0gaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KG9iaikgKwo+IC0JCQlzaXplb2Yoc3RydWN0IGd1Y19hZHMpOwo+ICsJYWRzLT5z Y2hlZHVsZXJfcG9saWNpZXMgPSB2bWEtPm5vZGUuc3RhcnQgKyBzaXplb2Yoc3RydWN0IGd1Y19h ZHMpOwo+Cj4gIAkvKiBNTUlPIHJlZyBzdGF0ZSAqLwo+ICAJcmVnX3N0YXRlID0gKHZvaWQgKilw b2xpY2llcyArIHNpemVvZihzdHJ1Y3QgZ3VjX3BvbGljaWVzKTsKPiBAQCAtOTYwLDEwICs5NjIs OSBAQCBzdGF0aWMgdm9pZCBndWNfY3JlYXRlX2FkcyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCj4g ICAqLwo+ICBpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdikKPiAgewo+IC0JY29uc3Qgc2l6ZV90IGN0eHNpemUgPSBzaXplb2Yoc3Ry dWN0IGd1Y19jb250ZXh0X2Rlc2MpOwo+IC0JY29uc3Qgc2l6ZV90IHBvb2xzaXplID0gR1VDX01B WF9HUFVfQ09OVEVYVFMgKiBjdHhzaXplOwo+IC0JY29uc3Qgc2l6ZV90IGdlbXNpemUgPSByb3Vu ZF91cChwb29sc2l6ZSwgUEFHRV9TSVpFKTsKPiAgCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZk ZXZfcHJpdi0+Z3VjOwo+ICsJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gKwl1MzIgc2l6ZTsKPgo+ ICAJLyogV2lwZSBiaXRtYXAgJiBkZWxldGUgY2xpZW50IGluIGNhc2Ugb2YgcmVpbml0aWFsaXNh dGlvbiAqLwo+ICAJYml0bWFwX2NsZWFyKGd1Yy0+ZG9vcmJlbGxfYml0bWFwLCAwLCBHVUNfTUFY X0RPT1JCRUxMUyk7Cj4gQEAgLTk3MiwxMyArOTczLDE1IEBAIGludCBpOTE1X2d1Y19zdWJtaXNz aW9uX2luaXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJaWYgKCFpOTE1 LmVuYWJsZV9ndWNfc3VibWlzc2lvbikKPiAgCQlyZXR1cm4gMDsgLyogbm90IGVuYWJsZWQgICov Cj4KPiAtCWlmIChndWMtPmN0eF9wb29sX29iaikKPiArCWlmIChndWMtPmN0eF9wb29sKQo+ICAJ CXJldHVybiAwOyAvKiBhbHJlYWR5IGFsbG9jYXRlZCAqLwo+Cj4gLQlndWMtPmN0eF9wb29sX29i aiA9IGdlbV9hbGxvY2F0ZV9ndWNfb2JqKGRldl9wcml2LCBnZW1zaXplKTsKPiAtCWlmICghZ3Vj LT5jdHhfcG9vbF9vYmopCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gKwlzaXplID0gUEFHRV9BTElH TihHVUNfTUFYX0dQVV9DT05URVhUUypzaXplb2Yoc3RydWN0IGd1Y19jb250ZXh0X2Rlc2MpKTsK CldoYXQgYSBsb25nIHVnbHkgbGluZSA6KAoKQnJlYWtpbmcgaXQgaW50byB0aGUgJ2NvbnN0J3Mg YXQgdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gbWFkZSBpdCBlYXNpZXIgCnRvIGZvbGxvdyB0aGUg c3RhZ2VzIG9mIHRoZSBjYWxjdWxhdGlvbiBBTkQgd2FzIGF0IGxlYXN0IGFzIGVmZmljaWVudCwg CmFzIHRoZSBjb21waWxlciBmb2xkZWQgdGhlIHdob2xlIGNhbGN1bGF0aW9uIGludG8gYSBzaW5n bGUgY29uc3RhbnQgaW4gCnRoZSBbZGVsZXRlZF0gY2FsbCB0byBnZW1fYWxsb2NhdGVfZ3VjX29i aigpIGFib3ZlLgoKPiArCXZtYSA9IGd1Y19hbGxvY2F0ZV92bWEoZ3VjLCBzaXplKTsKPiArCWlm IChJU19FUlIodm1hKSkKPiArCQlyZXR1cm4gUFRSX0VSUih2bWEpOwo+Cj4gKwlndWMtPmN0eF9w b29sID0gdm1hOwo+ICAJaWRhX2luaXQoJmd1Yy0+Y3R4X2lkcyk7Cj4gIAlndWNfY3JlYXRlX2xv ZyhndWMpOwo+ICAJZ3VjX2NyZWF0ZV9hZHMoZ3VjKTsKPiBAQCAtMTAzMCwxNiArMTAzMywxMiBA QCB2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCj4gIHsKPiAgCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3Vj Owo+Cj4gLQlnZW1fcmVsZWFzZV9ndWNfb2JqKGRldl9wcml2LT5ndWMuYWRzX29iaik7Cj4gLQln dWMtPmFkc19vYmogPSBOVUxMOwo+IC0KPiAtCWdlbV9yZWxlYXNlX2d1Y19vYmooZGV2X3ByaXYt Pmd1Yy5sb2dfb2JqKTsKPiAtCWd1Yy0+bG9nX29iaiA9IE5VTEw7Cj4gKwlndWNfcmVsZWFzZV92 bWEobnVsbGlmeSgmZ3VjLT5hZHMpKTsKPiArCWd1Y19yZWxlYXNlX3ZtYShudWxsaWZ5KCZndWMt PmxvZykpOwoKSSB0aGluayB0aGlzIGlzIGEgdmVyeSB1Z2x5IHdheSBvZiBoaWRpbmcgdGhlIGNs ZWFyaW5nIG9mIHRoZSBwb2ludGVycy4KSWYgeW91IHdhbnQgdG8gbWFuYWdlIHJlZmVyZW5jZXMg bGlrZSB0aGlzLCBpdCBjb3VsZCAqcG9zc2libHkqIGJlIGEgbWFjcm86CgoJZ3VjX3JlbGVhc2Vf dm1hKFpBUF9BRlRFUl9VU0UoZ3VjLT5sb2cpKTsKCip3aXRob3V0KiB0aGUgJyYnIHNvIHRoZSBh cmd1bWVudCBoYXMgdG8gYmUgYW4gbHZhbHVlOyBvciBpdCBjb3VsZCBtb3JlIApjbGVhcmx5IGJl IGRvbmUgYnkgaGF2aW5nIHRoZSByZWxlYXNpbmcgZnVuY3Rpb24gdGFrZSBhIHBvaW50ZXIgdG8g dGhlIApwb2ludGVyLXRvLW9iamVjdCwgd2hpY2ggaXQgd291bGQgY2xlYXIgYWZ0ZXIgcmVsZWFz aW5nIHRoZSBvYmplY3QgYW5kIApiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXIuCgoJZ3Vj X3JlbGVhc2Vfdm1hX3JlZigmZ3VjLT5hZHMpOwkvLyBhbHNvIGNsZWFycyBndWMtPmFkcwoKQnV0 IEkgdGhpbmsgZXZlbiB0aGF0IGlzIG5vdCBhcyBnb29kIGFzIGV4cGxpY2l0bHkgY2xlYXJpbmcg dGhlIHBvaW50ZXIgCmltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjYWxsIHRvIHJlbGVhc2UoKS4gSWYg SyZSIGhhZCB0aG91Z2h0IGhhdmluZyBhIHdheSAKdG8gaW1wbGljaXRseSBjbGVhciBhIHBvaW50 ZXIgYWZ0ZXIgdXNpbmcgaXQgd2FzIGEgZ29vZCBpZGVhLCB0aGV5J2QgCmhhdmUgcHV0IGl0IGlu dG8gdGhlIGxhbmd1YWdlOgoKCXN0cnVjdCBmb28gKm5ldyA9ICpzYXZlZCE7CS8vIERlcmVmZXJl bmNlICYgY2xlYXIgJ3NhdmVkJwoKQnV0IHRoZXkgZGlkbid0LCBzbyB3ZSBwcm9iYWJseSBzaG91 bGRuJ3QgaW52ZW50IG9uZS4KCj4gLQlpZiAoZ3VjLT5jdHhfcG9vbF9vYmopCj4gKwlpZiAoZ3Vj LT5jdHhfcG9vbCkKPiAgCQlpZGFfZGVzdHJveSgmZ3VjLT5jdHhfaWRzKTsKPiAtCWdlbV9yZWxl YXNlX2d1Y19vYmooZ3VjLT5jdHhfcG9vbF9vYmopOwo+IC0JZ3VjLT5jdHhfcG9vbF9vYmogPSBO VUxMOwo+ICsJZ3VjX3JlbGVhc2Vfdm1hKG51bGxpZnkoJmd1Yy0+Y3R4X3Bvb2wpKTsKPiAgfQo+ Cj4gIC8qKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCj4gaW5kZXggNjIzY2YyNmNkNzg0Li5h OGRhNTYzY2FkYjcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IEBAIC02Myw3ICs2 Myw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdDsKPiAgICogICByZXRjb2RlOiBlcnJu byBmcm9tIGxhc3QgZ3VjX3N1Ym1pdCgpCj4gICAqLwo+ICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50 IHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjbGllbnRfb2JqOwo+ICsJc3RydWN0 IGk5MTVfdm1hICpjbGllbnQ7CgpXZSBjYW4ndCBjYWxsIHRoaXMgdm1hICdjbGllbnQnIGJlY2F1 c2UgdGhhdCBpcyB0aGUgbmFtZSBjb21tb25seSB1c2VkIApmb3IgYW4gaW5zdGFuY2Ugb2YgdGhl IGk5MTVfZ3VjX2NsaWVudCBjbGFzcy4geC0+Y2xpZW50LT5jbGllbnQtPnkgaXMgCmp1c3QgaG9y cmlibGUuIFlvdSBjb3VsZCBjYWxsIGl0ICdjbGllbnRfdm1hJywgSSBzdXBwb3NlLgoKPiAgCXZv aWQgKmNsaWVudF9iYXNlOwkJLyogZmlyc3QgcGFnZSAob25seSkgb2YgYWJvdmUJKi8KPiAgCXN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpvd25lcjsKPiAgCXN0cnVjdCBpbnRlbF9ndWMgKmd1YzsK PiBAQCAtMTI1LDExICsxMjUsMTAgQEAgc3RydWN0IGludGVsX2d1Y19mdyB7Cj4gIHN0cnVjdCBp bnRlbF9ndWMgewo+ICAJc3RydWN0IGludGVsX2d1Y19mdyBndWNfZnc7Cj4gIAl1aW50MzJfdCBs b2dfZmxhZ3M7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbG9nX29iajsKPiArCXN0 cnVjdCBpOTE1X3ZtYSAqbG9nOwoKQ2hhbmdpbmcgdGhlIG5hbWUgdG8gJ2xvZ192bWEnIHdvdWxk IGJlIGJldHRlciwgc2luY2UgSSdkIGV4cGVjdCAKc29tZXRoaW5nIGNhbGxlZCBqdXN0ICdsb2cn IHRvIGFjdHVhbGx5IEJFIGEgbG9nIC0tIG9yIGF0IG1vc3QgYSBwb2ludGVyIAp0byBhIGxvZyAt LSBub3QganVzdCBhIHBvaW50ZXIgdG8gc29tZXRoaW5nIGNvbnRhaW5pbmcgYSBwb2ludGVyIHRv IAphbm90aGVyIHRoaW5nIHRoYXQgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgbGlzdCBvZiBwYWdl cyB0aGF0IGV2ZW50dWFsbHkgCmhvbGQgdGhlIGxvZyBkYXRhLgoKRGl0dG8gZm9yIHRoZSBvdGhl ciBuYW1lcyBiZWxvdy4KCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqYWRzX29iajsK PiAtCj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqY3R4X3Bvb2xfb2JqOwo+ICsJc3Ry dWN0IGk5MTVfdm1hICphZHM7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKmN0eF9wb29sOwo+ICAJc3Ry dWN0IGlkYSBjdHhfaWRzOwo+Cj4gIAlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpleGVjYnVmX2Ns aWVudDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRl ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gaW5kZXggMzc2 M2UzMGNjMTY1Li41OGVmNDQxOGEyZWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf Z3VjX2xvYWRlci5jCj4gQEAgLTE4MSwxNiArMTgxLDE1IEBAIHN0YXRpYyB2b2lkIHNldF9ndWNf aW5pdF9wYXJhbXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAJCQlpOTE1 Lmd1Y19sb2dfbGV2ZWwgPDwgR1VDX0xPR19WRVJCT1NJVFlfU0hJRlQ7Cj4gIAl9Cj4KPiAtCWlm IChndWMtPmFkc19vYmopIHsKPiAtCQl1MzIgYWRzID0gKHUzMilpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQoZ3VjLT5hZHNfb2JqKQo+IC0JCQkJPj4gUEFHRV9TSElGVDsKPiArCWlmIChndWMtPmFk cykgewo+ICsJCXUzMiBhZHMgPSAodTMyKWd1Yy0+YWRzLT5ub2RlLnN0YXJ0ID4+IFBBR0VfU0hJ RlQ7Cj4gIAkJcGFyYW1zW0dVQ19DVExfREVCVUddIHw9IGFkcyA8PCBHVUNfQURTX0FERFJfU0hJ RlQ7Cj4gIAkJcGFyYW1zW0dVQ19DVExfREVCVUddIHw9IEdVQ19BRFNfRU5BQkxFRDsKPiAgCX0K Pgo+ICAJLyogSWYgR3VDIHN1Ym1pc3Npb24gaXMgZW5hYmxlZCwgc2V0IHVwIGFkZGl0aW9uYWwg cGFyYW1ldGVycyBoZXJlICovCj4gIAlpZiAoaTkxNS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24pIHsK PiAtCQl1MzIgcGdzID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KGRldl9wcml2LT5ndWMuY3R4 X3Bvb2xfb2JqKTsKPiArCQl1MzIgcGdzID0gZGV2X3ByaXYtPmd1Yy5jdHhfcG9vbC0+bm9kZS5z dGFydDsKPiAgCQl1MzIgY3R4X2luXzE2ID0gR1VDX01BWF9HUFVfQ09OVEVYVFMgLyAxNjsKPgo+ ICAJCXBncyA+Pj0gUEFHRV9TSElGVDsKClN1bW1hcnk6IEknbSBub3QgdG90YWxseSBvcHBvc2Vk IHRvIHVzaW5nIFZNQXMgbW9yZSBnZW5lcmFsbHksIGJ1dCBoZXJlIAp0aGVyZSBqdXN0IHNlZW0g dG8gYmUgZXh0cmEgY29zdHMgd2l0aCBubyBvZmZzZXR0aW5nIGFkdmFudGFnZXM7IGFuZCB0aGUg CmRldGFpbHMgb2Ygc29tZSBvZiB0aGUgYWJvdmUgY2hhbmdlcyBhcmUganVzdCBwbGFpbiB1Z2x5 LgoKSWYgdGhlIG5hbWluZyBhbmQgYWJzdHJhY3Rpb24gaXNzdWVzIHdlcmUgcmVzb2x2ZWQsIHRo ZSByZW1haW5pbmcgCmNvbnZlcnNpb25zIHdvdWxkIG5vdCBpbiB0aGVtc2VsdmVzIGJlIHRvbyBv YmplY3Rpb25hYmxlLCBiZWNhdXNlIGVpdGhlcgoqIHRoZSBleHRyYSBjeWNsZXMgZG9uJ3QgbWF0 dGVyIChpbiByYXJlbHkgZXhlY3V0ZWQgY29kZSksIG9yCiogd2UgY2FuIGFkZCBleHRyYSBkaXJl Y3QgcG9pbnRlcnMgb3Igb3RoZXIgY2FjaGVkIHZhbHVlcyBpbiB0aGUgCnRvcC1sZXZlbCBkYXRh IHN0cnVjdHVyZXMgdG8gYXZvaWQgZGVlcCBtZW1vcnkgY2hhaW5zIHdoZXJlIG5lY2Vzc2FyeS4K Ci5EYXZlLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJ bnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK