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 D31312110747B for ; Thu, 30 Aug 2018 11:54:04 -0700 (PDT) From: Logan Gunthorpe Date: Thu, 30 Aug 2018 12:53:40 -0600 Message-Id: <20180830185352.3369-2-logang@deltatee.com> In-Reply-To: <20180830185352.3369-1-logang@deltatee.com> References: <20180830185352.3369-1-logang@deltatee.com> MIME-Version: 1.0 Subject: [PATCH v5 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: =?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 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 bmVkLW9mZi1ieTogTG9nYW4gR3VudGhvcnBlIDxsb2dhbmdAZGVsdGF0ZWUuY29tPgotLS0KIGRy aXZlcnMvcGNpL0tjb25maWcgICAgICAgIHwgIDE3ICsKIGRyaXZlcnMvcGNpL01ha2VmaWxlICAg ICAgIHwgICAxICsKIGRyaXZlcnMvcGNpL3AycGRtYS5jICAgICAgIHwgNzYxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC9tZW1yZW1h cC5oICAgfCAgIDUgKwogaW5jbHVkZS9saW51eC9tbS5oICAgICAgICAgfCAgMTggKysKIGluY2x1 ZGUvbGludXgvcGNpLXAycGRtYS5oIHwgMTAyICsrKysrKwogaW5jbHVkZS9saW51eC9wY2kuaCAg ICAgICAgfCAgIDQgKwogNyBmaWxlcyBjaGFuZ2VkLCA5MDggaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL3AycGRtYS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j bHVkZS9saW51eC9wY2ktcDJwZG1hLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmln IGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCA1NmZmOGY2ZDMxZmMuLmRlYjY4YmU0ZmRhYyAx MDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9LY29uZmln CkBAIC0xMzIsNiArMTMyLDIzIEBAIGNvbmZpZyBQQ0lfUEFTSUQKIAogCSAgSWYgdW5zdXJlLCBz YXkgTi4KIAorY29uZmlnIFBDSV9QMlBETUEKKwlib29sICJQQ0kgcGVlci10by1wZWVyIHRyYW5z ZmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgWk9ORV9ERVZJQ0UKKwlzZWxlY3QgR0VO RVJJQ19BTExPQ0FUT1IKKwloZWxwCisJICBFbmFibGXRlSBkcml2ZXJzIHRvIGRvIFBDSSBwZWVy LXRvLXBlZXIgdHJhbnNhY3Rpb25zIHRvIGFuZCBmcm9tCisJICBCQVJzIHRoYXQgYXJlIGV4cG9z ZWQgaW4gb3RoZXIgZGV2aWNlcyB0aGF0IGFyZSB0aGUgcGFydCBvZgorCSAgdGhlIGhpZXJhcmNo eSB3aGVyZSBwZWVyLXRvLXBlZXIgRE1BIGlzIGd1YXJhbnRlZWQgYnkgdGhlIFBDSQorCSAgc3Bl Y2lmaWNhdGlvbiB0byB3b3JrIChpZS4gYW55dGhpbmcgYmVsb3cgYSBzaW5nbGUgUENJIGJyaWRn ZSkuCisKKwkgIE1hbnkgUENJZSByb290IGNvbXBsZXhlcyBkbyBub3Qgc3VwcG9ydCBQMlAgdHJh bnNhY3Rpb25zIGFuZAorCSAgaXQncyBoYXJkIHRvIHRlbGwgd2hpY2ggc3VwcG9ydCBpdCBhdCBh bGwsIHNvIGF0IHRoaXMgdGltZSwKKwkgIFAyUCBETUEgdHJhbnNhdGlvbnMgbXVzdCBiZSBiZXR3 ZWVuIGRldmljZXMgYmVoaW5kIHRoZSBzYW1lIHJvb3QKKwkgIHBvcnQuCisKKwkgIElmIHVuc3Vy ZSwgc2F5IE4uCisKIGNvbmZpZyBQQ0lfTEFCRUwKIAlkZWZfYm9vbCB5IGlmIChETUkgfHwgQUNQ SSkKIAlkZXBlbmRzIG9uIFBDSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9k cml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCAxYjJjZmU1MWU4ZDcuLjg1ZjRhNzAzYjJiZSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUK QEAgLTI2LDYgKzI2LDcgQEAgb2JqLSQoQ09ORklHX1BDSV9TWVNDQUxMKQkrPSBzeXNjYWxsLm8K IG9iai0kKENPTkZJR19QQ0lfU1RVQikJCSs9IHBjaS1zdHViLm8KIG9iai0kKENPTkZJR19QQ0lf UEZfU1RVQikJKz0gcGNpLXBmLXN0dWIubwogb2JqLSQoQ09ORklHX1BDSV9FQ0FNKQkJKz0gZWNh bS5vCitvYmotJChDT05GSUdfUENJX1AyUERNQSkJKz0gcDJwZG1hLm8KIG9iai0kKENPTkZJR19Y RU5fUENJREVWX0ZST05URU5EKSArPSB4ZW4tcGNpZnJvbnQubwogCiAjIEVuZHBvaW50IGxpYnJh cnkgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXRzIHVzZXJzCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODhhYWVjNTM1MWNkCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9wY2kvcDJwZG1hLmMKQEAgLTAsMCArMSw3NjEgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogUENJIFBlZXIgMiBQZWVyIERNQSBzdXBwb3J0Lgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE4LCBMb2dhbiBHdW50aG9ycGUKKyAqIENvcHly aWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAo YykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIENvcHlyaWdodCAoYykgMjAxOCwgRWlkZXRp Y29tIEluYy4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJwY2ktcDJwZG1hOiAiIGZtdAor I2luY2x1ZGUgPGxpbnV4L3BjaS1wMnBkbWEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4KKyNp bmNsdWRlIDxsaW51eC9tZW1yZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1yZWZjb3Vu dC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9idWYu aD4KKworc3RydWN0IHBjaV9wMnBkbWEgeworCXN0cnVjdCBwZXJjcHVfcmVmIGRldm1hcF9yZWY7 CisJc3RydWN0IGNvbXBsZXRpb24gZGV2bWFwX3JlZl9kb25lOworCXN0cnVjdCBnZW5fcG9vbCAq cG9vbDsKKwlib29sIHAycG1lbV9wdWJsaXNoZWQ7Cit9OworCitzdGF0aWMgdm9pZCBwY2lfcDJw ZG1hX3BlcmNwdV9yZWxlYXNlKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCit7CisJc3RydWN0IHBj aV9wMnBkbWEgKnAycCA9CisJCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBwY2lfcDJwZG1hLCBk ZXZtYXBfcmVmKTsKKworCWNvbXBsZXRlX2FsbCgmcDJwLT5kZXZtYXBfcmVmX2RvbmUpOworfQor CitzdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3BlcmNwdV9raWxsKHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IHBlcmNwdV9yZWYgKnJlZiA9IGRhdGE7CisKKwlpZiAocGVyY3B1X3JlZl9pc19keWluZyhy ZWYpKQorCQlyZXR1cm47CisKKwlwZXJjcHVfcmVmX2tpbGwocmVmKTsKK30KKworc3RhdGljIHZv aWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBjaV9kZXYgKnBk ZXYgPSBkYXRhOworCisJaWYgKCFwZGV2LT5wMnBkbWEpCisJCXJldHVybjsKKworCXdhaXRfZm9y X2NvbXBsZXRpb24oJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZl9kb25lKTsKKwlwZXJjcHVfcmVm X2V4aXQoJnBkZXYtPnAycGRtYS0+ZGV2bWFwX3JlZik7CisKKwlnZW5fcG9vbF9kZXN0cm95KHBk ZXYtPnAycGRtYS0+cG9vbCk7CisJcGRldi0+cDJwZG1hID0gTlVMTDsKK30KKworc3RhdGljIGlu dCBwY2lfcDJwZG1hX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBlcnJvciA9 IC1FTk9NRU07CisJc3RydWN0IHBjaV9wMnBkbWEgKnAycDsKKworCXAycCA9IGRldm1fa3phbGxv YygmcGRldi0+ZGV2LCBzaXplb2YoKnAycCksIEdGUF9LRVJORUwpOworCWlmICghcDJwKQorCQly ZXR1cm4gLUVOT01FTTsKKworCXAycC0+cG9vbCA9IGdlbl9wb29sX2NyZWF0ZShQQUdFX1NISUZU LCBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFwMnAtPnBvb2wpCisJCWdvdG8gb3V0 OworCisJaW5pdF9jb21wbGV0aW9uKCZwMnAtPmRldm1hcF9yZWZfZG9uZSk7CisJZXJyb3IgPSBw ZXJjcHVfcmVmX2luaXQoJnAycC0+ZGV2bWFwX3JlZiwKKwkJCXBjaV9wMnBkbWFfcGVyY3B1X3Jl bGVhc2UsIDAsIEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcG9vbF9kZXN0 cm95OworCisJcGVyY3B1X3JlZl9zd2l0Y2hfdG9fYXRvbWljX3N5bmMoJnAycC0+ZGV2bWFwX3Jl Zik7CisKKwllcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmcGRldi0+ZGV2LCBwY2lf cDJwZG1hX3JlbGVhc2UsIHBkZXYpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfcG9vbF9kZXN0 cm95OworCisJcGRldi0+cDJwZG1hID0gcDJwOworCisJcmV0dXJuIDA7CisKK291dF9wb29sX2Rl c3Ryb3k6CisJZ2VuX3Bvb2xfZGVzdHJveShwMnAtPnBvb2wpOworb3V0OgorCWRldm1fa2ZyZWUo JnBkZXYtPmRldiwgcDJwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogcGNpX3AycGRt YV9hZGRfcmVzb3VyY2UgLSBhZGQgbWVtb3J5IGZvciB1c2UgYXMgcDJwIG1lbW9yeQorICogQHBk ZXY6IHRoZSBkZXZpY2UgdG8gYWRkIHRoZSBtZW1vcnkgdG8KKyAqIEBiYXI6IFBDSSBCQVIgdG8g YWRkCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbWVtb3J5IHRvIGFkZCwgbWF5IGJlIHplcm8gdG8g dXNlIHRoZSB3aG9sZSBCQVIKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbnRvIHRoZSBQQ0kgQkFSCisg KgorICogVGhlIG1lbW9yeSB3aWxsIGJlIGdpdmVuIFpPTkVfREVWSUNFIHN0cnVjdCBwYWdlcyBz byB0aGF0IGl0IG1heQorICogYmUgdXNlZCB3aXRoIGFueSBETUEgcmVxdWVzdC4KKyAqLworaW50 IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBz aXplX3Qgc2l6ZSwKKwkJCSAgICB1NjQgb2Zmc2V0KQoreworCXN0cnVjdCBkZXZfcGFnZW1hcCAq cGdtYXA7CisJdm9pZCAqYWRkcjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoIShwY2lfcmVzb3VyY2Vf ZmxhZ3MocGRldiwgYmFyKSAmIElPUkVTT1VSQ0VfTUVNKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlpZiAob2Zmc2V0ID49IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgYmFyKSkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoIXNpemUpCisJCXNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJh cikgLSBvZmZzZXQ7CisKKwlpZiAoc2l6ZSArIG9mZnNldCA+IHBjaV9yZXNvdXJjZV9sZW4ocGRl diwgYmFyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXBkZXYtPnAycGRtYSkgeworCQll cnJvciA9IHBjaV9wMnBkbWFfc2V0dXAocGRldik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBl cnJvcjsKKwl9CisKKwlwZ21hcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBn bWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZ21hcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlw Z21hcC0+cmVzLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGJhcikgKyBvZmZzZXQ7 CisJcGdtYXAtPnJlcy5lbmQgPSBwZ21hcC0+cmVzLnN0YXJ0ICsgc2l6ZSAtIDE7CisJcGdtYXAt PnJlcy5mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpOworCXBnbWFwLT5yZWYg PSAmcGRldi0+cDJwZG1hLT5kZXZtYXBfcmVmOworCXBnbWFwLT50eXBlID0gTUVNT1JZX0RFVklD RV9QQ0lfUDJQRE1BOworCisJYWRkciA9IGRldm1fbWVtcmVtYXBfcGFnZXMoJnBkZXYtPmRldiwg cGdtYXApOworCWlmIChJU19FUlIoYWRkcikpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKGFkZHIpOwor CQlnb3RvIHBnbWFwX2ZyZWU7CisJfQorCisJZXJyb3IgPSBnZW5fcG9vbF9hZGRfdmlydChwZGV2 LT5wMnBkbWEtPnBvb2wsICh1bnNpZ25lZCBsb25nKWFkZHIsCisJCQlwY2lfYnVzX2FkZHJlc3Mo cGRldiwgYmFyKSArIG9mZnNldCwKKwkJCXJlc291cmNlX3NpemUoJnBnbWFwLT5yZXMpLCBkZXZf dG9fbm9kZSgmcGRldi0+ZGV2KSk7CisJaWYgKGVycm9yKQorCQlnb3RvIHBnbWFwX2ZyZWU7CisK KwllcnJvciA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmcGRldi0+ZGV2LCBwY2lfcDJwZG1h X3BlcmNwdV9raWxsLAorCQkJCQkgICZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYpOworCWlmIChl cnJvcikKKwkJZ290byBwZ21hcF9mcmVlOworCisJcGNpX2luZm8ocGRldiwgImFkZGVkIHBlZXIt dG8tcGVlciBETUEgbWVtb3J5ICVwUlxuIiwKKwkJICZwZ21hcC0+cmVzKTsKKworCXJldHVybiAw OworCitwZ21hcF9mcmVlOgorCWRldnJlc19mcmVlKHBnbWFwKTsKKwlyZXR1cm4gZXJyb3I7Cit9 CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZSk7CisKK3N0YXRpYyBz dHJ1Y3QgcGNpX2RldiAqZmluZF9wYXJlbnRfcGNpX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRldmljZSAqcGFyZW50OworCisJZGV2ID0gZ2V0X2RldmljZShkZXYpOworCisJ d2hpbGUgKGRldikgeworCQlpZiAoZGV2X2lzX3BjaShkZXYpKQorCQkJcmV0dXJuIHRvX3BjaV9k ZXYoZGV2KTsKKworCQlwYXJlbnQgPSBnZXRfZGV2aWNlKGRldi0+cGFyZW50KTsKKwkJcHV0X2Rl dmljZShkZXYpOworCQlkZXYgPSBwYXJlbnQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8q CisgKiBDaGVjayBpZiBhIFBDSSBicmlkZ2UgaGFzIGl0J3MgQUNTIHJlZGlyZWN0aW9uIGJpdHMg c2V0IHRvIHJlZGlyZWN0IFAyUAorICogVExQcyB1cHN0cmVhbSB2aWEgQUNTLiBSZXR1cm5zIDEg aWYgdGhlIHBhY2tldHMgd2lsbCBiZSByZWRpcmVjdGVkCisgKiB1cHN0cmVhbSwgMCBvdGhlcndp c2UuCisgKi8KK3N0YXRpYyBpbnQgcGNpX2JyaWRnZV9oYXNfYWNzX3JlZGlyKHN0cnVjdCBwY2lf ZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MTYgY3RybDsKKworCXBvcyA9IHBjaV9maW5kX2V4 dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfQUNTKTsKKwlpZiAoIXBvcykKKwkJcmV0 dXJuIDA7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9BQ1NfQ1RSTCwg JmN0cmwpOworCisJaWYgKGN0cmwgJiAoUENJX0FDU19SUiB8IFBDSV9BQ1NfQ1IgfCBQQ0lfQUNT X0VDKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VxX2J1 Zl9wcmludF9idXNfZGV2Zm4oc3RydWN0IHNlcV9idWYgKmJ1Ziwgc3RydWN0IHBjaV9kZXYgKmRl dikKK3sKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuOworCisJc2VxX2J1Zl9wcmludGYoYnVmLCAiJTA0 eDolMDJ4OiUwMnguJXg7IiwgcGNpX2RvbWFpbl9ucihkZXYtPmJ1cyksCisJCSAgICAgICBkZXYt PmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwKKwkJICAgICAgIFBDSV9GVU5DKGRl di0+ZGV2Zm4pKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGRpc3RhbmNlIHRocm91Z2ggdGhlIG5l YXJlc3QgY29tbW9uIHVwc3RyZWFtIGJyaWRnZSBiZXR3ZWVuCisgKiB0d28gUENJIGRldmljZXMu CisgKgorICogSWYgdGhlIHR3byBkZXZpY2VzIGFyZSB0aGUgc2FtZSBkZXZpY2UgdGhlbiAwIHdp bGwgYmUgcmV0dXJuZWQuCisgKgorICogSWYgdGhlcmUgYXJlIHR3byB2aXJ0dWFsIGZ1bmN0aW9u cyBvZiB0aGUgc2FtZSBkZXZpY2UgYmVoaW5kIHRoZSBzYW1lCisgKiBicmlkZ2UgcG9ydCB0aGVu IDIgd2lsbCBiZSByZXR1cm5lZCAob25lIHN0ZXAgZG93biB0byB0aGUgUENJZSBzd2l0Y2gsCisg KiB0aGVuIG9uZSBzdGVwIGJhY2sgdG8gdGhlIHNhbWUgZGV2aWNlKS4KKyAqCisgKiBJbiB0aGUg Y2FzZSB3aGVyZSB0d28gZGV2aWNlcyBhcmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIFBDSWUgc3dp dGNoLCB0aGUKKyAqIHZhbHVlIDQgd2lsbCBiZSByZXR1cm5lZC4gVGhpcyBjb3JyZXNwb25kcyB0 byB0aGUgZm9sbG93aW5nIFBDSSB0cmVlOgorICoKKyAqICAgICAtKyAgUm9vdCBQb3J0CisgKiAg ICAgIFwrIFN3aXRjaCBVcHN0cmVhbSBQb3J0CisgKiAgICAgICArLSsgU3dpdGNoIERvd25zdHJl YW0gUG9ydAorICogICAgICAgKyBcLSBEZXZpY2UgQQorICogICAgICAgXC0rIFN3aXRjaCBEb3du c3RyZWFtIFBvcnQKKyAqICAgICAgICAgXC0gRGV2aWNlIEIKKyAqCisgKiBUaGUgZGlzdGFuY2Ug aXMgNCBiZWNhdXNlIHdlIHRyYXZlcnNlIGZyb20gRGV2aWNlIEEgdGhyb3VnaCB0aGUgZG93bnN0 cmVhbQorICogcG9ydCBvZiB0aGUgc3dpdGNoLCB0byB0aGUgY29tbW9uIHVwc3RyZWFtIHBvcnQs IGJhY2sgdXAgdG8gdGhlIHNlY29uZAorICogZG93bnN0cmVhbSBwb3J0IGFuZCB0aGVuIHRvIERl dmljZSBCLgorICoKKyAqIEFueSB0d28gZGV2aWNlcyB0aGF0IGRvbid0IGhhdmUgYSBjb21tb24g dXBzdHJlYW0gYnJpZGdlIHdpbGwgcmV0dXJuIC0xLgorICogSW4gdGhpcyB3YXkgZGV2aWNlcyBv biBzZXBhcmF0ZSBQQ0llIHJvb3QgcG9ydHMgd2lsbCBiZSByZWplY3RlZCwgd2hpY2gKKyAqIGlz IHdoYXQgd2Ugd2FudCBmb3IgcGVlci10by1wZWVyIHNlZWluZyBlYWNoIFBDSWUgcm9vdCBwb3J0 IGRlZmluZXMgYQorICogc2VwYXJhdGUgaGllcmFyY2h5IGRvbWFpbiBhbmQgdGhlcmUncyBubyB3 YXkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHJvb3QKKyAqIGNvbXBsZXggc3VwcG9ydHMgZm9y d2FyZGluZyBiZXR3ZWVuIHRoZW0uCisgKgorICogSW4gdGhlIGNhc2Ugd2hlcmUgdHdvIGRldmlj ZXMgYXJlIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgUENJZSBzd2l0Y2hlcywKKyAqIHRoaXMgZnVu Y3Rpb24gd2lsbCBzdGlsbCByZXR1cm4gYSBwb3NpdGl2ZSBkaXN0YW5jZSBhcyBsb25nIGFzIGJv dGgKKyAqIHN3aXRjaGVzIGV2ZW51dGFsbHkgaGF2ZSBhIGNvbW1vbiB1cHN0cmVhbSBicmlkZ2Uu IE5vdGUgdGhpcyBjb3ZlcnMKKyAqIHRoZSBjYXNlIG9mIHVzaW5nIG11bHRpcGxlIFBDSWUgc3dp dGNoZXMgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgbGV2ZWwgb2YKKyAqIGZhbi1vdXQgZnJvbSBhIHJv b3QgcG9ydC4gVGhlIGV4YWN0IGRpc3RhbmNlIHdpbGwgYmUgYSBmdW5jdGlvbiBvZiB0aGUKKyAq IG51bWJlciBvZiBzd2l0Y2hlcyBiZXR3ZWVuIERldmljZSBBIGFuZCBEZXZpY2UgQi4KKyAqCisg KiBJZiBhIGJyaWRnZSB3aGljaCBoYXMgYW55IEFDUyByZWRpcmVjdGlvbiBiaXRzIHNldCBpcyBp biB0aGUgcGF0aAorICogdGhlbiB0aGlzIGZ1bmN0aW9ucyB3aWxsIHJldHVybiAtMi4gVGhpcyBp cyBzbyB3ZSByZWplY3QgYW55CisgKiBjYXNlcyB3aGVyZSB0aGUgVExQcyBhcmUgZm9yd2FyZGVk IHVwIGludG8gdGhlIHJvb3QgY29tcGxleC4KKyAqIEluIHRoaXMgY2FzZSwgYSBsaXN0IG9mIGFs bCBpbmZyaW5naW5nIGJyaWRnZSBhZGRyZXNzZXMgd2lsbCBiZQorICogcG9wdWxhdGVkIGluIGFj c19saXN0IChhc3N1bWluZyBpdCdzIG5vbi1udWxsKSBmb3IgcHJpbnRrIHB1cnBvc2VzLgorICov CitzdGF0aWMgaW50IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5jZShzdHJ1Y3QgcGNpX2RldiAqYSwK KwkJCQkgICAgc3RydWN0IHBjaV9kZXYgKmIsCisJCQkJICAgIHN0cnVjdCBzZXFfYnVmICphY3Nf bGlzdCkKK3sKKwlpbnQgZGlzdF9hID0gMDsKKwlpbnQgZGlzdF9iID0gMDsKKwlzdHJ1Y3QgcGNp X2RldiAqYmIgPSBOVUxMOworCWludCBhY3NfY250ID0gMDsKKworCS8qCisJICogTm90ZSwgd2Ug ZG9uJ3QgbmVlZCB0byB0YWtlIHJlZmVyZW5jZXMgdG8gZGV2aWNlcyByZXR1cm5lZCBieQorCSAq IHBjaV91cHN0cmVhbV9icmlkZ2UoKSBzZWVpbmcgd2UgaG9sZCBhIHJlZmVyZW5jZSB0byBhIGNo aWxkCisJICogZGV2aWNlIHdoaWNoIHdpbGwgYWxyZWFkeSBob2xkIGEgcmVmZXJlbmNlIHRvIHRo ZSB1cHN0cmVhbSBicmlkZ2UuCisJICovCisKKwl3aGlsZSAoYSkgeworCQlkaXN0X2IgPSAwOwor CisJCWlmIChwY2lfYnJpZGdlX2hhc19hY3NfcmVkaXIoYSkpIHsKKwkJCXNlcV9idWZfcHJpbnRf YnVzX2RldmZuKGFjc19saXN0LCBhKTsKKwkJCWFjc19jbnQrKzsKKwkJfQorCisJCWJiID0gYjsK KworCQl3aGlsZSAoYmIpIHsKKwkJCWlmIChhID09IGJiKQorCQkJCWdvdG8gY2hlY2tfYl9wYXRo X2FjczsKKworCQkJYmIgPSBwY2lfdXBzdHJlYW1fYnJpZGdlKGJiKTsKKwkJCWRpc3RfYisrOwor CQl9CisKKwkJYSA9IHBjaV91cHN0cmVhbV9icmlkZ2UoYSk7CisJCWRpc3RfYSsrOworCX0KKwor CXJldHVybiAtMTsKKworY2hlY2tfYl9wYXRoX2FjczoKKwliYiA9IGI7CisKKwl3aGlsZSAoYmIp IHsKKwkJaWYgKGEgPT0gYmIpCisJCQlicmVhazsKKworCQlpZiAocGNpX2JyaWRnZV9oYXNfYWNz X3JlZGlyKGJiKSkgeworCQkJc2VxX2J1Zl9wcmludF9idXNfZGV2Zm4oYWNzX2xpc3QsIGJiKTsK KwkJCWFjc19jbnQrKzsKKwkJfQorCisJCWJiID0gcGNpX3Vwc3RyZWFtX2JyaWRnZShiYik7CisJ fQorCisJaWYgKGFjc19jbnQpCisJCXJldHVybiAtMjsKKworCXJldHVybiBkaXN0X2EgKyBkaXN0 X2I7Cit9CisKK3N0YXRpYyBpbnQgdXBzdHJlYW1fYnJpZGdlX2Rpc3RhbmNlX3dhcm4oc3RydWN0 IHBjaV9kZXYgKnByb3ZpZGVyLAorCQkJCQkgc3RydWN0IHBjaV9kZXYgKmNsaWVudCkKK3sKKwlz dHJ1Y3Qgc2VxX2J1ZiBhY3NfbGlzdDsKKwlpbnQgcmV0OworCisJc2VxX2J1Zl9pbml0KCZhY3Nf bGlzdCwga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpLCBQQUdFX1NJWkUpOworCisJcmV0 ID0gdXBzdHJlYW1fYnJpZGdlX2Rpc3RhbmNlKHByb3ZpZGVyLCBjbGllbnQsICZhY3NfbGlzdCk7 CisJaWYgKHJldCA9PSAtMikgeworCQlwY2lfd2FybihjbGllbnQsICJjYW5ub3QgYmUgdXNlZCBm b3IgcGVlci10by1wZWVyIERNQSBhcyBBQ1MgcmVkaXJlY3QgaXMgc2V0IGJldHdlZW4gdGhlIGNs aWVudCBhbmQgcHJvdmlkZXJcbiIpOworCQkvKiBEcm9wIGZpbmFsIHNlbWljb2xvbiAqLworCQlh Y3NfbGlzdC5idWZmZXJbYWNzX2xpc3QubGVuLTFdID0gMDsKKwkJcGNpX3dhcm4oY2xpZW50LCAi dG8gZGlzYWJsZSBBQ1MgcmVkaXJlY3QgZm9yIHRoaXMgcGF0aCwgYWRkIHRoZSBrZXJuZWwgcGFy YW1ldGVyOiBwY2k9ZGlzYWJsZV9hY3NfcmVkaXI9JXNcbiIsCisJCQkgYWNzX2xpc3QuYnVmZmVy KTsKKworCX0gZWxzZSBpZiAocmV0IDwgMCkgeworCQlwY2lfd2FybihjbGllbnQsICJjYW5ub3Qg YmUgdXNlZCBmb3IgcGVlci10by1wZWVyIERNQSBhcyB0aGUgY2xpZW50IGFuZCBwcm92aWRlciBk byBub3Qgc2hhcmUgYW4gdXBzdHJlYW0gYnJpZGdlXG4iKTsKKwl9CisKKwlrZnJlZShhY3NfbGlz dC5idWZmZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50 IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHBjaV9kZXYgKmNsaWVudDsKKwlz dHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXI7Cit9OworCisvKioKKyAqIHBjaV9wMnBkbWFfYWRkX2Ns aWVudCAtIGFsbG9jYXRlIGEgbmV3IGVsZW1lbnQgaW4gYSBjbGllbnQgZGV2aWNlIGxpc3QKKyAq IEBoZWFkOiBsaXN0IGhlYWQgb2YgcDJwZG1hIGNsaWVudHMKKyAqIEBkZXY6IGRldmljZSB0byBh ZGQgdG8gdGhlIGxpc3QKKyAqCisgKiBUaGlzIGFkZHMgQGRldiB0byBhIGxpc3Qgb2YgY2xpZW50 cyB1c2VkIGJ5IGEgcDJwZG1hIGRldmljZS4KKyAqIFRoaXMgbGlzdCBzaG91bGQgYmUgcGFzc2Vk IHRvIHBjaV9wMnBtZW1fZmluZCgpLiBPbmNlIHBjaV9wMnBtZW1fZmluZCgpIGhhcworICogYmVl biBjYWxsZWQgc3VjY2Vzc2Z1bGx5LCB0aGUgbGlzdCB3aWxsIGJlIGJvdW5kIHRvIGEgc3BlY2lm aWMgcDJwZG1hCisgKiBkZXZpY2UgYW5kIG5ldyBjbGllbnRzIGNhbiBvbmx5IGJlIGFkZGVkIHRv IHRoZSBsaXN0IGlmIHRoZXkgYXJlCisgKiBzdXBwb3J0ZWQgYnkgdGhhdCBwMnBkbWEgZGV2aWNl LgorICoKKyAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGxvY2sgd2hpY2ggcHJv dGVjdHMgQGhlYWQgYXMgbmVjZXNzYXJ5CisgKiBzbyB0aGF0IG5vbmUgb2YgdGhlIHBjaV9wMnAg ZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgY29uY3VycmVudGx5CisgKiBvbiB0aGF0IGxpc3QuCisg KgorICogUmV0dXJucyAwIGlmIHRoZSBjbGllbnQgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZC4KKyAq LworaW50IHBjaV9wMnBkbWFfYWRkX2NsaWVudChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9wMnBkbWFfY2xpZW50ICppdGVtLCAqbmV3 X2l0ZW07CisJc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2Rl diAqY2xpZW50OworCWludCByZXQ7CisKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfRE1BX1ZJUlRf T1BTKSAmJiBkZXYtPmRtYV9vcHMgPT0gJmRtYV92aXJ0X29wcykgeworCQlkZXZfd2FybihkZXYs ICJjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIERNQSBiZWNhdXNlIHRoZSBkcml2ZXIg bWFrZXMgdXNlIG9mIGRtYV92aXJ0X29wc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwor CWNsaWVudCA9IGZpbmRfcGFyZW50X3BjaV9kZXYoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQlk ZXZfd2FybihkZXYsICJjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIERNQSBhcyBpdCBp cyBub3QgYSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaXRlbSA9 IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChoZWFkLCBzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQs IGxpc3QpOworCWlmIChpdGVtICYmIGl0ZW0tPnByb3ZpZGVyKSB7CisJCXByb3ZpZGVyID0gaXRl bS0+cHJvdmlkZXI7CisKKwkJcmV0ID0gdXBzdHJlYW1fYnJpZGdlX2Rpc3RhbmNlX3dhcm4ocHJv dmlkZXIsIGNsaWVudCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlyZXQgPSAtRVhERVY7CisJCQln b3RvIHB1dF9jbGllbnQ7CisJCX0KKwl9CisKKwluZXdfaXRlbSA9IGt6YWxsb2Moc2l6ZW9mKCpu ZXdfaXRlbSksIEdGUF9LRVJORUwpOworCWlmICghbmV3X2l0ZW0pIHsKKwkJcmV0ID0gLUVOT01F TTsKKwkJZ290byBwdXRfY2xpZW50OworCX0KKworCW5ld19pdGVtLT5jbGllbnQgPSBjbGllbnQ7 CisJbmV3X2l0ZW0tPnByb3ZpZGVyID0gcGNpX2Rldl9nZXQocHJvdmlkZXIpOworCisJbGlzdF9h ZGRfdGFpbCgmbmV3X2l0ZW0tPmxpc3QsIGhlYWQpOworCisJcmV0dXJuIDA7CisKK3B1dF9jbGll bnQ6CisJcGNpX2Rldl9wdXQoY2xpZW50KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJP TF9HUEwocGNpX3AycGRtYV9hZGRfY2xpZW50KTsKKworc3RhdGljIHZvaWQgcGNpX3AycGRtYV9j bGllbnRfZnJlZShzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQgKml0ZW0pCit7CisJbGlzdF9kZWwo Jml0ZW0tPmxpc3QpOworCXBjaV9kZXZfcHV0KGl0ZW0tPmNsaWVudCk7CisJcGNpX2Rldl9wdXQo aXRlbS0+cHJvdmlkZXIpOworCWtmcmVlKGl0ZW0pOworfQorCisvKioKKyAqIHBjaV9wMnBkbWFf cmVtb3ZlX2NsaWVudCAtIHJlbW92ZSBhbmQgZnJlZSBhIHAycGRtYSBjbGllbnQKKyAqIEBoZWFk OiBsaXN0IGhlYWQgb2YgcDJwZG1hIGNsaWVudHMKKyAqIEBkZXY6IGRldmljZSB0byByZW1vdmUg ZnJvbSB0aGUgbGlzdAorICoKKyAqIFRoaXMgcmVtb3ZlcyBAZGV2IGZyb20gYSBsaXN0IG9mIGNs aWVudHMgdXNlZCBieSBhIHAycGRtYSBkZXZpY2UuCisgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVk IHRvIGhhdmUgYSBsb2NrIHdoaWNoIHByb3RlY3RzIEBoZWFkIGFzIG5lY2Vzc2FyeQorICogc28g dGhhdCBub25lIG9mIHRoZSBwY2lfcDJwIGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIGNvbmN1cnJl bnRseQorICogb24gdGhhdCBsaXN0LgorICovCit2b2lkIHBjaV9wMnBkbWFfcmVtb3ZlX2NsaWVu dChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0 IHBjaV9wMnBkbWFfY2xpZW50ICpwb3MsICp0bXA7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisK KwlwZGV2ID0gZmluZF9wYXJlbnRfcGNpX2RldihkZXYpOworCWlmICghcGRldikKKwkJcmV0dXJu OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdG1wLCBoZWFkLCBsaXN0KSB7CisJ CWlmIChwb3MtPmNsaWVudCAhPSBwZGV2KQorCQkJY29udGludWU7CisKKwkJcGNpX3AycGRtYV9j bGllbnRfZnJlZShwb3MpOworCX0KKworCXBjaV9kZXZfcHV0KHBkZXYpOworfQorRVhQT1JUX1NZ TUJPTF9HUEwocGNpX3AycGRtYV9yZW1vdmVfY2xpZW50KTsKKworLyoqCisgKiBwY2lfcDJwZG1h X2NsaWVudF9saXN0X2ZyZWUgLSBmcmVlIGFuIGVudGlyZSBsaXN0IG9mIHAycGRtYSBjbGllbnRz CisgKiBAaGVhZDogbGlzdCBoZWFkIG9mIHAycGRtYSBjbGllbnRzCisgKgorICogVGhpcyByZW1v dmVzIGFsbCBkZXZpY2VzIGluIGEgbGlzdCBvZiBjbGllbnRzIHVzZWQgYnkgYSBwMnBkbWEgZGV2 aWNlLgorICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBoYXZlIGEgbG9jayB3aGljaCBwcm90 ZWN0cyBAaGVhZCBhcyBuZWNlc3NhcnkKKyAqIHNvIHRoYXQgbm9uZSBvZiB0aGUgcGNpX3AycGRt YSBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKKyAqIG9uIHRoYXQgbGlzdC4K KyAqLwordm9pZCBwY2lfcDJwZG1hX2NsaWVudF9saXN0X2ZyZWUoc3RydWN0IGxpc3RfaGVhZCAq aGVhZCkKK3sKKwlzdHJ1Y3QgcGNpX3AycGRtYV9jbGllbnQgKnBvcywgKnRtcDsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwgaGVhZCwgbGlzdCkKKwkJcGNpX3AycGRtYV9j bGllbnRfZnJlZShwb3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9jbGllbnRf bGlzdF9mcmVlKTsKKworLyoqCisgKiBwY2lfcDJwZG1hX2Rpc3RhbmNlIC0gRGV0ZXJtaXZlIHRo ZSBjdW11bGF0aXZlIGRpc3RhbmNlIGJldHdlZW4KKyAqCWEgcDJwZG1hIHByb3ZpZGVyIGFuZCB0 aGUgY2xpZW50cyBpbiB1c2UuCisgKiBAcHJvdmlkZXI6IHAycGRtYSBwcm92aWRlciB0byBjaGVj ayBhZ2FpbnN0IHRoZSBjbGllbnQgbGlzdAorICogQGNsaWVudHM6IGxpc3Qgb2YgZGV2aWNlcyB0 byBjaGVjayAoTlVMTC10ZXJtaW5hdGVkKQorICogQHZlcmJvc2U6IGlmIHRydWUsIHByaW50IHdh cm5pbmdzIGZvciBkZXZpY2VzIHdoZW4gd2UgcmV0dXJuIC0xCisgKgorICogUmV0dXJucyAtMSBp ZiBhbnkgb2YgdGhlIGNsaWVudHMgYXJlIG5vdCBjb21wYXRpYmxlIChiZWhpbmQgdGhlIHNhbWUK KyAqIHJvb3QgcG9ydCBhcyB0aGUgcHJvdmlkZXIpLCBvdGhlcndpc2UgcmV0dXJucyBhIHBvc2l0 aXZlIG51bWJlciB3aGVyZQorICogdGhlIGxvd2VyIG51bWJlciBpcyB0aGUgcHJlZmVycmFibGUg Y2hvaWNlLiAoSWYgdGhlcmUncyBvbmUgY2xpZW50CisgKiB0aGF0J3MgdGhlIHNhbWUgYXMgdGhl IHByb3ZpZGVyIGl0IHdpbGwgcmV0dXJuIDAsIHdoaWNoIGlzIGJlc3QgY2hvaWNlKS4KKyAqCisg KiBGb3Igbm93LCAiY29tcGF0aWJsZSIgbWVhbnMgdGhlIHByb3ZpZGVyIGFuZCB0aGUgY2xpZW50 cyBhcmUgYWxsIGJlaGluZAorICogdGhlIHNhbWUgUENJIHJvb3QgcG9ydC4gVGhpcyBjdXRzIG91 dCBjYXNlcyB0aGF0IG1heSB3b3JrIGJ1dCBpcyBzYWZlc3QKKyAqIGZvciB0aGUgdXNlci4gRnV0 dXJlIHdvcmsgY2FuIGV4cGFuZCB0aGlzIHRvIHdoaXRlLWxpc3Qgcm9vdCBjb21wbGV4ZXMgdGhh dAorICogY2FuIHNhZmVseSBmb3J3YXJkIGJldHdlZW4gZWFjaCBwb3J0cy4KKyAqLworaW50IHBj aV9wMnBkbWFfZGlzdGFuY2Uoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgbGlzdF9o ZWFkICpjbGllbnRzLAorCQkJYm9vbCB2ZXJib3NlKQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2Ns aWVudCAqcG9zOworCWludCByZXQ7CisJaW50IGRpc3RhbmNlID0gMDsKKwlib29sIG5vdF9zdXBw b3J0ZWQgPSBmYWxzZTsKKworCWlmIChsaXN0X2VtcHR5KGNsaWVudHMpKQorCQlyZXR1cm4gLTE7 CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgY2xpZW50cywgbGlzdCkgeworCQlpZiAodmVy Ym9zZSkKKwkJCXJldCA9IHVwc3RyZWFtX2JyaWRnZV9kaXN0YW5jZV93YXJuKHByb3ZpZGVyLAor CQkJCQkJCSAgICBwb3MtPmNsaWVudCk7CisJCWVsc2UKKwkJCXJldCA9IHVwc3RyZWFtX2JyaWRn ZV9kaXN0YW5jZShwcm92aWRlciwgcG9zLT5jbGllbnQsCisJCQkJCQkgICAgICAgTlVMTCk7CisK KwkJaWYgKHJldCA8IDApCisJCQlub3Rfc3VwcG9ydGVkID0gdHJ1ZTsKKworCQlpZiAobm90X3N1 cHBvcnRlZCAmJiAhdmVyYm9zZSkKKwkJCWJyZWFrOworCisJCWRpc3RhbmNlICs9IHJldDsKKwl9 CisKKwlpZiAobm90X3N1cHBvcnRlZCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGRpc3RhbmNl OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycGRtYV9kaXN0YW5jZSk7CisKKy8qKgorICog cGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIgLSBDaGVjayBjb21wYXRpYmlseSAoYXMgcGVyIHBj aV9wMnBkbWFfZGlzdGFuY2UpCisgKglhbmQgYXNzaWduIGEgcHJvdmlkZXIgdG8gYSBsaXN0IG9m IGNsaWVudHMKKyAqIEBwcm92aWRlcjogcDJwZG1hIHByb3ZpZGVyIHRvIGFzc2lnbiB0byB0aGUg Y2xpZW50IGxpc3QKKyAqIEBjbGllbnRzOiBsaXN0IG9mIGRldmljZXMgdG8gY2hlY2sgKE5VTEwt dGVybWluYXRlZCkKKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIGFueSBvZiB0aGUgY2xpZW50cyBh cmUgbm90IGNvbXBhdGlibGUsIHRydWUgaWYgdGhlCisgKiBwcm92aWRlciB3YXMgc3VjY2Vzc2Z1 bGx5IGFzc2lnbmVkIHRvIHRoZSBjbGllbnRzLgorICovCitib29sIHBjaV9wMnBkbWFfYXNzaWdu X3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFk ICpjbGllbnRzKQoreworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9zOworCisJaWYgKHBj aV9wMnBkbWFfZGlzdGFuY2UocHJvdmlkZXIsIGNsaWVudHMsIHRydWUpIDwgMCkKKwkJcmV0dXJu IGZhbHNlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGNsaWVudHMsIGxpc3QpCisJCXBv cy0+cHJvdmlkZXIgPSBwcm92aWRlcjsKKworCXJldHVybiB0cnVlOworfQorRVhQT1JUX1NZTUJP TF9HUEwocGNpX3AycGRtYV9hc3NpZ25fcHJvdmlkZXIpOworCisvKioKKyAqIHBjaV9oYXNfcDJw bWVtIC0gY2hlY2sgaWYgYSBnaXZlbiBQQ0kgZGV2aWNlIGhhcyBwdWJsaXNoZWQgYW55IHAycG1l bQorICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gY2hlY2sKKyAqLworYm9vbCBwY2lfaGFzX3AycG1l bShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gcGRldi0+cDJwZG1hICYmIHBkZXYt PnAycGRtYS0+cDJwbWVtX3B1Ymxpc2hlZDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9oYXNf cDJwbWVtKTsKKworLyoqCisgKiBwY2lfcDJwbWVtX2ZpbmQgLSBmaW5kIGEgcGVlci10by1wZWVy IERNQSBtZW1vcnkgZGV2aWNlIGNvbXBhdGlibGUgd2l0aAorICoJdGhlIHNwZWNpZmllZCBsaXN0 IG9mIGNsaWVudHMgYW5kIHNob3J0ZXN0IGRpc3RhbmNlIChhcyBkZXRlcm1pbmVkCisgKglieSBw Y2lfcDJwbWVtX2RtYSgpKQorICogQGNsaWVudHM6IGxpc3Qgb2YgZGV2aWNlcyB0byBjaGVjayAo TlVMTC10ZXJtaW5hdGVkKQorICoKKyAqIElmIG11bHRpcGxlIGRldmljZXMgYXJlIGJlaGluZCB0 aGUgc2FtZSBzd2l0Y2gsIHRoZSBvbmUgImNsb3Nlc3QiIHRvIHRoZQorICogY2xpZW50IGRldmlj ZXMgaW4gdXNlIHdpbGwgYmUgY2hvc2VuIGZpcnN0LiAoU28gaWYgb25lIG9mIHRoZSBwcm92aWRl cnMgYXJlCisgKiB0aGUgc2FtZSBhcyBvbmUgb2YgdGhlIGNsaWVudHMsIHRoYXQgcHJvdmlkZXIg d2lsbCBiZSB1c2VkIGFoZWFkIG9mIGFueQorICogb3RoZXIgcHJvdmlkZXJzIHRoYXQgYXJlIHVu cmVsYXRlZCkuIElmIG11bHRpcGxlIHByb3ZpZGVycyBhcmUgYW4gZXF1YWwKKyAqIGRpc3RhbmNl IGF3YXksIG9uZSB3aWxsIGJlIGNob3NlbiBhdCByYW5kb20uCisgKgorICogUmV0dXJucyBhIHBv aW50ZXIgdG8gdGhlIFBDSSBkZXZpY2Ugd2l0aCBhIHJlZmVyZW5jZSB0YWtlbiAodXNlIHBjaV9k ZXZfcHV0CisgKiB0byByZXR1cm4gdGhlIHJlZmVyZW5jZSkgb3IgTlVMTCBpZiBubyBjb21wYXRp YmxlIGRldmljZSBpcyBmb3VuZC4gVGhlCisgKiBmb3VuZCBwcm92aWRlciB3aWxsIGFsc28gYmUg YXNzaWduZWQgdG8gdGhlIGNsaWVudCBsaXN0LgorICovCitzdHJ1Y3QgcGNpX2RldiAqcGNpX3Ay cG1lbV9maW5kKHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCit7CisJc3RydWN0IHBjaV9kZXYg KnBkZXYgPSBOVUxMOworCXN0cnVjdCBwY2lfcDJwZG1hX2NsaWVudCAqcG9zOworCWludCBkaXN0 YW5jZTsKKwlpbnQgY2xvc2VzdF9kaXN0YW5jZSA9IElOVF9NQVg7CisJc3RydWN0IHBjaV9kZXYg KipjbG9zZXN0X3BkZXZzOworCWludCBkZXZfY250ID0gMDsKKwljb25zdCBpbnQgbWF4X2RldnMg PSBQQUdFX1NJWkUgLyBzaXplb2YoKmNsb3Nlc3RfcGRldnMpOworCWludCBpOworCisJY2xvc2Vz dF9wZGV2cyA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKworCXdoaWxlICgocGRl diA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSkgeworCQlp ZiAoIXBjaV9oYXNfcDJwbWVtKHBkZXYpKQorCQkJY29udGludWU7CisKKwkJZGlzdGFuY2UgPSBw Y2lfcDJwZG1hX2Rpc3RhbmNlKHBkZXYsIGNsaWVudHMsIGZhbHNlKTsKKwkJaWYgKGRpc3RhbmNl IDwgMCB8fCBkaXN0YW5jZSA+IGNsb3Nlc3RfZGlzdGFuY2UpCisJCQljb250aW51ZTsKKworCQlp ZiAoZGlzdGFuY2UgPT0gY2xvc2VzdF9kaXN0YW5jZSAmJiBkZXZfY250ID49IG1heF9kZXZzKQor CQkJY29udGludWU7CisKKwkJaWYgKGRpc3RhbmNlIDwgY2xvc2VzdF9kaXN0YW5jZSkgeworCQkJ Zm9yIChpID0gMDsgaSA8IGRldl9jbnQ7IGkrKykKKwkJCQlwY2lfZGV2X3B1dChjbG9zZXN0X3Bk ZXZzW2ldKTsKKworCQkJZGV2X2NudCA9IDA7CisJCQljbG9zZXN0X2Rpc3RhbmNlID0gZGlzdGFu Y2U7CisJCX0KKworCQljbG9zZXN0X3BkZXZzW2Rldl9jbnQrK10gPSBwY2lfZGV2X2dldChwZGV2 KTsKKwl9CisKKwlpZiAoZGV2X2NudCkKKwkJcGRldiA9IHBjaV9kZXZfZ2V0KGNsb3Nlc3RfcGRl dnNbcHJhbmRvbV91MzJfbWF4KGRldl9jbnQpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X2Nu dDsgaSsrKQorCQlwY2lfZGV2X3B1dChjbG9zZXN0X3BkZXZzW2ldKTsKKworCWlmIChwZGV2KQor CQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgY2xpZW50cywgbGlzdCkKKwkJCXBvcy0+cHJvdmlk ZXIgPSBwZGV2OworCisJa2ZyZWUoY2xvc2VzdF9wZGV2cyk7CisJcmV0dXJuIHBkZXY7Cit9CitF WFBPUlRfU1lNQk9MX0dQTChwY2lfcDJwbWVtX2ZpbmQpOworCisvKioKKyAqIHBjaV9hbGxvY19w MnBfbWVtIC0gYWxsb2NhdGUgcGVlci10by1wZWVyIERNQSBtZW1vcnkKKyAqIEBwZGV2OiB0aGUg ZGV2aWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCisgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVz IHRvIGFsbG9jYXRlCisgKgorICogUmV0dXJucyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBvciBOVUxM IG9uIGVycm9yLgorICovCit2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpw ZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAodW5saWtlbHkoIXBkZXYt PnAycGRtYSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKHVubGlrZWx5KCFwZXJjcHVfcmVmX3Ry eWdldF9saXZlKCZwZGV2LT5wMnBkbWEtPmRldm1hcF9yZWYpKSkKKwkJcmV0dXJuIE5VTEw7CisK KwlyZXQgPSAodm9pZCAqKWdlbl9wb29sX2FsbG9jKHBkZXYtPnAycGRtYS0+cG9vbCwgc2l6ZSk7 CisKKwlpZiAodW5saWtlbHkoIXJldCkpCisJCXBlcmNwdV9yZWZfcHV0KCZwZGV2LT5wMnBkbWEt PmRldm1hcF9yZWYpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9h bGxvY19wMnBtZW0pOworCisvKioKKyAqIHBjaV9mcmVlX3AycG1lbSAtIGFsbG9jYXRlIHBlZXIt dG8tcGVlciBETUEgbWVtb3J5CisgKiBAcGRldjogdGhlIGRldmljZSB0aGUgbWVtb3J5IHdhcyBh bGxvY2F0ZWQgZnJvbQorICogQGFkZHI6IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSB0aGF0IHdhcyBh bGxvY2F0ZWQKKyAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdGhhdCB3YXMgYWxsb2NhdGVkCisg Ki8KK3ZvaWQgcGNpX2ZyZWVfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRy LCBzaXplX3Qgc2l6ZSkKK3sKKwlnZW5fcG9vbF9mcmVlKHBkZXYtPnAycGRtYS0+cG9vbCwgKHVp bnRwdHJfdClhZGRyLCBzaXplKTsKKwlwZXJjcHVfcmVmX3B1dCgmcGRldi0+cDJwZG1hLT5kZXZt YXBfcmVmKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9mcmVlX3AycG1lbSk7CisKKy8qKgor ICogcGNpX3ZpcnRfdG9fYnVzIC0gcmV0dXJuIHRoZSBQQ0kgYnVzIGFkZHJlc3MgZm9yIGEgZ2l2 ZW4gdmlydHVhbAorICoJYWRkcmVzcyBvYnRhaW5lZCB3aXRoIHBjaV9hbGxvY19wMnBtZW0oKQor ICogQHBkZXY6IHRoZSBkZXZpY2UgdGhlIG1lbW9yeSB3YXMgYWxsb2NhdGVkIGZyb20KKyAqIEBh ZGRyOiBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkCisgKi8KK3BjaV9i dXNfYWRkcl90IHBjaV9wMnBtZW1fdmlydF90b19idXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZv aWQgKmFkZHIpCit7CisJaWYgKCFhZGRyKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBkZXYtPnAycGRt YSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5vdGU6IHdoZW4gd2UgYWRkZWQgdGhlIG1lbW9y eSB0byB0aGUgcG9vbCB3ZSB1c2VkIHRoZSBQQ0kKKwkgKiBidXMgYWRkcmVzcyBhcyB0aGUgcGh5 c2ljYWwgYWRkcmVzcy4gU28gZ2VuX3Bvb2xfdmlydF90b19waHlzKCkKKwkgKiBhY3R1YWxseSBy ZXR1cm5zIHRoZSBidXMgYWRkcmVzcyBkZXNwaXRlIHRoZSBtaXNsZWFkaW5nIG5hbWUuCisJICov CisJcmV0dXJuIGdlbl9wb29sX3ZpcnRfdG9fcGh5cyhwZGV2LT5wMnBkbWEtPnBvb2wsICh1bnNp Z25lZCBsb25nKWFkZHIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3AycG1lbV92aXJ0X3Rv X2J1cyk7CisKKy8qKgorICogcGNpX3AycG1lbV9hbGxvY19zZ2wgLSBhbGxvY2F0ZSBwZWVyLXRv LXBlZXIgRE1BIG1lbW9yeSBpbiBhIHNjYXR0ZXJsaXN0CisgKiBAcGRldjogdGhlIGRldmljZSB0 byBhbGxvY2F0ZSBtZW1vcnkgZnJvbQorICogQHNnbDogdGhlIGFsbG9jYXRlZCBzY2F0dGVybGlz dAorICogQG5lbnRzOiB0aGUgbnVtYmVyIG9mIFNHIGVudHJpZXMgaW4gdGhlIGxpc3QKKyAqIEBs ZW5ndGg6IG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQorICoKKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzCisgKi8KK3N0cnVjdCBzY2F0dGVybGlzdCAqcGNpX3AycG1lbV9hbGxvY19zZ2woc3Ry dWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIgbGVuZ3Ro KQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdm9pZCAqYWRkcjsKKworCXNnID0ga3ph bGxvYyhzaXplb2YoKnNnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZykKKwkJcmV0dXJuIE5VTEw7 CisKKwlzZ19pbml0X3RhYmxlKHNnLCAxKTsKKworCWFkZHIgPSBwY2lfYWxsb2NfcDJwbWVtKHBk ZXYsIGxlbmd0aCk7CisJaWYgKCFhZGRyKQorCQlnb3RvIG91dF9mcmVlX3NnOworCisJc2dfc2V0 X2J1ZihzZywgYWRkciwgbGVuZ3RoKTsKKwkqbmVudHMgPSAxOworCXJldHVybiBzZzsKKworb3V0 X2ZyZWVfc2c6CisJa2ZyZWUoc2cpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9H UEwocGNpX3AycG1lbV9hbGxvY19zZ2wpOworCisvKioKKyAqIHBjaV9wMnBtZW1fZnJlZV9zZ2wg LSBmcmVlIGEgc2NhdHRlcmxpc3QgYWxsb2NhdGVkIGJ5IHBjaV9wMnBtZW1fYWxsb2Nfc2dsKCkK KyAqIEBwZGV2OiB0aGUgZGV2aWNlIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tCisgKiBAc2dsOiB0 aGUgYWxsb2NhdGVkIHNjYXR0ZXJsaXN0CisgKiBAbmVudHM6IHRoZSBudW1iZXIgb2YgU0cgZW50 cmllcyBpbiB0aGUgbGlzdAorICovCit2b2lkIHBjaV9wMnBtZW1fZnJlZV9zZ2woc3RydWN0IHBj aV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsKQoreworCXN0cnVjdCBzY2F0dGVy bGlzdCAqc2c7CisJaW50IGNvdW50OworCisJZm9yX2VhY2hfc2coc2dsLCBzZywgSU5UX01BWCwg Y291bnQpIHsKKwkJaWYgKCFzZykKKwkJCWJyZWFrOworCisJCXBjaV9mcmVlX3AycG1lbShwZGV2 LCBzZ192aXJ0KHNnKSwgc2ctPmxlbmd0aCk7CisJfQorCWtmcmVlKHNnbCk7Cit9CitFWFBPUlRf U1lNQk9MX0dQTChwY2lfcDJwbWVtX2ZyZWVfc2dsKTsKKworLyoqCisgKiBwY2lfcDJwbWVtX3B1 Ymxpc2ggLSBwdWJsaXNoIHRoZSBwZWVyLXRvLXBlZXIgRE1BIG1lbW9yeSBmb3IgdXNlIGJ5Cisg KglvdGhlciBkZXZpY2VzIHdpdGggcGNpX3AycG1lbV9maW5kKCkKKyAqIEBwZGV2OiB0aGUgZGV2 aWNlIHdpdGggcGVlci10by1wZWVyIERNQSBtZW1vcnkgdG8gcHVibGlzaAorICogQHB1Ymxpc2g6 IHNldCB0byB0cnVlIHRvIHB1Ymxpc2ggdGhlIG1lbW9yeSwgZmFsc2UgdG8gdW5wdWJsaXNoIGl0 CisgKgorICogUHVibGlzaGVkIG1lbW9yeSBjYW4gYmUgdXNlZCBieSBvdGhlciBQQ0kgZGV2aWNl IGRyaXZlcnMgZm9yCisgKiBwZWVyLTItcGVlciBETUEgb3BlcmF0aW9ucy4gTm9uLXB1Ymxpc2hl ZCBtZW1vcnkgaXMgcmVzZXJ2ZWQgZm9yCisgKiBleGx1c2l2ZSB1c2Ugb2YgdGhlIGRldmljZSBk cml2ZXIgdGhhdCByZWdpc3RlcnMgdGhlIHBlZXItdG8tcGVlcgorICogbWVtb3J5LgorICovCit2 b2lkIHBjaV9wMnBtZW1fcHVibGlzaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCBwdWJsaXNo KQoreworCWlmIChwdWJsaXNoICYmICFwZGV2LT5wMnBkbWEpCisJCXJldHVybjsKKworCXBkZXYt PnAycGRtYS0+cDJwbWVtX3B1Ymxpc2hlZCA9IHB1Ymxpc2g7Cit9CitFWFBPUlRfU1lNQk9MX0dQ TChwY2lfcDJwbWVtX3B1Ymxpc2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1yZW1h cC5oIGIvaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oCmluZGV4IGY5MWY5ZTc2MzU1Ny4uOTU1MzM3 MGViZGFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgKKysrIGIvaW5jbHVk ZS9saW51eC9tZW1yZW1hcC5oCkBAIC01MywxMSArNTMsMTYgQEAgc3RydWN0IHZtZW1fYWx0bWFw IHsKICAqIHdha2V1cCBldmVudCB3aGVuZXZlciBhIHBhZ2UgaXMgdW5waW5uZWQgYW5kIGJlY29t ZXMgaWRsZS4gVGhpcwogICogd2FrZXVwIGlzIHVzZWQgdG8gY29vcmRpbmF0ZSBwaHlzaWNhbCBh ZGRyZXNzIHNwYWNlIG1hbmFnZW1lbnQgKGV4OgogICogZnMgdHJ1bmNhdGUvaG9sZSBwdW5jaCkg dnMgcGlubmVkIHBhZ2VzIChleDogZGV2aWNlIGRtYSkuCisgKgorICogTUVNT1JZX0RFVklDRV9Q Q0lfUDJQRE1BOgorICogRGV2aWNlIG1lbW9yeSByZXNpZGluZyBpbiBhIFBDSSBCQVIgaW50ZW5k ZWQgZm9yIHVzZSB3aXRoIFBlZXItdG8tUGVlcgorICogdHJhbnNhY3Rpb25zLgogICovCiBlbnVt IG1lbW9yeV90eXBlIHsKIAlNRU1PUllfREVWSUNFX1BSSVZBVEUgPSAxLAogCU1FTU9SWV9ERVZJ Q0VfUFVCTElDLAogCU1FTU9SWV9ERVZJQ0VfRlNfREFYLAorCU1FTU9SWV9ERVZJQ0VfUENJX1Ay UERNQSwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRl L2xpbnV4L21tLmgKaW5kZXggYTYxZWJlOGFkNGNhLi4yMDU1ZGY0MTJhNzcgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTg5MCw2ICs4 OTAsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9wdWJsaWNfcGFnZShjb25zdCBz dHJ1Y3QgcGFnZSAqcGFnZSkKIAkJcGFnZS0+cGdtYXAtPnR5cGUgPT0gTUVNT1JZX0RFVklDRV9Q VUJMSUM7CiB9CiAKKyNpZmRlZiBDT05GSUdfUENJX1AyUERNQQorc3RhdGljIGlubGluZSBib29s IGlzX3BjaV9wMnBkbWFfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4g aXNfem9uZV9kZXZpY2VfcGFnZShwYWdlKSAmJgorCQlwYWdlLT5wZ21hcC0+dHlwZSA9PSBNRU1P UllfREVWSUNFX1BDSV9QMlBETUE7Cit9CisjZWxzZSAvKiBDT05GSUdfUENJX1AyUERNQSAqLwor c3RhdGljIGlubGluZSBib29sIGlzX3BjaV9wMnBkbWFfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAq cGFnZSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9QMlBETUEg Ki8KKwogI2Vsc2UgLyogQ09ORklHX0RFVl9QQUdFTUFQX09QUyAqLwogc3RhdGljIGlubGluZSB2 b2lkIGRldl9wYWdlbWFwX2dldF9vcHModm9pZCkKIHsKQEAgLTkxMyw2ICs5MjYsMTEgQEAgc3Rh dGljIGlubGluZSBib29sIGlzX2RldmljZV9wdWJsaWNfcGFnZShjb25zdCBzdHJ1Y3QgcGFnZSAq cGFnZSkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wY2lf cDJwZG1hX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIGZhbHNlOwor fQogI2VuZGlmIC8qIENPTkZJR19ERVZfUEFHRU1BUF9PUFMgKi8KIAogc3RhdGljIGlubGluZSB2 b2lkIGdldF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdiMmIwZjU0NzUyOAotLS0gL2Rldi9udWxsCisr KyBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFBDSSBQZWVyIDIgUGVlciBE TUEgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhv cnBlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxNywgTWljcm9zZW1pIENvcnBvcmF0aW9uCisg KiBDb3B5cmlnaHQgKGMpIDIwMTcsIENocmlzdG9waCBIZWxsd2lnCisgKiBDb3B5cmlnaHQgKGMp IDIwMTgsIEVpZGV0aWNvbSBJbmMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1BDSV9QMlBE TUFfSAorI2RlZmluZSBfTElOVVhfUENJX1AyUERNQV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2ku aD4KKworc3RydWN0IGJsb2NrX2RldmljZTsKK3N0cnVjdCBzY2F0dGVybGlzdDsKKworI2lmZGVm IENPTkZJR19QQ0lfUDJQRE1BCitpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBj aV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLAorCQl1NjQgb2Zmc2V0KTsKK2ludCBw Y2lfcDJwZG1hX2FkZF9jbGllbnQoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGRldmlj ZSAqZGV2KTsKK3ZvaWQgcGNpX3AycGRtYV9yZW1vdmVfY2xpZW50KHN0cnVjdCBsaXN0X2hlYWQg KmhlYWQsIHN0cnVjdCBkZXZpY2UgKmRldik7Cit2b2lkIHBjaV9wMnBkbWFfY2xpZW50X2xpc3Rf ZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK2ludCBwY2lfcDJwZG1hX2Rpc3RhbmNlKHN0 cnVjdCBwY2lfZGV2ICpwcm92aWRlciwgc3RydWN0IGxpc3RfaGVhZCAqY2xpZW50cywKKwkJCWJv b2wgdmVyYm9zZSk7Citib29sIHBjaV9wMnBkbWFfYXNzaWduX3Byb3ZpZGVyKHN0cnVjdCBwY2lf ZGV2ICpwcm92aWRlciwKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKTsKK2Jvb2wgcGNp X2hhc19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RydWN0IHBjaV9kZXYgKnBjaV9w MnBtZW1fZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKTsKK3ZvaWQgKnBjaV9hbGxvY19w MnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplKTsKK3ZvaWQgcGNpX2ZyZWVf cDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSk7Citw Y2lfYnVzX2FkZHJfdCBwY2lfcDJwbWVtX3ZpcnRfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCB2b2lkICphZGRyKTsKK3N0cnVjdCBzY2F0dGVybGlzdCAqcGNpX3AycG1lbV9hbGxvY19zZ2wo c3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSB1bnNpZ25lZCBpbnQgKm5lbnRzLCB1MzIgbGVu Z3RoKTsKK3ZvaWQgcGNpX3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3Ry dWN0IHNjYXR0ZXJsaXN0ICpzZ2wpOwordm9pZCBwY2lfcDJwbWVtX3B1Ymxpc2goc3RydWN0IHBj aV9kZXYgKnBkZXYsIGJvb2wgcHVibGlzaCk7CisjZWxzZSAvKiBDT05GSUdfUENJX1AyUERNQSAq Lworc3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9k ZXYgKnBkZXYsIGludCBiYXIsCisJCXNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KQoreworCXJldHVy biAtRU9QTk9UU1VQUDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX2NsaWVu dChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0 dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3AycGRtYV9yZW1vdmVfY2xpZW50KHN0 cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCXN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KK3N0YXRp YyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX2NsaWVudF9saXN0X2ZyZWUoc3RydWN0IGxpc3RfaGVh ZCAqaGVhZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfZGlzdGFuY2Uoc3Ry dWN0IHBjaV9kZXYgKnByb3ZpZGVyLAorCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVu dHMsCisJCQkJICAgICAgYm9vbCB2ZXJib3NlKQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBp bmxpbmUgYm9vbCBwY2lfcDJwZG1hX2Fzc2lnbl9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcHJv dmlkZXIsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsaWVudHMpCit7CisJcmV0dXJu IGZhbHNlOworfQorc3RhdGljIGlubGluZSBib29sIHBjaV9oYXNfcDJwbWVtKHN0cnVjdCBwY2lf ZGV2ICpwZGV2KQoreworCXJldHVybiBmYWxzZTsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBj aV9kZXYgKnBjaV9wMnBtZW1fZmluZChzdHJ1Y3QgbGlzdF9oZWFkICpjbGllbnRzKQoreworCXJl dHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSB2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVj dCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRp YyBpbmxpbmUgdm9pZCBwY2lfZnJlZV9wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQg KmFkZHIsCisJCXNpemVfdCBzaXplKQoreworfQorc3RhdGljIGlubGluZSBwY2lfYnVzX2FkZHJf dCBwY2lfcDJwbWVtX3ZpcnRfdG9fYnVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJICAg IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0 dGVybGlzdCAqcGNpX3AycG1lbV9hbGxvY19zZ2woc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCXVu c2lnbmVkIGludCAqbmVudHMsIHUzMiBsZW5ndGgpCit7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0 aWMgaW5saW5lIHZvaWQgcGNpX3AycG1lbV9mcmVlX3NnbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwK KwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNp X3AycG1lbV9wdWJsaXNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBib29sIHB1Ymxpc2gpCit7Cit9 CisjZW5kaWYgLyogQ09ORklHX1BDSV9QMlBETUEgKi8KKyNlbmRpZiAvKiBfTElOVVhfUENJX1Ay UF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9w Y2kuaAppbmRleCBlNzJjYThkZDYyNDEuLjVkOTVkYmYyMWY0YSAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yODEsNiArMjgxLDcg QEAgc3RydWN0IHBjaWVfbGlua19zdGF0ZTsKIHN0cnVjdCBwY2lfdnBkOwogc3RydWN0IHBjaV9z cmlvdjsKIHN0cnVjdCBwY2lfYXRzOworc3RydWN0IHBjaV9wMnBkbWE7CiAKIC8qIFRoZSBwY2lf ZGV2IHN0cnVjdHVyZSBkZXNjcmliZXMgUENJIGRldmljZXMgKi8KIHN0cnVjdCBwY2lfZGV2IHsK QEAgLTQzOSw2ICs0NDAsOSBAQCBzdHJ1Y3QgcGNpX2RldiB7CiAjaWZkZWYgQ09ORklHX1BDSV9Q QVNJRAogCXUxNgkJcGFzaWRfZmVhdHVyZXM7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfUENJX1Ay UERNQQorCXN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7CisjZW5kaWYKIAlwaHlzX2FkZHJfdAly b207CQkvKiBQaHlzaWNhbCBhZGRyZXNzIGlmIG5vdCBmcm9tIEJBUiAqLwogCXNpemVfdAkJcm9t bGVuOwkJLyogTGVuZ3RoIGlmIG5vdCBmcm9tIEJBUiAqLwogCWNoYXIJCSpkcml2ZXJfb3ZlcnJp ZGU7IC8qIERyaXZlciBuYW1lIHRvIGZvcmNlIGEgbWF0Y2ggKi8KLS0gCjIuMTEuMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbnZkaW1tIG1h aWxpbmcgbGlzdApMaW51eC1udmRpbW1AbGlzdHMuMDEub3JnCmh0dHBzOi8vbGlzdHMuMDEub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtbnZkaW1tCg==