From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fredrik Noring Subject: Re: WARN_ON(irqs_disabled()) in dma_free_attrs? Date: Sat, 3 Mar 2018 08:58:42 +0100 Message-ID: <20180303075841.GA24991@localhost.localdomain> References: <20180302180704.GA3846@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Robin Murphy Cc: =?utf-8?Q?J=C3=BCrgen?= Urban , iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Christoph Hellwig List-Id: iommu@lists.linux-foundation.org SGkgUm9iaW4sCgo+IEhpc3RvcmljYWxseSwgdGhhdCBwYXJ0aWN1bGFyIGxpbmUgb2YgY29kZSBh cHBlYXJzIHRvIGRhdGUgYmFjayB0byBjb21taXQKPiBhYTI0ODg2ZTM3OWQgKGFuZCB0cmFja2lu ZyBpdCdzIGFuY2VzdHJ5IHdhcyBxdWl0ZSBmdW4pLgo+IAo+IE5vdywgSSdtIHN1cmUgbm90IGFs bCBvZiB0aGUgY29uc2lkZXJhdGlvbnMgb2YgMTEtYW5kLWEtaGFsZiB5ZWFycyBhZ28gc3RpbGwK PiBhcHBseSwgYnV0IG9uZSBjZXJ0YWlubHkgZG9lczogQVJNKiBzdGlsbCB1c2VzIG5vbi1jYWNo ZWFibGUgbWFwcGluZ3MgZm9yCj4gY29oZXJlbnQgYWxsb2NhdGlvbnMgb24gc3lzdGVtcyB3aGlj aCBhcmVuJ3QgaGFyZHdhcmUtY29oZXJlbnQgKGkuZS4gbW9zdCBvZgo+IHRoZW0pLCB0aHVzIHRo ZSBhbGxvYyBhbmQgZnJlZSBwYXRocyBtYXkgcmVzcGVjdGl2ZWx5IHNldCB1cCBhbmQgdGVhciBk b3duCj4gdGhvc2UgbWFwcGluZ3MsIGFuZCB0aGUgbGF0dGVyIGludm9sdmVzIHRoaXMgZ3V5Ogo+ IAo+IAl2b2lkIHZ1bm1hcChjb25zdCB2b2lkICphZGRyKQo+IAl7Cj4gCQlCVUdfT04oaW5faW50 ZXJydXB0KCkpOwo+IAkJbWlnaHRfc2xlZXAoKTsKPiAJCWlmIChhZGRyKQo+IAkJCV9fdnVubWFw KGFkZHIsIDApOwo+IAl9Cj4gCj4gRXZlbiBpbiB0aGUgbm9uLWNvaGVyZW50IEFSTSBjYXNlIGl0 ICp3b3VsZCogdGVjaG5pY2FsbHkgYmUgdmlhYmxlIHRvIGZyZWUgYQo+IGNvaGVyZW50IGJ1ZmZl ciBmcm9tIGludGVycnVwdCBjb250ZXh0IGlmZiBpdCB3YXMgYWxsb2NhdGVkIHdpdGggR0ZQX0FU T01JQywKPiBhcyB0aG9zZSBhcmUgc2F0aXNmaWVkIGZyb20gYSBzdGF0aWNhbGx5LW1hcHBlZCBw b29sIHJhdGhlciB0aGFuIGR5bmFtaWNhbGx5Cj4gdm1hcHBlZCwgYnV0IHRoYXQgZG9lc24ndCBy ZWFsbHkgZXhwYW5kIHRvIHRoZSBnZW5lcmFsIGNhc2UsIGFuZCBJIGNlcnRhaW5seQo+IGNhbid0 IHNwZWFrIGZvciBhbGwgdGhlIG90aGVyIGFyY2hpdGVjdHVyZXMuCgpBaCwgdGhhbmtzLCBnb29k IHRvIGtub3chCgo+IEFzIEFsYW4gaW1wbGllcywgSSBndWVzcyB0aGUgd2F5IGZvcndhcmQgaXMg dG8gZmlndXJlIG91dCBob3cgc2ltaWxhcgo+IGRyaXZlcnMgbWFuYWdlIC0geW91ciBiYWNrdHJh Y2Ugc3VnZ2VzdHMgdGhhdCB5b3UgbWlnaHQgYmUgdXNpbmcKPiBIQ0RfTE9DQUxfTUVNLCB3aGlj aCBwcm9iYWJseSBpc24ndCB0aGUgY29tbW9uIGNhc2UgYnV0IGRvZXMgc2VlbSB0byBhcHBlYXIK PiBpbiBhdCBsZWFzdCBhIGNvdXBsZSBvZiBvdGhlciBPSENJIGRyaXZlcnMuCgpUaGVyZSBhcmUg dHdvIG90aGVyIE9IQ0kgZHJpdmVycyB0aGF0IGRvIChhcyBmYXIgYXMgSSB1bmRlcnN0YW5kKQpl c3NlbnRpYWxseSB0aGUgc2FtZSB0aGluZyB3aXRoIGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9y eSBhbmQKSENEX0xPQ0FMX01FTToKCglkcml2ZXJzL3VzYi9ob3N0L29oY2ktc201MDEuYwoJZHJp dmVycy91c2IvaG9zdC9vaGNpLXRtaW8uYwoKVGhleSBhcmUgc2ltcGxlLCBidXQgSSBjYW5ub3Qg c2VlIGhvdyB0aGV5IGNvdWxkIHBvc3NpYmx5IGF2b2lkIHRoaXMgaXNzdWUKZ2l2ZW4gdGhlIGRl c2lnbiBvZiB0aGUgVVNCIGNvcmUgYW5kIHRoZSBvZmZlbmRpbmcgY2FsbCB0cmFjZSB3aGljaCBk b2VzIG5vdApwYXNzIHRocm91Z2ggdGhlIGRldmljZSBzcGVjaWZpYyBIQ0Q6CgoJICAgdXNiX2hj ZF9pcnEKCS0+IG9oY2lfaXJxCgktPiBvaGNpX3dvcmsKCS0+IHByb2Nlc3NfZG9uZV9saXN0Cgkt PiB0YWtlYmFja190ZAoJLT4gZmluaXNoX3VyYgoJLT4gdXNiX2hjZF9naXZlYmFja191cmIKCS0+ IF9fdXNiX2hjZF9naXZlYmFja191cmIKCS0+IHVubWFwX3VyYl9mb3JfZG1hCgktPiB1c2JfaGNk X3VubWFwX3VyYl9mb3JfZG1hCgktPiBoY2RfZnJlZV9jb2hlcmVudAoJLT4gaGNkX2J1ZmZlcl9m cmVlCgktPiBkbWFfZnJlZV9jb2hlcmVudAoJLT4gZG1hX2ZyZWVfYXR0cnMKClRoZSBoY19kcml2 ZXIgc3RydWN0IGlzIHNldCB0byBkZWZhdWx0cywgYW5kIHRoZXkgZG9uJ3QgbWFuYWdlIERNQQph bGxvY2F0aW9ucyBleGNlcHQgZm9yIHByb2JlIGFuZCByZW1vdmUuIEhvdyBjb3VsZCB0aGV5IGF2 b2lkIHRoZSBXQVJOX09OPwoKWyBGb3IgcmVmZXJlbmNlLCBJIGF0dGFjaGVkIHRoZSBQUzIgT0hD SSBkcml2ZXIgYmVsb3cuIEl0IGhhcyBiZWVuIHRlc3RlZAphbmQgd29ya3Mgd2VsbCBwcm92aWRl ZCB0aGUgV0FSTl9PTiBpbiBkbWFfZnJlZV9hdHRycyBpcyByZW1vdmVkLiBdCgpGcmVkcmlrCgov KgogKiBQbGF5U3RhdGlvbiAyIFVTQiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikK ICoKICogQ29weXJpZ2h0IChDKSAyMDE3IErDvHJnZW4gVXJiYW4KICogQ29weXJpZ2h0IChDKSAy MDE3IEZyZWRyaWsgTm9yaW5nCiAqCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w CiAqLwoKI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgojaW5jbHVkZSA8bGludXgv dXNiLmg+CiNpbmNsdWRlIDxsaW51eC91c2IvaGNkLmg+CgojaW5jbHVkZSA8YXNtL21hY2gtcHMy L2lvcC1tZW1vcnkuaD4KCiNpbmNsdWRlICJvaGNpLmgiCgovKiBFbmFibGUgVVNCIE9IQ0kgaGFy ZHdhcmUuICovCiNkZWZpbmUgRFBDUjJfRU5BX1VTQiAweDA4MDAwMDAwCgovKiBFbmFibGUgUFMy REVWIChyZXF1aXJlZCBmb3IgUEFUQSBhbmQgVVNCKS4gKi8KI2RlZmluZSBEUENSMl9FTkFfUFMy REVWIDB4MDAwMDAwODAKCiNkZWZpbmUgRFJJVkVSX0RFU0MgIk9IQ0kgUFMyIGRyaXZlciIKI2Rl ZmluZSBEUlZfTkFNRSAib2hjaS1wczIiCgovKiBTaXplIGFsbG9jYXRlZCBmcm9tIElPUCBoZWFw IChtYXhpbXVtIHNpemUgb2YgRE1BIG1lbW9yeSkuICovCiNkZWZpbmUgRE1BX0JVRkZFUl9TSVpF ICgyNTYgKiAxMDI0KQoKLyogR2V0IGRyaXZlciBwcml2YXRlIGRhdGEuICovCiNkZWZpbmUgaGNk X3RvX3ByaXYoaGNkKSAoc3RydWN0IHBzMl9oY2QgKikoaGNkX3RvX29oY2koaGNkKS0+cHJpdikK CnN0cnVjdCBwczJfaGNkIHsKCXZvaWQgX19pb21lbSAqZHBjcjI7CglkbWFfYWRkcl90IGlvcF9k bWFfYWRkcjsKCWJvb2wgd2FrZXVwOwkJCS8qIFNhdmVkIHdha2UtdXAgc3RhdGUgZm9yIHJlc3Vt ZS4gKi8KfTsKCnN0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIF9fcmVhZF9tb3N0bHkgb2hjaV9wczJf aGNfZHJpdmVyOwpzdGF0aWMgaXJxcmV0dXJuX3QgKCpvaGNpX2lycSkoc3RydWN0IHVzYl9oY2Qg KmhjZCk7CgpzdGF0aWMgdm9pZCBvaGNpX3BzMl9lbmFibGUoc3RydWN0IHVzYl9oY2QgKmhjZCkK ewoJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKCglCVUdfT04oIW9o Y2ktPnJlZ3MpOwoKCS8qIFRoaXMgaXMgbmVlZGVkIHRvIGdldCBVU0Igd29ya2luZyBvbiBQUzIu ICovCglvaGNpX3dyaXRlbChvaGNpLCAxLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVz WzExXSk7Cn0KCnN0YXRpYyB2b2lkIG9oY2lfcHMyX2Rpc2FibGUoc3RydWN0IHVzYl9oY2QgKmhj ZCkKewoJc3RydWN0IG9oY2lfaGNkICpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKCglXQVJOX09O KCFvaGNpLT5yZWdzKTsKCglpZiAob2hjaS0+cmVncykKCQlvaGNpX3dyaXRlbChvaGNpLCAwLCAm b2hjaS0+cmVncy0+cm9vdGh1Yi5wb3J0c3RhdHVzWzExXSk7Cn0KCnN0YXRpYyB2b2lkIG9oY2lf cHMyX3N0YXJ0X2hjKHN0cnVjdCB1c2JfaGNkICpoY2QpCnsKCXN0cnVjdCBwczJfaGNkICpwczJw cml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKCgkvKgoJICogRW5hYmxlIFVTQiBhbmQgUFMyREVWLgoJ ICoKCSAqIEZJWE1FOiBXaGF0IGlzIHRoZSBwdXJwb3NlIG9mIFBTMkRFViBmb3IgVVNCPwoJICog RklYTUU6IEFzIGZhciBhcyBJIHJlbWVtYmVyIHRoZSBmb2xsb3dpbmcgY2FsbCBlbmFibGVzIHRo ZSBjbG9jaywKCSAqIHNvIHRoYXQgb2hjaS0+cmVncy0+Zm1pbnRlcnZhbCBjYW4gY291bnQuCgkg Ki8KCXdyaXRlbChyZWFkbChwczJwcml2LT5kcGNyMikgfCBEUENSMl9FTkFfVVNCIHwgRFBDUjJf RU5BX1BTMkRFViwKCQlwczJwcml2LT5kcGNyMik7Cn0KCnN0YXRpYyB2b2lkIG9oY2lfcHMyX3N0 b3BfaGMoc3RydWN0IHVzYl9oY2QgKmhjZCkKewoJc3RydWN0IHBzMl9oY2QgKnBzMnByaXYgPSBo Y2RfdG9fcHJpdihoY2QpOwoKCS8qIERpc2FibGUgVVNCLiBMZWF2ZSBQUzJERVYgZW5hYmxlZCAo Y291bGQgYmUgc3RpbGwgbmVlZGVkIGZvciBQQVRBKS4gKi8KCXdyaXRlbChyZWFkbChwczJwcml2 LT5kcGNyMikgJiB+RFBDUjJfRU5BX1VTQiwgcHMycHJpdi0+ZHBjcjIpOwp9CgpzdGF0aWMgaW50 IG9oY2lfcHMyX3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QpCnsKCWludCByZXQ7CgoJb2hjaV9w czJfc3RhcnRfaGMoaGNkKTsKCglyZXQgPSBvaGNpX3NldHVwKGhjZCk7CgoJaWYgKHJldCA8IDAp IHsKCQlvaGNpX3BzMl9zdG9wX2hjKGhjZCk7CgkJcmV0dXJuIHJldDsKCX0KCglvaGNpX3BzMl9l bmFibGUoaGNkKTsKCglyZXR1cm4gcmV0Owp9CgpzdGF0aWMgaXJxcmV0dXJuX3Qgb2hjaV9wczJf aXJxKHN0cnVjdCB1c2JfaGNkICpoY2QpCnsKCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90 b19vaGNpKGhjZCk7CglzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBvaGNpLT5yZWdz OwoKCS8qCgkgKiBGSVhNRTogRm9yIHNvbWUgcmVhc29uIE9IQ0lfSU5UUl9NSUUgaXMgcmVxdWly ZWQgaW4gdGhlCgkgKiBJUlEgaGFuZGxlci4gV2l0aG91dCBpdCwgcmVhZGluZyBhIGxhcmdlIGFt b3VudCBvZiBkYXRhCgkgKiAoPiAxIEdCKSBmcm9tIGEgbWFzcyBzdG9yYWdlIGRldmljZSByZXN1 bHRzIGluIGEgZnJlZXplLgoJICovCglvaGNpX3dyaXRlbChvaGNpLCBPSENJX0lOVFJfTUlFLCAm cmVncy0+aW50cmRpc2FibGUpOwoKCXJldHVybiBvaGNpX2lycShoY2QpOyAvKiBDYWxsIG5vcm1h bCBJUlEgaGFuZGxlci4gKi8KfQoKc3RhdGljIGludCBpb3BoZWFwX2FsbG9jX2NvaGVyZW50KHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHNpemVfdCBzaXplLAoJaW50IGZsYWdzKQp7Cglz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwoJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBs YXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwoJc3RydWN0IHBzMl9oY2QgKnBzMnByaXYgPSBoY2Rf dG9fcHJpdihoY2QpOwoKCWlmIChwczJwcml2LT5pb3BfZG1hX2FkZHIgIT0gMCkKCQlyZXR1cm4g MDsKCglwczJwcml2LT5pb3BfZG1hX2FkZHIgPSBpb3BfYWxsb2Moc2l6ZSk7CglpZiAocHMycHJp di0+aW9wX2RtYV9hZGRyID09IDApIHsKCQlkZXZfZXJyKGRldiwgImlvcF9hbGxvYyBmYWlsZWRc biIpOwoJCXJldHVybiAtRU5PTUVNOwoJfQoKCWlmIChkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1v cnkoZGV2LAoJCQlpb3BfYnVzX3RvX3BoeXMocHMycHJpdi0+aW9wX2RtYV9hZGRyKSwKCQkJcHMy cHJpdi0+aW9wX2RtYV9hZGRyLCBzaXplLCBmbGFncykpIHsKCQlkZXZfZXJyKGRldiwgImRtYV9k ZWNsYXJlX2NvaGVyZW50X21lbW9yeSBmYWlsZWRcbiIpOwoJCWlvcF9mcmVlKHBzMnByaXYtPmlv cF9kbWFfYWRkcik7CgkJcHMycHJpdi0+aW9wX2RtYV9hZGRyID0gMDsKCQlyZXR1cm4gLUVOT01F TTsKCX0KCglyZXR1cm4gMDsKfQoKc3RhdGljIHZvaWQgaW9waGVhcF9mcmVlX2NvaGVyZW50KHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCnsKCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2 LT5kZXY7CglzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7 CglzdHJ1Y3QgcHMyX2hjZCAqcHMycHJpdiA9IGhjZF90b19wcml2KGhjZCk7CgoJaWYgKHBzMnBy aXYtPmlvcF9kbWFfYWRkciA9PSAwKQoJCXJldHVybjsKCglkbWFfcmVsZWFzZV9kZWNsYXJlZF9t ZW1vcnkoZGV2KTsKCWlvcF9mcmVlKHBzMnByaXYtPmlvcF9kbWFfYWRkcik7CglwczJwcml2LT5p b3BfZG1hX2FkZHIgPSAwOwp9CgpzdGF0aWMgaW50IG9oY2lfaGNkX3BzMl9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQp7CglzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2 OwoJc3RydWN0IHJlc291cmNlICpyZWdzOwoJc3RydWN0IHJlc291cmNlICpkcGNyMjsKCXN0cnVj dCB1c2JfaGNkICpoY2Q7CglzdHJ1Y3QgcHMyX2hjZCAqcHMycHJpdjsKCWludCBpcnE7CglpbnQg cmV0OwoKCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CglpZiAoaXJxIDwgMCkgewoJ CWRldl9lcnIoZGV2LCAicGxhdGZvcm1fZ2V0X2lycSBmYWlsZWRcbiIpOwoJCXJldHVybiBpcnE7 Cgl9CgoJLyogRklYTUU6IElzIHJlcXVlc3RfbWVtX3JlZ2lvbiByZWNvbW1lbmRlZCBoZXJlPyAq LwoKCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZvaGNpX3BzMl9oY19kcml2ZXIsIGRldiwgZGV2X25h bWUoZGV2KSk7CglpZiAoaGNkID09IE5VTEwpCgkJcmV0dXJuIC1FTk9NRU07CgoJcHMycHJpdiA9 IGhjZF90b19wcml2KGhjZCk7CgltZW1zZXQocHMycHJpdiwgMCwgc2l6ZW9mKCpwczJwcml2KSk7 CgoJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 CglpZiAocmVncyA9PSBOVUxMKSB7CgkJZGV2X2VycihkZXYsICJwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UgMCBmYWlsZWRcbiIpOwoJCXJldCA9IC1FTk9FTlQ7CgkJZ290byBlcnI7Cgl9CglkcGNyMiA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CglpZiAoZHBj cjIgPT0gTlVMTCkgewoJCWRldl9lcnIoZGV2LCAicGxhdGZvcm1fZ2V0X3Jlc291cmNlIDEgZmFp bGVkXG4iKTsKCQlyZXQgPSAtRU5PRU5UOwoJCWdvdG8gZXJyOwoJfQoKCWhjZC0+cnNyY19zdGFy dCA9IHJlZ3MtPnN0YXJ0OwoJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVncyk7Cglo Y2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CglpZiAo SVNfRVJSKGhjZC0+cmVncykpIHsKCQlyZXQgPSBQVFJfRVJSKGhjZC0+cmVncyk7CgkJZ290byBl cnI7Cgl9CgoJcHMycHJpdi0+ZHBjcjIgPSBpb3JlbWFwKGRwY3IyLT5zdGFydCwgcmVzb3VyY2Vf c2l6ZShkcGNyMikpOwoJaWYgKHBzMnByaXYtPmRwY3IyID09IE5VTEwpIHsKCQlyZXQgPSAtRU5P TUVNOwoJCWdvdG8gZXJyX2lvcmVtYXBfZHBjcjI7Cgl9CgoJcmV0ID0gaW9waGVhcF9hbGxvY19j b2hlcmVudChwZGV2LCBETUFfQlVGRkVSX1NJWkUsIERNQV9NRU1PUllfRVhDTFVTSVZFKTsKCWlm IChyZXQgIT0gMCkKCQlnb3RvIGVycl9hbGxvY19jb2hlcmVudDsKCglyZXQgPSB1c2JfYWRkX2hj ZChoY2QsIGlycSwgMCk7CglpZiAocmV0ICE9IDApCgkJZ290byBlcnJfYWRkX2hjZDsKCglyZXQg PSBkZXZpY2Vfd2FrZXVwX2VuYWJsZShoY2QtPnNlbGYuY29udHJvbGxlcik7CglpZiAocmV0ID09 IDApCgkJcmV0dXJuIHJldDsKCgl1c2JfcmVtb3ZlX2hjZChoY2QpOwplcnJfYWRkX2hjZDoKCWlv cGhlYXBfZnJlZV9jb2hlcmVudChwZGV2KTsKZXJyX2FsbG9jX2NvaGVyZW50OgoJaW91bm1hcChw czJwcml2LT5kcGNyMik7CmVycl9pb3JlbWFwX2RwY3IyOgoJaW91bm1hcChoY2QtPnJlZ3MpOwpl cnI6Cgl1c2JfcHV0X2hjZChoY2QpOwoKCXJldHVybiByZXQ7Cn0KCnN0YXRpYyBpbnQgb2hjaV9o Y2RfcHMyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQp7CglzdHJ1Y3QgdXNi X2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CglzdHJ1Y3QgcHMyX2hjZCAq cHMycHJpdiA9IGhjZF90b19wcml2KGhjZCk7CgoJdXNiX3JlbW92ZV9oY2QoaGNkKTsKCglvaGNp X3BzMl9kaXNhYmxlKGhjZCk7CglvaGNpX3BzMl9zdG9wX2hjKGhjZCk7CgoJaW9waGVhcF9mcmVl X2NvaGVyZW50KHBkZXYpOwoJaW91bm1hcChwczJwcml2LT5kcGNyMik7Cglpb3VubWFwKGhjZC0+ cmVncyk7CgoJdXNiX3B1dF9oY2QoaGNkKTsKCglyZXR1cm4gMDsKfQoKI2lmZGVmIENPTkZJR19Q TQpzdGF0aWMgaW50IG9oY2lfaGNkX3BzMl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYsCgkJCQlwbV9tZXNzYWdlX3QgbWVzc2FnZSkKewoJc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsKCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShw ZGV2KTsKCXN0cnVjdCBwczJfaGNkICpwczJwcml2ID0gaGNkX3RvX3ByaXYoaGNkKTsKCWludCBy ZXQ7CgoJcHMycHJpdi0+d2FrZXVwID0gZGV2aWNlX21heV93YWtldXAoZGV2KTsKCWlmIChwczJw cml2LT53YWtldXApCgkJZW5hYmxlX2lycV93YWtlKGhjZC0+aXJxKTsKCglyZXQgPSBvaGNpX3N1 c3BlbmQoaGNkLCBwczJwcml2LT53YWtldXApOwoJaWYgKHJldCkKCQlyZXR1cm4gcmV0OwoKCW9o Y2lfcHMyX2Rpc2FibGUoaGNkKTsKCW9oY2lfcHMyX3N0b3BfaGMoaGNkKTsKCglyZXR1cm4gcmV0 Owp9CgpzdGF0aWMgaW50IG9oY2lfaGNkX3BzMl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKewoJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBk ZXYpOwoJc3RydWN0IHBzMl9oY2QgKnBzMnByaXYgPSBoY2RfdG9fcHJpdihoY2QpOwoKCWlmIChw czJwcml2LT53YWtldXApCgkJZGlzYWJsZV9pcnFfd2FrZShoY2QtPmlycSk7CgoJb2hjaV9wczJf c3RhcnRfaGMoaGNkKTsKCW9oY2lfcHMyX2VuYWJsZShoY2QpOwoKCW9oY2lfcmVzdW1lKGhjZCwg cHMycHJpdi0+d2FrZXVwKTsKCglyZXR1cm4gMDsKfQojZW5kaWYKCnN0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIG9oY2lfaGNkX3BzMl9kcml2ZXIgPSB7CgkucHJvYmUJCT0gb2hjaV9oY2Rf cHMyX3Byb2JlLAoJLnJlbW92ZQkJPSBvaGNpX2hjZF9wczJfcmVtb3ZlLAoJLnNodXRkb3duCT0g dXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKI2lmZGVmCUNPTkZJR19QTQoJLnN1c3BlbmQJPSBv aGNpX2hjZF9wczJfc3VzcGVuZCwKCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHMyX3Jlc3VtZSwKI2Vu ZGlmCgkuZHJpdmVyCQk9IHsKCQkubmFtZQk9IERSVl9OQU1FLAoJfSwKfTsKCnN0YXRpYyBjb25z dCBzdHJ1Y3Qgb2hjaV9kcml2ZXJfb3ZlcnJpZGVzIHBzMl9vdmVycmlkZXMgX19pbml0Y29uc3Qg PSB7CgkucmVzZXQJCT0gb2hjaV9wczJfcmVzZXQsCgkucHJvZHVjdF9kZXNjCT0gRFJJVkVSX0RF U0MsCgkuZXh0cmFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBwczJfaGNkKSwKfTsKCnN0YXRp YyBpbnQgX19pbml0IG9oY2lfcHMyX2luaXQodm9pZCkKewoJaWYgKHVzYl9kaXNhYmxlZCgpKQoJ CXJldHVybiAtRU5PREVWOwoKCXByX2luZm8oIiVzOiAiIERSSVZFUl9ERVNDICJcbiIsIERSVl9O QU1FKTsKCglvaGNpX2luaXRfZHJpdmVyKCZvaGNpX3BzMl9oY19kcml2ZXIsICZwczJfb3ZlcnJp ZGVzKTsKCW9oY2lfcHMyX2hjX2RyaXZlci5mbGFncyB8PSBIQ0RfTE9DQUxfTUVNOwoKCS8qCgkg KiBGSVhNRTogRm9yIHNvbWUgcmVhc29uCgkgKgoJICogICBvaGNpX3dyaXRlbChvaGNpLCBPSENJ X0lOVFJfTUlFLCAmcmVncy0+aW50cmRpc2FibGUpOwoJICoKCSAqIGlzIHJlcXVpcmVkIGluIHRo ZSBJUlEgaGFuZGxlci4gV2l0aG91dCBpdCwgcmVhZGluZyBhIGxhcmdlCgkgKiBhbW91bnQgb2Yg ZGF0YSAoPiAxIEdCKSBmcm9tIGEgbWFzcyBzdG9yYWdlIGRldmljZSByZXN1bHRzIGluCgkgKiBh IGZyZWV6ZS4KCSAqLwoJb2hjaV9pcnEgPSBvaGNpX3BzMl9oY19kcml2ZXIuaXJxOyAvKiBTYXZl IG5vcm1hbCBJUlEgaGFuZGxlci4gKi8KCW9oY2lfcHMyX2hjX2RyaXZlci5pcnEgPSBvaGNpX3Bz Ml9pcnE7IC8qIEluc3RhbGwgSVJRIHdvcmthcm91bmQuICovCgoJcmV0dXJuIHBsYXRmb3JtX2Ry aXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHMyX2RyaXZlcik7Cn0KbW9kdWxlX2luaXQob2hjaV9w czJfaW5pdCk7CgpzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9wczJfY2xlYW51cCh2b2lkKQp7Cglw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHMyX2RyaXZlcik7Cn0KbW9kdWxl X2V4aXQob2hjaV9wczJfY2xlYW51cCk7CgpNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0Mp OwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Ck1PRFVMRV9BTElBUygicGxhdGZvcm06IiBEUlZfTkFN RSk7Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlvbW11 IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xp c3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pb21tdQ==