From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH] drm/vc4: Allow using more than 256MB of CMA memory. Date: Fri, 14 Apr 2017 10:08:25 +0200 Message-ID: <20170414100825.254b8181@bbrezillon> References: <20170327231025.19391-1-eric@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.free-electrons.com (mail.free-electrons.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id BC4236E08C for ; Fri, 14 Apr 2017 08:08:36 +0000 (UTC) In-Reply-To: <20170327231025.19391-1-eric@anholt.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAyNyBNYXIgMjAxNyAxNjoxMDoyNSAtMDcwMApFcmljIEFuaG9sdCA8ZXJpY0Bhbmhv bHQubmV0PiB3cm90ZToKCj4gVW50aWwgbm93LCB3ZSd2ZSBoYWQgdG8gbGltaXQgUmFzcGJlcnJ5 IFBpIHRvIDI1Nk1CIG9mIENNQSBtZW1vcnkgdG8KPiBrZWVwIGZyb20gdHJpZ2dlcmluZyB0aGUg aGFyZHdhcmUgYWRkcmVzc2luZyBidWcgYmV0d2VlbiBvZiB0aGUgdGlsZQo+IGJpbm5lciBvZiB0 aGUgdGlsZSBhbGxvYyBtZW1vcnkgKHdoZXJlIHRoZSB0b3AgNCBiaXRzIGNvbWUgZnJvbSB0aGUK PiB0aWxlIHN0YXRlIGRhdGEgYXJyYXkncyBhZGRyZXNzKS4KPiAKPiBUbyB3b3JrIGFyb3VuZCB0 aGF0IGFuZCBhbGxvdyBtb3JlIG1lbW9yeSB0byBiZSByZXNlcnZlZCBmb3IgZ3JhcGhpY3MsCj4g YWxsb2NhdGUgYSBzaW5nbGUgQk8gdG8gc3RvcmUgdGlsZSBzdGF0ZSBkYXRhIGFycmF5cyBhbmQg dGlsZQo+IGFsbG9jL292ZXJmbG93IG1lbW9yeSB3aGlsZSB0aGUgR1BVIGlzIGFjdGl2ZSwgYW5k IG1ha2Ugc3VyZSB0aGF0IHRoYXQKPiBvbmUgQk8gZG9lc24ndCBoYXBwZW4gdG8gY3Jvc3MgYSAy NTZNQiBib3VuZGFyeS4gIFdpdGggdGhhdCBpbiBwbGFjZSwKPiB3ZSBjYW4gYWxsb2NhdGUgdGV4 dHVyZXMgYW5kIHNoYWRlcnMgYW55d2hlcmUgaW4gc3lzdGVtIG1lbW9yeSAoc3RpbGwKPiBjb250 aWd1b3VzLCBvZiBjb3Vyc2UpLgoKSXQncyBoYXJkIHRvIHJldmlldyBzb21ldGhpbmcgSSBkb24n dCBxdWl0ZSB1bmRlcnN0YW5kLCBidXQgSSBkaWRuJ3QKc3BvdCBhbnkgcHJvYmxlbSBhbmQgdGhl IGNvZGUgc2VlbXMgdG8gZm9sbG93IHdoYXQgdGhlIGNvbW1pdCBtZXNzYWdlCnNheXM6IG1ha2Ug c3VyZSB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIHRpbGUgYmlubmVyIChzdGlsbCBoYXZlIHRvIGxv b2sKYXQgd2hhdCBhIHRpbGUgYmlubmVyIGlzIDotKSkgZG9lcyBub3QgY3Jvc3MgYSAyNTZNQi4K ClNvLCBub3Qgc3VyZSBteSByZXZpZXcgaGFzIGEgcmVhbCB2YWx1ZSBoZXJlLCBidXQKClJldmll d2VkLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBmcmVlLWVsZWN0cm9ucy5j b20+Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+Cj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oICAgICAgIHwgIDI4ICsrKysrLS0K PiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMgICAgICAgfCAgMTIgKystCj4gIGRyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2lycS5jICAgICAgIHwgIDYxICsrKysrKystLS0tLS0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5kZXJfY2wuYyB8ICAgMyArLQo+ICBkcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF92M2QuYyAgICAgICB8IDE1MCArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYyAgfCAgNTQg KysrKysrLS0tLS0tLQo+ICA2IGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCA3NCBk ZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAo+IGluZGV4IGRmZmNlNjI5M2Q4Ny4u NWQ5NTMyMTYzY2JlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKPiBAQCAtOTUsMTIgKzk1LDIz IEBAIHN0cnVjdCB2YzRfZGV2IHsKPiAgCSAqLwo+ICAJc3RydWN0IGxpc3RfaGVhZCBzZXFub19j Yl9saXN0Owo+ICAKPiAtCS8qIFRoZSBiaW5uZXIgb3ZlcmZsb3cgbWVtb3J5IHRoYXQncyBjdXJy ZW50bHkgc2V0IHVwIGluCj4gLQkgKiBCUE9BL0JQT1MgcmVnaXN0ZXJzLiAgV2hlbiBvdmVyZmxv dyBvY2N1cnMgYW5kIGEgbmV3IG9uZSBpcwo+IC0JICogYWxsb2NhdGVkLCB0aGUgcHJldmlvdXMg b25lIHdpbGwgYmUgbW92ZWQgdG8KPiAtCSAqIHZjNC0+Y3VycmVudF9leGVjJ3MgZnJlZSBsaXN0 Lgo+ICsJLyogVGhlIG1lbW9yeSB1c2VkIGZvciBzdG9yaW5nIGJpbm5lciB0aWxlIGFsbG9jLCB0 aWxlIHN0YXRlLAo+ICsJICogYW5kIG92ZXJmbG93IG1lbW9yeSBhbGxvY2F0aW9ucy4gIFRoaXMg aXMgZnJlZWQgd2hlbiBWM0QKPiArCSAqIHBvd2VycyBkb3duLgo+ICAJICovCj4gLQlzdHJ1Y3Qg dmM0X2JvICpvdmVyZmxvd19tZW07Cj4gKwlzdHJ1Y3QgdmM0X2JvICpiaW5fYm87Cj4gKwo+ICsJ LyogU2l6ZSBvZiBibG9ja3MgYWxsb2NhdGVkIHdpdGhpbiBiaW5fYm8uICovCj4gKwl1aW50MzJf dCBiaW5fYWxsb2Nfc2l6ZTsKPiArCj4gKwkvKiBCaXRtYXNrIG9mIHRoZSBiaW5fYWxsb2Nfc2l6 ZSBjaHVua3MgaW4gYmluX2JvIHRoYXQgYXJlCj4gKwkgKiB1c2VkLgo+ICsJICovCj4gKwl1aW50 MzJfdCBiaW5fYWxsb2NfdXNlZDsKPiArCj4gKwkvKiBCaXRtYXNrIG9mIHRoZSBjdXJyZW50IGJp bl9hbGxvYyB1c2VkIGZvciBvdmVyZmxvdyBtZW1vcnkuICovCj4gKwl1aW50MzJfdCBiaW5fYWxs b2Nfb3ZlcmZsb3c7Cj4gKwo+ICAJc3RydWN0IHdvcmtfc3RydWN0IG92ZXJmbG93X21lbV93b3Jr Owo+ICAKPiAgCWludCBwb3dlcl9yZWZjb3VudDsKPiBAQCAtMjkzLDggKzMwNCwxMiBAQCBzdHJ1 Y3QgdmM0X2V4ZWNfaW5mbyB7Cj4gIAlib29sIGZvdW5kX2luY3JlbWVudF9zZW1hcGhvcmVfcGFj a2V0Owo+ICAJYm9vbCBmb3VuZF9mbHVzaDsKPiAgCXVpbnQ4X3QgYmluX3RpbGVzX3gsIGJpbl90 aWxlc195Owo+IC0Jc3RydWN0IGRybV9nZW1fY21hX29iamVjdCAqdGlsZV9ibzsKPiArCS8qIFBo eXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSB0aWxlIGFsbG9jIGFycmF5Cj4gKwkg KiAod2hlcmUgZWFjaCB0aWxlJ3MgYmlubmVkIENMIHdpbGwgc3RhcnQpCj4gKwkgKi8KPiAgCXVp bnQzMl90IHRpbGVfYWxsb2Nfb2Zmc2V0Owo+ICsJLyogQml0bWFzayBvZiB3aGljaCBiaW5uZXIg c2xvdHMgYXJlIGZyZWVkIHdoZW4gdGhpcyBqb2IgY29tcGxldGVzLiAqLwo+ICsJdWludDMyX3Qg YmluX3Nsb3RzOwo+ICAKPiAgCS8qKgo+ICAJICogQ29tcHV0ZWQgYWRkcmVzc2VzIHBvaW50aW5n IGludG8gZXhlY19ibyB3aGVyZSB3ZSBzdGFydCB0aGUKPiBAQCAtNTIyLDYgKzUzNyw3IEBAIHZv aWQgdmM0X3BsYW5lX2FzeW5jX3NldF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgZXh0 ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmM0X3YzZF9kcml2ZXI7Cj4gIGludCB2YzRfdjNk X2RlYnVnZnNfaWRlbnQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpOwo+ICBpbnQg dmM0X3YzZF9kZWJ1Z2ZzX3JlZ3Moc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpOwo+ ICtpbnQgdmM0X3YzZF9nZXRfYmluX3Nsb3Qoc3RydWN0IHZjNF9kZXYgKnZjNCk7Cj4gIAo+ICAv KiB2YzRfdmFsaWRhdGUuYyAqLwo+ICBpbnQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9nZW0uYwo+IGluZGV4IGU5 YzM4MWM0MjEzOS4uM2VjZDFiYTdhZjc1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZ2VtLmMKPiBAQCAt NzA1LDYgKzcwNSw3IEBAIHN0YXRpYyB2b2lkCj4gIHZjNF9jb21wbGV0ZV9leGVjKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHN0cnVjdCB2YzRfZXhlY19pbmZvICpleGVjKQo+ICB7Cj4gIAlzdHJ1 Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+ICsJdW5zaWduZWQgbG9uZyBpcnFm bGFnczsKPiAgCXVuc2lnbmVkIGk7Cj4gIAo+ICAJaWYgKGV4ZWMtPmJvKSB7Cj4gQEAgLTcyMCw2 ICs3MjEsMTEgQEAgdmM0X2NvbXBsZXRlX2V4ZWMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IHZjNF9leGVjX2luZm8gKmV4ZWMpCj4gIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJmJvLT5iYXNlLmJhc2UpOwo+ICAJfQo+ICAKPiArCS8qIEZyZWUgdXAgdGhlIGFs bG9jYXRpb24gb2YgYW55IGJpbiBzbG90cyB3ZSB1c2VkLiAqLwo+ICsJc3Bpbl9sb2NrX2lycXNh dmUoJnZjNC0+am9iX2xvY2ssIGlycWZsYWdzKTsKPiArCXZjNC0+YmluX2FsbG9jX3VzZWQgJj0g fmV4ZWMtPmJpbl9zbG90czsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjNC0+am9iX2xv Y2ssIGlycWZsYWdzKTsKPiArCj4gIAltdXRleF9sb2NrKCZ2YzQtPnBvd2VyX2xvY2spOwo+ICAJ aWYgKC0tdmM0LT5wb3dlcl9yZWZjb3VudCA9PSAwKSB7Cj4gIAkJcG1fcnVudGltZV9tYXJrX2xh c3RfYnVzeSgmdmM0LT52M2QtPnBkZXYtPmRldik7Cj4gQEAgLTk2OCw5ICs5NzQsOSBAQCB2YzRf Z2VtX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCS8qIFYzRCBzaG91bGQgYWxy ZWFkeSBoYXZlIGRpc2FibGVkIGl0cyBpbnRlcnJ1cHQgYW5kIGNsZWFyZWQKPiAgCSAqIHRoZSBv dmVyZmxvdyBhbGxvY2F0aW9uIHJlZ2lzdGVycy4gIE5vdyBmcmVlIHRoZSBvYmplY3QuCj4gIAkg Ki8KPiAtCWlmICh2YzQtPm92ZXJmbG93X21lbSkgewo+IC0JCWRybV9nZW1fb2JqZWN0X3VucmVm ZXJlbmNlX3VubG9ja2VkKCZ2YzQtPm92ZXJmbG93X21lbS0+YmFzZS5iYXNlKTsKPiAtCQl2YzQt Pm92ZXJmbG93X21lbSA9IE5VTEw7Cj4gKwlpZiAodmM0LT5iaW5fYm8pIHsKPiArCQlkcm1fZ2Vt X29iamVjdF9wdXRfdW5sb2NrZWQoJnZjNC0+YmluX2JvLT5iYXNlLmJhc2UpOwo+ICsJCXZjNC0+ YmluX2JvID0gTlVMTDsKPiAgCX0KPiAgCj4gIAlpZiAodmM0LT5oYW5nX3N0YXRlKQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2lycS5jCj4gaW5kZXggY2RjNmU2NzYwNzA1Li40N2JiZWM5NjJmNDUgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfaXJxLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9pcnEuYwo+IEBAIC01OSw1MCArNTksNDUgQEAgdmM0X292ZXJmbG93X21lbV93 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgewo+ICAJc3RydWN0IHZjNF9kZXYgKnZj NCA9Cj4gIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2YzRfZGV2LCBvdmVyZmxvd19tZW1f d29yayk7Cj4gLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gdmM0LT5kZXY7Cj4gLQlzdHJ1Y3Qg dmM0X2JvICpibzsKPiArCXN0cnVjdCB2YzRfYm8gKmJvID0gdmM0LT5iaW5fYm87Cj4gKwlpbnQg YmluX2JvX3Nsb3Q7Cj4gKwlzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYzsKPiArCXVuc2lnbmVk IGxvbmcgaXJxZmxhZ3M7Cj4gIAo+IC0JYm8gPSB2YzRfYm9fY3JlYXRlKGRldiwgMjU2ICogMTAy NCwgdHJ1ZSk7Cj4gLQlpZiAoSVNfRVJSKGJvKSkgewo+ICsJYmluX2JvX3Nsb3QgPSB2YzRfdjNk X2dldF9iaW5fc2xvdCh2YzQpOwo+ICsJaWYgKGJpbl9ib19zbG90IDwgMCkgewo+ICAJCURSTV9F UlJPUigiQ291bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92ZXJmbG93IG1lbVxuIik7Cj4gIAkJcmV0 dXJuOwo+ICAJfQo+ICAKPiAtCS8qIElmIHRoZXJlJ3MgYSBqb2IgZXhlY3V0aW5nIGN1cnJlbnRs eSwgdGhlbiBvdXIgcHJldmlvdXMKPiAtCSAqIG92ZXJmbG93IGFsbG9jYXRpb24gaXMgZ2V0dGlu ZyB1c2VkIGluIHRoYXQgam9iIGFuZCB3ZSBuZWVkCj4gLQkgKiB0byBxdWV1ZSBpdCB0byBiZSBy ZWxlYXNlZCB3aGVuIHRoZSBqb2IgaXMgZG9uZS4gIEJ1dCBpZiBubwo+IC0JICogam9iIGlzIGV4 ZWN1dGluZyBhdCBhbGwsIHRoZW4gd2UgY2FuIGZyZWUgdGhlIG9sZCBvdmVyZmxvdwo+IC0JICog b2JqZWN0IGRpcmVjY3RseS4KPiAtCSAqCj4gLQkgKiBObyBsb2NrIG5lY2Vzc2FyeSBmb3IgdGhp cyBwb2ludGVyIHNpbmNlIHdlJ3JlIHRoZSBvbmx5Cj4gLQkgKiBvbmVzIHRoYXQgdXBkYXRlIHRo ZSBwb2ludGVyLCBhbmQgb3VyIHdvcmtxdWV1ZSB3b24ndAo+IC0JICogcmVlbnRlci4KPiAtCSAq Lwo+IC0JaWYgKHZjNC0+b3ZlcmZsb3dfbWVtKSB7Cj4gLQkJc3RydWN0IHZjNF9leGVjX2luZm8g KmN1cnJlbnRfZXhlYzsKPiAtCQl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+IC0KPiAtCQlzcGlu X2xvY2tfaXJxc2F2ZSgmdmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOwo+IC0JCWN1cnJlbnRfZXhl YyA9IHZjNF9maXJzdF9iaW5fam9iKHZjNCk7Cj4gLQkJaWYgKCFjdXJyZW50X2V4ZWMpCj4gLQkJ CWN1cnJlbnRfZXhlYyA9IHZjNF9sYXN0X3JlbmRlcl9qb2IodmM0KTsKPiAtCQlpZiAoY3VycmVu dF9leGVjKSB7Cj4gLQkJCXZjNC0+b3ZlcmZsb3dfbWVtLT5zZXFubyA9IGN1cnJlbnRfZXhlYy0+ c2Vxbm87Cj4gLQkJCWxpc3RfYWRkX3RhaWwoJnZjNC0+b3ZlcmZsb3dfbWVtLT51bnJlZl9oZWFk LAo+IC0JCQkJICAgICAgJmN1cnJlbnRfZXhlYy0+dW5yZWZfbGlzdCk7Cj4gLQkJCXZjNC0+b3Zl cmZsb3dfbWVtID0gTlVMTDsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmpvYl9sb2NrLCBp cnFmbGFncyk7Cj4gKwo+ICsJaWYgKHZjNC0+YmluX2FsbG9jX292ZXJmbG93KSB7Cj4gKwkJLyog SWYgd2UgaGFkIG92ZXJmbG93IG1lbW9yeSBhbGxvY2F0ZWQgcHJldmlvdXNseSwKPiArCQkgKiB0 aGVuIHRoYXQgY2h1bmsgd2lsbCBmcmVlIHdoZW4gdGhlIGN1cnJlbnQgYmluIGpvYgo+ICsJCSAq IGlzIGRvbmUuICBJZiB3ZSBkb24ndCBoYXZlIGEgYmluIGpvYiBydW5uaW5nLCB0aGVuCj4gKwkJ ICogdGhlIGNodW5rIHdpbGwgYmUgZG9uZSB3aGVuZXZlciB0aGUgbGlzdCBvZiByZW5kZXIKPiAr CQkgKiBqb2JzIGhhcyBkcmFpbmVkLgo+ICsJCSAqLwo+ICsJCWV4ZWMgPSB2YzRfZmlyc3RfYmlu X2pvYih2YzQpOwo+ICsJCWlmICghZXhlYykKPiArCQkJZXhlYyA9IHZjNF9sYXN0X3JlbmRlcl9q b2IodmM0KTsKPiArCQlpZiAoZXhlYykgewo+ICsJCQlleGVjLT5iaW5fc2xvdHMgfD0gdmM0LT5i aW5fYWxsb2Nfb3ZlcmZsb3c7Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyogVGhlcmUncyBub3RoaW5n IHF1ZXVlZCBpbiB0aGUgaGFyZHdhcmUsIHNvCj4gKwkJCSAqIHRoZSBvbGQgc2xvdCBpcyBmcmVl IGltbWVkaWF0ZWx5Lgo+ICsJCQkgKi8KPiArCQkJdmM0LT5iaW5fYWxsb2NfdXNlZCAmPSB+dmM0 LT5iaW5fYWxsb2Nfb3ZlcmZsb3c7Cj4gIAkJfQo+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JnZjNC0+am9iX2xvY2ssIGlycWZsYWdzKTsKPiAgCX0KPiArCXZjNC0+YmluX2FsbG9jX292ZXJm bG93ID0gQklUKGJpbl9ib19zbG90KTsKPiAgCj4gLQlpZiAodmM0LT5vdmVyZmxvd19tZW0pCj4g LQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJnZjNC0+b3ZlcmZsb3dfbWVt LT5iYXNlLmJhc2UpOwo+IC0JdmM0LT5vdmVyZmxvd19tZW0gPSBibzsKPiAtCj4gLQlWM0RfV1JJ VEUoVjNEX0JQT0EsIGJvLT5iYXNlLnBhZGRyKTsKPiArCVYzRF9XUklURShWM0RfQlBPQSwgYm8t PmJhc2UucGFkZHIgKyBiaW5fYm9fc2xvdCAqIHZjNC0+YmluX2FsbG9jX3NpemUpOwo+ICAJVjNE X1dSSVRFKFYzRF9CUE9TLCBiby0+YmFzZS5iYXNlLnNpemUpOwo+ICAJVjNEX1dSSVRFKFYzRF9J TlRDVEwsIFYzRF9JTlRfT1VUT01FTSk7Cj4gIAlWM0RfV1JJVEUoVjNEX0lOVEVOQSwgVjNEX0lO VF9PVVRPTUVNKTsKPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjNC0+am9iX2xvY2ssIGly cWZsYWdzKTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9yZW5k ZXJfY2wuYwo+IGluZGV4IDQzMzk0NzFmNTE3Zi4uNWRjMTk0MjlkNGFlIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3JlbmRlcl9jbC5jCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfcmVuZGVyX2NsLmMKPiBAQCAtMTgyLDggKzE4Miw3IEBAIHN0YXRpYyB2b2lk IGVtaXRfdGlsZShzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYywKPiAgCj4gIAlpZiAoaGFzX2Jp bikgewo+ICAJCXJjbF91OChzZXR1cCwgVkM0X1BBQ0tFVF9CUkFOQ0hfVE9fU1VCX0xJU1QpOwo+ IC0JCXJjbF91MzIoc2V0dXAsIChleGVjLT50aWxlX2JvLT5wYWRkciArCj4gLQkJCQlleGVjLT50 aWxlX2FsbG9jX29mZnNldCArCj4gKwkJcmNsX3UzMihzZXR1cCwgKGV4ZWMtPnRpbGVfYWxsb2Nf b2Zmc2V0ICsKPiAgCQkJCSh5ICogZXhlYy0+YmluX3RpbGVzX3ggKyB4KSAqIDMyKSk7Cj4gIAl9 Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92M2QuYyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X3YzZC5jCj4gaW5kZXggN2NjMzQ2YWQ5YjBiLi5hODgwNzhkN2M5 ZDEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdjNkLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92M2QuYwo+IEBAIC0xNTYsNiArMTU2LDE0NCBAQCBzdGF0 aWMgdm9pZCB2YzRfdjNkX2luaXRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCVYzRF9X UklURShWM0RfVlBNQkFTRSwgMCk7Cj4gIH0KPiAgCj4gK2ludCB2YzRfdjNkX2dldF9iaW5fc2xv dChzdHJ1Y3QgdmM0X2RldiAqdmM0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g dmM0LT5kZXY7Cj4gKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwo+ICsJaW50IHNsb3Q7Cj4gKwl1 aW50NjRfdCBzZXFubyA9IDA7Cj4gKwlzdHJ1Y3QgdmM0X2V4ZWNfaW5mbyAqZXhlYzsKPiArCj4g K3RyeV9hZ2FpbjoKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFn cyk7Cj4gKwlzbG90ID0gZmZzKH52YzQtPmJpbl9hbGxvY191c2VkKTsKPiArCWlmIChzbG90ICE9 IDApIHsKPiArCQkvKiBTd2l0Y2ggZnJvbSBmZnMoKSBiaXQgaW5kZXggdG8gYSAwLWJhc2VkIGlu ZGV4LiAqLwo+ICsJCXNsb3QtLTsKPiArCQl2YzQtPmJpbl9hbGxvY191c2VkIHw9IEJJVChzbG90 KTsKPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2YzQtPmpvYl9sb2NrLCBpcnFmbGFncyk7 Cj4gKwkJcmV0dXJuIHNsb3Q7Cj4gKwl9Cj4gKwo+ICsJLyogQ291bGRuJ3QgZmluZCBhbiBvcGVu IHNsb3QuICBXYWl0IGZvciByZW5kZXIgdG8gY29tcGxldGUKPiArCSAqIGFuZCB0cnkgYWdhaW4u Cj4gKwkgKi8KPiArCWV4ZWMgPSB2YzRfbGFzdF9yZW5kZXJfam9iKHZjNCk7Cj4gKwlpZiAoZXhl YykKPiArCQlzZXFubyA9IGV4ZWMtPnNlcW5vOwo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dmM0LT5qb2JfbG9jaywgaXJxZmxhZ3MpOwo+ICsKPiArCWlmIChzZXFubykgewo+ICsJCWludCBy ZXQgPSB2YzRfd2FpdF9mb3Jfc2Vxbm8oZGV2LCBzZXFubywgfjB1bGwsIHRydWUpOwo+ICsKPiAr CQlpZiAocmV0ID09IDApCj4gKwkJCWdvdG8gdHJ5X2FnYWluOwo+ICsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCXJldHVybiAtRU5PTUVNOwo+ICt9Cj4gKwo+ICsvKioKPiArICogdmM0 X2FsbG9jYXRlX2Jpbl9ibygpIC0gYWxsb2NhdGVzIHRoZSBtZW1vcnkgdGhhdCB3aWxsIGJlIHVz ZWQgZm9yCj4gKyAqIHRpbGUgYmlubmluZy4KPiArICoKPiArICogVGhlIGJpbm5lciBoYXMgYSBs aW1pdGF0aW9uIHRoYXQgdGhlIGFkZHJlc3NlcyBpbiB0aGUgdGlsZSBzdGF0ZQo+ICsgKiBidWZm ZXIgdGhhdCBwb2ludCBpbnRvIHRoZSB0aWxlIGFsbG9jIGJ1ZmZlciBvciBiaW5uZXIgb3ZlcmZs b3cKPiArICogbWVtb3J5IG9ubHkgaGF2ZSAyOCBiaXRzICgyNTZNQiksIGFuZCB0aGUgdG9wIDQg b24gdGhlIGJ1cyBmb3IKPiArICogdGlsZSBhbGxvYyByZWZlcmVuY2VzIGVuZCB1cCBjb21pbmcg ZnJvbSB0aGUgdGlsZSBzdGF0ZSBidWZmZXIncwo+ICsgKiBhZGRyZXNzLgo+ICsgKgo+ICsgKiBU byB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBhbGxvY2F0ZSBhIHNpbmdsZSBsYXJnZSBidWZmZXIgd2hp bGUgVjNEIGlzCj4gKyAqIGluIHVzZSwgbWFrZSBzdXJlIHRoYXQgaXQgaGFzIHRoZSB0b3AgNCBi aXRzIGNvbnN0YW50IGFjcm9zcyBpdHMKPiArICogZW50aXJlIGV4dGVudCwgYW5kIHRoZW4gcHV0 IHRoZSB0aWxlIHN0YXRlLCB0aWxlIGFsbG9jLCBhbmQgYmlubmVyCj4gKyAqIG92ZXJmbG93IG1l bW9yeSBpbnNpZGUgdGhhdCBidWZmZXIuCj4gKyAqCj4gKyAqIFRoaXMgY3JlYXRlcyBhIGxpbWl0 YXRpb24gd2hlcmUgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGV4ZWN1dGUgYSBqb2IKPiArICogaWYg aXQgZG9lc24ndCBmaXQgd2l0aGluIHRoZSBidWZmZXIgdGhhdCB3ZSBhbGxvY2F0ZWQgdXAgZnJv bnQuCj4gKyAqIEhvd2V2ZXIsIGl0IHR1cm5zIG91dCB0aGF0IDE2TUIgaXMgImVub3VnaCBmb3Ig YW55Ym9keSIsIGFuZAo+ICsgKiByZWFsLXdvcmxkIGFwcGxpY2F0aW9ucyBydW4gaW50byBhbGxv Y2F0aW9uIGZhaWx1cmVzIGZyb20gdGhlCj4gKyAqIG92ZXJhbGwgQ01BIHBvb2wgYmVmb3JlIHRo ZXkgbWFrZSBzY2VuZXMgY29tcGxpY2F0ZWQgZW5vdWdoIHRvIHJ1bgo+ICsgKiBvdXQgb2YgYmlu IHNwYWNlLgo+ICsgKi8KPiAraW50Cj4gK3ZjNF9hbGxvY2F0ZV9iaW5fYm8oc3RydWN0IGRybV9k ZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZHJt KTsKPiArCXN0cnVjdCB2YzRfdjNkICp2M2QgPSB2YzQtPnYzZDsKPiArCXVpbnQzMl90IHNpemUg PSAxNiAqIDEwMjQgKiAxMDI0Owo+ICsJaW50IHJldCA9IDA7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7Cj4gKwo+ICsJLyogV2UgbWF5IG5lZWQgdG8gdHJ5IGFsbG9jYXRpbmcgbW9yZSB0aGFu IG9uY2UgdG8gZ2V0IGEgQk8KPiArCSAqIHRoYXQgZG9lc24ndCBjcm9zcyAyNTZNQi4gIFRyYWNr IHRoZSBvbmVzIHdlJ3ZlIGFsbG9jYXRlZAo+ICsJICogdGhhdCBmYWlsZWQgc28gZmFyLCBzbyB0 aGF0IHdlIGNhbiBmcmVlIHRoZW0gd2hlbiB3ZSd2ZSBnb3QKPiArCSAqIG9uZSB0aGF0IHN1Y2Nl ZWRlZCAoaWYgd2UgZnJlZWQgdGhlbSByaWdodCBhd2F5LCBvdXIgbmV4dAo+ICsJICogYWxsb2Nh dGlvbiB3b3VsZCBwcm9iYWJseSBiZSB0aGUgc2FtZSBjaHVuayBvZiBtZW1vcnkpLgo+ICsJICov Cj4gKwlJTklUX0xJU1RfSEVBRCgmbGlzdCk7Cj4gKwo+ICsJd2hpbGUgKHRydWUpIHsKPiArCQlz dHJ1Y3QgdmM0X2JvICpibyA9IHZjNF9ib19jcmVhdGUoZHJtLCBzaXplLCB0cnVlKTsKPiArCj4g KwkJaWYgKElTX0VSUihibykpIHsKPiArCQkJcmV0ID0gUFRSX0VSUihibyk7Cj4gKwo+ICsJCQlk ZXZfZXJyKCZ2M2QtPnBkZXYtPmRldiwKPiArCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5 IGZvciB0aWxlIGJpbm5pbmc6ICIKPiArCQkJCSIlZC4gWW91IG1heSBuZWVkIHRvIGVuYWJsZSBD TUEgb3IgZ2l2ZSBpdCAiCj4gKwkJCQkibW9yZSBtZW1vcnkuIiwKPiArCQkJCXJldCk7Cj4gKwkJ CWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJLyogQ2hlY2sgaWYgdGhpcyBCTyB3b24ndCB0cmlnZ2Vy IHRoZSBhZGRyZXNzaW5nIGJ1Zy4gKi8KPiArCQlpZiAoKGJvLT5iYXNlLnBhZGRyICYgMHhmMDAw MDAwMCkgPT0KPiArCQkgICAgKChiby0+YmFzZS5wYWRkciArIGJvLT5iYXNlLmJhc2Uuc2l6ZSAt IDEpICYgMHhmMDAwMDAwMCkpIHsKPiArCQkJdmM0LT5iaW5fYm8gPSBibzsKPiArCj4gKwkJCS8q IFNldCB1cCBmb3IgYWxsb2NhdGluZyA1MTJLQiBjaHVua3Mgb2YKPiArCQkJICogYmlubmVyIG1l bW9yeS4gIFRoZSBiaWdnZXN0IGFsbG9jYXRpb24gd2UKPiArCQkJICogbmVlZCB0byBkbyBpcyBm b3IgdGhlIGluaXRpYWwgdGlsZSBhbGxvYyArCj4gKwkJCSAqIHRpbGUgc3RhdGUgYnVmZmVyLiAg V2UgY2FuIHJlbmRlciB0byBhCj4gKwkJCSAqIG1heGltdW0gb2YgKCgyMDQ4KjIwNDgpIC8gKDMy KjMyKSA9IDQwOTYKPiArCQkJICogdGlsZXMgaW4gYSBmcmFtZSAodW50aWwgd2UgZG8gZmxvYXRp bmcKPiArCQkJICogcG9pbnQgcmVuZGVyaW5nLCBhdCB3aGljaCBwb2ludCBpdCB3b3VsZCBiZQo+ ICsJCQkgKiA4MTkyKS4gIFRpbGUgc3RhdGUgaXMgNDhiL3RpbGUgKHJvdW5kZWQgdG8KPiArCQkJ ICogYSBwYWdlKSwgYW5kIHRpbGUgYWxsb2MgaXMgMzJiL3RpbGUKPiArCQkJICogKHJvdW5kZWQg dG8gYSBwYWdlKSwgcGx1cyBhIHBhZ2Ugb2YgZXh0cmEsCj4gKwkJCSAqIGZvciBhIHRvdGFsIG9m IDMyMGtiIGZvciBvdXIgd29yc3QtY2FzZS4KPiArCQkJICogV2UgY2hvb3NlIDUxMmtiIHNvIHRo YXQgaXQgZGl2aWRlcyBldmVubHkKPiArCQkJICogaW50byBvdXIgMTZNQiwgYW5kIHRoZSByZXN0 IG9mIHRoZSA1MTJrYgo+ICsJCQkgKiB3aWxsIGJlIHVzZWQgYXMgc3RvcmFnZSBmb3IgdGhlIG92 ZXJmbG93Cj4gKwkJCSAqIGZyb20gdGhlIGluaXRpYWwgMzJiIENMIHBlciBiaW4uCj4gKwkJCSAq Lwo+ICsJCQl2YzQtPmJpbl9hbGxvY19zaXplID0gNTEyICogMTAyNDsKPiArCQkJdmM0LT5iaW5f YWxsb2NfdXNlZCA9IDA7Cj4gKwkJCXZjNC0+YmluX2FsbG9jX292ZXJmbG93ID0gMDsKPiArCQkJ V0FSTl9PTl9PTkNFKHNpemVvZih2YzQtPmJpbl9hbGxvY191c2VkKSAqIDggIT0KPiArCQkJCSAg ICAgYm8tPmJhc2UuYmFzZS5zaXplIC8gdmM0LT5iaW5fYWxsb2Nfc2l6ZSk7Cj4gKwo+ICsJCQli cmVhazsKPiArCQl9Cj4gKwo+ICsJCS8qIFB1dCBpdCBvbiB0aGUgbGlzdCB0byBmcmVlIGxhdGVy LCBhbmQgdHJ5IGFnYWluLiAqLwo+ICsJCWxpc3RfYWRkKCZiby0+dW5yZWZfaGVhZCwgJmxpc3Qp Owo+ICsJfQo+ICsKPiArCS8qIEZyZWUgYWxsIHRoZSBCT3Mgd2UgYWxsb2NhdGVkIGJ1dCBkaWRu J3QgY2hvb3NlLiAqLwo+ICsJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgewo+ICsJCXN0cnVj dCB2YzRfYm8gKmJvID0gbGlzdF9sYXN0X2VudHJ5KCZsaXN0LAo+ICsJCQkJCQkgICAgc3RydWN0 IHZjNF9ibywgdW5yZWZfaGVhZCk7Cj4gKwo+ICsJCWxpc3RfZGVsKCZiby0+dW5yZWZfaGVhZCk7 Cj4gKwkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZiby0+YmFzZS5iYXNlKTsKPiArCX0K PiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICAjaWZkZWYgQ09ORklHX1BNCj4gIHN0YXRp YyBpbnQgdmM0X3YzZF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICB7Cj4g QEAgLTE2NCw2ICszMDIsOSBAQCBzdGF0aWMgaW50IHZjNF92M2RfcnVudGltZV9zdXNwZW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKPiAgCj4gIAl2YzRfaXJxX3VuaW5zdGFsbCh2YzQtPmRldik7Cj4g IAo+ICsJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZ2YzQtPmJpbl9iby0+YmFzZS5iYXNl KTsKPiArCXZjNC0+YmluX2JvID0gTlVMTDsKPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBA QCAtMTcxLDYgKzMxMiwxMSBAQCBzdGF0aWMgaW50IHZjNF92M2RfcnVudGltZV9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgdmM0X3YzZCAqdjNkID0gZGV2X2dldF9k cnZkYXRhKGRldik7Cj4gIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdjNkLT52YzQ7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IHZjNF9hbGxvY2F0ZV9iaW5fYm8odmM0LT5kZXYpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICAKPiAgCXZjNF92M2RfaW5pdF9odyh2YzQtPmRldik7 Cj4gIAl2YzRfaXJxX3Bvc3RpbnN0YWxsKHZjNC0+ZGV2KTsKPiBAQCAtMjA4LDYgKzM1NCwxMCBA QCBzdGF0aWMgaW50IHZjNF92M2RfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4g KwlyZXQgPSB2YzRfYWxsb2NhdGVfYmluX2JvKGRybSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVy biByZXQ7Cj4gKwo+ICAJLyogUmVzZXQgdGhlIGJpbm5lciBvdmVyZmxvdyBhZGRyZXNzL3NpemUg YXQgc2V0dXAsIHRvIGJlIHN1cmUKPiAgCSAqIHdlIGRvbid0IHJldXNlIGFuIG9sZCBvbmUuCj4g IAkgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYyBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3ZhbGlkYXRlLmMKPiBpbmRleCBkYTZmMWUxMzhlOGQu LjNkZThmMTE1OTVjMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF92YWxp ZGF0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfdmFsaWRhdGUuYwo+IEBAIC0z NDgsMTAgKzM0OCwxMSBAQCBzdGF0aWMgaW50Cj4gIHZhbGlkYXRlX3RpbGVfYmlubmluZ19jb25m aWcoVkFMSURBVEVfQVJHUykKPiAgewo+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGV4ZWMt PmV4ZWNfYm8tPmJhc2UuZGV2Owo+IC0Jc3RydWN0IHZjNF9ibyAqdGlsZV9ibzsKPiArCXN0cnVj dCB2YzRfZGV2ICp2YzQgPSB0b192YzRfZGV2KGRldik7Cj4gIAl1aW50OF90IGZsYWdzOwo+IC0J dWludDMyX3QgdGlsZV9zdGF0ZV9zaXplLCB0aWxlX2FsbG9jX3NpemU7Cj4gLQl1aW50MzJfdCB0 aWxlX2NvdW50Owo+ICsJdWludDMyX3QgdGlsZV9zdGF0ZV9zaXplOwo+ICsJdWludDMyX3QgdGls ZV9jb3VudCwgYmluX2FkZHI7Cj4gKwlpbnQgYmluX3Nsb3Q7Cj4gIAo+ICAJaWYgKGV4ZWMtPmZv dW5kX3RpbGVfYmlubmluZ19tb2RlX2NvbmZpZ19wYWNrZXQpIHsKPiAgCQlEUk1fRVJST1IoIkR1 cGxpY2F0ZSBWQzRfUEFDS0VUX1RJTEVfQklOTklOR19NT0RFX0NPTkZJR1xuIik7Cj4gQEAgLTM3 NywxMyArMzc4LDI4IEBAIHZhbGlkYXRlX3RpbGVfYmlubmluZ19jb25maWcoVkFMSURBVEVfQVJH UykKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4gKwliaW5fc2xvdCA9IHZjNF92M2Rf Z2V0X2Jpbl9zbG90KHZjNCk7Cj4gKwlpZiAoYmluX3Nsb3QgPCAwKSB7Cj4gKwkJaWYgKGJpbl9z bG90ICE9IC1FSU5UUiAmJiBiaW5fc2xvdCAhPSAtRVJFU1RBUlRTWVMpIHsKPiArCQkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgYmlubmVyIG1lbW9yeTogJWRcbiIsCj4gKwkJCQkgIGJp bl9zbG90KTsKPiArCQl9Cj4gKwkJcmV0dXJuIGJpbl9zbG90Owo+ICsJfQo+ICsKPiArCS8qIFRo ZSBzbG90IHdlIGFsbG9jYXRlZCB3aWxsIG9ubHkgYmUgdXNlZCBieSB0aGlzIGpvYiwgYW5kIGlz Cj4gKwkgKiBmcmVlIHdoZW4gdGhlIGpvYiBjb21wbGV0ZXMgcmVuZGVyaW5nLgo+ICsJICovCj4g KwlleGVjLT5iaW5fc2xvdHMgfD0gQklUKGJpbl9zbG90KTsKPiArCWJpbl9hZGRyID0gdmM0LT5i aW5fYm8tPmJhc2UucGFkZHIgKyBiaW5fc2xvdCAqIHZjNC0+YmluX2FsbG9jX3NpemU7Cj4gKwo+ ICAJLyogVGhlIHRpbGUgc3RhdGUgZGF0YSBhcnJheSBpcyA0OCBieXRlcyBwZXIgdGlsZSwgYW5k IHdlIHB1dCBpdCBhdAo+ICAJICogdGhlIHN0YXJ0IG9mIGEgQk8gY29udGFpbmluZyBib3RoIGl0 IGFuZCB0aGUgdGlsZSBhbGxvYy4KPiAgCSAqLwo+ICAJdGlsZV9zdGF0ZV9zaXplID0gNDggKiB0 aWxlX2NvdW50Owo+ICAKPiAgCS8qIFNpbmNlIHRoZSB0aWxlIGFsbG9jIGFycmF5IHdpbGwgZm9s bG93IHVzLCBhbGlnbi4gKi8KPiAtCWV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0ID0gcm91bmR1cCh0 aWxlX3N0YXRlX3NpemUsIDQwOTYpOwo+ICsJZXhlYy0+dGlsZV9hbGxvY19vZmZzZXQgPSBiaW5f YWRkciArIHJvdW5kdXAodGlsZV9zdGF0ZV9zaXplLCA0MDk2KTsKPiAgCj4gIAkqKHVpbnQ4X3Qg KikodmFsaWRhdGVkICsgMTQpID0KPiAgCQkoKGZsYWdzICYgfihWQzRfQklOX0NPTkZJR19BTExP Q19JTklUX0JMT0NLX1NJWkVfTUFTSyB8Cj4gQEAgLTM5NCwzNSArNDEwLDEzIEBAIHZhbGlkYXRl X3RpbGVfYmlubmluZ19jb25maWcoVkFMSURBVEVfQVJHUykKPiAgCQkgVkM0X1NFVF9GSUVMRChW QzRfQklOX0NPTkZJR19BTExPQ19CTE9DS19TSVpFXzEyOCwKPiAgCQkJICAgICAgIFZDNF9CSU5f Q09ORklHX0FMTE9DX0JMT0NLX1NJWkUpKTsKPiAgCj4gLQkvKiBJbml0aWFsIGJsb2NrIHNpemUu ICovCj4gLQl0aWxlX2FsbG9jX3NpemUgPSAzMiAqIHRpbGVfY291bnQ7Cj4gLQo+IC0JLyoKPiAt CSAqIFRoZSBpbml0aWFsIGFsbG9jYXRpb24gZ2V0cyByb3VuZGVkIHRvIHRoZSBuZXh0IDI1NiBi eXRlcyBiZWZvcmUKPiAtCSAqIHRoZSBoYXJkd2FyZSBzdGFydHMgZnVsZmlsbGluZyBmdXJ0aGVy IGFsbG9jYXRpb25zLgo+IC0JICovCj4gLQl0aWxlX2FsbG9jX3NpemUgPSByb3VuZHVwKHRpbGVf YWxsb2Nfc2l6ZSwgMjU2KTsKPiAtCj4gLQkvKiBBZGQgc3BhY2UgZm9yIHRoZSBleHRyYSBhbGxv Y2F0aW9ucy4gIFRoaXMgaXMgd2hhdCBnZXRzIHVzZWQgZmlyc3QsCj4gLQkgKiBiZWZvcmUgb3Zl cmZsb3cgbWVtb3J5LiAgSXQgbXVzdCBoYXZlIGF0IGxlYXN0IDQwOTYgYnl0ZXMsIGJ1dCB3ZQo+ IC0JICogd2FudCB0byBhdm9pZCBvdmVyZmxvdyBtZW1vcnkgdXNhZ2UgaWYgcG9zc2libGUuCj4g LQkgKi8KPiAtCXRpbGVfYWxsb2Nfc2l6ZSArPSAxMDI0ICogMTAyNDsKPiAtCj4gLQl0aWxlX2Jv ID0gdmM0X2JvX2NyZWF0ZShkZXYsIGV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0ICsgdGlsZV9hbGxv Y19zaXplLAo+IC0JCQkJdHJ1ZSk7Cj4gLQlleGVjLT50aWxlX2JvID0gJnRpbGVfYm8tPmJhc2U7 Cj4gLQlpZiAoSVNfRVJSKGV4ZWMtPnRpbGVfYm8pKQo+IC0JCXJldHVybiBQVFJfRVJSKGV4ZWMt PnRpbGVfYm8pOwo+IC0JbGlzdF9hZGRfdGFpbCgmdGlsZV9iby0+dW5yZWZfaGVhZCwgJmV4ZWMt PnVucmVmX2xpc3QpOwo+IC0KPiAgCS8qIHRpbGUgYWxsb2MgYWRkcmVzcy4gKi8KPiAtCSoodWlu dDMyX3QgKikodmFsaWRhdGVkICsgMCkgPSAoZXhlYy0+dGlsZV9iby0+cGFkZHIgKwo+IC0JCQkJ CWV4ZWMtPnRpbGVfYWxsb2Nfb2Zmc2V0KTsKPiArCSoodWludDMyX3QgKikodmFsaWRhdGVkICsg MCkgPSBleGVjLT50aWxlX2FsbG9jX29mZnNldDsKPiAgCS8qIHRpbGUgYWxsb2Mgc2l6ZS4gKi8K PiAtCSoodWludDMyX3QgKikodmFsaWRhdGVkICsgNCkgPSB0aWxlX2FsbG9jX3NpemU7Cj4gKwkq KHVpbnQzMl90ICopKHZhbGlkYXRlZCArIDQpID0gKGJpbl9hZGRyICsgdmM0LT5iaW5fYWxsb2Nf c2l6ZSAtCj4gKwkJCQkJZXhlYy0+dGlsZV9hbGxvY19vZmZzZXQpOwo+ICAJLyogdGlsZSBzdGF0 ZSBhZGRyZXNzLiAqLwo+IC0JKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA4KSA9IGV4ZWMtPnRp bGVfYm8tPnBhZGRyOwo+ICsJKih1aW50MzJfdCAqKSh2YWxpZGF0ZWQgKyA4KSA9IGJpbl9hZGRy Owo+ICAKPiAgCXJldHVybiAwOwo+ICB9CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK