From mboxrd@z Thu Jan 1 00:00:00 1970 From: Logan Gunthorpe Subject: [PATCH v4 01/14] PCI/P2PDMA: Support peer-to-peer memory Date: Mon, 23 Apr 2018 17:30:33 -0600 Message-ID: <20180423233046.21476-2-logang@deltatee.com> References: <20180423233046.21476-1-logang@deltatee.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180423233046.21476-1-logang-OTvnGxWRz7hWk0Htik3J/w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-nvdimm-bounces-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org Sender: "Linux-nvdimm" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-nvme-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-nvdimm-hn68Rpc1hR1g9hUCZPvPmw@public.gmane.org, linux-block-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Jens Axboe , =?UTF-8?q?Christian=20K=C3=B6nig?= , Benjamin Herrenschmidt , Alex Williamson , Keith Busch , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jason Gunthorpe , Bjorn Helgaas , Max Gurtovoy , Christoph Hellwig List-Id: linux-rdma@vger.kernel.org U29tZSBQQ0kgZGV2aWNlcyBtYXkgaGF2ZSBtZW1vcnkgbWFwcGVkIGluIGEgQkFSIHNwYWNlIHRo YXQncwppbnRlbmRlZCBmb3IgdXNlIGluIHBlZXItdG8tcGVlciB0cmFuc2FjdGlvbnMuIEluIG9y ZGVyIHRvIGVuYWJsZQpzdWNoIHRyYW5zYWN0aW9ucyB0aGUgbWVtb3J5IG11c3QgYmUgcmVnaXN0 ZXJlZCB3aXRoIFpPTkVfREVWSUNFIHBhZ2VzCnNvIGl0IGNhbiBiZSB1c2VkIGJ5IERNQSBpbnRl cmZhY2VzIGluIGV4aXN0aW5nIGRyaXZlcnMuCgpBZGQgYW4gaW50ZXJmYWNlIGZvciBvdGhlciBz dWJzeXN0ZW1zIHRvIGZpbmQgYW5kIGFsbG9jYXRlIGNodW5rcyBvZiBQMlAKbWVtb3J5IGFzIG5l Y2Vzc2FyeSB0byBmYWNpbGl0YXRlIHRyYW5zZmVycyBiZXR3ZWVuIHR3byBQQ0kgcGVlcnM6Cgpp bnQgcGNpX3AycGRtYV9hZGRfY2xpZW50KCk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfcDJwbWVtX2Zp bmQoKTsKdm9pZCAqcGNpX2FsbG9jX3AycG1lbSgpOwoKVGhlIG5ldyBpbnRlcmZhY2UgcmVxdWly ZXMgYSBkcml2ZXIgdG8gY29sbGVjdCBhIGxpc3Qgb2YgY2xpZW50IGRldmljZXMKaW52b2x2ZWQg aW4gdGhlIHRyYW5zYWN0aW9uIHdpdGggdGhlIHBjaV9wMnBtZW1fYWRkX2NsaWVudCooKSBmdW5j dGlvbnMKdGhlbiBjYWxsIHBjaV9wMnBtZW1fZmluZCgpIHRvIG9idGFpbiBhbnkgc3VpdGFibGUg UDJQIG1lbW9yeS4gT25jZQp0aGlzIGlzIGRvbmUgdGhlIGxpc3QgaXMgYm91bmQgdG8gdGhlIG1l bW9yeSBhbmQgdGhlIGNhbGxpbmcgZHJpdmVyIGlzCmZyZWUgdG8gYWRkIGFuZCByZW1vdmUgY2xp ZW50cyBhcyBuZWNlc3NhcnkgKGFkZGluZyBpbmNvbXBhdGlibGUgY2xpZW50cwp3aWxsIGZhaWwp LiBXaXRoIGEgc3VpdGFibGUgcDJwbWVtIGRldmljZSwgbWVtb3J5IGNhbiB0aGVuIGJlCmFsbG9j YXRlZCB3aXRoIHBjaV9hbGxvY19wMnBtZW0oKSBmb3IgdXNlIGluIERNQSB0cmFuc2FjdGlvbnMu CgpEZXBlbmRpbmcgb24gaGFyZHdhcmUsIHVzaW5nIHBlZXItdG8tcGVlciBtZW1vcnkgbWF5IHJl ZHVjZSB0aGUgYmFuZHdpZHRoCm9mIHRoZSB0cmFuc2ZlciBidXQgY2FuIHNpZ25pZmljYW50bHkg cmVkdWNlIHByZXNzdXJlIG9uIHN5c3RlbSBtZW1vcnkuClRoaXMgbWF5IGJlIGRlc2lyYWJsZSBp biBtYW55IGNhc2VzOiBmb3IgZXhhbXBsZSBhIHN5c3RlbSBjb3VsZCBiZSBkZXNpZ25lZAp3aXRo IGEgc21hbGwgQ1BVIGNvbm5lY3RlZCB0byBhIFBDSSBzd2l0Y2ggYnkgYSBzbWFsbCBudW1iZXIg b2YgbGFuZXMKd2hpY2ggd291bGQgbWF4aW1pemUgdGhlIG51bWJlciBvZiBsYW5lcyBhdmFpbGFi bGUgdG8gY29ubmVjdCB0byBOVk1lCmRldmljZXMuCgpUaGUgY29kZSBpcyBkZXNpZ25lZCB0byBv bmx5IHV0aWxpemUgdGhlIHAycG1lbSBkZXZpY2UgaWYgYWxsIHRoZSBkZXZpY2VzCmludm9sdmVk IGluIGEgdHJhbnNmZXIgYXJlIGJlaGluZCB0aGUgc2FtZSByb290IHBvcnQgKHR5cGljYWxseSB0 aHJvdWdoCmEgbmV0d29yayBvZiBQQ0llIHN3aXRjaGVzKS4gVGhpcyBpcyBiZWNhdXNlIHdlIGhh dmUgbm8gd2F5IG9mIGtub3dpbmcKd2hldGhlciBwZWVyLXRvLXBlZXIgcm91dGluZyBiZXR3ZWVu IFBDSWUgUm9vdCBQb3J0cyBpcyBzdXBwb3J0ZWQKKFBDSWUgcjQuMCwgc2VjIDEuMy4xKS4gQWRk aXRpb25hbGx5LCB0aGUgYmVuZWZpdHMgb2YgUDJQIHRyYW5zZmVycyB0aGF0CmdvIHRocm91Z2gg dGhlIFJDIGlzIGxpbWl0ZWQgdG8gb25seSByZWR1Y2luZyBEUkFNIHVzYWdlIGFuZCwgaW4gc29t ZQpjYXNlcywgY29kaW5nIGNvbnZlbmllbmNlLiBUaGUgUENJLVNJRyBtYXkgYmUgZXhwbG9yaW5n IGFkZGluZyBhIG5ldwpjYXBhYmlsaXR5IGJpdCB0byBhZHZlcnRpc2Ugd2hldGhlciB0aGlzIGlz IHBvc3NpYmxlIGZvciBmdXR1cmUKaGFyZHdhcmUuCgpUaGlzIGNvbW1pdCBpbmNsdWRlcyBzaWdu aWZpY2FudCByZXdvcmsgYW5kIGZlZWRiYWNrIGZyb20gQ2hyaXN0b3BoCkhlbGx3aWcuCgpTaWdu ZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KU2lnbmVkLW9mZi1ieTog TG9nYW4gR3VudGhvcnBlIDxsb2dhbmdAZGVsdGF0ZWUuY29tPgotLS0KIGRyaXZlcnMvcGNpL0tj b25maWcgICAgICAgIHwgIDE3ICsrCiBkcml2ZXJzL3BjaS9NYWtlZmlsZSAgICAgICB8ICAgMSAr CiBkcml2ZXJzL3BjaS9wMnBkbWEuYyAgICAgICB8IDY5NCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvbWVtcmVtYXAuaCAgIHwgIDE4 ICsrCiBpbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaCB8IDEwMCArKysrKysrCiBpbmNsdWRlL2xp bnV4L3BjaS5oICAgICAgICB8ICAgNCArCiA2IGZpbGVzIGNoYW5nZWQsIDgzNCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvcDJwZG1hLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnCmluZGV4IDM0YjU2YThmODQ4MC4uYjIz OTZjMjJiNTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMv cGNpL0tjb25maWcKQEAgLTEyNCw2ICsxMjQsMjMgQEAgY29uZmlnIFBDSV9QQVNJRAogCiAJICBJ ZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgUENJX1AyUERNQQorCWJvb2wgIlBDSSBwZWVyLXRv LXBlZXIgdHJhbnNmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBaT05FX0RFVklDRSAm JiBFWFBFUlQKKwlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKKwloZWxwCisJICBFbmFibGXRlSBk cml2ZXJzIHRvIGRvIFBDSSBwZWVyLXRvLXBlZXIgdHJhbnNhY3Rpb25zIHRvIGFuZCBmcm9tCisJ ICBCQVJzIHRoYXQgYXJlIGV4cG9zZWQgaW4gb3RoZXIgZGV2aWNlcyB0aGF0IGFyZSB0aGUgcGFy dCBvZgorCSAgdGhlIGhpZXJhcmNoeSB3aGVyZSBwZWVyLXRvLXBlZXIgRE1BIGlzIGd1YXJhbnRl ZWQgYnkgdGhlIFBDSQorCSAgc3BlY2lmaWNhdGlvbiB0byB3b3JrIChpZS4gYW55dGhpbmcgYmVs b3cgYSBzaW5nbGUgUENJIGJyaWRnZSkuCisKKwkgIE1hbnkgUENJZSByb290IGNvbXBsZXhlcyBk byBub3Qgc3VwcG9ydCBQMlAgdHJhbnNhY3Rpb25zIGFuZAorCSAgaXQncyBoYXJkIHRvIHRlbGwg d2hpY2ggc3VwcG9ydCBpdCBhdCBhbGwsIHNvIGF0IHRoaXMgdGltZSwgRE1BCisJICB0cmFuc2F0 aW9ucyBtdXN0IGJlIGJldHdlZW4gZGV2aWNlcyBiZWhpbmQgdGhlIHNhbWUgcm9vdCBwb3J0Lgor CSAgKFR5cGljYWxseSBiZWhpbmQgYSBuZXR3b3JrIG9mIFBDSWUgc3dpdGNoZXMpLgorCisJICBJ ZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgUENJX0xBQkVMCiAJZGVmX2Jvb2wgeSBpZiAoRE1J IHx8IEFDUEkpCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2Vm aWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggOTUyYWRkYzdiYWNmLi4wNTBjMWUxOWEx ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01h a2VmaWxlCkBAIC0yNSw2ICsyNSw3IEBAIG9iai0kKENPTkZJR19YODZfSU5URUxfTUlEKQkrPSBw Y2ktbWlkLm8KIG9iai0kKENPTkZJR19QQ0lfU1lTQ0FMTCkJKz0gc3lzY2FsbC5vCiBvYmotJChD T05GSUdfUENJX1NUVUIpCQkrPSBwY2ktc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX0VDQU0pCQkr PSBlY2FtLm8KK29iai0kKENPTkZJR19QQ0lfUDJQRE1BKQkrPSBwMnBkbWEubwogb2JqLSQoQ09O RklHX1hFTl9QQ0lERVZfRlJPTlRFTkQpICs9IHhlbi1wY2lmcm9udC5vCiAKIG9iai15CQkJCSs9 IGhvc3QvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3Ay cGRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZTUyNGExMmVj YTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hLmMKQEAgLTAsMCArMSw2 OTQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogUENJIFBl ZXIgMiBQZWVyIERNQSBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBM b2dhbiBHdW50aG9ycGUKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29y cG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIENv cHlyaWdodCAoYykgMjAxOCwgRWlkZXRpY29tIEluYy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L3BjaS1wMnBkbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51 eC9tZW1yZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1yZWZjb3VudC5oPgorI2luY2x1 ZGUgPGxpbnV4L3JhbmRvbS5oPgorCitzdHJ1Y3QgcGNpX3AycGRtYSB7CisJc3RydWN0IHBlcmNw dV9yZWYgZGV2bWFwX3JlZjsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkZXZtYXBfcmVmX2RvbmU7CisJ c3RydWN0IGdlbl9wb29sICpwb29sOworCWJvb2wgcDJwbWVtX3B1Ymxpc2hlZDsKK307CisKK3N0 YXRpYyB2b2lkIHBjaV9wMnBkbWFfcGVyY3B1X3JlbGVhc2Uoc3RydWN0IHBlcmNwdV9yZWYgKnJl ZikKK3sKKwlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwID0KKwkJY29udGFpbmVyX29mKHJlZiwgc3Ry dWN0IHBjaV9wMnBkbWEsIGRldm1hcF9yZWYpOworCisJY29tcGxldGVfYWxsKCZwMnAtPmRldm1h cF9yZWZfZG9uZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcGVyY3B1X2tpbGwodm9p ZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmID0gZGF0YTsKKworCWlmIChwZXJj cHVfcmVmX2lzX2R5aW5nKHJlZikpCisJCXJldHVybjsKKworCXBlcmNwdV9yZWZfa2lsbChyZWYp OworfQorCitzdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2Uodm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRhdGE7CisKKwlpZiAoIXBkZXYtPnAycGRtYSkKKwkJcmV0 dXJuOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmX2Rv bmUpOworCXBlcmNwdV9yZWZfZXhpdCgmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmKTsKKworCWdl bl9wb29sX2Rlc3Ryb3kocGRldi0+cDJwZG1hLT5wb29sKTsKKwlwZGV2LT5wMnBkbWEgPSBOVUxM OworfQorCitzdGF0aWMgaW50IHBjaV9wMnBkbWFfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYp Cit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwOworCisJ cDJwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFwMnApCisJCXJldHVybiAtRU5PTUVNOworCisJcDJwLT5wb29sID0gZ2VuX3Bvb2xf Y3JlYXRlKFBBR0VfU0hJRlQsIGRldl90b19ub2RlKCZwZGV2LT5kZXYpKTsKKwlpZiAoIXAycC0+ cG9vbCkKKwkJZ290byBvdXQ7CisKKwlpbml0X2NvbXBsZXRpb24oJnAycC0+ZGV2bWFwX3JlZl9k b25lKTsKKwllcnJvciA9IHBlcmNwdV9yZWZfaW5pdCgmcDJwLT5kZXZtYXBfcmVmLAorCQkJcGNp X3AycGRtYV9wZXJjcHVfcmVsZWFzZSwgMCwgR0ZQX0tFUk5FTCk7CisJaWYgKGVycm9yKQorCQln b3RvIG91dF9wb29sX2Rlc3Ryb3k7CisKKwlwZXJjcHVfcmVmX3N3aXRjaF90b19hdG9taWNfc3lu YygmcDJwLT5kZXZtYXBfcmVmKTsKKworCWVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0 KCZwZGV2LT5kZXYsIHBjaV9wMnBkbWFfcmVsZWFzZSwgcGRldik7CisJaWYgKGVycm9yKQorCQln b3RvIG91dF9wb29sX2Rlc3Ryb3k7CisKKwlwZGV2LT5wMnBkbWEgPSBwMnA7CisKKwlyZXR1cm4g MDsKKworb3V0X3Bvb2xfZGVzdHJveToKKwlnZW5fcG9vbF9kZXN0cm95KHAycC0+cG9vbCk7Citv dXQ6CisJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBwMnApOworCXJldHVybiBlcnJvcjsKK30KKwor LyoqCisgKiBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSAtIGFkZCBtZW1vcnkgZm9yIHVzZSBhcyBw MnAgbWVtb3J5CisgKiBAcGRldjogdGhlIGRldmljZSB0byBhZGQgdGhlIG1lbW9yeSB0bworICog QGJhcjogUENJIEJBUiB0byBhZGQKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBtZW1vcnkgdG8gYWRk LCBtYXkgYmUgemVybyB0byB1c2UgdGhlIHdob2xlIEJBUgorICogQG9mZnNldDogb2Zmc2V0IGlu dG8gdGhlIFBDSSBCQVIKKyAqCisgKiBUaGUgbWVtb3J5IHdpbGwgYmUgZ2l2ZW4gWk9ORV9ERVZJ Q0Ugc3RydWN0IHBhZ2VzIHNvIHRoYXQgaXQgbWF5CisgKiBiZSB1c2VkIHdpdGggYW55IERNQSBy ZXF1ZXN0LgorICovCitpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYg KnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLAorCQkJICAgIHU2NCBvZmZzZXQpCit7CisJc3Ry dWN0IGRldl9wYWdlbWFwICpwZ21hcDsKKwl2b2lkICphZGRyOworCWludCBlcnJvcjsKKworCWlm ICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICYgSU9SRVNPVVJDRV9NRU0pKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCWlmIChvZmZzZXQgPj0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBi YXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghc2l6ZSkKKwkJc2l6ZSA9IHBjaV9yZXNv dXJjZV9sZW4ocGRldiwgYmFyKSAtIG9mZnNldDsKKworCWlmIChzaXplICsgb2Zmc2V0ID4gcGNp X3Jlc291cmNlX2xlbihwZGV2LCBiYXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghcGRl di0+cDJwZG1hKSB7CisJCWVycm9yID0gcGNpX3AycGRtYV9zZXR1cChwZGV2KTsKKwkJaWYgKGVy cm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXBnbWFwID0gZGV2bV9remFsbG9jKCZwZGV2 LT5kZXYsIHNpemVvZigqcGdtYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBnbWFwKQorCQlyZXR1 cm4gLUVOT01FTTsKKworCXBnbWFwLT5yZXMuc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRl diwgYmFyKSArIG9mZnNldDsKKwlwZ21hcC0+cmVzLmVuZCA9IHBnbWFwLT5yZXMuc3RhcnQgKyBz aXplIC0gMTsKKwlwZ21hcC0+cmVzLmZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJh cik7CisJcGdtYXAtPnJlZiA9ICZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWY7CisJcGdtYXAtPnR5 cGUgPSBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE7CisKKwlhZGRyID0gZGV2bV9tZW1yZW1hcF9w YWdlcygmcGRldi0+ZGV2LCBwZ21hcCk7CisJaWYgKElTX0VSUihhZGRyKSkgeworCQllcnJvciA9 IFBUUl9FUlIoYWRkcik7CisJCWdvdG8gcGdtYXBfZnJlZTsKKwl9CisKKwllcnJvciA9IGdlbl9w b29sX2FkZF92aXJ0KHBkZXYtPnAycGRtYS0+cG9vbCwgKHVuc2lnbmVkIGxvbmcpYWRkciwKKwkJ CXBjaV9idXNfYWRkcmVzcyhwZGV2LCBiYXIpICsgb2Zmc2V0LAorCQkJcmVzb3VyY2Vfc2l6ZSgm cGdtYXAtPnJlcyksIGRldl90b19ub2RlKCZwZGV2LT5kZXYpKTsKKwlpZiAoZXJyb3IpCisJCWdv dG8gcGdtYXBfZnJlZTsKKworCWVycm9yID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCZwZGV2 LT5kZXYsIHBjaV9wMnBkbWFfcGVyY3B1X2tpbGwsCisJCQkJCSAgJnBkZXYtPnAycGRtYS0+ZGV2 bWFwX3JlZik7CisJaWYgKGVycm9yKQorCQlnb3RvIHBnbWFwX2ZyZWU7CisKKwlwY2lfaW5mbyhw ZGV2LCAiYWRkZWQgcGVlci10by1wZWVyIERNQSBtZW1vcnkgJXBSXG4iLAorCQkgJnBnbWFwLT5y ZXMpOworCisJcmV0dXJuIDA7CisKK3BnbWFwX2ZyZWU6CisJZGV2cmVzX2ZyZWUocGdtYXApOwor CXJldHVybiBlcnJvcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfYWRkX3Jlc291 cmNlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpmaW5kX3BhcmVudF9wY2lfZGV2KHN0cnVj dCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CisKKwlkZXYgPSBnZXRf ZGV2aWNlKGRldik7CisKKwl3aGlsZSAoZGV2KSB7CisJCWlmIChkZXZfaXNfcGNpKGRldikpCisJ CQlyZXR1cm4gdG9fcGNpX2RldihkZXYpOworCisJCXBhcmVudCA9IGdldF9kZXZpY2UoZGV2LT5w YXJlbnQpOworCQlwdXRfZGV2aWNlKGRldik7CisJCWRldiA9IHBhcmVudDsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworLyoKKyAqIElmIGEgZGV2aWNlIGlzIGJlaGluZCBhIHN3aXRjaCwgd2Ug dHJ5IHRvIGZpbmQgdGhlIHVwc3RyZWFtIGJyaWRnZQorICogcG9ydCBvZiB0aGUgc3dpdGNoLiBU aGlzIHJlcXVpcmVzIHR3byBjYWxscyB0byBwY2lfdXBzdHJlYW1fYnJpZGdlKCk6CisgKiBvbmUg Zm9yIHRoZSB1cHN0cmVhbSBwb3J0IG9uIHRoZSBzd2l0Y2gsIG9uZSBvbiB0aGUgdXBzdHJlYW0g cG9ydAorICogZm9yIHRoZSBuZXh0IGxldmVsIGluIHRoZSBoaWVyYXJjaHkuIEJlY2F1c2Ugb2Yg dGhpcywgZGV2aWNlcyBjb25uZWN0ZWQKKyAqIHRvIHRoZSByb290IHBvcnQgd2lsbCBiZSByZWpl Y3RlZC4KKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpnZXRfdXBzdHJlYW1fYnJpZGdlX3Bv cnQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnVwMSwgKnVwMjsK KworCWlmICghcGRldikKKwkJcmV0dXJuIE5VTEw7CisKKwl1cDEgPSBwY2lfZGV2X2dldChwY2lf dXBzdHJlYW1fYnJpZGdlKHBkZXYpKTsKKwlpZiAoIXVwMSkKKwkJcmV0dXJuIE5VTEw7CisKKwl1 cDIgPSBwY2lfZGV2X2dldChwY2lfdXBzdHJlYW1fYnJpZGdlKHVwMSkpOworCXBjaV9kZXZfcHV0 KHVwMSk7CisKKwlyZXR1cm4gdXAyOworfQorCisvKgorICogRmluZCB0aGUgZGlzdGFuY2UgdGhy b3VnaCB0aGUgbmVhcmVzdCBjb21tb24gdXBzdHJlYW0gYnJpZGdlIGJldHdlZW4KKyAqIHR3byBQ Q0kgZGV2aWNlcy4KKyAqCisgKiBJZiB0aGUgdHdvIGRldmljZXMgYXJlIHRoZSBzYW1lIGRldmlj ZSB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZC4KKyAqCisgKiBJZiB0aGVyZSBhcmUgdHdvIHZpcnR1 YWwgZnVuY3Rpb25zIG9mIHRoZSBzYW1lIGRldmljZSBiZWhpbmQgdGhlIHNhbWUKKyAqIGJyaWRn ZSBwb3J0IHRoZW4gMiB3aWxsIGJlIHJldHVybmVkIChvbmUgc3RlcCBkb3duIHRvIHRoZSBicmlk Z2UgdGhlbgorICogb25lIHN0ZXAgYmFjayB0byB0aGUgc2FtZSBkZXZpY2UpLgorICoKKyAqIElu IHRoZSBjYXNlIHdoZXJlIHR3byBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgUENJ ZSBzd2l0Y2gsIHRoZQorICogdmFsdWUgNCB3aWxsIGJlIHJldHVybmVkLiBUaGlzIGNvcnJlc3Bv bmRzIHRvIHRoZSBmb2xsb3dpbmcgUENJIHRyZWU6CisgKgorICogICAgIC0rICBSb290IFBvcnQK KyAqICAgICAgXCsgU3dpdGNoIFVwc3RyZWFtIFBvcnQKKyAqICAgICAgICstKyBTd2l0Y2ggRG93 bnN0cmVhbSBQb3J0CisgKiAgICAgICArIFwtIERldmljZSBBCisgKiAgICAgICBcLSsgU3dpdGNo IERvd25zdHJlYW0gUG9ydAorICogICAgICAgICBcLSBEZXZpY2UgQgorICoKKyAqIFRoZSBkaXN0 YW5jZSBpcyA0IGJlY2F1c2Ugd2UgdHJhdmVyc2UgZnJvbSBEZXZpY2UgQSB0aHJvdWdoIHRoZSBk b3duc3RyZWFtCisgKiBwb3J0IG9mIHRoZSBzd2l0Y2gsIHRvIHRoZSBjb21tb24gdXBzdHJlYW0g cG9ydCwgYmFjayB1cCB0byB0aGUgc2Vjb25kCisgKiBkb3duc3RyZWFtIHBvcnQgYW5kIHRoZW4g dG8gRGV2aWNlIEIuCisgKgorICogQW55IHR3byBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBhIGNv bW1vbiB1cHN0cmVhbSBicmlkZ2Ugd2lsbCByZXR1cm4gLTEuCisgKiBJbiB0aGlzIHdheSBkZXZp Y2VzIG9uIHNlcGVyYXRlIHJvb3QgcG9ydHMgd2lsbCBiZSByZWplY3RlZCwgd2hpY2gKKyAqIGlz IHdoYXQgd2Ugd2FudCBmb3IgcGVlci10by1wZWVyIHNlZWluZyB0aGVyZSdzIG5vIHdheSB0byBk ZXRlcm1pbmUKKyAqIGlmIHRoZSByb290IGNvbXBsZXggc3VwcG9ydHMgZm9yd2FyZGluZyBiZXR3 ZWVuIHJvb3QgcG9ydHMuCisgKgorICogSW4gdGhlIGNhc2Ugd2hlcmUgdHdvIGRldmljZXMgYXJl IGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgUENJZSBzd2l0Y2hlcworICogdGhpcyBmdW5jdGlvbiB3 aWxsIHN0aWxsIHJldHVybiBhIHBvc2l0aXZlIGRpc3RhbmNlIGFzIGxvbmcgYXMgYm90aAorICog c3dpdGNoZXMgZXZlbnV0YWxseSBoYXZlIGEgY29tbW9uIHVwc3RyZWFtIGJyaWRnZS4gTm90ZSB0 aGlzIGNvdmVycworICogdGhlIGNhc2Ugb2YgdXNpbmcgbXVsdGlwbGUgUENJZSBzd2l0Y2hlcyB0 byBhY2hpZXZlIGEgZGVzaXJlZCBsZXZlbCBvZgorICogZmFuLW91dCBmcm9tIGEgcm9vdCBwb3J0 LiBUaGUgZXhhY3QgZGlzdGFuY2Ugd2lsbCBiZSBhIGZ1bmN0aW9uIG9mIHRoZQorICogbnVtYmVy IG9mIHN3aXRjaGVzIGJldHdlZW4gRGV2aWNlIEEgYW5kIERldmljZSBCLgorICoKKyAqLworc3Rh dGljIGludCB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Uoc3RydWN0IHBjaV9kZXYgKmEsCisJCQkJ ICAgIHN0cnVjdCBwY2lfZGV2ICpiKQoreworCWludCBkaXN0X2EgPSAwOworCWludCBkaXN0X2Ig PSAwOworCXN0cnVjdCBwY2lfZGV2ICphYSwgKmJiID0gTlVMTCwgKnRtcDsKKworCWFhID0gcGNp X2Rldl9nZXQoYSk7CisKKwl3aGlsZSAoYWEpIHsKKwkJZGlzdF9iID0gMDsKKworCQlwY2lfZGV2 X3B1dChiYik7CisJCWJiID0gcGNpX2Rldl9nZXQoYik7CisKKwkJd2hpbGUgKGJiKSB7CisJCQlp ZiAoYWEgPT0gYmIpCisJCQkJZ290byBwdXRfYW5kX3JldHVybjsKKworCQkJdG1wID0gcGNpX2Rl dl9nZXQocGNpX3Vwc3RyZWFtX2JyaWRnZShiYikpOworCQkJcGNpX2Rldl9wdXQoYmIpOworCQkJ YmIgPSB0bXA7CisKKwkJCWRpc3RfYisrOworCQl9CisKKwkJdG1wID0gcGNpX2Rldl9nZXQocGNp X3Vwc3RyZWFtX2JyaWRnZShhYSkpOworCQlwY2lfZGV2X3B1dChhYSk7CisJCWFhID0gdG1wOwor CisJCWRpc3RfYSsrOworCX0KKworCWRpc3RfYSA9IC0xOworCWRpc3RfYiA9IDA7CisKK3B1dF9h bmRfcmV0dXJuOgorCXBjaV9kZXZfcHV0KGJiKTsKKwlwY2lfZGV2X3B1dChhYSk7CisKKwlyZXR1 cm4gZGlzdF9hICsgZGlzdF9iOworfQorCitzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQgeworCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcGNpX2RldiAqY2xpZW50OworCXN0cnVjdCBw Y2lfZGV2ICpwcm92aWRlcjsKK307CisKKy8qKgorICogcGNpX3AycGRtYV9hZGRfY2xpZW50IC0g YWxsb2NhdGUgYSBuZXcgZWxlbWVudCBpbiBhIGNsaWVudCBkZXZpY2UgbGlzdAorICogQGhlYWQ6 IGxpc3QgaGVhZCBvZiBwMnBkbWEgY2xpZW50cworICogQGRldjogZGV2aWNlIHRvIGFkZCB0byB0 aGUgbGlzdAorICoKKyAqIFRoaXMgYWRkcyBAZGV2IHRvIGEgbGlzdCBvZiBjbGllbnRzIHVzZWQg YnkgYSBwMnBkbWEgZGV2aWNlLgorICogVGhpcyBsaXN0IHNob3VsZCBiZSBwYXNzZWQgdG8gcGNp X3AycG1lbV9maW5kKCkuIE9uY2UgcGNpX3AycG1lbV9maW5kKCkgaGFzCisgKiBiZWVuIGNhbGxl ZCBzdWNjZXNzZnVsbHksIHRoZSBsaXN0IHdpbGwgYmUgYm91bmQgdG8gYSBzcGVjaWZpYyBwMnBk bWEKKyAqIGRldmljZSBhbmQgbmV3IGNsaWVudHMgY2FuIG9ubHkgYmUgYWRkZWQgdG8gdGhlIGxp c3QgaWYgdGhleSBhcmUKKyAqIHN1cHBvcnRlZCBieSB0aGF0IHAycGRtYSBkZXZpY2UuCisgKgor ICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBoYXZlIGEgbG9jayB3aGljaCBwcm90ZWN0cyBA aGVhZCBhcyBuZWNlc3NhcnkKKyAqIHNvIHRoYXQgbm9uZSBvZiB0aGUgcGNpX3AycCBmdW5jdGlv bnMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKKyAqIG9uIHRoYXQgbGlzdC4KKyAqCisgKiBS ZXR1cm5zIDAgaWYgdGhlIGNsaWVudCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICovCitpbnQg cGNpX3AycGRtYV9hZGRfY2xpZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQgKml0ZW0sICpuZXdfaXRlbTsK KwlzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIgPSBOVUxMOworCXN0cnVjdCBwY2lfZGV2ICpjbGll bnQ7CisJaW50IHJldDsKKworCWlmIChJU19FTkFCTEVEKENPTkZJR19ETUFfVklSVF9PUFMpICYm IGRldi0+ZG1hX29wcyA9PSAmZG1hX3ZpcnRfb3BzKSB7CisJCWRldl93YXJuKGRldiwgImNhbm5v dCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgRE1BIGJlY2F1c2UgdGhlIGRyaXZlciBtYWtlcyB1 c2Ugb2YgZG1hX3ZpcnRfb3BzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisKKwljbGll bnQgPSBmaW5kX3BhcmVudF9wY2lfZGV2KGRldik7CisJaWYgKCFjbGllbnQpIHsKKwkJZGV2X3dh cm4oZGV2LCAiY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciBETUEgYXMgaXQgaXMgbm90 IGEgUENJIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWl0ZW0gPSBsaXN0 X2ZpcnN0X2VudHJ5X29yX251bGwoaGVhZCwgc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50LCBsaXN0 KTsKKwlpZiAoaXRlbSAmJiBpdGVtLT5wcm92aWRlcikgeworCQlwcm92aWRlciA9IGl0ZW0tPnBy b3ZpZGVyOworCisJCWlmICh1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2UocHJvdmlkZXIsIGNsaWVu dCkgPCAwKSB7CisJCQlkZXZfd2FybihkZXYsICJjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1w ZWVyIERNQSBhcyB0aGUgY2xpZW50IGFuZCBwcm92aWRlciBkbyBub3Qgc2hhcmUgYW4gdXBzdHJl YW0gYnJpZGdlXG4iKTsKKworCQkJcmV0ID0gLUVYREVWOworCQkJZ290byBwdXRfY2xpZW50Owor CQl9CisJfQorCisJbmV3X2l0ZW0gPSBremFsbG9jKHNpemVvZigqbmV3X2l0ZW0pLCBHRlBfS0VS TkVMKTsKKwlpZiAoIW5ld19pdGVtKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcHV0X2Ns aWVudDsKKwl9CisKKwluZXdfaXRlbS0+Y2xpZW50ID0gY2xpZW50OworCW5ld19pdGVtLT5wcm92 aWRlciA9IHBjaV9kZXZfZ2V0KHByb3ZpZGVyKTsKKworCWxpc3RfYWRkX3RhaWwoJm5ld19pdGVt LT5saXN0LCBoZWFkKTsKKworCXJldHVybiAwOworCitwdXRfY2xpZW50OgorCXBjaV9kZXZfcHV0 KGNsaWVudCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFf YWRkX2NsaWVudCk7CisKK3N0YXRpYyB2b2lkIHBjaV9wMnBkbWFfY2xpZW50X2ZyZWUoc3RydWN0 IHBjaV9wMnBkbWFfY2xpZW50ICppdGVtKQoreworCWxpc3RfZGVsKCZpdGVtLT5saXN0KTsKKwlw Y2lfZGV2X3B1dChpdGVtLT5jbGllbnQpOworCXBjaV9kZXZfcHV0KGl0ZW0tPnByb3ZpZGVyKTsK KwlrZnJlZShpdGVtKTsKK30KKworLyoqCisgKiBwY2lfcDJwZG1hX3JlbW92ZV9jbGllbnQgLSBy ZW1vdmUgYW5kIGZyZWUgYSBwMnBkbWEgY2xpZW50CisgKiBAaGVhZDogbGlzdCBoZWFkIG9mIHAy cGRtYSBjbGllbnRzCisgKiBAZGV2OiBkZXZpY2UgdG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QKKyAq CisgKiBUaGlzIHJlbW92ZXMgQGRldiBmcm9tIGEgbGlzdCBvZiBjbGllbnRzIHVzZWQgYnkgYSBw MnBkbWEgZGV2aWNlLgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBoYXZlIGEgbG9jayB3 aGljaCBwcm90ZWN0cyBAaGVhZCBhcyBuZWNlc3NhcnkKKyAqIHNvIHRoYXQgbm9uZSBvZiB0aGUg cGNpX3AycCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKKyAqIG9uIHRoYXQg bGlzdC4KKyAqLwordm9pZCBwY2lfcDJwZG1hX3JlbW92ZV9jbGllbnQoc3RydWN0IGxpc3RfaGVh ZCAqaGVhZCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVu dCAqcG9zLCAqdG1wOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJcGRldiA9IGZpbmRfcGFy ZW50X3BjaV9kZXYoZGV2KTsKKwlpZiAoIXBkZXYpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShwb3MsIHRtcCwgaGVhZCwgbGlzdCkgeworCQlpZiAocG9zLT5jbGllbnQg IT0gcGRldikKKwkJCWNvbnRpbnVlOworCisJCXBjaV9wMnBkbWFfY2xpZW50X2ZyZWUocG9zKTsK Kwl9CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBk bWFfcmVtb3ZlX2NsaWVudCk7CisKKy8qKgorICogcGNpX3AycGRtYV9jbGllbnRfbGlzdF9mcmVl IC0gZnJlZSBhbiBlbnRpcmUgbGlzdCBvZiBwMnBkbWEgY2xpZW50cworICogQGhlYWQ6IGxpc3Qg aGVhZCBvZiBwMnBkbWEgY2xpZW50cworICoKKyAqIFRoaXMgcmVtb3ZlcyBhbGwgZGV2aWNlcyBp biBhIGxpc3Qgb2YgY2xpZW50cyB1c2VkIGJ5IGEgcDJwZG1hIGRldmljZS4KKyAqIFRoZSBjYWxs ZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGxvY2sgd2hpY2ggcHJvdGVjdHMgQGhlYWQgYXMgbmVj ZXNzYXJ5CisgKiBzbyB0aGF0IG5vbmUgb2YgdGhlIHBjaV9wMnBkbWEgZnVuY3Rpb25zIGNhbiBi ZSBjYWxsZWQgY29uY3VycmVudGx5CisgKiBvbiB0aGF0IGxpc3QuCisgKi8KK3ZvaWQgcGNpX3Ay cGRtYV9jbGllbnRfbGlzdF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0 IHBjaV9wMnBkbWFfY2xpZW50ICpwb3MsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocG9zLCB0bXAsIGhlYWQsIGxpc3QpCisJCXBjaV9wMnBkbWFfY2xpZW50X2ZyZWUocG9zKTsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfY2xpZW50X2xpc3RfZnJlZSk7CisKKy8q KgorICogcGNpX3AycGRtYV9kaXN0YW5jZSAtIERldGVybWl2ZSB0aGUgY3VtdWxhdGl2ZSBkaXN0 YW5jZSBiZXR3ZWVuCisgKglhIHAycGRtYSBwcm92aWRlciBhbmQgdGhlIGNsaWVudHMgaW4gdXNl LgorICogQHByb3ZpZGVyOiBwMnBkbWEgcHJvdmlkZXIgdG8gY2hlY2sgYWdhaW5zdCB0aGUgY2xp ZW50IGxpc3QKKyAqIEBjbGllbnRzOiBsaXN0IG9mIGRldmljZXMgdG8gY2hlY2sgKE5VTEwtdGVy bWluYXRlZCkKKyAqCisgKiBSZXR1cm5zIC0xIGlmIGFueSBvZiB0aGUgY2xpZW50cyBhcmUgbm90 IGNvbXBhdGlibGUgKGJlaGluZCB0aGUgc2FtZQorICogcm9vdCBwb3J0IGFzIHRoZSBwcm92aWRl ciksIG90aGVyd2lzZSByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyIHdoZXJlCisgKiB0aGUgbG93 ZXIgbnVtYmVyIGlzIHRoZSBwcmVmZXJyYWJsZSBjaG9pY2UuIChJZiB0aGVyZSdzIG9uZSBjbGll bnQKKyAqIHRoYXQncyB0aGUgc2FtZSBhcyB0aGUgcHJvdmlkZXIgaXQgd2lsbCByZXR1cm4gMCwg d2hpY2ggaXMgYmVzdCBjaG9pY2UpLgorICoKKyAqIEZvciBub3csICJjb21wYXRpYmxlIiBtZWFu cyB0aGUgcHJvdmlkZXIgYW5kIHRoZSBjbGllbnRzIGFyZSBhbGwgYmVoaW5kCisgKiB0aGUgc2Ft ZSBQQ0kgcm9vdCBwb3J0LiBUaGlzIGN1dHMgb3V0IGNhc2VzIHRoYXQgbWF5IHdvcmsgYnV0IGlz IHNhZmVzdAorICogZm9yIHRoZSB1c2VyLiBGdXR1cmUgd29yayBjYW4gZXhwYW5kIHRoaXMgdG8g d2hpdGUtbGlzdCByb290IGNvbXBsZXhlcyB0aGF0CisgKiBjYW4gc2FmZWx5IGZvcndhcmQgYmV0 d2VlbiBlYWNoIHBvcnRzLgorICovCitpbnQgcGNpX3AycGRtYV9kaXN0YW5jZShzdHJ1Y3QgcGNp X2RldiAqcHJvdmlkZXIsIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCit7CisJc3RydWN0IHBj aV9wMnBkbWFfY2xpZW50ICpwb3M7CisJaW50IHJldDsKKwlpbnQgZGlzdGFuY2UgPSAwOworCisJ aWYgKGxpc3RfZW1wdHkoY2xpZW50cykpCisJCXJldHVybiAtMTsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkocG9zLCBjbGllbnRzLCBsaXN0KSB7CisJCXJldCA9IHVwc3RyZWFtX2JyaWRnZV9kaXN0 YW5jZShwcm92aWRlciwgcG9zLT5jbGllbnQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gbm9f bWF0Y2g7CisKKwkJZGlzdGFuY2UgKz0gcmV0OworCX0KKworCXJldCA9IGRpc3RhbmNlOworCitu b19tYXRjaDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9k aXN0YW5jZSk7CisKKy8qKgorICogcGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIgLSBDaGVjayBj b21wYXRpYmlseSAoYXMgcGVyIHBjaV9wMnBkbWFfZGlzdGFuY2UpCisgKglhbmQgYXNzaWduIGEg cHJvdmlkZXIgdG8gYSBsaXN0IG9mIGNsaWVudHMKKyAqIEBwcm92aWRlcjogcDJwZG1hIHByb3Zp ZGVyIHRvIGFzc2lnbiB0byB0aGUgY2xpZW50IGxpc3QKKyAqIEBjbGllbnRzOiBsaXN0IG9mIGRl dmljZXMgdG8gY2hlY2sgKE5VTEwtdGVybWluYXRlZCkKKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlm IGFueSBvZiB0aGUgY2xpZW50cyBhcmUgbm90IGNvbXBhdGlibGUsIHRydWUgaWYgdGhlCisgKiBw cm92aWRlciB3YXMgc3VjY2Vzc2Z1bGx5IGFzc2lnbmVkIHRvIHRoZSBjbGllbnRzLgorICovCiti b29sIHBjaV9wMnBkbWFfYXNzaWduX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwK KwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2Ns aWVudCAqcG9zOworCisJaWYgKHBjaV9wMnBkbWFfZGlzdGFuY2UocHJvdmlkZXIsIGNsaWVudHMp IDwgMCkKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGNsaWVu dHMsIGxpc3QpCisJCXBvcy0+cHJvdmlkZXIgPSBwcm92aWRlcjsKKworCXJldHVybiB0cnVlOwor fQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIpOworCisvKioK KyAqIHBjaV9oYXNfcDJwbWVtIC0gY2hlY2sgaWYgYSBnaXZlbiBQQ0kgZGV2aWNlIGhhcyBwdWJs aXNoZWQgYW55IHAycG1lbQorICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gY2hlY2sKKyAqLworYm9v bCBwY2lfaGFzX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+ cDJwZG1hICYmIHBkZXYtPnAycGRtYS0+cDJwbWVtX3B1Ymxpc2hlZDsKK30KK0VYUE9SVF9TWU1C T0xfR1BMKHBjaV9oYXNfcDJwbWVtKTsKKworLyoqCisgKiBwY2lfcDJwbWVtX2ZpbmQgLSBmaW5k IGEgcGVlci10by1wZWVyIERNQSBtZW1vcnkgZGV2aWNlIGNvbXBhdGlibGUgd2l0aAorICoJdGhl IHNwZWNpZmllZCBsaXN0IG9mIGNsaWVudHMgYW5kIHNob3J0ZXN0IGRpc3RhbmNlIChhcyBkZXRl cm1pbmVkCisgKglieSBwY2lfcDJwbWVtX2RtYSgpKQorICogQGNsaWVudHM6IGxpc3Qgb2YgZGV2 aWNlcyB0byBjaGVjayAoTlVMTC10ZXJtaW5hdGVkKQorICoKKyAqIElmIG11bHRpcGxlIGRldmlj ZXMgYXJlIGJlaGluZCB0aGUgc2FtZSBzd2l0Y2gsIHRoZSBvbmUgImNsb3Nlc3QiIHRvIHRoZQor ICogY2xpZW50IGRldmljZXMgaW4gdXNlIHdpbGwgYmUgY2hvc2VuIGZpcnN0LiAoU28gaWYgb25l IG9mIHRoZSBwcm92aWRlcnMgYXJlCisgKiB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIGNsaWVudHMs IHRoYXQgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIGFoZWFkIG9mIGFueQorICogb3RoZXIgcHJvdmlk ZXJzIHRoYXQgYXJlIHVucmVsYXRlZCkuIElmIG11bHRpcGxlIHByb3ZpZGVycyBhcmUgYW4gZXF1 YWwKKyAqIGRpc3RhbmNlIGF3YXksIG9uZSB3aWxsIGJlIGNob3NlbiBhdCByYW5kb20uCisgKgor ICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugd2l0aCBhIHJlZmVyZW5jZSB0 YWtlbiAodXNlIHBjaV9kZXZfcHV0CisgKiB0byByZXR1cm4gdGhlIHJlZmVyZW5jZSkgb3IgTlVM TCBpZiBubyBjb21wYXRpYmxlIGRldmljZSBpcyBmb3VuZC4gVGhlCisgKiBmb3VuZCBwcm92aWRl ciB3aWxsIGFsc28gYmUgYXNzaWduZWQgdG8gdGhlIGNsaWVudCBsaXN0LgorICovCitzdHJ1Y3Qg cGNpX2RldiAqcGNpX3AycG1lbV9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCit7CisJ c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAq cG9zOworCWludCBkaXN0YW5jZTsKKwlpbnQgY2xvc2VzdF9kaXN0YW5jZSA9IElOVF9NQVg7CisJ c3RydWN0IHBjaV9kZXYgKipjbG9zZXN0X3BkZXZzOworCWludCBkZXZfY250ID0gMDsKKwljb25z dCBpbnQgbWF4X2RldnMgPSBQQUdFX1NJWkUgLyBzaXplb2YoKmNsb3Nlc3RfcGRldnMpOworCWlu dCBpOworCisJY2xvc2VzdF9wZGV2cyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsK KworCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQs IHBkZXYpKSkgeworCQlpZiAoIXBjaV9oYXNfcDJwbWVtKHBkZXYpKQorCQkJY29udGludWU7CisK KwkJZGlzdGFuY2UgPSBwY2lfcDJwZG1hX2Rpc3RhbmNlKHBkZXYsIGNsaWVudHMpOworCQlpZiAo ZGlzdGFuY2UgPCAwIHx8IGRpc3RhbmNlID4gY2xvc2VzdF9kaXN0YW5jZSkKKwkJCWNvbnRpbnVl OworCisJCWlmIChkaXN0YW5jZSA9PSBjbG9zZXN0X2Rpc3RhbmNlICYmIGRldl9jbnQgPj0gbWF4 X2RldnMpCisJCQljb250aW51ZTsKKworCQlpZiAoZGlzdGFuY2UgPCBjbG9zZXN0X2Rpc3RhbmNl KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2X2NudDsgaSsrKQorCQkJCXBjaV9kZXZfcHV0KGNs b3Nlc3RfcGRldnNbaV0pOworCisJCQlkZXZfY250ID0gMDsKKwkJCWNsb3Nlc3RfZGlzdGFuY2Ug PSBkaXN0YW5jZTsKKwkJfQorCisJCWNsb3Nlc3RfcGRldnNbZGV2X2NudCsrXSA9IHBjaV9kZXZf Z2V0KHBkZXYpOworCX0KKworCWlmIChkZXZfY250KQorCQlwZGV2ID0gcGNpX2Rldl9nZXQoY2xv c2VzdF9wZGV2c1twcmFuZG9tX3UzMl9tYXgoZGV2X2NudCldKTsKKworCWZvciAoaSA9IDA7IGkg PCBkZXZfY250OyBpKyspCisJCXBjaV9kZXZfcHV0KGNsb3Nlc3RfcGRldnNbaV0pOworCisJaWYg KHBkZXYpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBjbGllbnRzLCBsaXN0KQorCQkJcG9z LT5wcm92aWRlciA9IHBkZXY7CisKKwlrZnJlZShjbG9zZXN0X3BkZXZzKTsKKwlyZXR1cm4gcGRl djsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBtZW1fZmluZCk7CisKKy8qKgorICogcGNp X2FsbG9jX3AycF9tZW0gLSBhbGxvY2F0ZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeQorICogQHBk ZXY6IHRoZSBkZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAqIEBzaXplOiBudW1iZXIg b2YgYnl0ZXMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5 IG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK3ZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBj aV9kZXYgKnBkZXYsIHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCWlmICh1bmxpa2Vs eSghcGRldi0+cDJwZG1hKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodW5saWtlbHkoIXBlcmNw dV9yZWZfdHJ5Z2V0X2xpdmUoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZikpKQorCQlyZXR1cm4g TlVMTDsKKworCXJldCA9ICh2b2lkICopZ2VuX3Bvb2xfYWxsb2MocGRldi0+cDJwZG1hLT5wb29s LCBzaXplKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkKKwkJcGVyY3B1X3JlZl9wdXQoJnBkZXYt PnAycGRtYS0+ZGV2bWFwX3JlZik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9H UEwocGNpX2FsbG9jX3AycG1lbSk7CisKKy8qKgorICogcGNpX2ZyZWVfcDJwbWVtIC0gYWxsb2Nh dGUgcGVlci10by1wZWVyIERNQSBtZW1vcnkKKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRoZSBtZW1v cnkgd2FzIGFsbG9jYXRlZCBmcm9tCisgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRo YXQgd2FzIGFsbG9jYXRlZAorICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyBhbGxv Y2F0ZWQKKyAqLwordm9pZCBwY2lfZnJlZV9wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZv aWQgKmFkZHIsIHNpemVfdCBzaXplKQoreworCWdlbl9wb29sX2ZyZWUocGRldi0+cDJwZG1hLT5w b29sLCAodWludHB0cl90KWFkZHIsIHNpemUpOworCXBlcmNwdV9yZWZfcHV0KCZwZGV2LT5wMnBk bWEtPmRldm1hcF9yZWYpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZyZWVfcDJwbWVtKTsK KworLyoqCisgKiBwY2lfdmlydF90b19idXMgLSByZXR1cm4gdGhlIFBDSSBidXMgYWRkcmVzcyBm b3IgYSBnaXZlbiB2aXJ0dWFsCisgKglhZGRyZXNzIG9idGFpbmVkIHdpdGggcGNpX2FsbG9jX3Ay cG1lbSgpCisgKiBAcGRldjogdGhlIGRldmljZSB0aGUgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgZnJv bQorICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAq LworcGNpX2J1c19hZGRyX3QgcGNpX3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAq cGRldiwgdm9pZCAqYWRkcikKK3sKKwlpZiAoIWFkZHIpCisJCXJldHVybiAwOworCWlmICghcGRl di0+cDJwZG1hKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogTm90ZTogd2hlbiB3ZSBhZGRlZCB0 aGUgbWVtb3J5IHRvIHRoZSBwb29sIHdlIHVzZWQgdGhlIFBDSQorCSAqIGJ1cyBhZGRyZXNzIGFz IHRoZSBwaHlzaWNhbCBhZGRyZXNzLiBTbyBnZW5fcG9vbF92aXJ0X3RvX3BoeXMoKQorCSAqIGFj dHVhbGx5IHJldHVybnMgdGhlIGJ1cyBhZGRyZXNzIGRlc3BpdGUgdGhlIG1pc2xlYWRpbmcgbmFt ZS4KKwkgKi8KKwlyZXR1cm4gZ2VuX3Bvb2xfdmlydF90b19waHlzKHBkZXYtPnAycGRtYS0+cG9v bCwgKHVuc2lnbmVkIGxvbmcpYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwbWVt X3ZpcnRfdG9fYnVzKTsKKworLyoqCisgKiBwY2lfcDJwbWVtX2FsbG9jX3NnbCAtIGFsbG9jYXRl IHBlZXItdG8tcGVlciBETUEgbWVtb3J5IGluIGEgc2NhdHRlcmxpc3QKKyAqIEBwZGV2OiB0aGUg ZGV2aWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCisgKiBAc2dsOiB0aGUgYWxsb2NhdGVkIHNj YXR0ZXJsaXN0CisgKiBAbmVudHM6IHRoZSBudW1iZXIgb2YgU0cgZW50cmllcyBpbiB0aGUgbGlz dAorICogQGxlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCisgKgorICogUmV0dXJu cyAwIG9uIHN1Y2Nlc3MKKyAqLworc3RydWN0IHNjYXR0ZXJsaXN0ICpwY2lfcDJwbWVtX2FsbG9j X3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJIHVuc2lnbmVkIGludCAqbmVudHMsIHUz MiBsZW5ndGgpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl2b2lkICphZGRyOworCisJ c2cgPSBremFsbG9jKHNpemVvZigqc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNnKQorCQlyZXR1 cm4gTlVMTDsKKworCXNnX2luaXRfdGFibGUoc2csIDEpOworCisJYWRkciA9IHBjaV9hbGxvY19w MnBtZW0ocGRldiwgbGVuZ3RoKTsKKwlpZiAoIWFkZHIpCisJCWdvdG8gb3V0X2ZyZWVfc2c7CisK KwlzZ19zZXRfYnVmKHNnLCBhZGRyLCBsZW5ndGgpOworCSpuZW50cyA9IDE7CisJcmV0dXJuIHNn OworCitvdXRfZnJlZV9zZzoKKwlrZnJlZShzZyk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChwY2lfcDJwbWVtX2FsbG9jX3NnbCk7CisKKy8qKgorICogcGNpX3AycG1lbV9m cmVlX3NnbCAtIGZyZWUgYSBzY2F0dGVybGlzdCBhbGxvY2F0ZWQgYnkgcGNpX3AycG1lbV9hbGxv Y19zZ2woKQorICogQHBkZXY6IHRoZSBkZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAq IEBzZ2w6IHRoZSBhbGxvY2F0ZWQgc2NhdHRlcmxpc3QKKyAqIEBuZW50czogdGhlIG51bWJlciBv ZiBTRyBlbnRyaWVzIGluIHRoZSBsaXN0CisgKi8KK3ZvaWQgcGNpX3AycG1lbV9mcmVlX3NnbChz dHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpCit7CisJc3RydWN0 IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgY291bnQ7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBJ TlRfTUFYLCBjb3VudCkgeworCQlpZiAoIXNnKQorCQkJYnJlYWs7CisKKwkJcGNpX2ZyZWVfcDJw bWVtKHBkZXYsIHNnX3ZpcnQoc2cpLCBzZy0+bGVuZ3RoKTsKKwl9CisJa2ZyZWUoc2dsKTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBtZW1fZnJlZV9zZ2wpOworCisvKioKKyAqIHBjaV9w MnBtZW1fcHVibGlzaCAtIHB1Ymxpc2ggdGhlIHBlZXItdG8tcGVlciBETUEgbWVtb3J5IGZvciB1 c2UgYnkKKyAqCW90aGVyIGRldmljZXMgd2l0aCBwY2lfcDJwbWVtX2ZpbmQoKQorICogQHBkZXY6 IHRoZSBkZXZpY2Ugd2l0aCBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSB0byBwdWJsaXNoCisgKiBA cHVibGlzaDogc2V0IHRvIHRydWUgdG8gcHVibGlzaCB0aGUgbWVtb3J5LCBmYWxzZSB0byB1bnB1 Ymxpc2ggaXQKKyAqCisgKiBQdWJsaXNoZWQgbWVtb3J5IGNhbiBiZSB1c2VkIGJ5IG90aGVyIFBD SSBkZXZpY2UgZHJpdmVycyBmb3IKKyAqIHBlZXItMi1wZWVyIERNQSBvcGVyYXRpb25zLiBOb24t cHVibGlzaGVkIG1lbW9yeSBpcyByZXNlcnZlZCBmb3IKKyAqIGV4bHVzaXZlIHVzZSBvZiB0aGUg ZGV2aWNlIGRyaXZlciB0aGF0IHJlZ2lzdGVycyB0aGUgcGVlci10by1wZWVyCisgKiBtZW1vcnku CisgKi8KK3ZvaWQgcGNpX3AycG1lbV9wdWJsaXNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29s IHB1Ymxpc2gpCit7CisJaWYgKHB1Ymxpc2ggJiYgIXBkZXYtPnAycGRtYSkKKwkJcmV0dXJuOwor CisJcGRldi0+cDJwZG1hLT5wMnBtZW1fcHVibGlzaGVkID0gcHVibGlzaDsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKHBjaV9wMnBtZW1fcHVibGlzaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L21lbXJlbWFwLmggYi9pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgKaW5kZXggN2I0ODk5YzA2ZjQ5 Li45ZTkwN2MzMzhhNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaAorKysg Yi9pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgKQEAgLTUzLDExICs1MywxNiBAQCBzdHJ1Y3Qgdm1l bV9hbHRtYXAgewogICogZHJpdmVyIGNhbiBob3RwbHVnIHRoZSBkZXZpY2UgbWVtb3J5IHVzaW5n IFpPTkVfREVWSUNFIGFuZCB3aXRoIHRoYXQgbWVtb3J5CiAgKiB0eXBlLiBBbnkgcGFnZSBvZiBh IHByb2Nlc3MgY2FuIGJlIG1pZ3JhdGVkIHRvIHN1Y2ggbWVtb3J5LiBIb3dldmVyIG5vIG9uZQog ICogc2hvdWxkIGJlIGFsbG93IHRvIHBpbiBzdWNoIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBhbHdh eXMgYmUgZXZpY3RlZC4KKyAqCisgKiBNRU1PUllfREVWSUNFX1BDSV9QMlBETUE6CisgKiBEZXZp Y2UgbWVtb3J5IHJlc2lkaW5nIGluIGEgUENJIEJBUiBpbnRlbmRlZCBmb3IgdXNlIHdpdGggUGVl ci10by1QZWVyCisgKiB0cmFuc2FjdGlvbnMuCiAgKi8KIGVudW0gbWVtb3J5X3R5cGUgewogCU1F TU9SWV9ERVZJQ0VfSE9TVCA9IDAsCiAJTUVNT1JZX0RFVklDRV9QUklWQVRFLAogCU1FTU9SWV9E RVZJQ0VfUFVCTElDLAorCU1FTU9SWV9ERVZJQ0VfUENJX1AyUERNQSwKIH07CiAKIC8qCkBAIC0x NjEsNiArMTY2LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWVtX2FsdG1hcF9mcmVlKHN0cnVj dCB2bWVtX2FsdG1hcCAqYWx0bWFwLAogfQogI2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSAq LwogCisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wY2lf cDJwZG1hX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIGlzX3pvbmVf ZGV2aWNlX3BhZ2UocGFnZSkgJiYKKwkJcGFnZS0+cGdtYXAtPnR5cGUgPT0gTUVNT1JZX0RFVklD RV9QQ0lfUDJQRE1BOworfQorI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi8KK3N0YXRpYyBp bmxpbmUgYm9vbCBpc19wY2lfcDJwZG1hX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCit7 CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfUDJQRE1BICovCisKICNp ZiBkZWZpbmVkKENPTkZJR19ERVZJQ0VfUFJJVkFURSkgfHwgZGVmaW5lZChDT05GSUdfREVWSUNF X1BVQkxJQykKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZV9wYWdlKGNvbnN0 IHN0cnVjdCBwYWdlICpwYWdlKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktcDJw ZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjgwZTkzMWNiMTIzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvbGludXgvcGNpLXAycGRtYS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFBDSSBQZWVyIDIgUGVlciBETUEgc3VwcG9y dC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgTWljcm9zZW1pIENvcnBvcmF0aW9uCisgKiBDb3B5cmln aHQgKGMpIDIwMTcsIENocmlzdG9waCBIZWxsd2lnCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVp ZGV0aWNvbSBJbmMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BDSV9QMlBETUFfSAorI2Rl ZmluZSBfTElOVVhfUENJX1AyUERNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworc3Ry dWN0IGJsb2NrX2RldmljZTsKK3N0cnVjdCBzY2F0dGVybGlzdDsKKworI2lmZGVmIENPTkZJR19Q Q0lfUDJQRE1BCitpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIGludCBiYXIsIHNpemVfdCBzaXplLAorCQl1NjQgb2Zmc2V0KTsKK2ludCBwY2lfcDJwZG1h X2FkZF9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRldmljZSAqZGV2KTsK K3ZvaWQgcGNpX3AycGRtYV9yZW1vdmVfY2xpZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0 cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIHBjaV9wMnBkbWFfY2xpZW50X2xpc3RfZnJlZShzdHJ1 Y3QgbGlzdF9oZWFkICpoZWFkKTsKK2ludCBwY2lfcDJwZG1hX2Rpc3RhbmNlKHN0cnVjdCBwY2lf ZGV2ICpwcm92aWRlciwgc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cyk7Citib29sIHBjaV9wMnBk bWFfYXNzaWduX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKKwkJCQlzdHJ1Y3Qg bGlzdF9oZWFkICpjbGllbnRzKTsKK2Jvb2wgcGNpX2hhc19wMnBtZW0oc3RydWN0IHBjaV9kZXYg KnBkZXYpOworc3RydWN0IHBjaV9kZXYgKnBjaV9wMnBtZW1fZmluZChzdHJ1Y3QgbGlzdF9oZWFk ICpjbGllbnRzKTsKK3ZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYs IHNpemVfdCBzaXplKTsKK3ZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7CitwY2lfYnVzX2FkZHJfdCBwY2lfcDJwbWVtX3Zp cnRfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRyKTsKK3N0cnVjdCBzY2F0 dGVybGlzdCAqcGNpX3AycG1lbV9hbGxvY19zZ2woc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJ CSB1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIgbGVuZ3RoKTsKK3ZvaWQgcGNpX3AycG1lbV9mcmVl X3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpOwordm9p ZCBwY2lfcDJwbWVtX3B1Ymxpc2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgcHVibGlzaCk7 CisjZWxzZSAvKiBDT05GSUdfUENJX1AyUERNQSAqLworc3RhdGljIGlubGluZSBpbnQgcGNpX3Ay cGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsCisJCXNpemVf dCBzaXplLCB1NjQgb2Zmc2V0KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQg cGNpX3AycGRtYV9hZGRfY2xpZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCXN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJw ZG1hX3JlbW92ZV9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKKwkJc3RydWN0IGRldmlj ZSAqZGV2KQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBkbWFfY2xpZW50X2xpc3Rf ZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworfQorc3RhdGljIGlubGluZSBpbnQgcGNp X3AycGRtYV9kaXN0YW5jZShzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIsCisJCQkJICAgICAgc3Ry dWN0IGxpc3RfaGVhZCAqY2xpZW50cykKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5l IGJvb2wgcGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVy LAorCQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKQoreworCXJldHVybiBmYWxz ZTsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfaGFzX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAq cGRldikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2 ICpwY2lfcDJwbWVtX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cykKK3sKKwlyZXR1cm4g TlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNp X2RldiAqcGRldiwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5s aW5lIHZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRy LAorCQlzaXplX3Qgc2l6ZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgcGNpX2J1c19hZGRyX3QgcGNp X3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCSAgICB2b2lk ICphZGRyKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKiBwY2lfcDJwbWVtX2FsbG9jX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJdW5zaWdu ZWQgaW50ICpuZW50cywgdTMyIGxlbmd0aCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBp bmxpbmUgdm9pZCBwY2lfcDJwbWVtX2ZyZWVfc2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJw bWVtX3B1Ymxpc2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wgcHVibGlzaCkKK3sKK30KKyNl bmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqLworI2VuZGlmIC8qIF9MSU5VWF9QQ0lfUDJQX0gg Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5o CmluZGV4IDczMTc4YTJmY2VlMC4uMDA1ZmVhZWE4ZGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xp bnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTI3Nyw2ICsyNzcsNyBAQCBz dHJ1Y3QgcGNpZV9saW5rX3N0YXRlOwogc3RydWN0IHBjaV92cGQ7CiBzdHJ1Y3QgcGNpX3NyaW92 Owogc3RydWN0IHBjaV9hdHM7CitzdHJ1Y3QgcGNpX3AycGRtYTsKIAogLyogVGhlIHBjaV9kZXYg c3RydWN0dXJlIGRlc2NyaWJlcyBQQ0kgZGV2aWNlcyAqLwogc3RydWN0IHBjaV9kZXYgewpAQCAt NDMwLDYgKzQzMSw5IEBAIHN0cnVjdCBwY2lfZGV2IHsKICNpZmRlZiBDT05GSUdfUENJX1BBU0lE CiAJdTE2CQlwYXNpZF9mZWF0dXJlczsKICNlbmRpZgorI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1B CisJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKKyNlbmRpZgogCXBoeXNfYWRkcl90CXJvbTsJ CS8qIFBoeXNpY2FsIGFkZHJlc3MgaWYgbm90IGZyb20gQkFSICovCiAJc2l6ZV90CQlyb21sZW47 CQkvKiBMZW5ndGggaWYgbm90IGZyb20gQkFSICovCiAJY2hhcgkJKmRyaXZlcl9vdmVycmlkZTsg LyogRHJpdmVyIG5hbWUgdG8gZm9yY2UgYSBtYXRjaCAqLwotLSAKMi4xMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1udmRpbW0gbWFpbGlu ZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1udmRpbW0K