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: Mon, 29 Feb 2016 13:09:37 +0530 Message-ID: <1456731579-25584-9-git-send-email-ankitprasad.r.sharma@intel.com> References: <1456731579-25584-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 43E868903B for ; Mon, 29 Feb 2016 08:03:36 +0000 (UTC) In-Reply-To: <1456731579-25584-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, 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 X09OLCBwdXRfZmVuY2Ugb25seSBpZiB3aG9sZSBvYmoKcGlubmVkIChDaHJpcykKCnYxNDogQ29y cmVjdGVkIGRhdGF0eXBlcy9pbml0aWFsaXphdGlvbnMgKFR2cnRrbykKClRlc3RjYXNlOiBpZ3Qv Z2VtX3N0b2xlbiwgaWd0L2dlbV9wcmVhZCwgaWd0L2dlbV9wd3JpdGUKClNpZ25lZC1vZmYtYnk6 IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgpSZXZp ZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIHwgMjIxICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKSwg MzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZGYwYTE5Zi4uOGNi ZTQyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC01NSw2ICs1NSw5IEBAIHN0YXRpYyBi b29sIGNwdV9jYWNoZV9pc19jb2hlcmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiBzdGF0 aWMgYm9vbCBjcHVfd3JpdGVfbmVlZHNfY2xmbHVzaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQogeworCWlmIChvYmotPmJhc2Uud3JpdGVfZG9tYWluID09IEk5MTVfR0VNX0RPTUFJ Tl9DUFUpCisJCXJldHVybiBmYWxzZTsKKwogCWlmICghY3B1X2NhY2hlX2lzX2NvaGVyZW50KG9i ai0+YmFzZS5kZXYsIG9iai0+Y2FjaGVfbGV2ZWwpKQogCQlyZXR1cm4gdHJ1ZTsKIApAQCAtNjQ2 LDYgKzY0OSwxNDEgQEAgc2htZW1fcHJlYWRfc2xvdyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHNo bWVtX3BhZ2Vfb2Zmc2V0LCBpbnQgcGFnZV9sZW5ndGgsCiAJcmV0dXJuIHJldCA/IC0gRUZBVUxU IDogMDsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzbG93X3VzZXJfYWNjZXNz KHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgdWludDY0X3QgcGFnZV9iYXNlLCBpbnQg cGFnZV9vZmZzZXQsCisJCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAorCQkgdW5zaWduZWQgbG9u ZyBsZW5ndGgsIGJvb2wgcHdyaXRlKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyOworCXZvaWQg KnZhZGRyOworCXVpbnQ2NF90IHVud3JpdHRlbjsKKworCWlvYWRkciA9IGlvX21hcHBpbmdfbWFw X3djKG1hcHBpbmcsIHBhZ2VfYmFzZSk7CisJLyogV2UgY2FuIHVzZSB0aGUgY3B1IG1lbSBjb3B5 IGZ1bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyBYODYuICovCisJdmFkZHIgPSAodm9pZCBfX2ZvcmNl ICopaW9hZGRyICsgcGFnZV9vZmZzZXQ7CisJaWYgKHB3cml0ZSkKKwkJdW53cml0dGVuID0gX19j b3B5X2Zyb21fdXNlcih2YWRkciwgdXNlcl9kYXRhLCBsZW5ndGgpOworCWVsc2UKKwkJdW53cml0 dGVuID0gX19jb3B5X3RvX3VzZXIodXNlcl9kYXRhLCB2YWRkciwgbGVuZ3RoKTsKKworCWlvX21h cHBpbmdfdW5tYXAoaW9hZGRyKTsKKwlyZXR1cm4gdW53cml0dGVuOworfQorCitzdGF0aWMgaW50 CitpOTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdWludDY0X3Qgc2l6ZSwKKwkJICAgdWludDY0X3Qg ZGF0YV9vZmZzZXQsIHVpbnQ2NF90IGRhdGFfcHRyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9tbV9ub2RlIG5v ZGU7CisJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKKwl1aW50NjRfdCByZW1haW47CisJdWludDY0 X3Qgb2Zmc2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2Jq LCAwLCBQSU5fTUFQUEFCTEUpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gaW5zZXJ0X21hcHBhYmxl X25vZGUoZGV2X3ByaXYsICZub2RlLCBQQUdFX1NJWkUpOworCQlpZiAocmV0KQorCQkJZ290byBv dXQ7CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCQlpZiAocmV0 KSB7CisJCQlyZW1vdmVfbWFwcGFibGVfbm9kZSgmbm9kZSk7CisJCQlnb3RvIG91dDsKKwkJfQor CisJCWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwl9IGVsc2UgeworCQlub2RlLnN0 YXJ0ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7CisJCW5vZGUuYWxsb2NhdGVkID0g ZmFsc2U7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gb3V0X3VucGluOworCX0KKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRf dG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnBpbjsK KworCXVzZXJfZGF0YSA9IHRvX3VzZXJfcHRyKGRhdGFfcHRyKTsKKwlyZW1haW4gPSBzaXplOwor CW9mZnNldCA9IGRhdGFfb2Zmc2V0OworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7CisJaWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSkgeworCQlyZXQgPSBmYXVs dF9pbl9tdWx0aXBhZ2VzX3dyaXRlYWJsZSh1c2VyX2RhdGEsIHJlbWFpbik7CisJCWlmIChyZXQp IHsKKwkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCWdvdG8gb3V0X3VucGlu OworCQl9CisJfQorCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRo aXMgcGFnZQorCQkgKgorCQkgKiBwYWdlX2Jhc2UgPSBwYWdlIG9mZnNldCB3aXRoaW4gYXBlcnR1 cmUKKwkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKKwkJICogcGFnZV9sZW5n dGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKKwkJICovCisJCXUzMiBwYWdlX2Jhc2Ug PSBub2RlLnN0YXJ0OworCQl1bnNpZ25lZCBwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9m ZnNldCk7CisJCXVuc2lnbmVkIHBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7 CisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluIDwgcGFnZV9sZW5ndGggPyByZW1haW4gOiBwYWdlX2xl bmd0aDsKKwkJaWYgKG5vZGUuYWxsb2NhdGVkKSB7CisJCQl3bWIoKTsKKwkJCWRldl9wcml2LT5n dHQuYmFzZS5pbnNlcnRfcGFnZSgmZGV2X3ByaXYtPmd0dC5iYXNlLAorCQkJCQkJICAgICAgIGk5 MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBvZmZzZXQgPj4gUEFHRV9TSElGVCks CisJCQkJCQkgICAgICAgbm9kZS5zdGFydCwKKwkJCQkJCSAgICAgICBJOTE1X0NBQ0hFX05PTkUs IDApOworCQkJd21iKCk7CisJCX0gZWxzZSB7CisJCQlwYWdlX2Jhc2UgKz0gb2Zmc2V0ICYgUEFH RV9NQVNLOworCQl9CisJCS8qIFRoaXMgaXMgYSBzbG93IHJlYWQvd3JpdGUgYXMgaXQgdHJpZXMg dG8gcmVhZCBmcm9tCisJCSAqIGFuZCB3cml0ZSB0byB1c2VyIG1lbW9yeSB3aGljaCBtYXkgcmVz dWx0IGludG8gcGFnZQorCQkgKiBmYXVsdHMsIGFuZCBzbyB3ZSBjYW5ub3QgcGVyZm9ybSB0aGlz IHVuZGVyIHN0cnVjdF9tdXRleC4KKwkJICovCisJCWlmIChzbG93X3VzZXJfYWNjZXNzKGRldl9w cml2LT5ndHQubWFwcGFibGUsIHBhZ2VfYmFzZSwKKwkJCQkgICAgIHBhZ2Vfb2Zmc2V0LCB1c2Vy X2RhdGEsCisJCQkJICAgICBwYWdlX2xlbmd0aCwgZmFsc2UpKSB7CisJCQlyZXQgPSAtRUZBVUxU OworCQkJYnJlYWs7CisJCX0KKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCXVzZXJfZGF0 YSArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCX0KKworCW11dGV4 X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0ID09IDAgJiYgKG9iai0+YmFzZS5y ZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKSA9PSAwKSB7CisJCS8qIFRoZSB1c2Vy IGhhcyBtb2RpZmllZCB0aGUgb2JqZWN0IHdoaWxzdCB3ZSB0cmllZAorCQkgKiByZWFkaW5nIGZy b20gaXQsIGFuZCB3ZSBub3cgaGF2ZSBubyBpZGVhIHdoYXQgZG9tYWluCisJCSAqIHRoZSBwYWdl cyBzaG91bGQgYmUgaW4uIEFzIHdlIGhhdmUganVzdCBiZWVuIHRvdWNoaW5nCisJCSAqIHRoZW0g ZGlyZWN0bHksIGZsdXNoIGV2ZXJ5dGhpbmcgYmFjayB0byB0aGUgR1RUCisJCSAqIGRvbWFpbi4K KwkJICovCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZh bHNlKTsKKwl9CisKK291dF91bnBpbjoKKwlpZiAobm9kZS5hbGxvY2F0ZWQpIHsKKwkJd21iKCk7 CisJCWRldl9wcml2LT5ndHQuYmFzZS5jbGVhcl9yYW5nZSgmZGV2X3ByaXYtPmd0dC5iYXNlLAor CQkJCQkgICAgICAgbm9kZS5zdGFydCwgbm9kZS5zaXplLAorCQkJCQkgICAgICAgdHJ1ZSk7CisJ CWk5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCQlyZW1vdmVfbWFwcGFibGVfbm9k ZSgmbm9kZSk7CisJfSBlbHNlIHsKKwkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4ob2JqKTsK Kwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludAogaTkxNV9nZW1fc2htZW1f cHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLApAQCAtNjYxLDYgKzc5OSw5IEBAIGk5MTVfZ2VtX3NobWVtX3ByZWFkKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaW50IG5lZWRzX2NsZmx1c2ggPSAwOwogCXN0cnVjdCBz Z19wYWdlX2l0ZXIgc2dfaXRlcjsKIAorCWlmICghb2JqLT5iYXNlLmZpbHApCisJCXJldHVybiAt RU5PREVWOworCiAJdXNlcl9kYXRhID0gdG9fdXNlcl9wdHIoYXJncy0+ZGF0YV9wdHIpOwogCXJl bWFpbiA9IGFyZ3MtPnNpemU7CiAKQEAgLTc2OSwxOCArOTEwLDE1IEBAIGk5MTVfZ2VtX3ByZWFk X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCWdvdG8gb3V0Owog CX0KIAotCS8qIHByaW1lIG9iamVjdHMgaGF2ZSBubyBiYWNraW5nIGZpbHAgdG8gR0VNIHByZWFk L3B3cml0ZQotCSAqIHBhZ2VzIGZyb20uCi0JICovCi0JaWYgKCFvYmotPmJhc2UuZmlscCkgewot CQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAl0cmFjZV9pOTE1X2dlbV9vYmpl Y3RfcHJlYWQob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUpOwogCiAJcmV0ID0gaTkxNV9n ZW1fc2htZW1fcHJlYWQoZGV2LCBvYmosIGFyZ3MsIGZpbGUpOwogCisJLyogcHJlYWQgZm9yIG5v biBzaG1lbSBiYWNrZWQgb2JqZWN0cyAqLworCWlmIChyZXQgPT0gLUVGQVVMVCB8fCByZXQgPT0g LUVOT0RFVikKKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X3ByZWFkKGRldiwgb2JqLCBhcmdzLT5zaXpl LAorCQkJCQlhcmdzLT5vZmZzZXQsIGFyZ3MtPmRhdGFfcHRyKTsKKwogb3V0OgogCWRybV9nZW1f b2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgpAQCAtODIxLDEwICs5NTks MTUgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAogCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAogCQkJIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRl djsKIAlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKIAl1aW50NjRfdCByZW1haW4sIG9mZnNldDsK IAljaGFyIF9fdXNlciAqdXNlcl9kYXRhOwogCWludCByZXQ7CisJYm9vbCBoaXRfc2xvd19wYXRo ID0gZmFsc2U7CisKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQor CQlyZXR1cm4gLUVGQVVMVDsKIAogCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihvYmosIDAs IFBJTl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJaWYgKHJldCkgewpAQCAtODQyLDE2ICs5 ODUsMTUgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAogCX0gZWxzZSB7CiAJCW5vZGUuc3RhcnQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZz ZXQob2JqKTsKIAkJbm9kZS5hbGxvY2F0ZWQgPSBmYWxzZTsKKwkJcmV0ID0gaTkxNV9nZW1fb2Jq ZWN0X3B1dF9mZW5jZShvYmopOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5waW47CiAJfQog CiAJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7CiAJ aWYgKHJldCkKIAkJZ290byBvdXRfdW5waW47CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0 X2ZlbmNlKG9iaik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5waW47Ci0KIAlpbnRlbF9mYl9v YmpfaW52YWxpZGF0ZShvYmosIE9SSUdJTl9HVFQpOwogCW9iai0+ZGlydHkgPSB0cnVlOwogCkBA IC04NzAsMjQgKzEwMTIsMzYgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAogCQl1bnNpZ25lZCBwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAt IHBhZ2Vfb2Zmc2V0OwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbiA8IHBhZ2VfbGVuZ3RoID8gcmVt YWluIDogcGFnZV9sZW5ndGg7CiAJCWlmIChub2RlLmFsbG9jYXRlZCkgewotCQkJd21iKCk7CisJ CQl3bWIoKTsgLyogZmx1c2ggdGhlIHdyaXRlIGJlZm9yZSB3ZSBtb2RpZnkgdGhlIEdHVFQgKi8K IAkJCWk5MTUtPmd0dC5iYXNlLmluc2VydF9wYWdlKCZpOTE1LT5ndHQuYmFzZSwKIAkJCQkJCSAg IGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBvZmZzZXQgPj4gUEFHRV9TSElG VCksCiAJCQkJCQkgICBub2RlLnN0YXJ0LAogCQkJCQkJICAgSTkxNV9DQUNIRV9OT05FLAogCQkJ CQkJICAgMCk7Ci0JCQl3bWIoKTsKKwkJCXdtYigpOyAvKiBmbHVzaCBtb2RpZmljYXRpb25zIHRv IHRoZSBHR1RUIChpbnNlcnRfcGFnZSkgKi8KIAkJfSBlbHNlIHsKIAkJCXBhZ2VfYmFzZSArPSBv ZmZzZXQgJiBQQUdFX01BU0s7CiAJCX0KIAkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29w eWluZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKIAkJICogc291cmNlIHBhZ2UgaXNuJ3Qg YXZhaWxhYmxlLiAgUmV0dXJuIHRoZSBlcnJvciBhbmQgd2UnbGwKIAkJICogcmV0cnkgaW4gdGhl IHNsb3cgcGF0aC4KKwkJICogSWYgdGhlIG9iamVjdCBpcyBub24tc2htZW0gYmFja2VkLCB3ZSBy ZXRyeSBhZ2FpbiB3aXRoIHRoZQorCQkgKiBwYXRoIHRoYXQgaGFuZGxlcyBwYWdlIGZhdWx0Lgog CQkgKi8KIAkJaWYgKGZhc3RfdXNlcl93cml0ZShpOTE1LT5ndHQubWFwcGFibGUsIHBhZ2VfYmFz ZSwKIAkJCQkgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKSB7Ci0JCQly ZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXRfZmx1c2g7CisJCQloaXRfc2xvd19wYXRoID0gdHJ1 ZTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJaWYgKHNsb3dfdXNl cl9hY2Nlc3MoaTkxNS0+Z3R0Lm1hcHBhYmxlLAorCQkJCQkgICAgIHBhZ2VfYmFzZSwKKwkJCQkJ ICAgICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLAorCQkJCQkgICAgIHBhZ2VfbGVuZ3RoLCB0cnVl KSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0 ZXgpOworCQkJCWdvdG8gb3V0X2ZsdXNoOworCQkJfQorCisJCQltdXRleF9sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7CiAJCX0KIAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CkBAIC04OTYsNiAr MTA1MCwxOSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCiAJfQogCiBvdXRfZmx1c2g6CisJaWYgKGhpdF9zbG93X3BhdGgpIHsKKwkJaWYg KHJldCA9PSAwICYmCisJCSAgICAob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RP TUFJTl9HVFQpID09IDApIHsKKwkJCS8qIFRoZSB1c2VyIGhhcyBtb2RpZmllZCB0aGUgb2JqZWN0 IHdoaWxzdCB3ZSB0cmllZAorCQkJICogcmVhZGluZyBmcm9tIGl0LCBhbmQgd2Ugbm93IGhhdmUg bm8gaWRlYSB3aGF0IGRvbWFpbgorCQkJICogdGhlIHBhZ2VzIHNob3VsZCBiZSBpbi4gQXMgd2Ug aGF2ZSBqdXN0IGJlZW4gdG91Y2hpbmcKKwkJCSAqIHRoZW0gZGlyZWN0bHksIGZsdXNoIGV2ZXJ5 dGhpbmcgYmFjayB0byB0aGUgR1RUCisJCQkgKiBkb21haW4uCisJCQkgKi8KKwkJCXJldCA9IGk5 MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwkJfQorCX0KKwog CWludGVsX2ZiX29ial9mbHVzaChvYmosIGZhbHNlLCBPUklHSU5fR1RUKTsKIG91dF91bnBpbjoK IAlpZiAobm9kZS5hbGxvY2F0ZWQpIHsKQEAgLTExNTIsMTQgKzEzMTksNiBAQCBpOTE1X2dlbV9w d3JpdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBv dXQ7CiAJfQogCi0JLyogcHJpbWUgb2JqZWN0cyBoYXZlIG5vIGJhY2tpbmcgZmlscCB0byBHRU0g cHJlYWQvcHdyaXRlCi0JICogcGFnZXMgZnJvbS4KLQkgKi8KLQlpZiAoIW9iai0+YmFzZS5maWxw KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXRyYWNlX2k5MTVfZ2Vt X29iamVjdF9wd3JpdGUob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUpOwogCiAJcmV0ID0g LUVGQVVMVDsKQEAgLTExNjksMjAgKzEzMjgsMjAgQEAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJICogcHJlYWQvcHdyaXRlIGN1cnJl bnRseSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZSBDUFUKIAkgKiBwZXJzcGVjdGl2 ZSwgcmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0aGUgY2xpZW50LgogCSAqLwotCWlmIChv YmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkgICAgb2JqLT5iYXNlLndy aXRlX2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVICYmCi0JICAgIGNwdV93cml0ZV9uZWVk c19jbGZsdXNoKG9iaikpIHsKKwlpZiAoIW9iai0+YmFzZS5maWxwIHx8IGNwdV93cml0ZV9uZWVk c19jbGZsdXNoKG9iaikpIHsKIAkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KGRldl9w cml2LCBvYmosIGFyZ3MsIGZpbGUpOwogCQkvKiBOb3RlIHRoYXQgdGhlIGd0dCBwYXRocyBtaWdo dCBmYWlsIHdpdGggbm9uLXBhZ2UtYmFja2VkIHVzZXIKIAkJICogcG9pbnRlcnMgKGUuZy4gZ3R0 IG1hcHBpbmdzIHdoZW4gbW92aW5nIGRhdGEgYmV0d2VlbgogCQkgKiB0ZXh0dXJlcykuIEZhbGxi YWNrIHRvIHRoZSBzaG1lbSBwYXRoIGluIHRoYXQgY2FzZS4gKi8KIAl9CiAKLQlpZiAocmV0ID09 IC1FRkFVTFQgfHwgcmV0ID09IC1FTk9TUEMpIHsKKwlpZiAocmV0ID09IC1FRkFVTFQpIHsKIAkJ aWYgKG9iai0+cGh5c19oYW5kbGUpCiAJCQlyZXQgPSBpOTE1X2dlbV9waHlzX3B3cml0ZShvYmos IGFyZ3MsIGZpbGUpOwotCQllbHNlCisJCWVsc2UgaWYgKG9iai0+YmFzZS5maWxwKQogCQkJcmV0 ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKKwkJZWxzZQor CQkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKIG91dDoKQEAgLTM5NzYsOSArNDEzNSw3IEBAIG91dDoK IAkgKiBvYmplY3QgaXMgbm93IGNvaGVyZW50IGF0IGl0cyBuZXcgY2FjaGUgbGV2ZWwgKHdpdGgg cmVzcGVjdAogCSAqIHRvIHRoZSBhY2Nlc3MgZG9tYWluKS4KIAkgKi8KLQlpZiAob2JqLT5jYWNo ZV9kaXJ0eSAmJgotCSAgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJ Tl9DUFUgJiYKLQkgICAgY3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkgeworCWlmIChvYmot PmNhY2hlX2RpcnR5ICYmIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKIAkJaWYgKGk5 MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgdHJ1ZSkpCiAJCQlpOTE1X2dlbV9jaGlwc2V0X2Zs dXNoKG9iai0+YmFzZS5kZXYpOwogCX0KLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pbnRlbC1nZngK