From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 08/10] drm/i915: Support for pread/pwrite from/to non shmem backed objects Date: Thu, 4 Feb 2016 15:00:09 +0530 Message-ID: <1454578211-24823-9-git-send-email-ankitprasad.r.sharma@intel.com> References: <1454578211-24823-1-git-send-email-ankitprasad.r.sharma@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id EABA06E849 for ; Thu, 4 Feb 2016 01:53:22 -0800 (PST) In-Reply-To: <1454578211-24823-1-git-send-email-ankitprasad.r.sharma@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 Cc: akash.goel@intel.com, Ankitprasad Sharma , shashidhar.hiremath@intel.com List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQW5raXRwcmFzYWQgU2hhcm1hIDxhbmtpdHByYXNhZC5yLnNoYXJtYUBpbnRlbC5jb20+ CgpUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZXh0ZW5kaW5nIHRoZSBwcmVhZC9wd3JpdGUg ZnVuY3Rpb25hbGl0eQpmb3Igb2JqZWN0cyBub3QgYmFja2VkIGJ5IHNobWVtLiBUaGUgYWNjZXNz IHdpbGwgYmUgbWFkZSB0aHJvdWdoCmd0dCBpbnRlcmZhY2UuIFRoaXMgd2lsbCBjb3ZlciBvYmpl Y3RzIGJhY2tlZCBieSBzdG9sZW4gbWVtb3J5IGFzIHdlbGwKYXMgb3RoZXIgbm9uLXNobWVtIGJh Y2tlZCBvYmplY3RzLgoKdjI6IERyb3AgbG9ja3MgYXJvdW5kIHNsb3dfdXNlcl9hY2Nlc3MsIHBy ZWZhdWx0IHRoZSBwYWdlcyBiZWZvcmUKYWNjZXNzIChDaHJpcykKCnYzOiBSZWJhc2VkIHRvIHRo ZSBsYXRlc3QgZHJtLWludGVsLW5pZ2h0bHkgKEFua2l0KQoKdjQ6IE1vdmVkIHBhZ2UgYmFzZSAm IG9mZnNldCBjYWxjdWxhdGlvbnMgb3V0c2lkZSB0aGUgY29weSBsb29wLApjb3JyZWN0ZWQgZGF0 YSB0eXBlcyBmb3Igc2l6ZSBhbmQgb2Zmc2V0IHZhcmlhYmxlcywgY29ycmVjdGVkIGlmLWVsc2UK YnJhY2VzIGZvcm1hdCAoVHZydGtvL2tlcm5lbGRvY3MpCgp2NTogRW5hYmxlZCBwcmVhZC9wd3Jp dGUgZm9yIGFsbCBub24tc2htZW0gYmFja2VkIG9iamVjdHMgaW5jbHVkaW5nCndpdGhvdXQgdGls aW5nIHJlc3RyaWN0aW9ucyAoQW5raXQpCgp2NjogVXNpbmcgcHdyaXRlX2Zhc3QgZm9yIG5vbi1z aG1lbSBiYWNrZWQgb2JqZWN0cyBhcyB3ZWxsIChDaHJpcykKCnY3OiBVcGRhdGVkIGNvbW1pdCBt ZXNzYWdlLCBSZW5hbWVkIGk5MTVfZ2VtX2d0dF9yZWFkIHRvIGk5MTVfZ2VtX2d0dF9jb3B5LAph ZGRlZCBwd3JpdGUgc2xvdyBwYXRoIGZvciBub24tc2htZW0gYmFja2VkIG9iamVjdHMgKENocmlz L1R2cnRrbykKCnY4OiBVcGRhdGVkIHY3IGNvbW1pdCBtZXNzYWdlLCBtdXRleCB1bmxvY2sgYXJv dW5kIHB3cml0ZSBzbG93IHBhdGggZm9yCm5vbi1zaG1lbSBiYWNrZWQgb2JqZWN0cyAoVHZydGtv KQoKdjk6IENvcnJlY3RlZCBjaGVjayBkdXJpbmcgcHJlYWRfaW9jdGwsIHRvIGF2b2lkIHNobWVt X3ByZWFkIGJlaW5nCmNhbGxlZCBmb3Igbm9uLXNobWVtIGJhY2tlZCBvYmplY3RzIChUdnJ0a28p Cgp2MTA6IE1vdmVkIHRoZSB3cml0ZV9kb21haW4gY2hlY2sgdG8gbmVlZHNfY2xmbHVzaCBhbmQg dGlsaW5nIG1vZGUgY2hlY2sKdG8gcHdyaXRlX2Zhc3QgKENocmlzKQoKdjExOiBVc2UgcHdyaXRl X2Zhc3QgZmFsbGJhY2sgZm9yIGFsbCBvYmplY3RzIChzaG1lbSBhbmQgbm9uLXNobWVtIGJhY2tl ZCksCmNhbGwgZmFzdF91c2VyX3dyaXRlIHJlZ2FyZGxlc3Mgb2YgcGFnZWZhdWx0IGluIHByZXZp b3VzIGl0ZXJhdGlvbgoKdjEyOiBVc2UgcGFnZS1ieS1wYWdlIGNvcHkgZm9yIHNsb3cgdXNlciBh Y2Nlc3MgdG9vIChDaHJpcykKCnYxMzogSGFuZGxlZCBFRkFVTFQsIEF2b2lkIHVzZSBvZiBXQVJO X09OLCBwdXRfZmVuY2Ugb25seSBpZiB3aG9sZSBvYmoKcGlubmVkIChDaHJpcykKClRlc3RjYXNl OiBpZ3QvZ2VtX3N0b2xlbiwgaWd0L2dlbV9wcmVhZCwgaWd0L2dlbV9wd3JpdGUKClNpZ25lZC1v ZmYtYnk6IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29t PgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgfCAyMTEgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE3OSBpbnNlcnRp b25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBlZDhh ZTVkLi40MGYyOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTU1LDYgKzU1LDkgQEAg c3RhdGljIGJvb2wgY3B1X2NhY2hlX2lzX2NvaGVyZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CiAKIHN0YXRpYyBib29sIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCiB7CisJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9H RU1fRE9NQUlOX0NQVSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKCFjcHVfY2FjaGVfaXNfY29o ZXJlbnQob2JqLT5iYXNlLmRldiwgb2JqLT5jYWNoZV9sZXZlbCkpCiAJCXJldHVybiB0cnVlOwog CkBAIC02NDYsNiArNjQ5LDE0MSBAQCBzaG1lbV9wcmVhZF9zbG93KHN0cnVjdCBwYWdlICpwYWdl LCBpbnQgc2htZW1fcGFnZV9vZmZzZXQsIGludCBwYWdlX2xlbmd0aCwKIAlyZXR1cm4gcmV0ID8g LSBFRkFVTFQgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90CitzbG93X3VzZXJfYWNj ZXNzKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgdWludDY0X3QgcGFnZV9iYXNlLCBp bnQgcGFnZV9vZmZzZXQsCisJCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAorCQkgaW50IGxlbmd0 aCwgYm9vbCBwd3JpdGUpCit7CisJdm9pZCBfX2lvbWVtICppb2FkZHI7CisJdm9pZCAqdmFkZHI7 CisJdWludDY0X3QgdW53cml0dGVuOworCisJaW9hZGRyID0gaW9fbWFwcGluZ19tYXBfd2MobWFw cGluZywgcGFnZV9iYXNlKTsKKwkvKiBXZSBjYW4gdXNlIHRoZSBjcHUgbWVtIGNvcHkgZnVuY3Rp b24gYmVjYXVzZSB0aGlzIGlzIFg4Ni4gKi8KKwl2YWRkciA9ICh2b2lkIF9fZm9yY2UgKilpb2Fk ZHIgKyBwYWdlX29mZnNldDsKKwlpZiAocHdyaXRlKQorCQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJv bV91c2VyKHZhZGRyLCB1c2VyX2RhdGEsIGxlbmd0aCk7CisJZWxzZQorCQl1bndyaXR0ZW4gPSBf X2NvcHlfdG9fdXNlcih1c2VyX2RhdGEsIHZhZGRyLCBsZW5ndGgpOworCisJaW9fbWFwcGluZ191 bm1hcChpb2FkZHIpOworCXJldHVybiB1bndyaXR0ZW47Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVf Z2VtX2d0dF9wcmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLCB1aW50NjRfdCBzaXplLAorCQkgICB1aW50NjRfdCBkYXRhX29m ZnNldCwgdWludDY0X3QgZGF0YV9wdHIpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKwlj aGFyIF9fdXNlciAqdXNlcl9kYXRhOworCXVpbnQ2NF90IHJlbWFpbjsKKwl1aW50NjRfdCBvZmZz ZXQ7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2JqLCAw LCBQSU5fTUFQUEFCTEUpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gaW5zZXJ0X21hcHBhYmxlX25v ZGUoZGV2X3ByaXYsICZub2RlLCBQQUdFX1NJWkUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7 CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCQlpZiAocmV0KSB7 CisJCQlyZW1vdmVfbWFwcGFibGVfbm9kZSgmbm9kZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJ CWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwl9IGVsc2UgeworCQlub2RlLnN0YXJ0 ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7CisJCW5vZGUuYWxsb2NhdGVkID0gZmFs c2U7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwkJaWYgKHJldCkK KwkJCWdvdG8gb3V0X3VucGluOworCX0KKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9f Z3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnBpbjsKKwor CXVzZXJfZGF0YSA9IHRvX3VzZXJfcHRyKGRhdGFfcHRyKTsKKwlyZW1haW4gPSBzaXplOworCW9m ZnNldCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopICsgZGF0YV9vZmZzZXQ7CisKKwlt dXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAobGlrZWx5KCFpOTE1LnByZWZh dWx0X2Rpc2FibGUpKSB7CisJCXJldCA9IGZhdWx0X2luX211bHRpcGFnZXNfd3JpdGVhYmxlKHVz ZXJfZGF0YSwgcmVtYWluKTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1 Y3RfbXV0ZXgpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKwl9CisKKwl3aGlsZSAocmVtYWlu ID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHBhZ2VfYmFz ZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBwYWdlX29mZnNldCA9IG9mZnNl dCB3aXRoaW4gcGFnZQorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMg cGFnZQorCQkgKi8KKwkJdTMyIHBhZ2VfYmFzZSA9IG5vZGUuc3RhcnQ7CisJCXVuc2lnbmVkIHBh Z2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKKwkJdW5zaWduZWQgcGFnZV9sZW5n dGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKwkJcGFnZV9sZW5ndGggPSByZW1haW4gPCBw YWdlX2xlbmd0aCA/IHJlbWFpbiA6IHBhZ2VfbGVuZ3RoOworCQlpZiAobm9kZS5hbGxvY2F0ZWQp IHsKKwkJCXdtYigpOworCQkJZGV2X3ByaXYtPmd0dC5iYXNlLmluc2VydF9wYWdlKCZkZXZfcHJp di0+Z3R0LmJhc2UsCisJCQkJCQkgICAgICAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVz cyhvYmosIG9mZnNldCA+PiBQQUdFX1NISUZUKSwKKwkJCQkJCSAgICAgICBub2RlLnN0YXJ0LAor CQkJCQkJICAgICAgIEk5MTVfQ0FDSEVfTk9ORSwgMCk7CisJCQl3bWIoKTsKKwkJfSBlbHNlIHsK KwkJCXBhZ2VfYmFzZSArPSBvZmZzZXQgJiBQQUdFX01BU0s7CisJCX0KKwkJLyogVGhpcyBpcyBh IHNsb3cgcmVhZC93cml0ZSBhcyBpdCB0cmllcyB0byByZWFkIGZyb20KKwkJICogYW5kIHdyaXRl IHRvIHVzZXIgbWVtb3J5IHdoaWNoIG1heSByZXN1bHQgaW50byBwYWdlCisJCSAqIGZhdWx0cywg YW5kIHNvIHdlIGNhbm5vdCBwZXJmb3JtIHRoaXMgdW5kZXIgc3RydWN0X211dGV4LgorCQkgKi8K KwkJaWYgKHNsb3dfdXNlcl9hY2Nlc3MoZGV2X3ByaXYtPmd0dC5tYXBwYWJsZSwgcGFnZV9iYXNl LAorCQkJCSAgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwKKwkJCQkgICAgIHBhZ2VfbGVuZ3Ro LCBmYWxzZSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCXJlbWFp biAtPSBwYWdlX2xlbmd0aDsKKwkJdXNlcl9kYXRhICs9IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQg Kz0gcGFnZV9sZW5ndGg7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwor CWlmIChyZXQgPT0gMCAmJiAob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJ Tl9HVFQpID09IDApIHsKKwkJLyogVGhlIHVzZXIgaGFzIG1vZGlmaWVkIHRoZSBvYmplY3Qgd2hp bHN0IHdlIHRyaWVkCisJCSAqIHJlYWRpbmcgZnJvbSBpdCwgYW5kIHdlIG5vdyBoYXZlIG5vIGlk ZWEgd2hhdCBkb21haW4KKwkJICogdGhlIHBhZ2VzIHNob3VsZCBiZSBpbi4gQXMgd2UgaGF2ZSBq dXN0IGJlZW4gdG91Y2hpbmcKKwkJICogdGhlbSBkaXJlY3RseSwgZmx1c2ggZXZlcnl0aGluZyBi YWNrIHRvIHRoZSBHVFQKKwkJICogZG9tYWluLgorCQkgKi8KKwkJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgZmFsc2UpOworCX0KKworb3V0X3VucGluOgorCWlm IChub2RlLmFsbG9jYXRlZCkgeworCQl3bWIoKTsKKwkJZGV2X3ByaXYtPmd0dC5iYXNlLmNsZWFy X3JhbmdlKCZkZXZfcHJpdi0+Z3R0LmJhc2UsCisJCQkJCSAgICAgICBub2RlLnN0YXJ0LCBub2Rl LnNpemUsCisJCQkJCSAgICAgICB0cnVlKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2Vz KG9iaik7CisJCXJlbW92ZV9tYXBwYWJsZV9ub2RlKCZub2RlKTsKKwl9IGVsc2UgeworCQlpOTE1 X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmopOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQor CiBzdGF0aWMgaW50CiBpOTE1X2dlbV9zaG1lbV9wcmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCkBAIC02NjEsNiArNzk5 LDkgQEAgaTkxNV9nZW1fc2htZW1fcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpbnQg bmVlZHNfY2xmbHVzaCA9IDA7CiAJc3RydWN0IHNnX3BhZ2VfaXRlciBzZ19pdGVyOwogCisJaWYg KCFvYmotPmJhc2UuZmlscCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAl1c2VyX2RhdGEgPSB0b191 c2VyX3B0cihhcmdzLT5kYXRhX3B0cik7CiAJcmVtYWluID0gYXJncy0+c2l6ZTsKIApAQCAtNzY5 LDE4ICs5MTAsMTUgQEAgaTkxNV9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogcHJpbWUgb2JqZWN0cyBoYXZl IG5vIGJhY2tpbmcgZmlscCB0byBHRU0gcHJlYWQvcHdyaXRlCi0JICogcGFnZXMgZnJvbS4KLQkg Ki8KLQlpZiAoIW9iai0+YmFzZS5maWxwKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0 OwotCX0KLQogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9wcmVhZChvYmosIGFyZ3MtPm9mZnNldCwg YXJncy0+c2l6ZSk7CiAKIAlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZChkZXYsIG9iaiwgYXJn cywgZmlsZSk7CiAKKwkvKiBwcmVhZCBmb3Igbm9uIHNobWVtIGJhY2tlZCBvYmplY3RzICovCisJ aWYgKHJldCA9PSAtRUZBVUxUIHx8IHJldCA9PSAtRU5PREVWKQorCQlyZXQgPSBpOTE1X2dlbV9n dHRfcHJlYWQoZGV2LCBvYmosIGFyZ3MtPnNpemUsCisJCQkJCWFyZ3MtPm9mZnNldCwgYXJncy0+ ZGF0YV9wdHIpOworCiBvdXQ6CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFz ZSk7CiB1bmxvY2s6CkBAIC04MjEsMTAgKzk1OSwxNSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zh c3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCQkgc3RydWN0IGRybV9pOTE1X2dl bV9wd3JpdGUgKmFyZ3MsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQogeworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OwogCXN0cnVjdCBkcm1fbW1fbm9kZSBub2Rl OwogCXVpbnQ2NF90IHJlbWFpbiwgb2Zmc2V0OwogCWNoYXIgX191c2VyICp1c2VyX2RhdGE7CiAJ aW50IHJldDsKKwlib29sIGhpdF9zbG93X3BhdGggPSBmYWxzZTsKKworCWlmIChvYmotPnRpbGlu Z19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpCisJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0g aTkxNV9nZW1fb2JqX2dndHRfcGluKG9iaiwgMCwgUElOX01BUFBBQkxFIHwgUElOX05PTkJMT0NL KTsKIAlpZiAocmV0KSB7CkBAIC04NDIsMTYgKzk4NSwxNSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRl X2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJfSBlbHNlIHsKIAkJbm9kZS5z dGFydCA9IGk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChvYmopOwogCQlub2RlLmFsbG9jYXRlZCA9 IGZhbHNlOworCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0X2ZlbmNlKG9iaik7CisJCWlmIChy ZXQpCisJCQlnb3RvIG91dF91bnBpbjsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0 X3RvX2d0dF9kb21haW4ob2JqLCB0cnVlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bnBpbjsK IAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKLQlpZiAocmV0KQotCQln b3RvIG91dF91bnBpbjsKLQogCWludGVsX2ZiX29ial9pbnZhbGlkYXRlKG9iaiwgT1JJR0lOX0dU VCk7CiAJb2JqLT5kaXJ0eSA9IHRydWU7CiAKQEAgLTg3MCwyNCArMTAxMiwzNiBAQCBpOTE1X2dl bV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCXVuc2ln bmVkIHBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CiAJCXBhZ2VfbGVuZ3Ro ID0gcmVtYWluIDwgcGFnZV9sZW5ndGggPyByZW1haW4gOiBwYWdlX2xlbmd0aDsKIAkJaWYgKG5v ZGUuYWxsb2NhdGVkKSB7Ci0JCQl3bWIoKTsKKwkJCXdtYigpOyAvKiBmbHVzaCB0aGUgd3JpdGUg YmVmb3JlIHdlIG1vZGlmeSB0aGUgR0dUVCAqLwogCQkJaTkxNS0+Z3R0LmJhc2UuaW5zZXJ0X3Bh Z2UoJmk5MTUtPmd0dC5iYXNlLAogCQkJCQkJICAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRk cmVzcyhvYmosIG9mZnNldCA+PiBQQUdFX1NISUZUKSwKIAkJCQkJCSAgIG5vZGUuc3RhcnQsCiAJ CQkJCQkgICBJOTE1X0NBQ0hFX05PTkUsCiAJCQkJCQkgICAwKTsKLQkJCXdtYigpOworCQkJd21i KCk7IC8qIGZsdXNoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEdHVFQgKGluc2VydF9wYWdlKSAqLwog CQl9IGVsc2UgewogCQkJcGFnZV9iYXNlICs9IG9mZnNldCAmIFBBR0VfTUFTSzsKIAkJfQogCQkv KiBJZiB3ZSBnZXQgYSBmYXVsdCB3aGlsZSBjb3B5aW5nIGRhdGEsIHRoZW4gKHByZXN1bWFibHkp IG91cgogCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBhdmFpbGFibGUuICBSZXR1cm4gdGhlIGVycm9y IGFuZCB3ZSdsbAogCQkgKiByZXRyeSBpbiB0aGUgc2xvdyBwYXRoLgorCQkgKiBJZiB0aGUgb2Jq ZWN0IGlzIG5vbi1zaG1lbSBiYWNrZWQsIHdlIHJldHJ5IGFnYWluIHdpdGggdGhlCisJCSAqIHBh dGggdGhhdCBoYW5kbGVzIHBhZ2UgZmF1bHQuCiAJCSAqLwogCQlpZiAoZmFzdF91c2VyX3dyaXRl KGk5MTUtPmd0dC5tYXBwYWJsZSwgcGFnZV9iYXNlLAogCQkJCSAgICBwYWdlX29mZnNldCwgdXNl cl9kYXRhLCBwYWdlX2xlbmd0aCkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dF9m bHVzaDsKKwkJCWhpdF9zbG93X3BhdGggPSB0cnVlOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CisJCQlpZiAoc2xvd191c2VyX2FjY2VzcyhpOTE1LT5ndHQubWFwcGFibGUs CisJCQkJCSAgICAgcGFnZV9iYXNlLAorCQkJCQkgICAgIHBhZ2Vfb2Zmc2V0LCB1c2VyX2RhdGEs CisJCQkJCSAgICAgcGFnZV9sZW5ndGgsIHRydWUpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJ CQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCQkJZ290byBvdXRfZmx1c2g7CisJ CQl9CisKKwkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAkJfQogCiAJCXJlbWFp biAtPSBwYWdlX2xlbmd0aDsKQEAgLTg5Niw2ICsxMDUwLDkgQEAgaTkxNV9nZW1fZ3R0X3B3cml0 ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCX0KIAogb3V0X2ZsdXNoOgor CWlmIChoaXRfc2xvd19wYXRoKQorCQlXQVJOX09OKGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0 X2RvbWFpbihvYmosIHRydWUpKTsKKwogCWludGVsX2ZiX29ial9mbHVzaChvYmosIGZhbHNlLCBP UklHSU5fR1RUKTsKIG91dF91bnBpbjoKIAlpZiAobm9kZS5hbGxvY2F0ZWQpIHsKQEAgLTExNTIs MTQgKzEzMDksNiBAQCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogcHJpbWUgb2JqZWN0cyBoYXZl IG5vIGJhY2tpbmcgZmlscCB0byBHRU0gcHJlYWQvcHdyaXRlCi0JICogcGFnZXMgZnJvbS4KLQkg Ki8KLQlpZiAoIW9iai0+YmFzZS5maWxwKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0 OwotCX0KLQogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9wd3JpdGUob2JqLCBhcmdzLT5vZmZzZXQs IGFyZ3MtPnNpemUpOwogCiAJcmV0ID0gLUVGQVVMVDsKQEAgLTExNjksMjAgKzEzMTgsMjAgQEAg aTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs CiAJICogcHJlYWQvcHdyaXRlIGN1cnJlbnRseSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9t IHRoZSBDUFUKIAkgKiBwZXJzcGVjdGl2ZSwgcmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0 aGUgY2xpZW50LgogCSAqLwotCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05P TkUgJiYKLQkgICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BV ICYmCi0JICAgIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKKwlpZiAoIW9iai0+YmFz ZS5maWxwIHx8IGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKIAkJcmV0ID0gaTkxNV9n ZW1fZ3R0X3B3cml0ZV9mYXN0KGRldl9wcml2LCBvYmosIGFyZ3MsIGZpbGUpOwogCQkvKiBOb3Rl IHRoYXQgdGhlIGd0dCBwYXRocyBtaWdodCBmYWlsIHdpdGggbm9uLXBhZ2UtYmFja2VkIHVzZXIK IAkJICogcG9pbnRlcnMgKGUuZy4gZ3R0IG1hcHBpbmdzIHdoZW4gbW92aW5nIGRhdGEgYmV0d2Vl bgogCQkgKiB0ZXh0dXJlcykuIEZhbGxiYWNrIHRvIHRoZSBzaG1lbSBwYXRoIGluIHRoYXQgY2Fz ZS4gKi8KIAl9CiAKLQlpZiAocmV0ID09IC1FRkFVTFQgfHwgcmV0ID09IC1FTk9TUEMpIHsKKwlp ZiAocmV0ID09IC1FRkFVTFQpIHsKIAkJaWYgKG9iai0+cGh5c19oYW5kbGUpCiAJCQlyZXQgPSBp OTE1X2dlbV9waHlzX3B3cml0ZShvYmosIGFyZ3MsIGZpbGUpOwotCQllbHNlCisJCWVsc2UgaWYg KG9iai0+YmFzZS5maWxwKQogCQkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2Jq LCBhcmdzLCBmaWxlKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKIG91dDoKQEAg LTM5NzksOSArNDEyOCw3IEBAIG91dDoKIAkgKiBvYmplY3QgaXMgbm93IGNvaGVyZW50IGF0IGl0 cyBuZXcgY2FjaGUgbGV2ZWwgKHdpdGggcmVzcGVjdAogCSAqIHRvIHRoZSBhY2Nlc3MgZG9tYWlu KS4KIAkgKi8KLQlpZiAob2JqLT5jYWNoZV9kaXJ0eSAmJgotCSAgICBvYmotPmJhc2Uud3JpdGVf ZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUgJiYKLQkgICAgY3B1X3dyaXRlX25lZWRzX2Ns Zmx1c2gob2JqKSkgeworCWlmIChvYmotPmNhY2hlX2RpcnR5ICYmIGNwdV93cml0ZV9uZWVkc19j bGZsdXNoKG9iaikpIHsKIAkJaWYgKGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgdHJ1ZSkp CiAJCQlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKG9iai0+YmFzZS5kZXYpOwogCX0KLS0gCjEuOS4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=