From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH -next 01/11] drm/vmwgfx: Add a cpu blit utility that can be used for page-backed bos Date: Thu, 22 Mar 2018 11:23:42 +0100 Message-ID: <20180322102352.2881-1-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0054.outbound.protection.outlook.com [104.47.40.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9F1CD6EBBD for ; Thu, 22 Mar 2018 10:24:34 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-graphics-maintainer@vmware.com List-Id: dri-devel@lists.freedesktop.org VGhlIHV0aWxpdHkgdXNlcyBrbWFwX2F0b21pYygpIGluc3RlYWQgb2Ygdm1hcHBpbmcgdGhlIHdo b2xlIGJ1ZmZlcgpvYmplY3QuIEFzIGEgcmVzdWx0IHRoZXJlIHdpbGwgYmUgbW9yZSBib29rLWtl ZXBpbmcgYnV0IG9uIHNvbWUKYXJjaGl0ZWN0dXJlcyB0aGlzIHdpbGwgaGVscCBhdm9pZCBleGhh dXN0aW5nIHZtYWxsb2Mgc3BhY2UgYW5kIGFsc28KYXZvaWQgZXhwZW5zaXZlIFRMQiBmbHVzaGVz LgoKVGhlIGJsaXQgdXRpbGl0eSBhbHNvIGFkZHMgYSBwcm92aXNpb24gdG8gY29tcHV0ZSBhIGJv dW5kaW5nIGJveCBvZgpjaGFuZ2VkIGNvbnRlbnQsIHdoaWNoIGlzIHZlcnkgdXNlZnVsIHRvIG9w dGltaXplIHByZXNlbnRhdGlvbiBzcGVlZApvZiBpbGwtYmVoYXZlZCBhcHBsaWNhdGlvbnMgdGhh dCBkb24ndCBzdXBwbHkgcHJvcGVyIGRhbWFnZSByZWdpb25zLCBhbmQKZm9yIHBhZ2UtZmxpcHMu IFRoZSBjb3N0IG9mIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgYm94IGlzIG5vdCB0aGF0CmV4cGVu c2l2ZSB3aGVuIGRvbmUgaW4gYSBjcHUtYmxpdCB1dGlsaXR5IGxpa2UgdGhpcy4KClNpZ25lZC1v ZmYtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQt Ynk6IEJyaWFuIFBhdWwgPGJyaWFucEB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvTWFrZWZpbGUgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfYmxpdC5jIHwgNTA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAgfCAgNDggKysrKwogMyBmaWxlcyBjaGFu Z2VkLCA1NTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYwoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2Vm aWxlCmluZGV4IGFkODAyMTFlMTA5OC4uNzk0Y2M5ZDVjOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFr ZWZpbGUKQEAgLTcsNiArNyw2IEBAIHZtd2dmeC15IDo9IHZtd2dmeF9leGVjYnVmLm8gdm13Z2Z4 X2dtci5vIHZtd2dmeF9rbXMubyB2bXdnZnhfZHJ2Lm8gXAogCSAgICB2bXdnZnhfc3VyZmFjZS5v IHZtd2dmeF9wcmltZS5vIHZtd2dmeF9tb2IubyB2bXdnZnhfc2hhZGVyLm8gXAogCSAgICB2bXdn ZnhfY21kYnVmX3Jlcy5vIHZtd2dmeF9jbWRidWYubyB2bXdnZnhfc3RkdS5vIFwKIAkgICAgdm13 Z2Z4X2NvdGFibGUubyB2bXdnZnhfc28ubyB2bXdnZnhfYmluZGluZy5vIHZtd2dmeF9tc2cubyBc Ci0JICAgIHZtd2dmeF9zaW1wbGVfcmVzb3VyY2UubyB2bXdnZnhfdmEubworCSAgICB2bXdnZnhf c2ltcGxlX3Jlc291cmNlLm8gdm13Z2Z4X3ZhLm8gdm13Z2Z4X2JsaXQubwogCiBvYmotJChDT05G SUdfRFJNX1ZNV0dGWCkgOj0gdm13Z2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI3MzA0MDNlOGRmOQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYwpA QCAtMCwwICsxLDUwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKp IDIwMTcgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJl c2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwg dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisg KiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMK KyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlO RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywg QVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAq IERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJ TkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRl ICJ2bXdnZnhfZHJ2LmgiCisKKy8qCisgKiBUZW1wbGF0ZSB0aGF0IGltcGxlbWVudHMgZmluZF9m aXJzdF9kaWZmKCkgZm9yIGEgZ2VuZXJpYworICogdW5zaWduZWQgaW50ZWdlciB0eXBlLiBAc2l6 ZSBhbmQgcmV0dXJuIHZhbHVlIGFyZSBpbiBieXRlcy4KKyAqLworI2RlZmluZSBWTVdfRklORF9G SVJTVF9ESUZGKF90eXBlKQkJCSBcCitzdGF0aWMgc2l6ZV90IHZtd19maW5kX2ZpcnN0X2RpZmZf ICMjIF90eXBlCQkgXAorCShjb25zdCBfdHlwZSAqIGRzdCwgY29uc3QgX3R5cGUgKiBzcmMsIHNp emVfdCBzaXplKVwKK3sJCQkJCQkJIFwKKwlzaXplX3QgaTsJCQkJCSBcCisJCQkJCQkJIFwKKwlm b3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBzaXplb2YoX3R5cGUpKSB7CSBcCisJCWlmICgqZHN0 KysgIT0gKnNyYysrKQkJCSBcCisJCQlicmVhazsJCQkJIFwKKwl9CQkJCQkJIFwKKwkJCQkJCQkg XAorCXJldHVybiBpOwkJCQkJIFwKK30KKworCisvKgorICogVGVtcGxhdGUgdGhhdCBpbXBsZW1l bnRzIGZpbmRfbGFzdF9kaWZmKCkgZm9yIGEgZ2VuZXJpYworICogdW5zaWduZWQgaW50ZWdlciB0 eXBlLiBQb2ludGVycyBwb2ludCB0byB0aGUgaXRlbSBmb2xsb3dpbmcgdGhlCisgKiAqZW5kKiBv ZiB0aGUgYXJlYSB0byBiZSBleGFtaW5lZC4gQHNpemUgYW5kIHJldHVybiB2YWx1ZSBhcmUgaW4K KyAqIGJ5dGVzLgorICovCisjZGVmaW5lIFZNV19GSU5EX0xBU1RfRElGRihfdHlwZSkJCQkJCVwK K3N0YXRpYyBzc2l6ZV90IHZtd19maW5kX2xhc3RfZGlmZl8gIyMgX3R5cGUoCQkJCVwKKwljb25z dCBfdHlwZSAqIGRzdCwgY29uc3QgX3R5cGUgKiBzcmMsIHNpemVfdCBzaXplKQkJXAorewkJCQkJ CQkJCVwKKwl3aGlsZSAoc2l6ZSkgewkJCQkJCQlcCisJCWlmICgqLS1kc3QgIT0gKi0tc3JjKQkJ CQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlzaXplIC09IHNpemVvZihfdHlw ZSk7CQkJCQlcCisJfQkJCQkJCQkJXAorCXJldHVybiBzaXplOwkJCQkJCQlcCit9CisKKworLyoK KyAqIEluc3RhbnRpYXRlIGZpbmQgZGlmZiBmdW5jdGlvbnMgZm9yIHJlbGV2YW50IHVuc2lnbmVk IGludGVnZXIgc2l6ZXMsCisgKiBhc3N1bWluZyB0aGF0IHdpZGVyIGludGVnZXJzIGFyZSBmYXN0 ZXIgKGluY2x1ZGluZyBhbGlnbmluZykgdXAgdG8gdGhlCisgKiBhcmNoaXRlY3R1cmUgbmF0aXZl IHdpZHRoLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIDMyIGJpdCB1bmxlc3MKKyAqIENPTkZJR182 NEJJVCBpcyBkZWZpbmVkLgorICovCitWTVdfRklORF9GSVJTVF9ESUZGKHU4KTsKK1ZNV19GSU5E X0xBU1RfRElGRih1OCk7CisKK1ZNV19GSU5EX0ZJUlNUX0RJRkYodTE2KTsKK1ZNV19GSU5EX0xB U1RfRElGRih1MTYpOworCitWTVdfRklORF9GSVJTVF9ESUZGKHUzMik7CitWTVdfRklORF9MQVNU X0RJRkYodTMyKTsKKworI2lmZGVmIENPTkZJR182NEJJVAorVk1XX0ZJTkRfRklSU1RfRElGRih1 NjQpOworVk1XX0ZJTkRfTEFTVF9ESUZGKHU2NCk7CisjZW5kaWYKKworCisvKiBXZSB1c2Ugc2l6 ZSBhbGlnbmVkIGNvcGllcy4gVGhpcyBjb21wdXRlcyAoYWRkciAtIGFsaWduKGFkZHIpKSAqLwor I2RlZmluZSBTUElMTChfdmFyLCBfdHlwZSkgKCh1bnNpZ25lZCBsb25nKSBfdmFyICYgKHNpemVv ZihfdHlwZSkgLSAxKSkKKworCisvKgorICogVGVtcGxhdGUgdG8gY29tcHV0ZSBmaW5kX2ZpcnN0 X2RpZmYoKSBmb3IgYSBjZXJ0YWluIGludGVnZXIgdHlwZQorICogaW5jbHVkaW5nIGEgaGVhZCBj b3B5IGZvciBhbGlnbm1lbnQsIGFuZCBhZGp1c3RtZW50IG9mIHBhcmFtZXRlcnMKKyAqIGZvciB0 YWlsIGZpbmQgb3IgaW5jcmVhc2VkIHJlc29sdXRpb24gZmluZCB1c2luZyBhbiB1bnNpZ25lZCBp bnRlZ2VyIGZpbmQKKyAqIG9mIHNtYWxsZXIgd2lkdGguIElmIGZpbmRpbmcgaXMgY29tcGxldGUs IGFuZCByZXNvbHV0aW9uIGlzIHN1ZmZpY2llbnQsCisgKiB0aGUgbWFjcm8gZXhlY3V0ZXMgYSBy ZXR1cm4gc3RhdGVtZW50LiBPdGhlcndpc2UgaXQgZmFsbHMgdGhyb3VnaC4KKyAqLworI2RlZmlu ZSBWTVdfVFJZX0ZJTkRfRklSU1RfRElGRihfdHlwZSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJ dW5zaWduZWQgaW50IHNwaWxsID0gU1BJTEwoZHN0LCBfdHlwZSk7CQkJCVwKKwlzaXplX3QgZGlm Zl9vZmZzOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3BpbGwgJiYgc3BpbGwgPT0gU1BJTEwo c3JjLCBfdHlwZSkgJiYJCQlcCisJICAgIHNpemVvZihfdHlwZSkgLSBzcGlsbCA8PSBzaXplKSB7 CQkJCVwKKwkJc3BpbGwgPSBzaXplb2YoX3R5cGUpIC0gc3BpbGw7CQkJCVwKKwkJZGlmZl9vZmZz ID0gdm13X2ZpbmRfZmlyc3RfZGlmZl91OChkc3QsIHNyYywgc3BpbGwpOwlcCisJCWlmIChkaWZm X29mZnMgPCBzcGlsbCkJCQkJCVwKKwkJCXJldHVybiByb3VuZF9kb3duKG9mZnNldCArIGRpZmZf b2ZmcywgZ3JhbnVsYXJpdHkpOyBcCisJCQkJCQkJCQlcCisJCWRzdCArPSBzcGlsbDsJCQkJCQlc CisJCXNyYyArPSBzcGlsbDsJCQkJCQlcCisJCXNpemUgLT0gc3BpbGw7CQkJCQkJXAorCQlvZmZz ZXQgKz0gc3BpbGw7CQkJCQlcCisJCXNwaWxsID0gMDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlm ICghc3BpbGwgJiYgIVNQSUxMKHNyYywgX3R5cGUpKSB7CQkJCVwKKwkJc2l6ZV90IHRvX2NvcHkg PSBzaXplICYJIH4oc2l6ZW9mKF90eXBlKSAtIDEpOwkJXAorCQkJCQkJCQkJXAorCQlkaWZmX29m ZnMgPSB2bXdfZmluZF9maXJzdF9kaWZmXyAjIyBfdHlwZQkJXAorCQkJKChfdHlwZSAqKSBkc3Qs IChfdHlwZSAqKSBzcmMsIHRvX2NvcHkpOwlcCisJCWlmIChkaWZmX29mZnMgPj0gc2l6ZSB8fCBn cmFudWxhcml0eSA9PSBzaXplb2YoX3R5cGUpKQlcCisJCQlyZXR1cm4gKG9mZnNldCArIGRpZmZf b2Zmcyk7CQkJXAorCQkJCQkJCQkJXAorCQlkc3QgKz0gZGlmZl9vZmZzOwkJCQkJXAorCQlzcmMg Kz0gZGlmZl9vZmZzOwkJCQkJXAorCQlzaXplIC09IGRpZmZfb2ZmczsJCQkJCVwKKwkJb2Zmc2V0 ICs9IGRpZmZfb2ZmczsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQkJCQkJCQkJXAor CisKKy8qKgorICogdm13X2ZpbmRfZmlyc3RfZGlmZiAtIGZpbmQgdGhlIGZpcnN0IGRpZmZlcmVu Y2UgYmV0d2VlbiBkc3QgYW5kIHNyYworICoKKyAqIEBkc3Q6IFRoZSBkZXN0aW5hdGlvbiBhZGRy ZXNzCisgKiBAc3JjOiBUaGUgc291cmNlIGFkZHJlc3MKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0 ZXMgdG8gY29tcGFyZQorICogQGdyYW51bGFyaXR5OiBUaGUgZ3JhbnVsYXJpdHkgbmVlZGVkIGZv ciB0aGUgcmV0dXJuIHZhbHVlIGluIGJ5dGVzLgorICogcmV0dXJuOiBUaGUgb2Zmc2V0IGZyb20g ZmluZCBzdGFydCB3aGVyZSB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3YXMKKyAqIGVuY291bnRlcmVk IGluIGJ5dGVzLiBJZiBubyBkaWZmZXJlbmNlIHdhcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVy bnMKKyAqIGEgdmFsdWUgPj0gQHNpemUuCisgKi8KK3N0YXRpYyBzaXplX3Qgdm13X2ZpbmRfZmly c3RfZGlmZihjb25zdCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3Qgc2l6ZSwKKwkJCQkg IHNpemVfdCBncmFudWxhcml0eSkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKworCS8qCisJICog VHJ5IGZpbmRpbmcgd2l0aCBsYXJnZSBpbnRlZ2VycyBpZiBhbGlnbm1lbnQgYWxsb3dzLCBvciB3 ZSBjYW4KKwkgKiBmaXggaXQuIEZhbGwgdGhyb3VnaCBpZiB3ZSBuZWVkIGJldHRlciByZXNvbHV0 aW9uIG9yIGFsaWdubWVudAorCSAqIHdhcyBiYWQuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklU CisJVk1XX1RSWV9GSU5EX0ZJUlNUX0RJRkYodTY0KTsKKyNlbmRpZgorCVZNV19UUllfRklORF9G SVJTVF9ESUZGKHUzMik7CisJVk1XX1RSWV9GSU5EX0ZJUlNUX0RJRkYodTE2KTsKKworCXJldHVy biByb3VuZF9kb3duKG9mZnNldCArIHZtd19maW5kX2ZpcnN0X2RpZmZfdTgoZHN0LCBzcmMsIHNp emUpLAorCQkJICBncmFudWxhcml0eSk7Cit9CisKKworLyoKKyAqIFRlbXBsYXRlIHRvIGNvbXB1 dGUgZmluZF9sYXN0X2RpZmYoKSBmb3IgYSBjZXJ0YWluIGludGVnZXIgdHlwZQorICogaW5jbHVk aW5nIGEgdGFpbCBjb3B5IGZvciBhbGlnbm1lbnQsIGFuZCBhZGp1c3RtZW50IG9mIHBhcmFtZXRl cnMKKyAqIGZvciBoZWFkIGZpbmQgb3IgaW5jcmVhc2VkIHJlc29sdXRpb24gZmluZCB1c2luZyBh biB1bnNpZ25lZCBpbnRlZ2VyIGZpbmQKKyAqIG9mIHNtYWxsZXIgd2lkdGguIElmIGZpbmRpbmcg aXMgY29tcGxldGUsIGFuZCByZXNvbHV0aW9uIGlzIHN1ZmZpY2llbnQsCisgKiB0aGUgbWFjcm8g ZXhlY3V0ZXMgYSByZXR1cm4gc3RhdGVtZW50LiBPdGhlcndpc2UgaXQgZmFsbHMgdGhyb3VnaC4K KyAqLworI2RlZmluZSBWTVdfVFJZX0ZJTkRfTEFTVF9ESUZGKF90eXBlKQkJCQkJXAorZG8gewkJ CQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgc3BpbGwgPSBTUElMTChkc3QsIF90eXBlKTsJCQkJXAor CXNzaXplX3QgbG9jYXRpb247CQkJCQkJXAorCXNzaXplX3QgZGlmZl9vZmZzOwkJCQkJCVwKKwkJ CQkJCQkJCVwKKwlpZiAoc3BpbGwgJiYgc3BpbGwgPD0gc2l6ZSAmJiBzcGlsbCA9PSBTUElMTChz cmMsIF90eXBlKSkgewlcCisJCWRpZmZfb2ZmcyA9IHZtd19maW5kX2xhc3RfZGlmZl91OChkc3Qs IHNyYywgc3BpbGwpOwlcCisJCWlmIChkaWZmX29mZnMpIHsJCQkJCVwKKwkJCWxvY2F0aW9uID0g c2l6ZSAtIHNwaWxsICsgZGlmZl9vZmZzIC0gMTsJXAorCQkJcmV0dXJuIHJvdW5kX2Rvd24obG9j YXRpb24sIGdyYW51bGFyaXR5KTsJXAorCQl9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJZHN0IC09 IHNwaWxsOwkJCQkJCVwKKwkJc3JjIC09IHNwaWxsOwkJCQkJCVwKKwkJc2l6ZSAtPSBzcGlsbDsJ CQkJCQlcCisJCXNwaWxsID0gMDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlmICghc3BpbGwgJiYg IVNQSUxMKHNyYywgX3R5cGUpKSB7CQkJCVwKKwkJc2l6ZV90IHRvX2NvcHkgPSByb3VuZF9kb3du KHNpemUsIHNpemVvZihfdHlwZSkpOwlcCisJCQkJCQkJCQlcCisJCWRpZmZfb2ZmcyA9IHZtd19m aW5kX2xhc3RfZGlmZl8gIyMgX3R5cGUJCVwKKwkJCSgoX3R5cGUgKikgZHN0LCAoX3R5cGUgKikg c3JjLCB0b19jb3B5KTsJXAorCQlsb2NhdGlvbiA9IHNpemUgLSB0b19jb3B5ICsgZGlmZl9vZmZz IC0gc2l6ZW9mKF90eXBlKTsJXAorCQlpZiAobG9jYXRpb24gPCAwIHx8IGdyYW51bGFyaXR5ID09 IHNpemVvZihfdHlwZSkpCVwKKwkJCXJldHVybiBsb2NhdGlvbjsJCQkJXAorCQkJCQkJCQkJXAor CQlkc3QgLT0gdG9fY29weSAtIGRpZmZfb2ZmczsJCQkJXAorCQlzcmMgLT0gdG9fY29weSAtIGRp ZmZfb2ZmczsJCQkJXAorCQlzaXplIC09IHRvX2NvcHkgLSBkaWZmX29mZnM7CQkJCVwKKwl9CQkJ CQkJCQlcCit9IHdoaWxlICgwKQorCisKKy8qKgorICogdm13X2ZpbmRfbGFzdF9kaWZmIC0gZmlu ZCB0aGUgbGFzdCBkaWZmZXJlbmNlIGJldHdlZW4gZHN0IGFuZCBzcmMKKyAqCisgKiBAZHN0OiBU aGUgZGVzdGluYXRpb24gYWRkcmVzcworICogQHNyYzogVGhlIHNvdXJjZSBhZGRyZXNzCisgKiBA c2l6ZTogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmUKKyAqIEBncmFudWxhcml0eTogVGhlIGdy YW51bGFyaXR5IG5lZWRlZCBmb3IgdGhlIHJldHVybiB2YWx1ZSBpbiBieXRlcy4KKyAqIHJldHVy bjogVGhlIG9mZnNldCBmcm9tIGZpbmQgc3RhcnQgd2hlcmUgdGhlIGxhc3QgZGlmZmVyZW5jZSB3 YXMKKyAqIGVuY291bnRlcmVkIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIG5vIGRp ZmZlcmVuY2Ugd2FzIGZvdW5kLgorICovCitzdGF0aWMgc3NpemVfdCB2bXdfZmluZF9sYXN0X2Rp ZmYoY29uc3QgdTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IHNpemUsCisJCQkJICBzaXpl X3QgZ3JhbnVsYXJpdHkpCit7CisJZHN0ICs9IHNpemU7CisJc3JjICs9IHNpemU7CisKKyNpZmRl ZiBDT05GSUdfNjRCSVQKKwlWTVdfVFJZX0ZJTkRfTEFTVF9ESUZGKHU2NCk7CisjZW5kaWYKKwlW TVdfVFJZX0ZJTkRfTEFTVF9ESUZGKHUzMik7CisJVk1XX1RSWV9GSU5EX0xBU1RfRElGRih1MTYp OworCisJcmV0dXJuIHJvdW5kX2Rvd24odm13X2ZpbmRfbGFzdF9kaWZmX3U4KGRzdCwgc3JjLCBz aXplKSAtIDEsCisJCQkgIGdyYW51bGFyaXR5KTsKK30KKworCisvKioKKyAqIHZtd19tZW1jcHkg LSBBIHdyYXBwZXIgYXJvdW5kIGtlcm5lbCBtZW1jcHkgd2l0aCBhbGxvd2luZyB0byBwbHVnIGl0 IGludG8gYQorICogc3RydWN0IHZtd19kaWZmX2NweS4KKyAqCisgKiBAZGlmZjogVGhlIHN0cnVj dCB2bXdfZGlmZl9jcHkgY2xvc3VyZSBhcmd1bWVudCAodW51c2VkKS4KKyAqIEBkZXN0OiBUaGUg Y29weSBkZXN0aW5hdGlvbi4KKyAqIEBzcmM6IFRoZSBjb3B5IHNvdXJjZS4KKyAqIEBuOiBOdW1i ZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqLwordm9pZCB2bXdfbWVtY3B5KHN0cnVjdCB2bXdfZGlm Zl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbikKK3sKKwltZW1j cHkoZGVzdCwgc3JjLCBuKTsKK30KKworCisvKioKKyAqIHZtd19hZGp1c3RfcmVjdCAtIEFkanVz dCByZWN0YW5nbGUgY29vcmRpbmF0ZXMgZm9yIG5ld2x5IGZvdW5kIGRpZmZlcmVuY2UKKyAqCisg KiBAZGlmZjogVGhlIHN0cnVjdCB2bXdfZGlmZl9jcHkgdXNlZCB0byB0cmFjayB0aGUgbW9kaWZp ZWQgYm91bmRpbmcgYm94LgorICogQGRpZmZfb2ZmczogVGhlIG9mZnNldCBmcm9tIEBkaWZmLT5s aW5lX29mZnNldCB3aGVyZSB0aGUgZGlmZmVyZW5jZSB3YXMKKyAqIGZvdW5kLgorICovCitzdGF0 aWMgdm9pZCB2bXdfYWRqdXN0X3JlY3Qoc3RydWN0IHZtd19kaWZmX2NweSAqZGlmZiwgc2l6ZV90 IGRpZmZfb2ZmcykKK3sKKwlzaXplX3Qgb2ZmcyA9IChkaWZmX29mZnMgKyBkaWZmLT5saW5lX29m ZnNldCkgLyBkaWZmLT5jcHA7CisJc3RydWN0IGRybV9yZWN0ICpyZWN0ID0gJmRpZmYtPnJlY3Q7 CisKKwlyZWN0LT54MSA9IG1pbl90KGludCwgcmVjdC0+eDEsIG9mZnMpOworCXJlY3QtPngyID0g bWF4X3QoaW50LCByZWN0LT54Miwgb2ZmcyArIDEpOworCXJlY3QtPnkxID0gbWluX3QoaW50LCBy ZWN0LT55MSwgZGlmZi0+bGluZSk7CisJcmVjdC0+eTIgPSBtYXhfdChpbnQsIHJlY3QtPnkyLCBk aWZmLT5saW5lICsgMSk7Cit9CisKKy8qKgorICogdm13X2RpZmZfbWVtY3B5IC0gbWVtY3B5IHRo YXQgY3JlYXRlcyBhIGJvdW5kaW5nIGJveCBvZiBtb2RpZmllZCBjb250ZW50LgorICoKKyAqIEBk aWZmOiBUaGUgc3RydWN0IHZtd19kaWZmX2NweSB1c2VkIHRvIHRyYWNrIHRoZSBtb2RpZmllZCBi b3VuZGluZyBib3guCisgKiBAZGVzdDogVGhlIGNvcHkgZGVzdGluYXRpb24uCisgKiBAc3JjOiBU aGUgY29weSBzb3VyY2UuCisgKiBAbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICog SW4gb3JkZXIgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSBtb2RpZmllZCBjb250ZW50LCB0aGUgZmll bGQgQGRpZmYtPmxpbmUgbXVzdAorICogYmUgcHJlLWxvYWRlZCB3aXRoIHRoZSBjdXJyZW50IGxp bmUgbnVtYmVyLCB0aGUgZmllbGQgQGRpZmYtPmxpbmVfb2Zmc2V0IG11c3QKKyAqIGJlIHByZS1s b2FkZWQgd2l0aCB0aGUgbGluZSBvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIGNvcHkgc3RhcnRz LCBhbmQKKyAqIGZpbmFsbHkgdGhlIGZpZWxkIEBkaWZmLT5jcHAgbmVlZCB0byBiZSBwcmVsb2Fk ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBwZXIgdW5pdCBpbiB0aGUgaG9yaXpvbnRh bCBkaXJlY3Rpb24gb2YgdGhlIGFyZWEgd2UncmUgZXhhbWluaW5nLgorICogVHlwaWNhbGx5IGJ5 dGVzIHBlciBwaXhlbC4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGtub3cgdGhlIG5lZWRlZCBncmFu dWxhcml0eSBvZiB0aGUgZGlmZmVyZW5jZSBjb21wdXRpbmcKKyAqIG9wZXJhdGlvbnMuIEEgaGln aGVyIGNwcCBnZW5lcmFsbHkgbGVhZHMgdG8gZmFzdGVyIGV4ZWN1dGlvbiBhdCB0aGUgY29zdCBv ZgorICogYm91bmRpbmcgYm94IHdpZHRoIHByZWNpc2lvbi4KKyAqLwordm9pZCB2bXdfZGlmZl9t ZW1jcHkoc3RydWN0IHZtd19kaWZmX2NweSAqZGlmZiwgdTggKmRlc3QsIGNvbnN0IHU4ICpzcmMs CisJCSAgICAgc2l6ZV90IG4pCit7CisJc3NpemVfdCBjc2l6ZSwgYnl0ZV9sZW47CisKKwlpZiAo V0FSTl9PTl9PTkNFKHJvdW5kX2Rvd24obiwgZGlmZi0+Y3BwKSAhPSBuKSkKKwkJcmV0dXJuOwor CisJLyogVE9ETzogUG9zc2libHkgdXNlIGEgc2luZ2xlIHZtd19maW5kX2ZpcnN0X2RpZmYgcGVy IGxpbmU/ICovCisJY3NpemUgPSB2bXdfZmluZF9maXJzdF9kaWZmKGRlc3QsIHNyYywgbiwgZGlm Zi0+Y3BwKTsKKwlpZiAoY3NpemUgPCBuKSB7CisJCXZtd19hZGp1c3RfcmVjdChkaWZmLCBjc2l6 ZSk7CisJCWJ5dGVfbGVuID0gZGlmZi0+Y3BwOworCisJCS8qCisJCSAqIFN0YXJ0aW5nIGZyb20g d2hlcmUgZmlyc3QgZGlmZmVyZW5jZSB3YXMgZm91bmQsIGZpbmQKKwkJICogbG9jYXRpb24gb2Yg bGFzdCBkaWZmZXJlbmNlLCBhbmQgdGhlbiBjb3B5LgorCQkgKi8KKwkJZGlmZi0+bGluZV9vZmZz ZXQgKz0gY3NpemU7CisJCWRlc3QgKz0gY3NpemU7CisJCXNyYyArPSBjc2l6ZTsKKwkJbiAtPSBj c2l6ZTsKKwkJY3NpemUgPSB2bXdfZmluZF9sYXN0X2RpZmYoZGVzdCwgc3JjLCBuLCBkaWZmLT5j cHApOworCQlpZiAoY3NpemUgPj0gMCkgeworCQkJYnl0ZV9sZW4gKz0gY3NpemU7CisJCQl2bXdf YWRqdXN0X3JlY3QoZGlmZiwgY3NpemUpOworCQl9CisJCW1lbWNweShkZXN0LCBzcmMsIGJ5dGVf bGVuKTsKKwl9CisJZGlmZi0+bGluZV9vZmZzZXQgKz0gbjsKK30KKworLyoqCisgKiBzdHJ1Y3Qg dm13X2JvX2JsaXRfbGluZV9kYXRhIC0gQ29udmVuaWVuY2UgYXJndW1lbnQgdG8gdm13X2JvX2Nw dV9ibGl0X2xpbmUKKyAqCisgKiBAbWFwcGVkX2RzdDogQWxyZWFkeSBtYXBwZWQgZGVzdGluYXRp b24gcGFnZSBpbmRleCBpbiBAZHN0X3BhZ2VzLgorICogQGRzdF9hZGRyOiBLZXJuZWwgdmlydHVh bCBhZGRyZXNzIG9mIG1hcHBlZCBkZXN0aW5hdGlvbiBwYWdlLgorICogQGRzdF9wYWdlczogQXJy YXkgb2YgZGVzdGluYXRpb24gYm8gcGFnZXMuCisgKiBAZHN0X251bV9wYWdlczogTnVtYmVyIG9m IGRlc3RpbmF0aW9uIGJvIHBhZ2VzLgorICogQGRzdF9wcm90OiBEZXN0aW5hdGlvbiBibyBwYWdl IHByb3RlY3Rpb24uCisgKiBAbWFwcGVkX3NyYzogQWxyZWFkeSBtYXBwZWQgc291cmNlIHBhZ2Ug aW5kZXggaW4gQGRzdF9wYWdlcy4KKyAqIEBzcmNfYWRkcjogS2VybmVsIHZpcnR1YWwgYWRkcmVz cyBvZiBtYXBwZWQgc291cmNlIHBhZ2UuCisgKiBAc3JjX3BhZ2VzOiBBcnJheSBvZiBzb3VyY2Ug Ym8gcGFnZXMuCisgKiBAc3JjX251bV9wYWdlczogTnVtYmVyIG9mIHNvdXJjZSBibyBwYWdlcy4K KyAqIEBzcmNfcHJvdDogU291cmNlIGJvIHBhZ2UgcHJvdGVjdGlvbi4KKyAqIEBkaWZmOiBTdHJ1 Y3Qgdm13X2RpZmZfY3B5LCBpbiB0aGUgZW5kIGZvcndhcmRlZCB0byB0aGUgbWVtY3B5IHJvdXRp bmUuCisgKi8KK3N0cnVjdCB2bXdfYm9fYmxpdF9saW5lX2RhdGEgeworCXUzMiBtYXBwZWRfZHN0 OworCXU4ICpkc3RfYWRkcjsKKwlzdHJ1Y3QgcGFnZSAqKmRzdF9wYWdlczsKKwl1MzIgZHN0X251 bV9wYWdlczsKKwlwZ3Byb3RfdCBkc3RfcHJvdDsKKwl1MzIgbWFwcGVkX3NyYzsKKwl1OCAqc3Jj X2FkZHI7CisJc3RydWN0IHBhZ2UgKipzcmNfcGFnZXM7CisJdTMyIHNyY19udW1fcGFnZXM7CisJ cGdwcm90X3Qgc3JjX3Byb3Q7CisJc3RydWN0IHZtd19kaWZmX2NweSAqZGlmZjsKK307CisKKy8q KgorICogdm13X2JvX2NwdV9ibGl0X2xpbmUgLSBCbGl0IHBhcnQgb2YgYSBsaW5lIGZyb20gb25l IGJvIHRvIGFub3RoZXIuCisgKgorICogQGQ6IEJsaXQgZGF0YSBhcyBkZXNjcmliZWQgYWJvdmUu CisgKiBAZHN0X29mZnNldDogRGVzdGluYXRpb24gY29weSBzdGFydCBvZmZzZXQgZnJvbSBzdGFy dCBvZiBiby4KKyAqIEBzcmNfb2Zmc2V0OiBTb3VyY2UgY29weSBzdGFydCBvZmZzZXQgZnJvbSBz dGFydCBvZiBiby4KKyAqIEBieXRlc190b19jb3B5OiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weSBp biB0aGlzIGxpbmUuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JvX2NwdV9ibGl0X2xpbmUoc3RydWN0 IHZtd19ib19ibGl0X2xpbmVfZGF0YSAqZCwKKwkJCQl1MzIgZHN0X29mZnNldCwKKwkJCQl1MzIg c3JjX29mZnNldCwKKwkJCQl1MzIgYnl0ZXNfdG9fY29weSkKK3sKKwlzdHJ1Y3Qgdm13X2RpZmZf Y3B5ICpkaWZmID0gZC0+ZGlmZjsKKworCXdoaWxlIChieXRlc190b19jb3B5KSB7CisJCXUzMiBj b3B5X3NpemUgPSBieXRlc190b19jb3B5OworCQl1MzIgZHN0X3BhZ2UgPSBkc3Rfb2Zmc2V0ID4+ IFBBR0VfU0hJRlQ7CisJCXUzMiBzcmNfcGFnZSA9IHNyY19vZmZzZXQgPj4gUEFHRV9TSElGVDsK KwkJdTMyIGRzdF9wYWdlX29mZnNldCA9IGRzdF9vZmZzZXQgJiB+UEFHRV9NQVNLOworCQl1MzIg c3JjX3BhZ2Vfb2Zmc2V0ID0gc3JjX29mZnNldCAmIH5QQUdFX01BU0s7CisJCWJvb2wgdW5tYXBf ZHN0ID0gZC0+ZHN0X2FkZHIgJiYgZHN0X3BhZ2UgIT0gZC0+bWFwcGVkX2RzdDsKKwkJYm9vbCB1 bm1hcF9zcmMgPSBkLT5zcmNfYWRkciAmJiAoc3JjX3BhZ2UgIT0gZC0+bWFwcGVkX3NyYyB8fAor CQkJCQkJIHVubWFwX2RzdCk7CisKKwkJY29weV9zaXplID0gbWluX3QodTMyLCBjb3B5X3NpemUs IFBBR0VfU0laRSAtIGRzdF9wYWdlX29mZnNldCk7CisJCWNvcHlfc2l6ZSA9IG1pbl90KHUzMiwg Y29weV9zaXplLCBQQUdFX1NJWkUgLSBzcmNfcGFnZV9vZmZzZXQpOworCisJCWlmICh1bm1hcF9z cmMpIHsKKwkJCXR0bV9rdW5tYXBfYXRvbWljX3Byb3QoZC0+c3JjX2FkZHIsIGQtPnNyY19wcm90 KTsKKwkJCWQtPnNyY19hZGRyID0gTlVMTDsKKwkJfQorCisJCWlmICh1bm1hcF9kc3QpIHsKKwkJ CXR0bV9rdW5tYXBfYXRvbWljX3Byb3QoZC0+ZHN0X2FkZHIsIGQtPmRzdF9wcm90KTsKKwkJCWQt PmRzdF9hZGRyID0gTlVMTDsKKwkJfQorCisJCWlmICghZC0+ZHN0X2FkZHIpIHsKKwkJCWlmIChX QVJOX09OX09OQ0UoZHN0X3BhZ2UgPj0gZC0+ZHN0X251bV9wYWdlcykpCisJCQkJcmV0dXJuIC1F SU5WQUw7CisKKwkJCWQtPmRzdF9hZGRyID0KKwkJCQl0dG1fa21hcF9hdG9taWNfcHJvdChkLT5k c3RfcGFnZXNbZHN0X3BhZ2VdLAorCQkJCQkJICAgICBkLT5kc3RfcHJvdCk7CisJCQlpZiAoIWQt PmRzdF9hZGRyKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlkLT5tYXBwZWRfZHN0ID0gZHN0 X3BhZ2U7CisJCX0KKworCQlpZiAoIWQtPnNyY19hZGRyKSB7CisJCQlpZiAoV0FSTl9PTl9PTkNF KHNyY19wYWdlID49IGQtPnNyY19udW1fcGFnZXMpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJ CQlkLT5zcmNfYWRkciA9CisJCQkJdHRtX2ttYXBfYXRvbWljX3Byb3QoZC0+c3JjX3BhZ2VzW3Ny Y19wYWdlXSwKKwkJCQkJCSAgICAgZC0+c3JjX3Byb3QpOworCQkJaWYgKCFkLT5zcmNfYWRkcikK KwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJZC0+bWFwcGVkX3NyYyA9IHNyY19wYWdlOworCQl9 CisJCWRpZmYtPm1lbWNweShkaWZmLCBkLT5kc3RfYWRkciArIGRzdF9wYWdlX29mZnNldCwKKwkJ CSAgICAgZC0+c3JjX2FkZHIgKyBzcmNfcGFnZV9vZmZzZXQsIGNvcHlfc2l6ZSk7CisKKwkJYnl0 ZXNfdG9fY29weSAtPSBjb3B5X3NpemU7CisJCWRzdF9vZmZzZXQgKz0gY29weV9zaXplOworCQlz cmNfb2Zmc2V0ICs9IGNvcHlfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0 dG1fYm9fY3B1X2JsaXQgLSBpbi1rZXJuZWwgY3B1IGJsaXQuCisgKgorICogQGRzdDogRGVzdGlu YXRpb24gYnVmZmVyIG9iamVjdC4KKyAqIEBkc3Rfb2Zmc2V0OiBEZXN0aW5hdGlvbiBvZmZzZXQg b2YgYmxpdCBzdGFydCBpbiBieXRlcy4KKyAqIEBkc3Rfc3RyaWRlOiBEZXN0aW5hdGlvbiBzdHJp ZGUgaW4gYnl0ZXMuCisgKiBAc3JjOiBTb3VyY2UgYnVmZmVyIG9iamVjdC4KKyAqIEBzcmNfb2Zm c2V0OiBTb3VyY2Ugb2Zmc2V0IG9mIGJsaXQgc3RhcnQgaW4gYnl0ZXMuCisgKiBAc3JjX3N0cmlk ZTogU291cmNlIHN0cmlkZSBpbiBieXRlcy4KKyAqIEB3OiBXaWR0aCBvZiBibGl0LgorICogQGg6 IEhlaWdodCBvZiBibGl0LgorICogcmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVy cm9yIHZhbHVlIG9uIGZhaWx1cmUuIFdpbGwgcHJpbnQgb3V0CisgKiBrZXJuZWwgd2FybmluZ3Mg b24gY2FsbGVyIGJ1Z3MuCisgKgorICogUGVyZm9ybXMgYSBDUFUgYmxpdCBmcm9tIG9uZSBidWZm ZXIgb2JqZWN0IHRvIGFub3RoZXIgYXZvaWRpbmcgYSBmdWxsCisgKiBibyB2bWFwIHdoaWNoIG1h eSBleGhhdXN0LSBvciBmcmFnbWVudCB2bWFsbG9jIHNwYWNlLgorICogT24gc3VwcG9ydGVkIGFy Y2hpdGVjdHVyZXMgKHg4NiksIHdlJ3JlIHVzaW5nIGttYXBfYXRvbWljIHdoaWNoIGF2b2lkcwor ICogY3Jvc3MtcHJvY2Vzc29yIFRMQi0gYW5kIGNhY2hlIGZsdXNoZXMgYW5kIG1heSwgb24gbm9u LUhJR0hNRU0gc3lzdGVtcworICogcmVmZXJlbmNlIGFscmVhZHkgc2V0LXVwIG1hcHBpbmdzLgor ICoKKyAqIE5laXRoZXIgb2YgdGhlIGJ1ZmZlciBvYmplY3RzIG1heSBiZSBwbGFjZWQgaW4gUENJ IG1lbW9yeQorICogKEZpeGVkIG1lbW9yeSBpbiBUVE0gdGVybWlub2xvZ3kpIHdoZW4gdXNpbmcg dGhpcyBmdW5jdGlvbi4KKyAqLworaW50IHZtd19ib19jcHVfYmxpdChzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QgKmRzdCwKKwkJICAgIHUzMiBkc3Rfb2Zmc2V0LCB1MzIgZHN0X3N0cmlkZSwKKwkJ ICAgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqc3JjLAorCQkgICAgdTMyIHNyY19vZmZzZXQs IHUzMiBzcmNfc3RyaWRlLAorCQkgICAgdTMyIHcsIHUzMiBoLAorCQkgICAgc3RydWN0IHZtd19k aWZmX2NweSAqZGlmZikKK3sKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geworCQku aW50ZXJydXB0aWJsZSA9IGZhbHNlLAorCQkubm9fd2FpdF9ncHUgPSBmYWxzZQorCX07CisJdTMy IGosIGluaXRpYWxfbGluZSA9IGRzdF9vZmZzZXQgLyBkc3Rfc3RyaWRlOworCXN0cnVjdCB2bXdf Ym9fYmxpdF9saW5lX2RhdGEgZDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEJ1ZmZlciBvYmplY3Rz IG5lZWQgdG8gYmUgZWl0aGVyIHBpbm5lZCBvciByZXNlcnZlZDogKi8KKwlpZiAoIShkc3QtPm1l bS5wbGFjZW1lbnQgJiBUVE1fUExfRkxBR19OT19FVklDVCkpCisJCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRzdC0+cmVzdi0+bG9jay5iYXNlKTsKKwlpZiAoIShzcmMtPm1lbS5wbGFjZW1lbnQgJiBU VE1fUExfRkxBR19OT19FVklDVCkpCisJCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNyYy0+cmVzdi0+ bG9jay5iYXNlKTsKKworCWlmIChkc3QtPnR0bS0+c3RhdGUgPT0gdHRfdW5wb3B1bGF0ZWQpIHsK KwkJcmV0ID0gZHN0LT50dG0tPmJkZXYtPmRyaXZlci0+dHRtX3R0X3BvcHVsYXRlKGRzdC0+dHRt LCAmY3R4KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNyYy0+dHRt LT5zdGF0ZSA9PSB0dF91bnBvcHVsYXRlZCkgeworCQlyZXQgPSBzcmMtPnR0bS0+YmRldi0+ZHJp dmVyLT50dG1fdHRfcG9wdWxhdGUoc3JjLT50dG0sICZjdHgpOworCQlpZiAocmV0KQorCQkJcmV0 dXJuIHJldDsKKwl9CisKKwlkLm1hcHBlZF9kc3QgPSAwOworCWQubWFwcGVkX3NyYyA9IDA7CisJ ZC5kc3RfYWRkciA9IE5VTEw7CisJZC5zcmNfYWRkciA9IE5VTEw7CisJZC5kc3RfcGFnZXMgPSBk c3QtPnR0bS0+cGFnZXM7CisJZC5zcmNfcGFnZXMgPSBzcmMtPnR0bS0+cGFnZXM7CisJZC5kc3Rf bnVtX3BhZ2VzID0gZHN0LT5udW1fcGFnZXM7CisJZC5zcmNfbnVtX3BhZ2VzID0gc3JjLT5udW1f cGFnZXM7CisJZC5kc3RfcHJvdCA9IHR0bV9pb19wcm90KGRzdC0+bWVtLnBsYWNlbWVudCwgUEFH RV9LRVJORUwpOworCWQuc3JjX3Byb3QgPSB0dG1faW9fcHJvdChzcmMtPm1lbS5wbGFjZW1lbnQs IFBBR0VfS0VSTkVMKTsKKwlkLmRpZmYgPSBkaWZmOworCisJZm9yIChqID0gMDsgaiA8IGg7ICsr aikgeworCQlkaWZmLT5saW5lID0gaiArIGluaXRpYWxfbGluZTsKKwkJZGlmZi0+bGluZV9vZmZz ZXQgPSBkc3Rfb2Zmc2V0ICUgZHN0X3N0cmlkZTsKKwkJcmV0ID0gdm13X2JvX2NwdV9ibGl0X2xp bmUoJmQsIGRzdF9vZmZzZXQsIHNyY19vZmZzZXQsIHcpOworCQlpZiAocmV0KQorCQkJZ290byBv dXQ7CisKKwkJZHN0X29mZnNldCArPSBkc3Rfc3RyaWRlOworCQlzcmNfb2Zmc2V0ICs9IHNyY19z dHJpZGU7CisJfQorb3V0OgorCWlmIChkLnNyY19hZGRyKQorCQl0dG1fa3VubWFwX2F0b21pY19w cm90KGQuc3JjX2FkZHIsIGQuc3JjX3Byb3QpOworCWlmIChkLmRzdF9hZGRyKQorCQl0dG1fa3Vu bWFwX2F0b21pY19wcm90KGQuZHN0X2FkZHIsIGQuZHN0X3Byb3QpOworCisJcmV0dXJuIHJldDsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggZDA4NzUzZThmZDk0Li4xNWIy MmU1NmI4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5o CisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC02NzgsNiArNjc4 LDcgQEAgZXh0ZXJuIHZvaWQgdm13X2ZlbmNlX3NpbmdsZV9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvLAogCQkJCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSk7CiBleHRlcm4gdm9p ZCB2bXdfcmVzb3VyY2VfZXZpY3RfYWxsKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOwog CisKIC8qKgogICogRE1BIGJ1ZmZlciBoZWxwZXIgcm91dGluZXMgLSB2bXdnZnhfZG1hYnVmLmMK ICAqLwpAQCAtMTE2NSw2ICsxMTY2LDUzIEBAIGV4dGVybiBpbnQgdm13X2NtZGJ1Zl9jdXJfZmx1 c2goc3RydWN0IHZtd19jbWRidWZfbWFuICptYW4sCiAJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKTsK IGV4dGVybiB2b2lkIHZtd19jbWRidWZfaXJxdGhyZWFkKHN0cnVjdCB2bXdfY21kYnVmX21hbiAq bWFuKTsKIAorLyogQ1BVIGJsaXQgdXRpbGl0aWVzIC0gdm13Z2Z4X2JsaXQuYyAqLworCisvKioK KyAqIHN0cnVjdCB2bXdfZGlmZl9jcHkgLSBDUFUgYmxpdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUK KyAqCisgKiBAcmVjdDogVGhlIG91dHB1dCBib3VuZGluZyBib3ggcmVjdGFuZ2xlLgorICogQGxp bmU6IFRoZSBjdXJyZW50IGxpbmUgb2YgdGhlIGJsaXQuCisgKiBAbGluZV9vZmZzZXQ6IE9mZnNl dCBvZiB0aGUgY3VycmVudCBsaW5lIHNlZ21lbnQuCisgKiBAY3BwOiBCeXRlcyBwZXIgcGl4ZWwg KGdyYW51bGFyaXR5IGluZm9ybWF0aW9uKS4KKyAqIEBtZW1jcHk6IFdoaWNoIG1lbWNweSBmdW5j dGlvbiB0byB1c2UuCisgKi8KK3N0cnVjdCB2bXdfZGlmZl9jcHkgeworCXN0cnVjdCBkcm1fcmVj dCByZWN0OworCXNpemVfdCBsaW5lOworCXNpemVfdCBsaW5lX29mZnNldDsKKwlpbnQgY3BwOwor CXZvaWQgKCptZW1jcHkpKHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25z dCB1OCAqc3JjLAorCQkgICAgICAgc2l6ZV90IG4pOworfTsKKworI2RlZmluZSBWTVdfQ1BVX0JM SVRfSU5JVElBTElaRVIgewlcCisJLm1lbWNweSA9IHZtd19tZW1jcHksCQlcCit9CisKKyNkZWZp bmUgVk1XX0NQVV9CTElUX0RJRkZfSU5JVElBTElaRVIoX2NwcCkgewkgIFwKKwkubGluZSA9IDAs CQkJCSAgXAorCS5saW5lX29mZnNldCA9IDAsCQkJICBcCisJLnJlY3QgPSB7IC54MSA9IElOVF9N QVgvMiwJCSAgXAorCQkgIC55MSA9IElOVF9NQVgvMiwJCSAgXAorCQkgIC54MiA9IElOVF9NSU4v MiwJCSAgXAorCQkgIC55MiA9IElOVF9NSU4vMgkJICBcCisJfSwJCQkJCSAgXAorCS5jcHAgPSBf Y3BwLAkJCQkgIFwKKwkubWVtY3B5ID0gdm13X2RpZmZfbWVtY3B5LAkJICBcCit9CisKK3ZvaWQg dm13X2RpZmZfbWVtY3B5KHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25z dCB1OCAqc3JjLAorCQkgICAgIHNpemVfdCBuKTsKKwordm9pZCB2bXdfbWVtY3B5KHN0cnVjdCB2 bXdfZGlmZl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3Qgbik7CisK K2ludCB2bXdfYm9fY3B1X2JsaXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpkc3QsCisJCSAg ICB1MzIgZHN0X29mZnNldCwgdTMyIGRzdF9zdHJpZGUsCisJCSAgICBzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QgKnNyYywKKwkJICAgIHUzMiBzcmNfb2Zmc2V0LCB1MzIgc3JjX3N0cmlkZSwKKwkJ ICAgIHUzMiB3LCB1MzIgaCwKKwkJICAgIHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYpOwogCiAv KioKICAqIElubGluZSBoZWxwZXIgZnVuY3Rpb25zCi0tIAoyLjE0LjMKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=