From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B0821C433FE for ; Fri, 4 Dec 2020 04:05:15 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 28044222B6 for ; Fri, 4 Dec 2020 04:05:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 28044222B6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id BF1462E2D4; Fri, 4 Dec 2020 04:05:14 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id xcd9fnNe9IpH; Fri, 4 Dec 2020 04:05:11 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 76FAA2E2CB; Fri, 4 Dec 2020 04:05:11 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 53835C163C; Fri, 4 Dec 2020 04:05:11 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4203CC0FA7 for ; Fri, 4 Dec 2020 04:05:10 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 248F387834 for ; Fri, 4 Dec 2020 04:05:10 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id f6K0HQ4Uz-C3 for ; Fri, 4 Dec 2020 04:05:07 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by fraxinus.osuosl.org (Postfix) with ESMTPS id EA64E8783C for ; Fri, 4 Dec 2020 04:05:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607054705; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=te3KMit9K2zRP6tEItYWMW5kgFXdx395ulguQrbrHNk=; b=PDaLJPElxFKWtN6dzc64aqnCiX7EEoPOKm+5crZgfyAJrCctAypACAIJz+dbZZC71EKFUT W89ANxCIqDtEVawUlGT+FsKeAGuzA+bS2bWxaHj+RPgdSjdwHM8MMWNFefPUIxO58g3Yoq w46M0T3S0wNmMp7Ds87gVmfDiw3f4Xs= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-506-LFRp65SpPLCJGnBkq--NsQ-1; Thu, 03 Dec 2020 23:05:02 -0500 X-MC-Unique: LFRp65SpPLCJGnBkq--NsQ-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id EF5931842141; Fri, 4 Dec 2020 04:05:00 +0000 (UTC) Received: from jason-ThinkPad-X1-Carbon-6th.redhat.com (ovpn-12-116.pek2.redhat.com [10.72.12.116]) by smtp.corp.redhat.com (Postfix) with ESMTP id DEE901A4D0; Fri, 4 Dec 2020 04:04:54 +0000 (UTC) From: Jason Wang To: mst@redhat.com, jasowang@redhat.com, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH V2 16/19] virtio-pci: introduce modern device module Date: Fri, 4 Dec 2020 12:03:50 +0800 Message-Id: <20201204040353.21679-17-jasowang@redhat.com> In-Reply-To: <20201204040353.21679-1-jasowang@redhat.com> References: <20201204040353.21679-1-jasowang@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 Cc: shahafs@mellanox.com X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" U2lnbmVkLW9mZi1ieTogSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4KLS0tCiBkcml2 ZXJzL3ZpcnRpby9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAxMCArLQogZHJpdmVycy92aXJ0 aW8vTWFrZWZpbGUgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy92aXJ0aW8vdmlydGlv X3BjaV9jb21tb24uaCAgICAgfCAgMjcgKy0KIGRyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9k ZXJuLmMgICAgIHwgNjE3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvdmlydGlv L3ZpcnRpb19wY2lfbW9kZXJuX2Rldi5jIHwgNTk5ICsrKysrKysrKysrKysrKysrKysrKysrKwog aW5jbHVkZS9saW51eC92aXJ0aW9fcGNpX21vZGVybi5oICAgICAgfCAxMTEgKysrKysKIDYgZmls ZXMgY2hhbmdlZCwgNzIxIGluc2VydGlvbnMoKyksIDY0NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybl9kZXYuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvdmlydGlvX3BjaV9tb2Rlcm4uaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvdmlydGlvL0tjb25maWcgYi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCmluZGV4 IDdiNDExMzBkM2YzNS4uZDFhNmJkMmE5NzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9L Y29uZmlnCisrKyBiL2RyaXZlcnMvdmlydGlvL0tjb25maWcKQEAgLTEyLDYgKzEyLDE0IEBAIGNv bmZpZyBBUkNIX0hBU19SRVNUUklDVEVEX1ZJUlRJT19NRU1PUllfQUNDRVNTCiAJICBUaGlzIG9w dGlvbiBpcyBzZWxlY3RlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlIG1heSBuZWVkIHRvIGVuZm9yY2UK IAkgIFZJUlRJT19GX0FDQ0VTU19QTEFURk9STQogCitjb25maWcgVklSVElPX1BDSV9NT0RFUk4K Kwl0cmlzdGF0ZSAiTW9kZXJuIFZpcnRpbyBQQ0kgRGV2aWNlIgorCWRlcGVuZHMgb24gUENJCisJ aGVscAorCSAgTW9kZXJuIFBDSSBkZXZpY2UgaW1wbGVtZW50YXRpb24uIFRoaXMgbW9kdWxlIGlt cGxlbWVudCB0aGUKKwkgIGJhc2ljIHByb2JlIGFuZCBjb250cm9sIGZvciBkZXZpY2VzIHdoaWNo IGlzIGJhc2VkIG9uIG1vZGVybgorCSAgUENJIGRldmljZSB3aXRoIHBvc3NpYmxlIHZlbmRvciBz cGVjaWZpYyBleHRlbnNpb25zLgorCiBtZW51Y29uZmlnIFZJUlRJT19NRU5VCiAJYm9vbCAiVmly dGlvIGRyaXZlcnMiCiAJZGVmYXVsdCB5CkBAIC0yMCw3ICsyOCw3IEBAIGlmIFZJUlRJT19NRU5V CiAKIGNvbmZpZyBWSVJUSU9fUENJCiAJdHJpc3RhdGUgIlBDSSBkcml2ZXIgZm9yIHZpcnRpbyBk ZXZpY2VzIgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBWSVJUSU9fUENJX01PREVSTgog CXNlbGVjdCBWSVJUSU8KIAloZWxwCiAJICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZv ciB2aXJ0aW8gYmFzZWQgcGFyYXZpcnR1YWwgZGV2aWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zp cnRpby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCmluZGV4IDU5MWU2ZjcyYWE1 NC4uZjA5NzU3OGFhYThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQorKysg Yi9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQpAQCAtMSw1ICsxLDYgQEAKICMgU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKIG9iai0kKENPTkZJR19WSVJUSU8pICs9IHZpcnRpby5vIHZp cnRpb19yaW5nLm8KK29iai0kKENPTkZJR19WSVJUSU9fUENJX01PREVSTikgKz0gdmlydGlvX3Bj aV9tb2Rlcm5fZGV2Lm8KIG9iai0kKENPTkZJR19WSVJUSU9fTU1JTykgKz0gdmlydGlvX21taW8u bwogb2JqLSQoQ09ORklHX1ZJUlRJT19QQ0kpICs9IHZpcnRpb19wY2kubwogdmlydGlvX3BjaS15 IDo9IHZpcnRpb19wY2lfbW9kZXJuLm8gdmlydGlvX3BjaV9jb21tb24ubwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaV9jb21tb24uaCBiL2RyaXZlcnMvdmlydGlvL3ZpcnRp b19wY2lfY29tbW9uLmgKaW5kZXggZjM1ZmY1YjZiNDY3Li5iZWVjMDQ3YThmOGQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfY29tbW9uLmgKKysrIGIvZHJpdmVycy92aXJ0 aW8vdmlydGlvX3BjaV9jb21tb24uaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4 L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcmluZy5oPgogI2luY2x1 ZGUgPGxpbnV4L3ZpcnRpb19wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcGNpX21vZGVy bi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9j ay5oPgogCkBAIC0zOSwzMiArNDAsNiBAQCBzdHJ1Y3QgdmlydGlvX3BjaV92cV9pbmZvIHsKIAl1 bnNpZ25lZCBtc2l4X3ZlY3RvcjsKIH07CiAKLXN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZp Y2UgewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCi0Jc3RydWN0IHZpcnRpb19wY2lfY29t bW9uX2NmZyBfX2lvbWVtICpjb21tb247Ci0JLyogRGV2aWNlLXNwZWNpZmljIGRhdGEgKG5vbi1s ZWdhY3kgbW9kZSkgICovCi0Jdm9pZCBfX2lvbWVtICpkZXZpY2U7Ci0JLyogQmFzZSBvZiB2cSBu b3RpZmljYXRpb25zIChub24tbGVnYWN5IG1vZGUpLiAqLwotCXZvaWQgX19pb21lbSAqbm90aWZ5 X2Jhc2U7Ci0JLyogV2hlcmUgdG8gcmVhZCBhbmQgY2xlYXIgaW50ZXJydXB0ICovCi0JdTggX19p b21lbSAqaXNyOwotCi0JLyogU28gd2UgY2FuIHNhbml0eS1jaGVjayBhY2Nlc3Nlcy4gKi8KLQlz aXplX3Qgbm90aWZ5X2xlbjsKLQlzaXplX3QgZGV2aWNlX2xlbjsKLQotCS8qIENhcGFiaWxpdHkg Zm9yIHdoZW4gd2UgbmVlZCB0byBtYXAgbm90aWZpY2F0aW9ucyBwZXItdnEuICovCi0JaW50IG5v dGlmeV9tYXBfY2FwOwotCi0JLyogTXVsdGlwbHkgcXVldWVfbm90aWZ5X29mZiBieSB0aGlzIHZh bHVlLiAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KLQl1MzIgbm90aWZ5X29mZnNldF9tdWx0aXBsaWVy OwotCi0JaW50IG1vZGVybl9iYXJzOwotCi0Jc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWQ7Ci19 OwotCiAvKiBPdXIgZGV2aWNlIHN0cnVjdHVyZSAqLwogc3RydWN0IHZpcnRpb19wY2lfZGV2aWNl IHsKIAlzdHJ1Y3QgdmlydGlvX2RldmljZSB2ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0 aW8vdmlydGlvX3BjaV9tb2Rlcm4uYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJu LmMKaW5kZXggYTVlM2E1ZTQwMzIzLi5mYmQ0ZWJjMDBlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3Bj aV9tb2Rlcm4uYwpAQCAtMTksMTU4ICsxOSw2IEBACiAjZGVmaW5lIFZJUlRJT19SSU5HX05PX0xF R0FDWQogI2luY2x1ZGUgInZpcnRpb19wY2lfY29tbW9uLmgiCiAKLS8qCi0gKiBUeXBlLXNhZmUg d3JhcHBlcnMgZm9yIGlvIGFjY2Vzc2VzLgotICogVXNlIHRoZXNlIHRvIGVuZm9yY2UgYXQgY29t cGlsZSB0aW1lIHRoZSBmb2xsb3dpbmcgc3BlYyByZXF1aXJlbWVudDoKLSAqCi0gKiBUaGUgZHJp dmVyIE1VU1QgYWNjZXNzIGVhY2ggZmllbGQgdXNpbmcgdGhlIOKAnG5hdHVyYWzigJ0gYWNjZXNz Ci0gKiBtZXRob2QsIGkuZS4gMzItYml0IGFjY2Vzc2VzIGZvciAzMi1iaXQgZmllbGRzLCAxNi1i aXQgYWNjZXNzZXMKLSAqIGZvciAxNi1iaXQgZmllbGRzIGFuZCA4LWJpdCBhY2Nlc3NlcyBmb3Ig OC1iaXQgZmllbGRzLgotICovCi1zdGF0aWMgaW5saW5lIHU4IHZwX2lvcmVhZDgoY29uc3QgdTgg X19pb21lbSAqYWRkcikKLXsKLQlyZXR1cm4gaW9yZWFkOChhZGRyKTsKLX0KLXN0YXRpYyBpbmxp bmUgdTE2IHZwX2lvcmVhZDE2IChjb25zdCBfX2xlMTYgX19pb21lbSAqYWRkcikKLXsKLQlyZXR1 cm4gaW9yZWFkMTYoYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHZwX2lvcmVhZDMyKGNv bnN0IF9fbGUzMiBfX2lvbWVtICphZGRyKQotewotCXJldHVybiBpb3JlYWQzMihhZGRyKTsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkIHZwX2lvd3JpdGU4KHU4IHZhbHVlLCB1OCBfX2lvbWVtICph ZGRyKQotewotCWlvd3JpdGU4KHZhbHVlLCBhZGRyKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lk IHZwX2lvd3JpdGUxNih1MTYgdmFsdWUsIF9fbGUxNiBfX2lvbWVtICphZGRyKQotewotCWlvd3Jp dGUxNih2YWx1ZSwgYWRkcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2cF9pb3dyaXRlMzIo dTMyIHZhbHVlLCBfX2xlMzIgX19pb21lbSAqYWRkcikKLXsKLQlpb3dyaXRlMzIodmFsdWUsIGFk ZHIpOwotfQotCi1zdGF0aWMgdm9pZCB2cF9pb3dyaXRlNjRfdHdvcGFydCh1NjQgdmFsLAotCQkJ CSBfX2xlMzIgX19pb21lbSAqbG8sIF9fbGUzMiBfX2lvbWVtICpoaSkKLXsKLQl2cF9pb3dyaXRl MzIoKHUzMil2YWwsIGxvKTsKLQl2cF9pb3dyaXRlMzIodmFsID4+IDMyLCBoaSk7Ci19Ci0KLS8q Ci0gKiB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkgLSBtYXAgYSBwYXJ0IG9mIHZpcnRpbyBwY2kg Y2FwYWJpbGl0eQotICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKLSAqIEBv ZmY6IG9mZnNldCBvZiB0aGUgY2FwYWJpbGl0eQotICogQG1pbmxlbjogbWluaW1hbCBsZW5ndGgg b2YgdGhlIGNhcGFiaWxpdHkKLSAqIEBhbGlnbjogYWxpZ24gcmVxdWlyZW1lbnQKLSAqIEBzdGFy dDogc3RhcnQgZnJvbSB0aGUgY2FwYWJpbGl0eQotICogQHNpemU6IG1hcCBzaXplCi0gKiBAbGVu OiB0aGUgbGVuZ3RoIHRoYXQgaXMgYWN0dWFsbHkgbWFwcGVkCi0gKgotICogUmV0dXJucyB0aGUg aW8gYWRkcmVzcyBvZiBmb3IgdGhlIHBhcnQgb2YgdGhlIGNhcGFiaWxpdHkKLSAqLwotdm9pZCBf X2lvbWVtICp2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJu X2RldmljZSAqbWRldiwgaW50IG9mZiwKLQkJCQkgICAgICAgc2l6ZV90IG1pbmxlbiwKLQkJCQkg ICAgICAgdTMyIGFsaWduLAotCQkJCSAgICAgICB1MzIgc3RhcnQsIHUzMiBzaXplLAotCQkJCSAg ICAgICBzaXplX3QgKmxlbikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gbWRldi0+cGNpX2Rl djsKLQl1OCBiYXI7Ci0JdTMyIG9mZnNldCwgbGVuZ3RoOwotCXZvaWQgX19pb21lbSAqcDsKLQot CXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19w Y2lfY2FwLAotCQkJCQkJIGJhciksCi0JCQkgICAgICZiYXIpOwotCXBjaV9yZWFkX2NvbmZpZ19k d29yZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgb2Zmc2V0KSwK LQkJCSAgICAgJm9mZnNldCk7Ci0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgb2ZmICsgb2Zm c2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBsZW5ndGgpLAotCQkJICAgICAgJmxlbmd0aCk7 Ci0KLQlpZiAobGVuZ3RoIDw9IHN0YXJ0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJInZp cnRpb19wY2k6IGJhZCBjYXBhYmlsaXR5IGxlbiAldSAoPiV1IGV4cGVjdGVkKVxuIiwKLQkJCWxl bmd0aCwgc3RhcnQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobGVuZ3RoIC0gc3RhcnQg PCBtaW5sZW4pIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkidmlydGlvX3BjaTogYmFkIGNh cGFiaWxpdHkgbGVuICV1ICg+PSV6dSBleHBlY3RlZClcbiIsCi0JCQlsZW5ndGgsIG1pbmxlbik7 Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWxlbmd0aCAtPSBzdGFydDsKLQotCWlmIChzdGFydCAr IG9mZnNldCA8IG9mZnNldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCSJ2aXJ0aW9fcGNp OiBtYXAgd3JhcC1hcm91bmQgJXUrJXVcbiIsCi0JCQlzdGFydCwgb2Zmc2V0KTsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCi0Jb2Zmc2V0ICs9IHN0YXJ0OwotCi0JaWYgKG9mZnNldCAmIChhbGlnbiAt IDEpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJInZpcnRpb19wY2k6IG9mZnNldCAldSBu b3QgYWxpZ25lZCB0byAldVxuIiwKLQkJCW9mZnNldCwgYWxpZ24pOwotCQlyZXR1cm4gTlVMTDsK LQl9Ci0KLQlpZiAobGVuZ3RoID4gc2l6ZSkKLQkJbGVuZ3RoID0gc2l6ZTsKLQotCWlmIChsZW4p Ci0JCSpsZW4gPSBsZW5ndGg7Ci0KLQlpZiAobWlubGVuICsgb2Zmc2V0IDwgbWlubGVuIHx8Ci0J ICAgIG1pbmxlbiArIG9mZnNldCA+IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpKSB7Ci0JCWRl dl9lcnIoJmRldi0+ZGV2LAotCQkJInZpcnRpb19wY2k6IG1hcCB2aXJ0aW8gJXp1QCV1ICIKLQkJ CSJvdXQgb2YgcmFuZ2Ugb24gYmFyICVpIGxlbmd0aCAlbHVcbiIsCi0JCQltaW5sZW4sIG9mZnNl dCwKLQkJCWJhciwgKHVuc2lnbmVkIGxvbmcpcGNpX3Jlc291cmNlX2xlbihkZXYsIGJhcikpOwot CQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlwID0gcGNpX2lvbWFwX3JhbmdlKGRldiwgYmFyLCBvZmZz ZXQsIGxlbmd0aCk7Ci0JaWYgKCFwKQotCQlkZXZfZXJyKCZkZXYtPmRldiwKLQkJCSJ2aXJ0aW9f cGNpOiB1bmFibGUgdG8gbWFwIHZpcnRpbyAldUAldSBvbiBiYXIgJWlcbiIsCi0JCQlsZW5ndGgs IG9mZnNldCwgYmFyKTsKLQlyZXR1cm4gcDsKLX0KLQotLyoKLSAqIHZwX21vZGVybl9nZXRfZmVh dHVyZXMgLSBnZXQgZmVhdHVyZXMgZnJvbSBkZXZpY2UKLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZp cnRpby1wY2kgZGV2aWNlCi0gKgotICogUmV0dXJucyB0aGUgZmVhdHVyZXMgcmVhZCBmcm9tIHRo ZSBkZXZpY2UKLSAqLwotc3RhdGljIHU2NCB2cF9tb2Rlcm5fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2 aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpCi17Ci0Jc3RydWN0IHZpcnRpb19wY2lfY29t bW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Ci0KLQl1NjQgZmVhdHVyZXM7Ci0K LQl2cF9pb3dyaXRlMzIoMCwgJmNmZy0+ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKLQlmZWF0dXJl cyA9IHZwX2lvcmVhZDMyKCZjZmctPmRldmljZV9mZWF0dXJlKTsKLQl2cF9pb3dyaXRlMzIoMSwg JmNmZy0+ZGV2aWNlX2ZlYXR1cmVfc2VsZWN0KTsKLQlmZWF0dXJlcyB8PSAoKHU2NCl2cF9pb3Jl YWQzMigmY2ZnLT5kZXZpY2VfZmVhdHVyZSkgPDwgMzIpOwotCi0JcmV0dXJuIGZlYXR1cmVzOwot fQotCi0vKiB2aXJ0aW8gY29uZmlnLT5nZXRfZmVhdHVyZXMoKSBpbXBsZW1lbnRhdGlvbiAqLwog c3RhdGljIHU2NCB2cF9nZXRfZmVhdHVyZXMoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7 CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UodmRldik7 CkBAIC0xODgsMTQ5ICszNiw2IEBAIHN0YXRpYyB2b2lkIHZwX3RyYW5zcG9ydF9mZWF0dXJlcyhz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTY0IGZlYXR1cmVzKQogCQlfX3ZpcnRpb19zZXRf Yml0KHZkZXYsIFZJUlRJT19GX1NSX0lPVik7CiB9CiAKLS8qCi0gKiB2cF9tb2Rlcm5fc2V0X2Zl YXR1cmVzIC0gc2V0IGZlYXR1cmVzIHRvIGRldmljZQotICogQG1kZXY6IHRoZSBtb2Rlcm4gdmly dGlvLXBjaSBkZXZpY2UKLSAqIEBmZWF0dXJlczogdGhlIGZlYXR1cmVzIHNldCB0byBkZXZpY2UK LSAqLwotc3RhdGljIHZvaWQgdnBfbW9kZXJuX3NldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX3Bj aV9tb2Rlcm5fZGV2aWNlICptZGV2LAotCQkJCSAgIHU2NCBmZWF0dXJlcykKLXsKLQlzdHJ1Y3Qg dmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKLQotCXZw X2lvd3JpdGUzMigwLCAmY2ZnLT5ndWVzdF9mZWF0dXJlX3NlbGVjdCk7Ci0JdnBfaW93cml0ZTMy KCh1MzIpZmVhdHVyZXMsICZjZmctPmd1ZXN0X2ZlYXR1cmUpOwotCXZwX2lvd3JpdGUzMigxLCAm Y2ZnLT5ndWVzdF9mZWF0dXJlX3NlbGVjdCk7Ci0JdnBfaW93cml0ZTMyKGZlYXR1cmVzID4+IDMy LCAmY2ZnLT5ndWVzdF9mZWF0dXJlKTsKLX0KLQotLyoKLSAqIHZwX21vZGVybl9xdWV1ZV92ZWN0 b3IgLSBzZXQgdGhlIE1TSVggdmVjdG9yIGZvciBhIHNwZWNpZmljIHZpcnRxdWV1ZQotICogQG1k ZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKLSAqIEBpbmRleDogcXVldWUgaW5kZXgK LSAqIEB2ZWN0b3I6IHRoZSBjb25maWcgdmVjdG9yCi0gKgotICogUmV0dXJucyB0aGUgY29uZmln IHZlY3RvciByZWFkIGZyb20gdGhlIGRldmljZQotICovCi1zdGF0aWMgdTE2IHZwX21vZGVybl9x dWV1ZV92ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKLQkJCQkg IHUxNiBpbmRleCwgdTE2IHZlY3RvcikKLXsKLQlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2Zn IF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKLQotCXZwX2lvd3JpdGUxNihpbmRleCwgJmNm Zy0+cXVldWVfc2VsZWN0KTsKLQl2cF9pb3dyaXRlMTYodmVjdG9yLCAmY2ZnLT5xdWV1ZV9tc2l4 X3ZlY3Rvcik7Ci0JLyogRmx1c2ggdGhlIHdyaXRlIG91dCB0byBkZXZpY2UgKi8KLQlyZXR1cm4g dnBfaW9yZWFkMTYoJmNmZy0+cXVldWVfbXNpeF92ZWN0b3IpOwotfQotCi0vKgotICogdnBfbW9k ZXJuX3F1ZXVlX2FkZHJlc3MgLSBzZXQgdGhlIHZpcnRxdWV1ZSBhZGRyZXNzCi0gKiBAbWRldjog dGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQotICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgK LSAqIEBkZXNjX2FkZHI6IGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IgYXJlYQotICogQGRyaXZl cl9hZGRyOiBhZGRyZXNzIG9mIHRoZSBkcml2ZXIgYXJlYQotICogQGRldmljZV9hZGRyOiBhZGRy ZXNzIG9mIHRoZSBkZXZpY2UgYXJlYQotICovCi1zdGF0aWMgdm9pZCB2cF9tb2Rlcm5fcXVldWVf YWRkcmVzcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAotCQkJCSAgICB1 MTYgaW5kZXgsIHU2NCBkZXNjX2FkZHIsIHU2NCBkcml2ZXJfYWRkciwKLQkJCQkgICAgdTY0IGRl dmljZV9hZGRyKQotewotCXN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY2Zn ID0gbWRldi0+Y29tbW9uOwotCi0JdnBfaW93cml0ZTE2KGluZGV4LCAmY2ZnLT5xdWV1ZV9zZWxl Y3QpOwotCi0JdnBfaW93cml0ZTY0X3R3b3BhcnQoZGVzY19hZGRyLCAmY2ZnLT5xdWV1ZV9kZXNj X2xvLAotCQkJICAgICAmY2ZnLT5xdWV1ZV9kZXNjX2hpKTsKLQl2cF9pb3dyaXRlNjRfdHdvcGFy dChkcml2ZXJfYWRkciwgJmNmZy0+cXVldWVfYXZhaWxfbG8sCi0JCQkgICAgICZjZmctPnF1ZXVl X2F2YWlsX2hpKTsKLQl2cF9pb3dyaXRlNjRfdHdvcGFydChkZXZpY2VfYWRkciwgJmNmZy0+cXVl dWVfdXNlZF9sbywKLQkJCSAgICAgJmNmZy0+cXVldWVfdXNlZF9oaSk7Ci19Ci0KLS8qCi0gKiB2 cF9tb2Rlcm5fc2V0X3F1ZXVlX2VuYWJsZSAtIGVuYWJsZSBhIHZpcnRxdWV1ZQotICogQG1kZXY6 IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKLSAqIEBpbmRleDogdGhlIHF1ZXVlIGluZGV4 Ci0gKiBAZW5hYmxlOiB3aGV0aGVyIHRoZSB2aXJ0cXVldWUgaXMgZW5hYmxlIG9yIG5vdAotICov Ci1zdGF0aWMgdm9pZCB2cF9tb2Rlcm5fc2V0X3F1ZXVlX2VuYWJsZShzdHJ1Y3QgdmlydGlvX3Bj aV9tb2Rlcm5fZGV2aWNlICptZGV2LAotCQkJCSAgICAgICB1MTYgaW5kZXgsIGJvb2wgZW5hYmxl KQotewotCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsK LQl2cF9pb3dyaXRlMTYoZW5hYmxlLCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9lbmFibGUpOwotfQot Ci0vKgotICogdnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUgLSBlbmFibGUgYSB2aXJ0cXVldWUK LSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCi0gKiBAaW5kZXg6IHRoZSBx dWV1ZSBpbmRleAotICoKLSAqIFJldHVybnMgd2hldGhlciBhIHZpcnRxdWV1ZSBpcyBlbmFibGVk IG9yIG5vdAotICovCi1zdGF0aWMgYm9vbCB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX2VuYWJsZShzdHJ1 Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAotCQkJCSAgICAgICB1MTYgaW5kZXgp Ci17Ci0JdnBfaW93cml0ZTE2KGluZGV4LCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9zZWxlY3QpOwot Ci0JcmV0dXJuIHZwX2lvcmVhZDE2KCZtZGV2LT5jb21tb24tPnF1ZXVlX2VuYWJsZSk7Ci19Ci0K LS8qCi0gKiB2cF9tb2Rlcm5fc2V0X3F1ZXVlX3NpemUgLSBzZXQgc2l6ZSBmb3IgYSB2aXJ0cXVl dWUKLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCi0gKiBAaW5kZXg6IHRo ZSBxdWV1ZSBpbmRleAotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSB2aXJ0cXVldWUKLSAqLwot c3RhdGljIHZvaWQgdnBfbW9kZXJuX3NldF9xdWV1ZV9zaXplKHN0cnVjdCB2aXJ0aW9fcGNpX21v ZGVybl9kZXZpY2UgKm1kZXYsCi0JCQkJICAgICB1MTYgaW5kZXgsIHUxNiBzaXplKQotewotCXZw X2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKLQl2cF9pb3dy aXRlMTYoc2l6ZSwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2l6ZSk7Ci0KLX0KLQotLyoKLSAqIHZw X21vZGVybl9nZXRfcXVldWVfc2l6ZSAtIGdldCBzaXplIGZvciBhIHZpcnRxdWV1ZQotICogQG1k ZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKLSAqIEBpbmRleDogdGhlIHF1ZXVlIGlu ZGV4Ci0gKgotICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlydHF1ZXVlCi0gKi8KLXN0YXRp YyB1MTYgdnBfbW9kZXJuX2dldF9xdWV1ZV9zaXplKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9k ZXZpY2UgKm1kZXYsCi0JCQkJICAgIHUxNiBpbmRleCkKLXsKLQl2cF9pb3dyaXRlMTYoaW5kZXgs ICZtZGV2LT5jb21tb24tPnF1ZXVlX3NlbGVjdCk7Ci0KLQlyZXR1cm4gdnBfaW9yZWFkMTYoJm1k ZXYtPmNvbW1vbi0+cXVldWVfc2l6ZSk7Ci0KLX0KLQotLyoKLSAqIHZwX21vZGVybl9nZXRfbnVt X3F1ZXVlcyAtIGdldCB0aGUgbnVtYmVyIG9mIHZpcnRxdWV1ZXMKLSAqIEBtZGV2OiB0aGUgbW9k ZXJuIHZpcnRpby1wY2kgZGV2aWNlCi0gKgotICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHZpcnRx dWV1ZXMKLSAqLwotc3RhdGljIHUxNiB2cF9tb2Rlcm5fZ2V0X251bV9xdWV1ZXMoc3RydWN0IHZp cnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldikKLXsKLQlyZXR1cm4gdnBfaW9yZWFkMTYoJm1k ZXYtPmNvbW1vbi0+bnVtX3F1ZXVlcyk7Ci19Ci0KLS8qCi0gKiB2cF9tb2Rlcm5fZ2V0X3F1ZXVl X25vdGlmeV9vZmYgLSBnZXQgbm90aWZpY2F0aW9uIG9mZnNldCBmb3IgYSB2aXJ0cXVldWUKLSAq IEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCi0gKiBAaW5kZXg6IHRoZSBxdWV1 ZSBpbmRleAotICoKLSAqIFJldHVybnMgdGhlIG5vdGlmaWNhdGlvbiBvZmZzZXQgZm9yIGEgdmly dHF1ZXVlCi0gKi8KLXN0YXRpYyB1MTYgdnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0 cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCi0JCQkJCSAgdTE2IGluZGV4KQot ewotCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKLQot CXJldHVybiB2cF9pb3JlYWQxNigmbWRldi0+Y29tbW9uLT5xdWV1ZV9ub3RpZnlfb2ZmKTsKLX0K LQogLyogdmlydGlvIGNvbmZpZy0+ZmluYWxpemVfZmVhdHVyZXMoKSBpbXBsZW1lbnRhdGlvbiAq Lwogc3RhdGljIGludCB2cF9maW5hbGl6ZV9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAq dmRldikKIHsKQEAgLTQyOSwxOSArMTM0LDYgQEAgc3RhdGljIHZvaWQgdnBfc2V0KHN0cnVjdCB2 aXJ0aW9fZGV2aWNlICp2ZGV2LCB1bnNpZ25lZCBvZmZzZXQsCiAJfQogfQogCi0vKgotICogdnBf bW9kZXJuX2dlbmVyYXRpb24gLSBnZXQgdGhlIGRldmljZSBnZW5yZWF0aW9uCi0gKiBAbWRldjog dGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQotICoKLSAqIFJldHVybnMgdGhlIGdlbnJlYXRp b24gcmVhZCBmcm9tIGRldmljZQotICovCi1zdGF0aWMgdTMyIHZwX21vZGVybl9nZW5lcmF0aW9u KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpCi17Ci0Jc3RydWN0IHZpcnRp b19wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247Ci0KLQlyZXR1cm4g dnBfaW9yZWFkOCgmY2ZnLT5jb25maWdfZ2VuZXJhdGlvbik7Ci19Ci0KIHN0YXRpYyB1MzIgdnBf Z2VuZXJhdGlvbihzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlv X3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2ZGV2KTsKQEAgLTQ0OSwxOSArMTQx LDYgQEAgc3RhdGljIHUzMiB2cF9nZW5lcmF0aW9uKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2 KQogCXJldHVybiB2cF9tb2Rlcm5fZ2VuZXJhdGlvbigmdnBfZGV2LT5tZGV2KTsKIH0KIAotLyoK LSAqIHZwX21vZGVybl9nZXRfc3RhdHVzIC0gZ2V0IHRoZSBkZXZpY2Ugc3RhdHVzCi0gKiBAbWRl djogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQotICoKLSAqIFJldHVybnMgdGhlIHN0YXR1 cyByZWFkIGZyb20gZGV2aWNlCi0gKi8KLXN0YXRpYyB1OCB2cF9tb2Rlcm5fZ2V0X3N0YXR1cyhz dHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2KQotewotCXN0cnVjdCB2aXJ0aW9f cGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwotCi0JcmV0dXJuIHZw X2lvcmVhZDgoJmNmZy0+ZGV2aWNlX3N0YXR1cyk7Ci19Ci0KIC8qIGNvbmZpZy0+e2dldCxzZXR9 X3N0YXR1cygpIGltcGxlbWVudGF0aW9ucyAqLwogc3RhdGljIHU4IHZwX2dldF9zdGF0dXMoc3Ry dWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CkBAIC00NzAsMTkgKzE0OSw2IEBAIHN0YXRpYyB1 OCB2cF9nZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogCXJldHVybiB2cF9t b2Rlcm5fZ2V0X3N0YXR1cygmdnBfZGV2LT5tZGV2KTsKIH0KIAotLyoKLSAqIHZwX21vZGVybl9z ZXRfc3RhdHVzIC0gc2V0IHN0YXR1cyB0byBkZXZpY2UKLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZp cnRpby1wY2kgZGV2aWNlCi0gKiBAc3RhdHVzOiB0aGUgc3RhdHVzIHNldCB0byBkZXZpY2UKLSAq Lwotc3RhdGljIHZvaWQgdnBfbW9kZXJuX3NldF9zdGF0dXMoc3RydWN0IHZpcnRpb19wY2lfbW9k ZXJuX2RldmljZSAqbWRldiwKLQkJCQkgdTggc3RhdHVzKQotewotCXN0cnVjdCB2aXJ0aW9fcGNp X2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9uOwotCi0JdnBfaW93cml0ZTgo c3RhdHVzLCAmY2ZnLT5kZXZpY2Vfc3RhdHVzKTsKLX0KLQogc3RhdGljIHZvaWQgdnBfc2V0X3N0 YXR1cyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldiwgdTggc3RhdHVzKQogewogCXN0cnVjdCB2 aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZkZXYpOwpAQCAtNTEwLDI1 ICsxNzYsNiBAQCBzdGF0aWMgdm9pZCB2cF9yZXNldChzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRl dikKIAl2cF9zeW5jaHJvbml6ZV92ZWN0b3JzKHZkZXYpOwogfQogCi0vKgotICogdnBfbW9kZXJu X2NvbmZpZ192ZWN0b3IgLSBzZXQgdGhlIHZlY3RvciBmb3IgY29uZmlnIGludGVycnVwdAotICog QG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKLSAqIEB2ZWN0b3I6IHRoZSBjb25m aWcgdmVjdG9yCi0gKgotICogUmV0dXJucyB0aGUgY29uZmlnIHZlY3RvciByZWFkIGZyb20gdGhl IGRldmljZQotICovCi1zdGF0aWMgdTE2IHZwX21vZGVybl9jb25maWdfdmVjdG9yKHN0cnVjdCB2 aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCi0JCQkJICAgdTE2IHZlY3RvcikKLXsKLQlz dHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsK LQotCS8qIFNldHVwIHRoZSB2ZWN0b3IgdXNlZCBmb3IgY29uZmlndXJhdGlvbiBldmVudHMgKi8K LQl2cF9pb3dyaXRlMTYodmVjdG9yLCAmY2ZnLT5tc2l4X2NvbmZpZyk7Ci0JLyogVmVyaWZ5IHdl IGhhZCBlbm91Z2ggcmVzb3VyY2VzIHRvIGFzc2lnbiB0aGUgdmVjdG9yICovCi0JLyogV2lsbCBh bHNvIGZsdXNoIHRoZSB3cml0ZSBvdXQgdG8gZGV2aWNlICovCi0JcmV0dXJuIHZwX2lvcmVhZDE2 KCZjZmctPm1zaXhfY29uZmlnKTsKLX0KLQogc3RhdGljIHUxNiB2cF9jb25maWdfdmVjdG9yKHN0 cnVjdCB2aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2LCB1MTYgdmVjdG9yKQogewogCXJldHVybiB2 cF9tb2Rlcm5fY29uZmlnX3ZlY3RvcigmdnBfZGV2LT5tZGV2LCB2ZWN0b3IpOwpAQCAtNzg5LDI1 MyArNDM2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fY29uZmlnX29wcyB2aXJ0aW9f cGNpX2NvbmZpZ19vcHMgPSB7CiAJLmdldF9zaG1fcmVnaW9uICA9IHZwX2dldF9zaG1fcmVnaW9u LAogfTsKIAotLyoqCi0gKiB2aXJ0aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eSAtIHdhbGsgY2FwYWJp bGl0aWVzIHRvIGZpbmQgZGV2aWNlIGluZm8uCi0gKiBAZGV2OiB0aGUgcGNpIGRldmljZQotICog QGNmZ190eXBlOiB0aGUgVklSVElPX1BDSV9DQVBfKiB2YWx1ZSB3ZSBzZWVrCi0gKiBAaW9yZXNv dXJjZV90eXBlczogSU9SRVNPVVJDRV9NRU0gYW5kL29yIElPUkVTT1VSQ0VfSU8uCi0gKiBAYmFy czogdGhlIGJpdG1hc2sgb2YgQkFScwotICoKLSAqIFJldHVybnMgb2Zmc2V0IG9mIHRoZSBjYXBh YmlsaXR5LCBvciAwLgotICovCi1zdGF0aWMgaW5saW5lIGludCB2aXJ0aW9fcGNpX2ZpbmRfY2Fw YWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBjZmdfdHlwZSwKLQkJCQkJICAgICB1MzIg aW9yZXNvdXJjZV90eXBlcywgaW50ICpiYXJzKQotewotCWludCBwb3M7Ci0KLQlmb3IgKHBvcyA9 IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX1ZORFIpOwotCSAgICAgcG9zID4g MDsKLQkgICAgIHBvcyA9IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShkZXYsIHBvcywgUENJX0NB UF9JRF9WTkRSKSkgewotCQl1OCB0eXBlLCBiYXI7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRl diwgcG9zICsgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLAotCQkJCQkJCSBjZmdfdHlw ZSksCi0JCQkJICAgICAmdHlwZSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsg b2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLAotCQkJCQkJCSBiYXIpLAotCQkJCSAgICAg JmJhcik7Ci0KLQkJLyogSWdub3JlIHN0cnVjdHVyZXMgd2l0aCByZXNlcnZlZCBCQVIgdmFsdWVz ICovCi0JCWlmIChiYXIgPiAweDUpCi0JCQljb250aW51ZTsKLQotCQlpZiAodHlwZSA9PSBjZmdf dHlwZSkgewotCQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4oZGV2LCBiYXIpICYmCi0JCQkgICAgcGNp X3Jlc291cmNlX2ZsYWdzKGRldiwgYmFyKSAmIGlvcmVzb3VyY2VfdHlwZXMpIHsKLQkJCQkqYmFy cyB8PSAoMSA8PCBiYXIpOwotCQkJCXJldHVybiBwb3M7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJu IDA7Ci19Ci0KLS8qIFRoaXMgaXMgcGFydCBvZiB0aGUgQUJJLiAgRG9uJ3Qgc2NyZXcgd2l0aCBp dC4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19vZmZzZXRzKHZvaWQpCi17Ci0JLyogTm90 ZTogZGlzayBzcGFjZSB3YXMgaGFybWVkIGluIGNvbXBpbGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24u ICovCi0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX1ZORFIgIT0KLQkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGNhcF92bmRyKSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJ T19QQ0lfQ0FQX05FWFQgIT0KLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAs IGNhcF9uZXh0KSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX0xFTiAhPQotCQkgICAg IG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgY2FwX2xlbikpOwotCUJVSUxEX0JVR19P TihWSVJUSU9fUENJX0NBUF9DRkdfVFlQRSAhPQotCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0 aW9fcGNpX2NhcCwgY2ZnX3R5cGUpKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DQVBfQkFS ICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBiYXIpKTsKLQlCVUlM RF9CVUdfT04oVklSVElPX1BDSV9DQVBfT0ZGU0VUICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0 IHZpcnRpb19wY2lfY2FwLCBvZmZzZXQpKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DQVBf TEVOR1RIICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBsZW5ndGgp KTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9OT1RJRllfQ0FQX01VTFQgIT0KLQkJICAgICBv ZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2FwLAotCQkJICAgICAgbm90aWZ5X29m Zl9tdWx0aXBsaWVyKSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX0RGU0VMRUNU ICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywKLQkJCSAg ICAgIGRldmljZV9mZWF0dXJlX3NlbGVjdCkpOwotCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NP TU1PTl9ERiAhPQotCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcs IGRldmljZV9mZWF0dXJlKSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX0dGU0VM RUNUICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywKLQkJ CSAgICAgIGd1ZXN0X2ZlYXR1cmVfc2VsZWN0KSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lf Q09NTU9OX0dGICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2Nm ZywgZ3Vlc3RfZmVhdHVyZSkpOwotCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9NU0lY ICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgbXNpeF9j b25maWcpKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fTlVNUSAhPQotCQkgICAg IG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIG51bV9xdWV1ZXMpKTsKLQlC VUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fU1RBVFVTICE9Ci0JCSAgICAgb2Zmc2V0b2Yo c3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgZGV2aWNlX3N0YXR1cykpOwotCUJVSUxEX0JV R19PTihWSVJUSU9fUENJX0NPTU1PTl9DRkdHRU5FUkFUSU9OICE9Ci0JCSAgICAgb2Zmc2V0b2Yo c3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgY29uZmlnX2dlbmVyYXRpb24pKTsKLQlCVUlM RF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9TRUxFQ1QgIT0KLQkJICAgICBvZmZzZXRvZihz dHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9zZWxlY3QpKTsKLQlCVUlMRF9CVUdf T04oVklSVElPX1BDSV9DT01NT05fUV9TSVpFICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZp cnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfc2l6ZSkpOwotCUJVSUxEX0JVR19PTihWSVJUSU9f UENJX0NPTU1PTl9RX01TSVggIT0KLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9j b21tb25fY2ZnLCBxdWV1ZV9tc2l4X3ZlY3RvcikpOwotCUJVSUxEX0JVR19PTihWSVJUSU9fUENJ X0NPTU1PTl9RX0VOQUJMRSAhPQotCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2Nv bW1vbl9jZmcsIHF1ZXVlX2VuYWJsZSkpOwotCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1P Tl9RX05PRkYgIT0KLQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2Zn LCBxdWV1ZV9ub3RpZnlfb2ZmKSk7Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1Ff REVTQ0xPICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywg cXVldWVfZGVzY19sbykpOwotCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX0RFU0NI SSAhPQotCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVl X2Rlc2NfaGkpKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9BVkFJTExPICE9 Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfYXZh aWxfbG8pKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9BVkFJTEhJICE9Ci0J CSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfYXZhaWxf aGkpKTsKLQlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9VU0VETE8gIT0KLQkJICAg ICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV91c2VkX2xvKSk7 Ci0JQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfVVNFREhJICE9Ci0JCSAgICAgb2Zm c2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfdXNlZF9oaSkpOwotfQot Ci0vKgotICogdnBfbW9kZXJuX3Byb2JlOiBwcm9iZSB0aGUgbW9kZXJuIHZpcnRpbyBwY2kgZGV2 aWNlLCBub3RlIHRoYXQgdGhlCi0gKiBjYWxsZXIgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFBDSSBk ZXZpY2UgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqIEBtZGV2OiB0aGUgbW9kZXJu IHZpcnRpby1wY2kgZGV2aWNlCi0gKgotICogUmV0dXJuIDAgb24gc3VjY2VlZCBvdGhlcndpc2Ug ZmFpbAotICovCi1zdGF0aWMgaW50IHZwX21vZGVybl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9t b2Rlcm5fZGV2aWNlICptZGV2KQotewotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gbWRldi0+ cGNpX2RldjsKLQlpbnQgZXJyLCBjb21tb24sIGlzciwgbm90aWZ5LCBkZXZpY2U7Ci0JdTMyIG5v dGlmeV9sZW5ndGg7Ci0JdTMyIG5vdGlmeV9vZmZzZXQ7Ci0KLQljaGVja19vZmZzZXRzKCk7Ci0K LQltZGV2LT5wY2lfZGV2ID0gcGNpX2RldjsKLQotCS8qIFdlIG9ubHkgb3duIGRldmljZXMgPj0g MHgxMDAwIGFuZCA8PSAweDEwN2Y6IGxlYXZlIHRoZSByZXN0LiAqLwotCWlmIChwY2lfZGV2LT5k ZXZpY2UgPCAweDEwMDAgfHwgcGNpX2Rldi0+ZGV2aWNlID4gMHgxMDdmKQotCQlyZXR1cm4gLUVO T0RFVjsKLQotCWlmIChwY2lfZGV2LT5kZXZpY2UgPCAweDEwNDApIHsKLQkJLyogVHJhbnNpdGlv bmFsIGRldmljZXM6IHVzZSB0aGUgUENJIHN1YnN5c3RlbSBkZXZpY2UgaWQgYXMKLQkJICogdmly dGlvIGRldmljZSBpZCwgc2FtZSBhcyBsZWdhY3kgZHJpdmVyIGFsd2F5cyBkaWQuCi0JCSAqLwot CQltZGV2LT5pZC5kZXZpY2UgPSBwY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOwotCX0gZWxzZSB7 Ci0JCS8qIE1vZGVybiBkZXZpY2VzOiBzaW1wbHkgdXNlIFBDSSBkZXZpY2UgaWQsIGJ1dCBzdGFy dCBmcm9tIDB4MTA0MC4gKi8KLQkJbWRldi0+aWQuZGV2aWNlID0gcGNpX2Rldi0+ZGV2aWNlIC0g MHgxMDQwOwotCX0KLQltZGV2LT5pZC52ZW5kb3IgPSBwY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9y OwotCi0JLyogY2hlY2sgZm9yIGEgY29tbW9uIGNvbmZpZzogaWYgbm90LCB1c2UgbGVnYWN5IG1v ZGUgKGJhciAwKS4gKi8KLQljb21tb24gPSB2aXJ0aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eShwY2lf ZGV2LCBWSVJUSU9fUENJX0NBUF9DT01NT05fQ0ZHLAotCQkJCQkgICAgSU9SRVNPVVJDRV9JTyB8 IElPUkVTT1VSQ0VfTUVNLAotCQkJCQkgICAgJm1kZXYtPm1vZGVybl9iYXJzKTsKLQlpZiAoIWNv bW1vbikgewotCQlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LAotCQkJICJ2aXJ0aW9fcGNpOiBsZWF2 aW5nIGZvciBsZWdhY3kgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyog SWYgY29tbW9uIGlzIHRoZXJlLCB0aGVzZSBzaG91bGQgYmUgdG9vLi4uICovCi0JaXNyID0gdmly dGlvX3BjaV9maW5kX2NhcGFiaWxpdHkocGNpX2RldiwgVklSVElPX1BDSV9DQVBfSVNSX0NGRywK LQkJCQkJIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKLQkJCQkJICZtZGV2LT5tb2Rl cm5fYmFycyk7Ci0Jbm90aWZ5ID0gdmlydGlvX3BjaV9maW5kX2NhcGFiaWxpdHkocGNpX2Rldiwg VklSVElPX1BDSV9DQVBfTk9USUZZX0NGRywKLQkJCQkJICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JF U09VUkNFX01FTSwKLQkJCQkJICAgICZtZGV2LT5tb2Rlcm5fYmFycyk7Ci0JaWYgKCFpc3IgfHwg IW5vdGlmeSkgewotCQlkZXZfZXJyKCZwY2lfZGV2LT5kZXYsCi0JCQkidmlydGlvX3BjaTogbWlz c2luZyBjYXBhYmlsaXRpZXMgJWkvJWkvJWlcbiIsCi0JCQljb21tb24sIGlzciwgbm90aWZ5KTsK LQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVu dCgmcGNpX2Rldi0+ZGV2LCBETUFfQklUX01BU0soNjQpKTsKLQlpZiAoZXJyKQotCQllcnIgPSBk bWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsCi0JCQkJCQlETUFfQklUX01B U0soMzIpKTsKLQlpZiAoZXJyKQotCQlkZXZfd2FybigmcGNpX2Rldi0+ZGV2LCAiRmFpbGVkIHRv IGVuYWJsZSA2NC1iaXQgb3IgMzItYml0IERNQS4gIFRyeWluZyB0byBjb250aW51ZSwgYnV0IHRo aXMgbWlnaHQgbm90IHdvcmsuXG4iKTsKLQotCS8qIERldmljZSBjYXBhYmlsaXR5IGlzIG9ubHkg bWFuZGF0b3J5IGZvciBkZXZpY2VzIHRoYXQgaGF2ZQotCSAqIGRldmljZS1zcGVjaWZpYyBjb25m aWd1cmF0aW9uLgotCSAqLwotCWRldmljZSA9IHZpcnRpb19wY2lfZmluZF9jYXBhYmlsaXR5KHBj aV9kZXYsIFZJUlRJT19QQ0lfQ0FQX0RFVklDRV9DRkcsCi0JCQkJCSAgICBJT1JFU09VUkNFX0lP IHwgSU9SRVNPVVJDRV9NRU0sCi0JCQkJCSAgICAmbWRldi0+bW9kZXJuX2JhcnMpOwotCi0JZXJy ID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwY2lfZGV2LCBtZGV2LT5tb2Rlcm5fYmFy cywKLQkJCQkJICAgInZpcnRpby1wY2ktbW9kZXJuIik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVy cjsKLQotCWVyciA9IC1FSU5WQUw7Ci0JbWRldi0+Y29tbW9uID0gdnBfbW9kZXJuX21hcF9jYXBh YmlsaXR5KG1kZXYsIGNvbW1vbiwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19wY2lf Y29tbW9uX2NmZyksIDQsCi0JCQkJICAgICAgMCwgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcGNpX2Nv bW1vbl9jZmcpLAotCQkJCSAgICAgIE5VTEwpOwotCWlmICghbWRldi0+Y29tbW9uKQotCQlnb3Rv IGVycl9tYXBfY29tbW9uOwotCW1kZXYtPmlzciA9IHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eSht ZGV2LCBpc3IsIHNpemVvZih1OCksIDEsCi0JCQkJCSAgICAgMCwgMSwKLQkJCQkJICAgICBOVUxM KTsKLQlpZiAoIW1kZXYtPmlzcikKLQkJZ290byBlcnJfbWFwX2lzcjsKLQotCS8qIFJlYWQgbm90 aWZ5X29mZl9tdWx0aXBsaWVyIGZyb20gY29uZmlnIHNwYWNlLiAqLwotCXBjaV9yZWFkX2NvbmZp Z19kd29yZChwY2lfZGV2LAotCQkJICAgICAgbm90aWZ5ICsgb2Zmc2V0b2Yoc3RydWN0IHZpcnRp b19wY2lfbm90aWZ5X2NhcCwKLQkJCQkJCW5vdGlmeV9vZmZfbXVsdGlwbGllciksCi0JCQkgICAg ICAmbWRldi0+bm90aWZ5X29mZnNldF9tdWx0aXBsaWVyKTsKLQkvKiBSZWFkIG5vdGlmeSBsZW5n dGggYW5kIG9mZnNldCBmcm9tIGNvbmZpZyBzcGFjZS4gKi8KLQlwY2lfcmVhZF9jb25maWdfZHdv cmQocGNpX2RldiwKLQkJCSAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNp X25vdGlmeV9jYXAsCi0JCQkJCQljYXAubGVuZ3RoKSwKLQkJCSAgICAgICZub3RpZnlfbGVuZ3Ro KTsKLQotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LAotCQkJICAgICAgbm90aWZ5ICsg b2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfbm90aWZ5X2NhcCwKLQkJCQkJCWNhcC5vZmZzZXQp LAotCQkJICAgICAgJm5vdGlmeV9vZmZzZXQpOwotCi0JLyogV2UgZG9uJ3Qga25vdyBob3cgbWFu eSBWUXMgd2UnbGwgbWFwLCBhaGVhZCBvZiB0aGUgdGltZS4KLQkgKiBJZiBub3RpZnkgbGVuZ3Ro IGlzIHNtYWxsLCBtYXAgaXQgYWxsIG5vdy4KLQkgKiBPdGhlcndpc2UsIG1hcCBlYWNoIFZRIGlu ZGl2aWR1YWxseSBsYXRlci4KLQkgKi8KLQlpZiAoKHU2NClub3RpZnlfbGVuZ3RoICsgKG5vdGlm eV9vZmZzZXQgJSBQQUdFX1NJWkUpIDw9IFBBR0VfU0laRSkgewotCQltZGV2LT5ub3RpZnlfYmFz ZSA9IHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShtZGV2LCBub3RpZnksCi0JCQkJCQkJICAgICAy LCAyLAotCQkJCQkJCSAgICAgMCwgbm90aWZ5X2xlbmd0aCwKLQkJCQkJCQkgICAgICZtZGV2LT5u b3RpZnlfbGVuKTsKLQkJaWYgKCFtZGV2LT5ub3RpZnlfYmFzZSkKLQkJCWdvdG8gZXJyX21hcF9u b3RpZnk7Ci0JfSBlbHNlIHsKLQkJbWRldi0+bm90aWZ5X21hcF9jYXAgPSBub3RpZnk7Ci0JfQot Ci0JLyogQWdhaW4sIHdlIGRvbid0IGtub3cgaG93IG11Y2ggd2Ugc2hvdWxkIG1hcCwgYnV0IFBB R0VfU0laRQotCSAqIGlzIG1vcmUgdGhhbiBlbm91Z2ggZm9yIGFsbCBleGlzdGluZyBkZXZpY2Vz LgotCSAqLwotCWlmIChkZXZpY2UpIHsKLQkJbWRldi0+ZGV2aWNlID0gdnBfbW9kZXJuX21hcF9j YXBhYmlsaXR5KG1kZXYsIGRldmljZSwgMCwgNCwKLQkJCQkJCQkwLCBQQUdFX1NJWkUsCi0JCQkJ CQkJJm1kZXYtPmRldmljZV9sZW4pOwotCQlpZiAoIW1kZXYtPmRldmljZSkKLQkJCWdvdG8gZXJy X21hcF9kZXZpY2U7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9tYXBfZGV2aWNlOgotCWlmICht ZGV2LT5ub3RpZnlfYmFzZSkKLQkJcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+bm90aWZ5X2Jh c2UpOwotZXJyX21hcF9ub3RpZnk6Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+aXNyKTsK LWVycl9tYXBfaXNyOgotCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1kZXYtPmNvbW1vbik7Ci1lcnJf bWFwX2NvbW1vbjoKLQlyZXR1cm4gZXJyOwotfQotCiAvKiB0aGUgUENJIHByb2JpbmcgZnVuY3Rp b24gKi8KIGludCB2aXJ0aW9fcGNpX21vZGVybl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9kZXZp Y2UgKnZwX2RldikKIHsKQEAgLTEwNjMsMjMgKzQ2Myw2IEBAIGludCB2aXJ0aW9fcGNpX21vZGVy bl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldikKIAlyZXR1cm4gMDsKIH0K IAotLyoKLSAqIHZwX21vZGVybl9wcm9iZTogcmVtb3ZlIGFuZCBjbGVhbnVwIHRoZSBtb2Rlcm4g dmlydGlvIHBjaSBkZXZpY2UKLSAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNl Ci0gKi8KLXN0YXRpYyB2b2lkIHZwX21vZGVybl9yZW1vdmUoc3RydWN0IHZpcnRpb19wY2lfbW9k ZXJuX2RldmljZSAqbWRldikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IG1kZXYtPnBj aV9kZXY7Ci0KLQlpZiAobWRldi0+ZGV2aWNlKQotCQlwY2lfaW91bm1hcChwY2lfZGV2LCBtZGV2 LT5kZXZpY2UpOwotCWlmIChtZGV2LT5ub3RpZnlfYmFzZSkKLQkJcGNpX2lvdW5tYXAocGNpX2Rl diwgbWRldi0+bm90aWZ5X2Jhc2UpOwotCXBjaV9pb3VubWFwKHBjaV9kZXYsIG1kZXYtPmlzcik7 Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+Y29tbW9uKTsKLQlwY2lfcmVsZWFzZV9zZWxl Y3RlZF9yZWdpb25zKHBjaV9kZXYsIG1kZXYtPm1vZGVybl9iYXJzKTsKLX0KLQogdm9pZCB2aXJ0 aW9fcGNpX21vZGVybl9yZW1vdmUoc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYpCiB7 CiAJc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiA9ICZ2cF9kZXYtPm1kZXY7 CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpX21vZGVybl9kZXYuYyBiL2Ry aXZlcnMvdmlydGlvL3ZpcnRpb19wY2lfbW9kZXJuX2Rldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uY2JkNjY3NDk2YmIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy92aXJ0aW8vdmlydGlvX3BjaV9tb2Rlcm5fZGV2LmMKQEAgLTAsMCArMSw1OTkgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisKKyNpbmNsdWRlIDxs aW51eC92aXJ0aW9fcGNpX21vZGVybi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2lu Y2x1ZGUgPGxpbnV4L3BjaS5oPgorCisvKgorICogdnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5IC0g bWFwIGEgcGFydCBvZiB2aXJ0aW8gcGNpIGNhcGFiaWxpdHkKKyAqIEBtZGV2OiB0aGUgbW9kZXJu IHZpcnRpby1wY2kgZGV2aWNlCisgKiBAb2ZmOiBvZmZzZXQgb2YgdGhlIGNhcGFiaWxpdHkKKyAq IEBtaW5sZW46IG1pbmltYWwgbGVuZ3RoIG9mIHRoZSBjYXBhYmlsaXR5CisgKiBAYWxpZ246IGFs aWduIHJlcXVpcmVtZW50CisgKiBAc3RhcnQ6IHN0YXJ0IGZyb20gdGhlIGNhcGFiaWxpdHkKKyAq IEBzaXplOiBtYXAgc2l6ZQorICogQGxlbjogdGhlIGxlbmd0aCB0aGF0IGlzIGFjdHVhbGx5IG1h cHBlZAorICoKKyAqIFJldHVybnMgdGhlIGlvIGFkZHJlc3Mgb2YgZm9yIHRoZSBwYXJ0IG9mIHRo ZSBjYXBhYmlsaXR5CisgKi8KK3ZvaWQgX19pb21lbSAqdnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5 KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsIGludCBvZmYsCisJCQkJICAg ICAgIHNpemVfdCBtaW5sZW4sCisJCQkJICAgICAgIHUzMiBhbGlnbiwKKwkJCQkgICAgICAgdTMy IHN0YXJ0LCB1MzIgc2l6ZSwKKwkJCQkgICAgICAgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IHBj aV9kZXYgKmRldiA9IG1kZXYtPnBjaV9kZXY7CisJdTggYmFyOworCXUzMiBvZmZzZXQsIGxlbmd0 aDsKKwl2b2lkIF9faW9tZW0gKnA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIG9mZiAr IG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwKKwkJCQkJCSBiYXIpLAorCQkJICAgICAm YmFyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBvZmYgKyBvZmZzZXRvZihzdHJ1Y3Qg dmlydGlvX3BjaV9jYXAsIG9mZnNldCksCisJCQkgICAgICZvZmZzZXQpOworCXBjaV9yZWFkX2Nv bmZpZ19kd29yZChkZXYsIG9mZiArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgbGVu Z3RoKSwKKwkJCSAgICAgICZsZW5ndGgpOworCisJaWYgKGxlbmd0aCA8PSBzdGFydCkgeworCQlk ZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJ2aXJ0aW9fcGNpOiBiYWQgY2FwYWJpbGl0eSBsZW4gJXUg KD4ldSBleHBlY3RlZClcbiIsCisJCQlsZW5ndGgsIHN0YXJ0KTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCisJaWYgKGxlbmd0aCAtIHN0YXJ0IDwgbWlubGVuKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2 LAorCQkJInZpcnRpb19wY2k6IGJhZCBjYXBhYmlsaXR5IGxlbiAldSAoPj0lenUgZXhwZWN0ZWQp XG4iLAorCQkJbGVuZ3RoLCBtaW5sZW4pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsZW5ndGgg LT0gc3RhcnQ7CisKKwlpZiAoc3RhcnQgKyBvZmZzZXQgPCBvZmZzZXQpIHsKKwkJZGV2X2Vycigm ZGV2LT5kZXYsCisJCQkidmlydGlvX3BjaTogbWFwIHdyYXAtYXJvdW5kICV1KyV1XG4iLAorCQkJ c3RhcnQsIG9mZnNldCk7CisJCXJldHVybiBOVUxMOworCX0KKworCW9mZnNldCArPSBzdGFydDsK KworCWlmIChvZmZzZXQgJiAoYWxpZ24gLSAxKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJ CSJ2aXJ0aW9fcGNpOiBvZmZzZXQgJXUgbm90IGFsaWduZWQgdG8gJXVcbiIsCisJCQlvZmZzZXQs IGFsaWduKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGxlbmd0aCA+IHNpemUpCisJCWxl bmd0aCA9IHNpemU7CisKKwlpZiAobGVuKQorCQkqbGVuID0gbGVuZ3RoOworCisJaWYgKG1pbmxl biArIG9mZnNldCA8IG1pbmxlbiB8fAorCSAgICBtaW5sZW4gKyBvZmZzZXQgPiBwY2lfcmVzb3Vy Y2VfbGVuKGRldiwgYmFyKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCSJ2aXJ0aW9fcGNp OiBtYXAgdmlydGlvICV6dUAldSAiCisJCQkib3V0IG9mIHJhbmdlIG9uIGJhciAlaSBsZW5ndGgg JWx1XG4iLAorCQkJbWlubGVuLCBvZmZzZXQsCisJCQliYXIsICh1bnNpZ25lZCBsb25nKXBjaV9y ZXNvdXJjZV9sZW4oZGV2LCBiYXIpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcCA9IHBjaV9p b21hcF9yYW5nZShkZXYsIGJhciwgb2Zmc2V0LCBsZW5ndGgpOworCWlmICghcCkKKwkJZGV2X2Vy cigmZGV2LT5kZXYsCisJCQkidmlydGlvX3BjaTogdW5hYmxlIHRvIG1hcCB2aXJ0aW8gJXVAJXUg b24gYmFyICVpXG4iLAorCQkJbGVuZ3RoLCBvZmZzZXQsIGJhcik7CisJcmV0dXJuIHA7Cit9CitF WFBPUlRfU1lNQk9MX0dQTCh2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkpOworCisvKioKKyAqIHZp cnRpb19wY2lfZmluZF9jYXBhYmlsaXR5IC0gd2FsayBjYXBhYmlsaXRpZXMgdG8gZmluZCBkZXZp Y2UgaW5mby4KKyAqIEBkZXY6IHRoZSBwY2kgZGV2aWNlCisgKiBAY2ZnX3R5cGU6IHRoZSBWSVJU SU9fUENJX0NBUF8qIHZhbHVlIHdlIHNlZWsKKyAqIEBpb3Jlc291cmNlX3R5cGVzOiBJT1JFU09V UkNFX01FTSBhbmQvb3IgSU9SRVNPVVJDRV9JTy4KKyAqIEBiYXJzOiB0aGUgYml0bWFzayBvZiBC QVJzCisgKgorICogUmV0dXJucyBvZmZzZXQgb2YgdGhlIGNhcGFiaWxpdHksIG9yIDAuCisgKi8K K3N0YXRpYyBpbmxpbmUgaW50IHZpcnRpb19wY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lf ZGV2ICpkZXYsIHU4IGNmZ190eXBlLAorCQkJCQkgICAgIHUzMiBpb3Jlc291cmNlX3R5cGVzLCBp bnQgKmJhcnMpCit7CisJaW50IHBvczsKKworCWZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0 eShkZXYsIFBDSV9DQVBfSURfVk5EUik7CisJICAgICBwb3MgPiAwOworCSAgICAgcG9zID0gcGNp X2ZpbmRfbmV4dF9jYXBhYmlsaXR5KGRldiwgcG9zLCBQQ0lfQ0FQX0lEX1ZORFIpKSB7CisJCXU4 IHR5cGUsIGJhcjsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihz dHJ1Y3QgdmlydGlvX3BjaV9jYXAsCisJCQkJCQkJIGNmZ190eXBlKSwKKwkJCQkgICAgICZ0eXBl KTsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBvZmZzZXRvZihzdHJ1Y3Qgdmly dGlvX3BjaV9jYXAsCisJCQkJCQkJIGJhciksCisJCQkJICAgICAmYmFyKTsKKworCQkvKiBJZ25v cmUgc3RydWN0dXJlcyB3aXRoIHJlc2VydmVkIEJBUiB2YWx1ZXMgKi8KKwkJaWYgKGJhciA+IDB4 NSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0eXBlID09IGNmZ190eXBlKSB7CisJCQlpZiAocGNp X3Jlc291cmNlX2xlbihkZXYsIGJhcikgJiYKKwkJCSAgICBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2 LCBiYXIpICYgaW9yZXNvdXJjZV90eXBlcykgeworCQkJCSpiYXJzIHw9ICgxIDw8IGJhcik7CisJ CQkJcmV0dXJuIHBvczsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBp cyBwYXJ0IG9mIHRoZSBBQkkuICBEb24ndCBzY3JldyB3aXRoIGl0LiAqLworc3RhdGljIGlubGlu ZSB2b2lkIGNoZWNrX29mZnNldHModm9pZCkKK3sKKwkvKiBOb3RlOiBkaXNrIHNwYWNlIHdhcyBo YXJtZWQgaW4gY29tcGlsYXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gKi8KKwlCVUlMRF9CVUdfT04o VklSVElPX1BDSV9DQVBfVk5EUiAhPQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNp X2NhcCwgY2FwX3ZuZHIpKTsKKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DQVBfTkVYVCAhPQor CQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NhcCwgY2FwX25leHQpKTsKKwlCVUlM RF9CVUdfT04oVklSVElPX1BDSV9DQVBfTEVOICE9CisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZp cnRpb19wY2lfY2FwLCBjYXBfbGVuKSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ0FQX0NG R19UWVBFICE9CisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY2FwLCBjZmdfdHlw ZSkpOworCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9CQVIgIT0KKwkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGJhcikpOworCUJVSUxEX0JVR19PTihWSVJUSU9fUENJ X0NBUF9PRkZTRVQgIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIG9m ZnNldCkpOworCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NBUF9MRU5HVEggIT0KKwkJICAgICBv ZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jYXAsIGxlbmd0aCkpOworCUJVSUxEX0JVR19PTihW SVJUSU9fUENJX05PVElGWV9DQVBfTVVMVCAhPQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0 aW9fcGNpX25vdGlmeV9jYXAsCisJCQkgICAgICBub3RpZnlfb2ZmX211bHRpcGxpZXIpKTsKKwlC VUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fREZTRUxFQ1QgIT0KKwkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLAorCQkJICAgICAgZGV2aWNlX2ZlYXR1cmVf c2VsZWN0KSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX0RGICE9CisJCSAgICAg b2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgZGV2aWNlX2ZlYXR1cmUpKTsK KwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fR0ZTRUxFQ1QgIT0KKwkJICAgICBvZmZz ZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLAorCQkJICAgICAgZ3Vlc3RfZmVhdHVy ZV9zZWxlY3QpKTsKKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fR0YgIT0KKwkJICAg ICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBndWVzdF9mZWF0dXJlKSk7 CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX01TSVggIT0KKwkJICAgICBvZmZzZXRv ZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBtc2l4X2NvbmZpZykpOworCUJVSUxEX0JV R19PTihWSVJUSU9fUENJX0NPTU1PTl9OVU1RICE9CisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZp cnRpb19wY2lfY29tbW9uX2NmZywgbnVtX3F1ZXVlcykpOworCUJVSUxEX0JVR19PTihWSVJUSU9f UENJX0NPTU1PTl9TVEFUVVMgIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9j b21tb25fY2ZnLCBkZXZpY2Vfc3RhdHVzKSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09N TU9OX0NGR0dFTkVSQVRJT04gIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9j b21tb25fY2ZnLCBjb25maWdfZ2VuZXJhdGlvbikpOworCUJVSUxEX0JVR19PTihWSVJUSU9fUENJ X0NPTU1PTl9RX1NFTEVDVCAhPQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2Nv bW1vbl9jZmcsIHF1ZXVlX3NlbGVjdCkpOworCUJVSUxEX0JVR19PTihWSVJUSU9fUENJX0NPTU1P Tl9RX1NJWkUgIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2Zn LCBxdWV1ZV9zaXplKSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfTVNJWCAh PQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX21z aXhfdmVjdG9yKSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfRU5BQkxFICE9 CisJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfZW5h YmxlKSk7CisJQlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfTk9GRiAhPQorCQkgICAg IG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX25vdGlmeV9vZmYp KTsKKwlCVUlMRF9CVUdfT04oVklSVElPX1BDSV9DT01NT05fUV9ERVNDTE8gIT0KKwkJICAgICBv ZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9kZXNjX2xvKSk7CisJ QlVJTERfQlVHX09OKFZJUlRJT19QQ0lfQ09NTU9OX1FfREVTQ0hJICE9CisJCSAgICAgb2Zmc2V0 b2Yoc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZywgcXVldWVfZGVzY19oaSkpOworCUJVSUxE X0JVR19PTihWSVJUSU9fUENJX0NPTU1PTl9RX0FWQUlMTE8gIT0KKwkJICAgICBvZmZzZXRvZihz dHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9hdmFpbF9sbykpOworCUJVSUxEX0JV R19PTihWSVJUSU9fUENJX0NPTU1PTl9RX0FWQUlMSEkgIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1 Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnLCBxdWV1ZV9hdmFpbF9oaSkpOworCUJVSUxEX0JVR19P TihWSVJUSU9fUENJX0NPTU1PTl9RX1VTRURMTyAhPQorCQkgICAgIG9mZnNldG9mKHN0cnVjdCB2 aXJ0aW9fcGNpX2NvbW1vbl9jZmcsIHF1ZXVlX3VzZWRfbG8pKTsKKwlCVUlMRF9CVUdfT04oVklS VElPX1BDSV9DT01NT05fUV9VU0VESEkgIT0KKwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlv X3BjaV9jb21tb25fY2ZnLCBxdWV1ZV91c2VkX2hpKSk7Cit9CisKKy8qCisgKiB2cF9tb2Rlcm5f cHJvYmU6IHByb2JlIHRoZSBtb2Rlcm4gdmlydGlvIHBjaSBkZXZpY2UsIG5vdGUgdGhhdCB0aGUK KyAqIGNhbGxlciBpcyByZXF1aXJlZCB0byBlbmFibGUgUENJIGRldmljZSBiZWZvcmUgY2FsbGlu ZyB0aGlzIGZ1bmN0aW9uLgorICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UK KyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZWVkIG90aGVyd2lzZSBmYWlsCisgKi8KK2ludCB2cF9t b2Rlcm5fcHJvYmUoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldikKK3sKKwlz dHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IG1kZXYtPnBjaV9kZXY7CisJaW50IGVyciwgY29tbW9u LCBpc3IsIG5vdGlmeSwgZGV2aWNlOworCXUzMiBub3RpZnlfbGVuZ3RoOworCXUzMiBub3RpZnlf b2Zmc2V0OworCisJY2hlY2tfb2Zmc2V0cygpOworCisJbWRldi0+cGNpX2RldiA9IHBjaV9kZXY7 CisKKwkvKiBXZSBvbmx5IG93biBkZXZpY2VzID49IDB4MTAwMCBhbmQgPD0gMHgxMDdmOiBsZWF2 ZSB0aGUgcmVzdC4gKi8KKwlpZiAocGNpX2Rldi0+ZGV2aWNlIDwgMHgxMDAwIHx8IHBjaV9kZXYt PmRldmljZSA+IDB4MTA3ZikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAocGNpX2Rldi0+ZGV2 aWNlIDwgMHgxMDQwKSB7CisJCS8qIFRyYW5zaXRpb25hbCBkZXZpY2VzOiB1c2UgdGhlIFBDSSBz dWJzeXN0ZW0gZGV2aWNlIGlkIGFzCisJCSAqIHZpcnRpbyBkZXZpY2UgaWQsIHNhbWUgYXMgbGVn YWN5IGRyaXZlciBhbHdheXMgZGlkLgorCQkgKi8KKwkJbWRldi0+aWQuZGV2aWNlID0gcGNpX2Rl di0+c3Vic3lzdGVtX2RldmljZTsKKwl9IGVsc2UgeworCQkvKiBNb2Rlcm4gZGV2aWNlczogc2lt cGx5IHVzZSBQQ0kgZGV2aWNlIGlkLCBidXQgc3RhcnQgZnJvbSAweDEwNDAuICovCisJCW1kZXYt PmlkLmRldmljZSA9IHBjaV9kZXYtPmRldmljZSAtIDB4MTA0MDsKKwl9CisJbWRldi0+aWQudmVu ZG9yID0gcGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKworCS8qIGNoZWNrIGZvciBhIGNvbW1v biBjb25maWc6IGlmIG5vdCwgdXNlIGxlZ2FjeSBtb2RlIChiYXIgMCkuICovCisJY29tbW9uID0g dmlydGlvX3BjaV9maW5kX2NhcGFiaWxpdHkocGNpX2RldiwgVklSVElPX1BDSV9DQVBfQ09NTU9O X0NGRywKKwkJCQkJICAgIElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSwKKwkJCQkJICAg ICZtZGV2LT5tb2Rlcm5fYmFycyk7CisJaWYgKCFjb21tb24pIHsKKwkJZGV2X2luZm8oJnBjaV9k ZXYtPmRldiwKKwkJCSAidmlydGlvX3BjaTogbGVhdmluZyBmb3IgbGVnYWN5IGRyaXZlclxuIik7 CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIElmIGNvbW1vbiBpcyB0aGVyZSwgdGhlc2Ug c2hvdWxkIGJlIHRvby4uLiAqLworCWlzciA9IHZpcnRpb19wY2lfZmluZF9jYXBhYmlsaXR5KHBj aV9kZXYsIFZJUlRJT19QQ0lfQ0FQX0lTUl9DRkcsCisJCQkJCSBJT1JFU09VUkNFX0lPIHwgSU9S RVNPVVJDRV9NRU0sCisJCQkJCSAmbWRldi0+bW9kZXJuX2JhcnMpOworCW5vdGlmeSA9IHZpcnRp b19wY2lfZmluZF9jYXBhYmlsaXR5KHBjaV9kZXYsIFZJUlRJT19QQ0lfQ0FQX05PVElGWV9DRkcs CisJCQkJCSAgICBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICAmbWRl di0+bW9kZXJuX2JhcnMpOworCWlmICghaXNyIHx8ICFub3RpZnkpIHsKKwkJZGV2X2VycigmcGNp X2Rldi0+ZGV2LAorCQkJInZpcnRpb19wY2k6IG1pc3NpbmcgY2FwYWJpbGl0aWVzICVpLyVpLyVp XG4iLAorCQkJY29tbW9uLCBpc3IsIG5vdGlmeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CWVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgRE1BX0JJVF9N QVNLKDY0KSk7CisJaWYgKGVycikKKwkJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgm cGNpX2Rldi0+ZGV2LAorCQkJCQkJRE1BX0JJVF9NQVNLKDMyKSk7CisJaWYgKGVycikKKwkJZGV2 X3dhcm4oJnBjaV9kZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgNjQtYml0IG9yIDMyLWJpdCBE TUEuICBUcnlpbmcgdG8gY29udGludWUsIGJ1dCB0aGlzIG1pZ2h0IG5vdCB3b3JrLlxuIik7CisK KwkvKiBEZXZpY2UgY2FwYWJpbGl0eSBpcyBvbmx5IG1hbmRhdG9yeSBmb3IgZGV2aWNlcyB0aGF0 IGhhdmUKKwkgKiBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlkZXZpY2Ug PSB2aXJ0aW9fcGNpX2ZpbmRfY2FwYWJpbGl0eShwY2lfZGV2LCBWSVJUSU9fUENJX0NBUF9ERVZJ Q0VfQ0ZHLAorCQkJCQkgICAgSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfTUVNLAorCQkJCQkg ICAgJm1kZXYtPm1vZGVybl9iYXJzKTsKKworCWVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3Jl Z2lvbnMocGNpX2RldiwgbWRldi0+bW9kZXJuX2JhcnMsCisJCQkJCSAgICJ2aXJ0aW8tcGNpLW1v ZGVybiIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSAtRUlOVkFMOworCW1k ZXYtPmNvbW1vbiA9IHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShtZGV2LCBjb21tb24sCisJCQkJ ICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcpLCA0LAorCQkJCSAgICAg IDAsIHNpemVvZihzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnKSwKKwkJCQkgICAgICBOVUxM KTsKKwlpZiAoIW1kZXYtPmNvbW1vbikKKwkJZ290byBlcnJfbWFwX2NvbW1vbjsKKwltZGV2LT5p c3IgPSB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxpdHkobWRldiwgaXNyLCBzaXplb2YodTgpLCAxLAor CQkJCQkgICAgIDAsIDEsCisJCQkJCSAgICAgTlVMTCk7CisJaWYgKCFtZGV2LT5pc3IpCisJCWdv dG8gZXJyX21hcF9pc3I7CisKKwkvKiBSZWFkIG5vdGlmeV9vZmZfbXVsdGlwbGllciBmcm9tIGNv bmZpZyBzcGFjZS4gKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2RldiwKKwkJCSAgICAg IG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNpX25vdGlmeV9jYXAsCisJCQkJCQlu b3RpZnlfb2ZmX211bHRpcGxpZXIpLAorCQkJICAgICAgJm1kZXYtPm5vdGlmeV9vZmZzZXRfbXVs dGlwbGllcik7CisJLyogUmVhZCBub3RpZnkgbGVuZ3RoIGFuZCBvZmZzZXQgZnJvbSBjb25maWcg c3BhY2UuICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsCisJCQkgICAgICBub3Rp ZnkgKyBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX3BjaV9ub3RpZnlfY2FwLAorCQkJCQkJY2FwLmxl bmd0aCksCisJCQkgICAgICAmbm90aWZ5X2xlbmd0aCk7CisKKwlwY2lfcmVhZF9jb25maWdfZHdv cmQocGNpX2RldiwKKwkJCSAgICAgIG5vdGlmeSArIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fcGNp X25vdGlmeV9jYXAsCisJCQkJCQljYXAub2Zmc2V0KSwKKwkJCSAgICAgICZub3RpZnlfb2Zmc2V0 KTsKKworCS8qIFdlIGRvbid0IGtub3cgaG93IG1hbnkgVlFzIHdlJ2xsIG1hcCwgYWhlYWQgb2Yg dGhlIHRpbWUuCisJICogSWYgbm90aWZ5IGxlbmd0aCBpcyBzbWFsbCwgbWFwIGl0IGFsbCBub3cu CisJICogT3RoZXJ3aXNlLCBtYXAgZWFjaCBWUSBpbmRpdmlkdWFsbHkgbGF0ZXIuCisJICovCisJ aWYgKCh1NjQpbm90aWZ5X2xlbmd0aCArIChub3RpZnlfb2Zmc2V0ICUgUEFHRV9TSVpFKSA8PSBQ QUdFX1NJWkUpIHsKKwkJbWRldi0+bm90aWZ5X2Jhc2UgPSB2cF9tb2Rlcm5fbWFwX2NhcGFiaWxp dHkobWRldiwgbm90aWZ5LAorCQkJCQkJCSAgICAgMiwgMiwKKwkJCQkJCQkgICAgIDAsIG5vdGlm eV9sZW5ndGgsCisJCQkJCQkJICAgICAmbWRldi0+bm90aWZ5X2xlbik7CisJCWlmICghbWRldi0+ bm90aWZ5X2Jhc2UpCisJCQlnb3RvIGVycl9tYXBfbm90aWZ5OworCX0gZWxzZSB7CisJCW1kZXYt Pm5vdGlmeV9tYXBfY2FwID0gbm90aWZ5OworCX0KKworCS8qIEFnYWluLCB3ZSBkb24ndCBrbm93 IGhvdyBtdWNoIHdlIHNob3VsZCBtYXAsIGJ1dCBQQUdFX1NJWkUKKwkgKiBpcyBtb3JlIHRoYW4g ZW5vdWdoIGZvciBhbGwgZXhpc3RpbmcgZGV2aWNlcy4KKwkgKi8KKwlpZiAoZGV2aWNlKSB7CisJ CW1kZXYtPmRldmljZSA9IHZwX21vZGVybl9tYXBfY2FwYWJpbGl0eShtZGV2LCBkZXZpY2UsIDAs IDQsCisJCQkJCQkJMCwgUEFHRV9TSVpFLAorCQkJCQkJCSZtZGV2LT5kZXZpY2VfbGVuKTsKKwkJ aWYgKCFtZGV2LT5kZXZpY2UpCisJCQlnb3RvIGVycl9tYXBfZGV2aWNlOworCX0KKworCXJldHVy biAwOworCitlcnJfbWFwX2RldmljZToKKwlpZiAobWRldi0+bm90aWZ5X2Jhc2UpCisJCXBjaV9p b3VubWFwKHBjaV9kZXYsIG1kZXYtPm5vdGlmeV9iYXNlKTsKK2Vycl9tYXBfbm90aWZ5OgorCXBj aV9pb3VubWFwKHBjaV9kZXYsIG1kZXYtPmlzcik7CitlcnJfbWFwX2lzcjoKKwlwY2lfaW91bm1h cChwY2lfZGV2LCBtZGV2LT5jb21tb24pOworZXJyX21hcF9jb21tb246CisJcmV0dXJuIGVycjsK K30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9wcm9iZSk7CisKKy8qCisgKiB2cF9tb2Rl cm5fcHJvYmU6IHJlbW92ZSBhbmQgY2xlYW51cCB0aGUgbW9kZXJuIHZpcnRpbyBwY2kgZGV2aWNl CisgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQorICovCit2b2lkIHZwX21v ZGVybl9yZW1vdmUoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldikKK3sKKwlz dHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IG1kZXYtPnBjaV9kZXY7CisKKwlpZiAobWRldi0+ZGV2 aWNlKQorCQlwY2lfaW91bm1hcChwY2lfZGV2LCBtZGV2LT5kZXZpY2UpOworCWlmIChtZGV2LT5u b3RpZnlfYmFzZSkKKwkJcGNpX2lvdW5tYXAocGNpX2RldiwgbWRldi0+bm90aWZ5X2Jhc2UpOwor CXBjaV9pb3VubWFwKHBjaV9kZXYsIG1kZXYtPmlzcik7CisJcGNpX2lvdW5tYXAocGNpX2Rldiwg bWRldi0+Y29tbW9uKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBjaV9kZXYsIG1k ZXYtPm1vZGVybl9iYXJzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9yZW1vdmUp OworCisvKgorICogdnBfbW9kZXJuX2dldF9mZWF0dXJlcyAtIGdldCBmZWF0dXJlcyBmcm9tIGRl dmljZQorICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZpY2UKKyAqCisgKiBSZXR1 cm5zIHRoZSBmZWF0dXJlcyByZWFkIGZyb20gdGhlIGRldmljZQorICovCit1NjQgdnBfbW9kZXJu X2dldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2KQorewor CXN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY2ZnID0gbWRldi0+Y29tbW9u OworCisJdTY0IGZlYXR1cmVzOworCisJdnBfaW93cml0ZTMyKDAsICZjZmctPmRldmljZV9mZWF0 dXJlX3NlbGVjdCk7CisJZmVhdHVyZXMgPSB2cF9pb3JlYWQzMigmY2ZnLT5kZXZpY2VfZmVhdHVy ZSk7CisJdnBfaW93cml0ZTMyKDEsICZjZmctPmRldmljZV9mZWF0dXJlX3NlbGVjdCk7CisJZmVh dHVyZXMgfD0gKCh1NjQpdnBfaW9yZWFkMzIoJmNmZy0+ZGV2aWNlX2ZlYXR1cmUpIDw8IDMyKTsK KworCXJldHVybiBmZWF0dXJlczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9nZXRf ZmVhdHVyZXMpOworCisvKgorICogdnBfbW9kZXJuX3NldF9mZWF0dXJlcyAtIHNldCBmZWF0dXJl cyB0byBkZXZpY2UKKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCisgKiBA ZmVhdHVyZXM6IHRoZSBmZWF0dXJlcyBzZXQgdG8gZGV2aWNlCisgKi8KK3ZvaWQgdnBfbW9kZXJu X3NldF9mZWF0dXJlcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAorCQkJ ICAgIHU2NCBmZWF0dXJlcykKK3sKKwlzdHJ1Y3QgdmlydGlvX3BjaV9jb21tb25fY2ZnIF9faW9t ZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKKworCXZwX2lvd3JpdGUzMigwLCAmY2ZnLT5ndWVzdF9m ZWF0dXJlX3NlbGVjdCk7CisJdnBfaW93cml0ZTMyKCh1MzIpZmVhdHVyZXMsICZjZmctPmd1ZXN0 X2ZlYXR1cmUpOworCXZwX2lvd3JpdGUzMigxLCAmY2ZnLT5ndWVzdF9mZWF0dXJlX3NlbGVjdCk7 CisJdnBfaW93cml0ZTMyKGZlYXR1cmVzID4+IDMyLCAmY2ZnLT5ndWVzdF9mZWF0dXJlKTsKK30K K0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9zZXRfZmVhdHVyZXMpOworCisvKgorICogdnBf bW9kZXJuX2dlbmVyYXRpb24gLSBnZXQgdGhlIGRldmljZSBnZW5yZWF0aW9uCisgKiBAbWRldjog dGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQorICoKKyAqIFJldHVybnMgdGhlIGdlbnJlYXRp b24gcmVhZCBmcm9tIGRldmljZQorICovCit1MzIgdnBfbW9kZXJuX2dlbmVyYXRpb24oc3RydWN0 IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX3BjaV9j b21tb25fY2ZnIF9faW9tZW0gKmNmZyA9IG1kZXYtPmNvbW1vbjsKKworCXJldHVybiB2cF9pb3Jl YWQ4KCZjZmctPmNvbmZpZ19nZW5lcmF0aW9uKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21v ZGVybl9nZW5lcmF0aW9uKTsKKworLyoKKyAqIHZwX21vZGVybl9nZXRfc3RhdHVzIC0gZ2V0IHRo ZSBkZXZpY2Ugc3RhdHVzCisgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQor ICoKKyAqIFJldHVybnMgdGhlIHN0YXR1cyByZWFkIGZyb20gZGV2aWNlCisgKi8KK3U4IHZwX21v ZGVybl9nZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpCit7 CisJc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21t b247CisKKwlyZXR1cm4gdnBfaW9yZWFkOCgmY2ZnLT5kZXZpY2Vfc3RhdHVzKTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKHZwX21vZGVybl9nZXRfc3RhdHVzKTsKKworLyoKKyAqIHZwX21vZGVybl9z ZXRfc3RhdHVzIC0gc2V0IHN0YXR1cyB0byBkZXZpY2UKKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZp cnRpby1wY2kgZGV2aWNlCisgKiBAc3RhdHVzOiB0aGUgc3RhdHVzIHNldCB0byBkZXZpY2UKKyAq Lwordm9pZCB2cF9tb2Rlcm5fc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2 aWNlICptZGV2LAorCQkJCSB1OCBzdGF0dXMpCit7CisJc3RydWN0IHZpcnRpb19wY2lfY29tbW9u X2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247CisKKwl2cF9pb3dyaXRlOChzdGF0dXMs ICZjZmctPmRldmljZV9zdGF0dXMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX3Nl dF9zdGF0dXMpOworCisvKgorICogdnBfbW9kZXJuX3F1ZXVlX3ZlY3RvciAtIHNldCB0aGUgTVNJ WCB2ZWN0b3IgZm9yIGEgc3BlY2lmaWMgdmlydHF1ZXVlCisgKiBAbWRldjogdGhlIG1vZGVybiB2 aXJ0aW8tcGNpIGRldmljZQorICogQGluZGV4OiBxdWV1ZSBpbmRleAorICogQHZlY3RvcjogdGhl IGNvbmZpZyB2ZWN0b3IKKyAqCisgKiBSZXR1cm5zIHRoZSBjb25maWcgdmVjdG9yIHJlYWQgZnJv bSB0aGUgZGV2aWNlCisgKi8KK3UxNiB2cF9tb2Rlcm5fcXVldWVfdmVjdG9yKHN0cnVjdCB2aXJ0 aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICB1MTYgaW5kZXgsIHUxNiB2ZWN0b3Ip Cit7CisJc3RydWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5j b21tb247CisKKwl2cF9pb3dyaXRlMTYoaW5kZXgsICZjZmctPnF1ZXVlX3NlbGVjdCk7CisJdnBf aW93cml0ZTE2KHZlY3RvciwgJmNmZy0+cXVldWVfbXNpeF92ZWN0b3IpOworCS8qIEZsdXNoIHRo ZSB3cml0ZSBvdXQgdG8gZGV2aWNlICovCisJcmV0dXJuIHZwX2lvcmVhZDE2KCZjZmctPnF1ZXVl X21zaXhfdmVjdG9yKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9xdWV1ZV92ZWN0 b3IpOworCisvKgorICogdnBfbW9kZXJuX2NvbmZpZ192ZWN0b3IgLSBzZXQgdGhlIHZlY3RvciBm b3IgY29uZmlnIGludGVycnVwdAorICogQG1kZXY6IHRoZSBtb2Rlcm4gdmlydGlvLXBjaSBkZXZp Y2UKKyAqIEB2ZWN0b3I6IHRoZSBjb25maWcgdmVjdG9yCisgKgorICogUmV0dXJucyB0aGUgY29u ZmlnIHZlY3RvciByZWFkIGZyb20gdGhlIGRldmljZQorICovCit1MTYgdnBfbW9kZXJuX2NvbmZp Z192ZWN0b3Ioc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKKwkJCSAgICB1 MTYgdmVjdG9yKQoreworCXN0cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY2Zn ID0gbWRldi0+Y29tbW9uOworCisJLyogU2V0dXAgdGhlIHZlY3RvciB1c2VkIGZvciBjb25maWd1 cmF0aW9uIGV2ZW50cyAqLworCXZwX2lvd3JpdGUxNih2ZWN0b3IsICZjZmctPm1zaXhfY29uZmln KTsKKwkvKiBWZXJpZnkgd2UgaGFkIGVub3VnaCByZXNvdXJjZXMgdG8gYXNzaWduIHRoZSB2ZWN0 b3IgKi8KKwkvKiBXaWxsIGFsc28gZmx1c2ggdGhlIHdyaXRlIG91dCB0byBkZXZpY2UgKi8KKwly ZXR1cm4gdnBfaW9yZWFkMTYoJmNmZy0+bXNpeF9jb25maWcpOworfQorRVhQT1JUX1NZTUJPTF9H UEwodnBfbW9kZXJuX2NvbmZpZ192ZWN0b3IpOworCisvKgorICogdnBfbW9kZXJuX3F1ZXVlX2Fk ZHJlc3MgLSBzZXQgdGhlIHZpcnRxdWV1ZSBhZGRyZXNzCisgKiBAbWRldjogdGhlIG1vZGVybiB2 aXJ0aW8tcGNpIGRldmljZQorICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKKyAqIEBkZXNjX2Fk ZHI6IGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IgYXJlYQorICogQGRyaXZlcl9hZGRyOiBhZGRy ZXNzIG9mIHRoZSBkcml2ZXIgYXJlYQorICogQGRldmljZV9hZGRyOiBhZGRyZXNzIG9mIHRoZSBk ZXZpY2UgYXJlYQorICovCit2b2lkIHZwX21vZGVybl9xdWV1ZV9hZGRyZXNzKHN0cnVjdCB2aXJ0 aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICAgIHUxNiBpbmRleCwgdTY0IGRlc2Nf YWRkciwgdTY0IGRyaXZlcl9hZGRyLAorCQkJICAgICB1NjQgZGV2aWNlX2FkZHIpCit7CisJc3Ry dWN0IHZpcnRpb19wY2lfY29tbW9uX2NmZyBfX2lvbWVtICpjZmcgPSBtZGV2LT5jb21tb247CisK Kwl2cF9pb3dyaXRlMTYoaW5kZXgsICZjZmctPnF1ZXVlX3NlbGVjdCk7CisKKwl2cF9pb3dyaXRl NjRfdHdvcGFydChkZXNjX2FkZHIsICZjZmctPnF1ZXVlX2Rlc2NfbG8sCisJCQkgICAgICZjZmct PnF1ZXVlX2Rlc2NfaGkpOworCXZwX2lvd3JpdGU2NF90d29wYXJ0KGRyaXZlcl9hZGRyLCAmY2Zn LT5xdWV1ZV9hdmFpbF9sbywKKwkJCSAgICAgJmNmZy0+cXVldWVfYXZhaWxfaGkpOworCXZwX2lv d3JpdGU2NF90d29wYXJ0KGRldmljZV9hZGRyLCAmY2ZnLT5xdWV1ZV91c2VkX2xvLAorCQkJICAg ICAmY2ZnLT5xdWV1ZV91c2VkX2hpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9x dWV1ZV9hZGRyZXNzKTsKKworLyoKKyAqIHZwX21vZGVybl9zZXRfcXVldWVfZW5hYmxlIC0gZW5h YmxlIGEgdmlydHF1ZXVlCisgKiBAbWRldjogdGhlIG1vZGVybiB2aXJ0aW8tcGNpIGRldmljZQor ICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKKyAqIEBlbmFibGU6IHdoZXRoZXIgdGhlIHZpcnRx dWV1ZSBpcyBlbmFibGUgb3Igbm90CisgKi8KK3ZvaWQgdnBfbW9kZXJuX3NldF9xdWV1ZV9lbmFi bGUoc3RydWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKKwkJCQl1MTYgaW5kZXgs IGJvb2wgZW5hYmxlKQoreworCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVl dWVfc2VsZWN0KTsKKwl2cF9pb3dyaXRlMTYoZW5hYmxlLCAmbWRldi0+Y29tbW9uLT5xdWV1ZV9l bmFibGUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodnBfbW9kZXJuX3NldF9xdWV1ZV9lbmFibGUp OworCisvKgorICogdnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUgLSBlbmFibGUgYSB2aXJ0cXVl dWUKKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCisgKiBAaW5kZXg6IHRo ZSBxdWV1ZSBpbmRleAorICoKKyAqIFJldHVybnMgd2hldGhlciBhIHZpcnRxdWV1ZSBpcyBlbmFi bGVkIG9yIG5vdAorICovCitib29sIHZwX21vZGVybl9nZXRfcXVldWVfZW5hYmxlKHN0cnVjdCB2 aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkJdTE2IGluZGV4KQoreworCXZwX2lv d3JpdGUxNihpbmRleCwgJm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKKworCXJldHVybiB2 cF9pb3JlYWQxNigmbWRldi0+Y29tbW9uLT5xdWV1ZV9lbmFibGUpOworfQorRVhQT1JUX1NZTUJP TF9HUEwodnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUpOworCisvKgorICogdnBfbW9kZXJuX3Nl dF9xdWV1ZV9zaXplIC0gc2V0IHNpemUgZm9yIGEgdmlydHF1ZXVlCisgKiBAbWRldjogdGhlIG1v ZGVybiB2aXJ0aW8tcGNpIGRldmljZQorICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKKyAqIEBz aXplOiB0aGUgc2l6ZSBvZiB0aGUgdmlydHF1ZXVlCisgKi8KK3ZvaWQgdnBfbW9kZXJuX3NldF9x dWV1ZV9zaXplKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICAg ICB1MTYgaW5kZXgsIHUxNiBzaXplKQoreworCXZwX2lvd3JpdGUxNihpbmRleCwgJm1kZXYtPmNv bW1vbi0+cXVldWVfc2VsZWN0KTsKKwl2cF9pb3dyaXRlMTYoc2l6ZSwgJm1kZXYtPmNvbW1vbi0+ cXVldWVfc2l6ZSk7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21vZGVybl9zZXRfcXVldWVf c2l6ZSk7CisKKy8qCisgKiB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX3NpemUgLSBnZXQgc2l6ZSBmb3Ig YSB2aXJ0cXVldWUKKyAqIEBtZGV2OiB0aGUgbW9kZXJuIHZpcnRpby1wY2kgZGV2aWNlCisgKiBA aW5kZXg6IHRoZSBxdWV1ZSBpbmRleAorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZp cnRxdWV1ZQorICovCit1MTYgdnBfbW9kZXJuX2dldF9xdWV1ZV9zaXplKHN0cnVjdCB2aXJ0aW9f cGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICAgIHUxNiBpbmRleCkKK3sKKwl2cF9pb3dy aXRlMTYoaW5kZXgsICZtZGV2LT5jb21tb24tPnF1ZXVlX3NlbGVjdCk7CisKKwlyZXR1cm4gdnBf aW9yZWFkMTYoJm1kZXYtPmNvbW1vbi0+cXVldWVfc2l6ZSk7CisKK30KK0VYUE9SVF9TWU1CT0xf R1BMKHZwX21vZGVybl9nZXRfcXVldWVfc2l6ZSk7CisKKy8qCisgKiB2cF9tb2Rlcm5fZ2V0X251 bV9xdWV1ZXMgLSBnZXQgdGhlIG51bWJlciBvZiB2aXJ0cXVldWVzCisgKiBAbWRldjogdGhlIG1v ZGVybiB2aXJ0aW8tcGNpIGRldmljZQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB2aXJ0 cXVldWVzCisgKi8KK3UxNiB2cF9tb2Rlcm5fZ2V0X251bV9xdWV1ZXMoc3RydWN0IHZpcnRpb19w Y2lfbW9kZXJuX2RldmljZSAqbWRldikKK3sKKwlyZXR1cm4gdnBfaW9yZWFkMTYoJm1kZXYtPmNv bW1vbi0+bnVtX3F1ZXVlcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2cF9tb2Rlcm5fZ2V0X251 bV9xdWV1ZXMpOworCisvKgorICogdnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmIC0gZ2V0 IG5vdGlmaWNhdGlvbiBvZmZzZXQgZm9yIGEgdmlydHF1ZXVlCisgKiBAbWRldjogdGhlIG1vZGVy biB2aXJ0aW8tcGNpIGRldmljZQorICogQGluZGV4OiB0aGUgcXVldWUgaW5kZXgKKyAqCisgKiBS ZXR1cm5zIHRoZSBub3RpZmljYXRpb24gb2Zmc2V0IGZvciBhIHZpcnRxdWV1ZQorICovCit1MTYg dnBfbW9kZXJuX2dldF9xdWV1ZV9ub3RpZnlfb2ZmKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9k ZXZpY2UgKm1kZXYsCisJCQkJICAgdTE2IGluZGV4KQoreworCXZwX2lvd3JpdGUxNihpbmRleCwg Jm1kZXYtPmNvbW1vbi0+cXVldWVfc2VsZWN0KTsKKworCXJldHVybiB2cF9pb3JlYWQxNigmbWRl di0+Y29tbW9uLT5xdWV1ZV9ub3RpZnlfb2ZmKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZwX21v ZGVybl9nZXRfcXVldWVfbm90aWZ5X29mZik7CisKK01PRFVMRV9WRVJTSU9OKCIwLjEiKTsKK01P RFVMRV9ERVNDUklQVElPTigiTW9kZXJuIFZpcnRpbyBQQ0kgRGV2aWNlIik7CitNT0RVTEVfQVVU SE9SKCJKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9fcGNpX21vZGVybi5oIGIv aW5jbHVkZS9saW51eC92aXJ0aW9fcGNpX21vZGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uZjI2YWNiZWVjOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVk ZS9saW51eC92aXJ0aW9fcGNpX21vZGVybi5oCkBAIC0wLDAgKzEsMTExIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2lmbmRlZiBfTElOVVhfVklSVElPX1BDSV9N T0RFUk5fSAorI2RlZmluZSBfTElOVVhfVklSVElPX1BDSV9NT0RFUk5fSAorCisjaW5jbHVkZSA8 bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX3BjaS5oPgorCitzdHJ1Y3Qgdmly dGlvX3BjaV9tb2Rlcm5fZGV2aWNlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworCXN0 cnVjdCB2aXJ0aW9fcGNpX2NvbW1vbl9jZmcgX19pb21lbSAqY29tbW9uOworCS8qIERldmljZS1z cGVjaWZpYyBkYXRhIChub24tbGVnYWN5IG1vZGUpICAqLworCXZvaWQgX19pb21lbSAqZGV2aWNl OworCS8qIEJhc2Ugb2YgdnEgbm90aWZpY2F0aW9ucyAobm9uLWxlZ2FjeSBtb2RlKS4gKi8KKwl2 b2lkIF9faW9tZW0gKm5vdGlmeV9iYXNlOworCS8qIFdoZXJlIHRvIHJlYWQgYW5kIGNsZWFyIGlu dGVycnVwdCAqLworCXU4IF9faW9tZW0gKmlzcjsKKworCS8qIFNvIHdlIGNhbiBzYW5pdHktY2hl Y2sgYWNjZXNzZXMuICovCisJc2l6ZV90IG5vdGlmeV9sZW47CisJc2l6ZV90IGRldmljZV9sZW47 CisKKwkvKiBDYXBhYmlsaXR5IGZvciB3aGVuIHdlIG5lZWQgdG8gbWFwIG5vdGlmaWNhdGlvbnMg cGVyLXZxLiAqLworCWludCBub3RpZnlfbWFwX2NhcDsKKworCS8qIE11bHRpcGx5IHF1ZXVlX25v dGlmeV9vZmYgYnkgdGhpcyB2YWx1ZS4gKG5vbi1sZWdhY3kgbW9kZSkuICovCisJdTMyIG5vdGlm eV9vZmZzZXRfbXVsdGlwbGllcjsKKworCWludCBtb2Rlcm5fYmFyczsKKworCXN0cnVjdCB2aXJ0 aW9fZGV2aWNlX2lkIGlkOworfTsKKworLyoKKyAqIFR5cGUtc2FmZSB3cmFwcGVycyBmb3IgaW8g YWNjZXNzZXMuCisgKiBVc2UgdGhlc2UgdG8gZW5mb3JjZSBhdCBjb21waWxlIHRpbWUgdGhlIGZv bGxvd2luZyBzcGVjIHJlcXVpcmVtZW50OgorICoKKyAqIFRoZSBkcml2ZXIgTVVTVCBhY2Nlc3Mg ZWFjaCBmaWVsZCB1c2luZyB0aGUg4oCcbmF0dXJhbOKAnSBhY2Nlc3MKKyAqIG1ldGhvZCwgaS5l LiAzMi1iaXQgYWNjZXNzZXMgZm9yIDMyLWJpdCBmaWVsZHMsIDE2LWJpdCBhY2Nlc3NlcworICog Zm9yIDE2LWJpdCBmaWVsZHMgYW5kIDgtYml0IGFjY2Vzc2VzIGZvciA4LWJpdCBmaWVsZHMuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdTggdnBfaW9yZWFkOChjb25zdCB1OCBfX2lvbWVtICphZGRyKQor eworCXJldHVybiBpb3JlYWQ4KGFkZHIpOworfQorc3RhdGljIGlubGluZSB1MTYgdnBfaW9yZWFk MTYgKGNvbnN0IF9fbGUxNiBfX2lvbWVtICphZGRyKQoreworCXJldHVybiBpb3JlYWQxNihhZGRy KTsKK30KKworc3RhdGljIGlubGluZSB1MzIgdnBfaW9yZWFkMzIoY29uc3QgX19sZTMyIF9faW9t ZW0gKmFkZHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgdnBfaW93cml0ZTgodTggdmFsdWUsIHU4IF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0 ZTgodmFsdWUsIGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnBfaW93cml0ZTE2KHUx NiB2YWx1ZSwgX19sZTE2IF9faW9tZW0gKmFkZHIpCit7CisJaW93cml0ZTE2KHZhbHVlLCBhZGRy KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwX2lvd3JpdGUzMih1MzIgdmFsdWUsIF9fbGUz MiBfX2lvbWVtICphZGRyKQoreworCWlvd3JpdGUzMih2YWx1ZSwgYWRkcik7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCB2cF9pb3dyaXRlNjRfdHdvcGFydCh1NjQgdmFsLAorCQkJCQlfX2xlMzIg X19pb21lbSAqbG8sCisJCQkJCV9fbGUzMiBfX2lvbWVtICpoaSkKK3sKKwl2cF9pb3dyaXRlMzIo KHUzMil2YWwsIGxvKTsKKwl2cF9pb3dyaXRlMzIodmFsID4+IDMyLCBoaSk7Cit9CisKK3U2NCB2 cF9tb2Rlcm5fZ2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1k ZXYpOwordm9pZCB2cF9tb2Rlcm5fc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVy bl9kZXZpY2UgKm1kZXYsCisJCSAgICAgdTY0IGZlYXR1cmVzKTsKK3UzMiB2cF9tb2Rlcm5fZ2Vu ZXJhdGlvbihzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2KTsKK3U4IHZwX21v ZGVybl9nZXRfc3RhdHVzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYpOwor dm9pZCB2cF9tb2Rlcm5fc2V0X3N0YXR1cyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNl ICptZGV2LAorCQkgICB1OCBzdGF0dXMpOwordTE2IHZwX21vZGVybl9xdWV1ZV92ZWN0b3Ioc3Ry dWN0IHZpcnRpb19wY2lfbW9kZXJuX2RldmljZSAqbWRldiwKKwkJCSAgIHUxNiBpZHgsIHUxNiB2 ZWN0b3IpOwordTE2IHZwX21vZGVybl9jb25maWdfdmVjdG9yKHN0cnVjdCB2aXJ0aW9fcGNpX21v ZGVybl9kZXZpY2UgKm1kZXYsCisJCSAgICAgdTE2IHZlY3Rvcik7Cit2b2lkIHZwX21vZGVybl9x dWV1ZV9hZGRyZXNzKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkg ICAgIHUxNiBpbmRleCwgdTY0IGRlc2NfYWRkciwgdTY0IGRyaXZlcl9hZGRyLAorCQkJICAgICB1 NjQgZGV2aWNlX2FkZHIpOwordm9pZCB2cF9tb2Rlcm5fc2V0X3F1ZXVlX2VuYWJsZShzdHJ1Y3Qg dmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2LAorCQkJCXUxNiBpZHgsIGJvb2wgZW5hYmxl KTsKK2Jvb2wgdnBfbW9kZXJuX2dldF9xdWV1ZV9lbmFibGUoc3RydWN0IHZpcnRpb19wY2lfbW9k ZXJuX2RldmljZSAqbWRldiwKKwkJCQl1MTYgaWR4KTsKK3ZvaWQgdnBfbW9kZXJuX3NldF9xdWV1 ZV9zaXplKHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICAgICB1 MTYgaWR4LCB1MTYgc2l6ZSk7Cit1MTYgdnBfbW9kZXJuX2dldF9xdWV1ZV9zaXplKHN0cnVjdCB2 aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYsCisJCQkgICAgIHUxNiBpZHgpOwordTE2IHZw X21vZGVybl9nZXRfbnVtX3F1ZXVlcyhzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICpt ZGV2KTsKK3UxNiB2cF9tb2Rlcm5fZ2V0X3F1ZXVlX25vdGlmeV9vZmYoc3RydWN0IHZpcnRpb19w Y2lfbW9kZXJuX2RldmljZSAqbWRldiwKKwkJCQkgICB1MTYgaWR4KTsKK3ZvaWQgX19pb21lbSAq dnBfbW9kZXJuX21hcF9jYXBhYmlsaXR5KHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2Ug Km1kZXYsIGludCBvZmYsCisJCQkJICAgICAgIHNpemVfdCBtaW5sZW4sCisJCQkJICAgICAgIHUz MiBhbGlnbiwKKwkJCQkgICAgICAgdTMyIHN0YXJ0LCB1MzIgc2l6ZSwKKwkJCQkgICAgICAgc2l6 ZV90ICpsZW4pOworaW50IHZwX21vZGVybl9wcm9iZShzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5f ZGV2aWNlICptZGV2KTsKK3ZvaWQgdnBfbW9kZXJuX3JlbW92ZShzdHJ1Y3QgdmlydGlvX3BjaV9t b2Rlcm5fZGV2aWNlICptZGV2KTsKKyNlbmRpZgotLSAKMi4yNS4xCgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBs aXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlz dHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u