From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH v2 -next 01/11] drm/vmwgfx: Add a cpu blit utility that can be used for page-backed bos Date: Thu, 22 Mar 2018 12:07:10 +0100 Message-ID: <20180322110710.8040-1-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0087.outbound.protection.outlook.com [104.47.37.87]) by gabe.freedesktop.org (Postfix) with ESMTPS id 468126EBCE for ; Thu, 22 Mar 2018 11:07:49 +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 Ynk6IEJyaWFuIFBhdWwgPGJyaWFucEB2bXdhcmUuY29tPgoKLS0tCnYyOiBGaXggYSBjb21waWxh dGlvbiBmYWlsdXJlIGJ5IHJlcGxhY2luZyBhIHN0cnVjdCB2bXdfZGlmZl9jcHkgbWVtYmVyCmNh bGxlZCAibWVtY3B5IiB3aXRoICJkb19jcHkiLgotLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv TWFrZWZpbGUgICAgICB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYmxp dC5jIHwgNTA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCAgfCAgNDggKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1 NTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92bXdnZngvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L01ha2VmaWxlCmlu ZGV4IGFkODAyMTFlMTA5OC4uNzk0Y2M5ZDVjOWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvTWFrZWZpbGUK QEAgLTcsNiArNyw2IEBAIHZtd2dmeC15IDo9IHZtd2dmeF9leGVjYnVmLm8gdm13Z2Z4X2dtci5v IHZtd2dmeF9rbXMubyB2bXdnZnhfZHJ2Lm8gXAogCSAgICB2bXdnZnhfc3VyZmFjZS5vIHZtd2dm eF9wcmltZS5vIHZtd2dmeF9tb2IubyB2bXdnZnhfc2hhZGVyLm8gXAogCSAgICB2bXdnZnhfY21k YnVmX3Jlcy5vIHZtd2dmeF9jbWRidWYubyB2bXdnZnhfc3RkdS5vIFwKIAkgICAgdm13Z2Z4X2Nv dGFibGUubyB2bXdnZnhfc28ubyB2bXdnZnhfYmluZGluZy5vIHZtd2dmeF9tc2cubyBcCi0JICAg IHZtd2dmeF9zaW1wbGVfcmVzb3VyY2UubyB2bXdnZnhfdmEubworCSAgICB2bXdnZnhfc2ltcGxl X3Jlc291cmNlLm8gdm13Z2Z4X3ZhLm8gdm13Z2Z4X2JsaXQubwogCiBvYmotJChDT05GSUdfRFJN X1ZNV0dGWCkgOj0gdm13Z2Z4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmU4Yzk0YjE5ZGI3YgotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JsaXQuYwpAQCAtMCww ICsxLDUwNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IMKpIDIwMTcg Vk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVk LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRo b3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw ZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxs IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdF TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9S UyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFH RVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2bXdn ZnhfZHJ2LmgiCisKKy8qCisgKiBUZW1wbGF0ZSB0aGF0IGltcGxlbWVudHMgZmluZF9maXJzdF9k aWZmKCkgZm9yIGEgZ2VuZXJpYworICogdW5zaWduZWQgaW50ZWdlciB0eXBlLiBAc2l6ZSBhbmQg cmV0dXJuIHZhbHVlIGFyZSBpbiBieXRlcy4KKyAqLworI2RlZmluZSBWTVdfRklORF9GSVJTVF9E SUZGKF90eXBlKQkJCSBcCitzdGF0aWMgc2l6ZV90IHZtd19maW5kX2ZpcnN0X2RpZmZfICMjIF90 eXBlCQkgXAorCShjb25zdCBfdHlwZSAqIGRzdCwgY29uc3QgX3R5cGUgKiBzcmMsIHNpemVfdCBz aXplKVwKK3sJCQkJCQkJIFwKKwlzaXplX3QgaTsJCQkJCSBcCisJCQkJCQkJIFwKKwlmb3IgKGkg PSAwOyBpIDwgc2l6ZTsgaSArPSBzaXplb2YoX3R5cGUpKSB7CSBcCisJCWlmICgqZHN0KysgIT0g KnNyYysrKQkJCSBcCisJCQlicmVhazsJCQkJIFwKKwl9CQkJCQkJIFwKKwkJCQkJCQkgXAorCXJl dHVybiBpOwkJCQkJIFwKK30KKworCisvKgorICogVGVtcGxhdGUgdGhhdCBpbXBsZW1lbnRzIGZp bmRfbGFzdF9kaWZmKCkgZm9yIGEgZ2VuZXJpYworICogdW5zaWduZWQgaW50ZWdlciB0eXBlLiBQ b2ludGVycyBwb2ludCB0byB0aGUgaXRlbSBmb2xsb3dpbmcgdGhlCisgKiAqZW5kKiBvZiB0aGUg YXJlYSB0byBiZSBleGFtaW5lZC4gQHNpemUgYW5kIHJldHVybiB2YWx1ZSBhcmUgaW4KKyAqIGJ5 dGVzLgorICovCisjZGVmaW5lIFZNV19GSU5EX0xBU1RfRElGRihfdHlwZSkJCQkJCVwKK3N0YXRp YyBzc2l6ZV90IHZtd19maW5kX2xhc3RfZGlmZl8gIyMgX3R5cGUoCQkJCVwKKwljb25zdCBfdHlw ZSAqIGRzdCwgY29uc3QgX3R5cGUgKiBzcmMsIHNpemVfdCBzaXplKQkJXAorewkJCQkJCQkJCVwK Kwl3aGlsZSAoc2l6ZSkgewkJCQkJCQlcCisJCWlmICgqLS1kc3QgIT0gKi0tc3JjKQkJCQkJXAor CQkJYnJlYWs7CQkJCQkJXAorCQkJCQkJCQkJXAorCQlzaXplIC09IHNpemVvZihfdHlwZSk7CQkJ CQlcCisJfQkJCQkJCQkJXAorCXJldHVybiBzaXplOwkJCQkJCQlcCit9CisKKworLyoKKyAqIElu c3RhbnRpYXRlIGZpbmQgZGlmZiBmdW5jdGlvbnMgZm9yIHJlbGV2YW50IHVuc2lnbmVkIGludGVn ZXIgc2l6ZXMsCisgKiBhc3N1bWluZyB0aGF0IHdpZGVyIGludGVnZXJzIGFyZSBmYXN0ZXIgKGlu Y2x1ZGluZyBhbGlnbmluZykgdXAgdG8gdGhlCisgKiBhcmNoaXRlY3R1cmUgbmF0aXZlIHdpZHRo LCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIDMyIGJpdCB1bmxlc3MKKyAqIENPTkZJR182NEJJVCBp cyBkZWZpbmVkLgorICovCitWTVdfRklORF9GSVJTVF9ESUZGKHU4KTsKK1ZNV19GSU5EX0xBU1Rf RElGRih1OCk7CisKK1ZNV19GSU5EX0ZJUlNUX0RJRkYodTE2KTsKK1ZNV19GSU5EX0xBU1RfRElG Rih1MTYpOworCitWTVdfRklORF9GSVJTVF9ESUZGKHUzMik7CitWTVdfRklORF9MQVNUX0RJRkYo dTMyKTsKKworI2lmZGVmIENPTkZJR182NEJJVAorVk1XX0ZJTkRfRklSU1RfRElGRih1NjQpOwor Vk1XX0ZJTkRfTEFTVF9ESUZGKHU2NCk7CisjZW5kaWYKKworCisvKiBXZSB1c2Ugc2l6ZSBhbGln bmVkIGNvcGllcy4gVGhpcyBjb21wdXRlcyAoYWRkciAtIGFsaWduKGFkZHIpKSAqLworI2RlZmlu ZSBTUElMTChfdmFyLCBfdHlwZSkgKCh1bnNpZ25lZCBsb25nKSBfdmFyICYgKHNpemVvZihfdHlw ZSkgLSAxKSkKKworCisvKgorICogVGVtcGxhdGUgdG8gY29tcHV0ZSBmaW5kX2ZpcnN0X2RpZmYo KSBmb3IgYSBjZXJ0YWluIGludGVnZXIgdHlwZQorICogaW5jbHVkaW5nIGEgaGVhZCBjb3B5IGZv ciBhbGlnbm1lbnQsIGFuZCBhZGp1c3RtZW50IG9mIHBhcmFtZXRlcnMKKyAqIGZvciB0YWlsIGZp bmQgb3IgaW5jcmVhc2VkIHJlc29sdXRpb24gZmluZCB1c2luZyBhbiB1bnNpZ25lZCBpbnRlZ2Vy IGZpbmQKKyAqIG9mIHNtYWxsZXIgd2lkdGguIElmIGZpbmRpbmcgaXMgY29tcGxldGUsIGFuZCBy ZXNvbHV0aW9uIGlzIHN1ZmZpY2llbnQsCisgKiB0aGUgbWFjcm8gZXhlY3V0ZXMgYSByZXR1cm4g c3RhdGVtZW50LiBPdGhlcndpc2UgaXQgZmFsbHMgdGhyb3VnaC4KKyAqLworI2RlZmluZSBWTVdf VFJZX0ZJTkRfRklSU1RfRElGRihfdHlwZSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdW5zaWdu ZWQgaW50IHNwaWxsID0gU1BJTEwoZHN0LCBfdHlwZSk7CQkJCVwKKwlzaXplX3QgZGlmZl9vZmZz OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3BpbGwgJiYgc3BpbGwgPT0gU1BJTEwoc3JjLCBf dHlwZSkgJiYJCQlcCisJICAgIHNpemVvZihfdHlwZSkgLSBzcGlsbCA8PSBzaXplKSB7CQkJCVwK KwkJc3BpbGwgPSBzaXplb2YoX3R5cGUpIC0gc3BpbGw7CQkJCVwKKwkJZGlmZl9vZmZzID0gdm13 X2ZpbmRfZmlyc3RfZGlmZl91OChkc3QsIHNyYywgc3BpbGwpOwlcCisJCWlmIChkaWZmX29mZnMg PCBzcGlsbCkJCQkJCVwKKwkJCXJldHVybiByb3VuZF9kb3duKG9mZnNldCArIGRpZmZfb2Zmcywg Z3JhbnVsYXJpdHkpOyBcCisJCQkJCQkJCQlcCisJCWRzdCArPSBzcGlsbDsJCQkJCQlcCisJCXNy YyArPSBzcGlsbDsJCQkJCQlcCisJCXNpemUgLT0gc3BpbGw7CQkJCQkJXAorCQlvZmZzZXQgKz0g c3BpbGw7CQkJCQlcCisJCXNwaWxsID0gMDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlmICghc3Bp bGwgJiYgIVNQSUxMKHNyYywgX3R5cGUpKSB7CQkJCVwKKwkJc2l6ZV90IHRvX2NvcHkgPSBzaXpl ICYJIH4oc2l6ZW9mKF90eXBlKSAtIDEpOwkJXAorCQkJCQkJCQkJXAorCQlkaWZmX29mZnMgPSB2 bXdfZmluZF9maXJzdF9kaWZmXyAjIyBfdHlwZQkJXAorCQkJKChfdHlwZSAqKSBkc3QsIChfdHlw ZSAqKSBzcmMsIHRvX2NvcHkpOwlcCisJCWlmIChkaWZmX29mZnMgPj0gc2l6ZSB8fCBncmFudWxh cml0eSA9PSBzaXplb2YoX3R5cGUpKQlcCisJCQlyZXR1cm4gKG9mZnNldCArIGRpZmZfb2Zmcyk7 CQkJXAorCQkJCQkJCQkJXAorCQlkc3QgKz0gZGlmZl9vZmZzOwkJCQkJXAorCQlzcmMgKz0gZGlm Zl9vZmZzOwkJCQkJXAorCQlzaXplIC09IGRpZmZfb2ZmczsJCQkJCVwKKwkJb2Zmc2V0ICs9IGRp ZmZfb2ZmczsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQkJCQkJCQkJXAorCisKKy8q KgorICogdm13X2ZpbmRfZmlyc3RfZGlmZiAtIGZpbmQgdGhlIGZpcnN0IGRpZmZlcmVuY2UgYmV0 d2VlbiBkc3QgYW5kIHNyYworICoKKyAqIEBkc3Q6IFRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzCisg KiBAc3JjOiBUaGUgc291cmNlIGFkZHJlc3MKKyAqIEBzaXplOiBOdW1iZXIgb2YgYnl0ZXMgdG8g Y29tcGFyZQorICogQGdyYW51bGFyaXR5OiBUaGUgZ3JhbnVsYXJpdHkgbmVlZGVkIGZvciB0aGUg cmV0dXJuIHZhbHVlIGluIGJ5dGVzLgorICogcmV0dXJuOiBUaGUgb2Zmc2V0IGZyb20gZmluZCBz dGFydCB3aGVyZSB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3YXMKKyAqIGVuY291bnRlcmVkIGluIGJ5 dGVzLiBJZiBubyBkaWZmZXJlbmNlIHdhcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMKKyAq IGEgdmFsdWUgPj0gQHNpemUuCisgKi8KK3N0YXRpYyBzaXplX3Qgdm13X2ZpbmRfZmlyc3RfZGlm Zihjb25zdCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIHNpemVf dCBncmFudWxhcml0eSkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKworCS8qCisJICogVHJ5IGZp bmRpbmcgd2l0aCBsYXJnZSBpbnRlZ2VycyBpZiBhbGlnbm1lbnQgYWxsb3dzLCBvciB3ZSBjYW4K KwkgKiBmaXggaXQuIEZhbGwgdGhyb3VnaCBpZiB3ZSBuZWVkIGJldHRlciByZXNvbHV0aW9uIG9y IGFsaWdubWVudAorCSAqIHdhcyBiYWQuCisJICovCisjaWZkZWYgQ09ORklHXzY0QklUCisJVk1X X1RSWV9GSU5EX0ZJUlNUX0RJRkYodTY0KTsKKyNlbmRpZgorCVZNV19UUllfRklORF9GSVJTVF9E SUZGKHUzMik7CisJVk1XX1RSWV9GSU5EX0ZJUlNUX0RJRkYodTE2KTsKKworCXJldHVybiByb3Vu ZF9kb3duKG9mZnNldCArIHZtd19maW5kX2ZpcnN0X2RpZmZfdTgoZHN0LCBzcmMsIHNpemUpLAor CQkJICBncmFudWxhcml0eSk7Cit9CisKKworLyoKKyAqIFRlbXBsYXRlIHRvIGNvbXB1dGUgZmlu ZF9sYXN0X2RpZmYoKSBmb3IgYSBjZXJ0YWluIGludGVnZXIgdHlwZQorICogaW5jbHVkaW5nIGEg dGFpbCBjb3B5IGZvciBhbGlnbm1lbnQsIGFuZCBhZGp1c3RtZW50IG9mIHBhcmFtZXRlcnMKKyAq IGZvciBoZWFkIGZpbmQgb3IgaW5jcmVhc2VkIHJlc29sdXRpb24gZmluZCB1c2luZyBhbiB1bnNp Z25lZCBpbnRlZ2VyIGZpbmQKKyAqIG9mIHNtYWxsZXIgd2lkdGguIElmIGZpbmRpbmcgaXMgY29t cGxldGUsIGFuZCByZXNvbHV0aW9uIGlzIHN1ZmZpY2llbnQsCisgKiB0aGUgbWFjcm8gZXhlY3V0 ZXMgYSByZXR1cm4gc3RhdGVtZW50LiBPdGhlcndpc2UgaXQgZmFsbHMgdGhyb3VnaC4KKyAqLwor I2RlZmluZSBWTVdfVFJZX0ZJTkRfTEFTVF9ESUZGKF90eXBlKQkJCQkJXAorZG8gewkJCQkJCQkJ CVwKKwl1bnNpZ25lZCBpbnQgc3BpbGwgPSBTUElMTChkc3QsIF90eXBlKTsJCQkJXAorCXNzaXpl X3QgbG9jYXRpb247CQkJCQkJXAorCXNzaXplX3QgZGlmZl9vZmZzOwkJCQkJCVwKKwkJCQkJCQkJ CVwKKwlpZiAoc3BpbGwgJiYgc3BpbGwgPD0gc2l6ZSAmJiBzcGlsbCA9PSBTUElMTChzcmMsIF90 eXBlKSkgewlcCisJCWRpZmZfb2ZmcyA9IHZtd19maW5kX2xhc3RfZGlmZl91OChkc3QsIHNyYywg c3BpbGwpOwlcCisJCWlmIChkaWZmX29mZnMpIHsJCQkJCVwKKwkJCWxvY2F0aW9uID0gc2l6ZSAt IHNwaWxsICsgZGlmZl9vZmZzIC0gMTsJXAorCQkJcmV0dXJuIHJvdW5kX2Rvd24obG9jYXRpb24s IGdyYW51bGFyaXR5KTsJXAorCQl9CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJZHN0IC09IHNwaWxs OwkJCQkJCVwKKwkJc3JjIC09IHNwaWxsOwkJCQkJCVwKKwkJc2l6ZSAtPSBzcGlsbDsJCQkJCQlc CisJCXNwaWxsID0gMDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWlmICghc3BpbGwgJiYgIVNQSUxM KHNyYywgX3R5cGUpKSB7CQkJCVwKKwkJc2l6ZV90IHRvX2NvcHkgPSByb3VuZF9kb3duKHNpemUs IHNpemVvZihfdHlwZSkpOwlcCisJCQkJCQkJCQlcCisJCWRpZmZfb2ZmcyA9IHZtd19maW5kX2xh c3RfZGlmZl8gIyMgX3R5cGUJCVwKKwkJCSgoX3R5cGUgKikgZHN0LCAoX3R5cGUgKikgc3JjLCB0 b19jb3B5KTsJXAorCQlsb2NhdGlvbiA9IHNpemUgLSB0b19jb3B5ICsgZGlmZl9vZmZzIC0gc2l6 ZW9mKF90eXBlKTsJXAorCQlpZiAobG9jYXRpb24gPCAwIHx8IGdyYW51bGFyaXR5ID09IHNpemVv ZihfdHlwZSkpCVwKKwkJCXJldHVybiBsb2NhdGlvbjsJCQkJXAorCQkJCQkJCQkJXAorCQlkc3Qg LT0gdG9fY29weSAtIGRpZmZfb2ZmczsJCQkJXAorCQlzcmMgLT0gdG9fY29weSAtIGRpZmZfb2Zm czsJCQkJXAorCQlzaXplIC09IHRvX2NvcHkgLSBkaWZmX29mZnM7CQkJCVwKKwl9CQkJCQkJCQlc Cit9IHdoaWxlICgwKQorCisKKy8qKgorICogdm13X2ZpbmRfbGFzdF9kaWZmIC0gZmluZCB0aGUg bGFzdCBkaWZmZXJlbmNlIGJldHdlZW4gZHN0IGFuZCBzcmMKKyAqCisgKiBAZHN0OiBUaGUgZGVz dGluYXRpb24gYWRkcmVzcworICogQHNyYzogVGhlIHNvdXJjZSBhZGRyZXNzCisgKiBAc2l6ZTog TnVtYmVyIG9mIGJ5dGVzIHRvIGNvbXBhcmUKKyAqIEBncmFudWxhcml0eTogVGhlIGdyYW51bGFy aXR5IG5lZWRlZCBmb3IgdGhlIHJldHVybiB2YWx1ZSBpbiBieXRlcy4KKyAqIHJldHVybjogVGhl IG9mZnNldCBmcm9tIGZpbmQgc3RhcnQgd2hlcmUgdGhlIGxhc3QgZGlmZmVyZW5jZSB3YXMKKyAq IGVuY291bnRlcmVkIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIG5vIGRpZmZlcmVu Y2Ugd2FzIGZvdW5kLgorICovCitzdGF0aWMgc3NpemVfdCB2bXdfZmluZF9sYXN0X2RpZmYoY29u c3QgdTggKmRzdCwgY29uc3QgdTggKnNyYywgc2l6ZV90IHNpemUsCisJCQkJICBzaXplX3QgZ3Jh bnVsYXJpdHkpCit7CisJZHN0ICs9IHNpemU7CisJc3JjICs9IHNpemU7CisKKyNpZmRlZiBDT05G SUdfNjRCSVQKKwlWTVdfVFJZX0ZJTkRfTEFTVF9ESUZGKHU2NCk7CisjZW5kaWYKKwlWTVdfVFJZ X0ZJTkRfTEFTVF9ESUZGKHUzMik7CisJVk1XX1RSWV9GSU5EX0xBU1RfRElGRih1MTYpOworCisJ cmV0dXJuIHJvdW5kX2Rvd24odm13X2ZpbmRfbGFzdF9kaWZmX3U4KGRzdCwgc3JjLCBzaXplKSAt IDEsCisJCQkgIGdyYW51bGFyaXR5KTsKK30KKworCisvKioKKyAqIHZtd19tZW1jcHkgLSBBIHdy YXBwZXIgYXJvdW5kIGtlcm5lbCBtZW1jcHkgd2l0aCBhbGxvd2luZyB0byBwbHVnIGl0IGludG8g YQorICogc3RydWN0IHZtd19kaWZmX2NweS4KKyAqCisgKiBAZGlmZjogVGhlIHN0cnVjdCB2bXdf ZGlmZl9jcHkgY2xvc3VyZSBhcmd1bWVudCAodW51c2VkKS4KKyAqIEBkZXN0OiBUaGUgY29weSBk ZXN0aW5hdGlvbi4KKyAqIEBzcmM6IFRoZSBjb3B5IHNvdXJjZS4KKyAqIEBuOiBOdW1iZXIgb2Yg Ynl0ZXMgdG8gY29weS4KKyAqLwordm9pZCB2bXdfbWVtY3B5KHN0cnVjdCB2bXdfZGlmZl9jcHkg KmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3QgbikKK3sKKwltZW1jcHkoZGVz dCwgc3JjLCBuKTsKK30KKworCisvKioKKyAqIHZtd19hZGp1c3RfcmVjdCAtIEFkanVzdCByZWN0 YW5nbGUgY29vcmRpbmF0ZXMgZm9yIG5ld2x5IGZvdW5kIGRpZmZlcmVuY2UKKyAqCisgKiBAZGlm ZjogVGhlIHN0cnVjdCB2bXdfZGlmZl9jcHkgdXNlZCB0byB0cmFjayB0aGUgbW9kaWZpZWQgYm91 bmRpbmcgYm94LgorICogQGRpZmZfb2ZmczogVGhlIG9mZnNldCBmcm9tIEBkaWZmLT5saW5lX29m ZnNldCB3aGVyZSB0aGUgZGlmZmVyZW5jZSB3YXMKKyAqIGZvdW5kLgorICovCitzdGF0aWMgdm9p ZCB2bXdfYWRqdXN0X3JlY3Qoc3RydWN0IHZtd19kaWZmX2NweSAqZGlmZiwgc2l6ZV90IGRpZmZf b2ZmcykKK3sKKwlzaXplX3Qgb2ZmcyA9IChkaWZmX29mZnMgKyBkaWZmLT5saW5lX29mZnNldCkg LyBkaWZmLT5jcHA7CisJc3RydWN0IGRybV9yZWN0ICpyZWN0ID0gJmRpZmYtPnJlY3Q7CisKKwly ZWN0LT54MSA9IG1pbl90KGludCwgcmVjdC0+eDEsIG9mZnMpOworCXJlY3QtPngyID0gbWF4X3Qo aW50LCByZWN0LT54Miwgb2ZmcyArIDEpOworCXJlY3QtPnkxID0gbWluX3QoaW50LCByZWN0LT55 MSwgZGlmZi0+bGluZSk7CisJcmVjdC0+eTIgPSBtYXhfdChpbnQsIHJlY3QtPnkyLCBkaWZmLT5s aW5lICsgMSk7Cit9CisKKy8qKgorICogdm13X2RpZmZfbWVtY3B5IC0gbWVtY3B5IHRoYXQgY3Jl YXRlcyBhIGJvdW5kaW5nIGJveCBvZiBtb2RpZmllZCBjb250ZW50LgorICoKKyAqIEBkaWZmOiBU aGUgc3RydWN0IHZtd19kaWZmX2NweSB1c2VkIHRvIHRyYWNrIHRoZSBtb2RpZmllZCBib3VuZGlu ZyBib3guCisgKiBAZGVzdDogVGhlIGNvcHkgZGVzdGluYXRpb24uCisgKiBAc3JjOiBUaGUgY29w eSBzb3VyY2UuCisgKiBAbjogTnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkuCisgKgorICogSW4gb3Jk ZXIgdG8gY29ycmVjdGx5IHRyYWNrIHRoZSBtb2RpZmllZCBjb250ZW50LCB0aGUgZmllbGQgQGRp ZmYtPmxpbmUgbXVzdAorICogYmUgcHJlLWxvYWRlZCB3aXRoIHRoZSBjdXJyZW50IGxpbmUgbnVt YmVyLCB0aGUgZmllbGQgQGRpZmYtPmxpbmVfb2Zmc2V0IG11c3QKKyAqIGJlIHByZS1sb2FkZWQg d2l0aCB0aGUgbGluZSBvZmZzZXQgaW4gYnl0ZXMgd2hlcmUgdGhlIGNvcHkgc3RhcnRzLCBhbmQK KyAqIGZpbmFsbHkgdGhlIGZpZWxkIEBkaWZmLT5jcHAgbmVlZCB0byBiZSBwcmVsb2FkZWQgd2l0 aCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBwZXIgdW5pdCBpbiB0aGUgaG9yaXpvbnRhbCBkaXJl Y3Rpb24gb2YgdGhlIGFyZWEgd2UncmUgZXhhbWluaW5nLgorICogVHlwaWNhbGx5IGJ5dGVzIHBl ciBwaXhlbC4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGtub3cgdGhlIG5lZWRlZCBncmFudWxhcml0 eSBvZiB0aGUgZGlmZmVyZW5jZSBjb21wdXRpbmcKKyAqIG9wZXJhdGlvbnMuIEEgaGlnaGVyIGNw cCBnZW5lcmFsbHkgbGVhZHMgdG8gZmFzdGVyIGV4ZWN1dGlvbiBhdCB0aGUgY29zdCBvZgorICog Ym91bmRpbmcgYm94IHdpZHRoIHByZWNpc2lvbi4KKyAqLwordm9pZCB2bXdfZGlmZl9tZW1jcHko c3RydWN0IHZtd19kaWZmX2NweSAqZGlmZiwgdTggKmRlc3QsIGNvbnN0IHU4ICpzcmMsCisJCSAg ICAgc2l6ZV90IG4pCit7CisJc3NpemVfdCBjc2l6ZSwgYnl0ZV9sZW47CisKKwlpZiAoV0FSTl9P Tl9PTkNFKHJvdW5kX2Rvd24obiwgZGlmZi0+Y3BwKSAhPSBuKSkKKwkJcmV0dXJuOworCisJLyog VE9ETzogUG9zc2libHkgdXNlIGEgc2luZ2xlIHZtd19maW5kX2ZpcnN0X2RpZmYgcGVyIGxpbmU/ ICovCisJY3NpemUgPSB2bXdfZmluZF9maXJzdF9kaWZmKGRlc3QsIHNyYywgbiwgZGlmZi0+Y3Bw KTsKKwlpZiAoY3NpemUgPCBuKSB7CisJCXZtd19hZGp1c3RfcmVjdChkaWZmLCBjc2l6ZSk7CisJ CWJ5dGVfbGVuID0gZGlmZi0+Y3BwOworCisJCS8qCisJCSAqIFN0YXJ0aW5nIGZyb20gd2hlcmUg Zmlyc3QgZGlmZmVyZW5jZSB3YXMgZm91bmQsIGZpbmQKKwkJICogbG9jYXRpb24gb2YgbGFzdCBk aWZmZXJlbmNlLCBhbmQgdGhlbiBjb3B5LgorCQkgKi8KKwkJZGlmZi0+bGluZV9vZmZzZXQgKz0g Y3NpemU7CisJCWRlc3QgKz0gY3NpemU7CisJCXNyYyArPSBjc2l6ZTsKKwkJbiAtPSBjc2l6ZTsK KwkJY3NpemUgPSB2bXdfZmluZF9sYXN0X2RpZmYoZGVzdCwgc3JjLCBuLCBkaWZmLT5jcHApOwor CQlpZiAoY3NpemUgPj0gMCkgeworCQkJYnl0ZV9sZW4gKz0gY3NpemU7CisJCQl2bXdfYWRqdXN0 X3JlY3QoZGlmZiwgY3NpemUpOworCQl9CisJCW1lbWNweShkZXN0LCBzcmMsIGJ5dGVfbGVuKTsK Kwl9CisJZGlmZi0+bGluZV9vZmZzZXQgKz0gbjsKK30KKworLyoqCisgKiBzdHJ1Y3Qgdm13X2Jv X2JsaXRfbGluZV9kYXRhIC0gQ29udmVuaWVuY2UgYXJndW1lbnQgdG8gdm13X2JvX2NwdV9ibGl0 X2xpbmUKKyAqCisgKiBAbWFwcGVkX2RzdDogQWxyZWFkeSBtYXBwZWQgZGVzdGluYXRpb24gcGFn ZSBpbmRleCBpbiBAZHN0X3BhZ2VzLgorICogQGRzdF9hZGRyOiBLZXJuZWwgdmlydHVhbCBhZGRy ZXNzIG9mIG1hcHBlZCBkZXN0aW5hdGlvbiBwYWdlLgorICogQGRzdF9wYWdlczogQXJyYXkgb2Yg ZGVzdGluYXRpb24gYm8gcGFnZXMuCisgKiBAZHN0X251bV9wYWdlczogTnVtYmVyIG9mIGRlc3Rp bmF0aW9uIGJvIHBhZ2VzLgorICogQGRzdF9wcm90OiBEZXN0aW5hdGlvbiBibyBwYWdlIHByb3Rl Y3Rpb24uCisgKiBAbWFwcGVkX3NyYzogQWxyZWFkeSBtYXBwZWQgc291cmNlIHBhZ2UgaW5kZXgg aW4gQGRzdF9wYWdlcy4KKyAqIEBzcmNfYWRkcjogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiBt YXBwZWQgc291cmNlIHBhZ2UuCisgKiBAc3JjX3BhZ2VzOiBBcnJheSBvZiBzb3VyY2UgYm8gcGFn ZXMuCisgKiBAc3JjX251bV9wYWdlczogTnVtYmVyIG9mIHNvdXJjZSBibyBwYWdlcy4KKyAqIEBz cmNfcHJvdDogU291cmNlIGJvIHBhZ2UgcHJvdGVjdGlvbi4KKyAqIEBkaWZmOiBTdHJ1Y3Qgdm13 X2RpZmZfY3B5LCBpbiB0aGUgZW5kIGZvcndhcmRlZCB0byB0aGUgbWVtY3B5IHJvdXRpbmUuCisg Ki8KK3N0cnVjdCB2bXdfYm9fYmxpdF9saW5lX2RhdGEgeworCXUzMiBtYXBwZWRfZHN0OworCXU4 ICpkc3RfYWRkcjsKKwlzdHJ1Y3QgcGFnZSAqKmRzdF9wYWdlczsKKwl1MzIgZHN0X251bV9wYWdl czsKKwlwZ3Byb3RfdCBkc3RfcHJvdDsKKwl1MzIgbWFwcGVkX3NyYzsKKwl1OCAqc3JjX2FkZHI7 CisJc3RydWN0IHBhZ2UgKipzcmNfcGFnZXM7CisJdTMyIHNyY19udW1fcGFnZXM7CisJcGdwcm90 X3Qgc3JjX3Byb3Q7CisJc3RydWN0IHZtd19kaWZmX2NweSAqZGlmZjsKK307CisKKy8qKgorICog dm13X2JvX2NwdV9ibGl0X2xpbmUgLSBCbGl0IHBhcnQgb2YgYSBsaW5lIGZyb20gb25lIGJvIHRv IGFub3RoZXIuCisgKgorICogQGQ6IEJsaXQgZGF0YSBhcyBkZXNjcmliZWQgYWJvdmUuCisgKiBA ZHN0X29mZnNldDogRGVzdGluYXRpb24gY29weSBzdGFydCBvZmZzZXQgZnJvbSBzdGFydCBvZiBi by4KKyAqIEBzcmNfb2Zmc2V0OiBTb3VyY2UgY29weSBzdGFydCBvZmZzZXQgZnJvbSBzdGFydCBv ZiBiby4KKyAqIEBieXRlc190b19jb3B5OiBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weSBpbiB0aGlz IGxpbmUuCisgKi8KK3N0YXRpYyBpbnQgdm13X2JvX2NwdV9ibGl0X2xpbmUoc3RydWN0IHZtd19i b19ibGl0X2xpbmVfZGF0YSAqZCwKKwkJCQl1MzIgZHN0X29mZnNldCwKKwkJCQl1MzIgc3JjX29m ZnNldCwKKwkJCQl1MzIgYnl0ZXNfdG9fY29weSkKK3sKKwlzdHJ1Y3Qgdm13X2RpZmZfY3B5ICpk aWZmID0gZC0+ZGlmZjsKKworCXdoaWxlIChieXRlc190b19jb3B5KSB7CisJCXUzMiBjb3B5X3Np emUgPSBieXRlc190b19jb3B5OworCQl1MzIgZHN0X3BhZ2UgPSBkc3Rfb2Zmc2V0ID4+IFBBR0Vf U0hJRlQ7CisJCXUzMiBzcmNfcGFnZSA9IHNyY19vZmZzZXQgPj4gUEFHRV9TSElGVDsKKwkJdTMy IGRzdF9wYWdlX29mZnNldCA9IGRzdF9vZmZzZXQgJiB+UEFHRV9NQVNLOworCQl1MzIgc3JjX3Bh Z2Vfb2Zmc2V0ID0gc3JjX29mZnNldCAmIH5QQUdFX01BU0s7CisJCWJvb2wgdW5tYXBfZHN0ID0g ZC0+ZHN0X2FkZHIgJiYgZHN0X3BhZ2UgIT0gZC0+bWFwcGVkX2RzdDsKKwkJYm9vbCB1bm1hcF9z cmMgPSBkLT5zcmNfYWRkciAmJiAoc3JjX3BhZ2UgIT0gZC0+bWFwcGVkX3NyYyB8fAorCQkJCQkJ IHVubWFwX2RzdCk7CisKKwkJY29weV9zaXplID0gbWluX3QodTMyLCBjb3B5X3NpemUsIFBBR0Vf U0laRSAtIGRzdF9wYWdlX29mZnNldCk7CisJCWNvcHlfc2l6ZSA9IG1pbl90KHUzMiwgY29weV9z aXplLCBQQUdFX1NJWkUgLSBzcmNfcGFnZV9vZmZzZXQpOworCisJCWlmICh1bm1hcF9zcmMpIHsK KwkJCXR0bV9rdW5tYXBfYXRvbWljX3Byb3QoZC0+c3JjX2FkZHIsIGQtPnNyY19wcm90KTsKKwkJ CWQtPnNyY19hZGRyID0gTlVMTDsKKwkJfQorCisJCWlmICh1bm1hcF9kc3QpIHsKKwkJCXR0bV9r dW5tYXBfYXRvbWljX3Byb3QoZC0+ZHN0X2FkZHIsIGQtPmRzdF9wcm90KTsKKwkJCWQtPmRzdF9h ZGRyID0gTlVMTDsKKwkJfQorCisJCWlmICghZC0+ZHN0X2FkZHIpIHsKKwkJCWlmIChXQVJOX09O X09OQ0UoZHN0X3BhZ2UgPj0gZC0+ZHN0X251bV9wYWdlcykpCisJCQkJcmV0dXJuIC1FSU5WQUw7 CisKKwkJCWQtPmRzdF9hZGRyID0KKwkJCQl0dG1fa21hcF9hdG9taWNfcHJvdChkLT5kc3RfcGFn ZXNbZHN0X3BhZ2VdLAorCQkJCQkJICAgICBkLT5kc3RfcHJvdCk7CisJCQlpZiAoIWQtPmRzdF9h ZGRyKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQlkLT5tYXBwZWRfZHN0ID0gZHN0X3BhZ2U7 CisJCX0KKworCQlpZiAoIWQtPnNyY19hZGRyKSB7CisJCQlpZiAoV0FSTl9PTl9PTkNFKHNyY19w YWdlID49IGQtPnNyY19udW1fcGFnZXMpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlkLT5z cmNfYWRkciA9CisJCQkJdHRtX2ttYXBfYXRvbWljX3Byb3QoZC0+c3JjX3BhZ2VzW3NyY19wYWdl XSwKKwkJCQkJCSAgICAgZC0+c3JjX3Byb3QpOworCQkJaWYgKCFkLT5zcmNfYWRkcikKKwkJCQly ZXR1cm4gLUVOT01FTTsKKworCQkJZC0+bWFwcGVkX3NyYyA9IHNyY19wYWdlOworCQl9CisJCWRp ZmYtPmRvX2NweShkaWZmLCBkLT5kc3RfYWRkciArIGRzdF9wYWdlX29mZnNldCwKKwkJCSAgICAg ZC0+c3JjX2FkZHIgKyBzcmNfcGFnZV9vZmZzZXQsIGNvcHlfc2l6ZSk7CisKKwkJYnl0ZXNfdG9f Y29weSAtPSBjb3B5X3NpemU7CisJCWRzdF9vZmZzZXQgKz0gY29weV9zaXplOworCQlzcmNfb2Zm c2V0ICs9IGNvcHlfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0dG1fYm9f Y3B1X2JsaXQgLSBpbi1rZXJuZWwgY3B1IGJsaXQuCisgKgorICogQGRzdDogRGVzdGluYXRpb24g YnVmZmVyIG9iamVjdC4KKyAqIEBkc3Rfb2Zmc2V0OiBEZXN0aW5hdGlvbiBvZmZzZXQgb2YgYmxp dCBzdGFydCBpbiBieXRlcy4KKyAqIEBkc3Rfc3RyaWRlOiBEZXN0aW5hdGlvbiBzdHJpZGUgaW4g Ynl0ZXMuCisgKiBAc3JjOiBTb3VyY2UgYnVmZmVyIG9iamVjdC4KKyAqIEBzcmNfb2Zmc2V0OiBT b3VyY2Ugb2Zmc2V0IG9mIGJsaXQgc3RhcnQgaW4gYnl0ZXMuCisgKiBAc3JjX3N0cmlkZTogU291 cmNlIHN0cmlkZSBpbiBieXRlcy4KKyAqIEB3OiBXaWR0aCBvZiBibGl0LgorICogQGg6IEhlaWdo dCBvZiBibGl0LgorICogcmV0dXJuOiBaZXJvIG9uIHN1Y2Nlc3MuIE5lZ2F0aXZlIGVycm9yIHZh bHVlIG9uIGZhaWx1cmUuIFdpbGwgcHJpbnQgb3V0CisgKiBrZXJuZWwgd2FybmluZ3Mgb24gY2Fs bGVyIGJ1Z3MuCisgKgorICogUGVyZm9ybXMgYSBDUFUgYmxpdCBmcm9tIG9uZSBidWZmZXIgb2Jq ZWN0IHRvIGFub3RoZXIgYXZvaWRpbmcgYSBmdWxsCisgKiBibyB2bWFwIHdoaWNoIG1heSBleGhh dXN0LSBvciBmcmFnbWVudCB2bWFsbG9jIHNwYWNlLgorICogT24gc3VwcG9ydGVkIGFyY2hpdGVj dHVyZXMgKHg4NiksIHdlJ3JlIHVzaW5nIGttYXBfYXRvbWljIHdoaWNoIGF2b2lkcworICogY3Jv c3MtcHJvY2Vzc29yIFRMQi0gYW5kIGNhY2hlIGZsdXNoZXMgYW5kIG1heSwgb24gbm9uLUhJR0hN RU0gc3lzdGVtcworICogcmVmZXJlbmNlIGFscmVhZHkgc2V0LXVwIG1hcHBpbmdzLgorICoKKyAq IE5laXRoZXIgb2YgdGhlIGJ1ZmZlciBvYmplY3RzIG1heSBiZSBwbGFjZWQgaW4gUENJIG1lbW9y eQorICogKEZpeGVkIG1lbW9yeSBpbiBUVE0gdGVybWlub2xvZ3kpIHdoZW4gdXNpbmcgdGhpcyBm dW5jdGlvbi4KKyAqLworaW50IHZtd19ib19jcHVfYmxpdChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKmRzdCwKKwkJICAgIHUzMiBkc3Rfb2Zmc2V0LCB1MzIgZHN0X3N0cmlkZSwKKwkJICAgIHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqc3JjLAorCQkgICAgdTMyIHNyY19vZmZzZXQsIHUzMiBz cmNfc3RyaWRlLAorCQkgICAgdTMyIHcsIHUzMiBoLAorCQkgICAgc3RydWN0IHZtd19kaWZmX2Nw eSAqZGlmZikKK3sKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geworCQkuaW50ZXJy dXB0aWJsZSA9IGZhbHNlLAorCQkubm9fd2FpdF9ncHUgPSBmYWxzZQorCX07CisJdTMyIGosIGlu aXRpYWxfbGluZSA9IGRzdF9vZmZzZXQgLyBkc3Rfc3RyaWRlOworCXN0cnVjdCB2bXdfYm9fYmxp dF9saW5lX2RhdGEgZDsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEJ1ZmZlciBvYmplY3RzIG5lZWQg dG8gYmUgZWl0aGVyIHBpbm5lZCBvciByZXNlcnZlZDogKi8KKwlpZiAoIShkc3QtPm1lbS5wbGFj ZW1lbnQgJiBUVE1fUExfRkxBR19OT19FVklDVCkpCisJCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmRz dC0+cmVzdi0+bG9jay5iYXNlKTsKKwlpZiAoIShzcmMtPm1lbS5wbGFjZW1lbnQgJiBUVE1fUExf RkxBR19OT19FVklDVCkpCisJCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNyYy0+cmVzdi0+bG9jay5i YXNlKTsKKworCWlmIChkc3QtPnR0bS0+c3RhdGUgPT0gdHRfdW5wb3B1bGF0ZWQpIHsKKwkJcmV0 ID0gZHN0LT50dG0tPmJkZXYtPmRyaXZlci0+dHRtX3R0X3BvcHVsYXRlKGRzdC0+dHRtLCAmY3R4 KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNyYy0+dHRtLT5zdGF0 ZSA9PSB0dF91bnBvcHVsYXRlZCkgeworCQlyZXQgPSBzcmMtPnR0bS0+YmRldi0+ZHJpdmVyLT50 dG1fdHRfcG9wdWxhdGUoc3JjLT50dG0sICZjdHgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKwl9CisKKwlkLm1hcHBlZF9kc3QgPSAwOworCWQubWFwcGVkX3NyYyA9IDA7CisJZC5kc3Rf YWRkciA9IE5VTEw7CisJZC5zcmNfYWRkciA9IE5VTEw7CisJZC5kc3RfcGFnZXMgPSBkc3QtPnR0 bS0+cGFnZXM7CisJZC5zcmNfcGFnZXMgPSBzcmMtPnR0bS0+cGFnZXM7CisJZC5kc3RfbnVtX3Bh Z2VzID0gZHN0LT5udW1fcGFnZXM7CisJZC5zcmNfbnVtX3BhZ2VzID0gc3JjLT5udW1fcGFnZXM7 CisJZC5kc3RfcHJvdCA9IHR0bV9pb19wcm90KGRzdC0+bWVtLnBsYWNlbWVudCwgUEFHRV9LRVJO RUwpOworCWQuc3JjX3Byb3QgPSB0dG1faW9fcHJvdChzcmMtPm1lbS5wbGFjZW1lbnQsIFBBR0Vf S0VSTkVMKTsKKwlkLmRpZmYgPSBkaWZmOworCisJZm9yIChqID0gMDsgaiA8IGg7ICsraikgewor CQlkaWZmLT5saW5lID0gaiArIGluaXRpYWxfbGluZTsKKwkJZGlmZi0+bGluZV9vZmZzZXQgPSBk c3Rfb2Zmc2V0ICUgZHN0X3N0cmlkZTsKKwkJcmV0ID0gdm13X2JvX2NwdV9ibGl0X2xpbmUoJmQs IGRzdF9vZmZzZXQsIHNyY19vZmZzZXQsIHcpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisK KwkJZHN0X29mZnNldCArPSBkc3Rfc3RyaWRlOworCQlzcmNfb2Zmc2V0ICs9IHNyY19zdHJpZGU7 CisJfQorb3V0OgorCWlmIChkLnNyY19hZGRyKQorCQl0dG1fa3VubWFwX2F0b21pY19wcm90KGQu c3JjX2FkZHIsIGQuc3JjX3Byb3QpOworCWlmIChkLmRzdF9hZGRyKQorCQl0dG1fa3VubWFwX2F0 b21pY19wcm90KGQuZHN0X2FkZHIsIGQuZHN0X3Byb3QpOworCisJcmV0dXJuIHJldDsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmgKaW5kZXggZDA4NzUzZThmZDk0Li4wNTM0MThhZGY2 YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC02NzgsNiArNjc4LDcgQEAg ZXh0ZXJuIHZvaWQgdm13X2ZlbmNlX3NpbmdsZV9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvLAogCQkJCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSk7CiBleHRlcm4gdm9pZCB2bXdf cmVzb3VyY2VfZXZpY3RfYWxsKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpOwogCisKIC8q KgogICogRE1BIGJ1ZmZlciBoZWxwZXIgcm91dGluZXMgLSB2bXdnZnhfZG1hYnVmLmMKICAqLwpA QCAtMTE2NSw2ICsxMTY2LDUzIEBAIGV4dGVybiBpbnQgdm13X2NtZGJ1Zl9jdXJfZmx1c2goc3Ry dWN0IHZtd19jbWRidWZfbWFuICptYW4sCiAJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKTsKIGV4dGVy biB2b2lkIHZtd19jbWRidWZfaXJxdGhyZWFkKHN0cnVjdCB2bXdfY21kYnVmX21hbiAqbWFuKTsK IAorLyogQ1BVIGJsaXQgdXRpbGl0aWVzIC0gdm13Z2Z4X2JsaXQuYyAqLworCisvKioKKyAqIHN0 cnVjdCB2bXdfZGlmZl9jcHkgLSBDUFUgYmxpdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUKKyAqCisg KiBAcmVjdDogVGhlIG91dHB1dCBib3VuZGluZyBib3ggcmVjdGFuZ2xlLgorICogQGxpbmU6IFRo ZSBjdXJyZW50IGxpbmUgb2YgdGhlIGJsaXQuCisgKiBAbGluZV9vZmZzZXQ6IE9mZnNldCBvZiB0 aGUgY3VycmVudCBsaW5lIHNlZ21lbnQuCisgKiBAY3BwOiBCeXRlcyBwZXIgcGl4ZWwgKGdyYW51 bGFyaXR5IGluZm9ybWF0aW9uKS4KKyAqIEBtZW1jcHk6IFdoaWNoIG1lbWNweSBmdW5jdGlvbiB0 byB1c2UuCisgKi8KK3N0cnVjdCB2bXdfZGlmZl9jcHkgeworCXN0cnVjdCBkcm1fcmVjdCByZWN0 OworCXNpemVfdCBsaW5lOworCXNpemVfdCBsaW5lX29mZnNldDsKKwlpbnQgY3BwOworCXZvaWQg KCpkb19jcHkpKHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAq c3JjLAorCQkgICAgICAgc2l6ZV90IG4pOworfTsKKworI2RlZmluZSBWTVdfQ1BVX0JMSVRfSU5J VElBTElaRVIgewlcCisJLmRvX2NweSA9IHZtd19tZW1jcHksCQlcCit9CisKKyNkZWZpbmUgVk1X X0NQVV9CTElUX0RJRkZfSU5JVElBTElaRVIoX2NwcCkgewkgIFwKKwkubGluZSA9IDAsCQkJCSAg XAorCS5saW5lX29mZnNldCA9IDAsCQkJICBcCisJLnJlY3QgPSB7IC54MSA9IElOVF9NQVgvMiwJ CSAgXAorCQkgIC55MSA9IElOVF9NQVgvMiwJCSAgXAorCQkgIC54MiA9IElOVF9NSU4vMiwJCSAg XAorCQkgIC55MiA9IElOVF9NSU4vMgkJICBcCisJfSwJCQkJCSAgXAorCS5jcHAgPSBfY3BwLAkJ CQkgIFwKKwkuZG9fY3B5ID0gdm13X2RpZmZfbWVtY3B5LAkJICBcCit9CisKK3ZvaWQgdm13X2Rp ZmZfbWVtY3B5KHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAq c3JjLAorCQkgICAgIHNpemVfdCBuKTsKKwordm9pZCB2bXdfbWVtY3B5KHN0cnVjdCB2bXdfZGlm Zl9jcHkgKmRpZmYsIHU4ICpkZXN0LCBjb25zdCB1OCAqc3JjLCBzaXplX3Qgbik7CisKK2ludCB2 bXdfYm9fY3B1X2JsaXQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpkc3QsCisJCSAgICB1MzIg ZHN0X29mZnNldCwgdTMyIGRzdF9zdHJpZGUsCisJCSAgICBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmpl Y3QgKnNyYywKKwkJICAgIHUzMiBzcmNfb2Zmc2V0LCB1MzIgc3JjX3N0cmlkZSwKKwkJICAgIHUz MiB3LCB1MzIgaCwKKwkJICAgIHN0cnVjdCB2bXdfZGlmZl9jcHkgKmRpZmYpOwogCiAvKioKICAq IElubGluZSBoZWxwZXIgZnVuY3Rpb25zCi0tIAoyLjE0LjMKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=