From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) (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 888FD2034B9F3 for ; Wed, 13 Dec 2017 18:05:52 -0800 (PST) From: Ross Zwisler Subject: [PATCH v3 2/3] hmat: add heterogeneous memory sysfs support Date: Wed, 13 Dec 2017 19:10:18 -0700 Message-Id: <20171214021019.13579-3-ross.zwisler@linux.intel.com> In-Reply-To: <20171214021019.13579-1-ross.zwisler@linux.intel.com> References: <20171214021019.13579-1-ross.zwisler@linux.intel.com> MIME-Version: 1.0 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 Cc: "Box, David E" , Dave Hansen , "Zheng, Lv" , linux-nvdimm@lists.01.org, "Rafael J. Wysocki" , Anaczkowski,, Robert, Lukasz, "Erik , Len Brown" , John Hubbard , Jerome Glisse , devel@acpica.org, Kogut,, "Marcin , Brice Goglin , Nachimuthu, Murugasamy" , "Rafael J. Wysocki" , Koziej,, "Joonas , Andrew Morton , Tim Chen" List-ID: QWRkIGEgbmV3IHN5c2ZzIHN1YnN5c3RlbSwgL3N5cy9kZXZpY2VzL3N5c3RlbS9obWF0LCB3aGlj aCBzdXJmYWNlcwppbmZvcm1hdGlvbiBhYm91dCBtZW1vcnkgaW5pdGlhdG9ycyBhbmQgbWVtb3J5 IHRhcmdldHMgdG8gdGhlIHVzZXIuICBUaGVzZQppbml0aWF0b3JzIGFuZCB0YXJnZXRzIGFyZSBk ZXNjcmliZWQgYnkgdGhlIEFDUEkgU1JBVCBhbmQgSE1BVCB0YWJsZXMuCgpBICJtZW1vcnkgaW5p dGlhdG9yIiBpbiB0aGlzIGNhc2UgaXMgYSBOVU1BIG5vZGUgY29udGFpbmluZyBvbmUgb3IgbW9y ZQpkZXZpY2VzIHN1Y2ggYXMgQ1BVIG9yIHNlcGFyYXRlIG1lbW9yeSBJL08gZGV2aWNlcyB0aGF0 IGNhbiBpbml0aWF0ZQptZW1vcnkgcmVxdWVzdHMuICBBICJtZW1vcnkgdGFyZ2V0IiBpcyBOVU1B IG5vZGUgY29udGFpbmluZyBhdCBsZWFzdCBvbmUKQ1BVLWFjY2Vzc2libGUgcGh5c2ljYWwgYWRk cmVzcyByYW5nZS4KClRoZSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24gc3VyZmFjZWQgYnkgdGhp cyBwYXRjaCBpcyB0aGUgbWFwcGluZyBiZXR3ZWVuCnRoZSBBQ1BJIHRhYmxlICJwcm94aW1pdHkg ZG9tYWluIiBudW1iZXJzLCBoZWxkIGluIHRoZSAiZmlybXdhcmVfaWQiCmF0dHJpYnV0ZSwgYW5k IExpbnV4IE5VTUEgbm9kZSBudW1iZXJzLiAgRXZlcnkgQUNQSSBwcm94aW1pdHkgZG9tYWluIHdp bGwKZW5kIHVwIGJlaW5nIGEgdW5pcXVlIE5VTUEgbm9kZSBpbiBMaW51eCwgYnV0IHRoZSBudW1i ZXJzIG1heSBnZXQgcmVvcmRlcmVkCmFuZCBMaW51eCBjYW4gY3JlYXRlIGV4dHJhIE5VTUEgbm9k ZXMgdGhhdCBkb24ndCBtYXAgYmFjayB0byBBQ1BJIHByb3hpbWl0eQpkb21haW5zLiAgVGhlIGZp cm13YXJlX2lkIHZhbHVlIGlzIG5lZWRlZCBpZiBhbnlvbmUgZXZlciB3YW50cyB0byBsb29rIGF0 CnRoZSBBQ1BJIEhNQVQgYW5kIFNSQVQgdGFibGVzIGRpcmVjdGx5IGFuZCBtYWtlIHNlbnNlIG9m IGhvdyB0aGV5IG1hcCB0bwpOVU1BIG5vZGVzIGluIExpbnV4LgoKSW5pdGlhdG9ycyBhcmUgZm91 bmQgYXQgL3N5cy9kZXZpY2VzL3N5c3RlbS9obWF0L21lbV9pbml0WCwgYW5kIHRoZQphdHRyaWJ1 dGVzIGZvciBhIGdpdmVuIGluaXRpYXRvciBsb29rIGxpa2UgdGhpczoKCiAgIyB0cmVlIG1lbV9p bml0MAogIG1lbV9pbml0MAogIOKUnOKUgOKUgCBmaXJtd2FyZV9pZAogIOKUnOKUgOKUgCBub2Rl MCAtPiAuLi8uLi9ub2RlL25vZGUwCiAg4pSc4pSA4pSAIHBvd2VyCiAg4pSCwqDCoCDilJzilIDi lIAgYXN5bmMKICDilILCoMKgIC4uLgogIOKUnOKUgOKUgCBzdWJzeXN0ZW0gLT4gLi4vLi4vLi4v Li4vYnVzL2htYXQKICDilJTilIDilIAgdWV2ZW50CgpXaGVyZSAibWVtX2luaXQwIiBvbiBteSBz eXN0ZW0gcmVwcmVzZW50cyB0aGUgQ1BVIGFjdGluZyBhcyBhIG1lbW9yeQppbml0aWF0b3IgYXQg TlVNQSBub2RlIDAuICBVc2VycyBjYW4gZGlzY292ZXIgd2hpY2ggQ1BVcyBhcmUgcGFydCBvZiB0 aGlzCm1lbW9yeSBpbml0aWF0b3IgYnkgZm9sbG93aW5nIHRoZSBub2RlMCBzeW1saW5rIGFuZCBs b29raW5nIGF0IGNwdW1hcCwKY3B1bGlzdCBhbmQgdGhlIGNwdSogc3ltbGlua3MuCgpUYXJnZXRz IGFyZSBmb3VuZCBhdCAvc3lzL2RldmljZXMvc3lzdGVtL2htYXQvbWVtX3RndFgsIGFuZCB0aGUg YXR0cmlidXRlcwpmb3IgYSBnaXZlbiB0YXJnZXQgbG9vayBsaWtlIHRoaXM6CgogICMgdHJlZSBt ZW1fdGd0MgogIG1lbV90Z3QyCiAg4pSc4pSA4pSAIGZpcm13YXJlX2lkCiAg4pSc4pSA4pSAIGlz X2NhY2hlZAogIOKUnOKUgOKUgCBub2RlMiAtPiAuLi8uLi9ub2RlL25vZGUyCiAg4pSc4pSA4pSA IHBvd2VyCiAg4pSCwqDCoCDilJzilIDilIAgYXN5bmMKICDilILCoMKgIC4uLgogIOKUnOKUgOKU gCBzdWJzeXN0ZW0gLT4gLi4vLi4vLi4vLi4vYnVzL2htYXQKICDilJTilIDilIAgdWV2ZW50CgpV c2VycyBjYW4gZGlzY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lbW9yeSBvd25lZCBieSB0 aGlzIG1lbW9yeSB0YXJnZXQKYnkgZm9sbG93aW5nIHRoZSBub2RlMiBzeW1saW5rIGFuZCBsb29r aW5nIGF0IG1lbWluZm8sIHZtc3RhdCBhbmQgYXQgdGhlCm1lbW9yeSogbWVtb3J5IHNlY3Rpb24g c3ltbGlua3MuCgpTaWduZWQtb2ZmLWJ5OiBSb3NzIFp3aXNsZXIgPHJvc3Muendpc2xlckBsaW51 eC5pbnRlbC5jb20+Ci0tLQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgfCAgIDYgKwog ZHJpdmVycy9hY3BpL0tjb25maWcgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9hY3BpL01ha2Vm aWxlICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9hY3BpL2htYXQvS2NvbmZpZyAgICAgfCAgIDcg KwogZHJpdmVycy9hY3BpL2htYXQvTWFrZWZpbGUgICAgfCAgIDIgKwogZHJpdmVycy9hY3BpL2ht YXQvY29yZS5jICAgICAgfCA1MzYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBkcml2ZXJzL2FjcGkvaG1hdC9obWF0LmggICAgICB8ICA0NyArKysrCiBkcml2ZXJz L2FjcGkvaG1hdC9pbml0aWF0b3IuYyB8ICA0MyArKysrCiBkcml2ZXJzL2FjcGkvaG1hdC90YXJn ZXQuYyAgICB8ICA1NSArKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA2OTggaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYWNwaS9obWF0L0tjb25maWcKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2FjcGkvaG1hdC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvYWNwaS9obWF0L2NvcmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYWNwaS9o bWF0L2htYXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYWNwaS9obWF0L2luaXRpYXRv ci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hY3BpL2htYXQvdGFyZ2V0LmMKCmRpZmYg LS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDgyYWQwZWFiY2U0Zi4uNjRl YmVjMDcwOGRlIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAt NjM2Niw2ICs2MzY2LDEyIEBAIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9zY3NpL2hpc2lfc2Fz LwogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Njc2kvaGlzaWxpY29uLXNh cy50eHQKIAorSE1BVCAtIEFDUEkgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgQXR0cmlidXRlIFRhYmxl IFN1cHBvcnQKK006CVJvc3MgWndpc2xlciA8cm9zcy56d2lzbGVyQGxpbnV4LmludGVsLmNvbT4K K0w6CWxpbnV4LW1tQGt2YWNrLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2FjcGkvaG1h dC8KKwogSE1NIC0gSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudAogTToJSsOpcsO0bWUg R2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CiBMOglsaW51eC1tbUBrdmFjay5vcmcKZGlmZiAt LWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXgg NDY1MDUzOTY4NjllLi4yMWNkZDEyODg0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC00NjYsNiArNDY2LDcgQEAgY29uZmln IEFDUElfUkVEVUNFRF9IQVJEV0FSRV9PTkxZCiAJICBJZiB5b3UgYXJlIHVuc3VyZSB3aGF0IHRv IGRvLCBkbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uLgogCiBzb3VyY2UgImRyaXZlcnMvYWNwaS9u Zml0L0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvYWNwaS9obWF0L0tjb25maWciCiAKIHNvdXJj ZSAiZHJpdmVycy9hY3BpL2FwZWkvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9hY3BpL2RwdGYv S2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNw aS9NYWtlZmlsZQppbmRleCA0MTk1NGE2MDE5ODkuLmVkNWVhYjZiMDQxMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNzUs NiArNzUsNyBAQCBvYmotJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpCSs9IHByb2Nlc3Nvci5vCiBv YmotJChDT05GSUdfQUNQSSkJCSs9IGNvbnRhaW5lci5vCiBvYmotJChDT05GSUdfQUNQSV9USEVS TUFMKQkrPSB0aGVybWFsLm8KIG9iai0kKENPTkZJR19BQ1BJX05GSVQpCQkrPSBuZml0Lworb2Jq LSQoQ09ORklHX0FDUElfSE1BVCkJCSs9IGhtYXQvCiBvYmotJChDT05GSUdfQUNQSSkJCSs9IGFj cGlfbWVtaG90cGx1Zy5vCiBvYmotJChDT05GSUdfQUNQSV9IT1RQTFVHX0lPQVBJQykgKz0gaW9h cGljLm8KIG9iai0kKENPTkZJR19BQ1BJX0JBVFRFUlkpCSs9IGJhdHRlcnkubwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9hY3BpL2htYXQvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9obWF0L0tjb25maWcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NTRhZDQ3MDEwMDUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvaG1hdC9LY29uZmlnCkBAIC0wLDAgKzEsNyBA QAorY29uZmlnIEFDUElfSE1BVAorCWJvb2wgIkFDUEkgSGV0ZXJvZ2VuZW91cyBNZW1vcnkgQXR0 cmlidXRlIFRhYmxlIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBBQ1BJX05VTUEKKwlkZXBlbmRzIG9u IFNZU0ZTCisJaGVscAorCSAgRXhwb3J0cyBhIHN5c2ZzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBB Q1BJIEhldGVyb2dlbmVvdXMgTWVtb3J5CisJICBBdHRyaWJ1dGVzIFRhYmxlIChITUFUKS4KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9obWF0L01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL2htYXQv TWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lZGY0YmNi MWM5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvaG1hdC9NYWtlZmlsZQpAQCAt MCwwICsxLDIgQEAKK29iai0kKENPTkZJR19BQ1BJX0hNQVQpIDo9IGhtYXQubworaG1hdC15IDo9 IGNvcmUubyBpbml0aWF0b3IubyB0YXJnZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ht YXQvY29yZS5jIGIvZHJpdmVycy9hY3BpL2htYXQvY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNjFiOTBkYWRmODRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9hY3BpL2htYXQvY29yZS5jCkBAIC0wLDAgKzEsNTM2IEBACisvKgorICogSGV0ZXJvZ2Vu ZW91cyBNZW1vcnkgQXR0cmlidXRlcyBUYWJsZSAoSE1BVCkgcmVwcmVzZW50YXRpb24gaW4gc3lz ZnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisg KiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8YWNwaS9hY3BpX251bWEuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+ CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5j bHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaG1hdC5o IgorCitzdGF0aWMgTElTVF9IRUFEKHRhcmdldF9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQoaW5p dGlhdG9yX2xpc3QpOworCitzdGF0aWMgYm9vbCBiYWRfaG1hdDsKKworc3RhdGljIGludCBsaW5r X25vZGVfZm9yX2tvYmoodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBrb2JqZWN0ICprb2JqKQor eworCWlmIChub2RlX2RldmljZXNbbm9kZV0pCisJCXJldHVybiBzeXNmc19jcmVhdGVfbGluayhr b2JqLCAmbm9kZV9kZXZpY2VzW25vZGVdLT5kZXYua29iaiwKKwkJCQlrb2JqZWN0X25hbWUoJm5v ZGVfZGV2aWNlc1tub2RlXS0+ZGV2LmtvYmopKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgcmVtb3ZlX25vZGVfZm9yX2tvYmoodW5zaWduZWQgaW50IG5vZGUsIHN0cnVjdCBrb2JqZWN0 ICprb2JqKQoreworCWlmIChub2RlX2RldmljZXNbbm9kZV0pCisJCXN5c2ZzX3JlbW92ZV9saW5r KGtvYmosCisJCQkJa29iamVjdF9uYW1lKCZub2RlX2RldmljZXNbbm9kZV0tPmRldi5rb2JqKSk7 Cit9CisKKyNkZWZpbmUgSE1BVF9DTEFTU19OQU1FCSJobWF0IgorCitzdGF0aWMgc3RydWN0IGJ1 c190eXBlIGhtYXRfc3Vic3lzID0geworCS8qCisJICogLmRldl9uYW1lIGlzIHNldCBiZWZvcmUg ZGV2aWNlX3JlZ2lzdGVyKCkgYmFzZWQgb24gdGhlIHR5cGUgb2YKKwkgKiBkZXZpY2Ugd2UgYXJl IHJlZ2lzdGVyaW5nLgorCSAqLworCS5uYW1lID0gSE1BVF9DTEFTU19OQU1FLAorfTsKKworLyog bWVtb3J5IGluaXRpYXRvcnMgKi8KK3N0YXRpYyB2b2lkIHJlbGVhc2VfbWVtb3J5X2luaXRpYXRv cihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1lbW9yeV9pbml0aWF0b3IgKmluaXQg PSB0b19tZW1vcnlfaW5pdGlhdG9yKGRldik7CisKKwlsaXN0X2RlbCgmaW5pdC0+bGlzdCk7CisJ a2ZyZWUoaW5pdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZW1vdmVfbWVtb3J5X2luaXRp YXRvcihzdHJ1Y3QgbWVtb3J5X2luaXRpYXRvciAqaW5pdCkKK3sKKwlpZiAoaW5pdC0+aXNfcmVn aXN0ZXJlZCkgeworCQlyZW1vdmVfbm9kZV9mb3Jfa29iaihweG1fdG9fbm9kZShpbml0LT5weG0p LCAmaW5pdC0+ZGV2LmtvYmopOworCQlkZXZpY2VfdW5yZWdpc3RlcigmaW5pdC0+ZGV2KTsKKwl9 IGVsc2UKKwkJcmVsZWFzZV9tZW1vcnlfaW5pdGlhdG9yKCZpbml0LT5kZXYpOworfQorCitzdGF0 aWMgaW50IF9faW5pdCByZWdpc3Rlcl9tZW1vcnlfaW5pdGlhdG9yKHN0cnVjdCBtZW1vcnlfaW5p dGlhdG9yICppbml0KQoreworCWludCByZXQ7CisKKwlobWF0X3N1YnN5cy5kZXZfbmFtZSA9ICJt ZW1faW5pdCI7CisJaW5pdC0+ZGV2LmJ1cyA9ICZobWF0X3N1YnN5czsKKwlpbml0LT5kZXYuaWQg PSBweG1fdG9fbm9kZShpbml0LT5weG0pOworCWluaXQtPmRldi5yZWxlYXNlID0gcmVsZWFzZV9t ZW1vcnlfaW5pdGlhdG9yOworCWluaXQtPmRldi5ncm91cHMgPSBtZW1vcnlfaW5pdGlhdG9yX2F0 dHJpYnV0ZV9ncm91cHM7CisKKwlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmluaXQtPmRldik7CisJ aWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpbml0LT5pc19yZWdpc3RlcmVkID0gdHJ1 ZTsKKwlyZXR1cm4gbGlua19ub2RlX2Zvcl9rb2JqKHB4bV90b19ub2RlKGluaXQtPnB4bSksICZp bml0LT5kZXYua29iaik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X2luaXRpYXRvciAqIF9f aW5pdCBhZGRfbWVtb3J5X2luaXRpYXRvcihpbnQgcHhtKQoreworCXN0cnVjdCBtZW1vcnlfaW5p dGlhdG9yICppbml0OworCisJaWYgKHB4bV90b19ub2RlKHB4bSkgPT0gTlVNQV9OT19OT0RFKSB7 CisJCXByX2VycigiSE1BVDogTm8gTlVNQSBub2RlIGZvciBQWE0gJWRcbiIsIHB4bSk7CisJCWJh ZF9obWF0ID0gdHJ1ZTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyoKKwkg KiBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBhbHJlYWR5IGFkZGVkIGFuIGluaXRpYXRvciBmb3IgdGhp cyBwcm94aW1pdHkKKwkgKiBkb21haW4uICBXZSBkb24ndCBjYXJlIGFib3V0IGFueSBvdGhlciBk aWZmZXJlbmNlcyBpbiB0aGUgU1JBVAorCSAqIHRhYmxlcyAoYXBpY19pZCwgZXRjKSwgc28gd2Ug anVzdCB1c2UgdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgdGFibGUKKwkgKiB3ZSBzZWUgZm9yIGEg Z2l2ZW4gcHJveGltaXR5IGRvbWFpbi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluaXQs ICZpbml0aWF0b3JfbGlzdCwgbGlzdCkKKwkJaWYgKGluaXQtPnB4bSA9PSBweG0pCisJCQlyZXR1 cm4gMDsKKworCWluaXQgPSBremFsbG9jKHNpemVvZigqaW5pdCksIEdGUF9LRVJORUwpOworCWlm ICghaW5pdCkgeworCQliYWRfaG1hdCA9IHRydWU7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCX0KKworCWluaXQtPnB4bSA9IHB4bTsKKworCWxpc3RfYWRkX3RhaWwoJmluaXQtPmxpc3Qs ICZpbml0aWF0b3JfbGlzdCk7CisJcmV0dXJuIGluaXQ7Cit9CisKKy8qIG1lbW9yeSB0YXJnZXRz ICovCitzdGF0aWMgdm9pZCByZWxlYXNlX21lbW9yeV90YXJnZXQoc3RydWN0IGRldmljZSAqZGV2 KQoreworCXN0cnVjdCBtZW1vcnlfdGFyZ2V0ICp0Z3QgPSB0b19tZW1vcnlfdGFyZ2V0KGRldik7 CisKKwlsaXN0X2RlbCgmdGd0LT5saXN0KTsKKwlrZnJlZSh0Z3QpOworfQorCitzdGF0aWMgdm9p ZCBfX2luaXQgcmVtb3ZlX21lbW9yeV90YXJnZXQoc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndCkK K3sKKwlpZiAodGd0LT5pc19yZWdpc3RlcmVkKSB7CisJCXJlbW92ZV9ub2RlX2Zvcl9rb2JqKHB4 bV90b19ub2RlKHRndC0+bWEtPnByb3hpbWl0eV9kb21haW4pLAorCQkJCSZ0Z3QtPmRldi5rb2Jq KTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJnRndC0+ZGV2KTsKKwl9IGVsc2UKKwkJcmVsZWFzZV9t ZW1vcnlfdGFyZ2V0KCZ0Z3QtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVy X21lbW9yeV90YXJnZXQoc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndCkKK3sKKwlpbnQgcmV0Owor CisJaWYgKCF0Z3QtPm1hIHx8ICF0Z3QtPnNwYSkgeworCQlwcl9lcnIoIkhNQVQ6IEluY29tcGxl dGUgbWVtb3J5IHRhcmdldCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWht YXRfc3Vic3lzLmRldl9uYW1lID0gIm1lbV90Z3QiOworCXRndC0+ZGV2LmJ1cyA9ICZobWF0X3N1 YnN5czsKKwl0Z3QtPmRldi5pZCA9IHB4bV90b19ub2RlKHRndC0+bWEtPnByb3hpbWl0eV9kb21h aW4pOworCXRndC0+ZGV2LnJlbGVhc2UgPSByZWxlYXNlX21lbW9yeV90YXJnZXQ7CisJdGd0LT5k ZXYuZ3JvdXBzID0gbWVtb3J5X3RhcmdldF9hdHRyaWJ1dGVfZ3JvdXBzOworCisJcmV0ID0gZGV2 aWNlX3JlZ2lzdGVyKCZ0Z3QtPmRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisK Kwl0Z3QtPmlzX3JlZ2lzdGVyZWQgPSB0cnVlOworCisJcmV0dXJuIGxpbmtfbm9kZV9mb3Jfa29i aihweG1fdG9fbm9kZSh0Z3QtPm1hLT5wcm94aW1pdHlfZG9tYWluKSwKKwkJCSZ0Z3QtPmRldi5r b2JqKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYWRkX21lbW9yeV90YXJnZXQoc3RydWN0IGFj cGlfc3JhdF9tZW1fYWZmaW5pdHkgKm1hKQoreworCXN0cnVjdCBtZW1vcnlfdGFyZ2V0ICp0Z3Q7 CisKKwlpZiAocHhtX3RvX25vZGUobWEtPnByb3hpbWl0eV9kb21haW4pID09IE5VTUFfTk9fTk9E RSkgeworCQlwcl9lcnIoIkhNQVQ6IE5vIE5VTUEgbm9kZSBmb3IgUFhNICVkXG4iLCBtYS0+cHJv eGltaXR5X2RvbWFpbik7CisJCWJhZF9obWF0ID0gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJLyoKKwkgKiBNYWtlIHN1cmUgd2UgaGF2ZW4ndCBhbHJlYWR5IGFkZGVkIGEgdGFyZ2V0 IGZvciB0aGlzIHByb3hpbWl0eQorCSAqIGRvbWFpbi4gIFdlIGRvbid0IGNhcmUgYWJvdXQgYW55 IG90aGVyIGRpZmZlcmVuY2VzIGluIHRoZSBTUkFUCisJICogdGFibGVzIChiYXNlX2FkZHJlc3Ms IGxlbmd0aCksIHNvIHdlIGp1c3QgdXNlIHRoZSBkYXRhIGZyb20gdGhlCisJICogZmlyc3QgdGFi bGUgd2Ugc2VlIGZvciBhIGdpdmVuIHByb3hpbWl0eSBkb21haW4uCisJICovCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0Z3QsICZ0YXJnZXRfbGlzdCwgbGlzdCkKKwkJaWYgKHRndC0+bWEtPnByb3hp bWl0eV9kb21haW4gPT0gbWEtPnByb3hpbWl0eV9kb21haW4pCisJCQlyZXR1cm4gMDsKKworCXRn dCA9IGt6YWxsb2Moc2l6ZW9mKCp0Z3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRndCkgeworCQli YWRfaG1hdCA9IHRydWU7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXRndC0+bWEgPSBtYTsK KworCWxpc3RfYWRkX3RhaWwoJnRndC0+bGlzdCwgJnRhcmdldF9saXN0KTsKKwlyZXR1cm4gMDsK K30KKworLyogQUNQSSBwYXJzaW5nIGNvZGUsIHN0YXJ0aW5nIHdpdGggdGhlIEhNQVQgKi8KK3N0 YXRpYyBpbnQgX19pbml0IGhtYXRfbm9vcF9wYXJzZShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIg KnRhYmxlKQoreworCS8qIHJlYWwgd29yayBkb25lIGJ5IHRoZSBobWF0X3BhcnNlXyogYW5kIHNy YXRfcGFyc2VfKiByb3V0aW5lcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBfX2lu aXQgaG1hdF9zcGFfbWF0Y2hlc19zcmF0KHN0cnVjdCBhY3BpX2htYXRfYWRkcmVzc19yYW5nZSAq c3BhLAorCQlzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0eSAqbWEpCit7CisJaWYgKHNwYS0+ cGh5c2ljYWxfYWRkcmVzc19iYXNlICE9IG1hLT5iYXNlX2FkZHJlc3MgfHwKKwkgICAgc3BhLT5w aHlzaWNhbF9hZGRyZXNzX2xlbmd0aCAhPSBtYS0+bGVuZ3RoKQorCQlyZXR1cm4gZmFsc2U7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZmluZF9sb2NhbF9pbml0aWF0b3Ioc3Ry dWN0IG1lbW9yeV90YXJnZXQgKnRndCkKK3sKKwlzdHJ1Y3QgbWVtb3J5X2luaXRpYXRvciAqaW5p dDsKKworCWlmICghKHRndC0+c3BhLT5mbGFncyAmIEFDUElfSE1BVF9QUk9DRVNTT1JfUERfVkFM SUQpIHx8CisJCQlweG1fdG9fbm9kZSh0Z3QtPnNwYS0+cHJvY2Vzc29yX1BEKSA9PSBOVU1BX05P X05PREUpCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5pdCwgJmluaXRpYXRv cl9saXN0LCBsaXN0KSB7CisJCWlmIChpbml0LT5weG0gPT0gdGd0LT5zcGEtPnByb2Nlc3Nvcl9Q RCkgeworCQkJdGd0LT5sb2NhbF9pbml0ID0gaW5pdDsKKwkJCXJldHVybjsKKwkJfQorCX0KK30K KworLyogQUNQSSBITUFUIHBhcnNpbmcgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgX19pbml0Cito bWF0X3BhcnNlX2FkZHJlc3NfcmFuZ2Uoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFk ZXIsCisJCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBhY3BpX2htYXRfYWRk cmVzc19yYW5nZSAqc3BhOworCXN0cnVjdCBtZW1vcnlfdGFyZ2V0ICp0Z3Q7CisKKwlpZiAoYmFk X2htYXQpCisJCXJldHVybiAwOworCisJc3BhID0gKHN0cnVjdCBhY3BpX2htYXRfYWRkcmVzc19y YW5nZSAqKWhlYWRlcjsKKwlpZiAoIXNwYSkgeworCQlwcl9lcnIoIkhNQVQ6IE5VTEwgdGFibGUg ZW50cnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoc3BhLT5oZWFkZXIubGVuZ3RoICE9 IHNpemVvZigqc3BhKSkgeworCQlwcl9lcnIoIkhNQVQ6IFVuZXhwZWN0ZWQgaGVhZGVyIGxlbmd0 aDogJWRcbiIsCisJCQkJc3BhLT5oZWFkZXIubGVuZ3RoKTsKKwkJZ290byBlcnI7CisJfQorCisJ bGlzdF9mb3JfZWFjaF9lbnRyeSh0Z3QsICZ0YXJnZXRfbGlzdCwgbGlzdCkgeworCQlpZiAoKHNw YS0+ZmxhZ3MgJiBBQ1BJX0hNQVRfTUVNT1JZX1BEX1ZBTElEKSAmJgorCQkJCXNwYS0+bWVtb3J5 X1BEID09IHRndC0+bWEtPnByb3hpbWl0eV9kb21haW4pIHsKKwkJCS8qCisJCQkgKiBXZSBvbmx5 IGFkZCBhIHNpbmdsZSBITUFUIHRhcmdldCBwZXIgcHJveGltaXR5CisJCQkgKiBkb21haW4gc28g d2Ugd2FpdCBmb3IgdGhlIG9uZSB0aGF0IG1hdGNoZXMgdGhlCisJCQkgKiBzaW5nbGUgU1JBVCBt ZW1vcnkgYWZmaW5pdHkgc3RydWN0dXJlIHBlciBQWE0gd2UKKwkJCSAqIHNhdmVkIGluIGFkZF9t ZW1vcnlfdGFyZ2V0KCkuCisJCQkgKi8KKwkJCWlmIChobWF0X3NwYV9tYXRjaGVzX3NyYXQoc3Bh LCB0Z3QtPm1hKSkgeworCQkJCXRndC0+c3BhID0gc3BhOworCQkJCWZpbmRfbG9jYWxfaW5pdGlh dG9yKHRndCk7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworZXJy OgorCWJhZF9obWF0ID0gdHJ1ZTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBf X2luaXQgaG1hdF9wYXJzZV9jYWNoZShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRl ciwKKwkJY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfaG1hdF9jYWNo ZSAqY2FjaGU7CisJc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndDsKKworCWlmIChiYWRfaG1hdCkK KwkJcmV0dXJuIDA7CisKKwljYWNoZSA9IChzdHJ1Y3QgYWNwaV9obWF0X2NhY2hlICopaGVhZGVy OworCWlmICghY2FjaGUpIHsKKwkJcHJfZXJyKCJITUFUOiBOVUxMIHRhYmxlIGVudHJ5XG4iKTsK KwkJZ290byBlcnI7CisJfQorCisJaWYgKGNhY2hlLT5oZWFkZXIubGVuZ3RoIDwgc2l6ZW9mKCpj YWNoZSkpIHsKKwkJcHJfZXJyKCJITUFUOiBVbmV4cGVjdGVkIGhlYWRlciBsZW5ndGg6ICVkXG4i LAorCQkJCWNhY2hlLT5oZWFkZXIubGVuZ3RoKTsKKwkJZ290byBlcnI7CisJfQorCisJbGlzdF9m b3JfZWFjaF9lbnRyeSh0Z3QsICZ0YXJnZXRfbGlzdCwgbGlzdCkgeworCQlpZiAoY2FjaGUtPm1l bW9yeV9QRCA9PSB0Z3QtPm1hLT5wcm94aW1pdHlfZG9tYWluKSB7CisJCQl0Z3QtPmlzX2NhY2hl ZCA9IHRydWU7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXByX2VycigiSE1BVDogQ291bGRu J3QgZmluZCBjYWNoZWQgdGFyZ2V0IFBYTSAlZFxuIiwgY2FjaGUtPm1lbW9yeV9QRCk7CitlcnI6 CisJYmFkX2htYXQgPSB0cnVlOworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogU1JBVCBw YXJzaW5nLiAgV2UgdXNlIHNyYXRfZGlzYWJsZWQoKSBhbmQgcHhtX3RvX25vZGUoKSBzbyB3ZSBk b24ndCByZWRvCisgKiBhbnkgb2YgdGhlIFNSQVQgc2FuaXR5IGNoZWNraW5nIGRvbmUgaW4gZHJp dmVycy9hY3BpL251bWEuYy4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3NyYXRfcGFyc2VfcHJv Y2Vzc29yX2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorCQlj b25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0 eSAqY3B1OworCXN0cnVjdCBtZW1vcnlfaW5pdGlhdG9yICppbml0OworCXUzMiBweG07CisKKwlp ZiAoYmFkX2htYXQpCisJCXJldHVybiAwOworCisJY3B1ID0gKHN0cnVjdCBhY3BpX3NyYXRfY3B1 X2FmZmluaXR5ICopaGVhZGVyOworCWlmICghY3B1KSB7CisJCXByX2VycigiSE1BVDogTlVMTCB0 YWJsZSBlbnRyeVxuIik7CisJCWJhZF9obWF0ID0gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJcHhtID0gY3B1LT5wcm94aW1pdHlfZG9tYWluX2xvOworCWlmIChhY3BpX3NyYXRfcmV2 aXNpb24gPj0gMikKKwkJcHhtIHw9ICooKHVuc2lnbmVkIGludCAqKWNwdS0+cHJveGltaXR5X2Rv bWFpbl9oaSkgPDwgODsKKworCWlmICghKGNwdS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfQ1BVX0VOQUJM RUQpKQorCQlyZXR1cm4gMDsKKworCWluaXQgPSBhZGRfbWVtb3J5X2luaXRpYXRvcihweG0pOwor CWlmIChJU19FUlJfT1JfTlVMTChpbml0KSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5pdCk7CisKKwlp bml0LT5jcHUgPSBjcHU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitzcmF0 X3BhcnNlX3gyYXBpY19hZmZpbml0eShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRl ciwKKwkJY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfc3JhdF94MmFw aWNfY3B1X2FmZmluaXR5ICp4MmFwaWM7CisJc3RydWN0IG1lbW9yeV9pbml0aWF0b3IgKmluaXQ7 CisKKwlpZiAoYmFkX2htYXQpCisJCXJldHVybiAwOworCisJeDJhcGljID0gKHN0cnVjdCBhY3Bp X3NyYXRfeDJhcGljX2NwdV9hZmZpbml0eSAqKWhlYWRlcjsKKwlpZiAoIXgyYXBpYykgeworCQlw cl9lcnIoIkhNQVQ6IE5VTEwgdGFibGUgZW50cnlcbiIpOworCQliYWRfaG1hdCA9IHRydWU7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKHgyYXBpYy0+ZmxhZ3MgJiBBQ1BJX1NSQVRf Q1BVX0VOQUJMRUQpKQorCQlyZXR1cm4gMDsKKworCWluaXQgPSBhZGRfbWVtb3J5X2luaXRpYXRv cih4MmFwaWMtPnByb3hpbWl0eV9kb21haW4pOworCWlmIChJU19FUlJfT1JfTlVMTChpbml0KSkK KwkJcmV0dXJuIFBUUl9FUlIoaW5pdCk7CisKKwlpbml0LT54MmFwaWMgPSB4MmFwaWM7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitzcmF0X3BhcnNlX2dpY2NfYWZmaW5pdHko c3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICpoZWFkZXIsCisJCWNvbnN0IHVuc2lnbmVkIGxv bmcgZW5kKQoreworCXN0cnVjdCBhY3BpX3NyYXRfZ2ljY19hZmZpbml0eSAqZ2ljYzsKKwlzdHJ1 Y3QgbWVtb3J5X2luaXRpYXRvciAqaW5pdDsKKworCWlmIChiYWRfaG1hdCkKKwkJcmV0dXJuIDA7 CisKKwlnaWNjID0gKHN0cnVjdCBhY3BpX3NyYXRfZ2ljY19hZmZpbml0eSAqKWhlYWRlcjsKKwlp ZiAoIWdpY2MpIHsKKwkJcHJfZXJyKCJITUFUOiBOVUxMIHRhYmxlIGVudHJ5XG4iKTsKKwkJYmFk X2htYXQgPSB0cnVlOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIShnaWNjLT5mbGFn cyAmIEFDUElfU1JBVF9HSUNDX0VOQUJMRUQpKQorCQlyZXR1cm4gMDsKKworCWluaXQgPSBhZGRf bWVtb3J5X2luaXRpYXRvcihnaWNjLT5wcm94aW1pdHlfZG9tYWluKTsKKwlpZiAoSVNfRVJSX09S X05VTEwoaW5pdCkpCisJCXJldHVybiBQVFJfRVJSKGluaXQpOworCisJaW5pdC0+Z2ljYyA9IGdp Y2M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CitzcmF0X3BhcnNlX21lbW9y eV9hZmZpbml0eShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwKKwkJY29uc3Qg dW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfc3JhdF9tZW1fYWZmaW5pdHkgKm1h OworCisJaWYgKGJhZF9obWF0KQorCQlyZXR1cm4gMDsKKworCW1hID0gKHN0cnVjdCBhY3BpX3Ny YXRfbWVtX2FmZmluaXR5ICopaGVhZGVyOworCWlmICghbWEpIHsKKwkJcHJfZXJyKCJITUFUOiBO VUxMIHRhYmxlIGVudHJ5XG4iKTsKKwkJYmFkX2htYXQgPSB0cnVlOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlpZiAoIShtYS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfTUVNX0VOQUJMRUQpKQorCQly ZXR1cm4gMDsKKworCXJldHVybiBhZGRfbWVtb3J5X3RhcmdldChtYSk7Cit9CisKKy8qCisgKiBS ZW1vdmUgb3VyIHN5c2ZzIGVudHJpZXMsIHVucmVnaXN0ZXIgb3VyIGRldmljZXMgYW5kIGZyZWUg YWxsb2NhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgaG1hdF9jbGVhbnVwKHZvaWQpCit7 CisJc3RydWN0IG1lbW9yeV9pbml0aWF0b3IgKmluaXQsICppbml0X2l0ZXI7CisJc3RydWN0IG1l bW9yeV90YXJnZXQgKnRndCwgKnRndF9pdGVyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KHRndCwgdGd0X2l0ZXIsICZ0YXJnZXRfbGlzdCwgbGlzdCkKKwkJcmVtb3ZlX21lbW9yeV90YXJn ZXQodGd0KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbml0LCBpbml0X2l0ZXIsICZp bml0aWF0b3JfbGlzdCwgbGlzdCkKKwkJcmVtb3ZlX21lbW9yeV9pbml0aWF0b3IoaW5pdCk7Cit9 CisKK3N0YXRpYyBpbnQgX19pbml0IGhtYXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBhY3BpX3Rh YmxlX2hlYWRlciAqdGJsOworCXN0cnVjdCBtZW1vcnlfaW5pdGlhdG9yICppbml0OworCXN0cnVj dCBtZW1vcnlfdGFyZ2V0ICp0Z3Q7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJaW50 IHJldDsKKworCWlmIChzcmF0X2Rpc2FibGVkKCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBX ZSB0YWtlIGEgcGVybWFuZW50IHJlZmVyZW5jZSB0byBib3RoIHRoZSBITUFUIGFuZCBTUkFUIGlu IEFDUEkKKwkgKiBtZW1vcnkgc28gd2UgY2FuIGtlZXAgcG9pbnRlcnMgdG8gdGhlaXIgc3VidGFi bGVzLiAgVGhlc2UgdGFibGVzCisJICogYWxyZWFkeSBoYWQgcmVmZXJlbmNlcyBvbiB0aGVtIHdo aWNoIHdvdWxkIG5ldmVyIGJlIHJlbGVhc2VkLCB0YWtlbgorCSAqIGJ5IGFjcGlfc3lzZnNfaW5p dCgpLCBzbyB0aGlzIHNob3VsZG4ndCBuZWdhdGl2ZWx5IGltcGFjdCBhbnl0aGluZy4KKwkgKi8K KwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19TUkFULCAwLCAmdGJsKTsKKwlpZiAo QUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gYWNwaV9nZXRf dGFibGUoQUNQSV9TSUdfSE1BVCwgMCwgJnRibCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMp KQorCQlyZXR1cm4gMDsKKworCXJldCA9IHN1YnN5c19zeXN0ZW1fcmVnaXN0ZXIoJmhtYXRfc3Vi c3lzLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFhY3BpX3RhYmxl X3BhcnNlKEFDUElfU0lHX1NSQVQsIGhtYXRfbm9vcF9wYXJzZSkpIHsKKwkJc3RydWN0IGFjcGlf c3VidGFibGVfcHJvYyBzcmF0X3Byb2NbNF07CisKKwkJbWVtc2V0KHNyYXRfcHJvYywgMCwgc2l6 ZW9mKHNyYXRfcHJvYykpOworCQlzcmF0X3Byb2NbMF0uaWQgPSBBQ1BJX1NSQVRfVFlQRV9DUFVf QUZGSU5JVFk7CisJCXNyYXRfcHJvY1swXS5oYW5kbGVyID0gc3JhdF9wYXJzZV9wcm9jZXNzb3Jf YWZmaW5pdHk7CisJCXNyYXRfcHJvY1sxXS5pZCA9IEFDUElfU1JBVF9UWVBFX1gyQVBJQ19DUFVf QUZGSU5JVFk7CisJCXNyYXRfcHJvY1sxXS5oYW5kbGVyID0gc3JhdF9wYXJzZV94MmFwaWNfYWZm aW5pdHk7CisJCXNyYXRfcHJvY1syXS5pZCA9IEFDUElfU1JBVF9UWVBFX0dJQ0NfQUZGSU5JVFk7 CisJCXNyYXRfcHJvY1syXS5oYW5kbGVyID0gc3JhdF9wYXJzZV9naWNjX2FmZmluaXR5OworCQlz cmF0X3Byb2NbM10uaWQgPSBBQ1BJX1NSQVRfVFlQRV9NRU1PUllfQUZGSU5JVFk7CisJCXNyYXRf cHJvY1szXS5oYW5kbGVyID0gc3JhdF9wYXJzZV9tZW1vcnlfYWZmaW5pdHk7CisKKwkJYWNwaV90 YWJsZV9wYXJzZV9lbnRyaWVzX2FycmF5KEFDUElfU0lHX1NSQVQsCisJCQkJCXNpemVvZihzdHJ1 Y3QgYWNwaV90YWJsZV9zcmF0KSwKKwkJCQkJc3JhdF9wcm9jLCBBUlJBWV9TSVpFKHNyYXRfcHJv YyksIDApOworCX0KKworCWlmICghYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19ITUFULCBobWF0 X25vb3BfcGFyc2UpKSB7CisJCXN0cnVjdCBhY3BpX3N1YnRhYmxlX3Byb2MgaG1hdF9wcm9jWzJd OworCisJCW1lbXNldChobWF0X3Byb2MsIDAsIHNpemVvZihobWF0X3Byb2MpKTsKKwkJaG1hdF9w cm9jWzBdLmlkID0gQUNQSV9ITUFUX1RZUEVfQUREUkVTU19SQU5HRTsKKwkJaG1hdF9wcm9jWzBd LmhhbmRsZXIgPSBobWF0X3BhcnNlX2FkZHJlc3NfcmFuZ2U7CisJCWhtYXRfcHJvY1sxXS5pZCA9 IEFDUElfSE1BVF9UWVBFX0NBQ0hFOworCQlobWF0X3Byb2NbMV0uaGFuZGxlciA9IGhtYXRfcGFy c2VfY2FjaGU7CisKKwkJYWNwaV90YWJsZV9wYXJzZV9lbnRyaWVzX2FycmF5KEFDUElfU0lHX0hN QVQsCisJCQkJCXNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9obWF0KSwKKwkJCQkJaG1hdF9wcm9j LCBBUlJBWV9TSVpFKGhtYXRfcHJvYyksIDApOworCX0KKworCWlmIChiYWRfaG1hdCkgeworCQly ZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlu aXQsICZpbml0aWF0b3JfbGlzdCwgbGlzdCkgeworCQlyZXQgPSByZWdpc3Rlcl9tZW1vcnlfaW5p dGlhdG9yKGluaXQpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0Z3QsICZ0YXJnZXRfbGlzdCwgbGlzdCkgeworCQlyZXQgPSByZWdpc3Rlcl9t ZW1vcnlfdGFyZ2V0KHRndCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1 cm4gMDsKK2VycjoKKwlwcl9lcnIoIkhNQVQ6IEVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvblxu Iik7CisJaG1hdF9jbGVhbnVwKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZXhpdCB2 b2lkIGhtYXRfZXhpdCh2b2lkKQoreworCWhtYXRfY2xlYW51cCgpOworfQorCittb2R1bGVfaW5p dChobWF0X2luaXQpOworbW9kdWxlX2V4aXQoaG1hdF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2FjcGkvaG1hdC9obWF0LmggYi9kcml2ZXJzL2FjcGkvaG1hdC9obWF0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMDhhYWQxZjhhZDcKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvaG1hdC9obWF0LmgKQEAgLTAsMCArMSw0NyBAQAor LyoKKyAqIEhldGVyb2dlbmVvdXMgTWVtb3J5IEF0dHJpYnV0ZXMgVGFibGUgKEhNQVQpIHJlcHJl c2VudGF0aW9uIGluIHN5c2ZzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBJbnRlbCBDb3Jw b3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt b3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQUNQSV9ITUFUX0hfCisjZGVmaW5lIF9BQ1BJ X0hNQVRfSF8KKworc3RydWN0IG1lbW9yeV9pbml0aWF0b3IgeworCXN0cnVjdCBsaXN0X2hlYWQg bGlzdDsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKworCS8qIG9ubHkgb25lIG9mIHRoZSBmb2xsb3dp bmcgdGhyZWUgd2lsbCBiZSBzZXQgKi8KKwlzdHJ1Y3QgYWNwaV9zcmF0X2NwdV9hZmZpbml0eSAq Y3B1OworCXN0cnVjdCBhY3BpX3NyYXRfeDJhcGljX2NwdV9hZmZpbml0eSAqeDJhcGljOworCXN0 cnVjdCBhY3BpX3NyYXRfZ2ljY19hZmZpbml0eSAqZ2ljYzsKKworCWludCBweG07CisJYm9vbCBp c19yZWdpc3RlcmVkOworfTsKKyNkZWZpbmUgdG9fbWVtb3J5X2luaXRpYXRvcihkKSBjb250YWlu ZXJfb2YoKGQpLCBzdHJ1Y3QgbWVtb3J5X2luaXRpYXRvciwgZGV2KQorCitzdHJ1Y3QgbWVtb3J5 X3RhcmdldCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkZXZpY2UgZGV2Owor CXN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5ICptYTsKKwlzdHJ1Y3QgYWNwaV9obWF0X2Fk ZHJlc3NfcmFuZ2UgKnNwYTsKKwlzdHJ1Y3QgbWVtb3J5X2luaXRpYXRvciAqbG9jYWxfaW5pdDsK KworCWJvb2wgaXNfY2FjaGVkOworCWJvb2wgaXNfcmVnaXN0ZXJlZDsKK307CisjZGVmaW5lIHRv X21lbW9yeV90YXJnZXQoZCkgY29udGFpbmVyX29mKChkKSwgc3RydWN0IG1lbW9yeV90YXJnZXQs IGRldikKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKm1lbW9yeV9pbml0 aWF0b3JfYXR0cmlidXRlX2dyb3Vwc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgKm1lbW9yeV90YXJnZXRfYXR0cmlidXRlX2dyb3Vwc1tdOworI2VuZGlmIC8qIF9BQ1BJ X0hNQVRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9obWF0L2luaXRpYXRvci5jIGIv ZHJpdmVycy9hY3BpL2htYXQvaW5pdGlhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5iZTJiZjJiNTg5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Fj cGkvaG1hdC9pbml0aWF0b3IuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogSGV0ZXJvZ2VuZW91 cyBNZW1vcnkgQXR0cmlidXRlcyBUYWJsZSAoSE1BVCkgc3lzZnMgaW5pdGlhdG9yIHJlcHJlc2Vu dGF0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Yg TUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMu CisgKi8KKworI2luY2x1ZGUgPGFjcGkvYWNwaV9udW1hLmg+CisjaW5jbHVkZSA8bGludXgvYWNw aS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+ CisjaW5jbHVkZSAiaG1hdC5oIgorCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9pZF9zaG93KHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFy ICpidWYpCit7CisJc3RydWN0IG1lbW9yeV9pbml0aWF0b3IgKmluaXQgPSB0b19tZW1vcnlfaW5p dGlhdG9yKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaW5pdC0+cHhtKTsK K30KK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlICptZW1vcnlfaW5pdGlhdG9yX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJf ZmlybXdhcmVfaWQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgbWVtb3J5X2luaXRpYXRvcl9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWVt b3J5X2luaXRpYXRvcl9hdHRyaWJ1dGVzLAorfTsKKworY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9n cm91cCAqbWVtb3J5X2luaXRpYXRvcl9hdHRyaWJ1dGVfZ3JvdXBzW10gPSB7CisJJm1lbW9yeV9p bml0aWF0b3JfYXR0cmlidXRlX2dyb3VwLAorCU5VTEwsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9hY3BpL2htYXQvdGFyZ2V0LmMgYi9kcml2ZXJzL2FjcGkvaG1hdC90YXJnZXQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJhOWI0NGQ1ZjQ0YwotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvYWNwaS9obWF0L3RhcmdldC5jCkBAIC0wLDAgKzEsNTUgQEAKKy8q CisgKiBIZXRlcm9nZW5lb3VzIE1lbW9yeSBBdHRyaWJ1dGVzIFRhYmxlIChITUFUKSBzeXNmcyB0 YXJnZXQgcmVwcmVzZW50YXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIEludGVsIENv cnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAq IG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YWNwaS9hY3BpX251bWEuaD4KKyNpbmNs dWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlICJobWF0LmgiCisKKy8qIGF0dHJpYnV0ZXMgZm9yIG1l bW9yeSB0YXJnZXRzICovCitzdGF0aWMgc3NpemVfdCBmaXJtd2FyZV9pZF9zaG93KHN0cnVjdCBk ZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYp Cit7CisJc3RydWN0IG1lbW9yeV90YXJnZXQgKnRndCA9IHRvX21lbW9yeV90YXJnZXQoZGV2KTsK KworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0Z3QtPm1hLT5wcm94aW1pdHlfZG9tYWlu KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhmaXJtd2FyZV9pZCk7CisKK3N0YXRpYyBzc2l6 ZV90IGlzX2NhY2hlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9h dHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWVtb3J5X3RhcmdldCAqdGd0 ID0gdG9fbWVtb3J5X3RhcmdldChkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIs IHRndC0+aXNfY2FjaGVkKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUl9STyhpc19jYWNoZWQpOwor CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWVtb3J5X3RhcmdldF9hdHRyaWJ1dGVzW10gPSB7 CisJJmRldl9hdHRyX2Zpcm13YXJlX2lkLmF0dHIsCisJJmRldl9hdHRyX2lzX2NhY2hlZC5hdHRy LAorCU5VTEwKK307CisKKy8qIGF0dHJpYnV0ZXMgd2hpY2ggYXJlIHByZXNlbnQgZm9yIGFsbCBt ZW1vcnkgdGFyZ2V0cyAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbWVtb3J5X3Rh cmdldF9hdHRyaWJ1dGVfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWVtb3J5X3RhcmdldF9hdHRyaWJ1 dGVzLAorfTsKKworY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqbWVtb3J5X3RhcmdldF9h dHRyaWJ1dGVfZ3JvdXBzW10gPSB7CisJJm1lbW9yeV90YXJnZXRfYXR0cmlidXRlX2dyb3VwLAor CU5VTEwsCit9OwotLSAKMi4xNC4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpMaW51eC1udmRpbW0gbWFpbGluZyBsaXN0CkxpbnV4LW52ZGltbUBsaXN0 cy4wMS5vcmcKaHR0cHM6Ly9saXN0cy4wMS5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1udmRp bW0K