From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ale.deltatee.com (ale.deltatee.com [207.54.116.67]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id DABBB211616BF for ; Thu, 4 Oct 2018 14:28:00 -0700 (PDT) From: Logan Gunthorpe Date: Thu, 4 Oct 2018 15:27:35 -0600 Message-Id: <20181004212747.6301-2-logang@deltatee.com> In-Reply-To: <20181004212747.6301-1-logang@deltatee.com> References: <20181004212747.6301-1-logang@deltatee.com> MIME-Version: 1.0 Subject: [PATCH v9 01/13] PCI/P2PDMA: Support peer-to-peer memory List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-nvdimm-bounces@lists.01.org Sender: "Linux-nvdimm" To: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, linux-rdma@vger.kernel.org, linux-nvdimm@lists.01.org, linux-block@vger.kernel.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: U29tZSBQQ0kgZGV2aWNlcyBtYXkgaGF2ZSBtZW1vcnkgbWFwcGVkIGluIGEgQkFSIHNwYWNlIHRo YXQncwppbnRlbmRlZCBmb3IgdXNlIGluIHBlZXItdG8tcGVlciB0cmFuc2FjdGlvbnMuIEluIG9y ZGVyIHRvIGVuYWJsZQpzdWNoIHRyYW5zYWN0aW9ucyB0aGUgbWVtb3J5IG11c3QgYmUgcmVnaXN0 ZXJlZCB3aXRoIFpPTkVfREVWSUNFIHBhZ2VzCnNvIGl0IGNhbiBiZSB1c2VkIGJ5IERNQSBpbnRl cmZhY2VzIGluIGV4aXN0aW5nIGRyaXZlcnMuCgpBZGQgYW4gaW50ZXJmYWNlIGZvciBvdGhlciBz dWJzeXN0ZW1zIHRvIGZpbmQgYW5kIGFsbG9jYXRlIGNodW5rcyBvZiBQMlAKbWVtb3J5IGFzIG5l Y2Vzc2FyeSB0byBmYWNpbGl0YXRlIHRyYW5zZmVycyBiZXR3ZWVuIHR3byBQQ0kgcGVlcnM6Cgpz dHJ1Y3QgcGNpX2RldiAqcGNpX3AycG1lbV9maW5kW19tYW55XSgpOwppbnQgcGNpX3AycGRtYV9k aXN0YW5jZVtfbWFueV0oKTsKdm9pZCAqcGNpX2FsbG9jX3AycG1lbSgpOwoKVGhlIG5ldyBpbnRl cmZhY2UgcmVxdWlyZXMgYSBkcml2ZXIgdG8gY29sbGVjdCBhIGxpc3Qgb2YgY2xpZW50IGRldmlj ZXMKaW52b2x2ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIHRoZW4gY2FsbCBwY2lfcDJwbWVtX2ZpbmQo KSB0byBvYnRhaW4gYW55CnN1aXRhYmxlIFAyUCBtZW1vcnkuIEFsdGVybmF0aXZlbHksIGlmIHRo ZSBjYWxsZXIga25vd3MgYSBkZXZpY2Ugd2hpY2gKcHJvdmlkZXMgUDJQIG1lbW9yeSwgdGhleSBj YW4gdXNlIHBjaV9wMnBkbWFfZGlzdGFuY2UoKSB0byBkZXRlcm1pbmUKaWYgaXQgaXMgdXNhYmxl LiBXaXRoIGEgc3VpdGFibGUgcDJwbWVtIGRldmljZSwgbWVtb3J5IGNhbiB0aGVuIGJlCmFsbG9j YXRlZCB3aXRoIHBjaV9hbGxvY19wMnBtZW0oKSBmb3IgdXNlIGluIERNQSB0cmFuc2FjdGlvbnMu CgpEZXBlbmRpbmcgb24gaGFyZHdhcmUsIHVzaW5nIHBlZXItdG8tcGVlciBtZW1vcnkgbWF5IHJl ZHVjZSB0aGUgYmFuZHdpZHRoCm9mIHRoZSB0cmFuc2ZlciBidXQgY2FuIHNpZ25pZmljYW50bHkg cmVkdWNlIHByZXNzdXJlIG9uIHN5c3RlbSBtZW1vcnkuClRoaXMgbWF5IGJlIGRlc2lyYWJsZSBp biBtYW55IGNhc2VzOiBmb3IgZXhhbXBsZSBhIHN5c3RlbSBjb3VsZCBiZSBkZXNpZ25lZAp3aXRo IGEgc21hbGwgQ1BVIGNvbm5lY3RlZCB0byBhIFBDSWUgc3dpdGNoIGJ5IGEgc21hbGwgbnVtYmVy IG9mIGxhbmVzCndoaWNoIHdvdWxkIG1heGltaXplIHRoZSBudW1iZXIgb2YgbGFuZXMgYXZhaWxh YmxlIHRvIGNvbm5lY3QgdG8gTlZNZQpkZXZpY2VzLgoKVGhlIGNvZGUgaXMgZGVzaWduZWQgdG8g b25seSB1dGlsaXplIHRoZSBwMnBtZW0gZGV2aWNlIGlmIGFsbCB0aGUgZGV2aWNlcwppbnZvbHZl ZCBpbiBhIHRyYW5zZmVyIGFyZSBiZWhpbmQgdGhlIHNhbWUgUENJIGJyaWRnZS4gVGhpcyBpcyBi ZWNhdXNlIHdlCmhhdmUgbm8gd2F5IG9mIGtub3dpbmcgd2hldGhlciBwZWVyLXRvLXBlZXIgcm91 dGluZyBiZXR3ZWVuIFBDSWUgUm9vdCBQb3J0cwppcyBzdXBwb3J0ZWQgKFBDSWUgcjQuMCwgc2Vj IDEuMy4xKS4gQWRkaXRpb25hbGx5LCB0aGUgYmVuZWZpdHMgb2YgUDJQCnRyYW5zZmVycyB0aGF0 IGdvIHRocm91Z2ggdGhlIFJDIGlzIGxpbWl0ZWQgdG8gb25seSByZWR1Y2luZyBEUkFNIHVzYWdl CmFuZCwgaW4gc29tZSBjYXNlcywgY29kaW5nIGNvbnZlbmllbmNlLiBUaGUgUENJLVNJRyBtYXkg YmUgZXhwbG9yaW5nCmFkZGluZyBhIG5ldyBjYXBhYmlsaXR5IGJpdCB0byBhZHZlcnRpc2Ugd2hl dGhlciB0aGlzIGlzIHBvc3NpYmxlIGZvcgpmdXR1cmUgaGFyZHdhcmUuCgpUaGlzIGNvbW1pdCBp bmNsdWRlcyBzaWduaWZpY2FudCByZXdvcmsgYW5kIGZlZWRiYWNrIGZyb20gQ2hyaXN0b3BoCkhl bGx3aWcuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGxzdC5kZT4KU2ln bmVkLW9mZi1ieTogTG9nYW4gR3VudGhvcnBlIDxsb2dhbmdAZGVsdGF0ZWUuY29tPgpBY2tlZC1i eTogQmpvcm4gSGVsZ2FhcyA8YmhlbGdhYXNAZ29vZ2xlLmNvbT4gICMgUENJIHBpZWNlcwotLS0K IGRyaXZlcnMvcGNpL0tjb25maWcgICAgICAgIHwgIDE3ICsKIGRyaXZlcnMvcGNpL01ha2VmaWxl ICAgICAgIHwgICAxICsKIGRyaXZlcnMvcGNpL3AycGRtYS5jICAgICAgIHwgNjMwICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvbWVtcmVtYXAuaCAg IHwgICA1ICsKIGluY2x1ZGUvbGludXgvbW0uaCAgICAgICAgIHwgIDE4ICsrCiBpbmNsdWRlL2xp bnV4L3BjaS1wMnBkbWEuaCB8ICA5MiArKysrKysKIGluY2x1ZGUvbGludXgvcGNpLmggICAgICAg IHwgICA0ICsKIDcgZmlsZXMgY2hhbmdlZCwgNzY3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3BjaS9wMnBkbWEuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUv bGludXgvcGNpLXAycGRtYS5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvS2NvbmZpZyBiL2Ry aXZlcnMvcGNpL0tjb25maWcKaW5kZXggNTZmZjhmNmQzMWZjLi5kZWI2OGJlNGZkYWMgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvS2NvbmZpZwpAQCAt MTMyLDYgKzEzMiwyMyBAQCBjb25maWcgUENJX1BBU0lECiAKIAkgIElmIHVuc3VyZSwgc2F5IE4u CiAKK2NvbmZpZyBQQ0lfUDJQRE1BCisJYm9vbCAiUENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBz dXBwb3J0IgorCWRlcGVuZHMgb24gUENJICYmIFpPTkVfREVWSUNFCisJc2VsZWN0IEdFTkVSSUNf QUxMT0NBVE9SCisJaGVscAorCSAgRW5hYmxl0ZUgZHJpdmVycyB0byBkbyBQQ0kgcGVlci10by1w ZWVyIHRyYW5zYWN0aW9ucyB0byBhbmQgZnJvbQorCSAgQkFScyB0aGF0IGFyZSBleHBvc2VkIGlu IG90aGVyIGRldmljZXMgdGhhdCBhcmUgdGhlIHBhcnQgb2YKKwkgIHRoZSBoaWVyYXJjaHkgd2hl cmUgcGVlci10by1wZWVyIERNQSBpcyBndWFyYW50ZWVkIGJ5IHRoZSBQQ0kKKwkgIHNwZWNpZmlj YXRpb24gdG8gd29yayAoaWUuIGFueXRoaW5nIGJlbG93IGEgc2luZ2xlIFBDSSBicmlkZ2UpLgor CisJICBNYW55IFBDSWUgcm9vdCBjb21wbGV4ZXMgZG8gbm90IHN1cHBvcnQgUDJQIHRyYW5zYWN0 aW9ucyBhbmQKKwkgIGl0J3MgaGFyZCB0byB0ZWxsIHdoaWNoIHN1cHBvcnQgaXQgYXQgYWxsLCBz byBhdCB0aGlzIHRpbWUsCisJICBQMlAgRE1BIHRyYW5zYXRpb25zIG11c3QgYmUgYmV0d2VlbiBk ZXZpY2VzIGJlaGluZCB0aGUgc2FtZSByb290CisJICBwb3J0LgorCisJICBJZiB1bnN1cmUsIHNh eSBOLgorCiBjb25maWcgUENJX0xBQkVMCiAJZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpCiAJ ZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVy cy9wY2kvTWFrZWZpbGUKaW5kZXggMWIyY2ZlNTFlOGQ3Li44NWY0YTcwM2IyYmUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0y Niw2ICsyNiw3IEBAIG9iai0kKENPTkZJR19QQ0lfU1lTQ0FMTCkJKz0gc3lzY2FsbC5vCiBvYmot JChDT05GSUdfUENJX1NUVUIpCQkrPSBwY2ktc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX1BGX1NU VUIpCSs9IHBjaS1wZi1zdHViLm8KIG9iai0kKENPTkZJR19QQ0lfRUNBTSkJCSs9IGVjYW0ubwor b2JqLSQoQ09ORklHX1BDSV9QMlBETUEpCSs9IHAycGRtYS5vCiBvYmotJChDT05GSUdfWEVOX1BD SURFVl9GUk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm8KIAogIyBFbmRwb2ludCBsaWJyYXJ5IG11 c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2VycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w Y2kvcDJwZG1hLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmMzMmNhYjIwZGQ3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvcGNpL3AycGRtYS5jCkBAIC0wLDAgKzEsNjMwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAorLyoKKyAqIFBDSSBQZWVyIDIgUGVlciBETUEgc3VwcG9ydC4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlCisgKiBDb3B5cmlnaHQg KGMpIDIwMTYtMjAxNywgTWljcm9zZW1pIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIw MTcsIENocmlzdG9waCBIZWxsd2lnCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJ bmMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS1wMnBkbWEuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ2Vu YWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1yZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bl cmNwdS1yZWZjb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxp bnV4L3NlcV9idWYuaD4KKworc3RydWN0IHBjaV9wMnBkbWEgeworCXN0cnVjdCBwZXJjcHVfcmVm IGRldm1hcF9yZWY7CisJc3RydWN0IGNvbXBsZXRpb24gZGV2bWFwX3JlZl9kb25lOworCXN0cnVj dCBnZW5fcG9vbCAqcG9vbDsKKwlib29sIHAycG1lbV9wdWJsaXNoZWQ7Cit9OworCitzdGF0aWMg dm9pZCBwY2lfcDJwZG1hX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCit7 CisJc3RydWN0IHBjaV9wMnBkbWEgKnAycCA9CisJCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBw Y2lfcDJwZG1hLCBkZXZtYXBfcmVmKTsKKworCWNvbXBsZXRlX2FsbCgmcDJwLT5kZXZtYXBfcmVm X2RvbmUpOworfQorCitzdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3BlcmNwdV9raWxsKHZvaWQgKmRh dGEpCit7CisJc3RydWN0IHBlcmNwdV9yZWYgKnJlZiA9IGRhdGE7CisKKwkvKgorCSAqIHBjaV9w MnBkbWFfYWRkX3Jlc291cmNlKCkgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcworCSAqIGJ5 IGEgZHJpdmVyIGFuZCBtYXkgcmVnaXN0ZXIgdGhlIHBlcmNwdV9raWxsIGRldm0gYWN0aW9uIG11 bHRpcGxlCisJICogdGltZXMuIFdlIG9ubHkgd2FudCB0aGUgZmlyc3QgYWN0aW9uIHRvIGFjdHVh bGx5IGtpbGwgdGhlCisJICogcGVyY3B1X3JlZi4KKwkgKi8KKwlpZiAocGVyY3B1X3JlZl9pc19k eWluZyhyZWYpKQorCQlyZXR1cm47CisKKwlwZXJjcHVfcmVmX2tpbGwocmVmKTsKK30KKworc3Rh dGljIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSBkYXRhOworCisJaWYgKCFwZGV2LT5wMnBkbWEpCisJCXJldHVybjsKKworCXdh aXRfZm9yX2NvbXBsZXRpb24oJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZl9kb25lKTsKKwlwZXJj cHVfcmVmX2V4aXQoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZik7CisKKwlnZW5fcG9vbF9kZXN0 cm95KHBkZXYtPnAycGRtYS0+cG9vbCk7CisJcGRldi0+cDJwZG1hID0gTlVMTDsKK30KKworc3Rh dGljIGludCBwY2lfcDJwZG1hX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBl cnJvciA9IC1FTk9NRU07CisJc3RydWN0IHBjaV9wMnBkbWEgKnAycDsKKworCXAycCA9IGRldm1f a3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnAycCksIEdGUF9LRVJORUwpOworCWlmICghcDJw KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXAycC0+cG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdF X1NISUZULCBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFwMnAtPnBvb2wpCisJCWdv dG8gb3V0OworCisJaW5pdF9jb21wbGV0aW9uKCZwMnAtPmRldm1hcF9yZWZfZG9uZSk7CisJZXJy b3IgPSBwZXJjcHVfcmVmX2luaXQoJnAycC0+ZGV2bWFwX3JlZiwKKwkJCXBjaV9wMnBkbWFfcGVy Y3B1X3JlbGVhc2UsIDAsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcG9v bF9kZXN0cm95OworCisJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJnBkZXYtPmRl diwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3Bv b2xfZGVzdHJveTsKKworCXBkZXYtPnAycGRtYSA9IHAycDsKKworCXJldHVybiAwOworCitvdXRf cG9vbF9kZXN0cm95OgorCWdlbl9wb29sX2Rlc3Ryb3kocDJwLT5wb29sKTsKK291dDoKKwlkZXZt X2tmcmVlKCZwZGV2LT5kZXYsIHAycCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHBj aV9wMnBkbWFfYWRkX3Jlc291cmNlIC0gYWRkIG1lbW9yeSBmb3IgdXNlIGFzIHAycCBtZW1vcnkK KyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFkZCB0aGUgbWVtb3J5IHRvCisgKiBAYmFyOiBQQ0kg QkFSIHRvIGFkZAorICogQHNpemU6IHNpemUgb2YgdGhlIG1lbW9yeSB0byBhZGQsIG1heSBiZSB6 ZXJvIHRvIHVzZSB0aGUgd2hvbGUgQkFSCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW50byB0aGUgUENJ IEJBUgorICoKKyAqIFRoZSBtZW1vcnkgd2lsbCBiZSBnaXZlbiBaT05FX0RFVklDRSBzdHJ1Y3Qg cGFnZXMgc28gdGhhdCBpdCBtYXkKKyAqIGJlIHVzZWQgd2l0aCBhbnkgRE1BIHJlcXVlc3QuCisg Ki8KK2ludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50 IGJhciwgc2l6ZV90IHNpemUsCisJCQkgICAgdTY0IG9mZnNldCkKK3sKKwlzdHJ1Y3QgZGV2X3Bh Z2VtYXAgKnBnbWFwOworCXZvaWQgKmFkZHI7CisJaW50IGVycm9yOworCisJaWYgKCEocGNpX3Jl c291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJiBJT1JFU09VUkNFX01FTSkpCisJCXJldHVybiAtRUlO VkFMOworCisJaWYgKG9mZnNldCA+PSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcikpCisJCXJl dHVybiAtRUlOVkFMOworCisJaWYgKCFzaXplKQorCQlzaXplID0gcGNpX3Jlc291cmNlX2xlbihw ZGV2LCBiYXIpIC0gb2Zmc2V0OworCisJaWYgKHNpemUgKyBvZmZzZXQgPiBwY2lfcmVzb3VyY2Vf bGVuKHBkZXYsIGJhcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwZGV2LT5wMnBkbWEp IHsKKwkJZXJyb3IgPSBwY2lfcDJwZG1hX3NldHVwKHBkZXYpOworCQlpZiAoZXJyb3IpCisJCQly ZXR1cm4gZXJyb3I7CisJfQorCisJcGdtYXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6 ZW9mKCpwZ21hcCksIEdGUF9LRVJORUwpOworCWlmICghcGdtYXApCisJCXJldHVybiAtRU5PTUVN OworCisJcGdtYXAtPnJlcy5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBiYXIpICsg b2Zmc2V0OworCXBnbWFwLT5yZXMuZW5kID0gcGdtYXAtPnJlcy5zdGFydCArIHNpemUgLSAxOwor CXBnbWFwLT5yZXMuZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKTsKKwlwZ21h cC0+cmVmID0gJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZjsKKwlwZ21hcC0+dHlwZSA9IE1FTU9S WV9ERVZJQ0VfUENJX1AyUERNQTsKKworCWFkZHIgPSBkZXZtX21lbXJlbWFwX3BhZ2VzKCZwZGV2 LT5kZXYsIHBnbWFwKTsKKwlpZiAoSVNfRVJSKGFkZHIpKSB7CisJCWVycm9yID0gUFRSX0VSUihh ZGRyKTsKKwkJZ290byBwZ21hcF9mcmVlOworCX0KKworCWVycm9yID0gZ2VuX3Bvb2xfYWRkX3Zp cnQocGRldi0+cDJwZG1hLT5wb29sLCAodW5zaWduZWQgbG9uZylhZGRyLAorCQkJcGNpX2J1c19h ZGRyZXNzKHBkZXYsIGJhcikgKyBvZmZzZXQsCisJCQlyZXNvdXJjZV9zaXplKCZwZ21hcC0+cmVz KSwgZGV2X3RvX25vZGUoJnBkZXYtPmRldikpOworCWlmIChlcnJvcikKKwkJZ290byBwZ21hcF9m cmVlOworCisJZXJyb3IgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoJnBkZXYtPmRldiwgcGNp X3AycGRtYV9wZXJjcHVfa2lsbCwKKwkJCQkJICAmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmKTsK KwlpZiAoZXJyb3IpCisJCWdvdG8gcGdtYXBfZnJlZTsKKworCXBjaV9pbmZvKHBkZXYsICJhZGRl ZCBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSAlcFJcbiIsCisJCSAmcGdtYXAtPnJlcyk7CisKKwly ZXR1cm4gMDsKKworcGdtYXBfZnJlZToKKwlkZXZyZXNfZnJlZShwZ21hcCk7CisJcmV0dXJuIGVy cm9yOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9hZGRfcmVzb3VyY2UpOworCisv KgorICogTm90ZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBhcmVudCBQQ0kgZGV2aWNlIHdp dGggYQorICogcmVmZXJlbmNlIHRha2VuLiBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWx5 IHRvIGRyb3AKKyAqIHRoZSByZWZlcmVuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAq ZmluZF9wYXJlbnRfcGNpX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmlj ZSAqcGFyZW50OworCisJZGV2ID0gZ2V0X2RldmljZShkZXYpOworCisJd2hpbGUgKGRldikgewor CQlpZiAoZGV2X2lzX3BjaShkZXYpKQorCQkJcmV0dXJuIHRvX3BjaV9kZXYoZGV2KTsKKworCQlw YXJlbnQgPSBnZXRfZGV2aWNlKGRldi0+cGFyZW50KTsKKwkJcHV0X2RldmljZShkZXYpOworCQlk ZXYgPSBwYXJlbnQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBDaGVjayBpZiBh IFBDSSBicmlkZ2UgaGFzIGl0cyBBQ1MgcmVkaXJlY3Rpb24gYml0cyBzZXQgdG8gcmVkaXJlY3Qg UDJQCisgKiBUTFBzIHVwc3RyZWFtIHZpYSBBQ1MuIFJldHVybnMgMSBpZiB0aGUgcGFja2V0cyB3 aWxsIGJlIHJlZGlyZWN0ZWQKKyAqIHVwc3RyZWFtLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGlj IGludCBwY2lfYnJpZGdlX2hhc19hY3NfcmVkaXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJ aW50IHBvczsKKwl1MTYgY3RybDsKKworCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBk ZXYsIFBDSV9FWFRfQ0FQX0lEX0FDUyk7CisJaWYgKCFwb3MpCisJCXJldHVybiAwOworCisJcGNp X3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX0FDU19DVFJMLCAmY3RybCk7CisKKwlp ZiAoY3RybCAmIChQQ0lfQUNTX1JSIHwgUENJX0FDU19DUiB8IFBDSV9BQ1NfRUMpKQorCQlyZXR1 cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXFfYnVmX3ByaW50X2J1c19k ZXZmbihzdHJ1Y3Qgc2VxX2J1ZiAqYnVmLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAo IWJ1ZikKKwkJcmV0dXJuOworCisJc2VxX2J1Zl9wcmludGYoYnVmLCAiJXM7IiwgcGNpX25hbWUo cGRldikpOworfQorCisvKgorICogRmluZCB0aGUgZGlzdGFuY2UgdGhyb3VnaCB0aGUgbmVhcmVz dCBjb21tb24gdXBzdHJlYW0gYnJpZGdlIGJldHdlZW4KKyAqIHR3byBQQ0kgZGV2aWNlcy4KKyAq CisgKiBJZiB0aGUgdHdvIGRldmljZXMgYXJlIHRoZSBzYW1lIGRldmljZSB0aGVuIDAgd2lsbCBi ZSByZXR1cm5lZC4KKyAqCisgKiBJZiB0aGVyZSBhcmUgdHdvIHZpcnR1YWwgZnVuY3Rpb25zIG9m IHRoZSBzYW1lIGRldmljZSBiZWhpbmQgdGhlIHNhbWUKKyAqIGJyaWRnZSBwb3J0IHRoZW4gMiB3 aWxsIGJlIHJldHVybmVkIChvbmUgc3RlcCBkb3duIHRvIHRoZSBQQ0llIHN3aXRjaCwKKyAqIHRo ZW4gb25lIHN0ZXAgYmFjayB0byB0aGUgc2FtZSBkZXZpY2UpLgorICoKKyAqIEluIHRoZSBjYXNl IHdoZXJlIHR3byBkZXZpY2VzIGFyZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgUENJZSBzd2l0Y2gs IHRoZQorICogdmFsdWUgNCB3aWxsIGJlIHJldHVybmVkLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRo ZSBmb2xsb3dpbmcgUENJIHRyZWU6CisgKgorICogICAgIC0rICBSb290IFBvcnQKKyAqICAgICAg XCsgU3dpdGNoIFVwc3RyZWFtIFBvcnQKKyAqICAgICAgICstKyBTd2l0Y2ggRG93bnN0cmVhbSBQ b3J0CisgKiAgICAgICArIFwtIERldmljZSBBCisgKiAgICAgICBcLSsgU3dpdGNoIERvd25zdHJl YW0gUG9ydAorICogICAgICAgICBcLSBEZXZpY2UgQgorICoKKyAqIFRoZSBkaXN0YW5jZSBpcyA0 IGJlY2F1c2Ugd2UgdHJhdmVyc2UgZnJvbSBEZXZpY2UgQSB0aHJvdWdoIHRoZSBkb3duc3RyZWFt CisgKiBwb3J0IG9mIHRoZSBzd2l0Y2gsIHRvIHRoZSBjb21tb24gdXBzdHJlYW0gcG9ydCwgYmFj ayB1cCB0byB0aGUgc2Vjb25kCisgKiBkb3duc3RyZWFtIHBvcnQgYW5kIHRoZW4gdG8gRGV2aWNl IEIuCisgKgorICogQW55IHR3byBkZXZpY2VzIHRoYXQgZG9uJ3QgaGF2ZSBhIGNvbW1vbiB1cHN0 cmVhbSBicmlkZ2Ugd2lsbCByZXR1cm4gLTEuCisgKiBJbiB0aGlzIHdheSBkZXZpY2VzIG9uIHNl cGFyYXRlIFBDSWUgcm9vdCBwb3J0cyB3aWxsIGJlIHJlamVjdGVkLCB3aGljaAorICogaXMgd2hh dCB3ZSB3YW50IGZvciBwZWVyLXRvLXBlZXIgc2VlaW5nIGVhY2ggUENJZSByb290IHBvcnQgZGVm aW5lcyBhCisgKiBzZXBhcmF0ZSBoaWVyYXJjaHkgZG9tYWluIGFuZCB0aGVyZSdzIG5vIHdheSB0 byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcm9vdAorICogY29tcGxleCBzdXBwb3J0cyBmb3J3YXJk aW5nIGJldHdlZW4gdGhlbS4KKyAqCisgKiBJbiB0aGUgY2FzZSB3aGVyZSB0d28gZGV2aWNlcyBh cmUgY29ubmVjdGVkIHRvIGRpZmZlcmVudCBQQ0llIHN3aXRjaGVzLAorICogdGhpcyBmdW5jdGlv biB3aWxsIHN0aWxsIHJldHVybiBhIHBvc2l0aXZlIGRpc3RhbmNlIGFzIGxvbmcgYXMgYm90aAor ICogc3dpdGNoZXMgZXZlbnR1YWxseSBoYXZlIGEgY29tbW9uIHVwc3RyZWFtIGJyaWRnZS4gTm90 ZSB0aGlzIGNvdmVycworICogdGhlIGNhc2Ugb2YgdXNpbmcgbXVsdGlwbGUgUENJZSBzd2l0Y2hl cyB0byBhY2hpZXZlIGEgZGVzaXJlZCBsZXZlbCBvZgorICogZmFuLW91dCBmcm9tIGEgcm9vdCBw b3J0LiBUaGUgZXhhY3QgZGlzdGFuY2Ugd2lsbCBiZSBhIGZ1bmN0aW9uIG9mIHRoZQorICogbnVt YmVyIG9mIHN3aXRjaGVzIGJldHdlZW4gRGV2aWNlIEEgYW5kIERldmljZSBCLgorICoKKyAqIElm IGEgYnJpZGdlIHdoaWNoIGhhcyBhbnkgQUNTIHJlZGlyZWN0aW9uIGJpdHMgc2V0IGlzIGluIHRo ZSBwYXRoCisgKiB0aGVuIHRoaXMgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIC0yLiBUaGlzIGlzIHNv IHdlIHJlamVjdCBhbnkKKyAqIGNhc2VzIHdoZXJlIHRoZSBUTFBzIGFyZSBmb3J3YXJkZWQgdXAg aW50byB0aGUgcm9vdCBjb21wbGV4LgorICogSW4gdGhpcyBjYXNlLCBhIGxpc3Qgb2YgYWxsIGlu ZnJpbmdpbmcgYnJpZGdlIGFkZHJlc3NlcyB3aWxsIGJlCisgKiBwb3B1bGF0ZWQgaW4gYWNzX2xp c3QgKGFzc3VtaW5nIGl0J3Mgbm9uLW51bGwpIGZvciBwcmludGsgcHVycG9zZXMuCisgKi8KK3N0 YXRpYyBpbnQgdXBzdHJlYW1fYnJpZGdlX2Rpc3RhbmNlKHN0cnVjdCBwY2lfZGV2ICphLAorCQkJ CSAgICBzdHJ1Y3QgcGNpX2RldiAqYiwKKwkJCQkgICAgc3RydWN0IHNlcV9idWYgKmFjc19saXN0 KQoreworCWludCBkaXN0X2EgPSAwOworCWludCBkaXN0X2IgPSAwOworCXN0cnVjdCBwY2lfZGV2 ICpiYiA9IE5VTEw7CisJaW50IGFjc19jbnQgPSAwOworCisJLyoKKwkgKiBOb3RlLCB3ZSBkb24n dCBuZWVkIHRvIHRha2UgcmVmZXJlbmNlcyB0byBkZXZpY2VzIHJldHVybmVkIGJ5CisJICogcGNp X3Vwc3RyZWFtX2JyaWRnZSgpIHNlZWluZyB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIGEgY2hpbGQK KwkgKiBkZXZpY2Ugd2hpY2ggd2lsbCBhbHJlYWR5IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHVw c3RyZWFtIGJyaWRnZS4KKwkgKi8KKworCXdoaWxlIChhKSB7CisJCWRpc3RfYiA9IDA7CisKKwkJ aWYgKHBjaV9icmlkZ2VfaGFzX2Fjc19yZWRpcihhKSkgeworCQkJc2VxX2J1Zl9wcmludF9idXNf ZGV2Zm4oYWNzX2xpc3QsIGEpOworCQkJYWNzX2NudCsrOworCQl9CisKKwkJYmIgPSBiOworCisJ CXdoaWxlIChiYikgeworCQkJaWYgKGEgPT0gYmIpCisJCQkJZ290byBjaGVja19iX3BhdGhfYWNz OworCisJCQliYiA9IHBjaV91cHN0cmVhbV9icmlkZ2UoYmIpOworCQkJZGlzdF9iKys7CisJCX0K KworCQlhID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShhKTsKKwkJZGlzdF9hKys7CisJfQorCisJcmV0 dXJuIC0xOworCitjaGVja19iX3BhdGhfYWNzOgorCWJiID0gYjsKKworCXdoaWxlIChiYikgewor CQlpZiAoYSA9PSBiYikKKwkJCWJyZWFrOworCisJCWlmIChwY2lfYnJpZGdlX2hhc19hY3NfcmVk aXIoYmIpKSB7CisJCQlzZXFfYnVmX3ByaW50X2J1c19kZXZmbihhY3NfbGlzdCwgYmIpOworCQkJ YWNzX2NudCsrOworCQl9CisKKwkJYmIgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKGJiKTsKKwl9CisK KwlpZiAoYWNzX2NudCkKKwkJcmV0dXJuIC0yOworCisJcmV0dXJuIGRpc3RfYSArIGRpc3RfYjsK K30KKworc3RhdGljIGludCB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Vfd2FybihzdHJ1Y3QgcGNp X2RldiAqcHJvdmlkZXIsCisJCQkJCSBzdHJ1Y3QgcGNpX2RldiAqY2xpZW50KQoreworCXN0cnVj dCBzZXFfYnVmIGFjc19saXN0OworCWludCByZXQ7CisKKwlzZXFfYnVmX2luaXQoJmFjc19saXN0 LCBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCksIFBBR0VfU0laRSk7CisJaWYgKCFhY3Nf bGlzdC5idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdXBzdHJlYW1fYnJpZGdl X2Rpc3RhbmNlKHByb3ZpZGVyLCBjbGllbnQsICZhY3NfbGlzdCk7CisJaWYgKHJldCA9PSAtMikg eworCQlwY2lfd2FybihjbGllbnQsICJjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIERN QSBhcyBBQ1MgcmVkaXJlY3QgaXMgc2V0IGJldHdlZW4gdGhlIGNsaWVudCBhbmQgcHJvdmlkZXIg KCVzKVxuIiwKKwkJCSBwY2lfbmFtZShwcm92aWRlcikpOworCQkvKiBEcm9wIGZpbmFsIHNlbWlj b2xvbiAqLworCQlhY3NfbGlzdC5idWZmZXJbYWNzX2xpc3QubGVuLTFdID0gMDsKKwkJcGNpX3dh cm4oY2xpZW50LCAidG8gZGlzYWJsZSBBQ1MgcmVkaXJlY3QgZm9yIHRoaXMgcGF0aCwgYWRkIHRo ZSBrZXJuZWwgcGFyYW1ldGVyOiBwY2k9ZGlzYWJsZV9hY3NfcmVkaXI9JXNcbiIsCisJCQkgYWNz X2xpc3QuYnVmZmVyKTsKKworCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQlwY2lfd2FybihjbGll bnQsICJjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIERNQSBhcyB0aGUgY2xpZW50IGFu ZCBwcm92aWRlciAoJXMpIGRvIG5vdCBzaGFyZSBhbiB1cHN0cmVhbSBicmlkZ2VcbiIsCisJCQkg cGNpX25hbWUocHJvdmlkZXIpKTsKKwl9CisKKwlrZnJlZShhY3NfbGlzdC5idWZmZXIpOworCisJ cmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkgLSBEZXRl cm1pdmUgdGhlIGN1bXVsYXRpdmUgZGlzdGFuY2UgYmV0d2VlbgorICoJYSBwMnBkbWEgcHJvdmlk ZXIgYW5kIHRoZSBjbGllbnRzIGluIHVzZS4KKyAqIEBwcm92aWRlcjogcDJwZG1hIHByb3ZpZGVy IHRvIGNoZWNrIGFnYWluc3QgdGhlIGNsaWVudCBsaXN0CisgKiBAY2xpZW50czogYXJyYXkgb2Yg ZGV2aWNlcyB0byBjaGVjayAoTlVMTC10ZXJtaW5hdGVkKQorICogQG51bV9jaWVsbnRzOiBudW1i ZXIgb2YgY2xpZW50cyBpbiB0aGUgYXJyYXkKKyAqIEB2ZXJib3NlOiBpZiB0cnVlLCBwcmludCB3 YXJuaW5ncyBmb3IgZGV2aWNlcyB3aGVuIHdlIHJldHVybiAtMQorICoKKyAqIFJldHVybnMgLTEg aWYgYW55IG9mIHRoZSBjbGllbnRzIGFyZSBub3QgY29tcGF0aWJsZSAoYmVoaW5kIHRoZSBzYW1l CisgKiByb290IHBvcnQgYXMgdGhlIHByb3ZpZGVyKSwgb3RoZXJ3aXNlIHJldHVybnMgYSBwb3Np dGl2ZSBudW1iZXIgd2hlcmUKKyAqIGEgbG93ZXIgbnVtYmVyIGlzIHRoZSBwcmVmZXJyYWJsZSBj aG9pY2UuIChJZiB0aGVyZSdzIG9uZSBjbGllbnQKKyAqIHRoYXQncyB0aGUgc2FtZSBhcyB0aGUg cHJvdmlkZXIgaXQgd2lsbCByZXR1cm4gMCwgd2hpY2ggaXMgYmVzdCBjaG9pY2UpLgorICoKKyAq IEZvciBub3csICJjb21wYXRpYmxlIiBtZWFucyB0aGUgcHJvdmlkZXIgYW5kIHRoZSBjbGllbnRz IGFyZSBhbGwgYmVoaW5kCisgKiB0aGUgc2FtZSBQQ0kgcm9vdCBwb3J0LiBUaGlzIGN1dHMgb3V0 IGNhc2VzIHRoYXQgbWF5IHdvcmsgYnV0IGlzIHNhZmVzdAorICogZm9yIHRoZSB1c2VyLiBGdXR1 cmUgd29yayBjYW4gZXhwYW5kIHRoaXMgdG8gd2hpdGUtbGlzdCByb290IGNvbXBsZXhlcyB0aGF0 CisgKiBjYW4gc2FmZWx5IGZvcndhcmQgYmV0d2VlbiBlYWNoIHBvcnRzLgorICovCitpbnQgcGNp X3AycGRtYV9kaXN0YW5jZV9tYW55KHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwgc3RydWN0IGRl dmljZSAqKmNsaWVudHMsCisJCQkgICAgIGludCBudW1fY2xpZW50cywgYm9vbCB2ZXJib3NlKQor eworCWJvb2wgbm90X3N1cHBvcnRlZCA9IGZhbHNlOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfY2xp ZW50OworCWludCBkaXN0YW5jZSA9IDA7CisJaW50IGksIHJldDsKKworCWlmIChudW1fY2xpZW50 cyA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaWVudHM7IGkr KykgeworCQlwY2lfY2xpZW50ID0gZmluZF9wYXJlbnRfcGNpX2RldihjbGllbnRzW2ldKTsKKwkJ aWYgKCFwY2lfY2xpZW50KSB7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlkZXZfd2FybihjbGllbnRz W2ldLAorCQkJCQkgImNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgRE1BIGFzIGl0IGlz IG5vdCBhIFBDSSBkZXZpY2VcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHZlcmJv c2UpCisJCQlyZXQgPSB1cHN0cmVhbV9icmlkZ2VfZGlzdGFuY2Vfd2Fybihwcm92aWRlciwKKwkJ CQkJCQkgICAgcGNpX2NsaWVudCk7CisJCWVsc2UKKwkJCXJldCA9IHVwc3RyZWFtX2JyaWRnZV9k aXN0YW5jZShwcm92aWRlciwgcGNpX2NsaWVudCwKKwkJCQkJCSAgICAgICBOVUxMKTsKKworCQlw Y2lfZGV2X3B1dChwY2lfY2xpZW50KTsKKworCQlpZiAocmV0IDwgMCkKKwkJCW5vdF9zdXBwb3J0 ZWQgPSB0cnVlOworCisJCWlmIChub3Rfc3VwcG9ydGVkICYmICF2ZXJib3NlKQorCQkJYnJlYWs7 CisKKwkJZGlzdGFuY2UgKz0gcmV0OworCX0KKworCWlmIChub3Rfc3VwcG9ydGVkKQorCQlyZXR1 cm4gLTE7CisKKwlyZXR1cm4gZGlzdGFuY2U7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJw ZG1hX2Rpc3RhbmNlX21hbnkpOworCisvKioKKyAqIHBjaV9oYXNfcDJwbWVtIC0gY2hlY2sgaWYg YSBnaXZlbiBQQ0kgZGV2aWNlIGhhcyBwdWJsaXNoZWQgYW55IHAycG1lbQorICogQHBkZXY6IFBD SSBkZXZpY2UgdG8gY2hlY2sKKyAqLworYm9vbCBwY2lfaGFzX3AycG1lbShzdHJ1Y3QgcGNpX2Rl diAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+cDJwZG1hICYmIHBkZXYtPnAycGRtYS0+cDJwbWVt X3B1Ymxpc2hlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9oYXNfcDJwbWVtKTsKKworLyoq CisgKiBwY2lfcDJwbWVtX2ZpbmQgLSBmaW5kIGEgcGVlci10by1wZWVyIERNQSBtZW1vcnkgZGV2 aWNlIGNvbXBhdGlibGUgd2l0aAorICoJdGhlIHNwZWNpZmllZCBsaXN0IG9mIGNsaWVudHMgYW5k IHNob3J0ZXN0IGRpc3RhbmNlIChhcyBkZXRlcm1pbmVkCisgKglieSBwY2lfcDJwbWVtX2RtYSgp KQorICogQGNsaWVudHM6IGFycmF5IG9mIGRldmljZXMgdG8gY2hlY2sgKE5VTEwtdGVybWluYXRl ZCkKKyAqIEBudW1fY2xpZW50czogbnVtYmVyIG9mIGNsaWVudCBkZXZpY2VzIGluIHRoZSBsaXN0 CisgKgorICogSWYgbXVsdGlwbGUgZGV2aWNlcyBhcmUgYmVoaW5kIHRoZSBzYW1lIHN3aXRjaCwg dGhlIG9uZSAiY2xvc2VzdCIgdG8gdGhlCisgKiBjbGllbnQgZGV2aWNlcyBpbiB1c2Ugd2lsbCBi ZSBjaG9zZW4gZmlyc3QuIChTbyBpZiBvbmUgb2YgdGhlIHByb3ZpZGVycyBhcmUKKyAqIHRoZSBz YW1lIGFzIG9uZSBvZiB0aGUgY2xpZW50cywgdGhhdCBwcm92aWRlciB3aWxsIGJlIHVzZWQgYWhl YWQgb2YgYW55CisgKiBvdGhlciBwcm92aWRlcnMgdGhhdCBhcmUgdW5yZWxhdGVkKS4gSWYgbXVs dGlwbGUgcHJvdmlkZXJzIGFyZSBhbiBlcXVhbAorICogZGlzdGFuY2UgYXdheSwgb25lIHdpbGwg YmUgY2hvc2VuIGF0IHJhbmRvbS4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgUENJ IGRldmljZSB3aXRoIGEgcmVmZXJlbmNlIHRha2VuICh1c2UgcGNpX2Rldl9wdXQKKyAqIHRvIHJl dHVybiB0aGUgcmVmZXJlbmNlKSBvciBOVUxMIGlmIG5vIGNvbXBhdGlibGUgZGV2aWNlIGlzIGZv dW5kLiBUaGUKKyAqIGZvdW5kIHByb3ZpZGVyIHdpbGwgYWxzbyBiZSBhc3NpZ25lZCB0byB0aGUg Y2xpZW50IGxpc3QuCisgKi8KK3N0cnVjdCBwY2lfZGV2ICpwY2lfcDJwbWVtX2ZpbmRfbWFueShz dHJ1Y3QgZGV2aWNlICoqY2xpZW50cywgaW50IG51bV9jbGllbnRzKQoreworCXN0cnVjdCBwY2lf ZGV2ICpwZGV2ID0gTlVMTDsKKwlpbnQgZGlzdGFuY2U7CisJaW50IGNsb3Nlc3RfZGlzdGFuY2Ug PSBJTlRfTUFYOworCXN0cnVjdCBwY2lfZGV2ICoqY2xvc2VzdF9wZGV2czsKKwlpbnQgZGV2X2Nu dCA9IDA7CisJY29uc3QgaW50IG1heF9kZXZzID0gUEFHRV9TSVpFIC8gc2l6ZW9mKCpjbG9zZXN0 X3BkZXZzKTsKKwlpbnQgaTsKKworCWNsb3Nlc3RfcGRldnMgPSBrbWFsbG9jKFBBR0VfU0laRSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFjbG9zZXN0X3BkZXZzKQorCQlyZXR1cm4gTlVMTDsKKworCXdo aWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYp KSkgeworCQlpZiAoIXBjaV9oYXNfcDJwbWVtKHBkZXYpKQorCQkJY29udGludWU7CisKKwkJZGlz dGFuY2UgPSBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkocGRldiwgY2xpZW50cywKKwkJCQkJCSAg ICBudW1fY2xpZW50cywgZmFsc2UpOworCQlpZiAoZGlzdGFuY2UgPCAwIHx8IGRpc3RhbmNlID4g Y2xvc2VzdF9kaXN0YW5jZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkaXN0YW5jZSA9PSBjbG9z ZXN0X2Rpc3RhbmNlICYmIGRldl9jbnQgPj0gbWF4X2RldnMpCisJCQljb250aW51ZTsKKworCQlp ZiAoZGlzdGFuY2UgPCBjbG9zZXN0X2Rpc3RhbmNlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGV2 X2NudDsgaSsrKQorCQkJCXBjaV9kZXZfcHV0KGNsb3Nlc3RfcGRldnNbaV0pOworCisJCQlkZXZf Y250ID0gMDsKKwkJCWNsb3Nlc3RfZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwkJfQorCisJCWNsb3Nl c3RfcGRldnNbZGV2X2NudCsrXSA9IHBjaV9kZXZfZ2V0KHBkZXYpOworCX0KKworCWlmIChkZXZf Y250KQorCQlwZGV2ID0gcGNpX2Rldl9nZXQoY2xvc2VzdF9wZGV2c1twcmFuZG9tX3UzMl9tYXgo ZGV2X2NudCldKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfY250OyBpKyspCisJCXBjaV9kZXZf cHV0KGNsb3Nlc3RfcGRldnNbaV0pOworCisJa2ZyZWUoY2xvc2VzdF9wZGV2cyk7CisJcmV0dXJu IHBkZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwbWVtX2ZpbmRfbWFueSk7CisKKy8q KgorICogcGNpX2FsbG9jX3AycF9tZW0gLSBhbGxvY2F0ZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9y eQorICogQHBkZXY6IHRoZSBkZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAqIEBzaXpl OiBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKKyAqCisgKiBSZXR1cm5zIHRoZSBhbGxvY2F0 ZWQgbWVtb3J5IG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK3ZvaWQgKnBjaV9hbGxvY19wMnBtZW0o c3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldDsKKworCWlm ICh1bmxpa2VseSghcGRldi0+cDJwZG1hKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodW5saWtl bHkoIXBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZikpKQor CQlyZXR1cm4gTlVMTDsKKworCXJldCA9ICh2b2lkICopZ2VuX3Bvb2xfYWxsb2MocGRldi0+cDJw ZG1hLT5wb29sLCBzaXplKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkKKwkJcGVyY3B1X3JlZl9w dXQoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZik7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JU X1NZTUJPTF9HUEwocGNpX2FsbG9jX3AycG1lbSk7CisKKy8qKgorICogcGNpX2ZyZWVfcDJwbWVt IC0gZnJlZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeQorICogQHBkZXY6IHRoZSBkZXZpY2UgdGhl IG1lbW9yeSB3YXMgYWxsb2NhdGVkIGZyb20KKyAqIEBhZGRyOiBhZGRyZXNzIG9mIHRoZSBtZW1v cnkgdGhhdCB3YXMgYWxsb2NhdGVkCisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2Fz IGFsbG9jYXRlZAorICovCit2b2lkIHBjaV9mcmVlX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRl diwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCit7CisJZ2VuX3Bvb2xfZnJlZShwZGV2LT5wMnBk bWEtPnBvb2wsICh1aW50cHRyX3QpYWRkciwgc2l6ZSk7CisJcGVyY3B1X3JlZl9wdXQoJnBkZXYt PnAycGRtYS0+ZGV2bWFwX3JlZik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZnJlZV9wMnBt ZW0pOworCisvKioKKyAqIHBjaV92aXJ0X3RvX2J1cyAtIHJldHVybiB0aGUgUENJIGJ1cyBhZGRy ZXNzIGZvciBhIGdpdmVuIHZpcnR1YWwKKyAqCWFkZHJlc3Mgb2J0YWluZWQgd2l0aCBwY2lfYWxs b2NfcDJwbWVtKCkKKyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRoZSBtZW1vcnkgd2FzIGFsbG9jYXRl ZCBmcm9tCisgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRl ZAorICovCitwY2lfYnVzX2FkZHJfdCBwY2lfcDJwbWVtX3ZpcnRfdG9fYnVzKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCB2b2lkICphZGRyKQoreworCWlmICghYWRkcikKKwkJcmV0dXJuIDA7CisJaWYg KCFwZGV2LT5wMnBkbWEpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBOb3RlOiB3aGVuIHdlIGFk ZGVkIHRoZSBtZW1vcnkgdG8gdGhlIHBvb2wgd2UgdXNlZCB0aGUgUENJCisJICogYnVzIGFkZHJl c3MgYXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MuIFNvIGdlbl9wb29sX3ZpcnRfdG9fcGh5cygpCisJ ICogYWN0dWFsbHkgcmV0dXJucyB0aGUgYnVzIGFkZHJlc3MgZGVzcGl0ZSB0aGUgbWlzbGVhZGlu ZyBuYW1lLgorCSAqLworCXJldHVybiBnZW5fcG9vbF92aXJ0X3RvX3BoeXMocGRldi0+cDJwZG1h LT5wb29sLCAodW5zaWduZWQgbG9uZylhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9w MnBtZW1fdmlydF90b19idXMpOworCisvKioKKyAqIHBjaV9wMnBtZW1fYWxsb2Nfc2dsIC0gYWxs b2NhdGUgcGVlci10by1wZWVyIERNQSBtZW1vcnkgaW4gYSBzY2F0dGVybGlzdAorICogQHBkZXY6 IHRoZSBkZXZpY2UgdG8gYWxsb2NhdGUgbWVtb3J5IGZyb20KKyAqIEBzZ2w6IHRoZSBhbGxvY2F0 ZWQgc2NhdHRlcmxpc3QKKyAqIEBuZW50czogdGhlIG51bWJlciBvZiBTRyBlbnRyaWVzIGluIHRo ZSBsaXN0CisgKiBAbGVuZ3RoOiBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKKyAqCisgKiBS ZXR1cm5zIDAgb24gc3VjY2VzcworICovCitzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnBjaV9wMnBtZW1f YWxsb2Nfc2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkgdW5zaWduZWQgaW50ICpuZW50 cywgdTMyIGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXZvaWQgKmFkZHI7 CisKKwlzZyA9IGt6YWxsb2Moc2l6ZW9mKCpzZyksIEdGUF9LRVJORUwpOworCWlmICghc2cpCisJ CXJldHVybiBOVUxMOworCisJc2dfaW5pdF90YWJsZShzZywgMSk7CisKKwlhZGRyID0gcGNpX2Fs bG9jX3AycG1lbShwZGV2LCBsZW5ndGgpOworCWlmICghYWRkcikKKwkJZ290byBvdXRfZnJlZV9z ZzsKKworCXNnX3NldF9idWYoc2csIGFkZHIsIGxlbmd0aCk7CisJKm5lbnRzID0gMTsKKwlyZXR1 cm4gc2c7CisKK291dF9mcmVlX3NnOgorCWtmcmVlKHNnKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKHBjaV9wMnBtZW1fYWxsb2Nfc2dsKTsKKworLyoqCisgKiBwY2lfcDJw bWVtX2ZyZWVfc2dsIC0gZnJlZSBhIHNjYXR0ZXJsaXN0IGFsbG9jYXRlZCBieSBwY2lfcDJwbWVt X2FsbG9jX3NnbCgpCisgKiBAcGRldjogdGhlIGRldmljZSB0byBhbGxvY2F0ZSBtZW1vcnkgZnJv bQorICogQHNnbDogdGhlIGFsbG9jYXRlZCBzY2F0dGVybGlzdAorICogQG5lbnRzOiB0aGUgbnVt YmVyIG9mIFNHIGVudHJpZXMgaW4gdGhlIGxpc3QKKyAqLwordm9pZCBwY2lfcDJwbWVtX2ZyZWVf c2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCkKK3sKKwlz dHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCBjb3VudDsKKworCWZvcl9lYWNoX3NnKHNnbCwg c2csIElOVF9NQVgsIGNvdW50KSB7CisJCWlmICghc2cpCisJCQlicmVhazsKKworCQlwY2lfZnJl ZV9wMnBtZW0ocGRldiwgc2dfdmlydChzZyksIHNnLT5sZW5ndGgpOworCX0KKwlrZnJlZShzZ2wp OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycG1lbV9mcmVlX3NnbCk7CisKKy8qKgorICog cGNpX3AycG1lbV9wdWJsaXNoIC0gcHVibGlzaCB0aGUgcGVlci10by1wZWVyIERNQSBtZW1vcnkg Zm9yIHVzZSBieQorICoJb3RoZXIgZGV2aWNlcyB3aXRoIHBjaV9wMnBtZW1fZmluZCgpCisgKiBA cGRldjogdGhlIGRldmljZSB3aXRoIHBlZXItdG8tcGVlciBETUEgbWVtb3J5IHRvIHB1Ymxpc2gK KyAqIEBwdWJsaXNoOiBzZXQgdG8gdHJ1ZSB0byBwdWJsaXNoIHRoZSBtZW1vcnksIGZhbHNlIHRv IHVucHVibGlzaCBpdAorICoKKyAqIFB1Ymxpc2hlZCBtZW1vcnkgY2FuIGJlIHVzZWQgYnkgb3Ro ZXIgUENJIGRldmljZSBkcml2ZXJzIGZvcgorICogcGVlci0yLXBlZXIgRE1BIG9wZXJhdGlvbnMu IE5vbi1wdWJsaXNoZWQgbWVtb3J5IGlzIHJlc2VydmVkIGZvcgorICogZXhsdXNpdmUgdXNlIG9m IHRoZSBkZXZpY2UgZHJpdmVyIHRoYXQgcmVnaXN0ZXJzIHRoZSBwZWVyLXRvLXBlZXIKKyAqIG1l bW9yeS4KKyAqLwordm9pZCBwY2lfcDJwbWVtX3B1Ymxpc2goc3RydWN0IHBjaV9kZXYgKnBkZXYs IGJvb2wgcHVibGlzaCkKK3sKKwlpZiAocHVibGlzaCAmJiAhcGRldi0+cDJwZG1hKQorCQlyZXR1 cm47CisKKwlwZGV2LT5wMnBkbWEtPnAycG1lbV9wdWJsaXNoZWQgPSBwdWJsaXNoOworfQorRVhQ T1JUX1NZTUJPTF9HUEwocGNpX3AycG1lbV9wdWJsaXNoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvbWVtcmVtYXAuaCBiL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaAppbmRleCBmOTFmOWU3 NjM1NTcuLjk1NTMzNzBlYmRhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1yZW1hcC5o CisrKyBiL2luY2x1ZGUvbGludXgvbWVtcmVtYXAuaApAQCAtNTMsMTEgKzUzLDE2IEBAIHN0cnVj dCB2bWVtX2FsdG1hcCB7CiAgKiB3YWtldXAgZXZlbnQgd2hlbmV2ZXIgYSBwYWdlIGlzIHVucGlu bmVkIGFuZCBiZWNvbWVzIGlkbGUuIFRoaXMKICAqIHdha2V1cCBpcyB1c2VkIHRvIGNvb3JkaW5h dGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZSBtYW5hZ2VtZW50IChleDoKICAqIGZzIHRydW5jYXRl L2hvbGUgcHVuY2gpIHZzIHBpbm5lZCBwYWdlcyAoZXg6IGRldmljZSBkbWEpLgorICoKKyAqIE1F TU9SWV9ERVZJQ0VfUENJX1AyUERNQToKKyAqIERldmljZSBtZW1vcnkgcmVzaWRpbmcgaW4gYSBQ Q0kgQkFSIGludGVuZGVkIGZvciB1c2Ugd2l0aCBQZWVyLXRvLVBlZXIKKyAqIHRyYW5zYWN0aW9u cy4KICAqLwogZW51bSBtZW1vcnlfdHlwZSB7CiAJTUVNT1JZX0RFVklDRV9QUklWQVRFID0gMSwK IAlNRU1PUllfREVWSUNFX1BVQkxJQywKIAlNRU1PUllfREVWSUNFX0ZTX0RBWCwKKwlNRU1PUllf REVWSUNFX1BDSV9QMlBETUEsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9t bS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IGE2MWViZThhZDRjYS4uMjA1NWRmNDEyYTc3 IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5o CkBAIC04OTAsNiArODkwLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHVibGlj X3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCiAJCXBhZ2UtPnBnbWFwLT50eXBlID09IE1F TU9SWV9ERVZJQ0VfUFVCTElDOwogfQogCisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKK3N0YXRp YyBpbmxpbmUgYm9vbCBpc19wY2lfcDJwZG1hX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2Up Cit7CisJcmV0dXJuIGlzX3pvbmVfZGV2aWNlX3BhZ2UocGFnZSkgJiYKKwkJcGFnZS0+cGdtYXAt PnR5cGUgPT0gTUVNT1JZX0RFVklDRV9QQ0lfUDJQRE1BOworfQorI2Vsc2UgLyogQ09ORklHX1BD SV9QMlBETUEgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wY2lfcDJwZG1hX3BhZ2UoY29uc3Qg c3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmIC8qIENPTkZJ R19QQ0lfUDJQRE1BICovCisKICNlbHNlIC8qIENPTkZJR19ERVZfUEFHRU1BUF9PUFMgKi8KIHN0 YXRpYyBpbmxpbmUgdm9pZCBkZXZfcGFnZW1hcF9nZXRfb3BzKHZvaWQpCiB7CkBAIC05MTMsNiAr OTI2LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHVibGljX3BhZ2UoY29uc3Qg c3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQorCitzdGF0aWMgaW5saW5l IGJvb2wgaXNfcGNpX3AycGRtYV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJl dHVybiBmYWxzZTsKK30KICNlbmRpZiAvKiBDT05GSUdfREVWX1BBR0VNQVBfT1BTICovCiAKIHN0 YXRpYyBpbmxpbmUgdm9pZCBnZXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oIGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43YmRhYWNmZDU4OTIKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaApAQCAtMCwwICsxLDky IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFBDSSBQ ZWVyIDIgUGVlciBETUEgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwg TG9nYW4gR3VudGhvcnBlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgTWljcm9zZW1pIENv cnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIENocmlzdG9waCBIZWxsd2lnCisgKiBD b3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuCisgKi8KKworI2lmbmRlZiBfTElOVVhf UENJX1AyUERNQV9ICisjZGVmaW5lIF9MSU5VWF9QQ0lfUDJQRE1BX0gKKworI2luY2x1ZGUgPGxp bnV4L3BjaS5oPgorCitzdHJ1Y3QgYmxvY2tfZGV2aWNlOworc3RydWN0IHNjYXR0ZXJsaXN0Owor CisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKK2ludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShz dHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsCisJCXU2NCBvZmZzZXQp OworaW50IHBjaV9wMnBkbWFfZGlzdGFuY2VfbWFueShzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIs IHN0cnVjdCBkZXZpY2UgKipjbGllbnRzLAorCQkJICAgICBpbnQgbnVtX2NsaWVudHMsIGJvb2wg dmVyYm9zZSk7Citib29sIHBjaV9oYXNfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0 cnVjdCBwY2lfZGV2ICpwY2lfcDJwbWVtX2ZpbmRfbWFueShzdHJ1Y3QgZGV2aWNlICoqY2xpZW50 cywgaW50IG51bV9jbGllbnRzKTsKK3ZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBjaV9k ZXYgKnBkZXYsIHNpemVfdCBzaXplKTsKK3ZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lf ZGV2ICpwZGV2LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7CitwY2lfYnVzX2FkZHJfdCBwY2lf cDJwbWVtX3ZpcnRfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRyKTsKK3N0 cnVjdCBzY2F0dGVybGlzdCAqcGNpX3AycG1lbV9hbGxvY19zZ2woc3RydWN0IHBjaV9kZXYgKnBk ZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIgbGVuZ3RoKTsKK3ZvaWQgcGNpX3Ay cG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpz Z2wpOwordm9pZCBwY2lfcDJwbWVtX3B1Ymxpc2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGJvb2wg cHVibGlzaCk7CisjZWxzZSAvKiBDT05GSUdfUENJX1AyUERNQSAqLworc3RhdGljIGlubGluZSBp bnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIs CisJCXNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30K K3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfZGlzdGFuY2VfbWFueShzdHJ1Y3QgcGNpX2Rl diAqcHJvdmlkZXIsCisJc3RydWN0IGRldmljZSAqKmNsaWVudHMsIGludCBudW1fY2xpZW50cywg Ym9vbCB2ZXJib3NlKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgYm9vbCBwY2lf aGFzX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9Citz dGF0aWMgaW5saW5lIHN0cnVjdCBwY2lfZGV2ICpwY2lfcDJwbWVtX2ZpbmRfbWFueShzdHJ1Y3Qg ZGV2aWNlICoqY2xpZW50cywKKwkJCQkJCSAgIGludCBudW1fY2xpZW50cykKK3sKKwlyZXR1cm4g TlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNp X2RldiAqcGRldiwgc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5s aW5lIHZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRy LAorCQlzaXplX3Qgc2l6ZSkKK3sKK30KK3N0YXRpYyBpbmxpbmUgcGNpX2J1c19hZGRyX3QgcGNp X3AycG1lbV92aXJ0X3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCSAgICB2b2lk ICphZGRyKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnBjaV9wMnBtZW1fYWxsb2Nfc2dsKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQl1bnNpZ25l ZCBpbnQgKm5lbnRzLCB1MzIgbGVuZ3RoKQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlu bGluZSB2b2lkIHBjaV9wMnBtZW1fZnJlZV9zZ2woc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXN0 cnVjdCBzY2F0dGVybGlzdCAqc2dsKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBt ZW1fcHVibGlzaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBwdWJsaXNoKQoreworfQorI2Vu ZGlmIC8qIENPTkZJR19QQ0lfUDJQRE1BICovCisKKworc3RhdGljIGlubGluZSBpbnQgcGNpX3Ay cGRtYV9kaXN0YW5jZShzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIsCisJc3RydWN0IGRldmljZSAq Y2xpZW50LCBib29sIHZlcmJvc2UpCit7CisJcmV0dXJuIHBjaV9wMnBkbWFfZGlzdGFuY2VfbWFu eShwcm92aWRlciwgJmNsaWVudCwgMSwgdmVyYm9zZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHBjaV9kZXYgKnBjaV9wMnBtZW1fZmluZChzdHJ1Y3QgZGV2aWNlICpjbGllbnQpCit7CisJ cmV0dXJuIHBjaV9wMnBtZW1fZmluZF9tYW55KCZjbGllbnQsIDEpOworfQorCisjZW5kaWYgLyog X0xJTlVYX1BDSV9QMlBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2lu Y2x1ZGUvbGludXgvcGNpLmgKaW5kZXggNjkyNTgyOGY5ZjI1Li5iZjUyNzc3NjhmNjkgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAt MjgxLDYgKzI4MSw3IEBAIHN0cnVjdCBwY2llX2xpbmtfc3RhdGU7CiBzdHJ1Y3QgcGNpX3ZwZDsK IHN0cnVjdCBwY2lfc3Jpb3Y7CiBzdHJ1Y3QgcGNpX2F0czsKK3N0cnVjdCBwY2lfcDJwZG1hOwog CiAvKiBUaGUgcGNpX2RldiBzdHJ1Y3R1cmUgZGVzY3JpYmVzIFBDSSBkZXZpY2VzICovCiBzdHJ1 Y3QgcGNpX2RldiB7CkBAIC00MzgsNiArNDM5LDkgQEAgc3RydWN0IHBjaV9kZXYgewogI2VuZGlm CiAjaWZkZWYgQ09ORklHX1BDSV9QQVNJRAogCXUxNgkJcGFzaWRfZmVhdHVyZXM7CisjZW5kaWYK KyNpZmRlZiBDT05GSUdfUENJX1AyUERNQQorCXN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7CiAj ZW5kaWYKIAlwaHlzX2FkZHJfdAlyb207CQkvKiBQaHlzaWNhbCBhZGRyZXNzIGlmIG5vdCBmcm9t IEJBUiAqLwogCXNpemVfdAkJcm9tbGVuOwkJLyogTGVuZ3RoIGlmIG5vdCBmcm9tIEJBUiAqLwot LSAKMi4xOS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1udmRpbW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0cy4wMS5vcmcKaHR0 cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRpbW0K