From mboxrd@z Thu Jan 1 00:00:00 1970 From: ankitprasad.r.sharma@intel.com Subject: [PATCH 08/12] drm/i915: Support for pread/pwrite from/to non shmem backed objects Date: Wed, 20 Apr 2016 16:47:35 +0530 Message-ID: <1461151059-16361-9-git-send-email-ankitprasad.r.sharma@intel.com> References: <1461151059-16361-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 2A9F06E98A for ; Wed, 20 Apr 2016 11:42:52 +0000 (UTC) In-Reply-To: <1461151059-16361-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: Ankitprasad Sharma , akash.goel@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 X09OLCBwdXRfZmVuY2Ugb25seSBpZiB3aG9sZSBvYmoKcGlubmVkIChDaHJpcykKCnYxNDogQ29y cmVjdGVkIGRhdGF0eXBlcy9pbml0aWFsaXphdGlvbnMgKFR2cnRrbykKClRlc3RjYXNlOiBpZ3Qv Z2VtX3N0b2xlbiwgaWd0L2dlbV9wcmVhZCwgaWd0L2dlbV9wd3JpdGUKClNpZ25lZC1vZmYtYnk6 IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgpSZXZp ZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIHwgMjIyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxOTAgaW5zZXJ0aW9ucygrKSwg MzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggYzViYTFiYi4uM2U3 MjczNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01NCw2ICs1NCw5IEBAIHN0YXRpYyBi b29sIGNwdV9jYWNoZV9pc19jb2hlcmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiBzdGF0 aWMgYm9vbCBjcHVfd3JpdGVfbmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogeworCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJ Tl9DUFUpCisJCXJldHVybiBmYWxzZTsKKwogCWlmICghY3B1X2NhY2hlX2lzX2NvaGVyZW50KG9i ai0+YmFzZS5kZXYsIG9iai0+Y2FjaGVfbGV2ZWwpKQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtNjQx LDYgKzY0NCwxNDIgQEAgc2htZW1fcHJlYWRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNo bWVtX3BhZ2Vfb2Zmc2V0LCBpbnQgcGFnZV9sZW5ndGgsCiAJcmV0dXJuIHJldCA/IC0gRUZBVUxU IDogMDsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzbG93X3VzZXJfYWNjZXNz KHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgdWludDY0X3QgcGFnZV9iYXNlLCBpbnQg cGFnZV9vZmZzZXQsCisJCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAorCQkgdW5zaWduZWQgbG9u ZyBsZW5ndGgsIGJvb2wgcHdyaXRlKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyOworCXZvaWQg KnZhZGRyOworCXVpbnQ2NF90IHVud3JpdHRlbjsKKworCWlvYWRkciA9IGlvX21hcHBpbmdfbWFw X3djKG1hcHBpbmcsIHBhZ2VfYmFzZSk7CisJLyogV2UgY2FuIHVzZSB0aGUgY3B1IG1lbSBjb3B5 IGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyBYODYuICovCisJdmFkZHIgPSAodm9pZCBfX2ZvcmNl ICopaW9hZGRyICsgcGFnZV9vZmZzZXQ7CisJaWYgKHB3cml0ZSkKKwkJdW53cml0dGVuID0gX19j b3B5X2Zyb21fdXNlcih2YWRkciwgdXNlcl9kYXRhLCBsZW5ndGgpOworCWVsc2UKKwkJdW53cml0 dGVuID0gX19jb3B5X3RvX3VzZXIodXNlcl9kYXRhLCB2YWRkciwgbGVuZ3RoKTsKKworCWlvX21h cHBpbmdfdW5tYXAoaW9hZGRyKTsKKwlyZXR1cm4gdW53cml0dGVuOworfQorCitzdGF0aWMgaW50 CitpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdWludDY0X3Qgc2l6ZSwKKwkJICAgdWludDY0X3Qg ZGF0YV9vZmZzZXQsIHVpbnQ2NF90IGRhdGFfcHRyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGk5MTVfZ2d0dCAqZ2d0 dCA9ICZkZXZfcHJpdi0+Z2d0dDsKKwlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKKwljaGFyIF9f dXNlciAqdXNlcl9kYXRhOworCXVpbnQ2NF90IHJlbWFpbjsKKwl1aW50NjRfdCBvZmZzZXQ7CisJ aW50IHJldDsKKworCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihvYmosIDAsIFBJTl9NQVBQ QUJMRSk7CisJaWYgKHJldCkgeworCQlyZXQgPSBpbnNlcnRfbWFwcGFibGVfbm9kZShkZXZfcHJp diwgJm5vZGUsIFBBR0VfU0laRSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlyZXQg PSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJCWlmIChyZXQpIHsKKwkJCXJlbW92 ZV9tYXBwYWJsZV9ub2RlKCZub2RlKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaTkxNV9nZW1f b2JqZWN0X3Bpbl9wYWdlcyhvYmopOworCX0gZWxzZSB7CisJCW5vZGUuc3RhcnQgPSBpOTE1X2dl bV9vYmpfZ2d0dF9vZmZzZXQob2JqKTsKKwkJbm9kZS5hbGxvY2F0ZWQgPSBmYWxzZTsKKwkJcmV0 ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZShvYmopOworCQlpZiAocmV0KQorCQkJZ290byBv dXRfdW5waW47CisJfQorCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWlu KG9iaiwgZmFsc2UpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucGluOworCisJdXNlcl9kYXRh ID0gdG9fdXNlcl9wdHIoZGF0YV9wdHIpOworCXJlbWFpbiA9IHNpemU7CisJb2Zmc2V0ID0gZGF0 YV9vZmZzZXQ7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAobGlr ZWx5KCFpOTE1LnByZWZhdWx0X2Rpc2FibGUpKSB7CisJCXJldCA9IGZhdWx0X2luX211bHRpcGFn ZXNfd3JpdGVhYmxlKHVzZXJfZGF0YSwgcmVtYWluKTsKKwkJaWYgKHJldCkgeworCQkJbXV0ZXhf bG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJZ290byBvdXRfdW5waW47CisJCX0KKwl9CisK Kwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAq CisJCSAqIHBhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBwYWdl X29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRv IGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJdTMyIHBhZ2VfYmFzZSA9IG5vZGUuc3RhcnQ7 CisJCXVuc2lnbmVkIHBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKKwkJdW5z aWduZWQgcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKwkJcGFnZV9sZW5n dGggPSByZW1haW4gPCBwYWdlX2xlbmd0aCA/IHJlbWFpbiA6IHBhZ2VfbGVuZ3RoOworCQlpZiAo bm9kZS5hbGxvY2F0ZWQpIHsKKwkJCXdtYigpOworCQkJZ2d0dC0+YmFzZS5pbnNlcnRfcGFnZSgm Z2d0dC0+YmFzZSwKKwkJCQkJICAgICAgIGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mo b2JqLCBvZmZzZXQgPj4gUEFHRV9TSElGVCksCisJCQkJCSAgICAgICBub2RlLnN0YXJ0LAorCQkJ CQkgICAgICAgSTkxNV9DQUNIRV9OT05FLCAwKTsKKwkJCXdtYigpOworCQl9IGVsc2UgeworCQkJ cGFnZV9iYXNlICs9IG9mZnNldCAmIFBBR0VfTUFTSzsKKwkJfQorCQkvKiBUaGlzIGlzIGEgc2xv dyByZWFkL3dyaXRlIGFzIGl0IHRyaWVzIHRvIHJlYWQgZnJvbQorCQkgKiBhbmQgd3JpdGUgdG8g dXNlciBtZW1vcnkgd2hpY2ggbWF5IHJlc3VsdCBpbnRvIHBhZ2UKKwkJICogZmF1bHRzLCBhbmQg c28gd2UgY2Fubm90IHBlcmZvcm0gdGhpcyB1bmRlciBzdHJ1Y3RfbXV0ZXguCisJCSAqLworCQlp ZiAoc2xvd191c2VyX2FjY2VzcyhnZ3R0LT5tYXBwYWJsZSwgcGFnZV9iYXNlLAorCQkJCSAgICAg cGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwKKwkJCQkgICAgIHBhZ2VfbGVuZ3RoLCBmYWxzZSkpIHsK KwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCXJlbWFpbiAtPSBwYWdlX2xl bmd0aDsKKwkJdXNlcl9kYXRhICs9IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5n dGg7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChyZXQgPT0g MCAmJiAob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9HVFQpID09IDAp IHsKKwkJLyogVGhlIHVzZXIgaGFzIG1vZGlmaWVkIHRoZSBvYmplY3Qgd2hpbHN0IHdlIHRyaWVk CisJCSAqIHJlYWRpbmcgZnJvbSBpdCwgYW5kIHdlIG5vdyBoYXZlIG5vIGlkZWEgd2hhdCBkb21h aW4KKwkJICogdGhlIHBhZ2VzIHNob3VsZCBiZSBpbi4gQXMgd2UgaGF2ZSBqdXN0IGJlZW4gdG91 Y2hpbmcKKwkJICogdGhlbSBkaXJlY3RseSwgZmx1c2ggZXZlcnl0aGluZyBiYWNrIHRvIHRoZSBH VFQKKwkJICogZG9tYWluLgorCQkgKi8KKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19n dHRfZG9tYWluKG9iaiwgZmFsc2UpOworCX0KKworb3V0X3VucGluOgorCWlmIChub2RlLmFsbG9j YXRlZCkgeworCQl3bWIoKTsKKwkJZ2d0dC0+YmFzZS5jbGVhcl9yYW5nZSgmZ2d0dC0+YmFzZSwK KwkJCQkgICAgICAgbm9kZS5zdGFydCwgbm9kZS5zaXplLAorCQkJCSAgICAgICB0cnVlKTsKKwkJ aTkxNV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJCXJlbW92ZV9tYXBwYWJsZV9ub2Rl KCZub2RlKTsKKwl9IGVsc2UgeworCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihvYmopOwor CX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50CiBpOTE1X2dlbV9zaG1lbV9w cmVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmosCkBAIC02NTYsNiArNzk1LDkgQEAgaTkxNV9nZW1fc2htZW1fcHJlYWQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKIAlpbnQgbmVlZHNfY2xmbHVzaCA9IDA7CiAJc3RydWN0IHNn X3BhZ2VfaXRlciBzZ19pdGVyOwogCisJaWYgKCFvYmotPmJhc2UuZmlscCkKKwkJcmV0dXJuIC1F Tk9ERVY7CisKIAl1c2VyX2RhdGEgPSB0b191c2VyX3B0cihhcmdzLT5kYXRhX3B0cik7CiAJcmVt YWluID0gYXJncy0+c2l6ZTsKIApAQCAtNzY0LDE4ICs5MDYsMTUgQEAgaTkxNV9nZW1fcHJlYWRf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXQ7CiAJ fQogCi0JLyogcHJpbWUgb2JqZWN0cyBoYXZlIG5vIGJhY2tpbmcgZmlscCB0byBHRU0gcHJlYWQv cHdyaXRlCi0JICogcGFnZXMgZnJvbS4KLQkgKi8KLQlpZiAoIW9iai0+YmFzZS5maWxwKSB7Ci0J CXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXRyYWNlX2k5MTVfZ2VtX29iamVj dF9wcmVhZChvYmosIGFyZ3MtPm9mZnNldCwgYXJncy0+c2l6ZSk7CiAKIAlyZXQgPSBpOTE1X2dl bV9zaG1lbV9wcmVhZChkZXYsIG9iaiwgYXJncywgZmlsZSk7CiAKKwkvKiBwcmVhZCBmb3Igbm9u IHNobWVtIGJhY2tlZCBvYmplY3RzICovCisJaWYgKHJldCA9PSAtRUZBVUxUIHx8IHJldCA9PSAt RU5PREVWKQorCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHJlYWQoZGV2LCBvYmosIGFyZ3MtPnNpemUs CisJCQkJCWFyZ3MtPm9mZnNldCwgYXJncy0+ZGF0YV9wdHIpOworCiBvdXQ6CiAJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CiB1bmxvY2s6CkBAIC04MTcsMTAgKzk1Niwx NSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlKQogewogCXN0cnVjdCBpOTE1X2dndHQgKmdn dHQgPSAmaTkxNS0+Z2d0dDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRl djsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKIAl1aW50NjRfdCByZW1haW4sIG9mZnNldDsK IAljaGFyIF9fdXNlciAqdXNlcl9kYXRhOwogCWludCByZXQ7CisJYm9vbCBoaXRfc2xvd19wYXRo ID0gZmFsc2U7CisKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQor CQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihvYmosIDAs IFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJaWYgKHJldCkgewpAQCAtODM4LDE2ICs5 ODIsMTUgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAogCX0gZWxzZSB7CiAJCW5vZGUuc3RhcnQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZz ZXQob2JqKTsKIAkJbm9kZS5hbGxvY2F0ZWQgPSBmYWxzZTsKKwkJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3B1dF9mZW5jZShvYmopOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5waW47CiAJfQog CiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7CiAJ aWYgKHJldCkKIAkJZ290byBvdXRfdW5waW47CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0 X2ZlbmNlKG9iaik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5waW47Ci0KIAlpbnRlbF9mYl9v YmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9HVFQpOwogCW9iai0+ZGlydHkgPSB0cnVlOwogCkBA IC04NjYsMjIgKzEwMDksMzQgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAogCQl1bnNpZ25lZCBwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAt IHBhZ2Vfb2Zmc2V0OwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbiA8IHBhZ2VfbGVuZ3RoID8gcmVt YWluIDogcGFnZV9sZW5ndGg7CiAJCWlmIChub2RlLmFsbG9jYXRlZCkgewotCQkJd21iKCk7CisJ CQl3bWIoKTsgLyogZmx1c2ggdGhlIHdyaXRlIGJlZm9yZSB3ZSBtb2RpZnkgdGhlIEdHVFQgKi8K IAkJCWdndHQtPmJhc2UuaW5zZXJ0X3BhZ2UoJmdndHQtPmJhc2UsCiAJCQkJCSAgICAgICBpOTE1 X2dlbV9vYmplY3RfZ2V0X2RtYV9hZGRyZXNzKG9iaiwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQpLAog CQkJCQkgICAgICAgbm9kZS5zdGFydCwgSTkxNV9DQUNIRV9OT05FLCAwKTsKLQkJCXdtYigpOwor CQkJd21iKCk7IC8qIGZsdXNoIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEdHVFQgKGluc2VydF9wYWdl KSAqLwogCQl9IGVsc2UgewogCQkJcGFnZV9iYXNlICs9IG9mZnNldCAmIFBBR0VfTUFTSzsKIAkJ fQogCQkvKiBJZiB3ZSBnZXQgYSBmYXVsdCB3aGlsZSBjb3B5aW5nIGRhdGEsIHRoZW4gKHByZXN1 bWFibHkpIG91cgogCQkgKiBzb3VyY2UgcGFnZSBpc24ndCBhdmFpbGFibGUuICBSZXR1cm4gdGhl IGVycm9yIGFuZCB3ZSdsbAogCQkgKiByZXRyeSBpbiB0aGUgc2xvdyBwYXRoLgorCQkgKiBJZiB0 aGUgb2JqZWN0IGlzIG5vbi1zaG1lbSBiYWNrZWQsIHdlIHJldHJ5IGFnYWluIHdpdGggdGhlCisJ CSAqIHBhdGggdGhhdCBoYW5kbGVzIHBhZ2UgZmF1bHQuCiAJCSAqLwogCQlpZiAoZmFzdF91c2Vy X3dyaXRlKGdndHQtPm1hcHBhYmxlLCBwYWdlX2Jhc2UsCiAJCQkJICAgIHBhZ2Vfb2Zmc2V0LCB1 c2VyX2RhdGEsIHBhZ2VfbGVuZ3RoKSkgewotCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0 X2ZsdXNoOworCQkJaGl0X3Nsb3dfcGF0aCA9IHRydWU7CisJCQltdXRleF91bmxvY2soJmRldi0+ c3RydWN0X211dGV4KTsKKwkJCWlmIChzbG93X3VzZXJfYWNjZXNzKGdndHQtPm1hcHBhYmxlLAor CQkJCQkgICAgIHBhZ2VfYmFzZSwKKwkJCQkJICAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLAor CQkJCQkgICAgIHBhZ2VfbGVuZ3RoLCB0cnVlKSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJ bXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJCWdvdG8gb3V0X2ZsdXNoOworCQkJ fQorCisJCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCX0KIAogCQlyZW1haW4g LT0gcGFnZV9sZW5ndGg7CkBAIC04OTAsNiArMTA0NSwxOSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRl X2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJfQogCiBvdXRfZmx1c2g6CisJ aWYgKGhpdF9zbG93X3BhdGgpIHsKKwkJaWYgKHJldCA9PSAwICYmCisJCSAgICAob2JqLT5iYXNl LnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9HVFQpID09IDApIHsKKwkJCS8qIFRoZSB1 c2VyIGhhcyBtb2RpZmllZCB0aGUgb2JqZWN0IHdoaWxzdCB3ZSB0cmllZAorCQkJICogcmVhZGlu ZyBmcm9tIGl0LCBhbmQgd2Ugbm93IGhhdmUgbm8gaWRlYSB3aGF0IGRvbWFpbgorCQkJICogdGhl IHBhZ2VzIHNob3VsZCBiZSBpbi4gQXMgd2UgaGF2ZSBqdXN0IGJlZW4gdG91Y2hpbmcKKwkJCSAq IHRoZW0gZGlyZWN0bHksIGZsdXNoIGV2ZXJ5dGhpbmcgYmFjayB0byB0aGUgR1RUCisJCQkgKiBk b21haW4uCisJCQkgKi8KKwkJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFp bihvYmosIGZhbHNlKTsKKwkJfQorCX0KKwogCWludGVsX2ZiX29ial9mbHVzaChvYmosIGZhbHNl LCBPUklHSU5fR1RUKTsKIG91dF91bnBpbjoKIAlpZiAobm9kZS5hbGxvY2F0ZWQpIHsKQEAgLTEx NDYsMTQgKzEzMTQsNiBAQCBpOTE1X2dlbV9wd3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogcHJpbWUgb2JqZWN0cyBo YXZlIG5vIGJhY2tpbmcgZmlscCB0byBHRU0gcHJlYWQvcHdyaXRlCi0JICogcGFnZXMgZnJvbS4K LQkgKi8KLQlpZiAoIW9iai0+YmFzZS5maWxwKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8g b3V0OwotCX0KLQogCXRyYWNlX2k5MTVfZ2VtX29iamVjdF9wd3JpdGUob2JqLCBhcmdzLT5vZmZz ZXQsIGFyZ3MtPnNpemUpOwogCiAJcmV0ID0gLUVGQVVMVDsKQEAgLTExNjMsMjAgKzEzMjMsMjAg QEAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsCiAJICogcHJlYWQvcHdyaXRlIGN1cnJlbnRseSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBm cm9tIHRoZSBDUFUKIAkgKiBwZXJzcGVjdGl2ZSwgcmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBi eSB0aGUgY2xpZW50LgogCSAqLwotCWlmIChvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5H X05PTkUgJiYKLQkgICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5f Q1BVICYmCi0JICAgIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKKwlpZiAoIW9iai0+ YmFzZS5maWxwIHx8IGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKIAkJcmV0ID0gaTkx NV9nZW1fZ3R0X3B3cml0ZV9mYXN0KGRldl9wcml2LCBvYmosIGFyZ3MsIGZpbGUpOwogCQkvKiBO b3RlIHRoYXQgdGhlIGd0dCBwYXRocyBtaWdodCBmYWlsIHdpdGggbm9uLXBhZ2UtYmFja2VkIHVz ZXIKIAkJICogcG9pbnRlcnMgKGUuZy4gZ3R0IG1hcHBpbmdzIHdoZW4gbW92aW5nIGRhdGEgYmV0 d2VlbgogCQkgKiB0ZXh0dXJlcykuIEZhbGxiYWNrIHRvIHRoZSBzaG1lbSBwYXRoIGluIHRoYXQg Y2FzZS4gKi8KIAl9CiAKLQlpZiAocmV0ID09IC1FRkFVTFQgfHwgcmV0ID09IC1FTk9TUEMpIHsK KwlpZiAocmV0ID09IC1FRkFVTFQpIHsKIAkJaWYgKG9iai0+cGh5c19oYW5kbGUpCiAJCQlyZXQg PSBpOTE1X2dlbV9waHlzX3B3cml0ZShvYmosIGFyZ3MsIGZpbGUpOwotCQllbHNlCisJCWVsc2Ug aWYgKG9iai0+YmFzZS5maWxwKQogCQkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwg b2JqLCBhcmdzLCBmaWxlKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKIG91dDoK QEAgLTQwMTAsOSArNDE3MCw3IEBAIG91dDoKIAkgKiBvYmplY3QgaXMgbm93IGNvaGVyZW50IGF0 IGl0cyBuZXcgY2FjaGUgbGV2ZWwgKHdpdGggcmVzcGVjdAogCSAqIHRvIHRoZSBhY2Nlc3MgZG9t YWluKS4KIAkgKi8KLQlpZiAob2JqLT5jYWNoZV9kaXJ0eSAmJgotCSAgICBvYmotPmJhc2Uud3Jp dGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9DUFUgJiYKLQkgICAgY3B1X3dyaXRlX25lZWRz X2NsZmx1c2gob2JqKSkgeworCWlmIChvYmotPmNhY2hlX2RpcnR5ICYmIGNwdV93cml0ZV9uZWVk c19jbGZsdXNoKG9iaikpIHsKIAkJaWYgKGk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgdHJ1 ZSkpCiAJCQlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNoKG9iai0+YmFzZS5kZXYpOwogCX0KLS0gCjEu OS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK