From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH v2 6/6] drm/cirrus: rewrite and modernize driver. Date: Thu, 4 Apr 2019 19:41:14 +0200 Message-ID: <20190404174114.GG23897@ravnborg.org> References: <20190404152430.8263-1-kraxel@redhat.com> <20190404152430.8263-7-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk4.altibox.net (asavdk4.altibox.net [109.247.116.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 65EF46E361 for ; Thu, 4 Apr 2019 17:41:18 +0000 (UTC) Content-Disposition: inline In-Reply-To: <20190404152430.8263-7-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Gerd Hoffmann Cc: David Airlie , Dave Airlie , open list , dri-devel@lists.freedesktop.org, "open list:DRM DRIVER FOR QEMU'S CIRRUS DEVICE" List-Id: dri-devel@lists.freedesktop.org SGkgR2VyZC4KClZlcnkgbmljZSBkaWZmc3RhdCAtIGdvb2Qgd29yayBpbmRlZWQhCgo+IEkgdGhp bmsgaXQnbGwgc3RpbGwgYmUgYWxvdCBlYXNpZXIgdG8gcmV2aWV3IHRoYW4gYQo+IGxvbmdpc2gg YmFieS1zdGVwIHBhdGNoIHNlcmllcy4KQWdyZWVkLgoKU29tZSByYW5kb20gbml0cyBiZWxvdy4K V2l0aCB0aGUgcmVsZXZhbnQgcGFydHMgYWRkcmVzc2VkIHlvdSBjYW4gYWRkIG15OgpSZXZpZXdl ZC1ieTogU2FtIFJhdm5ib3JnIDxzYW1AcmF2bmJvcmcub3JnPgoKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTA2MGUzZDg1NGQzCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzLmMKPiBAQCAtMCwwICsxLDYyMSBA QAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAxMi0yMDE5IFJlZCBIYXQKPiArICoKPiArICogVGhp cyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUg R2VuZXJhbAo+ICsgKiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFNlZSB0aGUgZmlsZSBDT1BZ SU5HIGluIHRoZSBtYWluCj4gKyAqIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yIG1vcmUg ZGV0YWlscy4KPiArICoKPiArICogQXV0aG9yczogTWF0dGhldyBHYXJyZXR0Cj4gKyAqCSAgICBE YXZlIEFpcmxpZQo+ICsgKgkgICAgR2VyZCBIb2ZmbWFubgo+ICsgKgo+ICsgKiBQb3J0aW9ucyBv ZiB0aGlzIGNvZGUgZGVyaXZlZCBmcm9tIGNpcnJ1c2ZiLmM6Cj4gKyAqIGRyaXZlcnMvdmlkZW8v Y2lycnVzZmIuYyAtIGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGNoaXBzZXRzCj4gKyAqCj4gKyAq IENvcHlyaWdodCAxOTk5LTIwMDEgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgo+ICsg Ki8KQ2FuIHdlIGludHJvZHVjZSBhbiBTUERYIGlkZW50aWZpZXI/CihJIGFtIG5vdCBnb29kIGF0 IHRoZSBsaWNlbnNlIHN0dWZmLCBzbyBJIGNhbm5vdCB0ZWxsKQoKPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9j b25zb2xlLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlkZW8vdmdhLmg+Cj4gKyNpbmNsdWRlIDx2aWRl by9jaXJydXMuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9maWxlLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3ZibGFuay5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiAr Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9mYl9o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9z aG1lbV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2ZyYW1lYnVmZmVyX2hlbHBl ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2RhbWFnZV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfc3RhdGVfaGVscGVyLmg+ ClBsZWFzZSBzb3J0IGFnYWluLCB5b3UgYWRkZWQgYSBmZXcgbmV3IGluY2x1ZGVzIHNpbmNlIGxh c3QgdGltZQoKPiArc3RydWN0IGNpcnJ1c19kZXZpY2Ugewo+ICsJc3RydWN0IGRybV9kZXZpY2UJ ICAgICAgIGRldjsKPiArCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBwaXBlOwo+ICsJ c3RydWN0IGRybV9jb25uZWN0b3IJICAgICAgIGNvbm47Cj4gKwl1bnNpZ25lZCBpbnQJCSAgICAg ICBjcHA7Cj4gKwl1bnNpZ25lZCBpbnQJCSAgICAgICBwaXRjaDsKPiArCXZvaWQgX19pb21lbQkJ ICAgICAgICp2cmFtOwo+ICsJdm9pZCBfX2lvbWVtCQkgICAgICAgKm1taW87Cj4gK307Cj4gKwo+ ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KPiArLyoKPiArICogVGhlIG1lYXQgb2YgdGhpcyBkcml2ZXIuIFRo ZSBjb3JlIHBhc3NlcyB1cyBhIG1vZGUgYW5kIHdlIGhhdmUgdG8gcHJvZ3JhbQo+ICsgKiBpdC4g VGhlIG1vZGVzZXR0aW5nIGhlcmUgaXMgdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCB0byBzYXRp c2Z5IHRoZSBxZW11Cj4gKyAqIGVtdWxhdGlvbiBvZiB0aGlzIGhhcmR3YXJlLCBhbmQgcnVubmlu ZyB0aGlzIGFnYWluc3QgYSByZWFsIGRldmljZSBpcwo+ICsgKiBsaWtlbHkgdG8gcmVzdWx0IGlu IGFuIGluYWRlcXVhdGVseSBwcm9ncmFtbWVkIG1vZGUuIFdlJ3ZlIGFscmVhZHkgaGFkCj4gKyAq IHRoZSBvcHBvcnR1bml0eSB0byBtb2RpZnkgdGhlIG1vZGUsIHNvIHdoYXRldmVyIHdlIHJlY2Vp dmUgaGVyZSBzaG91bGQKPiArICogYmUgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGNvcnJlY3RseSBw cm9ncmFtbWVkIGFuZCBkaXNwbGF5ZWQKPiArICovCj4gKwo+ICsjZGVmaW5lIFJSRUc4KHJlZykg aW9yZWFkOCgoKHZvaWQgX19pb21lbSAqKWNpcnJ1cy0+bW1pbykgKyAocmVnKSkKPiArI2RlZmlu ZSBXUkVHOChyZWcsIHYpIGlvd3JpdGU4KHYsICgodm9pZCBfX2lvbWVtICopY2lycnVzLT5tbWlv KSArIChyZWcpKQo+ICsjZGVmaW5lIFJSRUczMihyZWcpIGlvcmVhZDMyKCgodm9pZCBfX2lvbWVt ICopY2lycnVzLT5tbWlvKSArIChyZWcpKQo+ICsjZGVmaW5lIFdSRUczMihyZWcsIHYpIGlvd3Jp dGUzMih2LCAoKHZvaWQgX19pb21lbSAqKWNpcnJ1cy0+bW1pbykgKyAocmVnKSkKClRoZSBjYXN0 IG9mIGNpcnJ1cy0+bW1pbyB0byAodm9pZCBfX2lvbWVtICopIHNob3VsZCBub3QgYmUgbmVjZXNz YXJ5IGFzCnRoaXMgaXMgdGhlIHR5cGUgaXMgaGFzIGluIHN0cnVjdCBjaXJydXNfZGV2aWNlCgpU aGVyZSBpcyBub3QgcmVhc29uIHRvIHVzZSBhIGRlZmluZSwgdXNlIGNhbiB1c2UgYSBzdGF0aWMg aW5saW5lIGZ1bmN0aW9uCgo+ICsKPiArI2RlZmluZSBTRVFfSU5ERVggNAo+ICsjZGVmaW5lIFNF UV9EQVRBIDUKPiArCj4gKyNkZWZpbmUgV1JFR19TRVEocmVnLCB2KQkJCQkJXAo+ICsJZG8gewkJ CQkJCQlcCj4gKwkJV1JFRzgoU0VRX0lOREVYLCByZWcpOwkJCQlcCj4gKwkJV1JFRzgoU0VRX0RB VEEsIHYpOwkJCQlcCj4gKwl9IHdoaWxlICgwKQkJCQkJCVwKVGhpcyBpcyBvbmx5IHVzZWQgb25j ZSwgZHJvcCB0aGUgZGVmaW5lPwoKCj4gKyNkZWZpbmUgQ1JUX0lOREVYIDB4MTQKPiArI2RlZmlu ZSBDUlRfREFUQSAweDE1Cj4gKwo+ICsjZGVmaW5lIFdSRUdfQ1JUKHJlZywgdikJCQkJCVwKPiAr CWRvIHsJCQkJCQkJXAo+ICsJCVdSRUc4KENSVF9JTkRFWCwgcmVnKTsJCQkJXAo+ICsJCVdSRUc4 KENSVF9EQVRBLCB2KTsJCQkJXAo+ICsJfSB3aGlsZSAoMCkJCQkJCQlcCnN0YXRpYyBpbmxpbmU/ Cgo+ICsjZGVmaW5lIEdGWF9JTkRFWCAweGUKPiArI2RlZmluZSBHRlhfREFUQSAweGYKPiArCj4g KyNkZWZpbmUgV1JFR19HRlgocmVnLCB2KQkJCQkJXAo+ICsJZG8gewkJCQkJCQlcCj4gKwkJV1JF RzgoR0ZYX0lOREVYLCByZWcpOwkJCQlcCj4gKwkJV1JFRzgoR0ZYX0RBVEEsIHYpOwkJCQlcCj4g Kwl9IHdoaWxlICgwKQkJCQkJCVwKVXNlZCB0d2ljZSAtIGRyb3A/Cj4gKwo+ICsjZGVmaW5lIFZH QV9EQUNfTUFTSyAweDYKPiArCj4gKyNkZWZpbmUgV1JFR19IRFIodikJCQkJCQlcCj4gKwlkbyB7 CQkJCQkJCVwKPiArCQlSUkVHOChWR0FfREFDX01BU0spOwkJCQlcCj4gKwkJUlJFRzgoVkdBX0RB Q19NQVNLKTsJCQkJXAo+ICsJCVJSRUc4KFZHQV9EQUNfTUFTSyk7CQkJCVwKPiArCQlSUkVHOChW R0FfREFDX01BU0spOwkJCQlcCj4gKwkJV1JFRzgoVkdBX0RBQ19NQVNLLCB2KTsJCQkJXAo+ICsJ fSB3aGlsZSAoMCkJCQkJCQlcClVzZWQgb25jZSwgZHJvcD8KCj4gK3N0YXRpYyBpbnQgY2lycnVz X2NvbnZlcnRfdG8oc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCWlmIChmYi0+ Zm9ybWF0LT5jcHBbMF0gPT0gNCAmJiBmYi0+cGl0Y2hlc1swXSA+IENJUlJVU19NQVhfUElUQ0gp IHsKPiArCQlpZiAoZmItPndpZHRoICogMyA8PSBDSVJSVVNfTUFYX1BJVENIKQo+ICsJCQkvKiBj b252ZXJ0IGZyb20gWFIyNCB0byBSRzI0ICovCj4gKwkJCXJldHVybiAzOwo+ICsJCWVsc2UKPiAr CQkJLyogY29udmVydCBmcm9tIFhSMjQgdG8gUkcxNiAqLwo+ICsJCQlyZXR1cm4gMjsKPiArCX0K PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNpcnJ1c19jcHAoc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCWludCBjb252ZXJ0X2NwcCA9IGNpcnJ1c19jb252 ZXJ0X3RvKGZiKTsKPiArCj4gKwlpZiAoY29udmVydF9jcHApCj4gKwkJcmV0dXJuIGNvbnZlcnRf Y3BwOwo+ICsJcmV0dXJuIGZiLT5mb3JtYXQtPmNwcFswXTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBjaXJydXNfcGl0Y2goc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCWludCBj b252ZXJ0X2NwcCA9IGNpcnJ1c19jb252ZXJ0X3RvKGZiKTsKPiArCj4gKwlpZiAoY29udmVydF9j cHApCj4gKwkJcmV0dXJuIGNvbnZlcnRfY3BwICogZmItPndpZHRoOwo+ICsJcmV0dXJuIGZiLT5w aXRjaGVzWzBdOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNpcnJ1c19tb2RlX3NldChzdHJ1Y3Qg Y2lycnVzX2RldmljZSAqY2lycnVzLAo+ICsJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKPiArCQkJICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gK3sKPiArCWludCBo c3luY3N0YXJ0LCBoc3luY2VuZCwgaHRvdGFsLCBoZGlzcGVuZDsKPiArCWludCB2dG90YWwsIHZk aXNwZW5kOwo+ICsJaW50IHRtcDsKPiArCWludCBzcjA3ID0gMCwgaGRyID0gMDsKPiArCj4gKwlo dG90YWwgPSBtb2RlLT5odG90YWwgLyA4Owo+ICsJaHN5bmNlbmQgPSBtb2RlLT5oc3luY19lbmQg LyA4Owo+ICsJaHN5bmNzdGFydCA9IG1vZGUtPmhzeW5jX3N0YXJ0IC8gODsKPiArCWhkaXNwZW5k ID0gbW9kZS0+aGRpc3BsYXkgLyA4Owo+ICsKPiArCXZ0b3RhbCA9IG1vZGUtPnZ0b3RhbDsKPiAr CXZkaXNwZW5kID0gbW9kZS0+dmRpc3BsYXk7Cj4gKwo+ICsJdmRpc3BlbmQgLT0gMTsKPiArCXZ0 b3RhbCAtPSAyOwo+ICsKPiArCWh0b3RhbCAtPSA1Owo+ICsJaGRpc3BlbmQgLT0gMTsKPiArCWhz eW5jc3RhcnQgKz0gMTsKPiArCWhzeW5jZW5kICs9IDE7Cj4gKwo+ICsJV1JFR19DUlQoVkdBX0NS VENfVl9TWU5DX0VORCwgMHgyMCk7Cj4gKwlXUkVHX0NSVChWR0FfQ1JUQ19IX1RPVEFMLCBodG90 YWwpOwo+ICsJV1JFR19DUlQoVkdBX0NSVENfSF9ESVNQLCBoZGlzcGVuZCk7Cj4gKwlXUkVHX0NS VChWR0FfQ1JUQ19IX1NZTkNfU1RBUlQsIGhzeW5jc3RhcnQpOwo+ICsJV1JFR19DUlQoVkdBX0NS VENfSF9TWU5DX0VORCwgaHN5bmNlbmQpOwo+ICsJV1JFR19DUlQoVkdBX0NSVENfVl9UT1RBTCwg dnRvdGFsICYgMHhmZik7Cj4gKwlXUkVHX0NSVChWR0FfQ1JUQ19WX0RJU1BfRU5ELCB2ZGlzcGVu ZCAmIDB4ZmYpOwo+ICsKPiArCXRtcCA9IDB4NDA7Cj4gKwlpZiAoKHZkaXNwZW5kICsgMSkgJiA1 MTIpCj4gKwkJdG1wIHw9IDB4MjA7Cj4gKwlXUkVHX0NSVChWR0FfQ1JUQ19NQVhfU0NBTiwgdG1w KTsKPiArCj4gKwkvKgo+ICsJICogT3ZlcmZsb3cgYml0cyBmb3IgdmFsdWVzIHRoYXQgZG9uJ3Qg Zml0IGluIHRoZSBzdGFuZGFyZCByZWdpc3RlcnMKPiArCSAqLwo+ICsJdG1wID0gMTY7Cj4gKwlp ZiAodnRvdGFsICYgMjU2KQo+ICsJCXRtcCB8PSAxOwo+ICsJaWYgKHZkaXNwZW5kICYgMjU2KQo+ ICsJCXRtcCB8PSAyOwo+ICsJaWYgKCh2ZGlzcGVuZCArIDEpICYgMjU2KQo+ICsJCXRtcCB8PSA4 Owo+ICsJaWYgKHZ0b3RhbCAmIDUxMikKPiArCQl0bXAgfD0gMzI7Cj4gKwlpZiAodmRpc3BlbmQg JiA1MTIpCj4gKwkJdG1wIHw9IDY0Owo+ICsJV1JFR19DUlQoVkdBX0NSVENfT1ZFUkZMT1csIHRt cCk7Cj4gKwo+ICsJdG1wID0gMDsKPiArCj4gKwkvKiBNb3JlIG92ZXJmbG93IGJpdHMgKi8KPiAr Cj4gKwlpZiAoKGh0b3RhbCArIDUpICYgNjQpCj4gKwkJdG1wIHw9IDE2Owo+ICsJaWYgKChodG90 YWwgKyA1KSAmIDEyOCkKPiArCQl0bXAgfD0gMzI7Cj4gKwlpZiAodnRvdGFsICYgMjU2KQo+ICsJ CXRtcCB8PSA2NDsKPiArCWlmICh2dG90YWwgJiA1MTIpCj4gKwkJdG1wIHw9IDEyODsKRm9yIGJp dCBvcGVyYXRpb25zIC8gbnVtYmVycyBhYm92ZSBjb25zaWRlciB0byBoZXhhZGVjaW1hbCBudW1i ZXJzIHRvIGluY3JlYXNlIHJlYWRhYmlsaXR5LgoKPiArCj4gKwlXUkVHX0NSVChDTF9DUlQxQSwg dG1wKTsKPiArCj4gKwkvKiBEaXNhYmxlIEhlcmN1bGVzL0NHQSBjb21wYXRpYmlsaXR5ICovCj4g KwlXUkVHX0NSVChWR0FfQ1JUQ19NT0RFLCAweDAzKTsKPiArCj4gKwlXUkVHOChTRVFfSU5ERVgs IDB4Nyk7Cj4gKwlzcjA3ID0gUlJFRzgoU0VRX0RBVEEpOwo+ICsJc3IwNyAmPSAweGUwOwo+ICsJ aGRyID0gMDsKPiArCj4gKwljaXJydXMtPmNwcCA9IGNpcnJ1c19jcHAoZmIpOwo+ICsJc3dpdGNo IChjaXJydXMtPmNwcCAqIDgpIHsKPiArCWNhc2UgODoKPiArCQlzcjA3IHw9IDB4MTE7Cj4gKwkJ YnJlYWs7Cj4gKwljYXNlIDE2Ogo+ICsJCXNyMDcgfD0gMHgxNzsKPiArCQloZHIgPSAweGMxOwo+ ICsJCWJyZWFrOwo+ICsJY2FzZSAyNDoKPiArCQlzcjA3IHw9IDB4MTU7Cj4gKwkJaGRyID0gMHhj NTsKPiArCQlicmVhazsKPiArCWNhc2UgMzI6Cj4gKwkJc3IwNyB8PSAweDE5Owo+ICsJCWhkciA9 IDB4YzU7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAtMTsKPiArCX0KPiAr Cj4gKwlXUkVHX1NFUSgweDcsIHNyMDcpOwo+ICsKPiArCS8qIFByb2dyYW0gdGhlIHBpdGNoICov Cj4gKwljaXJydXMtPnBpdGNoID0gY2lycnVzX3BpdGNoKGZiKTsKPiArCXRtcCA9IGNpcnJ1cy0+ cGl0Y2ggLyA4Owo+ICsJV1JFR19DUlQoVkdBX0NSVENfT0ZGU0VULCB0bXApOwo+ICsKPiArCS8q IEVuYWJsZSBleHRlbmRlZCBibGFua2luZyBhbmQgcGl0Y2ggYml0cywgYW5kIGVuYWJsZSBmdWxs IG1lbW9yeSAqLwo+ICsJdG1wID0gMHgyMjsKPiArCXRtcCB8PSAoY2lycnVzLT5waXRjaCA+PiA3 KSAmIDB4MTA7Cj4gKwl0bXAgfD0gKGNpcnJ1cy0+cGl0Y2ggPj4gNikgJiAweDQwOwo+ICsJV1JF R19DUlQoMHgxYiwgdG1wKTsKPiArCj4gKwkvKiBFbmFibGUgaGlnaC1jb2xvdXIgbW9kZXMgKi8K PiArCVdSRUdfR0ZYKFZHQV9HRlhfTU9ERSwgMHg0MCk7Cj4gKwo+ICsJLyogQW5kIHNldCBncmFw aGljcyBtb2RlICovCj4gKwlXUkVHX0dGWChWR0FfR0ZYX01JU0MsIDB4MDEpOwo+ICsKPiArCVdS RUdfSERSKGhkcik7Cj4gKwkvKiBjaXJydXNfY3J0Y19kb19zZXRfYmFzZShjcnRjLCBvbGRfZmIs IHgsIHksIDApOyAqLwo+ICsKPiArCS8qIFVuYmxhbmsgKG5lZWRlZCBvbiBTMyByZXN1bWUsIHZn YWJpb3MgZG9lc24ndCBkbyBpdCB0aGVuKSAqLwo+ICsJb3V0YigweDIwLCAweDNjMCk7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2lycnVzX3BpcGVfdXBkYXRlKHN0cnVj dCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSAqcGlwZSwKPiArCQkJICAgICAgIHN0cnVjdCBkcm1f cGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKPiArewo+ICsJc3RydWN0IGNpcnJ1c19kZXZpY2UgKmNp cnJ1cyA9IHBpcGUtPmNydGMuZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlID0gcGlwZS0+cGxhbmUuc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGMgPSAmcGlwZS0+Y3J0YzsKPiArCXN0cnVjdCBkcm1fcmVjdCByZWN0Owo+ICsKPiArCWlmIChw aXBlLT5wbGFuZS5zdGF0ZS0+ZmIgJiYKPiArCSAgICBjaXJydXMtPmNwcCAhPSBjaXJydXNfY3Bw KHBpcGUtPnBsYW5lLnN0YXRlLT5mYikpCj4gKwkJY2lycnVzX21vZGVfc2V0KGNpcnJ1cywgJmNy dGMtPm1vZGUsCj4gKwkJCQlwaXBlLT5wbGFuZS5zdGF0ZS0+ZmIpOwo+ICsKPiArCWlmIChkcm1f YXRvbWljX2hlbHBlcl9kYW1hZ2VfbWVyZ2VkKG9sZF9zdGF0ZSwgc3RhdGUsICZyZWN0KSkKPiAr CQljaXJydXNfZmJfYmxpdF9yZWN0KHBpcGUtPnBsYW5lLnN0YXRlLT5mYiwgJnJlY3QpOwo+ICsK PiArCWlmIChjcnRjLT5zdGF0ZS0+ZXZlbnQpIHsKPiArCQlzcGluX2xvY2tfaXJxKCZjcnRjLT5k ZXYtPmV2ZW50X2xvY2spOwo+ICsJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNy dGMtPnN0YXRlLT5ldmVudCk7Cj4gKwkJc3Bpbl91bmxvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50 X2xvY2spOwo+ICsJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7ClNob3VsZCB5b3Ugc2V0IGNy dGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7IGJlZm9yZSBzcGluX3VubG9ja19pcnEoKT8KCj4gKwo+ ICsvKiBvbmx5IGJpbmQgdG8gdGhlIGNpcnJ1cyBjaGlwIGluIHFlbXUgKi8KPiArc3RhdGljIGNv bnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewo+ICsJeyBQQ0lfVkVORE9S X0lEX0NJUlJVUywgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ0NiwKPiArCSAgUENJX1NVQlZFTkRP Ul9JRF9SRURIQVRfUVVNUkFORVQsIFBDSV9TVUJERVZJQ0VfSURfUUVNVSwKPiArCSAgMCwgMCwg MCB9LAoKCVBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQ0lSUlVTLCBQQ0lfREVWSUNFX0lE X0NJUlJVU181NDQ2LAoJCSAgICAgICBQQ0lfU1VCVkVORE9SX0lEX1JFREhBVF9RVU1SQU5FVCwg UENJX1NVQkRFVklDRV9JRF9RRU1VKQo/Pz8/CkhtbSwgbG9va3MgbGlrZSBhbiBhbHRlcm5hdGl2 ZSB3YXkgdG8gc2F5IHRoZSBzYW1lLCB0aGF0IGlzIGhhcmRseSBtdWNoIGltcHJvdmVtZW50PyE/ CgoKPiArCXsgUENJX1ZFTkRPUl9JRF9DSVJSVVMsIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NDYs Cj4gKwkgIFBDSV9WRU5ET1JfSURfWEVOLCAweDAwMDEsCj4gKwkgIDAsIDAsIDAgfSwKPiArCXsg LyogZW5kIGlmIGxpc3QgKi99CkFkZCBzcGFjZSBiZWZvcmUgZmluYWwgfSAKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==