From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: Re: [PATCH v2 2/2] drm/i915: Switch to level-based DDB allocation algorithm (v3) Date: Tue, 11 Dec 2018 08:11:16 -0800 Message-ID: <20181211161116.GD20196@mdroper-desk.amr.corp.intel.com> References: <20181211010543.13309-1-matthew.d.roper@intel.com> <20181211010543.13309-2-matthew.d.roper@intel.com> <20181211155956.GS9144@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D6246E085 for ; Tue, 11 Dec 2018 16:11:17 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20181211155956.GS9144@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBEZWMgMTEsIDIwMTggYXQgMDU6NTk6NTZQTSArMDIwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIE1vbiwgRGVjIDEwLCAyMDE4IGF0IDA1OjA1OjQzUE0gLTA4MDAsIE1hdHQg Um9wZXIgd3JvdGU6Ci4uLnNuaXAuLi4KPiA+ICAKPiA+IC0JYWxsb2Nfc2l6ZSAtPSB0b3RhbF9t aW5fYmxvY2tzOwo+ID4gLQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1Jd LnN0YXJ0ID0gYWxsb2MtPmVuZCAtIG1pbmltdW1bUExBTkVfQ1VSU09SXTsKPiA+IC0JY3N0YXRl LT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VSU09SXS5lbmQgPSBhbGxvYy0+ZW5kOwo+ID4g LQo+ID4gIAkvKgo+ID4gLQkgKiAyLiBEaXN0cmlidXRlIHRoZSByZW1haW5pbmcgc3BhY2UgaW4g cHJvcG9ydGlvbiB0byB0aGUgYW1vdW50IG9mCj4gPiAtCSAqIGRhdGEgZWFjaCBwbGFuZSBuZWVk cyB0byBmZXRjaCBmcm9tIG1lbW9yeS4KPiA+IC0JICoKPiA+IC0JICogRklYTUU6IHdlIG1heSBu b3QgYWxsb2NhdGUgZXZlcnkgc2luZ2xlIGJsb2NrIGhlcmUuCj4gPiArCSAqIEdyYW50IGVhY2gg cGxhbmUgdGhlIGJsb2NrcyBpdCByZXF1aXJlcyBhdCB0aGUgaGlnaGVzdCBhY2hpZXZhYmxlCj4g PiArCSAqIHdhdGVybWFyayBsZXZlbCwgcGx1cyBhbiBleHRyYSBzaGFyZSBvZiB0aGUgbGVmdG92 ZXIgYmxvY2tzCj4gPiArCSAqIHByb3BvcnRpb25hbCB0byBpdHMgcmVsYXRpdmUgZGF0YSByYXRl Lgo+ID4gIAkgKi8KPiA+IC0JaWYgKHRvdGFsX2RhdGFfcmF0ZSA9PSAwKQo+ID4gLQkJcmV0dXJu IDA7Cj4gPiAtCj4gPiAtCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ID4gIAlmb3JfZWFjaF9wbGFu ZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4gPiAtCQl1NjQgZGF0YV9yYXRl LCB1dl9kYXRhX3JhdGU7Cj4gPiAtCQl1aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Js b2NrczsKPiA+ICsJCXU2NCByYXRlOwo+ID4gKwkJdTE2IGV4dHJhOwo+ID4gIAo+ID4gIAkJaWYg KHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiA+ICAJCQljb250aW51ZTsKPiA+ICsJCWlmIChh bGxvY19zaXplID09IDApCj4gPiArCQkJY29udGludWU7Cj4gCj4gVGhpcyBzZWVtcyB3cm9uZy4g V2Ugd291bGRuJ3QgYXNzaWduIGFueXRoaW5nIHRvIHRvdGFsL3V2X3RvdGFsIGZvciB0aGUKPiBw bGFuZSBpbiB0aGlzIGNhc2UuIEkgZ3Vlc3MgeW91IGNvdWxkIG1vdmUgdGhvc2UgYXNzaWdubWVu dHMgdG8gdGhlCj4gZWFybGllciBsb29wIGFuZCB0aGVuIHMvY29udGludWUvYnJlYWsvIGhlcmU/ IE9yIHdlIGp1c3QgcmVtb3ZlIHRoZQo+IGNvbnRpbnVlIGVudGlyZWx5IGFuZCBsZXQgdGhlIGNh bGN1bGF0aW9ucyBnbyB0aHJvdWdoIGV2ZW4gaWYKPiBhbGxvY19zaXplPT0wLgoKSXQgc2hvdWxk IHByb2JhYmx5IGJlIGEgYnJlYWssIHNpbmNlIHdlJ2xsIG9ubHkgaGl0IHRoaXMgb24gYSBsb29w Cml0ZXJhdGlvbiB3aGVyZSB3ZSd2ZSBoYW5kZWQgdGhlIHdob2xlIHBpcGUgYWxsb2NhdGlvbiBh bmQgYWxsIHJlbWFpbmluZwpwbGFuZXMgYXJlIGRpc2FibGVkLiAgVGhlIHRvdGFsIGFuZCB1dl90 b3RhbCB3ZXJlIGluaXRpYWxpemVkIHRvIDAgYXQKaW5pdGlhbGl6YXRpb24gdGltZSwgc28gdGhh dCBzaG91bGQgYmUgY29ycmVjdCBmb3IgYWxsIHJlbWFpbmluZyBwbGFuZXMuCgpBbHNvLCB3ZSBj YW4ndCBsZXQgdGhlIGNhbGN1bGF0aW9uIHByb2NlZWQgaGVyZSwgb3RoZXJ3aXNlIHdlJ2xsIGRp dmlkZQpieSAwICh0b3RhbF9kYXRhX3JhdGUpIGZhcnRoZXIgZG93biBzaW5jZSB0aGF0IHZhbHVl IGFsc28gZGVjcmVhc2VzIHdpdGgKZWFjaCBsb29wIGl0ZXJhdGlvbi4KCgpNYXR0Cgo+IAo+ID4g IAo+ID4gLQkJZGF0YV9yYXRlID0gcGxhbmVfZGF0YV9yYXRlW3BsYW5lX2lkXTsKPiA+ICsJCXdt ID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKPiA+ICAKPiA+IC0J CS8qCj4gPiAtCQkgKiBhbGxvY2F0aW9uIGZvciAocGFja2VkIGZvcm1hdHMpIG9yICh1di1wbGFu ZSBwYXJ0IG9mIHBsYW5hciBmb3JtYXQpOgo+ID4gLQkJICogcHJvbW90ZSB0aGUgZXhwcmVzc2lv biB0byA2NCBiaXRzIHRvIGF2b2lkIG92ZXJmbG93aW5nLCB0aGUKPiA+IC0JCSAqIHJlc3VsdCBp cyA8IGF2YWlsYWJsZSBhcyBkYXRhX3JhdGUgLyB0b3RhbF9kYXRhX3JhdGUgPCAxCj4gPiAtCQkg Ki8KPiA+IC0JCXBsYW5lX2Jsb2NrcyA9IG1pbmltdW1bcGxhbmVfaWRdOwo+ID4gLQkJcGxhbmVf YmxvY2tzICs9IGRpdjY0X3U2NChhbGxvY19zaXplICogZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3Jh dGUpOwo+ID4gKwkJcmF0ZSA9IHBsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07Cj4gPiArCQlleHRy YSA9IG1pbl90KHUxNiwgYWxsb2Nfc2l6ZSwKPiA+ICsJCQkgICAgICBESVZfUk9VTkRfVVAoYWxs b2Nfc2l6ZSAqIHJhdGUsIHRvdGFsX2RhdGFfcmF0ZSkpOwo+ID4gKwkJdG90YWxbcGxhbmVfaWRd ID0gd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYiArIGV4dHJhOwo+ID4gKwkJYWxsb2Nfc2l6ZSAt PSBleHRyYTsKPiA+ICsJCXRvdGFsX2RhdGFfcmF0ZSAtPSByYXRlOwo+ID4gIAo+ID4gLQkJLyog TGVhdmUgZGlzYWJsZWQgcGxhbmVzIGF0ICgwLDApICovCj4gPiAtCQlpZiAoZGF0YV9yYXRlKSB7 Cj4gPiAtCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdLnN0YXJ0ID0gc3Rh cnQ7Cj4gPiAtCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdLmVuZCA9IHN0 YXJ0ICsgcGxhbmVfYmxvY2tzOwo+ID4gLQkJfQo+ID4gKwkJaWYgKGFsbG9jX3NpemUgPT0gMCkK PiA+ICsJCQljb250aW51ZTsKPiA+ICAKPiA+IC0JCXN0YXJ0ICs9IHBsYW5lX2Jsb2NrczsKPiA+ ICsJCXJhdGUgPSB1dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOwo+ID4gKwkJZXh0cmEgPSBt aW5fdCh1MTYsIGFsbG9jX3NpemUsCj4gPiArCQkJICAgICAgRElWX1JPVU5EX1VQKGFsbG9jX3Np emUgKiByYXRlLCB0b3RhbF9kYXRhX3JhdGUpKTsKPiA+ICsJCXV2X3RvdGFsW3BsYW5lX2lkXSA9 IHdtLT51dl93bVtsZXZlbF0ucGxhbmVfcmVzX2IgKyBleHRyYTsKPiA+ICsJCWFsbG9jX3NpemUg LT0gZXh0cmE7Cj4gPiArCQl0b3RhbF9kYXRhX3JhdGUgLT0gcmF0ZTsKPiA+ICsJfQo+ID4gKwlX QVJOX09OKGFsbG9jX3NpemUgIT0gMCB8fCB0b3RhbF9kYXRhX3JhdGUgIT0gMCk7Cj4gPiAgCj4g PiAtCQkvKiBBbGxvY2F0ZSBEREIgZm9yIFVWIHBsYW5lIGZvciBwbGFuYXIgZm9ybWF0L05WMTIg Ki8KPiA+IC0JCXV2X2RhdGFfcmF0ZSA9IHV2X3BsYW5lX2RhdGFfcmF0ZVtwbGFuZV9pZF07Cj4g PiArCS8qIFNldCB0aGUgYWN0dWFsIEREQiBzdGFydC9lbmQgcG9pbnRzIGZvciBlYWNoIHBsYW5l ICovCj4gPiArCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0Owo+ID4gKwlmb3JfZWFjaF9wbGFuZV9pZF9v bl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Cj4gPiArCQlzdHJ1Y3Qgc2tsX2RkYl9lbnRy eSAqcGxhbmVfYWxsb2MsICp1dl9wbGFuZV9hbGxvYzsKPiA+ICAKPiA+IC0JCXV2X3BsYW5lX2Js b2NrcyA9IHV2X21pbmltdW1bcGxhbmVfaWRdOwo+ID4gLQkJdXZfcGxhbmVfYmxvY2tzICs9IGRp djY0X3U2NChhbGxvY19zaXplICogdXZfZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUpOwo+ID4g KwkJaWYgKHBsYW5lX2lkID09IFBMQU5FX0NVUlNPUikKPiA+ICsJCQljb250aW51ZTsKPiA+ICsK PiA+ICsJCXBsYW5lX2FsbG9jID0gJmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W3BsYW5lX2lk XTsKPiA+ICsJCXV2X3BsYW5lX2FsbG9jID0gJmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltw bGFuZV9pZF07Cj4gPiAgCj4gPiAgCQkvKiBHZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZv ciBVViB3YXRlcm1hcmtzICovCj4gPiAtCQlXQVJOX09OKElOVEVMX0dFTihkZXZfcHJpdikgPj0g MTEgJiYgdXZfcGxhbmVfYmxvY2tzKTsKPiA+ICsJCVdBUk5fT04oSU5URUxfR0VOKGRldl9wcml2 KSA+PSAxMSAmJiB1dl90b3RhbFtwbGFuZV9pZF0pOwo+ID4gKwo+ID4gKwkJLyogTGVhdmUgZGlz YWJsZWQgcGxhbmVzIGF0ICgwLDApICovCj4gPiArCQlpZiAodG90YWxbcGxhbmVfaWRdKSB7Cj4g PiArCQkJcGxhbmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7Cj4gPiArCQkJcGxhbmVfYWxsb2MtPmVu ZCA9IHN0YXJ0ICs9IHRvdGFsW3BsYW5lX2lkXTsKPiA+ICsJCX0KPiA+ICAKPiA+IC0JCWlmICh1 dl9kYXRhX3JhdGUpIHsKPiA+IC0JCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVf aWRdLnN0YXJ0ID0gc3RhcnQ7Cj4gPiAtCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3Bs YW5lX2lkXS5lbmQgPQo+ID4gLQkJCQlzdGFydCArIHV2X3BsYW5lX2Jsb2NrczsKPiA+ICsJCWlm ICh1dl90b3RhbFtwbGFuZV9pZF0pIHsKPiA+ICsJCQl1dl9wbGFuZV9hbGxvYy0+c3RhcnQgPSBz dGFydDsKPiA+ICsJCQl1dl9wbGFuZV9hbGxvYy0+ZW5kID0gc3RhcnQgKyB1dl90b3RhbFtwbGFu ZV9pZF07Cj4gPiAgCQl9Cj4gPiArCX0KPiA+ICAKPiA+IC0JCXN0YXJ0ICs9IHV2X3BsYW5lX2Js b2NrczsKPiA+ICsJLyoKPiA+ICsJICogV2hlbiB3ZSBjYWxjdWxhdGVkIHdhdGVybWFyayB2YWx1 ZXMgd2UgZGlkbid0IGtub3cgaG93IGhpZ2gKPiA+ICsJICogb2YgYSBsZXZlbCB3ZSdkIGFjdHVh bGx5IGJlIGFibGUgdG8gaGl0LCBzbyB3ZSBqdXN0IG1hcmtlZAo+ID4gKwkgKiBhbGwgbGV2ZWxz IGFzICJlbmFibGVkLiIgIEdvIGJhY2sgbm93IGFuZCBkaXNhYmxlIHRoZSBvbmVzCj4gPiArCSAq IHRoYXQgYXJlbid0IGFjdHVhbGx5IHBvc3NpYmxlLgo+ID4gKwkgKi8KPiA+ICsJZm9yIChsZXZl bCsrOyBsZXZlbCA8PSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KTsgbGV2ZWwrKykgewo+ID4g KwkJZm9yX2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ID4g KwkJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKPiA+ICsJ CQltZW1zZXQoJndtLT53bVtsZXZlbF0sIDAsIHNpemVvZih3bS0+d21bbGV2ZWxdKSk7Cj4gPiAr CQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyoKPiA+ICsJICogR28gYmFjayBhbmQgZGlzYWJsZSB0 aGUgdHJhbnNpdGlvbiB3YXRlcm1hcmsgaWYgaXQgdHVybnMgb3V0IHdlCj4gPiArCSAqIGRvbid0 IGhhdmUgZW5vdWdoIEREQiBibG9ja3MgZm9yIGl0Lgo+ID4gKwkgKi8KPiA+ICsJZm9yX2VhY2hf cGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgewo+ID4gKwkJd20gPSAmY3N0 YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwo+ID4gKwkJaWYgKHdtLT50cmFu c193bS5wbGFuZV9yZXNfYiA+IHRvdGFsW3BsYW5lX2lkXSkKPiA+ICsJCQltZW1zZXQoJndtLT50 cmFuc193bSwgMCwgc2l6ZW9mKHdtLT50cmFuc193bSkpOwo+ID4gIAl9Cj4gPiAgCj4gPiAgCXJl dHVybiAwOwo+ID4gQEAgLTQ3MTUsMTcgKzQ2NjUsMTUgQEAgc2tsX2NvbXB1dGVfcGxhbmVfd21f cGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAgCXJldHVy biAwOwo+ID4gIH0KPiA+ICAKPiA+IC1zdGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAtCQkJCWNvbnN0IHN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRlLAo+ID4gLQkJCQl1aW50MTZfdCBkZGJf YWxsb2NhdGlvbiwKPiA+IC0JCQkJaW50IGxldmVsLAo+ID4gLQkJCQljb25zdCBzdHJ1Y3Qgc2ts X3dtX3BhcmFtcyAqd3AsCj4gPiAtCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3Vs dF9wcmV2LAo+ID4gLQkJCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgLyogb3V0ICovKQo+ ID4gK3N0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjX3N0YXRlICpjc3RhdGUsCj4gPiArCQkJCSBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKmludGVsX3BzdGF0ZSwKPiA+ICsJCQkJIGludCBsZXZlbCwKPiA+ICsJCQkJIGNvbnN0IHN0 cnVjdCBza2xfd21fcGFyYW1zICp3cCwKPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBza2xfd21fbGV2 ZWwgKnJlc3VsdF9wcmV2LAo+ID4gKwkJCQkgc3RydWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8q IG91dCAqLykKPiA+ICB7Cj4gPiAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 Cj4gPiAgCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2KTsKPiA+IC0JY29u c3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlID0gJmludGVsX3BzdGF0ZS0+YmFzZTsK PiA+ICAJdWludDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07 Cj4gPiAgCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2QxLCBtZXRob2QyOwo+ID4gIAl1aW50X2Zp eGVkXzE2XzE2X3Qgc2VsZWN0ZWRfcmVzdWx0Owo+ID4gQEAgLTQ3MzMsMTAgKzQ2ODEsNiBAQCBz dGF0aWMgaW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjc3RhdGUsCj4gPiAgCXN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlID0KPiA+ ICAJCXRvX2ludGVsX2F0b21pY19zdGF0ZShjc3RhdGUtPmJhc2Uuc3RhdGUpOwo+ID4gIAlib29s IGFwcGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUpOwo+ID4g LQl1aW50MzJfdCBtaW5fZGlzcF9idWZfbmVlZGVkOwo+ID4gLQo+ID4gLQlpZiAobGF0ZW5jeSA9 PSAwKQo+ID4gLQkJcmV0dXJuIGxldmVsID09IDAgPyAtRUlOVkFMIDogMDsKPiA+ICAKPiA+ICAJ LyogRGlzcGxheSBXQSAjMTE0MToga2JsLGNmbCAqLwo+ID4gIAlpZiAoKElTX0tBQllMQUtFKGRl dl9wcml2KSB8fCBJU19DT0ZGRUVMQUtFKGRldl9wcml2KSB8fAo+ID4gQEAgLTQ4MDAsNjEgKzQ3 NDQsMjQgQEAgc3RhdGljIGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAo+ID4gIAkJCXJlc19ibG9ja3MgPSByZXN1bHRfcHJldi0+ cGxhbmVfcmVzX2I7Cj4gPiAgCX0KPiA+ICAKPiA+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTEpIHsKPiA+IC0JCWlmICh3cC0+eV90aWxlZCkgewo+ID4gLQkJCXVpbnQzMl90IGV4dHJh X2xpbmVzOwo+ID4gLQkJCXVpbnRfZml4ZWRfMTZfMTZfdCBmcF9taW5fZGlzcF9idWZfbmVlZGVk Owo+ID4gLQo+ID4gLQkJCWlmIChyZXNfbGluZXMgJSB3cC0+eV9taW5fc2NhbmxpbmVzID09IDAp Cj4gPiAtCQkJCWV4dHJhX2xpbmVzID0gd3AtPnlfbWluX3NjYW5saW5lczsKPiA+IC0JCQllbHNl Cj4gPiAtCQkJCWV4dHJhX2xpbmVzID0gd3AtPnlfbWluX3NjYW5saW5lcyAqIDIgLQo+ID4gLQkJ CQkJICAgICAgcmVzX2xpbmVzICUgd3AtPnlfbWluX3NjYW5saW5lczsKPiA+IC0KPiA+IC0JCQlm cF9taW5fZGlzcF9idWZfbmVlZGVkID0gbXVsX3UzMl9maXhlZDE2KHJlc19saW5lcyArCj4gPiAt CQkJCQkJZXh0cmFfbGluZXMsCj4gPiAtCQkJCQkJd3AtPnBsYW5lX2Jsb2Nrc19wZXJfbGluZSk7 Cj4gPiAtCQkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IGZpeGVkMTZfdG9fdTMyX3JvdW5kX3VwKAo+ ID4gLQkJCQkJCWZwX21pbl9kaXNwX2J1Zl9uZWVkZWQpOwo+ID4gLQkJfSBlbHNlIHsKPiA+IC0J CQltaW5fZGlzcF9idWZfbmVlZGVkID0gRElWX1JPVU5EX1VQKHJlc19ibG9ja3MgKiAxMSwgMTAp Owo+ID4gLQkJfQo+ID4gLQl9IGVsc2Ugewo+ID4gLQkJbWluX2Rpc3BfYnVmX25lZWRlZCA9IHJl c19ibG9ja3M7Cj4gPiAtCX0KPiA+IC0KPiA+IC0JaWYgKChsZXZlbCA+IDAgJiYgcmVzX2xpbmVz ID4gMzEpIHx8Cj4gPiAtCSAgICByZXNfYmxvY2tzID49IGRkYl9hbGxvY2F0aW9uIHx8Cj4gPiAt CSAgICBtaW5fZGlzcF9idWZfbmVlZGVkID49IGRkYl9hbGxvY2F0aW9uKSB7Cj4gPiAtCQkvKgo+ ID4gLQkJICogSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGxldmVsIDAgd2F0ZXJtYXJrcywgdGhlbiB3 ZSBjYW4ndAo+ID4gLQkJICogc3VwcG9ydCB0aGlzIGRpc3BsYXkgY29uZmlndXJhdGlvbi4KPiA+ IC0JCSAqLwo+ID4gLQkJaWYgKGxldmVsKSB7Cj4gPiAtCQkJcmV0dXJuIDA7Cj4gPiAtCQl9IGVs c2Ugewo+ID4gLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gcHN0YXRlLT5wbGFuZTsKPiA+ IC0KPiA+IC0JCQlEUk1fREVCVUdfS01TKCJSZXF1ZXN0ZWQgZGlzcGxheSBjb25maWd1cmF0aW9u IGV4Y2VlZHMgc3lzdGVtIHdhdGVybWFyayBsaW1pdGF0aW9uc1xuIik7Cj4gPiAtCQkJRFJNX0RF QlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQgPSAldS8ldSwgbGluZXMgcmVx dWlyZWQgPSAldS8zMVxuIiwKPiA+IC0JCQkJICAgICAgcGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5u YW1lLAo+ID4gLQkJCQkgICAgICByZXNfYmxvY2tzLCBkZGJfYWxsb2NhdGlvbiwgcmVzX2xpbmVz KTsKPiA+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiA+IC0JCX0KPiA+IC0JfQo+ID4gLQo+ID4gIAkv KiBUaGUgbnVtYmVyIG9mIGxpbmVzIGFyZSBpZ25vcmVkIGZvciB0aGUgbGV2ZWwgMCB3YXRlcm1h cmsuICovCj4gPiArCWlmIChsZXZlbCA+IDAgJiYgcmVzX2xpbmVzID4gMzEpCj4gPiArCQlyZXR1 cm47Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIElmIHJlc19saW5lcyBpcyB2YWxpZCwgYXNzdW1l IHdlIGNhbiB1c2UgdGhpcyB3YXRlcm1hcmsgbGV2ZWwKPiA+ICsJICogZm9yIG5vdy4gIFdlJ2xs IGNvbWUgYmFjayBhbmQgZGlzYWJsZSBpdCBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlCj4gPiArCSAq IEREQiBhbGxvY2F0aW9uIGlmIGl0IHR1cm5zIG91dCB3ZSBkb24ndCBhY3R1YWxseSBoYXZlIGVu b3VnaAo+ID4gKwkgKiBibG9ja3MgdG8gc2F0aXNmeSBpdC4KPiA+ICsJICovCj4gPiAgCXJlc3Vs dC0+cGxhbmVfcmVzX2IgPSByZXNfYmxvY2tzOwo+ID4gIAlyZXN1bHQtPnBsYW5lX3Jlc19sID0g cmVzX2xpbmVzOwo+ID4gIAlyZXN1bHQtPnBsYW5lX2VuID0gdHJ1ZTsKPiA+IC0KPiA+IC0JcmV0 dXJuIDA7Cj4gPiAgfQo+ID4gIAo+ID4gLXN0YXRpYyBpbnQKPiA+ICtzdGF0aWMgdm9pZAo+ID4g IHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0 YXRlLAo+ID4gIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9w c3RhdGUsCj4gPiAtCQkgICAgICB1aW50MTZfdCBkZGJfYmxvY2tzLAo+ID4gIAkJICAgICAgY29u c3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndtX3BhcmFtcywKPiA+ICAJCSAgICAgIHN0cnVjdCBz a2xfd21fbGV2ZWwgKmxldmVscykKPiA+ICB7Cj4gPiBAQCAtNDg2MiwyNSArNDc2OSwxNSBAQCBz a2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0 ZSwKPiA+ICAJCXRvX2k5MTUoaW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwo+ID4gIAlp bnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOwo+ID4gIAlz dHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiA9ICZsZXZlbHNbMF07Cj4gPiAtCWludCBy ZXQ7Cj4gPiAgCj4gPiAgCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBtYXhfbGV2ZWw7IGxldmVs KyspIHsKPiA+ICAJCXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdCA9ICZsZXZlbHNbbGV2ZWxd Owo+ID4gIAo+ID4gLQkJcmV0ID0gc2tsX2NvbXB1dGVfcGxhbmVfd20oY3N0YXRlLAo+ID4gLQkJ CQkJICAgaW50ZWxfcHN0YXRlLAo+ID4gLQkJCQkJICAgZGRiX2Jsb2NrcywKPiA+IC0JCQkJCSAg IGxldmVsLAo+ID4gLQkJCQkJICAgd21fcGFyYW1zLAo+ID4gLQkJCQkJICAgcmVzdWx0X3ByZXYs Cj4gPiAtCQkJCQkgICByZXN1bHQpOwo+ID4gLQkJaWYgKHJldCkKPiA+IC0JCQlyZXR1cm4gcmV0 Owo+ID4gKwkJc2tsX2NvbXB1dGVfcGxhbmVfd20oY3N0YXRlLCBpbnRlbF9wc3RhdGUsIGxldmVs LCB3bV9wYXJhbXMsCj4gPiArCQkJCSAgICAgcmVzdWx0X3ByZXYsIHJlc3VsdCk7Cj4gPiAgCj4g PiAgCQlyZXN1bHRfcHJldiA9IHJlc3VsdDsKPiA+ICAJfQo+ID4gLQo+ID4gLQlyZXR1cm4gMDsK PiA+ICB9Cj4gPiAgCj4gPiAgc3RhdGljIHVpbnQzMl90Cj4gPiBAQCAtNDkwOCw4ICs0ODA1LDcg QEAgc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSkKPiA+ICAKPiA+ICBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dt KGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAgCQkJCSAgICAgIGNv bnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3cCwKPiA+IC0JCQkJICAgICAgc3RydWN0IHNrbF9w bGFuZV93bSAqd20sCj4gPiAtCQkJCSAgICAgIHVpbnQxNl90IGRkYl9hbGxvY2F0aW9uKQo+ID4g KwkJCQkgICAgICBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2Owo+ID4gIAljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gPiBAQCAtNDk1 NywxMiArNDg1MywxMyBAQCBzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCj4gPiAgCj4gPiAgCX0KPiA+ICAK PiA+IC0JcmVzX2Jsb2NrcyArPSAxOwo+ID4gLQo+ID4gLQlpZiAocmVzX2Jsb2NrcyA8IGRkYl9h bGxvY2F0aW9uKSB7Cj4gPiAtCQl3bS0+dHJhbnNfd20ucGxhbmVfcmVzX2IgPSByZXNfYmxvY2tz Owo+ID4gLQkJd20tPnRyYW5zX3dtLnBsYW5lX2VuID0gdHJ1ZTsKPiA+IC0JfQo+ID4gKwkvKgo+ ID4gKwkgKiBKdXN0IGFzc3VtZSB3ZSBjYW4gZW5hYmxlIHRoZSB0cmFuc2l0aW9uIHdhdGVybWFy ay4gIEFmdGVyCj4gPiArCSAqIGNvbXB1dGluZyB0aGUgRERCIHdlJ2xsIGNvbWUgYmFjayBhbmQg ZGlzYWJsZSBpdCBpZiB0aGF0Cj4gPiArCSAqIGFzc3VtcHRpb24gdHVybnMgb3V0IHRvIGJlIGZh bHNlLgo+ID4gKwkgKi8KPiA+ICsJd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2Nr cyArIDE7Cj4gPiArCXdtLT50cmFuc193bS5wbGFuZV9lbiA9IHRydWU7Cj4gPiAgfQo+ID4gIAo+ ID4gIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3NpbmdsZShzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+IEBAIC00OTcwLDcgKzQ4NjcsNiBAQCBzdGF0aWMgaW50 IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNf c3RhdGUsCj4gPiAgCQkJCSAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGNvbG9yX3Bs YW5lKQo+ID4gIHsKPiA+ICAJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmY3J0Y19zdGF0ZS0+ d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKPiA+IC0JdTE2IGRkYl9ibG9ja3MgPSBz a2xfZGRiX2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9p ZF0pOwo+ID4gIAlzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3bV9wYXJhbXM7Cj4gPiAgCWludCByZXQ7 Cj4gPiAgCj4gPiBAQCAtNDk3OSwxMiArNDg3NSw4IEBAIHN0YXRpYyBpbnQgc2tsX2J1aWxkX3Bs YW5lX3dtX3NpbmdsZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiA+ICAJ aWYgKHJldCkKPiA+ICAJCXJldHVybiByZXQ7Cj4gPiAgCj4gPiAtCXJldCA9IHNrbF9jb21wdXRl X3dtX2xldmVscyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwKPiA+IC0JCQkJICAgIGRkYl9ibG9j a3MsICZ3bV9wYXJhbXMsIHdtLT53bSk7Cj4gPiAtCWlmIChyZXQpCj4gPiAtCQlyZXR1cm4gcmV0 Owo+ID4gLQo+ID4gLQlza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9w YXJhbXMsIHdtLCBkZGJfYmxvY2tzKTsKPiA+ICsJc2tsX2NvbXB1dGVfd21fbGV2ZWxzKGNydGNf c3RhdGUsIHBsYW5lX3N0YXRlLCAmd21fcGFyYW1zLCB3bS0+d20pOwo+ID4gKwlza2xfY29tcHV0 ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9wYXJhbXMsIHdtKTsKPiA+ICAKPiA+ICAJ cmV0dXJuIDA7Cj4gPiAgfQo+ID4gQEAgLTQ5OTQsNyArNDg4Niw2IEBAIHN0YXRpYyBpbnQgc2ts X2J1aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ ID4gIAkJCQkgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCBza2xf cGxhbmVfd20gKndtID0gJmNydGNfc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9p ZF07Cj4gPiAtCXUxNiBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZjcnRjX3N0YXRl LT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXSk7Cj4gPiAgCXN0cnVjdCBza2xfd21fcGFy YW1zIHdtX3BhcmFtczsKPiA+ICAJaW50IHJldDsKPiA+ICAKPiA+IEBAIC01MDA2LDEwICs0ODk3 LDcgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCj4gPiAgCWlmIChyZXQpCj4gPiAgCQlyZXR1cm4gcmV0Owo+ID4g IAo+ID4gLQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3Rh dGUsCj4gPiAtCQkJCSAgICBkZGJfYmxvY2tzLCAmd21fcGFyYW1zLCB3bS0+dXZfd20pOwo+ID4g LQlpZiAocmV0KQo+ID4gLQkJcmV0dXJuIHJldDsKPiA+ICsJc2tsX2NvbXB1dGVfd21fbGV2ZWxz KGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLCAmd21fcGFyYW1zLCB3bS0+dXZfd20pOwo+ID4gIAo+ ID4gIAlyZXR1cm4gMDsKPiA+ICB9Cj4gPiBAQCAtNTUyMSwxMyArNTQwOSw5IEBAIHNrbF9jb21w dXRlX3dtKHN0cnVjdCBpbnRlbF9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gIAlpZiAocmV0IHx8 ICFjaGFuZ2VkKQo+ID4gIAkJcmV0dXJuIHJldDsKPiA+ICAKPiA+IC0JcmV0ID0gc2tsX2NvbXB1 dGVfZGRiKHN0YXRlKTsKPiA+IC0JaWYgKHJldCkKPiA+IC0JCXJldHVybiByZXQ7Cj4gPiAtCj4g PiAgCS8qCj4gPiAgCSAqIENhbGN1bGF0ZSBXTSdzIGZvciBhbGwgcGlwZXMgdGhhdCBhcmUgcGFy dCBvZiB0aGlzIHRyYW5zYWN0aW9uLgo+ID4gLQkgKiBOb3RlIHRoYXQgdGhlIEREQiBhbGxvY2F0 aW9uIGFib3ZlIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQKPiA+ICsJICogTm90ZSB0 aGF0IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BpcGVzIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydz IHRoYXQKPiA+ICAJICogd2VyZW4ndCBvdGhlcndpc2UgYmVpbmcgbW9kaWZpZWQgKGFuZCBzZXQg Yml0cyBpbiBkaXJ0eV9waXBlcykgaWYKPiA+ICAJICogcGlwZSBhbGxvY2F0aW9ucyBoYWQgdG8g Y2hhbmdlLgo+ID4gIAkgKi8KPiA+IEBAIC01NTQ5LDYgKzU0MzMsMTAgQEAgc2tsX2NvbXB1dGVf d20oc3RydWN0IGludGVsX2F0b21pY19zdGF0ZSAqc3RhdGUpCj4gPiAgCQkJcmVzdWx0cy0+ZGly dHlfcGlwZXMgfD0gZHJtX2NydGNfbWFzaygmY3J0Yy0+YmFzZSk7Cj4gPiAgCX0KPiA+ICAKPiA+ ICsJcmV0ID0gc2tsX2NvbXB1dGVfZGRiKHN0YXRlKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCXJl dHVybiByZXQ7Cj4gPiArCj4gPiAgCXNrbF9wcmludF93bV9jaGFuZ2VzKHN0YXRlKTsKPiA+ICAK PiA+ICAJcmV0dXJuIDA7Cj4gPiAtLSAKPiA+IDIuMTQuNAo+IAo+IC0tIAo+IFZpbGxlIFN5cmrD pGzDpAo+IEludGVsCgotLSAKTWF0dCBSb3BlcgpHcmFwaGljcyBTb2Z0d2FyZSBFbmdpbmVlcgpJ b1RHIFBsYXRmb3JtIEVuYWJsaW5nICYgRGV2ZWxvcG1lbnQKSW50ZWwgQ29ycG9yYXRpb24KKDkx NikgMzU2LTI3OTUKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==