From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dave Gordon Subject: [PATCH 6/9 v6] drm/i915: Implementation of GuC submission client Date: Wed, 12 Aug 2015 15:43:41 +0100 Message-ID: <1439390624-21724-7-git-send-email-david.s.gordon@intel.com> References: <1439390624-21724-1-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 05C606EB86 for ; Wed, 12 Aug 2015 07:44:00 -0700 (PDT) In-Reply-To: <1439390624-21724-1-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QSBHdUMgY2xpZW50IGhhcyBpdHMgb3duIGRvb3JiZWxsIGFuZCB3b3JrcXVldWUuIEl0IG1haW50 YWlucyB0aGUKZG9vcmJlbGwgY2FjaGUgbGluZSwgcHJvY2VzcyBkZXNjcmlwdGlvbiBvYmplY3Qg YW5kIHdvcmsgcXVldWUgaXRlbS4KCkEgZGVmYXVsdCBndWNfY2xpZW50IGlzIGNyZWF0ZWQgZm9y IHRoZSBpOTE1IGRyaXZlciB0byB1c2UgZm9yCm5vcm1hbC1wcmlvcml0eSBpbi1vcmRlciBzdWJt aXNzaW9uLgoKTm90ZSB0aGF0IHRoZSBjcmVhdGVkIGNsaWVudCBpcyBub3QgeWV0IHJlYWR5IGZv ciB1c2U7IGRvb3JiZWxsCmFsbG9jYXRpb24gd2lsbCBmYWlsIGFzIHdlIGhhdmVuJ3QgeWV0IGxp bmtlZCB0aGUgR3VDJ3MgY29udGV4dApkZXNjcmlwdG9yIHRvIHRoZSBkZWZhdWx0IGNvbnRleHRz IGZvciBlYWNoIHJpbmcgKHNlZSBsYXRlciBwYXRjaCkuCgp2MjoKICAgIERlZmVyIGFkZGluZyBz dHJ1Y3R1cmUgbWVtYmVycyB1bnRpbCBuZWVkZWQgW0NocmlzIFdpbHNvbl0KICAgIFJhdGlvbmFs aXNlIHR5cGUgZGVjbGFyYXRpb25zIFtDaHJpcyBXaWxzb25dCgp2NToKICAgIEFkZCBHdUMgcGVy LWVuZ2luZSBzdWJtaXNzaW9uICYgc2Vxbm8gc3RhdGlzdGljcy4KICAgIE1vdmUgd3EgbG9ja2lu ZyB0byBlbmNvbXBhc3MgYm90aCBnZXRfc3BhY2UoKSBhbmQgYWRkX2l0ZW0oKS4KICAgIFRha2Ug Zm9yY2V3YWtlIGxvY2sgaW4gaG9zdDJndWNfYWN0aW9uKCkgW1RvbSBPJ1JvdXJrZV0KCnY2Ogog ICAgRml4IEd1QyBkb29yYmVsbCBjYWNoZWxpbmUgc2VsZWN0aW9uIGNvZGUgKHRoZQogICAgICAg IGNhY2hlbGluZS13aXRoaW4tcGFnZSBjYWxjdWxhdGlvbiB3YXMgd3JvbmcpLgogICAgUmVuYW1l IEd1QyBwcmlvcml0aWVzIHRvIG1ha2UgdGhlbSBjbG9zZXIgdG8gdGhlIG5hbWVzIHVzZWQgaW4K ICAgICAgICB0aGUgR3VDIGZpcm13YXJlIHNvdXJjZSwgbWF0Y2hpbmcgd2hhdCB0aGUgYXV0b2dl bmVyYXRlZAogICAgICAgIHZlcnNpb25zIHdpbGwgKHByb2JhYmx5KSBiZS4KICAgIEFkZCBwZXIt cmluZyBzdGF0aXN0aWNzIHRvIGNsaWVudC4KCklzc3VlOiBWSVotNDg4NApTaWduZWQtb2ZmLWJ5 OiBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogRGF2ZSBHb3Jkb24g PGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2d1Y19zdWJtaXNzaW9uLmMgfCA2NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oICAgICAgICAgICB8ICA0NiArKwogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaCAgICAgIHwgICA2ICstCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMgICAgfCAgMTAgKwogNCBmaWxlcyBjaGFuZ2Vk LCA3MjUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKaW5kZXggNjY5Yzg4OS4uMzM1MmI4NSAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwpAQCAtMjcsNiArMjcsNTI5IEBA CiAjaW5jbHVkZSAiaW50ZWxfZ3VjLmgiCiAKIC8qKgorICogRE9DOiBHdUMgQ2xpZW50CisgKgor ICogaTkxNV9ndWNfY2xpZW50OgorICogV2UgdXNlIHRoZSB0ZXJtIGNsaWVudCB0byBhdm9pZCBj b25mdXNpb24gd2l0aCBjb250ZXh0cy4gQSBpOTE1X2d1Y19jbGllbnQgaXMKKyAqIGVxdWl2YWxl bnQgdG8gR3VDIG9iamVjdCBndWNfY29udGV4dF9kZXNjLiBUaGlzIGNvbnRleHQgZGVzY3JpcHRv ciBpcworICogYWxsb2NhdGVkIGZyb20gYSBwb29sIG9mIDEwMjQgZW50cmllcy4gS2VybmVsIGRy aXZlciB3aWxsIGFsbG9jYXRlIGRvb3JiZWxsCisgKiBhbmQgd29ya3F1ZXVlIGZvciBpdC4gQWxz byB0aGUgcHJvY2VzcyBkZXNjcmlwdG9yIChndWNfcHJvY2Vzc19kZXNjKSwgd2hpY2gKKyAqIGlz IG1hcHBlZCB0byBjbGllbnQgc3BhY2UuIFNvIHRoZSBjbGllbnQgY2FuIHdyaXRlIFdvcmsgSXRl bSB0aGVuIHJpbmcgdGhlCisgKiBkb29yYmVsbC4KKyAqCisgKiBUbyBzaW1wbGlmeSB0aGUgaW1w bGVtZW50YXRpb24sIHdlIGFsbG9jYXRlIG9uZSBnZW0gb2JqZWN0IHRoYXQgY29udGFpbnMgYWxs CisgKiBwYWdlcyBmb3IgZG9vcmJlbGwsIHByb2Nlc3MgZGVzY3JpcHRvciBhbmQgd29ya3F1ZXVl LgorICoKKyAqIFRoZSBTY3JhdGNoIHJlZ2lzdGVyczoKKyAqIFRoZXJlIGFyZSAxNiBNTUlPLWJh c2VkIHJlZ2lzdGVycyBzdGFydCBmcm9tIDB4QzE4MC4gVGhlIGtlcm5lbCBkcml2ZXIgd3JpdGVz CisgKiBhIHZhbHVlIHRvIHRoZSBhY3Rpb24gcmVnaXN0ZXIgKFNPRlRfU0NSQVRDSF8wKSBhbG9u ZyB3aXRoIGFueSBkYXRhLiBJdCB0aGVuCisgKiB0cmlnZ2VycyBhbiBpbnRlcnJ1cHQgb24gdGhl IEd1QyB2aWEgYW5vdGhlciByZWdpc3RlciB3cml0ZSAoMHhDNEM4KS4KKyAqIEZpcm13YXJlIHdy aXRlcyBhIHN1Y2Nlc3MvZmFpbCBjb2RlIGJhY2sgdG8gdGhlIGFjdGlvbiByZWdpc3RlciBhZnRl cgorICogcHJvY2Vzc2VzIHRoZSByZXF1ZXN0LiBUaGUga2VybmVsIGRyaXZlciBwb2xscyB3YWl0 aW5nIGZvciB0aGlzIHVwZGF0ZSBhbmQKKyAqIHRoZW4gcHJvY2VlZHMuCisgKiBTZWUgaG9zdDJn dWNfYWN0aW9uKCkKKyAqCisgKiBEb29yYmVsbHM6CisgKiBEb29yYmVsbHMgYXJlIGludGVycnVw dHMgdG8gdUtlcm5lbC4gQSBkb29yYmVsbCBpcyBhIHNpbmdsZSBjYWNoZSBsaW5lIChRVykKKyAq IG1hcHBlZCBpbnRvIHByb2Nlc3Mgc3BhY2UuCisgKgorICogV29yayBJdGVtczoKKyAqIFRoZXJl IGFyZSBzZXZlcmFsIHR5cGVzIG9mIHdvcmsgaXRlbXMgdGhhdCB0aGUgaG9zdCBtYXkgcGxhY2Ug aW50byBhCisgKiB3b3JrcXVldWUsIGVhY2ggd2l0aCBpdHMgb3duIHJlcXVpcmVtZW50cyBhbmQg bGltaXRhdGlvbnMuIEN1cnJlbnRseSBvbmx5CisgKiBXUV9UWVBFX0lOT1JERVIgaXMgbmVlZGVk IHRvIHN1cHBvcnQgbGVnYWN5IHN1Ym1pc3Npb24gdmlhIEd1Qywgd2hpY2gKKyAqIHJlcHJlc2Vu dHMgaW4tb3JkZXIgcXVldWUuIFRoZSBrZXJuZWwgZHJpdmVyIHBhY2tzIHJpbmcgdGFpbCBwb2lu dGVyIGFuZCBhbgorICogRUxTUCBjb250ZXh0IGRlc2NyaXB0b3IgZHdvcmQgaW50byBXb3JrIEl0 ZW0uCisgKiBTZWUgZ3VjX2FkZF93b3JrcXVldWVfaXRlbSgpCisgKgorICovCisKKy8qCisgKiBS ZWFkIEd1QyBjb21tYW5kL3N0YXR1cyByZWdpc3RlciAoU09GVF9TQ1JBVENIXzApCisgKiBSZXR1 cm4gdHJ1ZSBpZiBpdCBjb250YWlucyBhIHJlc3BvbnNlIHJhdGhlciB0aGFuIGEgY29tbWFuZAor ICovCitzdGF0aWMgaW5saW5lIGJvb2wgaG9zdDJndWNfYWN0aW9uX3Jlc3BvbnNlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQkJICAgIHUzMiAqc3RhdHVzKQoreworCXUz MiB2YWwgPSBJOTE1X1JFQUQoU09GVF9TQ1JBVENIKDApKTsKKwkqc3RhdHVzID0gdmFsOworCXJl dHVybiBHVUMySE9TVF9JU19SRVNQT05TRSh2YWwpOworfQorCitzdGF0aWMgaW50IGhvc3QyZ3Vj X2FjdGlvbihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiAqZGF0YSwgdTMyIGxlbikKK3sKKwlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXUz MiBzdGF0dXM7CisJaW50IGk7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKGxlbiA8IDEgfHwg bGVuID4gMTUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWludGVsX3VuY29yZV9mb3JjZXdha2Vf Z2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKwlzcGluX2xvY2soJmRldl9wcml2LT5ndWMu aG9zdDJndWNfbG9jayk7CisKKwlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9jb3VudCArPSAxOworCWRl dl9wcml2LT5ndWMuYWN0aW9uX2NtZCA9IGRhdGFbMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVu OyBpKyspCisJCUk5MTVfV1JJVEUoU09GVF9TQ1JBVENIKGkpLCBkYXRhW2ldKTsKKworCVBPU1RJ TkdfUkVBRChTT0ZUX1NDUkFUQ0goaSAtIDEpKTsKKworCUk5MTVfV1JJVEUoSE9TVDJHVUNfSU5U RVJSVVBULCBIT1NUMkdVQ19UUklHR0VSKTsKKworCS8qIE5vIEhPU1QyR1VDIGNvbW1hbmQgc2hv dWxkIHRha2UgbG9uZ2VyIHRoYW4gMTBtcyAqLworCXJldCA9IHdhaXRfZm9yX2F0b21pYyhob3N0 Mmd1Y19hY3Rpb25fcmVzcG9uc2UoZGV2X3ByaXYsICZzdGF0dXMpLCAxMCk7CisJaWYgKHN0YXR1 cyAhPSBHVUMySE9TVF9TVEFUVVNfU1VDQ0VTUykgeworCQkvKgorCQkgKiBFaXRoZXIgdGhlIEd1 QyBleHBsaWNpdGx5IHJldHVybmVkIGFuIGVycm9yICh3aGljaAorCQkgKiB3ZSBjb252ZXJ0IHRv IC1FSU8gaGVyZSkgb3Igbm8gcmVzcG9uc2UgYXQgYWxsIHdhcworCQkgKiByZWNlaXZlZCB3aXRo aW4gdGhlIHRpbWVvdXQgbGltaXQgKC1FVElNRURPVVQpCisJCSAqLworCQlpZiAocmV0ICE9IC1F VElNRURPVVQpCisJCQlyZXQgPSAtRUlPOworCisJCURSTV9FUlJPUigiR1VDOiBob3N0Mmd1YyBh Y3Rpb24gMHglWCBmYWlsZWQuIHJldD0lZCAiCisJCQkJInN0YXR1cz0weCUwOFggcmVzcG9uc2U9 MHglMDhYXG4iLAorCQkJCWRhdGFbMF0sIHJldCwgc3RhdHVzLAorCQkJCUk5MTVfUkVBRChTT0ZU X1NDUkFUQ0goMTUpKSk7CisKKwkJZGV2X3ByaXYtPmd1Yy5hY3Rpb25fZmFpbCArPSAxOworCQlk ZXZfcHJpdi0+Z3VjLmFjdGlvbl9lcnIgPSByZXQ7CisJfQorCWRldl9wcml2LT5ndWMuYWN0aW9u X3N0YXR1cyA9IHN0YXR1czsKKworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Z3VjLmhvc3QyZ3Vj X2xvY2spOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0Vf QUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUZWxsIHRoZSBHdUMgdG8gYWxsb2Nh dGUgb3IgZGVhbGxvY2F0ZSBhIHNwZWNpZmljIGRvb3JiZWxsCisgKi8KKworc3RhdGljIGludCBo b3N0Mmd1Y19hbGxvY2F0ZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCisJCQkJICAg ICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQoreworCXUzMiBkYXRhWzJdOworCisJ ZGF0YVswXSA9IEhPU1QyR1VDX0FDVElPTl9BTExPQ0FURV9ET09SQkVMTDsKKwlkYXRhWzFdID0g Y2xpZW50LT5jdHhfaW5kZXg7CisKKwlyZXR1cm4gaG9zdDJndWNfYWN0aW9uKGd1YywgZGF0YSwg Mik7Cit9CisKK3N0YXRpYyBpbnQgaG9zdDJndWNfcmVsZWFzZV9kb29yYmVsbChzdHJ1Y3QgaW50 ZWxfZ3VjICpndWMsCisJCQkJICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCit7 CisJdTMyIGRhdGFbMl07CisKKwlkYXRhWzBdID0gSE9TVDJHVUNfQUNUSU9OX0RFQUxMT0NBVEVf RE9PUkJFTEw7CisJZGF0YVsxXSA9IGNsaWVudC0+Y3R4X2luZGV4OworCisJcmV0dXJuIGhvc3Qy Z3VjX2FjdGlvbihndWMsIGRhdGEsIDIpOworfQorCisvKgorICogSW5pdGlhbGlzZSwgdXBkYXRl LCBvciBjbGVhciBkb29yYmVsbCBkYXRhIHNoYXJlZCB3aXRoIHRoZSBHdUMKKyAqCisgKiBUaGVz ZSBmdW5jdGlvbnMgbW9kaWZ5IHNoYXJlZCBkYXRhIGFuZCBzbyBuZWVkIGFjY2VzcyB0byB0aGUg bWFwcGVkCisgKiBjbGllbnQgb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBwYWdlIGJlaW5nIHVz ZWQgZm9yIHRoZSBkb29yYmVsbAorICovCisKK3N0YXRpYyB2b2lkIGd1Y19pbml0X2Rvb3JiZWxs KHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQg KmNsaWVudCkKK3sKKwlzdHJ1Y3QgZ3VjX2Rvb3JiZWxsX2luZm8gKmRvb3JiZWxsOworCXZvaWQg KmJhc2U7CisKKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGNs aWVudC0+Y2xpZW50X29iaiwgMCkpOworCWRvb3JiZWxsID0gYmFzZSArIGNsaWVudC0+ZG9vcmJl bGxfb2Zmc2V0OworCisJZG9vcmJlbGwtPmRiX3N0YXR1cyA9IDE7CisJZG9vcmJlbGwtPmNvb2tp ZSA9IDA7CisKKwlrdW5tYXBfYXRvbWljKGJhc2UpOworfQorCitzdGF0aWMgaW50IGd1Y19yaW5n X2Rvb3JiZWxsKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmdjKQoreworCXN0cnVjdCBndWNfcHJv Y2Vzc19kZXNjICpkZXNjOworCXVuaW9uIGd1Y19kb29yYmVsbF9xdyBkYl9jbXAsIGRiX2V4Yywg ZGJfcmV0OworCXVuaW9uIGd1Y19kb29yYmVsbF9xdyAqZGI7CisJdm9pZCAqYmFzZTsKKwlpbnQg YXR0ZW1wdCA9IDIsIHJldCA9IC1FQUdBSU47CisKKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9n ZW1fb2JqZWN0X2dldF9wYWdlKGdjLT5jbGllbnRfb2JqLCAwKSk7CisJZGVzYyA9IGJhc2UgKyBn Yy0+cHJvY19kZXNjX29mZnNldDsKKworCS8qIFVwZGF0ZSB0aGUgdGFpbCBzbyBpdCBpcyB2aXNp YmxlIHRvIEd1QyAqLworCWRlc2MtPnRhaWwgPSBnYy0+d3FfdGFpbDsKKworCS8qIGN1cnJlbnQg Y29va2llICovCisJZGJfY21wLmRiX3N0YXR1cyA9IEdVQ19ET09SQkVMTF9FTkFCTEVEOworCWRi X2NtcC5jb29raWUgPSBnYy0+Y29va2llOworCisJLyogY29va2llIHRvIGJlIHVwZGF0ZWQgKi8K KwlkYl9leGMuZGJfc3RhdHVzID0gR1VDX0RPT1JCRUxMX0VOQUJMRUQ7CisJZGJfZXhjLmNvb2tp ZSA9IGdjLT5jb29raWUgKyAxOworCWlmIChkYl9leGMuY29va2llID09IDApCisJCWRiX2V4Yy5j b29raWUgPSAxOworCisJLyogcG9pbnRlciBvZiBjdXJyZW50IGRvb3JiZWxsIGNhY2hlbGluZSAq LworCWRiID0gYmFzZSArIGdjLT5kb29yYmVsbF9vZmZzZXQ7CisKKwl3aGlsZSAoYXR0ZW1wdC0t KSB7CisJCS8qIGxldHMgcmluZyB0aGUgZG9vcmJlbGwgKi8KKwkJZGJfcmV0LnZhbHVlX3F3ID0g YXRvbWljNjRfY21weGNoZygoYXRvbWljNjRfdCAqKWRiLAorCQkJZGJfY21wLnZhbHVlX3F3LCBk Yl9leGMudmFsdWVfcXcpOworCisJCS8qIGlmIHRoZSBleGNoYW5nZSB3YXMgc3VjY2Vzc2Z1bGx5 IGV4ZWN1dGVkICovCisJCWlmIChkYl9yZXQudmFsdWVfcXcgPT0gZGJfY21wLnZhbHVlX3F3KSB7 CisJCQkvKiBkYiB3YXMgc3VjY2Vzc2Z1bGx5IHJ1bmcgKi8KKwkJCWdjLT5jb29raWUgPSBkYl9l eGMuY29va2llOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogWFhYOiBkb29y YmVsbCB3YXMgbG9zdCBhbmQgbmVlZCB0byBhY3F1aXJlIGl0IGFnYWluICovCisJCWlmIChkYl9y ZXQuZGJfc3RhdHVzID09IEdVQ19ET09SQkVMTF9ESVNBQkxFRCkKKwkJCWJyZWFrOworCisJCURS TV9FUlJPUigiQ29va2llIG1pc21hdGNoLiBFeHBlY3RlZCAlZCwgcmV0dXJuZWQgJWRcbiIsCisJ CQkgIGRiX2NtcC5jb29raWUsIGRiX3JldC5jb29raWUpOworCisJCS8qIHVwZGF0ZSB0aGUgY29v a2llIHRvIG5ld2x5IHJlYWQgY29va2llIGZyb20gR3VDICovCisJCWRiX2NtcC5jb29raWUgPSBk Yl9yZXQuY29va2llOworCQlkYl9leGMuY29va2llID0gZGJfcmV0LmNvb2tpZSArIDE7CisJCWlm IChkYl9leGMuY29va2llID09IDApCisJCQlkYl9leGMuY29va2llID0gMTsKKwl9CisKKwlrdW5t YXBfYXRvbWljKGJhc2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGd1Y19kaXNh YmxlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKKwkJCQkgc3RydWN0IGk5MTVfZ3Vj X2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGd1Y190b19pOTE1KGd1Yyk7CisJc3RydWN0IGd1Y19kb29yYmVsbF9pbmZvICpkb29yYmVsbDsK Kwl2b2lkICpiYXNlOworCWludCBkcmJyZWcgPSBHRU44X0RSQlJFR0woY2xpZW50LT5kb29yYmVs bF9pZCk7CisJaW50IHZhbHVlOworCisJYmFzZSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29iamVj dF9nZXRfcGFnZShjbGllbnQtPmNsaWVudF9vYmosIDApKTsKKwlkb29yYmVsbCA9IGJhc2UgKyBj bGllbnQtPmRvb3JiZWxsX29mZnNldDsKKworCWRvb3JiZWxsLT5kYl9zdGF0dXMgPSAwOworCisJ a3VubWFwX2F0b21pYyhiYXNlKTsKKworCUk5MTVfV1JJVEUoZHJicmVnLCBJOTE1X1JFQUQoZHJi cmVnKSAmIH5HRU44X0RSQl9WQUxJRCk7CisKKwl2YWx1ZSA9IEk5MTVfUkVBRChkcmJyZWcpOwor CVdBUk5fT04oKHZhbHVlICYgR0VOOF9EUkJfVkFMSUQpICE9IDApOworCisJSTkxNV9XUklURShH RU44X0RSQlJFR1UoY2xpZW50LT5kb29yYmVsbF9pZCksIDApOworCUk5MTVfV1JJVEUoZHJicmVn LCAwKTsKKworCS8qIFhYWDogd2FpdCBmb3IgYW55IGludGVycnVwdHMgKi8KKwkvKiBYWFg6IHdh aXQgZm9yIHdvcmtxdWV1ZSB0byBkcmFpbiAqLworfQorCisvKgorICogU2VsZWN0LCBhc3NpZ24g YW5kIHJlbGFzZSBkb29yYmVsbCBjYWNoZWxpbmVzCisgKgorICogVGhlc2UgZnVuY3Rpb25zIHRy YWNrIHdoaWNoIGRvb3JiZWxsIGNhY2hlbGluZXMgYXJlIGluIHVzZS4KKyAqIFRoZSBkYXRhIHRo ZXkgbWFuaXB1bGF0ZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGhvc3QyZ3VjIGxvY2suCisgKi8KKwor c3RhdGljIHVpbnQzMl90IHNlbGVjdF9kb29yYmVsbF9jYWNoZWxpbmUoc3RydWN0IGludGVsX2d1 YyAqZ3VjKQoreworCWNvbnN0IHVpbnQzMl90IGNhY2hlbGluZV9zaXplID0gY2FjaGVfbGluZV9z aXplKCk7CisJdWludDMyX3Qgb2Zmc2V0OworCisJc3Bpbl9sb2NrKCZndWMtPmhvc3QyZ3VjX2xv Y2spOworCisJLyogRG9vcmJlbGwgdXNlcyBhIHNpbmdsZSBjYWNoZSBsaW5lIHdpdGhpbiBhIHBh Z2UgKi8KKwlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShndWMtPmRiX2NhY2hlbGluZSk7CisKKwkv KiBNb3ZpbmcgdG8gbmV4dCBjYWNoZSBsaW5lIHRvIHJlZHVjZSBjb250ZW50aW9uICovCisJZ3Vj LT5kYl9jYWNoZWxpbmUgKz0gY2FjaGVsaW5lX3NpemU7CisKKwlzcGluX3VubG9jaygmZ3VjLT5o b3N0Mmd1Y19sb2NrKTsKKworCURSTV9ERUJVR19EUklWRVIoInNlbGVjdGVkIGRvb3JiZWxsIGNh Y2hlbGluZSAweCV4LCBuZXh0IDB4JXgsIGxpbmVzaXplICV1XG4iLAorCQkJb2Zmc2V0LCBndWMt PmRiX2NhY2hlbGluZSwgY2FjaGVsaW5lX3NpemUpOworCisJcmV0dXJuIG9mZnNldDsKK30KKwor c3RhdGljIHVpbnQxNl90IGFzc2lnbl9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVp bnQzMl90IHByaW9yaXR5KQoreworCS8qCisJICogVGhlIGJpdG1hcCBpcyBzcGxpdCBpbnRvIHR3 byBoYWx2ZXM7IHRoZSBmaXJzdCBoYWxmIGlzIHVzZWQgZm9yCisJICogbm9ybWFsIHByaW9yaXR5 IGNvbnRleHRzLCB0aGUgc2Vjb25kIGhhbGYgZm9yIGhpZ2gtcHJpb3JpdHkgb25lcy4KKwkgKiBO b3RlIHRoYXQgbG9naWNhbGx5IGhpZ2hlciBwcmlvcml0aWVzIGFyZSBudW1lcmljYWxseSBsZXNz IHRoYW4KKwkgKiBub3JtYWwgb25lcywgc28gdGhlIHRlc3QgYmVsb3cgbWVhbnMgImlzIGl0IGhp Z2gtcHJpb3JpdHk/IgorCSAqLworCWNvbnN0IGJvb2wgaGlfcHJpID0gKHByaW9yaXR5IDw9IEdV Q19DVFhfUFJJT1JJVFlfSElHSCk7CisJY29uc3QgdWludDE2X3QgaGFsZiA9IEdVQ19NQVhfRE9P UkJFTExTIC8gMjsKKwljb25zdCB1aW50MTZfdCBzdGFydCA9IGhpX3ByaSA/IGhhbGYgOiAwOwor CWNvbnN0IHVpbnQxNl90IGVuZCA9IHN0YXJ0ICsgaGFsZjsKKwl1aW50MTZfdCBpZDsKKworCXNw aW5fbG9jaygmZ3VjLT5ob3N0Mmd1Y19sb2NrKTsKKwlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChn dWMtPmRvb3JiZWxsX2JpdG1hcCwgZW5kLCBzdGFydCk7CisJaWYgKGlkID09IGVuZCkKKwkJaWQg PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRDsKKwllbHNlCisJCWJpdG1hcF9zZXQoZ3VjLT5kb29y YmVsbF9iaXRtYXAsIGlkLCAxKTsKKwlzcGluX3VubG9jaygmZ3VjLT5ob3N0Mmd1Y19sb2NrKTsK KworCURSTV9ERUJVR19EUklWRVIoImFzc2lnbmVkICVzIHByaW9yaXR5IGRvb3JiZWxsIGlkIDB4 JXhcbiIsCisJCQloaV9wcmkgPyAiaGlnaCIgOiAibm9ybWFsIiwgaWQpOworCisJcmV0dXJuIGlk OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1 YywgdWludDE2X3QgaWQpCit7CisJc3Bpbl9sb2NrKCZndWMtPmhvc3QyZ3VjX2xvY2spOworCWJp dG1hcF9jbGVhcihndWMtPmRvb3JiZWxsX2JpdG1hcCwgaWQsIDEpOworCXNwaW5fdW5sb2NrKCZn dWMtPmhvc3QyZ3VjX2xvY2spOworfQorCisvKgorICogSW5pdGlhbGlzZSB0aGUgcHJvY2VzcyBk ZXNjcmlwdG9yIHNoYXJlZCB3aXRoIHRoZSBHdUMgZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lk IGd1Y19pbml0X3Byb2NfZGVzYyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCisJCQkgICAgICAgc3Ry dWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBndWNfcHJvY2Vzc19kZXNj ICpkZXNjOworCXZvaWQgKmJhc2U7CisKKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2Jq ZWN0X2dldF9wYWdlKGNsaWVudC0+Y2xpZW50X29iaiwgMCkpOworCWRlc2MgPSBiYXNlICsgY2xp ZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0OworCisJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykp OworCisJLyoKKwkgKiBYWFg6IHBEb29yYmVsbCBhbmQgV1FWQmFzZUFkZHJlc3MgYXJlIHBvaW50 ZXJzIGluIHByb2Nlc3MgYWRkcmVzcworCSAqIHNwYWNlIGZvciByaW5nMyBjbGllbnRzIChzZXQg dGhlbSBhcyBpbiBtbWFwX2lvY3RsKSBvciBrZXJuZWwKKwkgKiBzcGFjZSBmb3Iga2VybmVsIGNs aWVudHMgKG1hcCBvbiBkZW1hbmQgaW5zdGVhZD8gTWF5IG1ha2UgZGVidWcKKwkgKiBlYXNpZXIg dG8gaGF2ZSBpdCBtYXBwZWQpLgorCSAqLworCWRlc2MtPndxX2Jhc2VfYWRkciA9IDA7CisJZGVz Yy0+ZGJfYmFzZV9hZGRyID0gMDsKKworCWRlc2MtPmNvbnRleHRfaWQgPSBjbGllbnQtPmN0eF9p bmRleDsKKwlkZXNjLT53cV9zaXplX2J5dGVzID0gY2xpZW50LT53cV9zaXplOworCWRlc2MtPndx X3N0YXR1cyA9IFdRX1NUQVRVU19BQ1RJVkU7CisJZGVzYy0+cHJpb3JpdHkgPSBjbGllbnQtPnBy aW9yaXR5OworCisJa3VubWFwX2F0b21pYyhiYXNlKTsKK30KKworLyoKKyAqIEluaXRpYWxpc2Uv Y2xlYXIgdGhlIGNvbnRleHQgZGVzY3JpcHRvciBzaGFyZWQgd2l0aCB0aGUgR3VDIGZpcm13YXJl LgorICoKKyAqIFRoaXMgZGVzY3JpcHRvciB0ZWxscyB0aGUgR3VDIHdoZXJlIChpbiBHR1RUIHNw YWNlKSB0byBmaW5kIHRoZSBpbXBvcnRhbnQKKyAqIGRhdGEgc3RydWN0dXJlcyByZWxhdGluZyB0 byB0aGlzIGNsaWVudCAoZG9vcmJlbGwsIHByb2Nlc3MgZGVzY3JpcHRvciwKKyAqIHdyaXRlIHF1 ZXVlLCBldGMpLgorICovCisKK3N0YXRpYyB2b2lkIGd1Y19pbml0X2N0eF9kZXNjKHN0cnVjdCBp bnRlbF9ndWMgKmd1YywKKwkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkK K3sKKwlzdHJ1Y3QgZ3VjX2NvbnRleHRfZGVzYyBkZXNjOworCXN0cnVjdCBzZ190YWJsZSAqc2c7 CisKKwltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7CisKKwlkZXNjLmF0dHJpYnV0ZSA9 IEdVQ19DVFhfREVTQ19BVFRSX0FDVElWRSB8IEdVQ19DVFhfREVTQ19BVFRSX0tFUk5FTDsKKwlk ZXNjLmNvbnRleHRfaWQgPSBjbGllbnQtPmN0eF9pbmRleDsKKwlkZXNjLnByaW9yaXR5ID0gY2xp ZW50LT5wcmlvcml0eTsKKwlkZXNjLmVuZ2luZXNfdXNlZCA9ICgxIDw8IFJDUykgfCAoMSA8PCBW Q1MpIHwgKDEgPDwgQkNTKSB8CisJCQkgICAgKDEgPDwgVkVDUykgfCAoMSA8PCBWQ1MyKTsgLyog YWxsIGVuZ2luZXMgKi8KKwlkZXNjLmRiX2lkID0gY2xpZW50LT5kb29yYmVsbF9pZDsKKworCS8q CisJICogVGhlIENQVSBhZGRyZXNzIGlzIG9ubHkgbmVlZGVkIGF0IGNlcnRhaW4gcG9pbnRzLCBz byBrbWFwX2F0b21pYyBvbgorCSAqIGRlbWFuZCBpbnN0ZWFkIG9mIHN0b3JpbmcgaXQgaW4gdGhl IGN0eCBkZXNjcmlwdG9yLgorCSAqIFhYWDogTWF5IG1ha2UgZGVidWcgZWFzaWVyIHRvIGhhdmUg aXQgbWFwcGVkCisJICovCisJZGVzYy5kYl90cmlnZ2VyX2NwdSA9IDA7CisJZGVzYy5kYl90cmln Z2VyX3VrID0gY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgKworCQlpOTE1X2dlbV9vYmpfZ2d0dF9v ZmZzZXQoY2xpZW50LT5jbGllbnRfb2JqKTsKKwlkZXNjLmRiX3RyaWdnZXJfcGh5ID0gY2xpZW50 LT5kb29yYmVsbF9vZmZzZXQgKworCQlzZ19kbWFfYWRkcmVzcyhjbGllbnQtPmNsaWVudF9vYmot PnBhZ2VzLT5zZ2wpOworCisJZGVzYy5wcm9jZXNzX2Rlc2MgPSBjbGllbnQtPnByb2NfZGVzY19v ZmZzZXQgKworCQlpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoY2xpZW50LT5jbGllbnRfb2JqKTsK KworCWRlc2Mud3FfYWRkciA9IGNsaWVudC0+d3Ffb2Zmc2V0ICsKKwkJaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KGNsaWVudC0+Y2xpZW50X29iaik7CisKKwlkZXNjLndxX3NpemUgPSBjbGllbnQt PndxX3NpemU7CisKKwkvKgorCSAqIFhYWDogVGFrZSBMUkNzIGZyb20gYW4gZXhpc3RpbmcgaW50 ZWxfY29udGV4dCBpZiB0aGlzIGlzIG5vdCBhbgorCSAqIElzS01EQ3JlYXRlZENvbnRleHQgY2xp ZW50CisJICovCisJZGVzYy5kZXNjX3ByaXZhdGUgPSAodWludHB0cl90KWNsaWVudDsKKworCS8q IFBvb2wgY29udGV4dCBpcyBwaW5uZWQgYWxyZWFkeSAqLworCXNnID0gZ3VjLT5jdHhfcG9vbF9v YmotPnBhZ2VzOworCXNnX3Bjb3B5X2Zyb21fYnVmZmVyKHNnLT5zZ2wsIHNnLT5uZW50cywgJmRl c2MsIHNpemVvZihkZXNjKSwKKwkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5jdHhfaW5k ZXgpOworfQorCitzdGF0aWMgdm9pZCBndWNfZmluaV9jdHhfZGVzYyhzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMsCisJCQkgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQpCit7CisJc3Ry dWN0IGd1Y19jb250ZXh0X2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnOworCisJbWVt c2V0KCZkZXNjLCAwLCBzaXplb2YoZGVzYykpOworCisJc2cgPSBndWMtPmN0eF9wb29sX29iai0+ cGFnZXM7CisJc2dfcGNvcHlfZnJvbV9idWZmZXIoc2ctPnNnbCwgc2ctPm5lbnRzLCAmZGVzYywg c2l6ZW9mKGRlc2MpLAorCQkJICAgICBzaXplb2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRleCk7 Cit9CisKKy8qIEdldCB2YWxpZCB3b3JrcXVldWUgaXRlbSBhbmQgcmV0dXJuIGl0IGJhY2sgdG8g b2Zmc2V0ICovCitzdGF0aWMgaW50IGd1Y19nZXRfd29ya3F1ZXVlX3NwYWNlKHN0cnVjdCBpOTE1 X2d1Y19jbGllbnQgKmdjLCB1MzIgKm9mZnNldCkKK3sKKwlzdHJ1Y3QgZ3VjX3Byb2Nlc3NfZGVz YyAqZGVzYzsKKwl2b2lkICpiYXNlOworCXUzMiBzaXplID0gc2l6ZW9mKHN0cnVjdCBndWNfd3Ff aXRlbSk7CisJaW50IHJldCA9IDAsIHRpbWVvdXRfY291bnRlciA9IDIwMDsKKworCWJhc2UgPSBr bWFwX2F0b21pYyhpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2UoZ2MtPmNsaWVudF9vYmosIDApKTsK KwlkZXNjID0gYmFzZSArIGdjLT5wcm9jX2Rlc2Nfb2Zmc2V0OworCisJd2hpbGUgKHRpbWVvdXRf Y291bnRlci0tID4gMCkgeworCQlyZXQgPSB3YWl0X2Zvcl9hdG9taWMoQ0lSQ19TUEFDRShnYy0+ d3FfdGFpbCwgZGVzYy0+aGVhZCwKKwkJCQlnYy0+d3Ffc2l6ZSkgPj0gc2l6ZSwgMSk7CisKKwkJ aWYgKCFyZXQpIHsKKwkJCSpvZmZzZXQgPSBnYy0+d3FfdGFpbDsKKworCQkJLyogYWR2YW5jZSB0 aGUgdGFpbCBmb3IgbmV4dCB3b3JrcXVldWUgaXRlbSAqLworCQkJZ2MtPndxX3RhaWwgKz0gc2l6 ZTsKKwkJCWdjLT53cV90YWlsICY9IGdjLT53cV9zaXplIC0gMTsKKworCQkJLyogdGhpcyB3aWxs IGJyZWFrIHRoZSBsb29wICovCisJCQl0aW1lb3V0X2NvdW50ZXIgPSAwOworCQl9CisJfTsKKwor CWt1bm1hcF9hdG9taWMoYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGd1 Y19hZGRfd29ya3F1ZXVlX2l0ZW0oc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqZ2MsCisJCQkJICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKQoreworCWVudW0gaW50ZWxfcmluZ19pZCBy aW5nX2lkID0gcnEtPnJpbmctPmlkOworCXN0cnVjdCBndWNfd3FfaXRlbSAqd3FpOworCXZvaWQg KmJhc2U7CisJdTMyIHRhaWwsIHdxX2xlbiwgd3Ffb2ZmID0gMDsKKwlpbnQgcmV0OworCisJcmV0 ID0gZ3VjX2dldF93b3JrcXVldWVfc3BhY2UoZ2MsICZ3cV9vZmYpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwkvKiBGb3Igbm93IHdvcmtxdWV1ZSBpdGVtIGlzIDQgRFdzOyB3b3JrcXVl dWUgYnVmZmVyIGlzIDIgcGFnZXMuIFNvIHdlCisJICogc2hvdWxkIG5vdCBoYXZlIHRoZSBjYXNl IHdoZXJlIHN0cnVjdHVyZSB3cWkgaXMgYWNyb3NzIHBhZ2UsIG5laXRoZXIKKwkgKiB3cmFwcGVk IHRvIHRoZSBiZWdpbm5pbmcuIFRoaXMgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24gYmVs b3cuCisJICoKKwkgKiBYWFg6IGlmIG5vdCB0aGUgY2FzZSwgd2UgbmVlZCBzYXZlIGRhdGEgdG8g YSB0ZW1wIHdxaSBhbmQgY29weSBpdCB0bworCSAqIHdvcmtxdWV1ZSBidWZmZXIgZHcgYnkgZHcu CisJICovCisJV0FSTl9PTihzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKSAhPSAxNik7CisJV0FS Tl9PTih3cV9vZmYgJiAzKTsKKworCS8qIHdxIHN0YXJ0cyBmcm9tIHRoZSBwYWdlIGFmdGVyIGRv b3JiZWxsIC8gcHJvY2Vzc19kZXNjICovCisJYmFzZSA9IGttYXBfYXRvbWljKGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZShnYy0+Y2xpZW50X29iaiwKKwkJCSh3cV9vZmYgKyBHVUNfREJfU0laRSkg Pj4gUEFHRV9TSElGVCkpOworCXdxX29mZiAmPSBQQUdFX1NJWkUgLSAxOworCXdxaSA9IChzdHJ1 Y3QgZ3VjX3dxX2l0ZW0gKikoKGNoYXIgKiliYXNlICsgd3Ffb2ZmKTsKKworCS8qIGxlbiBkb2Vz IG5vdCBpbmNsdWRlIHRoZSBoZWFkZXIgKi8KKwl3cV9sZW4gPSBzaXplb2Yoc3RydWN0IGd1Y193 cV9pdGVtKSAvIHNpemVvZih1MzIpIC0gMTsKKwl3cWktPmhlYWRlciA9IFdRX1RZUEVfSU5PUkRF UiB8CisJCQkod3FfbGVuIDw8IFdRX0xFTl9TSElGVCkgfAorCQkJKHJpbmdfaWQgPDwgV1FfVEFS R0VUX1NISUZUKSB8CisJCQlXUV9OT19XQ0ZMVVNIX1dBSVQ7CisKKwkvKiBUaGUgR3VDIHdhbnRz IG9ubHkgdGhlIGxvdy1vcmRlciB3b3JkIG9mIHRoZSBjb250ZXh0IGRlc2NyaXB0b3IgKi8KKwl3 cWktPmNvbnRleHRfZGVzYyA9ICh1MzIpaW50ZWxfbHJfY29udGV4dF9kZXNjcmlwdG9yKHJxLT5j dHgsIHJxLT5yaW5nKTsKKworCS8qIFRoZSBHdUMgZmlybXdhcmUgd2FudHMgdGhlIHRhaWwgaW5k ZXggaW4gUVdvcmRzLCBub3QgYnl0ZXMgKi8KKwl0YWlsID0gcnEtPnJpbmdidWYtPnRhaWwgPj4g MzsKKwl3cWktPnJpbmdfdGFpbCA9IHRhaWwgPDwgV1FfUklOR19UQUlMX1NISUZUOworCXdxaS0+ ZmVuY2VfaWQgPSAwOyAvKlhYWDogd2hhdCBmZW5jZSB0byBiZSBoZXJlICovCisKKwlrdW5tYXBf YXRvbWljKGJhc2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaTkxNV9ndWNfc3VibWl0 KCkgLSBTdWJtaXQgY29tbWFuZHMgdGhyb3VnaCBHdUMKKyAqIEBjbGllbnQ6CXRoZSBndWMgY2xp ZW50IHdoZXJlIGNvbW1hbmRzIHdpbGwgZ28gdGhyb3VnaAorICogQGN0eDoJTFJDIHdoZXJlIGNv bW1hbmRzIGNvbWUgZnJvbQorICogQHJpbmc6CUhXIGVuZ2luZSB0aGF0IHdpbGwgZXhjdXRlIHRo ZSBjb21tYW5kcworICoKKyAqIFJldHVybjoJMCBpZiBzdWNjZWVkCisgKi8KK2ludCBpOTE1X2d1 Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAorCQkgICAgc3RydWN0IGRy bV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKK3sKKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSBjbGll bnQtPmd1YzsKKwllbnVtIGludGVsX3JpbmdfaWQgcmluZ19pZCA9IHJxLT5yaW5nLT5pZDsKKwl1 bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBxX3JldCwgYl9yZXQ7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmY2xpZW50LT53cV9sb2NrLCBmbGFncyk7CisKKwlxX3JldCA9IGd1Y19hZGRfd29ya3F1 ZXVlX2l0ZW0oY2xpZW50LCBycSk7CisJaWYgKHFfcmV0ID09IDApCisJCWJfcmV0ID0gZ3VjX3Jp bmdfZG9vcmJlbGwoY2xpZW50KTsKKworCWNsaWVudC0+c3VibWlzc2lvbnNbcmluZ19pZF0gKz0g MTsKKwlpZiAocV9yZXQpIHsKKwkJY2xpZW50LT5xX2ZhaWwgKz0gMTsKKwkJY2xpZW50LT5yZXRj b2RlID0gcV9yZXQ7CisJfSBlbHNlIGlmIChiX3JldCkgeworCQljbGllbnQtPmJfZmFpbCArPSAx OworCQljbGllbnQtPnJldGNvZGUgPSBxX3JldCA9IGJfcmV0OworCX0gZWxzZSB7CisJCWNsaWVu dC0+cmV0Y29kZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+d3Ff bG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrKCZndWMtPmhvc3QyZ3VjX2xvY2spOworCWd1Yy0+ c3VibWlzc2lvbnNbcmluZ19pZF0gKz0gMTsKKwlndWMtPmxhc3Rfc2Vxbm9bcmluZ19pZF0gPSBy cS0+c2Vxbm87CisJc3Bpbl91bmxvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7CisKKwlyZXR1cm4g cV9yZXQ7Cit9CisKKy8qCisgKiBFdmVyeXRoaW5nIGJlbG93IGhlcmUgaXMgY29uY2VybmVkIHdp dGggc2V0dXAgJiB0ZWFyZG93biwgYW5kIGlzCisgKiB0aGVyZWZvcmUgbm90IHBhcnQgb2YgdGhl IHNvbWV3aGF0IHRpbWUtY3JpdGljYWwgYmF0Y2gtc3VibWlzc2lvbgorICogcGF0aCBvZiBpOTE1 X2d1Y19zdWJtaXQoKSBhYm92ZS4KKyAqLworCisvKioKICAqIGdlbV9hbGxvY2F0ZV9ndWNfb2Jq KCkgLSBBbGxvY2F0ZSBnZW0gb2JqZWN0IGZvciBHdUMgdXNhZ2UKICAqIEBkZXY6CWRybSBkZXZp Y2UKICAqIEBzaXplOglzaXplIG9mIG9iamVjdApAQCAtNzksNiArNjAyLDEyMSBAQCBzdGF0aWMg dm9pZCBnZW1fcmVsZWFzZV9ndWNfb2JqKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB9CiAKK3N0YXRpYyB2 b2lkIGd1Y19jbGllbnRfZnJlZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVj dCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZk ZXZfcHJpdi0+Z3VjOworCisJaWYgKCFjbGllbnQpCisJCXJldHVybjsKKworCWlmIChjbGllbnQt PmRvb3JiZWxsX2lkICE9IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEKSB7CisJCS8qCisJCSAqIEZp cnN0IGRpc2FibGUgdGhlIGRvb3JiZWxsLCB0aGVuIHRlbGwgdGhlIEd1QyB3ZSd2ZQorCQkgKiBm aW5pc2hlZCB3aXRoIGl0LCBmaW5hbGx5IGRlYWxsb2NhdGUgaXQgaW4gb3VyIGJpdG1hcAorCQkg Ki8KKwkJZ3VjX2Rpc2FibGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOworCQlob3N0Mmd1Y19yZWxl YXNlX2Rvb3JiZWxsKGd1YywgY2xpZW50KTsKKwkJcmVsZWFzZV9kb29yYmVsbChndWMsIGNsaWVu dC0+ZG9vcmJlbGxfaWQpOworCX0KKworCS8qCisJICogWFhYOiB3YWl0IGZvciBhbnkgb3V0c3Rh bmRpbmcgc3VibWlzc2lvbnMgYmVmb3JlIGZyZWVpbmcgbWVtb3J5LgorCSAqIEJlIHN1cmUgdG8g ZHJvcCBhbnkgbG9ja3MKKwkgKi8KKworCWdlbV9yZWxlYXNlX2d1Y19vYmooY2xpZW50LT5jbGll bnRfb2JqKTsKKworCWlmIChjbGllbnQtPmN0eF9pbmRleCAhPSBHVUNfSU5WQUxJRF9DVFhfSUQp IHsKKwkJZ3VjX2ZpbmlfY3R4X2Rlc2MoZ3VjLCBjbGllbnQpOworCQlpZGFfc2ltcGxlX3JlbW92 ZSgmZ3VjLT5jdHhfaWRzLCBjbGllbnQtPmN0eF9pbmRleCk7CisJfQorCisJa2ZyZWUoY2xpZW50 KTsKK30KKworLyoqCisgKiBndWNfY2xpZW50X2FsbG9jKCkgLSBBbGxvY2F0ZSBhbiBpOTE1X2d1 Y19jbGllbnQKKyAqIEBkZXY6CWRybSBkZXZpY2UKKyAqIEBwcmlvcml0eToJZm91ciBsZXZlbHMg cHJpb3JpdHkgX0NSSVRJQ0FMLCBfSElHSCwgX05PUk1BTCBhbmQgX0xPVworICogCQlUaGUga2Vy bmVsIGNsaWVudCB0byByZXBsYWNlIEV4ZWNMaXN0IHN1Ym1pc3Npb24gaXMgY3JlYXRlZCB3aXRo CisgKiAJCU5PUk1BTCBwcmlvcml0eS4gUHJpb3JpdHkgb2YgYSBjbGllbnQgZm9yIHNjaGVkdWxl ciBjYW4gYmUgSElHSCwKKyAqIAkJd2hpbGUgYSBwcmVlbXB0aW9uIGNvbnRleHQgY2FuIHVzZSBD UklUSUNBTC4KKyAqCisgKiBSZXR1cm46CUFuIGk5MTVfZ3VjX2NsaWVudCBvYmplY3QgaWYgc3Vj Y2Vzcy4KKyAqLworc3RhdGljIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmd1Y19jbGllbnRfYWxs b2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCXVpbnQzMl90IHByaW9yaXR5KQorewor CXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9 ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7CisKKwlj bGllbnQgPSBremFsbG9jKHNpemVvZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGll bnQpCisJCXJldHVybiBOVUxMOworCisJY2xpZW50LT5kb29yYmVsbF9pZCA9IEdVQ19JTlZBTElE X0RPT1JCRUxMX0lEOworCWNsaWVudC0+cHJpb3JpdHkgPSBwcmlvcml0eTsKKwljbGllbnQtPmd1 YyA9IGd1YzsKKworCWNsaWVudC0+Y3R4X2luZGV4ID0gKHVpbnQzMl90KWlkYV9zaW1wbGVfZ2V0 KCZndWMtPmN0eF9pZHMsIDAsCisJCQlHVUNfTUFYX0dQVV9DT05URVhUUywgR0ZQX0tFUk5FTCk7 CisJaWYgKGNsaWVudC0+Y3R4X2luZGV4ID49IEdVQ19NQVhfR1BVX0NPTlRFWFRTKSB7CisJCWNs aWVudC0+Y3R4X2luZGV4ID0gR1VDX0lOVkFMSURfQ1RYX0lEOworCQlnb3RvIGVycjsKKwl9CisK KwkvKiBUaGUgZmlyc3QgcGFnZSBpcyBkb29yYmVsbC9wcm9jX2Rlc2MuIFR3byBmb2xsb3dlZCBw YWdlcyBhcmUgd3EuICovCisJb2JqID0gZ2VtX2FsbG9jYXRlX2d1Y19vYmooZGV2LCBHVUNfREJf U0laRSArIEdVQ19XUV9TSVpFKTsKKwlpZiAoIW9iaikKKwkJZ290byBlcnI7CisKKwljbGllbnQt PmNsaWVudF9vYmogPSBvYmo7CisJY2xpZW50LT53cV9vZmZzZXQgPSBHVUNfREJfU0laRTsKKwlj bGllbnQtPndxX3NpemUgPSBHVUNfV1FfU0laRTsKKwlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT53 cV9sb2NrKTsKKworCWNsaWVudC0+ZG9vcmJlbGxfb2Zmc2V0ID0gc2VsZWN0X2Rvb3JiZWxsX2Nh Y2hlbGluZShndWMpOworCisJLyoKKwkgKiBTaW5jZSB0aGUgZG9vcmJlbGwgb25seSByZXF1aXJl cyBhIHNpbmdsZSBjYWNoZWxpbmUsIHdlIGNhbiBzYXZlCisJICogc3BhY2UgYnkgcHV0dGluZyB0 aGUgYXBwbGljYXRpb24gcHJvY2VzcyBkZXNjcmlwdG9yIGluIHRoZSBzYW1lCisJICogcGFnZS4g VXNlIHRoZSBoYWxmIG9mIHRoZSBwYWdlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHRoZSBkb29yYmVs bC4KKwkgKi8KKwlpZiAoY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPj0gKEdVQ19EQl9TSVpFIC8g MikpCisJCWNsaWVudC0+cHJvY19kZXNjX29mZnNldCA9IDA7CisJZWxzZQorCQljbGllbnQtPnBy b2NfZGVzY19vZmZzZXQgPSAoR1VDX0RCX1NJWkUgLyAyKTsKKworCWNsaWVudC0+ZG9vcmJlbGxf aWQgPSBhc3NpZ25fZG9vcmJlbGwoZ3VjLCBjbGllbnQtPnByaW9yaXR5KTsKKwlpZiAoY2xpZW50 LT5kb29yYmVsbF9pZCA9PSBHVUNfSU5WQUxJRF9ET09SQkVMTF9JRCkKKwkJLyogWFhYOiBldmlj dCBhIGRvb3JiZWxsIGluc3RlYWQgKi8KKwkJZ290byBlcnI7CisKKwlndWNfaW5pdF9wcm9jX2Rl c2MoZ3VjLCBjbGllbnQpOworCWd1Y19pbml0X2N0eF9kZXNjKGd1YywgY2xpZW50KTsKKwlndWNf aW5pdF9kb29yYmVsbChndWMsIGNsaWVudCk7CisKKwkvKiBYWFg6IEFueSBjYWNoZSBmbHVzaGVz IG5lZWRlZD8gR2VuZXJhbCBkb21haW4gbWdtdCBjYWxscz8gKi8KKworCWlmIChob3N0Mmd1Y19h bGxvY2F0ZV9kb29yYmVsbChndWMsIGNsaWVudCkpCisJCWdvdG8gZXJyOworCisJRFJNX0RFQlVH X0RSSVZFUigibmV3IHByaW9yaXR5ICV1IGNsaWVudCAlcDogY3R4X2luZGV4ICV1IGRiX2lkICV1 XG4iLAorCQlwcmlvcml0eSwgY2xpZW50LCBjbGllbnQtPmN0eF9pbmRleCwgY2xpZW50LT5kb29y YmVsbF9pZCk7CisKKwlyZXR1cm4gY2xpZW50OworCitlcnI6CisJRFJNX0VSUk9SKCJGQUlMRUQg dG8gY3JlYXRlIHByaW9yaXR5ICV1IEd1QyBjbGllbnQhXG4iLCBwcmlvcml0eSk7CisKKwlndWNf Y2xpZW50X2ZyZWUoZGV2LCBjbGllbnQpOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9p ZCBndWNfY3JlYXRlX2xvZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7CiAJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKQEAgLTE0Miw2ICs3ODAs OCBAQCBpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp CiAJaWYgKCFndWMtPmN0eF9wb29sX29iaikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlzcGluX2xv Y2tfaW5pdCgmZGV2X3ByaXYtPmd1Yy5ob3N0Mmd1Y19sb2NrKTsKKwogCWlkYV9pbml0KCZndWMt PmN0eF9pZHMpOwogCiAJZ3VjX2NyZWF0ZV9sb2coZ3VjKTsKQEAgLTE0OSw2ICs3ODksMzIgQEAg aW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXJl dHVybiAwOwogfQogCitpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwor CXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudDsKKworCS8qIGNsaWVudCBmb3IgZXhlY2J1 ZiBzdWJtaXNzaW9uICovCisJY2xpZW50ID0gZ3VjX2NsaWVudF9hbGxvYyhkZXYsIEdVQ19DVFhf UFJJT1JJVFlfS01EX05PUk1BTCk7CisJaWYgKCFjbGllbnQpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gY3JlYXRlIGV4ZWNidWYgZ3VjX2NsaWVudFxuIik7CisJCXJldHVybiAtRU5PTUVNOwor CX0KKworCWd1Yy0+ZXhlY2J1Zl9jbGllbnQgPSBjbGllbnQ7CisJcmV0dXJuIDA7Cit9CisKK3Zv aWQgaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYtPmd1YzsKKworCWd1Y19jbGllbnRf ZnJlZShkZXYsIGd1Yy0+ZXhlY2J1Zl9jbGllbnQpOworCWd1Yy0+ZXhlY2J1Zl9jbGllbnQgPSBO VUxMOworfQorCiB2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCmluZGV4IDViNTFiMDUuLjkyNjU4Y2Ug MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCkBAIC0yNyw2ICsyNywzMSBAQAogI2luY2x1ZGUg ImludGVsX2d1Y19md2lmLmgiCiAjaW5jbHVkZSAiaTkxNV9ndWNfcmVnLmgiCiAKK3N0cnVjdCBp OTE1X2d1Y19jbGllbnQgeworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjbGllbnRfb2Jq OworCXN0cnVjdCBpbnRlbF9ndWMgKmd1YzsKKwl1aW50MzJfdCBwcmlvcml0eTsKKwl1aW50MzJf dCBjdHhfaW5kZXg7CisKKwl1aW50MzJfdCBwcm9jX2Rlc2Nfb2Zmc2V0OworCXVpbnQzMl90IGRv b3JiZWxsX29mZnNldDsKKwl1aW50MzJfdCBjb29raWU7CisJdWludDE2X3QgZG9vcmJlbGxfaWQ7 CisJdWludDE2X3QgcGFkZGluZzsJCS8qIE1haW50YWluIGFsaWdubWVudAkJKi8KKworCXVpbnQz Ml90IHdxX29mZnNldDsKKwl1aW50MzJfdCB3cV9zaXplOworCisJc3BpbmxvY2tfdCB3cV9sb2Nr OwkJLyogUHJvdGVjdHMgYWxsIGRhdGEgYmVsb3cJKi8KKwl1aW50MzJfdCB3cV90YWlsOworCisJ LyogR3VDIHN1Ym1pc3Npb24gc3RhdGlzdGljcyAmIHN0YXR1cyAqLworCXVpbnQ2NF90IHN1Ym1p c3Npb25zW0k5MTVfTlVNX1JJTkdTXTsKKwl1aW50MzJfdCBxX2ZhaWw7CisJdWludDMyX3QgYl9m YWlsOworCWludCByZXRjb2RlOworfTsKKwogZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHsKIAlH VUNfRklSTVdBUkVfRkFJTCA9IC0xLAogCUdVQ19GSVJNV0FSRV9OT05FID0gMCwKQEAgLTYwLDYg Kzg1LDIzIEBAIHN0cnVjdCBpbnRlbF9ndWMgewogCiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKmN0eF9wb29sX29iajsKIAlzdHJ1Y3QgaWRhIGN0eF9pZHM7CisKKwlzdHJ1Y3QgaTkxNV9n dWNfY2xpZW50ICpleGVjYnVmX2NsaWVudDsKKworCXNwaW5sb2NrX3QgaG9zdDJndWNfbG9jazsJ LyogUHJvdGVjdHMgYWxsIGRhdGEgYmVsb3cJKi8KKworCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxs X2JpdG1hcCwgR1VDX01BWF9ET09SQkVMTFMpOworCXVpbnQzMl90IGRiX2NhY2hlbGluZTsJCS8q IEN5Y2xpYyBjb3VudGVyIG1vZCBwYWdlc2l6ZQkqLworCisJLyogQWN0aW9uIHN0YXR1cyAmIHN0 YXRpc3RpY3MgKi8KKwl1aW50NjRfdCBhY3Rpb25fY291bnQ7CQkvKiBUb3RhbCBjb21tYW5kcyBp c3N1ZWQJKi8KKwl1aW50MzJfdCBhY3Rpb25fY21kOwkJLyogTGFzdCBjb21tYW5kIHdvcmQJCSov CisJdWludDMyX3QgYWN0aW9uX3N0YXR1czsJCS8qIExhc3QgcmV0dXJuIHN0YXR1cwkJKi8KKwl1 aW50MzJfdCBhY3Rpb25fZmFpbDsJCS8qIFRvdGFsIG51bWJlciBvZiBmYWlsdXJlcwkqLworCWlu dDMyX3QgYWN0aW9uX2VycjsJCS8qIExhc3QgZXJyb3IgY29kZQkJKi8KKworCXVpbnQ2NF90IHN1 Ym1pc3Npb25zW0k5MTVfTlVNX1JJTkdTXTsKKwl1aW50MzJfdCBsYXN0X3NlcW5vW0k5MTVfTlVN X1JJTkdTXTsKIH07CiAKIC8qIGludGVsX2d1Y19sb2FkZXIuYyAqLwpAQCAtNzAsNiArMTEyLDEw IEBAIGV4dGVybiBjb25zdCBjaGFyICppbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZW51bSBpbnRl bF9ndWNfZndfc3RhdHVzIHN0YXR1cyk7CiAKIC8qIGk5MTVfZ3VjX3N1Ym1pc3Npb24uYyAqLwog aW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2lu dCBpOTE1X2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2lu dCBpOTE1X2d1Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAorCQkgICAg c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSk7Cit2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Np b25fZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgaTkxNV9ndWNfc3VibWlz c2lvbl9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ndWNfZndpZi5oCmluZGV4IDA2YWFkNmYuLjk1MGM3ZTcgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaApAQCAtMzUsMTAgKzM1LDEwIEBACiAjZGVmaW5lIEdG WENPUkVfRkFNSUxZX0dFTjkJCTEyCiAjZGVmaW5lIEdGWENPUkVfRkFNSUxZX1VOS05PV04JCTB4 N2ZmZmZmZmYKIAotI2RlZmluZSBHVUNfQ1RYX1BSSU9SSVRZX0NSSVRJQ0FMCTAKKyNkZWZpbmUg R1VDX0NUWF9QUklPUklUWV9LTURfSElHSAkwCiAjZGVmaW5lIEdVQ19DVFhfUFJJT1JJVFlfSElH SAkJMQotI2RlZmluZSBHVUNfQ1RYX1BSSU9SSVRZX05PUk1BTAkJMgotI2RlZmluZSBHVUNfQ1RY X1BSSU9SSVRZX0xPVwkJMworI2RlZmluZSBHVUNfQ1RYX1BSSU9SSVRZX0tNRF9OT1JNQUwJMgor I2RlZmluZSBHVUNfQ1RYX1BSSU9SSVRZX05PUk1BTAkJMwogCiAjZGVmaW5lIEdVQ19NQVhfR1BV X0NPTlRFWFRTCQkxMDI0CiAjZGVmaW5lCUdVQ19JTlZBTElEX0NUWF9JRAkJKEdVQ19NQVhfR1BV X0NPTlRFWFRTICsgMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1 Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwppbmRl eCA2ZmY3ZmVhLi44YjRiMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9ndWNfbG9hZGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRl ci5jCkBAIC0zNDIsNiArMzQyLDggQEAgaW50IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCiAJCWludGVsX2d1Y19md19zdGF0dXNfcmVwcihndWNfZnctPmd1Y19m d19mZXRjaF9zdGF0dXMpLAogCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNf ZndfbG9hZF9zdGF0dXMpKTsKIAorCWk5MTVfZ3VjX3N1Ym1pc3Npb25fZGlzYWJsZShkZXYpOwor CiAJaWYgKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9PSBHVUNfRklSTVdBUkVfTk9ORSkK IAkJcmV0dXJuIDA7CiAKQEAgLTM4OSwxMiArMzkxLDIwIEBAIGludCBpbnRlbF9ndWNfdWNvZGVf bG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIo Z3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKIAkJaW50ZWxfZ3VjX2Z3X3N0YXR1c19yZXBy KGd1Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzKSk7CiAKKwlpZiAoaTkxNS5lbmFibGVfZ3VjX3N1 Ym1pc3Npb24pIHsKKwkJZXJyID0gaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoZGV2KTsKKwkJ aWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbDoKIAlpZiAo Z3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJFX1BFTkRJTkcpCiAJCWd1 Y19mdy0+Z3VjX2Z3X2xvYWRfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX0ZBSUw7CiAKKwlpOTE1X2d1 Y19zdWJtaXNzaW9uX2Rpc2FibGUoZGV2KTsKKwogCXJldHVybiBlcnI7CiB9CiAKLS0gCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=