From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Roper Subject: [PATCH 3/3] drm/i915: Switch to level-based DDB allocation algorithm (v2) Date: Thu, 6 Dec 2018 15:55:41 -0800 Message-ID: <20181206235541.2732-1-matthew.d.roper@intel.com> References: <20181206170944.16539-4-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3726F6E683 for ; Thu, 6 Dec 2018 23:55:53 +0000 (UTC) In-Reply-To: <20181206170944.16539-4-matthew.d.roper@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 List-Id: intel-gfx@lists.freedesktop.org VGhlIEREQiBhbGxvY2F0aW9uIGFsZ29yaXRobSBjdXJyZW50bHkgdXNlZCBieSB0aGUgZHJpdmVy IGdyYW50cyBlYWNoCnBsYW5lIGEgdmVyeSBzbWFsbCBtaW5pbXVtIGFsbG9jYXRpb24gb2YgRERC IGJsb2NrcyBhbmQgdGhlbiBkaXZpZXMgdXAKYWxsIG9mIHRoZSByZW1haW5pbmcgYmxvY2tzIGJh c2VkIG9uIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBkYXRhCnJhdGUgdGhhdCB0aGUgcGxh bmUgbWFrZXMgdXAuICBJdCB0dXJucyBvdXQgdGhhdCB0aGlzIHByb3BvcnRpb25hbAphbGxvY2F0 aW9uIGFwcHJvYWNoIGlzIG92ZXJseS1nZW5lcm91cyB3aXRoIHRoZSBsYXJnZXIgcGxhbmVzIGFu ZCBjYW4KbGVhdmUgdmVyeSBzbWFsbCBwbGFuZXMgd3Rob3V0IGEgYmlnIGVub3VnaCBhbGxvY2F0 aW9uIHRvIGV2ZW4gaGl0IHRoZWlyCmxldmVsIDAgd2F0ZXJtYXJrIHJlcXVpcmVtZW50cyAoZXNw ZWNpYWxseSBvbiBBUEwsIHdoaWNoIGhhcyBhIHNtYWxsZXIKRERCIGluIGdlbmVyYWwgdGhhbiBv dGhlciBnZW45IHBsYXRmb3JtcykuICBPciB0aGVyZSBjYW4gYmUgc2l0dWF0aW9ucwp3aGVyZSB0 aGUgc21hbGxlc3QgcGxhbmVzIGhpdCBhIGxvd2VyIHdhdGVybWFyayBsZXZlbCB0aGFuIHRoZXkg c2hvdWxkCmhhdmUgYmVlbiBhYmxlIHRvIGhpdCB3aXRoIGEgbW9yZSBlcXVpdGFibGUgZGl2aXNp b24gb2YgRERCIGJsb2NrcywgdGh1cwpsaW1pdGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gc2xlZXAg c3RhdGUgdGhhdCBjYW4gYmUgYWNoaWV2ZWQuCgpUaGUgYnNwZWMgbm93IGRlc2NyaWJlcyBhbiBh bHRlcm5hdGUgYWxnb3JpdGhtIHRoYXQgY2FuIGJlIHVzZWQgdG8Kb3ZlcmNvbWUgdGhlc2UgdHlw ZXMgb2YgaXNzdWVzLiAgV2l0aCB0aGUgbmV3IGFsZ29yaXRobSwgd2UgY2FsY3VsYXRlCmFsbCBw bGFuZSB3YXRlcm1hcmsgdmFsdWVzIGZvciBhbGwgd20gbGV2ZWxzIGZpcnN0LCB0aGVuIGdvIGJh Y2sgYW5kCnBhcnRpdGlvbiBhIHBpcGUncyBEREIgc3BhY2Ugc2Vjb25kLiAgVGhlIEREQiBhbGxv Y2F0aW9uIHdpbGwgY2FsY3VsYXRlCndoYXQgdGhlIGhpZ2hlc3Qgd2F0ZXJtYXJrIGxldmVsIHRo YXQgY2FuIGJlIGFjaGlldmVkIG9uICphbGwqIGFjdGl2ZQpwbGFuZXMsIGFuZCB0aGVuIGdyYW50 IHRoZSBibG9ja3MgbmVjZXNzYXJ5IHRvIGhpdCB0aGF0IGxldmVsIHRvIGVhY2gKcGxhbmUuICBB bnkgcmVtYWluaW5nIGJsb2NrcyBhcmUgdGhlbiBkaXZpZGVkIHVwIHByb3BvcnRpb25hbGx5CmFj Y29yZGluZyB0byBkYXRhIHJhdGUsIHNpbWlsYXIgdG8gdGhlIG9sZCBhbGdvcml0aG0uCgpUaGVy ZSB3YXMgYSBwcmV2aW91cyBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGlzIGFsZ29yaXRobSBhIGNv dXBsZSB5ZWFycwphZ28gaW4gYmI5ZDg1ZjZlOWQgKCJkcm0vaTkxNS9za2w6IE5ldyBkZGIgYWxs b2NhdGlvbiBhbGdvcml0aG0iKSwgYnV0CnNvbWUgcmVncmVzc2lvbnMgd2VyZSByZXBvcnRlZCwg dGhlIHBhdGNoIHdhcyByZXZlcnRlZCwgYW5kIG5vYm9keQpldmVyIGdvdCBhcm91bmQgdG8gZmln dXJpbmcgb3V0IGV4YWN0bHkgd2hlcmUgdGhlIGJ1ZyB3YXMgaW4gdGhhdAp2ZXJzaW9uLiAgT3Vy IHdhdGVybWFyayBjb2RlIGhhcyBldm9sdmVkIHNpZ25pZmljYW50bHkgaW4gdGhlIG1lYW50aW1l LApidXQgd2UncmUgc3RpbGwgZ2V0dGluZyBidWcgcmVwb3J0cyBjYXVzZWQgYnkgdGhlIHVuZmFp ciBwcm9wb3J0aW9uYWwKYWxnb3JpdGhtLCBzbyBsZXQncyBnaXZlIHRoaXMgYW5vdGhlciBzaG90 LgoKdjI6CiAtIE1ha2Ugc3VyZSBjdXJzb3IgYWxsb2NhdGlvbiBzdGF5cyBjb25zdGFudCBhbmQg Zml4ZWQgYXQgdGhlIGVuZCBvZgogICB0aGUgcGlwZSBhbGxvY2F0aW9uLgogLSBGaXggc29tZSB3 YXRlcm1hcmsgbGV2ZWwgaXRlcmF0b3JzIHRoYXQgd2VyZW4ndCBoYW5kbGluZyB0aGUgbWF4CiAg IGxldmVsLgoKQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcu Y2dpP2lkPTEwNTQ1OApTaWduZWQtb2ZmLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJA aW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCAzNTAgKysr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEy OSBpbnNlcnRpb25zKCspLCAyMjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMK aW5kZXggYjA5YzJhMjU3ZmYxLi42ZGIyYmY3YjAzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0u YwpAQCAtNDMwNiwxMDIgKzQzMDYsNiBAQCBpY2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0 ZShzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlLAogCXJldHVybiB0b3RhbF9k YXRhX3JhdGU7CiB9CiAKLXN0YXRpYyB1aW50MTZfdAotc2tsX2RkYl9taW5fYWxsb2MoY29uc3Qg c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCBjb25zdCBpbnQgcGxhbmUpCi17Ci0Jc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwc3RhdGUtPmZiOwotCXN0cnVjdCBpbnRlbF9wbGFu ZV9zdGF0ZSAqaW50ZWxfcHN0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKTsKLQl1 aW50MzJfdCBzcmNfdywgc3JjX2g7Ci0JdWludDMyX3QgbWluX3NjYW5saW5lcyA9IDg7Ci0JdWlu dDhfdCBwbGFuZV9icHA7Ci0KLQlpZiAoV0FSTl9PTighZmIpKQotCQlyZXR1cm4gMDsKLQotCS8q IEZvciBwYWNrZWQgZm9ybWF0cywgYW5kIHV2LXBsYW5lLCByZXR1cm4gMCAqLwotCWlmIChwbGFu ZSA9PSAxICYmIGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBEUk1fRk9STUFUX05WMTIpCi0JCXJldHVy biAwOwotCi0JLyogRm9yIE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCi0JaWYgKGZiLT5t b2RpZmllciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgotCSAgICBmYi0+bW9kaWZpZXIg IT0gSTkxNV9GT1JNQVRfTU9EX1lmX1RJTEVEICYmCi0JICAgIGZiLT5tb2RpZmllciAhPSBJOTE1 X0ZPUk1BVF9NT0RfWV9USUxFRF9DQ1MgJiYKLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9S TUFUX01PRF9ZZl9USUxFRF9DQ1MpCi0JCXJldHVybiA4OwotCi0JLyoKLQkgKiBTcmMgY29vcmRp bmF0ZXMgYXJlIGFscmVhZHkgcm90YXRlZCBieSAyNzAgZGVncmVlcyBmb3IKLQkgKiB0aGUgOTAv MjcwIGRlZ3JlZSBwbGFuZSByb3RhdGlvbiBjYXNlcyAodG8gbWF0Y2ggdGhlCi0JICogR1RUIG1h cHBpbmcpLCBoZW5jZSBubyBuZWVkIHRvIGFjY291bnQgZm9yIHJvdGF0aW9uIGhlcmUuCi0JICov Ci0Jc3JjX3cgPSBkcm1fcmVjdF93aWR0aCgmaW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7 Ci0Jc3JjX2ggPSBkcm1fcmVjdF9oZWlnaHQoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2 OwotCi0JLyogSGFsdmUgVVYgcGxhbmUgd2lkdGggYW5kIGhlaWdodCBmb3IgTlYxMiAqLwotCWlm IChwbGFuZSA9PSAxKSB7Ci0JCXNyY193IC89IDI7Ci0JCXNyY19oIC89IDI7Ci0JfQotCi0JcGxh bmVfYnBwID0gZmItPmZvcm1hdC0+Y3BwW3BsYW5lXTsKLQotCWlmIChkcm1fcm90YXRpb25fOTBf b3JfMjcwKHBzdGF0ZS0+cm90YXRpb24pKSB7Ci0JCXN3aXRjaCAocGxhbmVfYnBwKSB7Ci0JCWNh c2UgMToKLQkJCW1pbl9zY2FubGluZXMgPSAzMjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlt aW5fc2NhbmxpbmVzID0gMTY7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJbWluX3NjYW5saW5l cyA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJbWluX3NjYW5saW5lcyA9IDQ7Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk4oMSwgIlVuc3VwcG9ydGVkIHBpeGVsIGRlcHRoICV1 IGZvciByb3RhdGlvbiIsCi0JCQkgICAgIHBsYW5lX2JwcCk7Ci0JCQltaW5fc2NhbmxpbmVzID0g MzI7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKCg0ICogc3JjX3cgKiBwbGFuZV9i cHApLCA1MTIpICogbWluX3NjYW5saW5lcy80ICsgMzsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9k ZGJfY2FsY19taW4oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwgaW50IG51 bV9hY3RpdmUsCi0JCSB1aW50MTZfdCAqbWluaW11bSwgdWludDE2X3QgKnV2X21pbmltdW0pCi17 Ci0JY29uc3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwotCi0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRl KHBsYW5lLCBwc3RhdGUsICZjc3RhdGUtPmJhc2UpIHsKLQkJZW51bSBwbGFuZV9pZCBwbGFuZV9p ZCA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKS0+aWQ7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwc3RhdGUpOwotCi0JCWlmIChw bGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCi0JCQljb250aW51ZTsKLQotCQkvKiBzbGF2ZSBwbGFu ZSBtdXN0IGJlIGludmlzaWJsZSBhbmQgY2FsY3VsYXRlZCBmcm9tIG1hc3RlciAqLwotCQlpZiAo IXBzdGF0ZS0+dmlzaWJsZSB8fCBXQVJOX09OKHBsYW5lX3N0YXRlLT5zbGF2ZSkpCi0JCQljb250 aW51ZTsKLQotCQlpZiAoIXBsYW5lX3N0YXRlLT5saW5rZWRfcGxhbmUpIHsKLQkJCW1pbmltdW1b cGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRlLCAwKTsKLQkJCXV2X21pbmltdW1b cGxhbmVfaWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRlLCAxKTsKLQkJfSBlbHNlIHsKLQkJ CWVudW0gcGxhbmVfaWQgeV9wbGFuZV9pZCA9Ci0JCQkJcGxhbmVfc3RhdGUtPmxpbmtlZF9wbGFu ZS0+aWQ7Ci0KLQkJCW1pbmltdW1beV9wbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3Rh dGUsIDApOwotCQkJbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3RhdGUs IDEpOwotCQl9Ci0JfQotCi0JbWluaW11bVtQTEFORV9DVVJTT1JdID0gc2tsX2N1cnNvcl9hbGxv Y2F0aW9uKG51bV9hY3RpdmUpOwotfQotCiBzdGF0aWMgaW50CiBza2xfYWxsb2NhdGVfcGlwZV9k ZGIoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJICAgICAgc3RydWN0IHNrbF9k ZGJfYWxsb2NhdGlvbiAqZGRiIC8qIG91dCAqLykKQEAgLTQ0MTEsMTUgKzQzMTUsMTggQEAgc2ts X2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwogCXN0 cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1 Y3Qgc2tsX2RkYl9lbnRyeSAqYWxsb2MgPSAmY3N0YXRlLT53bS5za2wuZGRiOwotCXVpbnQxNl90 IGFsbG9jX3NpemUsIHN0YXJ0OwotCXVpbnQxNl90IG1pbmltdW1bSTkxNV9NQVhfUExBTkVTXSA9 IHt9OwotCXVpbnQxNl90IHV2X21pbmltdW1bSTkxNV9NQVhfUExBTkVTXSA9IHt9OworCXN0cnVj dCBza2xfZGRiX2VudHJ5ICpwbGFuZV9hbGxvYywgKnV2X3BsYW5lX2FsbG9jOworCXN0cnVjdCBz a2xfcGxhbmVfd20gKndtOworCXVpbnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0ID0gMDsKKwl1aW50 MTZfdCB0b3RhbFtJOTE1X01BWF9QTEFORVNdID0ge307CisJdWludDE2X3QgdXZfdG90YWxbSTkx NV9NQVhfUExBTkVTXSA9IHt9OwogCXU2NCB0b3RhbF9kYXRhX3JhdGU7CiAJZW51bSBwbGFuZV9p ZCBwbGFuZV9pZDsKIAlpbnQgbnVtX2FjdGl2ZTsKIAl1NjQgcGxhbmVfZGF0YV9yYXRlW0k5MTVf TUFYX1BMQU5FU10gPSB7fTsKIAl1NjQgdXZfcGxhbmVfZGF0YV9yYXRlW0k5MTVfTUFYX1BMQU5F U10gPSB7fTsKLQl1aW50MTZfdCB0b3RhbF9taW5fYmxvY2tzID0gMDsKKwl1aW50MTZfdCBibG9j a3MgPSAwOworCWludCBsZXZlbDsKIAogCS8qIENsZWFyIHRoZSBwYXJ0aXRpb25pbmcgZm9yIGRp c2FibGVkIHBsYW5lcy4gKi8KIAltZW1zZXQoY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3ksIDAs IHNpemVvZihjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeSkpOwpAQCAtNDQ0OSw4MSArNDM1Niwx MTIgQEAgc2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3Rh dGUsCiAJaWYgKGFsbG9jX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlza2xfZGRiX2NhbGNf bWluKGNzdGF0ZSwgbnVtX2FjdGl2ZSwgbWluaW11bSwgdXZfbWluaW11bSk7CisJLyogQWxsb2Nh dGUgZml4ZWQgbnVtYmVyIG9mIGJsb2NrcyBmb3IgY3Vyc29yLiAqLworCXRvdGFsW1BMQU5FX0NV UlNPUl0gPSBza2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7CisJYWxsb2Nfc2l6ZSAt PSB0b3RhbFtQTEFORV9DVVJTT1JdOworCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5F X0NVUlNPUl0uc3RhcnQgPQorCQlhbGxvYy0+ZW5kIC0gdG90YWxbUExBTkVfQ1VSU09SXTsKKwlj c3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtQTEFORV9DVVJTT1JdLmVuZCA9IGFsbG9jLT5lbmQ7 CisKKwlpZiAodG90YWxfZGF0YV9yYXRlID09IDApCisJCXJldHVybiAwOwogCiAJLyoKLQkgKiAx LiBBbGxvY2F0ZSB0aGUgbWluaW51bSByZXF1aXJlZCBibG9ja3MgZm9yIGVhY2ggYWN0aXZlIHBs YW5lCi0JICogYW5kIGFsbG9jYXRlIHRoZSBjdXJzb3IsIGl0IGRvZXNuJ3QgcmVxdWlyZSBleHRy YSBhbGxvY2F0aW9uCi0JICogcHJvcG9ydGlvbmFsIHRvIHRoZSBkYXRhIHJhdGUuCisJICogRmlu ZCB0aGUgaGlnaGVzdCB3YXRlcm1hcmsgbGV2ZWwgZm9yIHdoaWNoIHdlIGNhbiBzYXRpc2Z5IHRo ZSBibG9jaworCSAqIHJlcXVpcmVtZW50IG9mIGFjdGl2ZSBwbGFuZXMuCiAJICovCisJZm9yIChs ZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOyBsZXZlbCA+PSAwOyBsZXZlbC0tKSB7 CisJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVfaWQpIHsKKwkJ CWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCisJCQkJY29udGludWU7CiAKLQlmb3JfZWFj aF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Ci0JCXRvdGFsX21pbl9i bG9ja3MgKz0gbWluaW11bVtwbGFuZV9pZF07Ci0JCXRvdGFsX21pbl9ibG9ja3MgKz0gdXZfbWlu aW11bVtwbGFuZV9pZF07CisJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1tw bGFuZV9pZF07CisJCQlibG9ja3MgKz0gd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYjsKKwkJCWJs b2NrcyArPSB3bS0+dXZfd21bbGV2ZWxdLnBsYW5lX3Jlc19iOworCQl9CisKKwkJaWYgKGJsb2Nr cyA8IGFsbG9jX3NpemUpIHsKKwkJCWFsbG9jX3NpemUgLT0gYmxvY2tzOworCQkJYnJlYWs7CisJ CX0KIAl9CiAKLQlpZiAodG90YWxfbWluX2Jsb2NrcyA+IGFsbG9jX3NpemUpIHsKKwlpZiAobGV2 ZWwgPCAwKSB7CiAJCURSTV9ERUJVR19LTVMoIlJlcXVlc3RlZCBkaXNwbGF5IGNvbmZpZ3VyYXRp b24gZXhjZWVkcyBzeXN0ZW0gRERCIGxpbWl0YXRpb25zIik7Ci0JCURSTV9ERUJVR19LTVMoIm1p bmltdW0gcmVxdWlyZWQgJWQvJWRcbiIsIHRvdGFsX21pbl9ibG9ja3MsCi0JCQkJCQkJYWxsb2Nf c2l6ZSk7CisJCURSTV9ERUJVR19LTVMoIm1pbmltdW0gcmVxdWlyZWQgJWQvJWRcbiIsIGJsb2Nr cywKKwkJCSAgICAgIGFsbG9jX3NpemUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlhbGxv Y19zaXplIC09IHRvdGFsX21pbl9ibG9ja3M7Ci0JY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lb UExBTkVfQ1VSU09SXS5zdGFydCA9IGFsbG9jLT5lbmQgLSBtaW5pbXVtW1BMQU5FX0NVUlNPUl07 Ci0JY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbUExBTkVfQ1VSU09SXS5lbmQgPSBhbGxvYy0+ ZW5kOwotCiAJLyoKLQkgKiAyLiBEaXN0cmlidXRlIHRoZSByZW1haW5pbmcgc3BhY2UgaW4gcHJv cG9ydGlvbiB0byB0aGUgYW1vdW50IG9mCi0JICogZGF0YSBlYWNoIHBsYW5lIG5lZWRzIHRvIGZl dGNoIGZyb20gbWVtb3J5LgotCSAqCi0JICogRklYTUU6IHdlIG1heSBub3QgYWxsb2NhdGUgZXZl cnkgc2luZ2xlIGJsb2NrIGhlcmUuCisJICogR3JhbnQgZWFjaCBwbGFuZSB0aGUgYmxvY2tzIGl0 IHJlcXVpcmVzIGF0IHRoZSBoaWdoZXN0IGFjaGlldmFibGUKKwkgKiB3YXRlcm1hcmsgbGV2ZWws IHBsdXMgYW4gZXh0cmEgc2hhcmUgb2YgdGhlIGxlZnRvdmVyIGJsb2NrcworCSAqIHByb3BvcnRp b25hbCB0byBpdHMgcmVsYXRpdmUgZGF0YSByYXRlLgogCSAqLwotCWlmICh0b3RhbF9kYXRhX3Jh dGUgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlzdGFydCA9IGFsbG9jLT5zdGFydDsKIAlmb3JfZWFj aF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Ci0JCXU2NCBkYXRhX3Jh dGUsIHV2X2RhdGFfcmF0ZTsKLQkJdWludDE2X3QgcGxhbmVfYmxvY2tzLCB1dl9wbGFuZV9ibG9j a3M7CisJCXU2NCByYXRlOwogCiAJCWlmIChwbGFuZV9pZCA9PSBQTEFORV9DVVJTT1IpCiAJCQlj b250aW51ZTsKIAotCQlkYXRhX3JhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQl3 bSA9ICZjc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CiAKLQkJLyoKLQkJ ICogYWxsb2NhdGlvbiBmb3IgKHBhY2tlZCBmb3JtYXRzKSBvciAodXYtcGxhbmUgcGFydCBvZiBw bGFuYXIgZm9ybWF0KToKLQkJICogcHJvbW90ZSB0aGUgZXhwcmVzc2lvbiB0byA2NCBiaXRzIHRv IGF2b2lkIG92ZXJmbG93aW5nLCB0aGUKLQkJICogcmVzdWx0IGlzIDwgYXZhaWxhYmxlIGFzIGRh dGFfcmF0ZSAvIHRvdGFsX2RhdGFfcmF0ZSA8IDEKLQkJICovCi0JCXBsYW5lX2Jsb2NrcyA9IG1p bmltdW1bcGxhbmVfaWRdOwotCQlwbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFsbG9jX3NpemUg KiBkYXRhX3JhdGUsIHRvdGFsX2RhdGFfcmF0ZSk7CisJCXJhdGUgPSBwbGFuZV9kYXRhX3JhdGVb cGxhbmVfaWRdOworCQl0b3RhbFtwbGFuZV9pZF0gPSB3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19i ICsKKwkJCWRpdjY0X3U2NChhbGxvY19zaXplICogcmF0ZSwgdG90YWxfZGF0YV9yYXRlKTsKIAot CQkvKiBMZWF2ZSBkaXNhYmxlZCBwbGFuZXMgYXQgKDAsMCkgKi8KLQkJaWYgKGRhdGFfcmF0ZSkg ewotCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7 Ci0JCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF0uZW5kID0gc3RhcnQgKyBw bGFuZV9ibG9ja3M7Ci0JCX0KLQotCQlzdGFydCArPSBwbGFuZV9ibG9ja3M7CisJCXJhdGUgPSB1 dl9wbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQl1dl90b3RhbFtwbGFuZV9pZF0gPSB3bS0+ dXZfd21bbGV2ZWxdLnBsYW5lX3Jlc19iICsKKwkJCWRpdjY0X3U2NChhbGxvY19zaXplICogcmF0 ZSwgdG90YWxfZGF0YV9yYXRlKTsKKwl9CiAKLQkJLyogQWxsb2NhdGUgRERCIGZvciBVViBwbGFu ZSBmb3IgcGxhbmFyIGZvcm1hdC9OVjEyICovCi0JCXV2X2RhdGFfcmF0ZSA9IHV2X3BsYW5lX2Rh dGFfcmF0ZVtwbGFuZV9pZF07CisJLyogU2V0IHRoZSBhY3R1YWwgRERCIHN0YXJ0L2VuZCBwb2lu dHMgZm9yIGVhY2ggcGxhbmUgKi8KKwlzdGFydCA9IGFsbG9jLT5zdGFydDsKKwlmb3JfZWFjaF9w bGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7CisJCWlmIChwbGFuZV9pZCA9 PSBQTEFORV9DVVJTT1IpCisJCQljb250aW51ZTsKIAotCQl1dl9wbGFuZV9ibG9ja3MgPSB1dl9t aW5pbXVtW3BsYW5lX2lkXTsKLQkJdXZfcGxhbmVfYmxvY2tzICs9IGRpdjY0X3U2NChhbGxvY19z aXplICogdXZfZGF0YV9yYXRlLCB0b3RhbF9kYXRhX3JhdGUpOworCQlwbGFuZV9hbGxvYyA9ICZj c3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeVtwbGFuZV9pZF07CisJCXV2X3BsYW5lX2FsbG9jID0g JmNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltwbGFuZV9pZF07CiAKIAkJLyogR2VuMTErIHVz ZXMgYSBzZXBhcmF0ZSBwbGFuZSBmb3IgVVYgd2F0ZXJtYXJrcyAqLwotCQlXQVJOX09OKElOVEVM X0dFTihkZXZfcHJpdikgPj0gMTEgJiYgdXZfcGxhbmVfYmxvY2tzKTsKKwkJV0FSTl9PTihJTlRF TF9HRU4oZGV2X3ByaXYpID49IDExICYmIHV2X3RvdGFsW3BsYW5lX2lkXSk7CiAKLQkJaWYgKHV2 X2RhdGFfcmF0ZSkgewotCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5z dGFydCA9IHN0YXJ0OwotCQkJY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3V2W3BsYW5lX2lkXS5l bmQgPQotCQkJCXN0YXJ0ICsgdXZfcGxhbmVfYmxvY2tzOworCQkvKiBMZWF2ZSBkaXNhYmxlZCBw bGFuZXMgYXQgKDAsMCkgKi8KKwkJaWYgKHRvdGFsW3BsYW5lX2lkXSkgeworCQkJcGxhbmVfYWxs b2MtPnN0YXJ0ID0gc3RhcnQ7CisJCQlwbGFuZV9hbGxvYy0+ZW5kID0gc3RhcnQgKz0gdG90YWxb cGxhbmVfaWRdOworCQl9CisKKwkJaWYgKHV2X3RvdGFsW3BsYW5lX2lkXSkgeworCQkJdXZfcGxh bmVfYWxsb2MtPnN0YXJ0ID0gc3RhcnQ7CisJCQl1dl9wbGFuZV9hbGxvYy0+ZW5kID0gc3RhcnQg KyB1dl90b3RhbFtwbGFuZV9pZF07CisJCX0KKwl9CisKKwkvKgorCSAqIFdoZW4gd2UgY2FsY3Vs YXRlZCB3YXRlcm1hcmsgdmFsdWVzIHdlIGRpZG4ndCBrbm93IGhvdyBoaWdoCisJICogb2YgYSBs ZXZlbCB3ZSdkIGFjdHVhbGx5IGJlIGFibGUgdG8gaGl0LCBzbyB3ZSBqdXN0IG1hcmtlZAorCSAq IGFsbCBsZXZlbHMgYXMgImVuYWJsZWQuIiAgR28gYmFjayBub3cgYW5kIGRpc2FibGUgdGhlIG9u ZXMKKwkgKiB0aGF0IGFyZW4ndCBhY3R1YWxseSBwb3NzaWJsZS4KKwkgKi8KKwl3aGlsZSAobGV2 ZWwrKyA8PSBpbGtfd21fbWF4X2xldmVsKGRldl9wcml2KSkgeworCQlmb3JfZWFjaF9wbGFuZV9p ZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7CisJCQl3bSA9ICZjc3RhdGUtPndtLnNr bC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CisJCQl3bS0+d21bbGV2ZWxdLnBsYW5lX2VuID0g ZmFsc2U7CisJCQl3bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19iID0gMDsKKwkJCXdtLT53bVtsZXZl bF0ucGxhbmVfcmVzX2wgPSAwOwogCQl9CisJfQogCi0JCXN0YXJ0ICs9IHV2X3BsYW5lX2Jsb2Nr czsKKwkvKgorCSAqIEdvIGJhY2sgYW5kIGRpc2FibGUgdGhlIHRyYW5zaXRpb24gd2F0ZXJtYXJr IGlmIGl0IHR1cm5zIG91dCB3ZQorCSAqIGRvbid0IGhhdmUgZW5vdWdoIEREQiBibG9ja3MgZm9y IGl0LgorCSAqLworCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxfY3J0YywgcGxhbmVf aWQpIHsKKwkJd20gPSAmY3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxhbmVfaWRdOwor CQlpZiAod20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID4gdG90YWxbcGxhbmVfaWRdKQorCQkJd20t PnRyYW5zX3dtLnBsYW5lX2VuID0gZmFsc2U7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC00NzIwLDE3 ICs0NjU4LDE1IEBAIHNrbF9jb21wdXRlX3BsYW5lX3dtX3BhcmFtcyhjb25zdCBzdHJ1Y3QgaW50 ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNrbF9j b21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCi0J CQkJY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCi0JCQkJdWlu dDE2X3QgZGRiX2FsbG9jYXRpb24sCi0JCQkJaW50IGxldmVsLAotCQkJCWNvbnN0IHN0cnVjdCBz a2xfd21fcGFyYW1zICp3cCwKLQkJCQljb25zdCBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRf cHJldiwKLQkJCQlzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgLyogb3V0ICovKQorc3RhdGlj IHZvaWQgc2tsX2NvbXB1dGVfcGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSwKKwkJCQkgY29uc3Qgc3RydWN0IGludGVsX3BsYW5lX3N0YXRlICppbnRlbF9wc3Rh dGUsCisJCQkJIGludCBsZXZlbCwKKwkJCQkgY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndw LAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHRfcHJldiwKKwkJCQkgc3Ry dWN0IHNrbF93bV9sZXZlbCAqcmVzdWx0IC8qIG91dCAqLykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPQogCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFuZS0+ ZGV2KTsKLQljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwc3RhdGUgPSAmaW50ZWxfcHN0 YXRlLT5iYXNlOwogCXVpbnQzMl90IGxhdGVuY3kgPSBkZXZfcHJpdi0+d20uc2tsX2xhdGVuY3lb bGV2ZWxdOwogCXVpbnRfZml4ZWRfMTZfMTZfdCBtZXRob2QxLCBtZXRob2QyOwogCXVpbnRfZml4 ZWRfMTZfMTZfdCBzZWxlY3RlZF9yZXN1bHQ7CkBAIC00NzQwLDkgKzQ2NzYsNiBAQCBzdGF0aWMg aW50IHNrbF9jb21wdXRlX3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj c3RhdGUsCiAJYm9vbCBhcHBseV9tZW1vcnlfYndfd2EgPSBza2xfbmVlZHNfbWVtb3J5X2J3X3dh KHN0YXRlKTsKIAl1aW50MzJfdCBtaW5fZGlzcF9idWZfbmVlZGVkOwogCi0JaWYgKGxhdGVuY3kg PT0gMCkKLQkJcmV0dXJuIGxldmVsID09IDAgPyAtRUlOVkFMIDogMDsKLQogCS8qIERpc3BsYXkg V0EgIzExNDE6IGtibCxjZmwgKi8KIAlpZiAoKElTX0tBQllMQUtFKGRldl9wcml2KSB8fCBJU19D T0ZGRUVMQUtFKGRldl9wcml2KSB8fAogCSAgICBJU19DTkxfUkVWSUQoZGV2X3ByaXYsIENOTF9S RVZJRF9BMCwgQ05MX1JFVklEX0IwKSkgJiYKQEAgLTQ4MjgsMzggKzQ3NjEsMjQgQEAgc3RhdGlj IGludCBza2xfY29tcHV0ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAq Y3N0YXRlLAogCQltaW5fZGlzcF9idWZfbmVlZGVkID0gcmVzX2Jsb2NrczsKIAl9CiAKLQlpZiAo KGxldmVsID4gMCAmJiByZXNfbGluZXMgPiAzMSkgfHwKLQkgICAgcmVzX2Jsb2NrcyA+PSBkZGJf YWxsb2NhdGlvbiB8fAotCSAgICBtaW5fZGlzcF9idWZfbmVlZGVkID49IGRkYl9hbGxvY2F0aW9u KSB7Ci0JCS8qCi0JCSAqIElmIHRoZXJlIGFyZSBubyB2YWxpZCBsZXZlbCAwIHdhdGVybWFya3Ms IHRoZW4gd2UgY2FuJ3QKLQkJICogc3VwcG9ydCB0aGlzIGRpc3BsYXkgY29uZmlndXJhdGlvbi4K LQkJICovCi0JCWlmIChsZXZlbCkgewotCQkJcmV0dXJuIDA7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHBzdGF0ZS0+cGxhbmU7Ci0KLQkJCURSTV9ERUJVR19LTVMo IlJlcXVlc3RlZCBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gZXhjZWVkcyBzeXN0ZW0gd2F0ZXJtYXJr IGxpbWl0YXRpb25zXG4iKTsKLQkJCURSTV9ERUJVR19LTVMoIltQTEFORTolZDolc10gYmxvY2tz IHJlcXVpcmVkID0gJXUvJXUsIGxpbmVzIHJlcXVpcmVkID0gJXUvMzFcbiIsCi0JCQkJICAgICAg cGxhbmUtPmJhc2UuaWQsIHBsYW5lLT5uYW1lLAotCQkJCSAgICAgIHJlc19ibG9ja3MsIGRkYl9h bGxvY2F0aW9uLCByZXNfbGluZXMpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQl9Ci0KIAkv KiBUaGUgbnVtYmVyIG9mIGxpbmVzIGFyZSBpZ25vcmVkIGZvciB0aGUgbGV2ZWwgMCB3YXRlcm1h cmsuICovCisJaWYgKGxldmVsID4gMCAmJiByZXNfbGluZXMgPiAzMSkKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBJZiByZXNfbGluZXMgaXMgdmFsaWQsIGFzc3VtZSB3ZSBjYW4gdXNlIHRoaXMgd2F0 ZXJtYXJrIGxldmVsCisJICogZm9yIG5vdy4gIFdlJ2xsIGNvbWUgYmFjayBhbmQgZGlzYWJsZSBp dCBhZnRlciB3ZSBjYWxjdWxhdGUgdGhlCisJICogRERCIGFsbG9jYXRpb24gaWYgaXQgdHVybnMg b3V0IHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgZW5vdWdoCisJICogYmxvY2tzIHRvIHNhdGlzZnkg aXQuCisJICovCiAJcmVzdWx0LT5wbGFuZV9yZXNfYiA9IHJlc19ibG9ja3M7CiAJcmVzdWx0LT5w bGFuZV9yZXNfbCA9IHJlc19saW5lczsKIAlyZXN1bHQtPnBsYW5lX2VuID0gdHJ1ZTsKLQotCXJl dHVybiAwOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogc2tsX2NvbXB1dGVfd21fbGV2 ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJCSAgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcHN0YXRlLAotCQkgICAgICB1aW50MTZf dCBkZGJfYmxvY2tzLAogCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd21fcGFy YW1zLAogCQkgICAgICBzdHJ1Y3Qgc2tsX3dtX2xldmVsICpsZXZlbHMpCiB7CkBAIC00ODY3LDI1 ICs0Nzg2LDE1IEBAIHNrbF9jb21wdXRlX3dtX2xldmVscyhjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0 Y19zdGF0ZSAqY3N0YXRlLAogCQl0b19pOTE1KGludGVsX3BzdGF0ZS0+YmFzZS5wbGFuZS0+ZGV2 KTsKIAlpbnQgbGV2ZWwsIG1heF9sZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2X3ByaXYpOwog CXN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2ID0gJmxldmVsc1swXTsKLQlpbnQgcmV0 OwogCiAJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9IG1heF9sZXZlbDsgbGV2ZWwrKykgewogCQlz dHJ1Y3Qgc2tsX3dtX2xldmVsICpyZXN1bHQgPSAmbGV2ZWxzW2xldmVsXTsKIAotCQlyZXQgPSBz a2xfY29tcHV0ZV9wbGFuZV93bShjc3RhdGUsCi0JCQkJCSAgIGludGVsX3BzdGF0ZSwKLQkJCQkJ ICAgZGRiX2Jsb2NrcywKLQkJCQkJICAgbGV2ZWwsCi0JCQkJCSAgIHdtX3BhcmFtcywKLQkJCQkJ ICAgcmVzdWx0X3ByZXYsCi0JCQkJCSAgIHJlc3VsdCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4g cmV0OworCQlza2xfY29tcHV0ZV9wbGFuZV93bShjc3RhdGUsIGludGVsX3BzdGF0ZSwgbGV2ZWws IHdtX3BhcmFtcywKKwkJCQkgICAgIHJlc3VsdF9wcmV2LCByZXN1bHQpOwogCiAJCXJlc3VsdF9w cmV2ID0gcmVzdWx0OwogCX0KLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdWludDMyX3QKQEAg LTQ5MTMsOCArNDgyMiw3IEBAIHNrbF9jb21wdXRlX2xpbmV0aW1lX3dtKGNvbnN0IHN0cnVjdCBp bnRlbF9jcnRjX3N0YXRlICpjc3RhdGUpCiAKIHN0YXRpYyB2b2lkIHNrbF9jb21wdXRlX3RyYW5z aXRpb25fd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJCQkgICAg ICBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCi0JCQkJICAgICAgc3RydWN0IHNrbF9w bGFuZV93bSAqd20sCi0JCQkJICAgICAgdWludDE2X3QgZGRiX2FsbG9jYXRpb24pCisJCQkJICAg ICAgc3RydWN0IHNrbF9wbGFuZV93bSAqd20pCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IGNzdGF0ZS0+YmFzZS5jcnRjLT5kZXY7CiAJY29uc3Qgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gdG9faTkxNShkZXYpOwpAQCAtNDk2MiwzNCArNDg3MCwzOCBAQCBzdGF0aWMg dm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpjc3RhdGUsCiAKIAl9CiAKLQlyZXNfYmxvY2tzICs9IDE7Ci0KLQlpZiAocmVzX2Jsb2Nr cyA8IGRkYl9hbGxvY2F0aW9uKSB7Ci0JCXdtLT50cmFuc193bS5wbGFuZV9yZXNfYiA9IHJlc19i bG9ja3M7Ci0JCXdtLT50cmFuc193bS5wbGFuZV9lbiA9IHRydWU7Ci0JfQorCS8qCisJICogSnVz dCBhc3N1bWUgd2UgY2FuIGVuYWJsZSB0aGUgdHJhbnNpdGlvbiB3YXRlcm1hcmsuICBBZnRlcgor CSAqIGNvbXB1dGluZyB0aGUgRERCIHdlJ2xsIGNvbWUgYmFjayBhbmQgZGlzYWJsZSBpdCBpZiB0 aGF0CisJICogYXNzdW1wdGlvbiB0dXJucyBvdXQgdG8gYmUgZmFsc2UuCisJICovCisJd20tPnRy YW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrcyArIDE7CisJd20tPnRyYW5zX3dtLnBsYW5l X2VuID0gdHJ1ZTsKIH0KIAogc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fc2luZ2xlKHN0 cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCQkJCSAgICAgY29uc3Qgc3RydWN0 IGludGVsX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKIAkJCQkgICAgIGVudW0gcGxhbmVfaWQg cGxhbmVfaWQsIGludCBjb2xvcl9wbGFuZSkKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGNfc3RhdGUtPmJhc2UuY3J0Yy0+ZGV2KTsKIAlzdHJ1Y3Qg c2tsX3BsYW5lX3dtICp3bSA9ICZjcnRjX3N0YXRlLT53bS5za2wub3B0aW1hbC5wbGFuZXNbcGxh bmVfaWRdOwotCXUxNiBkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZjcnRjX3N0YXRl LT53bS5za2wucGxhbmVfZGRiX3lbcGxhbmVfaWRdKTsKIAlzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3 bV9wYXJhbXM7CiAJaW50IHJldDsKIAorCS8qCisJICogVGhpcyBjYW4gb25seSBoYXBwZW4gaWYg c29tZW9uZSBvdmVycmlkZXMgdGhlIGxhdGVuY3kgdG8gYW4gaW52YWxpZAorCSAqIHZhbHVlIG9m IDAgaW4gZGVidWdmcy4KKwkgKi8KKwlpZiAoZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5WzBdID09 IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0ID0gc2tsX2NvbXB1dGVfcGxhbmVfd21fcGFy YW1zKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLAogCQkJCQkgICZ3bV9wYXJhbXMsIGNvbG9yX3Bs YW5lKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc2tsX2NvbXB1dGVfd21f bGV2ZWxzKGNydGNfc3RhdGUsIHBsYW5lX3N0YXRlLAotCQkJCSAgICBkZGJfYmxvY2tzLCAmd21f cGFyYW1zLCB3bS0+d20pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlza2xfY29tcHV0 ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLCBkZGJfYmxvY2tzKTsK Kwlza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZ3bV9wYXJh bXMsIHdtLT53bSk7CisJc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjcnRjX3N0YXRlLCAmd21f cGFyYW1zLCB3bSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OTksNyArNDkxMSw2IEBAIHN0YXRp YyBpbnQgc2tsX2J1aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAogCQkJCSBlbnVtIHBsYW5lX2lkIHBsYW5lX2lkKQogewogCXN0cnVjdCBza2xfcGxh bmVfd20gKndtID0gJmNydGNfc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07 Ci0JdTE2IGRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNr bC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdKTsKIAlzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyB3bV9wYXJh bXM7CiAJaW50IHJldDsKIApAQCAtNTAxMSwxMCArNDkyMiw3IEBAIHN0YXRpYyBpbnQgc2tsX2J1 aWxkX3BsYW5lX3dtX3V2KHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAogCWlm IChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0 Y19zdGF0ZSwgcGxhbmVfc3RhdGUsCi0JCQkJICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdt LT51dl93bSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlza2xfY29tcHV0ZV93bV9sZXZl bHMoY3J0Y19zdGF0ZSwgcGxhbmVfc3RhdGUsICZ3bV9wYXJhbXMsIHdtLT51dl93bSk7CiAKIAly ZXR1cm4gMDsKIH0KQEAgLTU1MzIsMTMgKzU0NDAsOSBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJaWYgKHJldCB8fCAhY2hhbmdlZCkKIAkJcmV0dXJu IHJldDsKIAotCXJldCA9IHNrbF9jb21wdXRlX2RkYihzdGF0ZSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQogCS8qCiAJICogQ2FsY3VsYXRlIFdNJ3MgZm9yIGFsbCBwaXBlcyB0aGF0IGFy ZSBwYXJ0IG9mIHRoaXMgdHJhbnNhY3Rpb24uCi0JICogTm90ZSB0aGF0IHRoZSBEREIgYWxsb2Nh dGlvbiBhYm92ZSBtYXkgaGF2ZSBhZGRlZCBtb3JlIENSVEMncyB0aGF0CisJICogTm90ZSB0aGF0 IHNrbF9kZGJfYWRkX2FmZmVjdGVkX3BpcGVzIG1heSBoYXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRo YXQKIAkgKiB3ZXJlbid0IG90aGVyd2lzZSBiZWluZyBtb2RpZmllZCAoYW5kIHNldCBiaXRzIGlu IGRpcnR5X3BpcGVzKSBpZgogCSAqIHBpcGUgYWxsb2NhdGlvbnMgaGFkIHRvIGNoYW5nZS4KIAkg Ki8KQEAgLTU1NjgsNiArNTQ3MiwxMCBAQCBza2xfY29tcHV0ZV93bShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpCiAJCWludGVsX2NzdGF0ZS0+dXBkYXRlX3dtX3ByZSA9IHRydWU7CiAJ fQogCisJcmV0ID0gc2tsX2NvbXB1dGVfZGRiKHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCiAJc2tsX3ByaW50X3dtX2NoYW5nZXMoaW50ZWxfc3RhdGUpOwogCiAJcmV0dXJuIDA7 Ci0tIAoyLjE0LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=