From mboxrd@z Thu Jan 1 00:00:00 1970 From: Logan Gunthorpe Subject: [PATCH v7 01/13] PCI/P2PDMA: Support peer-to-peer memory Date: Tue, 25 Sep 2018 10:22:19 -0600 Message-ID: <20180925162231.4354-2-logang@deltatee.com> References: <20180925162231.4354-1-logang@deltatee.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180925162231.4354-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 , =?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 IGEgc21hbGwgQ1BVIGNvbm5lY3RlZCB0byBhIFBDSWUgc3dpdGNoIGJ5IGEgc21hbGwgbnVtYmVy IG9mIGxhbmVzCndoaWNoIHdvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2YgbGFuZXMgYXZhaWxh YmxlIHRvIGNvbm5lY3QgdG8gTlZNZQpkZXZpY2VzLgoKVGhlIGNvZGUgaXMgZGVzaWduZWQgdG8g b25seSB1dGlsaXplIHRoZSBwMnBtZW0gZGV2aWNlIGlmIGFsbCB0aGUgZGV2aWNlcwppbnZvbHZl ZCBpbiBhIHRyYW5zZmVyIGFyZSBiZWhpbmQgdGhlIHNhbWUgUENJIGJyaWRnZS4gVGhpcyBpcyBi ZWNhdXNlIHdlCmhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBwZWVyLXRvLXBlZXIgcm91 dGluZyBiZXR3ZWVuIFBDSWUgUm9vdCBQb3J0cwppcyBzdXBwb3J0ZWQgKFBDSWUgcjQuMCwgc2Vj IDEuMy4xKS4gQWRkaXRpb25hbGx5LCB0aGUgYmVuZWZpdHMgb2YgUDJQCnRyYW5zZmVycyB0aGF0 IGdvIHRocm91Z2ggdGhlIFJDIGlzIGxpbWl0ZWQgdG8gb25seSByZWR1Y2luZyBEUkFNIHVzYWdl CmFuZCwgaW4gc29tZSBjYXNlcywgY29kaW5nIGNvbnZlbmllbmNlLiBUaGUgUENJLVNJRyBtYXkg YmUgZXhwbG9yaW5nCmFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGJpdCB0byBhZHZlcnRpc2Ugd2hl dGhlciB0aGlzIGlzIHBvc3NpYmxlIGZvcgpmdXR1cmUgaGFyZHdhcmUuCgpUaGlzIGNvbW1pdCBp bmNsdWRlcyBzaWduaWZpY2FudCByZXdvcmsgYW5kIGZlZWRiYWNrIGZyb20gQ2hyaXN0b3BoCkhl bGx3aWcuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KU2ln bmVkLW9mZi1ieTogTG9nYW4gR3VudGhvcnBlIDxsb2dhbmdAZGVsdGF0ZWUuY29tPgpBY2tlZC1i eTogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4gICMgUENJIHBpZWNlcwotLS0K IGRyaXZlcnMvcGNpL0tjb25maWcgICAgICAgIHwgIDE3ICsKIGRyaXZlcnMvcGNpL01ha2VmaWxl ICAgICAgIHwgICAxICsKIGRyaXZlcnMvcGNpL3AycGRtYS5jICAgICAgIHwgNzY0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvbWVtcmVtYXAuaCAg IHwgICA1ICsKIGluY2x1ZGUvbGludXgvbW0uaCAgICAgICAgIHwgIDE4ICsKIGluY2x1ZGUvbGlu dXgvcGNpLXAycGRtYS5oIHwgMTAxICsrKysrCiBpbmNsdWRlL2xpbnV4L3BjaS5oICAgICAgICB8 ICAgNCArCiA3IGZpbGVzIGNoYW5nZWQsIDkxMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9wY2kvcDJwZG1hLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xp bnV4L3BjaS1wMnBkbWEuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2 ZXJzL3BjaS9LY29uZmlnCmluZGV4IDU2ZmY4ZjZkMzFmYy4uZGViNjhiZTRmZGFjIDEwMDY0NAot LS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTEz Miw2ICsxMzIsMjMgQEAgY29uZmlnIFBDSV9QQVNJRAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgog Citjb25maWcgUENJX1AyUERNQQorCWJvb2wgIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3Vw cG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBaT05FX0RFVklDRQorCXNlbGVjdCBHRU5FUklDX0FM TE9DQVRPUgorCWhlbHAKKwkgIEVuYWJsZdGVIGRyaXZlcnMgdG8gZG8gUENJIHBlZXItdG8tcGVl ciB0cmFuc2FjdGlvbnMgdG8gYW5kIGZyb20KKwkgIEJBUnMgdGhhdCBhcmUgZXhwb3NlZCBpbiBv dGhlciBkZXZpY2VzIHRoYXQgYXJlIHRoZSBwYXJ0IG9mCisJICB0aGUgaGllcmFyY2h5IHdoZXJl IHBlZXItdG8tcGVlciBETUEgaXMgZ3VhcmFudGVlZCBieSB0aGUgUENJCisJICBzcGVjaWZpY2F0 aW9uIHRvIHdvcmsgKGllLiBhbnl0aGluZyBiZWxvdyBhIHNpbmdsZSBQQ0kgYnJpZGdlKS4KKwor CSAgTWFueSBQQ0llIHJvb3QgY29tcGxleGVzIGRvIG5vdCBzdXBwb3J0IFAyUCB0cmFuc2FjdGlv bnMgYW5kCisJICBpdCdzIGhhcmQgdG8gdGVsbCB3aGljaCBzdXBwb3J0IGl0IGF0IGFsbCwgc28g YXQgdGhpcyB0aW1lLAorCSAgUDJQIERNQSB0cmFuc2F0aW9ucyBtdXN0IGJlIGJldHdlZW4gZGV2 aWNlcyBiZWhpbmQgdGhlIHNhbWUgcm9vdAorCSAgcG9ydC4KKworCSAgSWYgdW5zdXJlLCBzYXkg Ti4KKwogY29uZmlnIFBDSV9MQUJFTAogCWRlZl9ib29sIHkgaWYgKERNSSB8fCBBQ1BJKQogCWRl cGVuZHMgb24gUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9NYWtlZmlsZSBiL2RyaXZlcnMv cGNpL01ha2VmaWxlCmluZGV4IDFiMmNmZTUxZThkNy4uODVmNGE3MDNiMmJlIDEwMDY0NAotLS0g YS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMjYs NiArMjYsNyBAQCBvYmotJChDT05GSUdfUENJX1NZU0NBTEwpCSs9IHN5c2NhbGwubwogb2JqLSQo Q09ORklHX1BDSV9TVFVCKQkJKz0gcGNpLXN0dWIubwogb2JqLSQoQ09ORklHX1BDSV9QRl9TVFVC KQkrPSBwY2ktcGYtc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX0VDQU0pCQkrPSBlY2FtLm8KK29i ai0kKENPTkZJR19QQ0lfUDJQRE1BKQkrPSBwMnBkbWEubwogb2JqLSQoQ09ORklHX1hFTl9QQ0lE RVZfRlJPTlRFTkQpICs9IHhlbi1wY2lmcm9udC5vCiAKICMgRW5kcG9pbnQgbGlicmFyeSBtdXN0 IGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNp L3AycGRtYS5jIGIvZHJpdmVycy9wY2kvcDJwZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5kOTYxNjUyMmMxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L3BjaS9wMnBkbWEuYwpAQCAtMCwwICsxLDc2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qCisgKiBQQ0kgUGVlciAyIFBlZXIgRE1BIHN1cHBvcnQuCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIExvZ2FuIEd1bnRob3JwZQorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMTcsIE1pY3Jvc2VtaSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDE3 LCBDaHJpc3RvcGggSGVsbHdpZworICogQ29weXJpZ2h0IChjKSAyMDE4LCBFaWRldGljb20gSW5j LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2ktcDJwZG1hLmg+CisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFs bG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcmVtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJj cHUtcmVmY291bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51 eC9zZXFfYnVmLmg+CisKK3N0cnVjdCBwY2lfcDJwZG1hIHsKKwlzdHJ1Y3QgcGVyY3B1X3JlZiBk ZXZtYXBfcmVmOworCXN0cnVjdCBjb21wbGV0aW9uIGRldm1hcF9yZWZfZG9uZTsKKwlzdHJ1Y3Qg Z2VuX3Bvb2wgKnBvb2w7CisJYm9vbCBwMnBtZW1fcHVibGlzaGVkOworfTsKKworc3RhdGljIHZv aWQgcGNpX3AycGRtYV9wZXJjcHVfcmVsZWFzZShzdHJ1Y3QgcGVyY3B1X3JlZiAqcmVmKQorewor CXN0cnVjdCBwY2lfcDJwZG1hICpwMnAgPQorCQljb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgcGNp X3AycGRtYSwgZGV2bWFwX3JlZik7CisKKwljb21wbGV0ZV9hbGwoJnAycC0+ZGV2bWFwX3JlZl9k b25lKTsKK30KKworc3RhdGljIHZvaWQgcGNpX3AycGRtYV9wZXJjcHVfa2lsbCh2b2lkICpkYXRh KQoreworCXN0cnVjdCBwZXJjcHVfcmVmICpyZWYgPSBkYXRhOworCisJaWYgKHBlcmNwdV9yZWZf aXNfZHlpbmcocmVmKSkKKwkJcmV0dXJuOworCisJcGVyY3B1X3JlZl9raWxsKHJlZik7Cit9CisK K3N0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBw Y2lfZGV2ICpwZGV2ID0gZGF0YTsKKworCWlmICghcGRldi0+cDJwZG1hKQorCQlyZXR1cm47CisK Kwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWZfZG9uZSk7CisJ cGVyY3B1X3JlZl9leGl0KCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYpOworCisJZ2VuX3Bvb2xf ZGVzdHJveShwZGV2LT5wMnBkbWEtPnBvb2wpOworCXBkZXYtPnAycGRtYSA9IE5VTEw7Cit9CisK K3N0YXRpYyBpbnQgcGNpX3AycGRtYV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlp bnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7CisKKwlwMnAgPSBk ZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwMnApLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXAycCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwMnAtPnBvb2wgPSBnZW5fcG9vbF9jcmVhdGUo UEFHRV9TSElGVCwgZGV2X3RvX25vZGUoJnBkZXYtPmRldikpOworCWlmICghcDJwLT5wb29sKQor CQlnb3RvIG91dDsKKworCWluaXRfY29tcGxldGlvbigmcDJwLT5kZXZtYXBfcmVmX2RvbmUpOwor CWVycm9yID0gcGVyY3B1X3JlZl9pbml0KCZwMnAtPmRldm1hcF9yZWYsCisJCQlwY2lfcDJwZG1h X3BlcmNwdV9yZWxlYXNlLCAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0 X3Bvb2xfZGVzdHJveTsKKworCXBlcmNwdV9yZWZfc3dpdGNoX3RvX2F0b21pY19zeW5jKCZwMnAt PmRldm1hcF9yZWYpOworCisJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJnBkZXYt PmRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0 X3Bvb2xfZGVzdHJveTsKKworCXBkZXYtPnAycGRtYSA9IHAycDsKKworCXJldHVybiAwOworCitv dXRfcG9vbF9kZXN0cm95OgorCWdlbl9wb29sX2Rlc3Ryb3kocDJwLT5wb29sKTsKK291dDoKKwlk ZXZtX2tmcmVlKCZwZGV2LT5kZXYsIHAycCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAq IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlIC0gYWRkIG1lbW9yeSBmb3IgdXNlIGFzIHAycCBtZW1v cnkKKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFkZCB0aGUgbWVtb3J5IHRvCisgKiBAYmFyOiBQ Q0kgQkFSIHRvIGFkZAorICogQHNpemU6IHNpemUgb2YgdGhlIG1lbW9yeSB0byBhZGQsIG1heSBi ZSB6ZXJvIHRvIHVzZSB0aGUgd2hvbGUgQkFSCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW50byB0aGUg UENJIEJBUgorICoKKyAqIFRoZSBtZW1vcnkgd2lsbCBiZSBnaXZlbiBaT05FX0RFVklDRSBzdHJ1 Y3QgcGFnZXMgc28gdGhhdCBpdCBtYXkKKyAqIGJlIHVzZWQgd2l0aCBhbnkgRE1BIHJlcXVlc3Qu CisgKi8KK2ludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwg aW50IGJhciwgc2l6ZV90IHNpemUsCisJCQkgICAgdTY0IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGV2 X3BhZ2VtYXAgKnBnbWFwOworCXZvaWQgKmFkZHI7CisJaW50IGVycm9yOworCisJaWYgKCEocGNp X3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJiBJT1JFU09VUkNFX01FTSkpCisJCXJldHVybiAt RUlOVkFMOworCisJaWYgKG9mZnNldCA+PSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpCisJ CXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzaXplKQorCQlzaXplID0gcGNpX3Jlc291cmNlX2xl bihwZGV2LCBiYXIpIC0gb2Zmc2V0OworCisJaWYgKHNpemUgKyBvZmZzZXQgPiBwY2lfcmVzb3Vy Y2VfbGVuKHBkZXYsIGJhcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwZGV2LT5wMnBk bWEpIHsKKwkJZXJyb3IgPSBwY2lfcDJwZG1hX3NldHVwKHBkZXYpOworCQlpZiAoZXJyb3IpCisJ CQlyZXR1cm4gZXJyb3I7CisJfQorCisJcGdtYXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCpwZ21hcCksIEdGUF9LRVJORUwpOworCWlmICghcGdtYXApCisJCXJldHVybiAtRU5P TUVNOworCisJcGdtYXAtPnJlcy5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIp ICsgb2Zmc2V0OworCXBnbWFwLT5yZXMuZW5kID0gcGdtYXAtPnJlcy5zdGFydCArIHNpemUgLSAx OworCXBnbWFwLT5yZXMuZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKTsKKwlw Z21hcC0+cmVmID0gJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZjsKKwlwZ21hcC0+dHlwZSA9IE1F TU9SWV9ERVZJQ0VfUENJX1AyUERNQTsKKworCWFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKCZw ZGV2LT5kZXYsIHBnbWFwKTsKKwlpZiAoSVNfRVJSKGFkZHIpKSB7CisJCWVycm9yID0gUFRSX0VS UihhZGRyKTsKKwkJZ290byBwZ21hcF9mcmVlOworCX0KKworCWVycm9yID0gZ2VuX3Bvb2xfYWRk X3ZpcnQocGRldi0+cDJwZG1hLT5wb29sLCAodW5zaWduZWQgbG9uZylhZGRyLAorCQkJcGNpX2J1 c19hZGRyZXNzKHBkZXYsIGJhcikgKyBvZmZzZXQsCisJCQlyZXNvdXJjZV9zaXplKCZwZ21hcC0+ cmVzKSwgZGV2X3RvX25vZGUoJnBkZXYtPmRldikpOworCWlmIChlcnJvcikKKwkJZ290byBwZ21h cF9mcmVlOworCisJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJnBkZXYtPmRldiwg cGNpX3AycGRtYV9wZXJjcHVfa2lsbCwKKwkJCQkJICAmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVm KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcGdtYXBfZnJlZTsKKworCXBjaV9pbmZvKHBkZXYsICJh ZGRlZCBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSAlcFJcbiIsCisJCSAmcGdtYXAtPnJlcyk7CisK KwlyZXR1cm4gMDsKKworcGdtYXBfZnJlZToKKwlkZXZyZXNfZnJlZShwZ21hcCk7CisJcmV0dXJu IGVycm9yOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9hZGRfcmVzb3VyY2UpOwor CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmZpbmRfcGFyZW50X3BjaV9kZXYoc3RydWN0IGRldmlj ZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKnBhcmVudDsKKworCWRldiA9IGdldF9kZXZpY2Uo ZGV2KTsKKworCXdoaWxlIChkZXYpIHsKKwkJaWYgKGRldl9pc19wY2koZGV2KSkKKwkJCXJldHVy biB0b19wY2lfZGV2KGRldik7CisKKwkJcGFyZW50ID0gZ2V0X2RldmljZShkZXYtPnBhcmVudCk7 CisJCXB1dF9kZXZpY2UoZGV2KTsKKwkJZGV2ID0gcGFyZW50OworCX0KKworCXJldHVybiBOVUxM OworfQorCisvKgorICogQ2hlY2sgaWYgYSBQQ0kgYnJpZGdlIGhhcyBpdHMgQUNTIHJlZGlyZWN0 aW9uIGJpdHMgc2V0IHRvIHJlZGlyZWN0IFAyUAorICogVExQcyB1cHN0cmVhbSB2aWEgQUNTLiBS ZXR1cm5zIDEgaWYgdGhlIHBhY2tldHMgd2lsbCBiZSByZWRpcmVjdGVkCisgKiB1cHN0cmVhbSwg MCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcGNpX2JyaWRnZV9oYXNfYWNzX3JlZGlyKHN0 cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBwb3M7CisJdTE2IGN0cmw7CisKKwlwb3MgPSBw Y2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9BQ1MpOworCWlmICgh cG9zKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBD SV9BQ1NfQ1RSTCwgJmN0cmwpOworCisJaWYgKGN0cmwgJiAoUENJX0FDU19SUiB8IFBDSV9BQ1Nf Q1IgfCBQQ0lfQUNTX0VDKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgc2VxX2J1Zl9wcmludF9idXNfZGV2Zm4oc3RydWN0IHNlcV9idWYgKmJ1Ziwgc3RydWN0 IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXNlcV9idWZfcHJp bnRmKGJ1ZiwgIiVzOyIsIHBjaV9uYW1lKHBkZXYpKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGRp c3RhbmNlIHRocm91Z2ggdGhlIG5lYXJlc3QgY29tbW9uIHVwc3RyZWFtIGJyaWRnZSBiZXR3ZWVu CisgKiB0d28gUENJIGRldmljZXMuCisgKgorICogSWYgdGhlIHR3byBkZXZpY2VzIGFyZSB0aGUg c2FtZSBkZXZpY2UgdGhlbiAwIHdpbGwgYmUgcmV0dXJuZWQuCisgKgorICogSWYgdGhlcmUgYXJl IHR3byB2aXJ0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBkZXZpY2UgYmVoaW5kIHRoZSBzYW1l CisgKiBicmlkZ2UgcG9ydCB0aGVuIDIgd2lsbCBiZSByZXR1cm5lZCAob25lIHN0ZXAgZG93biB0 byB0aGUgUENJZSBzd2l0Y2gsCisgKiB0aGVuIG9uZSBzdGVwIGJhY2sgdG8gdGhlIHNhbWUgZGV2 aWNlKS4KKyAqCisgKiBJbiB0aGUgY2FzZSB3aGVyZSB0d28gZGV2aWNlcyBhcmUgY29ubmVjdGVk IHRvIHRoZSBzYW1lIFBDSWUgc3dpdGNoLCB0aGUKKyAqIHZhbHVlIDQgd2lsbCBiZSByZXR1cm5l ZC4gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZm9sbG93aW5nIFBDSSB0cmVlOgorICoKKyAqICAg ICAtKyAgUm9vdCBQb3J0CisgKiAgICAgIFwrIFN3aXRjaCBVcHN0cmVhbSBQb3J0CisgKiAgICAg ICArLSsgU3dpdGNoIERvd25zdHJlYW0gUG9ydAorICogICAgICAgKyBcLSBEZXZpY2UgQQorICog ICAgICAgXC0rIFN3aXRjaCBEb3duc3RyZWFtIFBvcnQKKyAqICAgICAgICAgXC0gRGV2aWNlIEIK KyAqCisgKiBUaGUgZGlzdGFuY2UgaXMgNCBiZWNhdXNlIHdlIHRyYXZlcnNlIGZyb20gRGV2aWNl IEEgdGhyb3VnaCB0aGUgZG93bnN0cmVhbQorICogcG9ydCBvZiB0aGUgc3dpdGNoLCB0byB0aGUg Y29tbW9uIHVwc3RyZWFtIHBvcnQsIGJhY2sgdXAgdG8gdGhlIHNlY29uZAorICogZG93bnN0cmVh bSBwb3J0IGFuZCB0aGVuIHRvIERldmljZSBCLgorICoKKyAqIEFueSB0d28gZGV2aWNlcyB0aGF0 IGRvbid0IGhhdmUgYSBjb21tb24gdXBzdHJlYW0gYnJpZGdlIHdpbGwgcmV0dXJuIC0xLgorICog SW4gdGhpcyB3YXkgZGV2aWNlcyBvbiBzZXBhcmF0ZSBQQ0llIHJvb3QgcG9ydHMgd2lsbCBiZSBy ZWplY3RlZCwgd2hpY2gKKyAqIGlzIHdoYXQgd2Ugd2FudCBmb3IgcGVlci10by1wZWVyIHNlZWlu ZyBlYWNoIFBDSWUgcm9vdCBwb3J0IGRlZmluZXMgYQorICogc2VwYXJhdGUgaGllcmFyY2h5IGRv bWFpbiBhbmQgdGhlcmUncyBubyB3YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJvb3QKKyAq IGNvbXBsZXggc3VwcG9ydHMgZm9yd2FyZGluZyBiZXR3ZWVuIHRoZW0uCisgKgorICogSW4gdGhl IGNhc2Ugd2hlcmUgdHdvIGRldmljZXMgYXJlIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgUENJZSBz d2l0Y2hlcywKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBzdGlsbCByZXR1cm4gYSBwb3NpdGl2ZSBk aXN0YW5jZSBhcyBsb25nIGFzIGJvdGgKKyAqIHN3aXRjaGVzIGV2ZW50dWFsbHkgaGF2ZSBhIGNv bW1vbiB1cHN0cmVhbSBicmlkZ2UuIE5vdGUgdGhpcyBjb3ZlcnMKKyAqIHRoZSBjYXNlIG9mIHVz aW5nIG11bHRpcGxlIFBDSWUgc3dpdGNoZXMgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgbGV2ZWwgb2YK KyAqIGZhbi1vdXQgZnJvbSBhIHJvb3QgcG9ydC4gVGhlIGV4YWN0IGRpc3RhbmNlIHdpbGwgYmUg YSBmdW5jdGlvbiBvZiB0aGUKKyAqIG51bWJlciBvZiBzd2l0Y2hlcyBiZXR3ZWVuIERldmljZSBB IGFuZCBEZXZpY2UgQi4KKyAqCisgKiBJZiBhIGJyaWRnZSB3aGljaCBoYXMgYW55IEFDUyByZWRp cmVjdGlvbiBiaXRzIHNldCBpcyBpbiB0aGUgcGF0aAorICogdGhlbiB0aGlzIGZ1bmN0aW9ucyB3 aWxsIHJldHVybiAtMi4gVGhpcyBpcyBzbyB3ZSByZWplY3QgYW55CisgKiBjYXNlcyB3aGVyZSB0 aGUgVExQcyBhcmUgZm9yd2FyZGVkIHVwIGludG8gdGhlIHJvb3QgY29tcGxleC4KKyAqIEluIHRo aXMgY2FzZSwgYSBsaXN0IG9mIGFsbCBpbmZyaW5naW5nIGJyaWRnZSBhZGRyZXNzZXMgd2lsbCBi ZQorICogcG9wdWxhdGVkIGluIGFjc19saXN0IChhc3N1bWluZyBpdCdzIG5vbi1udWxsKSBmb3Ig cHJpbnRrIHB1cnBvc2VzLgorICovCitzdGF0aWMgaW50IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5j ZShzdHJ1Y3QgcGNpX2RldiAqYSwKKwkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmIsCisJCQkJICAg IHN0cnVjdCBzZXFfYnVmICphY3NfbGlzdCkKK3sKKwlpbnQgZGlzdF9hID0gMDsKKwlpbnQgZGlz dF9iID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqYmIgPSBOVUxMOworCWludCBhY3NfY250ID0gMDsK KworCS8qCisJICogTm90ZSwgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIHJlZmVyZW5jZXMgdG8gZGV2 aWNlcyByZXR1cm5lZCBieQorCSAqIHBjaV91cHN0cmVhbV9icmlkZ2UoKSBzZWVpbmcgd2UgaG9s ZCBhIHJlZmVyZW5jZSB0byBhIGNoaWxkCisJICogZGV2aWNlIHdoaWNoIHdpbGwgYWxyZWFkeSBo b2xkIGEgcmVmZXJlbmNlIHRvIHRoZSB1cHN0cmVhbSBicmlkZ2UuCisJICovCisKKwl3aGlsZSAo YSkgeworCQlkaXN0X2IgPSAwOworCisJCWlmIChwY2lfYnJpZGdlX2hhc19hY3NfcmVkaXIoYSkp IHsKKwkJCXNlcV9idWZfcHJpbnRfYnVzX2RldmZuKGFjc19saXN0LCBhKTsKKwkJCWFjc19jbnQr KzsKKwkJfQorCisJCWJiID0gYjsKKworCQl3aGlsZSAoYmIpIHsKKwkJCWlmIChhID09IGJiKQor CQkJCWdvdG8gY2hlY2tfYl9wYXRoX2FjczsKKworCQkJYmIgPSBwY2lfdXBzdHJlYW1fYnJpZGdl KGJiKTsKKwkJCWRpc3RfYisrOworCQl9CisKKwkJYSA9IHBjaV91cHN0cmVhbV9icmlkZ2UoYSk7 CisJCWRpc3RfYSsrOworCX0KKworCXJldHVybiAtMTsKKworY2hlY2tfYl9wYXRoX2FjczoKKwli YiA9IGI7CisKKwl3aGlsZSAoYmIpIHsKKwkJaWYgKGEgPT0gYmIpCisJCQlicmVhazsKKworCQlp ZiAocGNpX2JyaWRnZV9oYXNfYWNzX3JlZGlyKGJiKSkgeworCQkJc2VxX2J1Zl9wcmludF9idXNf ZGV2Zm4oYWNzX2xpc3QsIGJiKTsKKwkJCWFjc19jbnQrKzsKKwkJfQorCisJCWJiID0gcGNpX3Vw c3RyZWFtX2JyaWRnZShiYik7CisJfQorCisJaWYgKGFjc19jbnQpCisJCXJldHVybiAtMjsKKwor CXJldHVybiBkaXN0X2EgKyBkaXN0X2I7Cit9CisKK3N0YXRpYyBpbnQgdXBzdHJlYW1fYnJpZGdl X2Rpc3RhbmNlX3dhcm4oc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLAorCQkJCQkgc3RydWN0IHBj aV9kZXYgKmNsaWVudCkKK3sKKwlzdHJ1Y3Qgc2VxX2J1ZiBhY3NfbGlzdDsKKwlpbnQgcmV0Owor CisJc2VxX2J1Zl9pbml0KCZhY3NfbGlzdCwga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwp LCBQQUdFX1NJWkUpOworCWlmICghYWNzX2xpc3QuYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsK KworCXJldCA9IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5jZShwcm92aWRlciwgY2xpZW50LCAmYWNz X2xpc3QpOworCWlmIChyZXQgPT0gLTIpIHsKKwkJcGNpX3dhcm4oY2xpZW50LCAiY2Fubm90IGJl IHVzZWQgZm9yIHBlZXItdG8tcGVlciBETUEgYXMgQUNTIHJlZGlyZWN0IGlzIHNldCBiZXR3ZWVu IHRoZSBjbGllbnQgYW5kIHByb3ZpZGVyICglcylcbiIsCisJCQkgcGNpX25hbWUocHJvdmlkZXIp KTsKKwkJLyogRHJvcCBmaW5hbCBzZW1pY29sb24gKi8KKwkJYWNzX2xpc3QuYnVmZmVyW2Fjc19s aXN0Lmxlbi0xXSA9IDA7CisJCXBjaV93YXJuKGNsaWVudCwgInRvIGRpc2FibGUgQUNTIHJlZGly ZWN0IGZvciB0aGlzIHBhdGgsIGFkZCB0aGUga2VybmVsIHBhcmFtZXRlcjogcGNpPWRpc2FibGVf YWNzX3JlZGlyPSVzXG4iLAorCQkJIGFjc19saXN0LmJ1ZmZlcik7CisKKwl9IGVsc2UgaWYgKHJl dCA8IDApIHsKKwkJcGNpX3dhcm4oY2xpZW50LCAiY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8t cGVlciBETUEgYXMgdGhlIGNsaWVudCBhbmQgcHJvdmlkZXIgKCVzKSBkbyBub3Qgc2hhcmUgYW4g dXBzdHJlYW0gYnJpZGdlXG4iLAorCQkJIHBjaV9uYW1lKHByb3ZpZGVyKSk7CisJfQorCisJa2Zy ZWUoYWNzX2xpc3QuYnVmZmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBwY2lfcDJw ZG1hX2NsaWVudCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBwY2lfZGV2ICpj bGllbnQ7CisJc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyOworfTsKKworLyoqCisgKiBwY2lfcDJw ZG1hX2FkZF9jbGllbnQgLSBhbGxvY2F0ZSBhIG5ldyBlbGVtZW50IGluIGEgY2xpZW50IGRldmlj ZSBsaXN0CisgKiBAaGVhZDogbGlzdCBoZWFkIG9mIHAycGRtYSBjbGllbnRzCisgKiBAZGV2OiBk ZXZpY2UgdG8gYWRkIHRvIHRoZSBsaXN0CisgKgorICogVGhpcyBhZGRzIEBkZXYgdG8gYSBsaXN0 IG9mIGNsaWVudHMgdXNlZCBieSBhIHAycGRtYSBkZXZpY2UuCisgKiBUaGlzIGxpc3Qgc2hvdWxk IGJlIHBhc3NlZCB0byBwY2lfcDJwbWVtX2ZpbmQoKS4gT25jZSBwY2lfcDJwbWVtX2ZpbmQoKSBo YXMKKyAqIGJlZW4gY2FsbGVkIHN1Y2Nlc3NmdWxseSwgdGhlIGxpc3Qgd2lsbCBiZSBib3VuZCB0 byBhIHNwZWNpZmljIHAycGRtYQorICogZGV2aWNlIGFuZCBuZXcgY2xpZW50cyBjYW4gb25seSBi ZSBhZGRlZCB0byB0aGUgbGlzdCBpZiB0aGV5IGFyZQorICogc3VwcG9ydGVkIGJ5IHRoYXQgcDJw ZG1hIGRldmljZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGhhdmUgYSBsb2Nr IHdoaWNoIHByb3RlY3RzIEBoZWFkIGFzIG5lY2Vzc2FyeQorICogc28gdGhhdCBub25lIG9mIHRo ZSBwY2lfcDJwIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIGNvbmN1cnJlbnRseQorICogb24gdGhh dCBsaXN0LgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgY2xpZW50IHdhcyBzdWNjZXNzZnVsbHkg YWRkZWQuCisgKi8KK2ludCBwY2lfcDJwZG1hX2FkZF9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAq aGVhZCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAq aXRlbSwgKm5ld19pdGVtOworCXN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciA9IE5VTEw7CisJc3Ry dWN0IHBjaV9kZXYgKmNsaWVudDsKKwlpbnQgcmV0OworCisJaWYgKElTX0VOQUJMRUQoQ09ORklH X0RNQV9WSVJUX09QUykgJiYgZGV2LT5kbWFfb3BzID09ICZkbWFfdmlydF9vcHMpIHsKKwkJZGV2 X3dhcm4oZGV2LCAiY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciBETUEgYmVjYXVzZSB0 aGUgZHJpdmVyIG1ha2VzIHVzZSBvZiBkbWFfdmlydF9vcHNcbiIpOworCQlyZXR1cm4gLUVOT0RF VjsKKwl9CisKKwljbGllbnQgPSBmaW5kX3BhcmVudF9wY2lfZGV2KGRldik7CisJaWYgKCFjbGll bnQpIHsKKwkJZGV2X3dhcm4oZGV2LCAiY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciBE TUEgYXMgaXQgaXMgbm90IGEgUENJIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0K KworCWl0ZW0gPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoaGVhZCwgc3RydWN0IHBjaV9wMnBk bWFfY2xpZW50LCBsaXN0KTsKKwlpZiAoaXRlbSAmJiBpdGVtLT5wcm92aWRlcikgeworCQlwcm92 aWRlciA9IGl0ZW0tPnByb3ZpZGVyOworCisJCXJldCA9IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5j ZV93YXJuKHByb3ZpZGVyLCBjbGllbnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0ID0gLUVY REVWOworCQkJZ290byBwdXRfY2xpZW50OworCQl9CisJfQorCisJbmV3X2l0ZW0gPSBremFsbG9j KHNpemVvZigqbmV3X2l0ZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19pdGVtKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gcHV0X2NsaWVudDsKKwl9CisKKwluZXdfaXRlbS0+Y2xpZW50 ID0gY2xpZW50OworCW5ld19pdGVtLT5wcm92aWRlciA9IHBjaV9kZXZfZ2V0KHByb3ZpZGVyKTsK KworCWxpc3RfYWRkX3RhaWwoJm5ld19pdGVtLT5saXN0LCBoZWFkKTsKKworCXJldHVybiAwOwor CitwdXRfY2xpZW50OgorCXBjaV9kZXZfcHV0KGNsaWVudCk7CisJcmV0dXJuIHJldDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfYWRkX2NsaWVudCk7CisKK3N0YXRpYyB2b2lkIHBj aV9wMnBkbWFfY2xpZW50X2ZyZWUoc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50ICppdGVtKQorewor CWxpc3RfZGVsKCZpdGVtLT5saXN0KTsKKwlwY2lfZGV2X3B1dChpdGVtLT5jbGllbnQpOworCXBj aV9kZXZfcHV0KGl0ZW0tPnByb3ZpZGVyKTsKKwlrZnJlZShpdGVtKTsKK30KKworLyoqCisgKiBw Y2lfcDJwZG1hX3JlbW92ZV9jbGllbnQgLSByZW1vdmUgYW5kIGZyZWUgYSBwMnBkbWEgY2xpZW50 CisgKiBAaGVhZDogbGlzdCBoZWFkIG9mIHAycGRtYSBjbGllbnRzCisgKiBAZGV2OiBkZXZpY2Ug dG8gcmVtb3ZlIGZyb20gdGhlIGxpc3QKKyAqCisgKiBUaGlzIHJlbW92ZXMgQGRldiBmcm9tIGEg bGlzdCBvZiBjbGllbnRzIHVzZWQgYnkgYSBwMnBkbWEgZGV2aWNlLgorICogVGhlIGNhbGxlciBp cyBleHBlY3RlZCB0byBoYXZlIGEgbG9jayB3aGljaCBwcm90ZWN0cyBAaGVhZCBhcyBuZWNlc3Nh cnkKKyAqIHNvIHRoYXQgbm9uZSBvZiB0aGUgcGNpX3AycCBmdW5jdGlvbnMgY2FuIGJlIGNhbGxl ZCBjb25jdXJyZW50bHkKKyAqIG9uIHRoYXQgbGlzdC4KKyAqLwordm9pZCBwY2lfcDJwZG1hX3Jl bW92ZV9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRldmljZSAqZGV2KQor eworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9zLCAqdG1wOworCXN0cnVjdCBwY2lfZGV2 ICpwZGV2OworCisJcGRldiA9IGZpbmRfcGFyZW50X3BjaV9kZXYoZGV2KTsKKwlpZiAoIXBkZXYp CisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgaGVhZCwg bGlzdCkgeworCQlpZiAocG9zLT5jbGllbnQgIT0gcGRldikKKwkJCWNvbnRpbnVlOworCisJCXBj aV9wMnBkbWFfY2xpZW50X2ZyZWUocG9zKTsKKwl9CisKKwlwY2lfZGV2X3B1dChwZGV2KTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVudCk7CisKKy8qKgorICog cGNpX3AycGRtYV9jbGllbnRfbGlzdF9mcmVlIC0gZnJlZSBhbiBlbnRpcmUgbGlzdCBvZiBwMnBk bWEgY2xpZW50cworICogQGhlYWQ6IGxpc3QgaGVhZCBvZiBwMnBkbWEgY2xpZW50cworICoKKyAq IFRoaXMgcmVtb3ZlcyBhbGwgZGV2aWNlcyBpbiBhIGxpc3Qgb2YgY2xpZW50cyB1c2VkIGJ5IGEg cDJwZG1hIGRldmljZS4KKyAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGxvY2sg d2hpY2ggcHJvdGVjdHMgQGhlYWQgYXMgbmVjZXNzYXJ5CisgKiBzbyB0aGF0IG5vbmUgb2YgdGhl IHBjaV9wMnBkbWEgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5CisgKiBvbiB0 aGF0IGxpc3QuCisgKi8KK3ZvaWQgcGNpX3AycGRtYV9jbGllbnRfbGlzdF9mcmVlKHN0cnVjdCBs aXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50ICpwb3MsICp0bXA7 CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsIGhlYWQsIGxpc3QpCisJCXBj aV9wMnBkbWFfY2xpZW50X2ZyZWUocG9zKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBk bWFfY2xpZW50X2xpc3RfZnJlZSk7CisKKy8qKgorICogcGNpX3AycGRtYV9kaXN0YW5jZSAtIERl dGVybWl2ZSB0aGUgY3VtdWxhdGl2ZSBkaXN0YW5jZSBiZXR3ZWVuCisgKglhIHAycGRtYSBwcm92 aWRlciBhbmQgdGhlIGNsaWVudHMgaW4gdXNlLgorICogQHByb3ZpZGVyOiBwMnBkbWEgcHJvdmlk ZXIgdG8gY2hlY2sgYWdhaW5zdCB0aGUgY2xpZW50IGxpc3QKKyAqIEBjbGllbnRzOiBsaXN0IG9m IGRldmljZXMgdG8gY2hlY2sgKE5VTEwtdGVybWluYXRlZCkKKyAqIEB2ZXJib3NlOiBpZiB0cnVl LCBwcmludCB3YXJuaW5ncyBmb3IgZGV2aWNlcyB3aGVuIHdlIHJldHVybiAtMQorICoKKyAqIFJl dHVybnMgLTEgaWYgYW55IG9mIHRoZSBjbGllbnRzIGFyZSBub3QgY29tcGF0aWJsZSAoYmVoaW5k IHRoZSBzYW1lCisgKiByb290IHBvcnQgYXMgdGhlIHByb3ZpZGVyKSwgb3RoZXJ3aXNlIHJldHVy bnMgYSBwb3NpdGl2ZSBudW1iZXIgd2hlcmUKKyAqIHRoZSBsb3dlciBudW1iZXIgaXMgdGhlIHBy ZWZlcnJhYmxlIGNob2ljZS4gKElmIHRoZXJlJ3Mgb25lIGNsaWVudAorICogdGhhdCdzIHRoZSBz YW1lIGFzIHRoZSBwcm92aWRlciBpdCB3aWxsIHJldHVybiAwLCB3aGljaCBpcyBiZXN0IGNob2lj ZSkuCisgKgorICogRm9yIG5vdywgImNvbXBhdGlibGUiIG1lYW5zIHRoZSBwcm92aWRlciBhbmQg dGhlIGNsaWVudHMgYXJlIGFsbCBiZWhpbmQKKyAqIHRoZSBzYW1lIFBDSSByb290IHBvcnQuIFRo aXMgY3V0cyBvdXQgY2FzZXMgdGhhdCBtYXkgd29yayBidXQgaXMgc2FmZXN0CisgKiBmb3IgdGhl IHVzZXIuIEZ1dHVyZSB3b3JrIGNhbiBleHBhbmQgdGhpcyB0byB3aGl0ZS1saXN0IHJvb3QgY29t cGxleGVzIHRoYXQKKyAqIGNhbiBzYWZlbHkgZm9yd2FyZCBiZXR3ZWVuIGVhY2ggcG9ydHMuCisg Ki8KK2ludCBwY2lfcDJwZG1hX2Rpc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwgc3Ry dWN0IGxpc3RfaGVhZCAqY2xpZW50cywKKwkJCWJvb2wgdmVyYm9zZSkKK3sKKwlzdHJ1Y3QgcGNp X3AycGRtYV9jbGllbnQgKnBvczsKKwlpbnQgcmV0OworCWludCBkaXN0YW5jZSA9IDA7CisJYm9v bCBub3Rfc3VwcG9ydGVkID0gZmFsc2U7CisKKwlpZiAobGlzdF9lbXB0eShjbGllbnRzKSkKKwkJ cmV0dXJuIC0xOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGNsaWVudHMsIGxpc3QpIHsK KwkJaWYgKHZlcmJvc2UpCisJCQlyZXQgPSB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Vfd2Fybihw cm92aWRlciwKKwkJCQkJCQkgICAgcG9zLT5jbGllbnQpOworCQllbHNlCisJCQlyZXQgPSB1cHN0 cmVhbV9icmlkZ2VfZGlzdGFuY2UocHJvdmlkZXIsIHBvcy0+Y2xpZW50LAorCQkJCQkJICAgICAg IE5VTEwpOworCisJCWlmIChyZXQgPCAwKQorCQkJbm90X3N1cHBvcnRlZCA9IHRydWU7CisKKwkJ aWYgKG5vdF9zdXBwb3J0ZWQgJiYgIXZlcmJvc2UpCisJCQlicmVhazsKKworCQlkaXN0YW5jZSAr PSByZXQ7CisJfQorCisJaWYgKG5vdF9zdXBwb3J0ZWQpCisJCXJldHVybiAtMTsKKworCXJldHVy biBkaXN0YW5jZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBkbWFfZGlzdGFuY2UpOwor CisvKioKKyAqIHBjaV9wMnBkbWFfYXNzaWduX3Byb3ZpZGVyIC0gQ2hlY2sgY29tcGF0aWJpbGl0 eSAoYXMgcGVyIHBjaV9wMnBkbWFfZGlzdGFuY2UpCisgKglhbmQgYXNzaWduIGEgcHJvdmlkZXIg dG8gYSBsaXN0IG9mIGNsaWVudHMKKyAqIEBwcm92aWRlcjogcDJwZG1hIHByb3ZpZGVyIHRvIGFz c2lnbiB0byB0aGUgY2xpZW50IGxpc3QKKyAqIEBjbGllbnRzOiBsaXN0IG9mIGRldmljZXMgdG8g Y2hlY2sgKE5VTEwtdGVybWluYXRlZCkKKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIGFueSBvZiB0 aGUgY2xpZW50cyBhcmUgbm90IGNvbXBhdGlibGUsIHRydWUgaWYgdGhlCisgKiBwcm92aWRlciB3 YXMgc3VjY2Vzc2Z1bGx5IGFzc2lnbmVkIHRvIHRoZSBjbGllbnRzLgorICovCitib29sIHBjaV9w MnBkbWFfYXNzaWduX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKKwkJCQlzdHJ1 Y3QgbGlzdF9oZWFkICpjbGllbnRzKQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9z OworCisJaWYgKHBjaV9wMnBkbWFfZGlzdGFuY2UocHJvdmlkZXIsIGNsaWVudHMsIHRydWUpIDwg MCkKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGNsaWVudHMs IGxpc3QpCisJCXBvcy0+cHJvdmlkZXIgPSBwcm92aWRlcjsKKworCXJldHVybiB0cnVlOworfQor RVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIpOworCisvKioKKyAq IHBjaV9oYXNfcDJwbWVtIC0gY2hlY2sgaWYgYSBnaXZlbiBQQ0kgZGV2aWNlIGhhcyBwdWJsaXNo ZWQgYW55IHAycG1lbQorICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gY2hlY2sKKyAqLworYm9vbCBw Y2lfaGFzX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+cDJw ZG1hICYmIHBkZXYtPnAycGRtYS0+cDJwbWVtX3B1Ymxpc2hlZDsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKHBjaV9oYXNfcDJwbWVtKTsKKworLyoqCisgKiBwY2lfcDJwbWVtX2ZpbmQgLSBmaW5kIGEg cGVlci10by1wZWVyIERNQSBtZW1vcnkgZGV2aWNlIGNvbXBhdGlibGUgd2l0aAorICoJdGhlIHNw ZWNpZmllZCBsaXN0IG9mIGNsaWVudHMgYW5kIHNob3J0ZXN0IGRpc3RhbmNlIChhcyBkZXRlcm1p bmVkCisgKglieSBwY2lfcDJwbWVtX2RtYSgpKQorICogQGNsaWVudHM6IGxpc3Qgb2YgZGV2aWNl cyB0byBjaGVjayAoTlVMTC10ZXJtaW5hdGVkKQorICoKKyAqIElmIG11bHRpcGxlIGRldmljZXMg YXJlIGJlaGluZCB0aGUgc2FtZSBzd2l0Y2gsIHRoZSBvbmUgImNsb3Nlc3QiIHRvIHRoZQorICog Y2xpZW50IGRldmljZXMgaW4gdXNlIHdpbGwgYmUgY2hvc2VuIGZpcnN0LiAoU28gaWYgb25lIG9m IHRoZSBwcm92aWRlcnMgYXJlCisgKiB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIGNsaWVudHMsIHRo YXQgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIGFoZWFkIG9mIGFueQorICogb3RoZXIgcHJvdmlkZXJz IHRoYXQgYXJlIHVucmVsYXRlZCkuIElmIG11bHRpcGxlIHByb3ZpZGVycyBhcmUgYW4gZXF1YWwK KyAqIGRpc3RhbmNlIGF3YXksIG9uZSB3aWxsIGJlIGNob3NlbiBhdCByYW5kb20uCisgKgorICog UmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugd2l0aCBhIHJlZmVyZW5jZSB0YWtl biAodXNlIHBjaV9kZXZfcHV0CisgKiB0byByZXR1cm4gdGhlIHJlZmVyZW5jZSkgb3IgTlVMTCBp ZiBubyBjb21wYXRpYmxlIGRldmljZSBpcyBmb3VuZC4gVGhlCisgKiBmb3VuZCBwcm92aWRlciB3 aWxsIGFsc28gYmUgYXNzaWduZWQgdG8gdGhlIGNsaWVudCBsaXN0LgorICovCitzdHJ1Y3QgcGNp X2RldiAqcGNpX3AycG1lbV9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCit7CisJc3Ry dWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9z OworCWludCBkaXN0YW5jZTsKKwlpbnQgY2xvc2VzdF9kaXN0YW5jZSA9IElOVF9NQVg7CisJc3Ry dWN0IHBjaV9kZXYgKipjbG9zZXN0X3BkZXZzOworCWludCBkZXZfY250ID0gMDsKKwljb25zdCBp bnQgbWF4X2RldnMgPSBQQUdFX1NJWkUgLyBzaXplb2YoKmNsb3Nlc3RfcGRldnMpOworCWludCBp OworCisJY2xvc2VzdF9wZGV2cyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWNsb3Nlc3RfcGRldnMpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKChwZGV2ID0gcGNp X2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGRldikpKSB7CisJCWlmICghcGNp X2hhc19wMnBtZW0ocGRldikpCisJCQljb250aW51ZTsKKworCQlkaXN0YW5jZSA9IHBjaV9wMnBk bWFfZGlzdGFuY2UocGRldiwgY2xpZW50cywgZmFsc2UpOworCQlpZiAoZGlzdGFuY2UgPCAwIHx8 IGRpc3RhbmNlID4gY2xvc2VzdF9kaXN0YW5jZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkaXN0 YW5jZSA9PSBjbG9zZXN0X2Rpc3RhbmNlICYmIGRldl9jbnQgPj0gbWF4X2RldnMpCisJCQljb250 aW51ZTsKKworCQlpZiAoZGlzdGFuY2UgPCBjbG9zZXN0X2Rpc3RhbmNlKSB7CisJCQlmb3IgKGkg PSAwOyBpIDwgZGV2X2NudDsgaSsrKQorCQkJCXBjaV9kZXZfcHV0KGNsb3Nlc3RfcGRldnNbaV0p OworCisJCQlkZXZfY250ID0gMDsKKwkJCWNsb3Nlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJ fQorCisJCWNsb3Nlc3RfcGRldnNbZGV2X2NudCsrXSA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCX0K KworCWlmIChkZXZfY250KQorCQlwZGV2ID0gcGNpX2Rldl9nZXQoY2xvc2VzdF9wZGV2c1twcmFu ZG9tX3UzMl9tYXgoZGV2X2NudCldKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfY250OyBpKysp CisJCXBjaV9kZXZfcHV0KGNsb3Nlc3RfcGRldnNbaV0pOworCisJaWYgKHBkZXYpCisJCWxpc3Rf Zm9yX2VhY2hfZW50cnkocG9zLCBjbGllbnRzLCBsaXN0KQorCQkJcG9zLT5wcm92aWRlciA9IHBk ZXY7CisKKwlrZnJlZShjbG9zZXN0X3BkZXZzKTsKKwlyZXR1cm4gcGRldjsKK30KK0VYUE9SVF9T WU1CT0xfR1BMKHBjaV9wMnBtZW1fZmluZCk7CisKKy8qKgorICogcGNpX2FsbG9jX3AycF9tZW0g LSBhbGxvY2F0ZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeQorICogQHBkZXY6IHRoZSBkZXZpY2Ug dG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gYWxs b2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IG9yIE5VTEwgb24gZXJy b3IuCisgKi8KK3ZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNp emVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCWlmICh1bmxpa2VseSghcGRldi0+cDJwZG1h KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodW5saWtlbHkoIXBlcmNwdV9yZWZfdHJ5Z2V0X2xp dmUoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZikpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9 ICh2b2lkICopZ2VuX3Bvb2xfYWxsb2MocGRldi0+cDJwZG1hLT5wb29sLCBzaXplKTsKKworCWlm ICh1bmxpa2VseSghcmV0KSkKKwkJcGVyY3B1X3JlZl9wdXQoJnBkZXYtPnAycGRtYS0+ZGV2bWFw X3JlZik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FsbG9jX3Ay cG1lbSk7CisKKy8qKgorICogcGNpX2ZyZWVfcDJwbWVtIC0gYWxsb2NhdGUgcGVlci10by1wZWVy IERNQSBtZW1vcnkKKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRoZSBtZW1vcnkgd2FzIGFsbG9jYXRl ZCBmcm9tCisgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRl ZAorICogQHNpemU6IG51bWJlciBvZiBieXRlcyB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqLwordm9p ZCBwY2lfZnJlZV9wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmFkZHIsIHNpemVf dCBzaXplKQoreworCWdlbl9wb29sX2ZyZWUocGRldi0+cDJwZG1hLT5wb29sLCAodWludHB0cl90 KWFkZHIsIHNpemUpOworCXBlcmNwdV9yZWZfcHV0KCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYp OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZyZWVfcDJwbWVtKTsKKworLyoqCisgKiBwY2lf dmlydF90b19idXMgLSByZXR1cm4gdGhlIFBDSSBidXMgYWRkcmVzcyBmb3IgYSBnaXZlbiB2aXJ0 dWFsCisgKglhZGRyZXNzIG9idGFpbmVkIHdpdGggcGNpX2FsbG9jX3AycG1lbSgpCisgKiBAcGRl djogdGhlIGRldmljZSB0aGUgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgZnJvbQorICogQGFkZHI6IGFk ZHJlc3Mgb2YgdGhlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQKKyAqLworcGNpX2J1c19hZGRy X3QgcGNpX3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqYWRk cikKK3sKKwlpZiAoIWFkZHIpCisJCXJldHVybiAwOworCWlmICghcGRldi0+cDJwZG1hKQorCQly ZXR1cm4gMDsKKworCS8qCisJICogTm90ZTogd2hlbiB3ZSBhZGRlZCB0aGUgbWVtb3J5IHRvIHRo ZSBwb29sIHdlIHVzZWQgdGhlIFBDSQorCSAqIGJ1cyBhZGRyZXNzIGFzIHRoZSBwaHlzaWNhbCBh ZGRyZXNzLiBTbyBnZW5fcG9vbF92aXJ0X3RvX3BoeXMoKQorCSAqIGFjdHVhbGx5IHJldHVybnMg dGhlIGJ1cyBhZGRyZXNzIGRlc3BpdGUgdGhlIG1pc2xlYWRpbmcgbmFtZS4KKwkgKi8KKwlyZXR1 cm4gZ2VuX3Bvb2xfdmlydF90b19waHlzKHBkZXYtPnAycGRtYS0+cG9vbCwgKHVuc2lnbmVkIGxv bmcpYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwbWVtX3ZpcnRfdG9fYnVzKTsK KworLyoqCisgKiBwY2lfcDJwbWVtX2FsbG9jX3NnbCAtIGFsbG9jYXRlIHBlZXItdG8tcGVlciBE TUEgbWVtb3J5IGluIGEgc2NhdHRlcmxpc3QKKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFsbG9j YXRlIG1lbW9yeSBmcm9tCisgKiBAc2dsOiB0aGUgYWxsb2NhdGVkIHNjYXR0ZXJsaXN0CisgKiBA bmVudHM6IHRoZSBudW1iZXIgb2YgU0cgZW50cmllcyBpbiB0aGUgbGlzdAorICogQGxlbmd0aDog bnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG9jYXRlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MK KyAqLworc3RydWN0IHNjYXR0ZXJsaXN0ICpwY2lfcDJwbWVtX2FsbG9jX3NnbChzdHJ1Y3QgcGNp X2RldiAqcGRldiwKKwkJCQkJIHVuc2lnbmVkIGludCAqbmVudHMsIHUzMiBsZW5ndGgpCit7CisJ c3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl2b2lkICphZGRyOworCisJc2cgPSBremFsbG9jKHNp emVvZigqc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNnKQorCQlyZXR1cm4gTlVMTDsKKworCXNn X2luaXRfdGFibGUoc2csIDEpOworCisJYWRkciA9IHBjaV9hbGxvY19wMnBtZW0ocGRldiwgbGVu Z3RoKTsKKwlpZiAoIWFkZHIpCisJCWdvdG8gb3V0X2ZyZWVfc2c7CisKKwlzZ19zZXRfYnVmKHNn LCBhZGRyLCBsZW5ndGgpOworCSpuZW50cyA9IDE7CisJcmV0dXJuIHNnOworCitvdXRfZnJlZV9z ZzoKKwlrZnJlZShzZyk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lf cDJwbWVtX2FsbG9jX3NnbCk7CisKKy8qKgorICogcGNpX3AycG1lbV9mcmVlX3NnbCAtIGZyZWUg YSBzY2F0dGVybGlzdCBhbGxvY2F0ZWQgYnkgcGNpX3AycG1lbV9hbGxvY19zZ2woKQorICogQHBk ZXY6IHRoZSBkZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAqIEBzZ2w6IHRoZSBhbGxv Y2F0ZWQgc2NhdHRlcmxpc3QKKyAqIEBuZW50czogdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIGlu IHRoZSBsaXN0CisgKi8KK3ZvaWQgcGNpX3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAq cGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpz ZzsKKwlpbnQgY291bnQ7CisKKwlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBJTlRfTUFYLCBjb3VudCkg eworCQlpZiAoIXNnKQorCQkJYnJlYWs7CisKKwkJcGNpX2ZyZWVfcDJwbWVtKHBkZXYsIHNnX3Zp cnQoc2cpLCBzZy0+bGVuZ3RoKTsKKwl9CisJa2ZyZWUoc2dsKTsKK30KK0VYUE9SVF9TWU1CT0xf R1BMKHBjaV9wMnBtZW1fZnJlZV9zZ2wpOworCisvKioKKyAqIHBjaV9wMnBtZW1fcHVibGlzaCAt IHB1Ymxpc2ggdGhlIHBlZXItdG8tcGVlciBETUEgbWVtb3J5IGZvciB1c2UgYnkKKyAqCW90aGVy IGRldmljZXMgd2l0aCBwY2lfcDJwbWVtX2ZpbmQoKQorICogQHBkZXY6IHRoZSBkZXZpY2Ugd2l0 aCBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSB0byBwdWJsaXNoCisgKiBAcHVibGlzaDogc2V0IHRv IHRydWUgdG8gcHVibGlzaCB0aGUgbWVtb3J5LCBmYWxzZSB0byB1bnB1Ymxpc2ggaXQKKyAqCisg KiBQdWJsaXNoZWQgbWVtb3J5IGNhbiBiZSB1c2VkIGJ5IG90aGVyIFBDSSBkZXZpY2UgZHJpdmVy cyBmb3IKKyAqIHBlZXItMi1wZWVyIERNQSBvcGVyYXRpb25zLiBOb24tcHVibGlzaGVkIG1lbW9y eSBpcyByZXNlcnZlZCBmb3IKKyAqIGV4bHVzaXZlIHVzZSBvZiB0aGUgZGV2aWNlIGRyaXZlciB0 aGF0IHJlZ2lzdGVycyB0aGUgcGVlci10by1wZWVyCisgKiBtZW1vcnkuCisgKi8KK3ZvaWQgcGNp X3AycG1lbV9wdWJsaXNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHB1Ymxpc2gpCit7CisJ aWYgKHB1Ymxpc2ggJiYgIXBkZXYtPnAycGRtYSkKKwkJcmV0dXJuOworCisJcGRldi0+cDJwZG1h LT5wMnBtZW1fcHVibGlzaGVkID0gcHVibGlzaDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9w MnBtZW1fcHVibGlzaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmggYi9p bmNsdWRlL2xpbnV4L21lbXJlbWFwLmgKaW5kZXggZjkxZjllNzYzNTU3Li45NTUzMzcwZWJkYWQg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4 L21lbXJlbWFwLmgKQEAgLTUzLDExICs1MywxNiBAQCBzdHJ1Y3Qgdm1lbV9hbHRtYXAgewogICog d2FrZXVwIGV2ZW50IHdoZW5ldmVyIGEgcGFnZSBpcyB1bnBpbm5lZCBhbmQgYmVjb21lcyBpZGxl LiBUaGlzCiAgKiB3YWtldXAgaXMgdXNlZCB0byBjb29yZGluYXRlIHBoeXNpY2FsIGFkZHJlc3Mg c3BhY2UgbWFuYWdlbWVudCAoZXg6CiAgKiBmcyB0cnVuY2F0ZS9ob2xlIHB1bmNoKSB2cyBwaW5u ZWQgcGFnZXMgKGV4OiBkZXZpY2UgZG1hKS4KKyAqCisgKiBNRU1PUllfREVWSUNFX1BDSV9QMlBE TUE6CisgKiBEZXZpY2UgbWVtb3J5IHJlc2lkaW5nIGluIGEgUENJIEJBUiBpbnRlbmRlZCBmb3Ig dXNlIHdpdGggUGVlci10by1QZWVyCisgKiB0cmFuc2FjdGlvbnMuCiAgKi8KIGVudW0gbWVtb3J5 X3R5cGUgewogCU1FTU9SWV9ERVZJQ0VfUFJJVkFURSA9IDEsCiAJTUVNT1JZX0RFVklDRV9QVUJM SUMsCiAJTUVNT1JZX0RFVklDRV9GU19EQVgsCisJTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BLAog fTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgv bW0uaAppbmRleCBhNjFlYmU4YWQ0Y2EuLjIwNTVkZjQxMmE3NyAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtODkwLDYgKzg5MCwxOSBA QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZGV2aWNlX3B1YmxpY19wYWdlKGNvbnN0IHN0cnVjdCBw YWdlICpwYWdlKQogCQlwYWdlLT5wZ21hcC0+dHlwZSA9PSBNRU1PUllfREVWSUNFX1BVQkxJQzsK IH0KIAorI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcGNp X3AycGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBpc196b25l X2RldmljZV9wYWdlKHBhZ2UpICYmCisJCXBhZ2UtPnBnbWFwLT50eXBlID09IE1FTU9SWV9ERVZJ Q0VfUENJX1AyUERNQTsKK30KKyNlbHNlIC8qIENPTkZJR19QQ0lfUDJQRE1BICovCitzdGF0aWMg aW5saW5lIGJvb2wgaXNfcGNpX3AycGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQor eworCXJldHVybiBmYWxzZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUENJX1AyUERNQSAqLworCiAj ZWxzZSAvKiBDT05GSUdfREVWX1BBR0VNQVBfT1BTICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2 X3BhZ2VtYXBfZ2V0X29wcyh2b2lkKQogewpAQCAtOTEzLDYgKzkyNiwxMSBAQCBzdGF0aWMgaW5s aW5lIGJvb2wgaXNfZGV2aWNlX3B1YmxpY19wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQog ewogCXJldHVybiBmYWxzZTsKIH0KKworc3RhdGljIGlubGluZSBib29sIGlzX3BjaV9wMnBkbWFf cGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CiAjZW5k aWYgLyogQ09ORklHX0RFVl9QQUdFTUFQX09QUyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0 X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1w MnBkbWEuaCBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMTI3ZTk1ZjUwNDkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5j bHVkZS9saW51eC9wY2ktcDJwZG1hLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogUENJIFBlZXIgMiBQZWVyIERNQSBzdXBw b3J0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBMb2dhbiBHdW50aG9ycGUKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb24KKyAqIENvcHly aWdodCAoYykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIENvcHlyaWdodCAoYykgMjAxOCwg RWlkZXRpY29tIEluYy4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9QQ0lfUDJQRE1BX0gKKyNkZWZp bmUgX0xJTlVYX1BDSV9QMlBETUFfSAorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK3N0cnVj dCBibG9ja19kZXZpY2U7CitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKKyNpZmRlZiBDT05GSUdfUENJ X1AyUERNQQoraW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSwKKwkJdTY0IG9mZnNldCk7CitpbnQgcGNpX3AycGRtYV9h ZGRfY2xpZW50KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBkZXZpY2UgKmRldik7Cit2 b2lkIHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1 Y3QgZGV2aWNlICpkZXYpOwordm9pZCBwY2lfcDJwZG1hX2NsaWVudF9saXN0X2ZyZWUoc3RydWN0 IGxpc3RfaGVhZCAqaGVhZCk7CitpbnQgcGNpX3AycGRtYV9kaXN0YW5jZShzdHJ1Y3QgcGNpX2Rl diAqcHJvdmlkZXIsIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMsCisJCQlib29sIHZlcmJvc2Up OworYm9vbCBwY2lfcDJwZG1hX2Fzc2lnbl9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcHJvdmlk ZXIsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cyk7Citib29sIHBjaV9oYXNfcDJwbWVt KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0cnVjdCBwY2lfZGV2ICpwY2lfcDJwbWVtX2ZpbmQo c3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cyk7Cit2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVj dCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHBjaV9mcmVlX3AycG1lbShzdHJ1 Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpOworcGNpX2J1c19hZGRy X3QgcGNpX3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqYWRk cik7CitzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBjaV9wMnBtZW1fYWxsb2Nfc2dsKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LAorCQkJCQkgdW5zaWduZWQgaW50ICpuZW50cywgdTMyIGxlbmd0aCk7Cit2b2lk IHBjaV9wMnBtZW1fZnJlZV9zZ2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVy bGlzdCAqc2dsKTsKK3ZvaWQgcGNpX3AycG1lbV9wdWJsaXNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCBib29sIHB1Ymxpc2gpOworI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi8KK3N0YXRpYyBp bmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBp bnQgYmFyLAorCQlzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNV UFA7Cit9CitzdGF0aWMgaW5saW5lIGludCBwY2lfcDJwZG1hX2FkZF9jbGllbnQoc3RydWN0IGxp c3RfaGVhZCAqaGVhZCwKKwkJc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAwOworfQor c3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVudChzdHJ1Y3QgbGlzdF9o ZWFkICpoZWFkLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIHZv aWQgcGNpX3AycGRtYV9jbGllbnRfbGlzdF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7 Cit9CitzdGF0aWMgaW5saW5lIGludCBwY2lfcDJwZG1hX2Rpc3RhbmNlKHN0cnVjdCBwY2lfZGV2 ICpwcm92aWRlciwKKwkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzLAorCQkJCSAg ICAgIGJvb2wgdmVyYm9zZSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIGJvb2wg cGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLAorCQkJ CQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKQoreworCXJldHVybiBmYWxzZTsKK30K K3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lfaGFzX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldikK K3sKKwlyZXR1cm4gZmFsc2U7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lf cDJwbWVtX2ZpbmQoc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cykKK3sKKwlyZXR1cm4gTlVMTDsK K30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAq cGRldiwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHZv aWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRyLAorCQlz aXplX3Qgc2l6ZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgcGNpX2J1c19hZGRyX3QgcGNpX3AycG1l bV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCSAgICB2b2lkICphZGRy KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBj aV9wMnBtZW1fYWxsb2Nfc2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQl1bnNpZ25lZCBpbnQg Km5lbnRzLCB1MzIgbGVuZ3RoKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSB2 b2lkIHBjaV9wMnBtZW1fZnJlZV9zZ2woc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0cnVjdCBz Y2F0dGVybGlzdCAqc2dsKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBtZW1fcHVi bGlzaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBwdWJsaXNoKQoreworfQorI2VuZGlmIC8q IENPTkZJR19QQ0lfUDJQRE1BICovCisjZW5kaWYgLyogX0xJTlVYX1BDSV9QMlBfSCAqLwpkaWZm IC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXgg NjkyNTgyOGY5ZjI1Li5iZjUyNzc3NjhmNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNp LmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMjgxLDYgKzI4MSw3IEBAIHN0cnVjdCBw Y2llX2xpbmtfc3RhdGU7CiBzdHJ1Y3QgcGNpX3ZwZDsKIHN0cnVjdCBwY2lfc3Jpb3Y7CiBzdHJ1 Y3QgcGNpX2F0czsKK3N0cnVjdCBwY2lfcDJwZG1hOwogCiAvKiBUaGUgcGNpX2RldiBzdHJ1Y3R1 cmUgZGVzY3JpYmVzIFBDSSBkZXZpY2VzICovCiBzdHJ1Y3QgcGNpX2RldiB7CkBAIC00MzgsNiAr NDM5LDkgQEAgc3RydWN0IHBjaV9kZXYgewogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSV9QQVNJ RAogCXUxNgkJcGFzaWRfZmVhdHVyZXM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUENJX1AyUERN QQorCXN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7CiAjZW5kaWYKIAlwaHlzX2FkZHJfdAlyb207 CQkvKiBQaHlzaWNhbCBhZGRyZXNzIGlmIG5vdCBmcm9tIEJBUiAqLwogCXNpemVfdAkJcm9tbGVu OwkJLyogTGVuZ3RoIGlmIG5vdCBmcm9tIEJBUiAqLwotLSAKMi4xOS4wCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1udmRpbW0gbWFpbGluZyBs aXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1udmRpbW0K