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=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 F08FBC47088 for ; Wed, 26 May 2021 13:00:46 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 B32A860FD8 for ; Wed, 26 May 2021 13:00:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B32A860FD8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 278D76ECFF; Wed, 26 May 2021 13:00:46 +0000 (UTC) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 547E36ECEF; Wed, 26 May 2021 13:00:39 +0000 (UTC) IronPort-SDR: t6ky3Fm/gj4jtwJ+YB4MoMk/vxzHIpuPqpRmm74FGFHQHYxi/TJHU9TmMzZxk0KgaR34SCfirU 8MlLUngMVBeQ== X-IronPort-AV: E=McAfee;i="6200,9189,9996"; a="182101708" X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="182101708" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 06:00:39 -0700 IronPort-SDR: GN3RAfKGjdPkN0EwXiweAcxokY3JHn+wdTRGVVaAAHbTA+Hbbz2HQfpzr7cUDdUG45G0bV5kh/ Alc/wnbpAW/A== X-IronPort-AV: E=Sophos;i="5.82,331,1613462400"; d="scan'208";a="614942058" Received: from mschan-mobl1.amr.corp.intel.com (HELO mwauld-desk1.intel.com) ([10.212.100.144]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2021 06:00:36 -0700 From: Matthew Auld To: igt-dev@lists.freedesktop.org Date: Wed, 26 May 2021 14:00:19 +0100 Message-Id: <20210526130025.249629-3-matthew.auld@intel.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210526130025.249629-1-matthew.auld@intel.com> References: <20210526130025.249629-1-matthew.auld@intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH i-g-t v3 3/9] lib/i915/intel_memory_region: Add new memory region lib X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dominik Grzegorzek , intel-gfx@lists.freedesktop.org, Lukasz Kalamarz , Andrzej Turko Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" RnJvbTogQW5kcnplaiBUdXJrbyA8YW5kcnplai50dXJrb0BsaW51eC5pbnRlbC5jb20+CgpXaXRo IGFuIGludHJvZHVjdGlvbiBvZiBMb2NhbCBNZW1vcnkgY29uY2VwdCB3ZSBzaG91bGQgYmUgYWJs ZSB0bwphbGxvY2F0ZSBvYmplY3QgaW4gc3BlY2lmaWMgbWVtb3J5IHJlZ2lvbi4gVGhpcyBwYXRj aCBpbXBsZW1lbnRzCmhlbHBlciBmdW5jdGlvbnMgdGhhdCBhbGxvdyB0aGlzLCBib3RoIGZvciBx dWVyeWluZyB3aGF0IHRoZSBkZXZpY2UKc3VwcG9ydHMgYW5kIGhvb2tpbmcgaW50byBnZW1fY3Jl YXRlX2V4dCB0byBzZWxlY3QgdGhlIHBsYWNlbWVudHMuCgpDby1hdXRob3JlZC1ieTogTHVrYXN6 IEthbGFtYXJ6IDxsdWthc3oua2FsYW1hcnpAaW50ZWwuY29tPgpDby1hdXRob3JlZC1ieTogWmJp Z25pZXcgS2VtcGN6eW5za2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KU2lnbmVk LW9mZi1ieTogQW5kcnplaiBUdXJrbyA8YW5kcnplai50dXJrb0BsaW51eC5pbnRlbC5jb20+ClNp Z25lZC1vZmYtYnk6IEx1a2FzeiBLYWxhbWFyeiA8bHVrYXN6LmthbGFtYXJ6QGludGVsLmNvbT4K U2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6eW5za2kgPHpiaWduaWV3LmtlbXBjenluc2tp QGludGVsLmNvbT4KQ2M6IFpiaWduaWV3IEtlbXBjenluc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNr aUBpbnRlbC5jb20+CkNjOiBEb21pbmlrIEdyemVnb3J6ZWsgPGRvbWluaWsuZ3J6ZWdvcnpla0Bp bnRlbC5jb20+CkNjOiBQZXRyaSBMYXR2YWxhIDxwZXRyaS5sYXR2YWxhQGludGVsLmNvbT4KU2ln bmVkLW9mZi1ieTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgpBY2tlZC1i eTogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+Ci0tLQogbGliL2k5MTUv aW50ZWxfbWVtb3J5X3JlZ2lvbi5jIHwgNDQxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogbGliL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIHwgMTMwICsrKysrKysrKysKIGxp Yi9pb2N0bF93cmFwcGVycy5oICAgICAgICAgICB8ICAgMSArCiBsaWIvbWVzb24uYnVpbGQgICAg ICAgICAgICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCA1NzMgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaAoKZGlmZiAtLWdpdCBh L2xpYi9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYyBiL2xpYi9pOTE1L2ludGVsX21lbW9yeV9y ZWdpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOTgzYWM0ZGYKLS0t IC9kZXYvbnVsbAorKysgYi9saWIvaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKQEAgLTAsMCAr MSw0NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL2lv Y3RsLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNp bmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJpOTE1 L2dlbV9jcmVhdGUuaCIKKyNpbmNsdWRlICJpbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJkcm10ZXN0 LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKKyNpbmNsdWRlICJpZ3RfZHVtbXlsb2Fk LmgiCisjaW5jbHVkZSAiaWd0X2d0LmgiCisjaW5jbHVkZSAiaWd0X3BhcmFtcy5oIgorI2luY2x1 ZGUgImlndF9zeXNmcy5oIgorI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKKyNpbmNsdWRlICJp Z3RfY29sbGVjdGlvbi5oIgorI2luY2x1ZGUgImlndF9kZXZpY2UuaCIKKworI2luY2x1ZGUgImk5 MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIgorCisjZGVmaW5lIGk5MTVfcXVlcnlfaXRlbXMoZmQs IGl0ZW1zLCBuX2l0ZW1zKSBkbyB7IFwKKwkJaWd0X2Fzc2VydF9lcShfX2k5MTVfcXVlcnlfaXRl bXMoZmQsIGl0ZW1zLCBuX2l0ZW1zKSwgMCk7IFwKKwkJZXJybm8gPSAwOyBcCisJfSB3aGlsZSAo MCkKKyNkZWZpbmUgaTkxNV9xdWVyeV9pdGVtc19lcnIoZmQsIGl0ZW1zLCBuX2l0ZW1zLCBlcnIp IGRvIHsgXAorCQlpZ3RfYXNzZXJ0X2VxKF9faTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIG5f aXRlbXMpLCAtZXJyKTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQKK19faTkxNV9xdWVy eShpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9xdWVyeSAqcSkKK3sKKwlpZiAoaWd0X2lvY3RsKGZk LCBEUk1fSU9DVExfSTkxNV9RVUVSWSwgcSkpCisJCXJldHVybiAtZXJybm87CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK19faTkxNV9xdWVyeV9pdGVtcyhpbnQgZmQsIHN0cnVjdCBkcm1f aTkxNV9xdWVyeV9pdGVtICppdGVtcywgdWludDMyX3Qgbl9pdGVtcykKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcXVlcnkgcSA9IHsKKwkJLm51bV9pdGVtcyA9IG5faXRlbXMsCisJCS5pdGVtc19wdHIg PSB0b191c2VyX3BvaW50ZXIoaXRlbXMpLAorCX07CisJcmV0dXJuIF9faTkxNV9xdWVyeShmZCwg JnEpOworfQorCitib29sIGdlbV9oYXNfcXVlcnlfc3VwcG9ydChpbnQgZmQpCit7CisJc3RydWN0 IGRybV9pOTE1X3F1ZXJ5IHF1ZXJ5ID0ge307CisKKwlyZXR1cm4gX19pOTE1X3F1ZXJ5KGZkLCAm cXVlcnkpID09IDA7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9tZW1vcnlfcmVnaW9uX25hbWUodWlu dDMyX3QgcmVnaW9uKQoreworCXVpbnQxNl90IGNsYXNzID0gTUVNT1JZX1RZUEVfRlJPTV9SRUdJ T04ocmVnaW9uKTsKKworCXN3aXRjaCAoY2xhc3MpIHsKKwljYXNlIEk5MTVfTUVNT1JZX0NMQVNT X1NZU1RFTToKKwkJcmV0dXJuICJzbWVtIjsKKwljYXNlIEk5MTVfTUVNT1JZX0NMQVNTX0RFVklD RToKKwkJcmV0dXJuICJsbWVtIjsKKwl9CisJaWd0X2Fzc2VydF9mKGZhbHNlLCAiVW5rbm93biBt ZW1vcnkgcmVnaW9uIik7Cit9CisKKy8qKgorICogIGdlbV9nZXRfYmF0Y2hfc2l6ZToKKyAqICBA ZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiAgQG1lbV9yZWdpb25fdHlwZTog dXNlZCBtZW1vcnlfcmVnaW9uIHR5cGUKKyAqCisgKiAgV2l0aCBpbnRyb2R1Y3Rpb24gb2YgTE1F TSB3ZSBvYnNlcnZlIGRpZmZlcmVudCBwYWdlIHNpemVzIGZvciB0aG9zZSB0d28KKyAqICBtZW1v cnkgcmVnaW9ucy4gV2l0aG91dCB0aGlzIGhlbHBlciBmdW50aW9uIHdlIG1heSBiZSBwcm9uZSB0 byBmb3JnZXQKKyAqICBhYm91dCBzZXR0aW5nIHByb3BlciBwYWdlIHNpemUuCisgKi8KK3VpbnQz Ml90IGdlbV9nZXRfYmF0Y2hfc2l6ZShpbnQgZmQsIHVpbnQ4X3QgbWVtX3JlZ2lvbl90eXBlKQor eworCXJldHVybiAobWVtX3JlZ2lvbl90eXBlID09IEk5MTVfTUVNT1JZX0NMQVNTX0RFVklDRSkg PyA2NTUzNiA6IDQwOTY7Cit9CisKKy8qKgorICogZ2VtX2dldF9xdWVyeV9tZW1vcnlfcmVnaW9u czoKKyAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHdyYXBzIHF1ZXJ5IG1lY2hhbmlzbSBmb3IgbWVtb3J5IHJlZ2lvbnMuCisgKgorICog UmV0dXJuczogRmlsbGVkIHN0cnVjdCB3aXRoIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9ucy4KKyAq Lworc3RydWN0IGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25zICpnZW1fZ2V0X3F1ZXJ5X21l bW9yeV9yZWdpb25zKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVt OworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyAqcXVlcnlfaW5mbzsKKwor CW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5 MTVfUVVFUllfTUVNT1JZX1JFR0lPTlM7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEp OworCisJcXVlcnlfaW5mbyA9IGNhbGxvYygxLCBpdGVtLmxlbmd0aCk7CisKKwlpdGVtLmRhdGFf cHRyID0gdG9fdXNlcl9wb2ludGVyKHF1ZXJ5X2luZm8pOworCWk5MTVfcXVlcnlfaXRlbXMoZmQs ICZpdGVtLCAxKTsKKworCXJldHVybiBxdWVyeV9pbmZvOworfQorCisvKioKKyAqIGdlbV9nZXRf bG1lbV9yZWdpb25fY291bnQ6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9y CisgKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGhvdyBtYW55IGxtZW0gcmVnaW9ucyBh cmUgYXZhaWxhYmxlIG9uIGRldmljZS4KKyAqCisgKiBSZXR1cm5zOiBOdW1iZXIgb2YgZm91bmQg bG1lbSByZWdpb25zLgorICovCit1aW50OF90IGdlbV9nZXRfbG1lbV9yZWdpb25fY291bnQoaW50 IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyAqcXVlcnlfaW5m bzsKKwl1aW50OF90IG51bV9yZWdpb25zOworCXVpbnQ4X3QgbG1lbV9yZWdpb25zID0gMDsKKwor CXF1ZXJ5X2luZm8gPSBnZW1fZ2V0X3F1ZXJ5X21lbW9yeV9yZWdpb25zKGZkKTsKKwludW1fcmVn aW9ucyA9IHF1ZXJ5X2luZm8tPm51bV9yZWdpb25zOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBu dW1fcmVnaW9uczsgaSsrKSB7CisJCWlmIChxdWVyeV9pbmZvLT5yZWdpb25zW2ldLnJlZ2lvbi5t ZW1vcnlfY2xhc3MgPT0gSTkxNV9NRU1PUllfQ0xBU1NfREVWSUNFKQorCQkJbG1lbV9yZWdpb25z ICs9IDE7CisJfQorCisJcmV0dXJuIGxtZW1fcmVnaW9uczsKK30KKworLyoqCisgKiBnZW1faGFz X2xtZW06CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKgorICogSGVs cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxtZW0gaXMgYXZhaWxhYmxlIG9uIGRldmljZS4KKyAq CisgKiBSZXR1cm5zOiBUcnVlIGlmIGF0IGxlYXN0IG9uZSBsbWVtIHJlZ2lvbiB3YXMgZm91bmQu CisgKi8KK2Jvb2wgZ2VtX2hhc19sbWVtKGludCBmZCkKK3sKKwlyZXR1cm4gZ2VtX2dldF9sbWVt X3JlZ2lvbl9jb3VudChmZCkgPiAwOworfQorCisvKiBBIHZlcnNpb24gb2YgZ2VtX2NyZWF0ZV9p bl9tZW1vcnlfcmVnaW9uX2xpc3Qgd2hpY2ggY2FuIGJlIGFsbG93ZWQgdG8KKyAgIGZhaWwgc28g dGhhdCB0aGUgb2JqZWN0IGNyZWF0aW9uIGNhbiBiZSByZXRyaWVkICovCitpbnQgX19nZW1fY3Jl YXRlX2luX21lbW9yeV9yZWdpb25fbGlzdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGUsIHVpbnQ2 NF90IHNpemUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fbWVtb3J5X2NsYXNzX2lu c3RhbmNlICptZW1fcmVnaW9ucywKKwkJCQkgICAgICAgaW50IG51bV9yZWdpb25zKQoreworCXN0 cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlX2V4dF9tZW1vcnlfcmVnaW9ucyBleHRfcmVnaW9ucyA9 IHsKKwkJLmJhc2UgPSB7IC5uYW1lID0gSTkxNV9HRU1fQ1JFQVRFX0VYVF9NRU1PUllfUkVHSU9O UyB9LAorCQkubnVtX3JlZ2lvbnMgPSBudW1fcmVnaW9ucywKKwkJLnJlZ2lvbnMgPSB0b191c2Vy X3BvaW50ZXIobWVtX3JlZ2lvbnMpLAorCX07CisKKwlyZXR1cm4gX19nZW1fY3JlYXRlX2V4dChm ZCwgJnNpemUsIGhhbmRsZSwgJmV4dF9yZWdpb25zLmJhc2UpOworfQorCisvKiBnZW1fY3JlYXRl X2luX21lbW9yeV9yZWdpb25fbGlzdDoKKyAqIEBmZDogb3BlbmVkIGk5MTUgZHJtIGZpbGUgZGVz Y3JpcHRvcgorICogQHNpemU6IHJlcXVlc3RlZCBzaXplIG9mIHRoZSBidWZmZXIKKyAqIEBtZW1f cmVnaW9uczogbWVtb3J5IHJlZ2lvbnMgYXJyYXkgKHByaW9yaXR5IGxpc3QpCisgKiBAbnVtX3Jl Z2lvbnM6IEBtZW1fcmVnaW9ucyBsZW5ndGgKKyAqLwordWludDMyX3QgZ2VtX2NyZWF0ZV9pbl9t ZW1vcnlfcmVnaW9uX2xpc3QoaW50IGZkLCB1aW50NjRfdCBzaXplLAorCQkJCQkgIHN0cnVjdCBk cm1faTkxNV9nZW1fbWVtb3J5X2NsYXNzX2luc3RhbmNlICptZW1fcmVnaW9ucywKKwkJCQkJICBp bnQgbnVtX3JlZ2lvbnMpCit7CisJdWludDMyX3QgaGFuZGxlOworCWludCByZXQgPSBfX2dlbV9j cmVhdGVfaW5fbWVtb3J5X3JlZ2lvbl9saXN0KGZkLCAmaGFuZGxlLCBzaXplLAorCQkJCQkJICAg ICBtZW1fcmVnaW9ucywgbnVtX3JlZ2lvbnMpOworCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKKwly ZXR1cm4gaGFuZGxlOworfQorCitzdGF0aWMgYm9vbCBfX3JlZ2lvbl9iZWxvbmdzX3RvX3JlZ2lv bnNfdHlwZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21lbW9yeV9jbGFzc19pbnN0YW5jZSByZWdpb24s CisJCQkJCSAgICAgdWludDMyX3QgKm1lbV9yZWdpb25zX3R5cGUsCisJCQkJCSAgICAgaW50IG51 bV9yZWdpb25zKQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3JlZ2lvbnM7IGkrKykKKwkJ aWYgKG1lbV9yZWdpb25zX3R5cGVbaV0gPT0gcmVnaW9uLm1lbW9yeV9jbGFzcykKKwkJCXJldHVy biB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RydWN0IGlndF9jb2xsZWN0aW9uICoKK19f Z2V0X21lbW9yeV9yZWdpb25fc2V0KHN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9u cyAqcmVnaW9ucywKKwkJCXVpbnQzMl90ICptZW1fcmVnaW9uc190eXBlLAorCQkJaW50IG51bV9y ZWdpb25zKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fbWVtb3J5X2NsYXNzX2luc3RhbmNlIHJl Z2lvbjsKKwlzdHJ1Y3QgaWd0X2NvbGxlY3Rpb24gKnNldDsKKwlpbnQgY291bnQgPSAwLCBwb3Mg PSAwOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCByZWdpb25zLT5udW1fcmVnaW9uczsgaSsrKSB7 CisJCXJlZ2lvbiA9IHJlZ2lvbnMtPnJlZ2lvbnNbaV0ucmVnaW9uOworCQlpZiAoX19yZWdpb25f YmVsb25nc190b19yZWdpb25zX3R5cGUocmVnaW9uLAorCQkJCQkJICAgICBtZW1fcmVnaW9uc190 eXBlLAorCQkJCQkJICAgICBudW1fcmVnaW9ucykpCisJCQljb3VudCsrOworCX0KKworCXNldCA9 IGlndF9jb2xsZWN0aW9uX2NyZWF0ZShjb3VudCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHJl Z2lvbnMtPm51bV9yZWdpb25zOyBpKyspIHsKKwkJcmVnaW9uID0gcmVnaW9ucy0+cmVnaW9uc1tp XS5yZWdpb247CisJCWlmIChfX3JlZ2lvbl9iZWxvbmdzX3RvX3JlZ2lvbnNfdHlwZShyZWdpb24s CisJCQkJCQkgICAgIG1lbV9yZWdpb25zX3R5cGUsCisJCQkJCQkgICAgIG51bV9yZWdpb25zKSkK KwkJCWlndF9jb2xsZWN0aW9uX3NldF92YWx1ZShzZXQsIHBvcysrLAorCQkJCQkJIElOVEVMX01F TU9SWV9SRUdJT05fSUQocmVnaW9uLm1lbW9yeV9jbGFzcywKKwkJCQkJCQkJCXJlZ2lvbi5tZW1v cnlfaW5zdGFuY2UpKTsKKwl9CisKKwlpZ3RfYXNzZXJ0KGNvdW50ID09IHBvcyk7CisKKwlyZXR1 cm4gc2V0OworfQorCisvKioKKyAgKiBtZW1yZWdpb25fZHluYW1pY19zdWJ0ZXN0X25hbWU6Cisg ICogQGlndF9jb2xsZWN0aW9uOiBtZW1vcnkgcmVnaW9uIGNvbGxlY3Rpb24KKyAgKgorICAqIEZ1 bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG1lbW9yeSByZWdpb25zIGluc2lkZSB0aGUgY29sbGVj dGlvbiAoa2VlcGVkCisgICogaW4gdGhlIHZhbHVlIGZpZWxkKSBhbmQgZ2VuZXJhdGVzIHRoZSBu YW1lIHdoaWNoIGNhbiBiZSB1c2VkIGR1cmluZyBkeW5hbWljCisgICogc3VidGVzdCBjcmVhdGlv bi4KKyAgKgorICAqIFJldHVybnM6IG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcsIGhhcyB0byBiZSBm cmVlZCBieSBjYWxsZXIuIEFzc2VydHMgaWYKKyAgKiBjYWxsZXIgdHJpZXMgdG8gY3JlYXRlIGEg bmFtZSB1c2luZyBlbXB0eSBjb2xsZWN0aW9uLgorICAqLworY2hhciAqbWVtcmVnaW9uX2R5bmFt aWNfc3VidGVzdF9uYW1lKHN0cnVjdCBpZ3RfY29sbGVjdGlvbiAqc2V0KQoreworCXN0cnVjdCBp Z3RfY29sbGVjdGlvbl9kYXRhICpkYXRhOworCWNoYXIgKm5hbWUsICpwOworCXVpbnQzMl90IHJl Z2lvbiwgbGVuOworCisJaWd0X2Fzc2VydChzZXQgJiYgc2V0LT5zaXplKTsKKwkvKiBlbm91Z2gg Zm9yICJuYW1lJWQtIiAqIG4gKi8KKwlsZW4gPSBzZXQtPnNpemUgKiA4OworCXAgPSBuYW1lID0g bWFsbG9jKGxlbik7CisJaWd0X2Fzc2VydChuYW1lKTsKKworCWZvcl9lYWNoX2NvbGxlY3Rpb25f ZGF0YShkYXRhLCBzZXQpIHsKKwkJaW50IHI7CisKKwkJcmVnaW9uID0gZGF0YS0+dmFsdWU7CisJ CWlmIChJU19ERVZJQ0VfTUVNT1JZX1JFR0lPTihyZWdpb24pKQorCQkJciA9IHNucHJpbnRmKHAs IGxlbiwgIiVzJWQtIiwKKwkJCQkgICAgIGdldF9tZW1vcnlfcmVnaW9uX25hbWUocmVnaW9uKSwK KwkJCQkgICAgIE1FTU9SWV9JTlNUQU5DRV9GUk9NX1JFR0lPTihyZWdpb24pKTsKKwkJZWxzZQor CQkJciA9IHNucHJpbnRmKHAsIGxlbiwgIiVzLSIsCisJCQkJICAgICBnZXRfbWVtb3J5X3JlZ2lv bl9uYW1lKHJlZ2lvbikpOworCisJCWlndF9hc3NlcnQociA+IDApOworCQlwICs9IHI7CisJCWxl biAtPSByOworCX0KKworCS8qIHJlbW92ZSBsYXN0ICctJyAqLworCSoocCAtIDEpID0gMDsKKwor CXJldHVybiBuYW1lOworfQorCisvKioKKyAqIGludGVsX2R1bXBfZ3B1X21lbWluZm86CisgKiBA aW5mbzogcG9pbnRlciB0byBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyBzdHJ1Y3R1cmUK KyAqCisgKiBPdXRwdXRzIG1lbW9yeSByZWdpb25zIGFuZCB0aGVpciBzaXplcy4KKyAqLwordm9p ZCBpbnRlbF9kdW1wX2dwdV9tZW1pbmZvKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVn aW9ucyAqaW5mbykKK3sKKwlpbnQgaTsKKworCWlndF9hc3NlcnQoaW5mbyk7CisKKwlpZ3RfaW5m bygiR1BVIG1lbWluZm86XG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5udW1fcmVnaW9u czsgaSsrKSB7CisJCXVpbnQzMl90IHJlZ2lvbiA9IElOVEVMX01FTU9SWV9SRUdJT05fSUQoaW5m by0+cmVnaW9uc1tpXS5yZWdpb24ubWVtb3J5X2NsYXNzLAorCQkJCQkJCSBpbmZvLT5yZWdpb25z W2ldLnJlZ2lvbi5tZW1vcnlfaW5zdGFuY2UpOworCQljb25zdCBjaGFyICpuYW1lID0gZ2V0X21l bW9yeV9yZWdpb25fbmFtZShyZWdpb24pOworCisJCWlndF9pbmZvKCItICVzIFslZF0gbWVtb3J5 IFtzaXplOiAweCVsbHgsIGF2YWlsYWJsZTogMHglbGx4XVxuIiwKKwkJCSBuYW1lLCBpbmZvLT5y ZWdpb25zW2ldLnJlZ2lvbi5tZW1vcnlfaW5zdGFuY2UsCisJCQkgaW5mby0+cmVnaW9uc1tpXS5w cm9iZWRfc2l6ZSwKKwkJCSBpbmZvLT5yZWdpb25zW2ldLnVuYWxsb2NhdGVkX3NpemUpOworCX0K K30KKworLyoqCisgKiBncHVfbWVtaW5mb19yZWdpb25fY291bnQ6CisgKiBAaW5mbzogcG9pbnRl ciB0byBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyBzdHJ1Y3R1cmUKKyAqIEBtZW1vcnlf Y2xhc3M6IG1lbW9yeSByZWdpb24gY2xhc3MKKyAqCisgKiBSZXR1cm5zOiBudW1iZXIgb2YgcmVn aW9ucyBmb3IgdHlwZSBAbWVtb3J5X2NsYXNzCisgKi8KK3VpbnQzMl90IGdwdV9tZW1pbmZvX3Jl Z2lvbl9jb3VudChzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfbWVtb3J5X3JlZ2lvbnMgKmluZm8sCisJ CQkJICB1aW50MTZfdCBtZW1vcnlfY2xhc3MpCit7CisJdWludDMyX3QgbnVtID0gMDsKKwlpbnQg aTsKKworCWlndF9hc3NlcnQoaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3Jl Z2lvbnM7IGkrKykKKwkJaWYgKGluZm8tPnJlZ2lvbnNbaV0ucmVnaW9uLm1lbW9yeV9jbGFzcyA9 PSBtZW1vcnlfY2xhc3MpCisJCQludW0rKzsKKworCXJldHVybiBudW07Cit9CisKKy8qKgorICog Z3B1X21lbWluZm9fcmVnaW9uX3RvdGFsX3NpemU6CisgKiBAaW5mbzogcG9pbnRlciB0byBkcm1f aTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyBzdHJ1Y3R1cmUKKyAqIEBtZW1vcnlfY2xhc3M6IG1l bW9yeSByZWdpb24gY2xhc3MKKyAqCisgKiBSZXR1cm5zOiB0b3RhbCBzaXplIG9mIGFsbCByZWdp b25zIHdoaWNoIGFyZSB0eXBlIEBtZW1vcnlfY2xhc3MsIC0xIHdoZW4gdGhlCisgKiBzaXplIG9m IGF0IGxlYXN0IG9uZSByZWdpb24gaXMgdW5rbm93bgorICovCit1aW50NjRfdCBncHVfbWVtaW5m b19yZWdpb25fdG90YWxfc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfbWVtb3J5X3JlZ2lvbnMg KmluZm8sCisJCQkJICAgICAgIHVpbnQxNl90IG1lbW9yeV9jbGFzcykKK3sKKwl1aW50NjRfdCB0 b3RhbCA9IDA7CisJaW50IGk7CisKKwlpZ3RfYXNzZXJ0KGluZm8pOworCisJZm9yIChpID0gMDsg aSA8IGluZm8tPm51bV9yZWdpb25zOyBpKyspCisJCWlmIChpbmZvLT5yZWdpb25zW2ldLnJlZ2lv bi5tZW1vcnlfY2xhc3MgPT0gbWVtb3J5X2NsYXNzKSB7CisJCQlpZiAoaW5mby0+cmVnaW9uc1tp XS5wcm9iZWRfc2l6ZSA9PSAtMSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCXRvdGFsICs9IGluZm8t PnJlZ2lvbnNbaV0ucHJvYmVkX3NpemU7CisJCX0KKworCXJldHVybiB0b3RhbDsKK30KKworLyoq CisgKiBncHVfbWVtaW5mb19yZWdpb25fdG90YWxfYXZhaWxhYmxlOgorICogQGluZm86IHBvaW50 ZXIgdG8gZHJtX2k5MTVfcXVlcnlfbWVtb3J5X3JlZ2lvbnMgc3RydWN0dXJlCisgKiBAbWVtb3J5 X2NsYXNzOiBtZW1vcnkgcmVnaW9uIGNsYXNzCisgKgorICogUmV0dXJuczogYXZhaWxhYmxlIHNp emUgb2YgYWxsIHJlZ2lvbnMgd2hpY2ggYXJlIHR5cGUgQG1lbW9yeV9jbGFzcywgLTEgd2hlbgor ICogdGhlIHNpemUgb2YgYXQgbGVhc3Qgb25lIHJlZ2lvbiBjYW5ub3QgYmUgZXN0aW1hdGVkCisg Ki8KK3VpbnQ2NF90IGdwdV9tZW1pbmZvX3JlZ2lvbl90b3RhbF9hdmFpbGFibGUoc3RydWN0IGRy bV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25zICppbmZvLAorCQkJCQkgICAgdWludDE2X3QgbWVt b3J5X2NsYXNzKQoreworCXVpbnQ2NF90IGF2YWlsID0gMDsKKwlpbnQgaTsKKworCWlndF9hc3Nl cnQoaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3JlZ2lvbnM7IGkrKykKKwkJ aWYgKGluZm8tPnJlZ2lvbnNbaV0ucmVnaW9uLm1lbW9yeV9jbGFzcyA9PSBtZW1vcnlfY2xhc3Mp IHsKKwkJCWlmIChpbmZvLT5yZWdpb25zW2ldLnVuYWxsb2NhdGVkX3NpemUgPT0gLTEpCisJCQkJ cmV0dXJuIC0xOworCisJCQlhdmFpbCArPSBpbmZvLT5yZWdpb25zW2ldLnVuYWxsb2NhdGVkX3Np emU7CisJCX0KKworCXJldHVybiBhdmFpbDsKK30KKworLyoqCisgKiBncHVfbWVtaW5mb19yZWdp b25fc2l6ZToKKyAqIEBpbmZvOiBwb2ludGVyIHRvIGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdp b25zIHN0cnVjdHVyZQorICogQG1lbW9yeV9jbGFzczogbWVtb3J5IHJlZ2lvbiBjbGFzcworICog QG1lbW9yeV9pbnN0YW5jZTogbWVtb3J5IHJlZ2lvbiBpbnN0YW5jZQorICoKKyAqIFJldHVybnM6 IGF2YWlsYWJsZSBzaXplIG9mIEBtZW1vcnlfaW5zdGFuY2Ugd2hpY2ggdHlwZSBpcyBAbWVtb3J5 X2NsYXNzLCAtMQorICogd2hlbiB0aGUgc2l6ZSBpcyB1bmtub3duCisgKi8KK3VpbnQ2NF90IGdw dV9tZW1pbmZvX3JlZ2lvbl9zaXplKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9u cyAqaW5mbywKKwkJCQkgdWludDE2X3QgbWVtb3J5X2NsYXNzLAorCQkJCSB1aW50MTZfdCBtZW1v cnlfaW5zdGFuY2UpCit7CisJaW50IGk7CisKKwlpZ3RfYXNzZXJ0KGluZm8pOworCisJZm9yIChp ID0gMDsgaSA8IGluZm8tPm51bV9yZWdpb25zOyBpKyspCisJCWlmIChpbmZvLT5yZWdpb25zW2ld LnJlZ2lvbi5tZW1vcnlfY2xhc3MgPT0gbWVtb3J5X2NsYXNzICYmCisJCSAgICAgaW5mby0+cmVn aW9uc1tpXS5yZWdpb24ubWVtb3J5X2luc3RhbmNlID09IG1lbW9yeV9pbnN0YW5jZSkKKwkJCXJl dHVybiBpbmZvLT5yZWdpb25zW2ldLnByb2JlZF9zaXplOworCisJcmV0dXJuIDA7Cit9CisKKy8q KgorICogZ3B1X21lbWluZm9fcmVnaW9uX2F2YWlsYWJsZToKKyAqIEBpbmZvOiBwb2ludGVyIHRv IGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25zIHN0cnVjdHVyZQorICogQG1lbW9yeV9jbGFz czogbWVtb3J5IHJlZ2lvbiBjbGFzcworICogQG1lbW9yeV9pbnN0YW5jZTogbWVtb3J5IHJlZ2lv biBpbnN0YW5jZQorICoKKyAqIFJldHVybnM6IGF2YWlsYWJsZSBzaXplIG9mIEBtZW1vcnlfaW5z dGFuY2UgcmVnaW9uIHdoaWNoIHR5cGUgaXMKKyAqIEBtZW1vcnlfY2xhc3MsIC0xIHdoZW4gdGhl IHNpemUgY2Fubm90IGJlIGVzdGltYXRlZAorICovCit1aW50NjRfdCBncHVfbWVtaW5mb19yZWdp b25fYXZhaWxhYmxlKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyAqaW5mbywK KwkJCQkgICAgICB1aW50MTZfdCBtZW1vcnlfY2xhc3MsCisJCQkJICAgICAgdWludDE2X3QgbWVt b3J5X2luc3RhbmNlKQoreworCWludCBpOworCisJaWd0X2Fzc2VydChpbmZvKTsKKworCWZvciAo aSA9IDA7IGkgPCBpbmZvLT5udW1fcmVnaW9uczsgaSsrKQorCQlpZiAoaW5mby0+cmVnaW9uc1tp XS5yZWdpb24ubWVtb3J5X2NsYXNzID09IG1lbW9yeV9jbGFzcyAmJgorCQkgICAgIGluZm8tPnJl Z2lvbnNbaV0ucmVnaW9uLm1lbW9yeV9pbnN0YW5jZSA9PSBtZW1vcnlfaW5zdGFuY2UpCisJCQly ZXR1cm4gaW5mby0+cmVnaW9uc1tpXS51bmFsbG9jYXRlZF9zaXplOworCisJcmV0dXJuIDA7Cit9 CmRpZmYgLS1naXQgYS9saWIvaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmggYi9saWIvaTkxNS9p bnRlbF9tZW1vcnlfcmVnaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LmU5ZDFkNjZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lv bi5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMjAgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNo YXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJl IGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0 aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNF LCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZU V0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisg Ki8KKyNpbmNsdWRlICJpZ3RfY29sbGVjdGlvbi5oIgorCisjaWZuZGVmIElOVEVMX01FTU9SWV9S RUdJT05fSAorI2RlZmluZSBJTlRFTF9NRU1PUllfUkVHSU9OX0gKKworI2RlZmluZSBJOTE1X1NZ U1RFTV9NRU1PUlkgSTkxNV9NRU1PUllfQ0xBU1NfU1lTVEVNCisjZGVmaW5lIEk5MTVfREVWSUNF X01FTU9SWSBJOTE1X01FTU9SWV9DTEFTU19ERVZJQ0UKKyNkZWZpbmUgSTkxNV9TVE9MRU5fU1lT VEVNX01FTU9SWSBJOTE1X01FTU9SWV9DTEFTU19TVE9MRU5fU1lTVEVNCisjZGVmaW5lIEk5MTVf U1RPTEVOX0RFVklDRV9NRU1PUlkgSTkxNV9NRU1PUllfQ0xBU1NfU1RPTEVOX0RFVklDRQorCisj ZGVmaW5lIElOVEVMX01FTU9SWV9SRUdJT05fSUQodHlwZSwgaW5zdGFuY2UpICgodHlwZSkgPDwg MTZ1IHwgKGluc3RhbmNlKSkKKyNkZWZpbmUgTUVNT1JZX1RZUEVfRlJPTV9SRUdJT04ocikgKChy KSA+PiAxNnUpCisjZGVmaW5lIE1FTU9SWV9JTlNUQU5DRV9GUk9NX1JFR0lPTihyKSAoKHIpICYg MHhmZmZmKQorCisjZGVmaW5lIElTX01FTU9SWV9SRUdJT05fVFlQRShyZWdpb24sIHR5cGUpIFwK KwkoTUVNT1JZX1RZUEVfRlJPTV9SRUdJT04ocmVnaW9uKSA9PSB0eXBlKQorCisjZGVmaW5lIElT X0RFVklDRV9NRU1PUllfUkVHSU9OKHJlZ2lvbikgXAorCUlTX01FTU9SWV9SRUdJT05fVFlQRShy ZWdpb24sIEk5MTVfTUVNT1JZX0NMQVNTX0RFVklDRSkKKyNkZWZpbmUgSVNfU1lTVEVNX01FTU9S WV9SRUdJT04ocmVnaW9uKSBcCisJSVNfTUVNT1JZX1JFR0lPTl9UWVBFKHJlZ2lvbiwgSTkxNV9N RU1PUllfQ0xBU1NfU1lTVEVNKQorCisjZGVmaW5lIElTX1NUT0xFTl9NRU1PUllfUkVHSU9OKHJl Z2lvbikgXAorCShJU19NRU1PUllfUkVHSU9OX1RZUEUocmVnaW9uLCBJOTE1X01FTU9SWV9DTEFT U19TVE9MRU5fU1lTVEVNKSB8fCBcCisJIElTX01FTU9SWV9SRUdJT05fVFlQRShyZWdpb24sIEk5 MTVfTUVNT1JZX0NMQVNTX1NUT0xFTl9ERVZJQ0UpKQorCisjZGVmaW5lIFJFR0lPTl9TTUVNICAg IElOVEVMX01FTU9SWV9SRUdJT05fSUQoSTkxNV9NRU1PUllfQ0xBU1NfU1lTVEVNLCAwKQorI2Rl ZmluZSBSRUdJT05fTE1FTShuKSBJTlRFTF9NRU1PUllfUkVHSU9OX0lEKEk5MTVfTUVNT1JZX0NM QVNTX0RFVklDRSwgKG4pKQorI2RlZmluZSBSRUdJT05fU1RMTl9TTUVNKG4pIElOVEVMX01FTU9S WV9SRUdJT05fSUQoSTkxNV9NRU1PUllfQ0xBU1NfU1RPTEVOX1NZU1RFTSwgKG4pKQorI2RlZmlu ZSBSRUdJT05fU1RMTl9MTUVNKG4pIElOVEVMX01FTU9SWV9SRUdJT05fSUQoSTkxNV9NRU1PUllf Q0xBU1NfU1RPTEVOX0RFVklDRSwgKG4pKQorCitib29sIGdlbV9oYXNfcXVlcnlfc3VwcG9ydChp bnQgZmQpOworCitjb25zdCBjaGFyICpnZXRfbWVtb3J5X3JlZ2lvbl9uYW1lKHVpbnQzMl90IHJl Z2lvbik7Cit1aW50MzJfdCBnZW1fZ2V0X2JhdGNoX3NpemUoaW50IGZkLCB1aW50OF90IG1lbV9y ZWdpb25fdHlwZSk7CisKK3N0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyAqZ2Vt X2dldF9xdWVyeV9tZW1vcnlfcmVnaW9ucyhpbnQgZmQpOworCit1aW50OF90IGdlbV9nZXRfbG1l bV9yZWdpb25fY291bnQoaW50IGZkKTsKKworYm9vbCBnZW1faGFzX2xtZW0oaW50IGZkKTsKKwor aW50IF9fZ2VtX2NyZWF0ZV9pbl9tZW1vcnlfcmVnaW9uX2xpc3QoaW50IGZkLCB1aW50MzJfdCAq aGFuZGxlLCB1aW50NjRfdCBzaXplLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21l bW9yeV9jbGFzc19pbnN0YW5jZSAqbWVtX3JlZ2lvbnMsCisJCQkJICAgICAgIGludCBudW1fcmVn aW9ucyk7CisKK3VpbnQzMl90IGdlbV9jcmVhdGVfaW5fbWVtb3J5X3JlZ2lvbl9saXN0KGludCBm ZCwgdWludDY0X3Qgc2l6ZSwKKwkJCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21lbW9yeV9jbGFz c19pbnN0YW5jZSAqbWVtX3JlZ2lvbnMsCisJCQkJCSAgaW50IG51bV9yZWdpb25zKTsKKworLyoK KyAqIFhYWDogdGhlIHdob2xlIGNvbnZlcnRpbmcgdG8gY2xhc3NfaW5zdGFuY2UgdGhpbmcgaXMg bWVhbnQgYXMgYSB0ZW1wb3JhcnkKKyAqIHN0b3AgZ2FwIHdoaWNoIHNob3VsZCBrZWVwIGV2ZXJ5 dGhpbmcgd29ya2luZywgc3VjaCB0aGF0IHdlIGRvbid0IGhhdmUgdG8KKyAqIHJld3JpdGUgdGhl IHdvcmxkIGluIG9uZSBnbyB0byBmaXQgdGhlIG5ldyB1QVBJLgorICovCisjZGVmaW5lIF9fZ2Vt X2NyZWF0ZV9pbl9tZW1vcnlfcmVnaW9ucyhmZCwgaGFuZGxlLCBzaXplLCByZWdpb25zLi4uKSAo eyBcCisJdW5zaWduZWQgaW50IGFycl9fW10gPSB7IHJlZ2lvbnMgfTsgXAorCXN0cnVjdCBkcm1f aTkxNV9nZW1fbWVtb3J5X2NsYXNzX2luc3RhbmNlIGFycl9xdWVyeV9fW0FSUkFZX1NJWkUoYXJy X18pXTsgXAorCWZvciAoaW50IGlfXyAgPSAwOyBpX18gPCBBUlJBWV9TSVpFKGFycl9xdWVyeV9f KTsgKytpX18pIHsgXAorCQlhcnJfcXVlcnlfX1tpX19dLm1lbW9yeV9jbGFzcyA9IE1FTU9SWV9U WVBFX0ZST01fUkVHSU9OKGFycl9fW2lfX10pOyAgXAorCQlhcnJfcXVlcnlfX1tpX19dLm1lbW9y eV9pbnN0YW5jZSA9IE1FTU9SWV9JTlNUQU5DRV9GUk9NX1JFR0lPTihhcnJfX1tpX19dKTsgIFwK Kwl9IFwKKwlfX2dlbV9jcmVhdGVfaW5fbWVtb3J5X3JlZ2lvbl9saXN0KGZkLCBoYW5kbGUsIHNp emUsIGFycl9xdWVyeV9fLCBBUlJBWV9TSVpFKGFycl9xdWVyeV9fKSk7IFwKK30pCisjZGVmaW5l IGdlbV9jcmVhdGVfaW5fbWVtb3J5X3JlZ2lvbnMoZmQsIHNpemUsIHJlZ2lvbnMuLi4pICh7IFwK Kwl1bnNpZ25lZCBpbnQgYXJyX19bXSA9IHsgcmVnaW9ucyB9OyBcCisJc3RydWN0IGRybV9pOTE1 X2dlbV9tZW1vcnlfY2xhc3NfaW5zdGFuY2UgYXJyX3F1ZXJ5X19bQVJSQVlfU0laRShhcnJfXyld OyBcCisJZm9yIChpbnQgaV9fICA9IDA7IGlfXyA8IEFSUkFZX1NJWkUoYXJyX3F1ZXJ5X18pOyAr K2lfXykgeyBcCisJCWFycl9xdWVyeV9fW2lfX10ubWVtb3J5X2NsYXNzID0gTUVNT1JZX1RZUEVf RlJPTV9SRUdJT04oYXJyX19baV9fXSk7ICBcCisJCWFycl9xdWVyeV9fW2lfX10ubWVtb3J5X2lu c3RhbmNlID0gTUVNT1JZX0lOU1RBTkNFX0ZST01fUkVHSU9OKGFycl9fW2lfX10pOyAgXAorCX0g XAorCWdlbV9jcmVhdGVfaW5fbWVtb3J5X3JlZ2lvbl9saXN0KGZkLCBzaXplLCBhcnJfcXVlcnlf XywgQVJSQVlfU0laRShhcnJfcXVlcnlfXykpOyBcCit9KQorCitzdHJ1Y3QgaWd0X2NvbGxlY3Rp b24gKgorX19nZXRfbWVtb3J5X3JlZ2lvbl9zZXQoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X21lbW9y eV9yZWdpb25zICpyZWdpb25zLAorCQkJdWludDMyX3QgKm1lbV9yZWdpb25zX3R5cGUsCisJCQlp bnQgbnVtX3JlZ2lvbnMpOworCisvKgorICogSGVscGVyIG1hY3JvIHRvIGNyZWF0ZSBpZ3RfY29s bGVjdGlvbiB3aGljaCBjb250YWlucyBhbGwgbWVtb3J5IHJlZ2lvbnMKKyAqIHdoaWNoIG1hdGNo ZXMgbWVtX3JlZ2lvbl90eXBlcyBhcnJheS4gVXNlZnVsIHRvIGZpbHRlciBvdXQgc3RvbGVuIG1l bW9yeQorICogZnJvbSBhY2Nlc3NpYmxlIG1lbW9yeSByZWdpb25zLgorICovCisjZGVmaW5lIGdl dF9tZW1vcnlfcmVnaW9uX3NldChyZWdpb25zLCBtZW1fcmVnaW9uX3R5cGVzLi4uKSAoeyBcCisJ dW5zaWduZWQgaW50IGFycl9fW10gPSB7IG1lbV9yZWdpb25fdHlwZXMgfTsgXAorCV9fZ2V0X21l bW9yeV9yZWdpb25fc2V0KHJlZ2lvbnMsIGFycl9fLCBBUlJBWV9TSVpFKGFycl9fKSk7IFwKK30p CisKK2NoYXIgKm1lbXJlZ2lvbl9keW5hbWljX3N1YnRlc3RfbmFtZShzdHJ1Y3QgaWd0X2NvbGxl Y3Rpb24gKnNldCk7CisKK3ZvaWQgaW50ZWxfZHVtcF9ncHVfbWVtaW5mbyhzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfbWVtb3J5X3JlZ2lvbnMgKmluZm8pOworCit1aW50MzJfdCBncHVfbWVtaW5mb19y ZWdpb25fY291bnQoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25zICppbmZvLAor CQkJCSAgdWludDE2X3QgcmVnaW9uX2NsYXNzKTsKK3VpbnQ2NF90IGdwdV9tZW1pbmZvX3JlZ2lv bl90b3RhbF9zaXplKHN0cnVjdCBkcm1faTkxNV9xdWVyeV9tZW1vcnlfcmVnaW9ucyAqaW5mbywK KwkJCQkgICAgICAgdWludDE2X3QgcmVnaW9uX2NsYXNzKTsKK3VpbnQ2NF90IGdwdV9tZW1pbmZv X3JlZ2lvbl90b3RhbF9hdmFpbGFibGUoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdp b25zICppbmZvLAorCQkJCQkgICAgdWludDE2X3QgcmVnaW9uX3R5cGUpOworCit1aW50NjRfdCBn cHVfbWVtaW5mb19yZWdpb25fc2l6ZShzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfbWVtb3J5X3JlZ2lv bnMgKmluZm8sCisJCQkJIHVpbnQxNl90IG1lbW9yeV9jbGFzcywKKwkJCQkgdWludDE2X3QgbWVt b3J5X2luc3RhbmNlKTsKK3VpbnQ2NF90IGdwdV9tZW1pbmZvX3JlZ2lvbl9hdmFpbGFibGUoc3Ry dWN0IGRybV9pOTE1X3F1ZXJ5X21lbW9yeV9yZWdpb25zICppbmZvLAorCQkJCSAgICAgIHVpbnQx Nl90IG1lbW9yeV9jbGFzcywKKwkJCQkgICAgICB1aW50MTZfdCBtZW1vcnlfaW5zdGFuY2UpOwor CisjZW5kaWYgLyogSU5URUxfTUVNT1JZX1JFR0lPTl9IICovCmRpZmYgLS1naXQgYS9saWIvaW9j dGxfd3JhcHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCmluZGV4IDllYTY3MzY1Li4zNjY0 MGUzMCAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmgKKysrIGIvbGliL2lvY3RsX3dy YXBwZXJzLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgImk5MTUvZ2VtX2NvbnRleHQu aCIKICNpbmNsdWRlICJpOTE1L2dlbV9zY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJpOTE1L2ludGVs X21lbW9yeV9yZWdpb24uaCIKIAogLyoqCiAgKiBpZ3RfaW9jdGw6CmRpZmYgLS1naXQgYS9saWIv bWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQKaW5kZXggZDVhMWM5NzAuLjA3OGEzNTdiIDEw MDY0NAotLS0gYS9saWIvbWVzb24uYnVpbGQKKysrIGIvbGliL21lc29uLmJ1aWxkCkBAIC0xMCw2 ICsxMCw3IEBAIGxpYl9zb3VyY2VzID0gWwogCSdpOTE1L2dlbV9yaW5nLmMnLAogCSdpOTE1L2dl bV9tbWFuLmMnLAogCSdpOTE1L2dlbV92bS5jJywKKwknaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9u LmMnLAogCSdpZ3RfY29sbGVjdGlvbi5jJywKIAknaWd0X2NvbG9yX2VuY29kaW5nLmMnLAogCSdp Z3RfZGVidWdmcy5jJywKLS0gCjIuMjYuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cg==