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: Fri, 19 Feb 2016 12:21:35 +0530 Message-ID: <1455864697-32140-9-git-send-email-ankitprasad.r.sharma@intel.com> References: <1455864697-32140-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 mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 136886EDC7 for ; Fri, 19 Feb 2016 07:14:42 +0000 (UTC) In-Reply-To: <1455864697-32140-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 X09OLCBwdXRfZmVuY2Ugb25seSBpZiB3aG9sZSBvYmoKcGlubmVkIChDaHJpcykKCnYxNDogQ29y cmVjdGVkIGRhdGF0eXBlcy9pbml0aWFsaXphdGlvbnMgKFR2cnRrbykKClRlc3RjYXNlOiBpZ3Qv Z2VtX3N0b2xlbiwgaWd0L2dlbV9wcmVhZCwgaWd0L2dlbV9wd3JpdGUKClNpZ25lZC1vZmYtYnk6 IEFua2l0cHJhc2FkIFNoYXJtYSA8YW5raXRwcmFzYWQuci5zaGFybWFAaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgfCAyMjEgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE4OSBpbnNlcnRpb25zKCsp LCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCBlZDhhZTVkLi4w OTM4YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTU1LDYgKzU1LDkgQEAgc3RhdGlj IGJvb2wgY3B1X2NhY2hlX2lzX2NvaGVyZW50KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAKIHN0 YXRpYyBib29sIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCiB7CisJaWYgKG9iai0+YmFzZS53cml0ZV9kb21haW4gPT0gSTkxNV9HRU1fRE9N QUlOX0NQVSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKCFjcHVfY2FjaGVfaXNfY29oZXJlbnQo b2JqLT5iYXNlLmRldiwgb2JqLT5jYWNoZV9sZXZlbCkpCiAJCXJldHVybiB0cnVlOwogCkBAIC02 NDYsNiArNjQ5LDE0MSBAQCBzaG1lbV9wcmVhZF9zbG93KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQg c2htZW1fcGFnZV9vZmZzZXQsIGludCBwYWdlX2xlbmd0aCwKIAlyZXR1cm4gcmV0ID8gLSBFRkFV TFQgOiAwOwogfQogCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90CitzbG93X3VzZXJfYWNjZXNzKHN0 cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAorCQkgdWludDY0X3QgcGFnZV9iYXNlLCBpbnQgcGFn ZV9vZmZzZXQsCisJCSBjaGFyIF9fdXNlciAqdXNlcl9kYXRhLAorCQkgdW5zaWduZWQgbG9uZyBs ZW5ndGgsIGJvb2wgcHdyaXRlKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyOworCXZvaWQgKnZh ZGRyOworCXVpbnQ2NF90IHVud3JpdHRlbjsKKworCWlvYWRkciA9IGlvX21hcHBpbmdfbWFwX3dj KG1hcHBpbmcsIHBhZ2VfYmFzZSk7CisJLyogV2UgY2FuIHVzZSB0aGUgY3B1IG1lbSBjb3B5IGZ1 bmN0aW9uIGJlY2F1c2UgdGhpcyBpcyBYODYuICovCisJdmFkZHIgPSAodm9pZCBfX2ZvcmNlICop aW9hZGRyICsgcGFnZV9vZmZzZXQ7CisJaWYgKHB3cml0ZSkKKwkJdW53cml0dGVuID0gX19jb3B5 X2Zyb21fdXNlcih2YWRkciwgdXNlcl9kYXRhLCBsZW5ndGgpOworCWVsc2UKKwkJdW53cml0dGVu ID0gX19jb3B5X3RvX3VzZXIodXNlcl9kYXRhLCB2YWRkciwgbGVuZ3RoKTsKKworCWlvX21hcHBp bmdfdW5tYXAoaW9hZGRyKTsKKwlyZXR1cm4gdW53cml0dGVuOworfQorCitzdGF0aWMgaW50Citp OTE1X2dlbV9ndHRfcHJlYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdWludDY0X3Qgc2l6ZSwKKwkJICAgdWludDY0X3QgZGF0 YV9vZmZzZXQsIHVpbnQ2NF90IGRhdGFfcHRyKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7 CisJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKKwl1aW50NjRfdCByZW1haW47CisJdWludDY0X3Qg b2Zmc2V0OworCWludCByZXQ7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9waW4ob2JqLCAw LCBQSU5fTUFQUEFCTEUpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gaW5zZXJ0X21hcHBhYmxlX25v ZGUoZGV2X3ByaXYsICZub2RlLCBQQUdFX1NJWkUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7 CisKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCQlpZiAocmV0KSB7 CisJCQlyZW1vdmVfbWFwcGFibGVfbm9kZSgmbm9kZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJ CWk5MTVfZ2VtX29iamVjdF9waW5fcGFnZXMob2JqKTsKKwl9IGVsc2UgeworCQlub2RlLnN0YXJ0 ID0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaik7CisJCW5vZGUuYWxsb2NhdGVkID0gZmFs c2U7CisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9wdXRfZmVuY2Uob2JqKTsKKwkJaWYgKHJldCkK KwkJCWdvdG8gb3V0X3VucGluOworCX0KKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9f Z3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91bnBpbjsKKwor CXVzZXJfZGF0YSA9IHRvX3VzZXJfcHRyKGRhdGFfcHRyKTsKKwlyZW1haW4gPSBzaXplOworCW9m ZnNldCA9IGRhdGFfb2Zmc2V0OworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 CisJaWYgKGxpa2VseSghaTkxNS5wcmVmYXVsdF9kaXNhYmxlKSkgeworCQlyZXQgPSBmYXVsdF9p bl9tdWx0aXBhZ2VzX3dyaXRlYWJsZSh1c2VyX2RhdGEsIHJlbWFpbik7CisJCWlmIChyZXQpIHsK KwkJCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCWdvdG8gb3V0X3VucGluOwor CQl9CisJfQorCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMg cGFnZQorCQkgKgorCQkgKiBwYWdlX2Jhc2UgPSBwYWdlIG9mZnNldCB3aXRoaW4gYXBlcnR1cmUK KwkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKKwkJICogcGFnZV9sZW5ndGgg PSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKKwkJICovCisJCXUzMiBwYWdlX2Jhc2UgPSBu b2RlLnN0YXJ0OworCQl1bnNpZ25lZCBwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNl dCk7CisJCXVuc2lnbmVkIHBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CisJ CXBhZ2VfbGVuZ3RoID0gcmVtYWluIDwgcGFnZV9sZW5ndGggPyByZW1haW4gOiBwYWdlX2xlbmd0 aDsKKwkJaWYgKG5vZGUuYWxsb2NhdGVkKSB7CisJCQl3bWIoKTsKKwkJCWRldl9wcml2LT5ndHQu YmFzZS5pbnNlcnRfcGFnZSgmZGV2X3ByaXYtPmd0dC5iYXNlLAorCQkJCQkJICAgICAgIGk5MTVf Z2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBvZmZzZXQgPj4gUEFHRV9TSElGVCksCisJ CQkJCQkgICAgICAgbm9kZS5zdGFydCwKKwkJCQkJCSAgICAgICBJOTE1X0NBQ0hFX05PTkUsIDAp OworCQkJd21iKCk7CisJCX0gZWxzZSB7CisJCQlwYWdlX2Jhc2UgKz0gb2Zmc2V0ICYgUEFHRV9N QVNLOworCQl9CisJCS8qIFRoaXMgaXMgYSBzbG93IHJlYWQvd3JpdGUgYXMgaXQgdHJpZXMgdG8g cmVhZCBmcm9tCisJCSAqIGFuZCB3cml0ZSB0byB1c2VyIG1lbW9yeSB3aGljaCBtYXkgcmVzdWx0 IGludG8gcGFnZQorCQkgKiBmYXVsdHMsIGFuZCBzbyB3ZSBjYW5ub3QgcGVyZm9ybSB0aGlzIHVu ZGVyIHN0cnVjdF9tdXRleC4KKwkJICovCisJCWlmIChzbG93X3VzZXJfYWNjZXNzKGRldl9wcml2 LT5ndHQubWFwcGFibGUsIHBhZ2VfYmFzZSwKKwkJCQkgICAgIHBhZ2Vfb2Zmc2V0LCB1c2VyX2Rh dGEsCisJCQkJICAgICBwYWdlX2xlbmd0aCwgZmFsc2UpKSB7CisJCQlyZXQgPSAtRUZBVUxUOwor CQkJYnJlYWs7CisJCX0KKworCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CisJCXVzZXJfZGF0YSAr PSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCX0KKworCW11dGV4X2xv Y2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0ID09IDAgJiYgKG9iai0+YmFzZS5yZWFk X2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fR1RUKSA9PSAwKSB7CisJCS8qIFRoZSB1c2VyIGhh cyBtb2RpZmllZCB0aGUgb2JqZWN0IHdoaWxzdCB3ZSB0cmllZAorCQkgKiByZWFkaW5nIGZyb20g aXQsIGFuZCB3ZSBub3cgaGF2ZSBubyBpZGVhIHdoYXQgZG9tYWluCisJCSAqIHRoZSBwYWdlcyBz aG91bGQgYmUgaW4uIEFzIHdlIGhhdmUganVzdCBiZWVuIHRvdWNoaW5nCisJCSAqIHRoZW0gZGly ZWN0bHksIGZsdXNoIGV2ZXJ5dGhpbmcgYmFjayB0byB0aGUgR1RUCisJCSAqIGRvbWFpbi4KKwkJ ICovCisJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNl KTsKKwl9CisKK291dF91bnBpbjoKKwlpZiAobm9kZS5hbGxvY2F0ZWQpIHsKKwkJd21iKCk7CisJ CWRldl9wcml2LT5ndHQuYmFzZS5jbGVhcl9yYW5nZSgmZGV2X3ByaXYtPmd0dC5iYXNlLAorCQkJ CQkgICAgICAgbm9kZS5zdGFydCwgbm9kZS5zaXplLAorCQkJCQkgICAgICAgdHJ1ZSk7CisJCWk5 MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCQlyZW1vdmVfbWFwcGFibGVfbm9kZSgm bm9kZSk7CisJfSBlbHNlIHsKKwkJaTkxNV9nZW1fb2JqZWN0X2dndHRfdW5waW4ob2JqKTsKKwl9 CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludAogaTkxNV9nZW1fc2htZW1fcHJl YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqLApAQCAtNjYxLDYgKzc5OSw5IEBAIGk5MTVfZ2VtX3NobWVtX3ByZWFkKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAJaW50IG5lZWRzX2NsZmx1c2ggPSAwOwogCXN0cnVjdCBzZ19w YWdlX2l0ZXIgc2dfaXRlcjsKIAorCWlmICghb2JqLT5iYXNlLmZpbHApCisJCXJldHVybiAtRU5P REVWOworCiAJdXNlcl9kYXRhID0gdG9fdXNlcl9wdHIoYXJncy0+ZGF0YV9wdHIpOwogCXJlbWFp biA9IGFyZ3MtPnNpemU7CiAKQEAgLTc2OSwxOCArOTEwLDE1IEBAIGk5MTVfZ2VtX3ByZWFkX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCWdvdG8gb3V0OwogCX0K IAotCS8qIHByaW1lIG9iamVjdHMgaGF2ZSBubyBiYWNraW5nIGZpbHAgdG8gR0VNIHByZWFkL3B3 cml0ZQotCSAqIHBhZ2VzIGZyb20uCi0JICovCi0JaWYgKCFvYmotPmJhc2UuZmlscCkgewotCQly ZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAl0cmFjZV9pOTE1X2dlbV9vYmplY3Rf cHJlYWQob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUpOwogCiAJcmV0ID0gaTkxNV9nZW1f c2htZW1fcHJlYWQoZGV2LCBvYmosIGFyZ3MsIGZpbGUpOwogCisJLyogcHJlYWQgZm9yIG5vbiBz aG1lbSBiYWNrZWQgb2JqZWN0cyAqLworCWlmIChyZXQgPT0gLUVGQVVMVCB8fCByZXQgPT0gLUVO T0RFVikKKwkJcmV0ID0gaTkxNV9nZW1fZ3R0X3ByZWFkKGRldiwgb2JqLCBhcmdzLT5zaXplLAor CQkJCQlhcmdzLT5vZmZzZXQsIGFyZ3MtPmRhdGFfcHRyKTsKKwogb3V0OgogCWRybV9nZW1fb2Jq ZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOwogdW5sb2NrOgpAQCAtODIxLDEwICs5NTksMTUg QEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 LAogCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAogCQkJIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsK IAlzdHJ1Y3QgZHJtX21tX25vZGUgbm9kZTsKIAl1aW50NjRfdCByZW1haW4sIG9mZnNldDsKIAlj aGFyIF9fdXNlciAqdXNlcl9kYXRhOwogCWludCByZXQ7CisJYm9vbCBoaXRfc2xvd19wYXRoID0g ZmFsc2U7CisKKwlpZiAob2JqLT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FKQorCQly ZXR1cm4gLUVGQVVMVDsKIAogCXJldCA9IGk5MTVfZ2VtX29ial9nZ3R0X3BpbihvYmosIDAsIFBJ Tl9NQVBQQUJMRSB8IFBJTl9OT05CTE9DSyk7CiAJaWYgKHJldCkgewpAQCAtODQyLDE2ICs5ODUs MTUgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1LAogCX0gZWxzZSB7CiAJCW5vZGUuc3RhcnQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQo b2JqKTsKIAkJbm9kZS5hbGxvY2F0ZWQgPSBmYWxzZTsKKwkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0 X3B1dF9mZW5jZShvYmopOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5waW47CiAJfQogCiAJ cmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19ndHRfZG9tYWluKG9iaiwgdHJ1ZSk7CiAJaWYg KHJldCkKIAkJZ290byBvdXRfdW5waW47CiAKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcHV0X2Zl bmNlKG9iaik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5waW47Ci0KIAlpbnRlbF9mYl9vYmpf aW52YWxpZGF0ZShvYmosIE9SSUdJTl9HVFQpOwogCW9iai0+ZGlydHkgPSB0cnVlOwogCkBAIC04 NzAsMjQgKzEwMTIsMzYgQEAgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICppOTE1LAogCQl1bnNpZ25lZCBwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBh Z2Vfb2Zmc2V0OwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbiA8IHBhZ2VfbGVuZ3RoID8gcmVtYWlu IDogcGFnZV9sZW5ndGg7CiAJCWlmIChub2RlLmFsbG9jYXRlZCkgewotCQkJd21iKCk7CisJCQl3 bWIoKTsgLyogZmx1c2ggdGhlIHdyaXRlIGJlZm9yZSB3ZSBtb2RpZnkgdGhlIEdHVFQgKi8KIAkJ CWk5MTUtPmd0dC5iYXNlLmluc2VydF9wYWdlKCZpOTE1LT5ndHQuYmFzZSwKIAkJCQkJCSAgIGk5 MTVfZ2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Mob2JqLCBvZmZzZXQgPj4gUEFHRV9TSElGVCks CiAJCQkJCQkgICBub2RlLnN0YXJ0LAogCQkJCQkJICAgSTkxNV9DQUNIRV9OT05FLAogCQkJCQkJ ICAgMCk7Ci0JCQl3bWIoKTsKKwkJCXdtYigpOyAvKiBmbHVzaCBtb2RpZmljYXRpb25zIHRvIHRo ZSBHR1RUIChpbnNlcnRfcGFnZSkgKi8KIAkJfSBlbHNlIHsKIAkJCXBhZ2VfYmFzZSArPSBvZmZz ZXQgJiBQQUdFX01BU0s7CiAJCX0KIAkJLyogSWYgd2UgZ2V0IGEgZmF1bHQgd2hpbGUgY29weWlu ZyBkYXRhLCB0aGVuIChwcmVzdW1hYmx5KSBvdXIKIAkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZh aWxhYmxlLiAgUmV0dXJuIHRoZSBlcnJvciBhbmQgd2UnbGwKIAkJICogcmV0cnkgaW4gdGhlIHNs b3cgcGF0aC4KKwkJICogSWYgdGhlIG9iamVjdCBpcyBub24tc2htZW0gYmFja2VkLCB3ZSByZXRy eSBhZ2FpbiB3aXRoIHRoZQorCQkgKiBwYXRoIHRoYXQgaGFuZGxlcyBwYWdlIGZhdWx0LgogCQkg Ki8KIAkJaWYgKGZhc3RfdXNlcl93cml0ZShpOTE1LT5ndHQubWFwcGFibGUsIHBhZ2VfYmFzZSwK IAkJCQkgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKSB7Ci0JCQlyZXQg PSAtRUZBVUxUOwotCQkJZ290byBvdXRfZmx1c2g7CisJCQloaXRfc2xvd19wYXRoID0gdHJ1ZTsK KwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQkJaWYgKHNsb3dfdXNlcl9h Y2Nlc3MoaTkxNS0+Z3R0Lm1hcHBhYmxlLAorCQkJCQkgICAgIHBhZ2VfYmFzZSwKKwkJCQkJICAg ICBwYWdlX29mZnNldCwgdXNlcl9kYXRhLAorCQkJCQkgICAgIHBhZ2VfbGVuZ3RoLCB0cnVlKSkg eworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OworCQkJCWdvdG8gb3V0X2ZsdXNoOworCQkJfQorCisJCQltdXRleF9sb2NrKCZkZXYtPnN0cnVj dF9tdXRleCk7CiAJCX0KIAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CkBAIC04OTYsNiArMTA1 MCwxOSBAQCBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3Qoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUsCiAJfQogCiBvdXRfZmx1c2g6CisJaWYgKGhpdF9zbG93X3BhdGgpIHsKKwkJaWYgKHJl dCA9PSAwICYmCisJCSAgICAob2JqLT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJ Tl9HVFQpID09IDApIHsKKwkJCS8qIFRoZSB1c2VyIGhhcyBtb2RpZmllZCB0aGUgb2JqZWN0IHdo aWxzdCB3ZSB0cmllZAorCQkJICogcmVhZGluZyBmcm9tIGl0LCBhbmQgd2Ugbm93IGhhdmUgbm8g aWRlYSB3aGF0IGRvbWFpbgorCQkJICogdGhlIHBhZ2VzIHNob3VsZCBiZSBpbi4gQXMgd2UgaGF2 ZSBqdXN0IGJlZW4gdG91Y2hpbmcKKwkJCSAqIHRoZW0gZGlyZWN0bHksIGZsdXNoIGV2ZXJ5dGhp bmcgYmFjayB0byB0aGUgR1RUCisJCQkgKiBkb21haW4uCisJCQkgKi8KKwkJCXJldCA9IGk5MTVf Z2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIGZhbHNlKTsKKwkJfQorCX0KKwogCWlu dGVsX2ZiX29ial9mbHVzaChvYmosIGZhbHNlLCBPUklHSU5fR1RUKTsKIG91dF91bnBpbjoKIAlp ZiAobm9kZS5hbGxvY2F0ZWQpIHsKQEAgLTExNTIsMTQgKzEzMTksNiBAQCBpOTE1X2dlbV9wd3Jp dGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXQ7 CiAJfQogCi0JLyogcHJpbWUgb2JqZWN0cyBoYXZlIG5vIGJhY2tpbmcgZmlscCB0byBHRU0gcHJl YWQvcHdyaXRlCi0JICogcGFnZXMgZnJvbS4KLQkgKi8KLQlpZiAoIW9iai0+YmFzZS5maWxwKSB7 Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXRyYWNlX2k5MTVfZ2VtX29i amVjdF9wd3JpdGUob2JqLCBhcmdzLT5vZmZzZXQsIGFyZ3MtPnNpemUpOwogCiAJcmV0ID0gLUVG QVVMVDsKQEAgLTExNjksMjAgKzEzMjgsMjAgQEAgaTkxNV9nZW1fcHdyaXRlX2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJICogcHJlYWQvcHdyaXRlIGN1cnJlbnRs eSBhcmUgcmVhZGluZyBhbmQgd3JpdGluZyBmcm9tIHRoZSBDUFUKIAkgKiBwZXJzcGVjdGl2ZSwg cmVxdWlyaW5nIG1hbnVhbCBkZXRpbGluZyBieSB0aGUgY2xpZW50LgogCSAqLwotCWlmIChvYmot PnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX05PTkUgJiYKLQkgICAgb2JqLT5iYXNlLndyaXRl X2RvbWFpbiAhPSBJOTE1X0dFTV9ET01BSU5fQ1BVICYmCi0JICAgIGNwdV93cml0ZV9uZWVkc19j bGZsdXNoKG9iaikpIHsKKwlpZiAoIW9iai0+YmFzZS5maWxwIHx8IGNwdV93cml0ZV9uZWVkc19j bGZsdXNoKG9iaikpIHsKIAkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KGRldl9wcml2 LCBvYmosIGFyZ3MsIGZpbGUpOwogCQkvKiBOb3RlIHRoYXQgdGhlIGd0dCBwYXRocyBtaWdodCBm YWlsIHdpdGggbm9uLXBhZ2UtYmFja2VkIHVzZXIKIAkJICogcG9pbnRlcnMgKGUuZy4gZ3R0IG1h cHBpbmdzIHdoZW4gbW92aW5nIGRhdGEgYmV0d2VlbgogCQkgKiB0ZXh0dXJlcykuIEZhbGxiYWNr IHRvIHRoZSBzaG1lbSBwYXRoIGluIHRoYXQgY2FzZS4gKi8KIAl9CiAKLQlpZiAocmV0ID09IC1F RkFVTFQgfHwgcmV0ID09IC1FTk9TUEMpIHsKKwlpZiAocmV0ID09IC1FRkFVTFQpIHsKIAkJaWYg KG9iai0+cGh5c19oYW5kbGUpCiAJCQlyZXQgPSBpOTE1X2dlbV9waHlzX3B3cml0ZShvYmosIGFy Z3MsIGZpbGUpOwotCQllbHNlCisJCWVsc2UgaWYgKG9iai0+YmFzZS5maWxwKQogCQkJcmV0ID0g aTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlKTsKKwkJZWxzZQorCQkJ cmV0ID0gLUVOT0RFVjsKIAl9CiAKIG91dDoKQEAgLTM5NzksOSArNDEzOCw3IEBAIG91dDoKIAkg KiBvYmplY3QgaXMgbm93IGNvaGVyZW50IGF0IGl0cyBuZXcgY2FjaGUgbGV2ZWwgKHdpdGggcmVz cGVjdAogCSAqIHRvIHRoZSBhY2Nlc3MgZG9tYWluKS4KIAkgKi8KLQlpZiAob2JqLT5jYWNoZV9k aXJ0eSAmJgotCSAgICBvYmotPmJhc2Uud3JpdGVfZG9tYWluICE9IEk5MTVfR0VNX0RPTUFJTl9D UFUgJiYKLQkgICAgY3B1X3dyaXRlX25lZWRzX2NsZmx1c2gob2JqKSkgeworCWlmIChvYmotPmNh Y2hlX2RpcnR5ICYmIGNwdV93cml0ZV9uZWVkc19jbGZsdXNoKG9iaikpIHsKIAkJaWYgKGk5MTVf Z2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgdHJ1ZSkpCiAJCQlpOTE1X2dlbV9jaGlwc2V0X2ZsdXNo KG9iai0+YmFzZS5kZXYpOwogCX0KLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK