From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 07/12] drm/amdgpu: implement cgs gpu memory callbacks Date: Tue, 29 Sep 2015 13:40:48 +0200 Message-ID: <20150929114048.GK3383@phenom.ffwll.local> References: <1436458871-16358-1-git-send-email-alexander.deucher@amd.com> <1436458871-16358-7-git-send-email-alexander.deucher@amd.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 ESMTPS id 5291E6E1CB for ; Tue, 29 Sep 2015 04:37:54 -0700 (PDT) Received: by wicfx3 with SMTP id fx3so11376760wic.0 for ; Tue, 29 Sep 2015 04:37:53 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1436458871-16358-7-git-send-email-alexander.deucher@amd.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alex Deucher Cc: Alex Deucher , Maruthi.Bayyavarapu@amd.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdWwgMDksIDIwMTUgYXQgMTI6MjE6MDZQTSAtMDQwMCwgQWxleCBEZXVjaGVyIHdy b3RlOgo+IEZyb206IENodW5taW5nIFpob3UgPGRhdmlkMS56aG91QGFtZC5jb20+Cj4gCj4gVGhp cyBpbXBsZW1lbnRzIHRoZSBjZ3MgaW50ZXJmYWNlIGZvciBhbGxvY2F0aW5nCj4gR1BVIG1lbW9y eS4KPiAKPiBSZXZpZXdlZC1ieTogSmFtbXkgWmhvdSA8SmFtbXkuWmhvdUBhbWQuY29tPgoKSSBk b24ndCBzZWUgdGhhdCByZXZpZXcgYW55d2hlcmUgb24gYSBtLWwgLi4uIHdoZXJlIGlzIGl0PwoK SSBzdHVtYmxlZCBvdmVyIHRoaXMgcGF0Y2ggYmVjYXVzZSBpdCBhZGRzIGEgbmV3IGRldi0+c3Ry dWN0X211dGV4IHVzZXIKKHRoYXQgc2hvdWxkIGJlIGEgYmlnIHdhcm5pbmcgc2lnbikgYW5kIHRo ZW4gSSBzb21laG93IHVucm9sbGVkIHNvbWUgZ2lhbnQKY2hhaW4gb2Ygd3Rmcy4gRWl0aGVyIEkn bSBjb21wbGV0ZWx5IG1pc3Npbmcgd2hhdCB0aGlzIGlzIHVzZWQgZm9yIG9yIGl0CnByb2JhYmx5 IHNob3VsZCBnZXQgcmV3b3JrZWQgYXNhcC4KLURhbmllbAoKPiBTaWduZWQtb2ZmLWJ5OiBDaHVu bWluZyBaaG91IDxkYXZpZDEuemhvdUBhbWQuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFsZXggRGV1 Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2Nncy5jIHwgMjM4ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAyMjYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9j Z3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jZ3MuYwo+IGluZGV4IGMx ZWUzOWUuLmFjMGYxMjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2Nncy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Nn cy5jCj4gQEAgLTIxLDcgKzIxLDExIEBACj4gICAqCj4gICAqCj4gICAqLwo+ICsjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAjaW5jbHVkZSA8bGlu dXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2FtZGdw dV9kcm0uaD4KPiAgI2luY2x1ZGUgImFtZGdwdS5oIgo+ICAjaW5jbHVkZSAiY2dzX2xpbnV4Lmgi Cj4gICNpbmNsdWRlICJhdG9tLmgiCj4gQEAgLTM5LDYgKzQzLDMwIEBAIHN0YXRpYyBpbnQgYW1k Z3B1X2Nnc19ncHVfbWVtX2luZm8odm9pZCAqY2dzX2RldmljZSwgZW51bSBjZ3NfZ3B1X21lbV90 eXBlIHR5cGUsCj4gIAkJCQkgICB1aW50NjRfdCAqbWNfc3RhcnQsIHVpbnQ2NF90ICptY19zaXpl LAo+ICAJCQkJICAgdWludDY0X3QgKm1lbV9zaXplKQo+ICB7Cj4gKwlDR1NfRlVOQ19BREVWOwo+ ICsJc3dpdGNoKHR5cGUpIHsKPiArCWNhc2UgQ0dTX0dQVV9NRU1fVFlQRV9fVklTSUJMRV9DT05U SUdfRkI6Cj4gKwljYXNlIENHU19HUFVfTUVNX1RZUEVfX1ZJU0lCTEVfRkI6Cj4gKwkJKm1jX3N0 YXJ0ID0gMDsKPiArCQkqbWNfc2l6ZSA9IGFkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplOwo+ICsJ CSptZW1fc2l6ZSA9IGFkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplIC0gYWRldi0+dnJhbV9waW5f c2l6ZTsKPiArCQlicmVhazsKPiArCWNhc2UgQ0dTX0dQVV9NRU1fVFlQRV9fSU5WSVNJQkxFX0NP TlRJR19GQjoKPiArCWNhc2UgQ0dTX0dQVV9NRU1fVFlQRV9fSU5WSVNJQkxFX0ZCOgo+ICsJCSpt Y19zdGFydCA9IGFkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplOwo+ICsJCSptY19zaXplID0gYWRl di0+bWMucmVhbF92cmFtX3NpemUgLSBhZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZTsKPiArCQkq bWVtX3NpemUgPSAqbWNfc2l6ZTsKPiArCQlicmVhazsKPiArCWNhc2UgQ0dTX0dQVV9NRU1fVFlQ RV9fR0FSVF9DQUNIRUFCTEU6Cj4gKwljYXNlIENHU19HUFVfTUVNX1RZUEVfX0dBUlRfV1JJVEVD T01CSU5FOgo+ICsJCSptY19zdGFydCA9IGFkZXYtPm1jLmd0dF9zdGFydDsKPiArCQkqbWNfc2l6 ZSA9IGFkZXYtPm1jLmd0dF9zaXplOwo+ICsJCSptZW1fc2l6ZSA9IGFkZXYtPm1jLmd0dF9zaXpl IC0gYWRldi0+Z2FydF9waW5fc2l6ZTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gQEAgLTQ3LDEx ICs3NSw0MyBAQCBzdGF0aWMgaW50IGFtZGdwdV9jZ3NfZ21hcF9rbWVtKHZvaWQgKmNnc19kZXZp Y2UsIHZvaWQgKmttZW0sCj4gIAkJCQl1aW50NjRfdCBtaW5fb2Zmc2V0LCB1aW50NjRfdCBtYXhf b2Zmc2V0LAo+ICAJCQkJY2dzX2hhbmRsZV90ICprbWVtX2hhbmRsZSwgdWludDY0X3QgKm1jYWRk cikKPiAgewo+IC0JcmV0dXJuIDA7Cj4gKwlDR1NfRlVOQ19BREVWOwo+ICsJaW50IHJldDsKPiAr CXN0cnVjdCBhbWRncHVfYm8gKmJvOwo+ICsJc3RydWN0IHBhZ2UgKmttZW1fcGFnZSA9IHZtYWxs b2NfdG9fcGFnZShrbWVtKTsKPiArCWludCBucGFnZXMgPSBBTElHTihzaXplLCBQQUdFX1NJWkUp ID4+IFBBR0VfU0hJRlQ7Cj4gKwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZyA9IGRybV9wcmltZV9w YWdlc190b19zZygma21lbV9wYWdlLCBucGFnZXMpOwo+ICsJcmV0ID0gYW1kZ3B1X2JvX2NyZWF0 ZShhZGV2LCBzaXplLCBQQUdFX1NJWkUsIGZhbHNlLAo+ICsJCQkgICAgICAgQU1ER1BVX0dFTV9E T01BSU5fR1RULCAwLCBzZywgJmJvKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr CXJldCA9IGFtZGdwdV9ib19yZXNlcnZlKGJvLCBmYWxzZSk7Cj4gKwlpZiAodW5saWtlbHkocmV0 ICE9IDApKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyogcGluIGJ1ZmZlciBpbnRvIEdUVCAq Lwo+ICsJcmV0ID0gYW1kZ3B1X2JvX3Bpbl9yZXN0cmljdGVkKGJvLCBBTURHUFVfR0VNX0RPTUFJ Tl9HVFQsCj4gKwkJCQkgICAgICAgbWluX29mZnNldCwgbWF4X29mZnNldCwgbWNhZGRyKTsKPiAr CWFtZGdwdV9ib191bnJlc2VydmUoYm8pOwo+ICsKPiArCSprbWVtX2hhbmRsZSA9IChjZ3NfaGFu ZGxlX3QpYm87Cj4gKwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGFtZGdwdV9j Z3NfZ3VubWFwX2ttZW0odm9pZCAqY2dzX2RldmljZSwgY2dzX2hhbmRsZV90IGttZW1faGFuZGxl KQo+ICB7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2JvICpvYmogPSAoc3RydWN0IGFtZGdwdV9ibyAqKWtt ZW1faGFuZGxlOwo+ICsKPiArCWlmIChvYmopIHsKPiArCQlpbnQgciA9IGFtZGdwdV9ib19yZXNl cnZlKG9iaiwgZmFsc2UpOwo+ICsJCWlmIChsaWtlbHkociA9PSAwKSkgewo+ICsJCQlhbWRncHVf Ym9fdW5waW4ob2JqKTsKPiArCQkJYW1kZ3B1X2JvX3VucmVzZXJ2ZShvYmopOwo+ICsJCX0KPiAr CQlhbWRncHVfYm9fdW5yZWYoJm9iaik7Cj4gKwo+ICsJfQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAg Cj4gQEAgLTYxLDQ2ICsxMjEsMjAwIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2Nnc19hbGxvY19ncHVf bWVtKHZvaWQgKmNnc19kZXZpY2UsCj4gIAkJCQkgICAgdWludDY0X3QgbWluX29mZnNldCwgdWlu dDY0X3QgbWF4X29mZnNldCwKPiAgCQkJCSAgICBjZ3NfaGFuZGxlX3QgKmhhbmRsZSkKPiAgewo+ IC0JcmV0dXJuIDA7Cj4gKwlDR1NfRlVOQ19BREVWOwo+ICsJdWludDE2X3QgZmxhZ3MgPSAwOwo+ ICsJaW50IHJldCA9IDA7Cj4gKwl1aW50MzJfdCBkb21haW4gPSAwOwo+ICsJc3RydWN0IGFtZGdw dV9ibyAqb2JqOwo+ICsJc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50Owo+ICsJc3RydWN0 IHR0bV9wbGFjZSBwbGFjZTsKPiArCj4gKwlpZiAobWluX29mZnNldCA+IG1heF9vZmZzZXQpIHsK PiArCQlCVUdfT04oMSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJLyogZmFp bCBpZiB0aGUgYWxpZ25tZW50IGlzIG5vdCBhIHBvd2VyIG9mIDIgKi8KPiArCWlmICgoKGFsaWdu ICE9IDEpICYmIChhbGlnbiAmIChhbGlnbiAtIDEpKSkKPiArCSAgICB8fCBzaXplID09IDAgfHwg YWxpZ24gPT0gMCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwo+ICsJc3dpdGNoKHR5cGUp IHsKPiArCWNhc2UgQ0dTX0dQVV9NRU1fVFlQRV9fVklTSUJMRV9DT05USUdfRkI6Cj4gKwljYXNl IENHU19HUFVfTUVNX1RZUEVfX1ZJU0lCTEVfRkI6Cj4gKwkJZmxhZ3MgPSBBTURHUFVfR0VNX0NS RUFURV9DUFVfQUNDRVNTX1JFUVVJUkVEOwo+ICsJCWRvbWFpbiA9IEFNREdQVV9HRU1fRE9NQUlO X1ZSQU07Cj4gKwkJaWYgKG1heF9vZmZzZXQgPiBhZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSkKPiAr CQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJcGxhY2UuZnBmbiA9IG1pbl9vZmZzZXQgPj4gUEFHRV9T SElGVDsKPiArCQlwbGFjZS5scGZuID0gbWF4X29mZnNldCA+PiBQQUdFX1NISUZUOwo+ICsJCXBs YWNlLmZsYWdzID0gVFRNX1BMX0ZMQUdfV0MgfCBUVE1fUExfRkxBR19VTkNBQ0hFRCB8Cj4gKwkJ CVRUTV9QTF9GTEFHX1ZSQU07Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIENHU19HUFVfTUVNX1RZUEVf X0lOVklTSUJMRV9DT05USUdfRkI6Cj4gKwljYXNlIENHU19HUFVfTUVNX1RZUEVfX0lOVklTSUJM RV9GQjoKPiArCQlmbGFncyA9IEFNREdQVV9HRU1fQ1JFQVRFX05PX0NQVV9BQ0NFU1M7Cj4gKwkJ ZG9tYWluID0gQU1ER1BVX0dFTV9ET01BSU5fVlJBTTsKPiArCQlpZiAoYWRldi0+bWMudmlzaWJs ZV92cmFtX3NpemUgPCBhZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSkgewo+ICsJCQlwbGFjZS5mcGZu ID0KPiArCQkJCW1heChtaW5fb2Zmc2V0LCBhZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSkgPj4g UEFHRV9TSElGVDsKPiArCQkJcGxhY2UubHBmbiA9Cj4gKwkJCQltaW4obWF4X29mZnNldCwgYWRl di0+bWMucmVhbF92cmFtX3NpemUpID4+IFBBR0VfU0hJRlQ7Cj4gKwkJCXBsYWNlLmZsYWdzID0g VFRNX1BMX0ZMQUdfV0MgfCBUVE1fUExfRkxBR19VTkNBQ0hFRCB8Cj4gKwkJCQlUVE1fUExfRkxB R19WUkFNOwo+ICsJCX0KPiArCj4gKwkJYnJlYWs7Cj4gKwljYXNlIENHU19HUFVfTUVNX1RZUEVf X0dBUlRfQ0FDSEVBQkxFOgo+ICsJCWRvbWFpbiA9IEFNREdQVV9HRU1fRE9NQUlOX0dUVDsKPiAr CQlwbGFjZS5mcGZuID0gbWluX29mZnNldCA+PiBQQUdFX1NISUZUOwo+ICsJCXBsYWNlLmxwZm4g PSBtYXhfb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Cj4gKwkJcGxhY2UuZmxhZ3MgPSBUVE1fUExfRkxB R19DQUNIRUQgfCBUVE1fUExfRkxBR19UVDsKPiArCQlicmVhazsKPiArCWNhc2UgQ0dTX0dQVV9N RU1fVFlQRV9fR0FSVF9XUklURUNPTUJJTkU6Cj4gKwkJZmxhZ3MgPSBBTURHUFVfR0VNX0NSRUFU RV9DUFVfR1RUX1VTV0M7Cj4gKwkJZG9tYWluID0gQU1ER1BVX0dFTV9ET01BSU5fR1RUOwo+ICsJ CXBsYWNlLmZwZm4gPSBtaW5fb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Cj4gKwkJcGxhY2UubHBmbiA9 IG1heF9vZmZzZXQgPj4gUEFHRV9TSElGVDsKPiArCQlwbGFjZS5mbGFncyA9IFRUTV9QTF9GTEFH X1dDIHwgVFRNX1BMX0ZMQUdfVFQgfAo+ICsJCQlUVE1fUExfRkxBR19VTkNBQ0hFRDsKPiArCQli cmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsKPiAr CSpoYW5kbGUgPSAwOwo+ICsKPiArCXBsYWNlbWVudC5wbGFjZW1lbnQgPSAmcGxhY2U7Cj4gKwlw bGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IDE7Cj4gKwlwbGFjZW1lbnQuYnVzeV9wbGFjZW1lbnQg PSAmcGxhY2U7Cj4gKwlwbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKPiArCj4gKwly ZXQgPSBhbWRncHVfYm9fY3JlYXRlX3Jlc3RyaWN0ZWQoYWRldiwgc2l6ZSwgUEFHRV9TSVpFLAo+ ICsJCQkJCSAgdHJ1ZSwgZG9tYWluLCBmbGFncywKPiArCQkJCQkgIE5VTEwsICZwbGFjZW1lbnQs ICZvYmopOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigiKCVkKSBibyBjcmVhdGUgZmFp bGVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwkqaGFuZGxlID0gKGNnc19o YW5kbGVfdClvYmo7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBh bWRncHVfY2dzX2ltcG9ydF9ncHVfbWVtKHZvaWQgKmNnc19kZXZpY2UsIGludCBkbWFidWZfZmQs Cj4gIAkJCQkgICAgIGNnc19oYW5kbGVfdCAqaGFuZGxlKQo+ICB7Cj4gLQkvKiBUT0RPICovCj4g KwlDR1NfRlVOQ19BREVWOwo+ICsJaW50IHI7Cj4gKwl1aW50MzJfdCBkbWFfaGFuZGxlOwo+ICsJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibzsKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBhZGV2LT5kZGV2Owo+ICsJc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYgPSBOVUxMLCAqcHJpdjsKPiArCj4gKwltdXRleF9sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHByaXYsICZkZXYtPmZpbGVsaXN0LCBs aGVhZCkgewo+ICsJCXJjdV9yZWFkX2xvY2soKTsKPiArCQlpZiAocHJpdi0+cGlkID09IGdldF9w aWQodGFza19waWQoY3VycmVudCkpKQo+ICsJCQlmaWxlX3ByaXYgPSBwcml2Owo+ICsJCXJjdV9y ZWFkX3VubG9jaygpOwo+ICsJCWlmIChmaWxlX3ByaXYpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsJ bXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlyID0gZGV2LT5kcml2ZXItPnBy aW1lX2ZkX3RvX2hhbmRsZShkZXYsCj4gKwkJCQkJICAgIGZpbGVfcHJpdiwgZG1hYnVmX2ZkLAo+ ICsJCQkJCSAgICAmZG1hX2hhbmRsZSk7Cj4gKwlzcGluX2xvY2soJmZpbGVfcHJpdi0+dGFibGVf bG9jayk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgd2UgY3VycmVudGx5IGhhdmUgYSByZWZlcmVuY2Ug b24gdGhlIG9iamVjdCAqLwo+ICsJb2JqID0gaWRyX2ZpbmQoJmZpbGVfcHJpdi0+b2JqZWN0X2lk ciwgZG1hX2hhbmRsZSk7Cj4gKwlpZiAob2JqID09IE5VTEwpIHsKPiArCQlzcGluX3VubG9jaygm ZmlsZV9wcml2LT50YWJsZV9sb2NrKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXNw aW5fdW5sb2NrKCZmaWxlX3ByaXYtPnRhYmxlX2xvY2spOwo+ICsJYm8gPSBnZW1fdG9fYW1kZ3B1 X2JvKG9iaik7Cj4gKwkqaGFuZGxlID0gKGNnc19oYW5kbGVfdClibzsKPiAgCXJldHVybiAwOwo+ ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGFtZGdwdV9jZ3NfZnJlZV9ncHVfbWVtKHZvaWQgKmNnc19k ZXZpY2UsIGNnc19oYW5kbGVfdCBoYW5kbGUpCj4gIHsKPiAtCS8qIFRPRE8gKi8KPiArCXN0cnVj dCBhbWRncHVfYm8gKm9iaiA9IChzdHJ1Y3QgYW1kZ3B1X2JvICopaGFuZGxlOwo+ICsKPiArCWlm IChvYmopIHsKPiArCQlpbnQgciA9IGFtZGdwdV9ib19yZXNlcnZlKG9iaiwgZmFsc2UpOwo+ICsJ CWlmIChsaWtlbHkociA9PSAwKSkgewo+ICsJCQlhbWRncHVfYm9fa3VubWFwKG9iaik7Cj4gKwkJ CWFtZGdwdV9ib191bnBpbihvYmopOwo+ICsJCQlhbWRncHVfYm9fdW5yZXNlcnZlKG9iaik7Cj4g KwkJfQo+ICsJCWFtZGdwdV9ib191bnJlZigmb2JqKTsKPiArCj4gKwl9Cj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiAgc3RhdGljIGludCBhbWRncHVfY2dzX2dtYXBfZ3B1X21lbSh2b2lkICpjZ3Nf ZGV2aWNlLCBjZ3NfaGFuZGxlX3QgaGFuZGxlLAo+ICAJCQkJICAgdWludDY0X3QgKm1jYWRkcikK PiAgewo+IC0JLyogVE9ETyAqLwo+IC0JcmV0dXJuIDA7Cj4gKwlpbnQgcjsKPiArCXU2NCBtaW5f b2Zmc2V0LCBtYXhfb2Zmc2V0Owo+ICsJc3RydWN0IGFtZGdwdV9ibyAqb2JqID0gKHN0cnVjdCBh bWRncHVfYm8gKiloYW5kbGU7Cj4gKwo+ICsJV0FSTl9PTl9PTkNFKG9iai0+cGxhY2VtZW50Lm51 bV9wbGFjZW1lbnQgPiAxKTsKPiArCj4gKwltaW5fb2Zmc2V0ID0gb2JqLT5wbGFjZW1lbnRzWzBd LmZwZm4gPDwgUEFHRV9TSElGVDsKPiArCW1heF9vZmZzZXQgPSBvYmotPnBsYWNlbWVudHNbMF0u bHBmbiA8PCBQQUdFX1NISUZUOwo+ICsKPiArCXIgPSBhbWRncHVfYm9fcmVzZXJ2ZShvYmosIGZh bHNlKTsKPiArCWlmICh1bmxpa2VseShyICE9IDApKQo+ICsJCXJldHVybiByOwo+ICsJciA9IGFt ZGdwdV9ib19waW5fcmVzdHJpY3RlZChvYmosIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwKPiArCQkJ CSAgICAgbWluX29mZnNldCwgbWF4X29mZnNldCwgbWNhZGRyKTsKPiArCWFtZGdwdV9ib191bnJl c2VydmUob2JqKTsKPiArCXJldHVybiByOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGFtZGdwdV9j Z3NfZ3VubWFwX2dwdV9tZW0odm9pZCAqY2dzX2RldmljZSwgY2dzX2hhbmRsZV90IGhhbmRsZSkK PiAgewo+IC0JLyogVE9ETyAqLwo+IC0JcmV0dXJuIDA7Cj4gKwlpbnQgcjsKPiArCXN0cnVjdCBh bWRncHVfYm8gKm9iaiA9IChzdHJ1Y3QgYW1kZ3B1X2JvICopaGFuZGxlOwo+ICsJciA9IGFtZGdw dV9ib19yZXNlcnZlKG9iaiwgZmFsc2UpOwo+ICsJaWYgKHVubGlrZWx5KHIgIT0gMCkpCj4gKwkJ cmV0dXJuIHI7Cj4gKwlyID0gYW1kZ3B1X2JvX3VucGluKG9iaik7Cj4gKwlhbWRncHVfYm9fdW5y ZXNlcnZlKG9iaik7Cj4gKwlyZXR1cm4gcjsKPiAgfQo+ICAKPiAgc3RhdGljIGludCBhbWRncHVf Y2dzX2ttYXBfZ3B1X21lbSh2b2lkICpjZ3NfZGV2aWNlLCBjZ3NfaGFuZGxlX3QgaGFuZGxlLAo+ ICAJCQkJICAgdm9pZCAqKm1hcCkKPiAgewo+IC0JLyogVE9ETyAqLwo+IC0JcmV0dXJuIDA7Cj4g KwlpbnQgcjsKPiArCXN0cnVjdCBhbWRncHVfYm8gKm9iaiA9IChzdHJ1Y3QgYW1kZ3B1X2JvICop aGFuZGxlOwo+ICsJciA9IGFtZGdwdV9ib19yZXNlcnZlKG9iaiwgZmFsc2UpOwo+ICsJaWYgKHVu bGlrZWx5KHIgIT0gMCkpCj4gKwkJcmV0dXJuIHI7Cj4gKwlyID0gYW1kZ3B1X2JvX2ttYXAob2Jq LCBtYXApOwo+ICsJYW1kZ3B1X2JvX3VucmVzZXJ2ZShvYmopOwo+ICsJcmV0dXJuIHI7Cj4gIH0K PiAgCj4gIHN0YXRpYyBpbnQgYW1kZ3B1X2Nnc19rdW5tYXBfZ3B1X21lbSh2b2lkICpjZ3NfZGV2 aWNlLCBjZ3NfaGFuZGxlX3QgaGFuZGxlKQo+ICB7Cj4gLQkvKiBUT0RPICovCj4gLQlyZXR1cm4g MDsKPiArCWludCByOwo+ICsJc3RydWN0IGFtZGdwdV9ibyAqb2JqID0gKHN0cnVjdCBhbWRncHVf Ym8gKiloYW5kbGU7Cj4gKwlyID0gYW1kZ3B1X2JvX3Jlc2VydmUob2JqLCBmYWxzZSk7Cj4gKwlp ZiAodW5saWtlbHkociAhPSAwKSkKPiArCQlyZXR1cm4gcjsKPiArCWFtZGdwdV9ib19rdW5tYXAo b2JqKTsKPiArCWFtZGdwdV9ib191bnJlc2VydmUob2JqKTsKPiArCXJldHVybiByOwo+ICB9Cj4g IAo+ICBzdGF0aWMgdWludDMyX3QgYW1kZ3B1X2Nnc19yZWFkX3JlZ2lzdGVyKHZvaWQgKmNnc19k ZXZpY2UsIHVuc2lnbmVkIG9mZnNldCkKPiAtLSAKPiAxLjguMy4xCj4gCj4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBs aXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApEYW5pZWwgVmV0dGVy ClNvZnR3YXJlIEVuZ2luZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5j aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=