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 Date: Thu, 6 Dec 2018 09:09:44 -0800 Message-ID: <20181206170944.16539-4-matthew.d.roper@intel.com> References: <20181206170944.16539-1-matthew.d.roper@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4A0556E624 for ; Thu, 6 Dec 2018 17:10:34 +0000 (UTC) In-Reply-To: <20181206170944.16539-1-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 LgoKQnVnemlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lk PTEwNTQ1OApTaWduZWQtb2ZmLWJ5OiBNYXR0IFJvcGVyIDxtYXR0aGV3LmQucm9wZXJAaW50ZWwu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMgfCAzNDUgKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyMSBpbnNl cnRpb25zKCspLCAyMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BtLmMKaW5kZXgg YjA5YzJhMjU3ZmYxLi42YzYwYTY2OGMzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3BtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYwpAQCAt NDMwNiwxMDIgKzQzMDYsNiBAQCBpY2xfZ2V0X3RvdGFsX3JlbGF0aXZlX2RhdGFfcmF0ZShzdHJ1 Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqaW50ZWxfY3N0YXRlLAogCXJldHVybiB0b3RhbF9kYXRhX3Jh dGU7CiB9CiAKLXN0YXRpYyB1aW50MTZfdAotc2tsX2RkYl9taW5fYWxsb2MoY29uc3Qgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlLCBjb25zdCBpbnQgcGxhbmUpCi17Ci0Jc3RydWN0IGRy bV9mcmFtZWJ1ZmZlciAqZmIgPSBwc3RhdGUtPmZiOwotCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0 ZSAqaW50ZWxfcHN0YXRlID0gdG9faW50ZWxfcGxhbmVfc3RhdGUocHN0YXRlKTsKLQl1aW50MzJf dCBzcmNfdywgc3JjX2g7Ci0JdWludDMyX3QgbWluX3NjYW5saW5lcyA9IDg7Ci0JdWludDhfdCBw bGFuZV9icHA7Ci0KLQlpZiAoV0FSTl9PTighZmIpKQotCQlyZXR1cm4gMDsKLQotCS8qIEZvciBw YWNrZWQgZm9ybWF0cywgYW5kIHV2LXBsYW5lLCByZXR1cm4gMCAqLwotCWlmIChwbGFuZSA9PSAx ICYmIGZiLT5mb3JtYXQtPmZvcm1hdCAhPSBEUk1fRk9STUFUX05WMTIpCi0JCXJldHVybiAwOwot Ci0JLyogRm9yIE5vbiBZLXRpbGUgcmV0dXJuIDgtYmxvY2tzICovCi0JaWYgKGZiLT5tb2RpZmll ciAhPSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCAmJgotCSAgICBmYi0+bW9kaWZpZXIgIT0gSTkx NV9GT1JNQVRfTU9EX1lmX1RJTEVEICYmCi0JICAgIGZiLT5tb2RpZmllciAhPSBJOTE1X0ZPUk1B VF9NT0RfWV9USUxFRF9DQ1MgJiYKLQkgICAgZmItPm1vZGlmaWVyICE9IEk5MTVfRk9STUFUX01P RF9ZZl9USUxFRF9DQ1MpCi0JCXJldHVybiA4OwotCi0JLyoKLQkgKiBTcmMgY29vcmRpbmF0ZXMg YXJlIGFscmVhZHkgcm90YXRlZCBieSAyNzAgZGVncmVlcyBmb3IKLQkgKiB0aGUgOTAvMjcwIGRl Z3JlZSBwbGFuZSByb3RhdGlvbiBjYXNlcyAodG8gbWF0Y2ggdGhlCi0JICogR1RUIG1hcHBpbmcp LCBoZW5jZSBubyBuZWVkIHRvIGFjY291bnQgZm9yIHJvdGF0aW9uIGhlcmUuCi0JICovCi0Jc3Jj X3cgPSBkcm1fcmVjdF93aWR0aCgmaW50ZWxfcHN0YXRlLT5iYXNlLnNyYykgPj4gMTY7Ci0Jc3Jj X2ggPSBkcm1fcmVjdF9oZWlnaHQoJmludGVsX3BzdGF0ZS0+YmFzZS5zcmMpID4+IDE2OwotCi0J LyogSGFsdmUgVVYgcGxhbmUgd2lkdGggYW5kIGhlaWdodCBmb3IgTlYxMiAqLwotCWlmIChwbGFu ZSA9PSAxKSB7Ci0JCXNyY193IC89IDI7Ci0JCXNyY19oIC89IDI7Ci0JfQotCi0JcGxhbmVfYnBw ID0gZmItPmZvcm1hdC0+Y3BwW3BsYW5lXTsKLQotCWlmIChkcm1fcm90YXRpb25fOTBfb3JfMjcw KHBzdGF0ZS0+cm90YXRpb24pKSB7Ci0JCXN3aXRjaCAocGxhbmVfYnBwKSB7Ci0JCWNhc2UgMToK LQkJCW1pbl9zY2FubGluZXMgPSAzMjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQltaW5fc2Nh bmxpbmVzID0gMTY7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJbWluX3NjYW5saW5lcyA9IDg7 Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJbWluX3NjYW5saW5lcyA9IDQ7Ci0JCQlicmVhazsK LQkJZGVmYXVsdDoKLQkJCVdBUk4oMSwgIlVuc3VwcG9ydGVkIHBpeGVsIGRlcHRoICV1IGZvciBy b3RhdGlvbiIsCi0JCQkgICAgIHBsYW5lX2JwcCk7Ci0JCQltaW5fc2NhbmxpbmVzID0gMzI7Ci0J CX0KLQl9Ci0KLQlyZXR1cm4gRElWX1JPVU5EX1VQKCg0ICogc3JjX3cgKiBwbGFuZV9icHApLCA1 MTIpICogbWluX3NjYW5saW5lcy80ICsgMzsKLX0KLQotc3RhdGljIHZvaWQKLXNrbF9kZGJfY2Fs Y19taW4oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwgaW50IG51bV9hY3Rp dmUsCi0JCSB1aW50MTZfdCAqbWluaW11bSwgdWludDE2X3QgKnV2X21pbmltdW0pCi17Ci0JY29u c3Qgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcHN0YXRlOwotCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lOwotCi0JZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lX3N0YXRlKHBsYW5l LCBwc3RhdGUsICZjc3RhdGUtPmJhc2UpIHsKLQkJZW51bSBwbGFuZV9pZCBwbGFuZV9pZCA9IHRv X2ludGVsX3BsYW5lKHBsYW5lKS0+aWQ7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqcGxh bmVfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShwc3RhdGUpOwotCi0JCWlmIChwbGFuZV9p ZCA9PSBQTEFORV9DVVJTT1IpCi0JCQljb250aW51ZTsKLQotCQkvKiBzbGF2ZSBwbGFuZSBtdXN0 IGJlIGludmlzaWJsZSBhbmQgY2FsY3VsYXRlZCBmcm9tIG1hc3RlciAqLwotCQlpZiAoIXBzdGF0 ZS0+dmlzaWJsZSB8fCBXQVJOX09OKHBsYW5lX3N0YXRlLT5zbGF2ZSkpCi0JCQljb250aW51ZTsK LQotCQlpZiAoIXBsYW5lX3N0YXRlLT5saW5rZWRfcGxhbmUpIHsKLQkJCW1pbmltdW1bcGxhbmVf aWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRlLCAwKTsKLQkJCXV2X21pbmltdW1bcGxhbmVf aWRdID0gc2tsX2RkYl9taW5fYWxsb2MocHN0YXRlLCAxKTsKLQkJfSBlbHNlIHsKLQkJCWVudW0g cGxhbmVfaWQgeV9wbGFuZV9pZCA9Ci0JCQkJcGxhbmVfc3RhdGUtPmxpbmtlZF9wbGFuZS0+aWQ7 Ci0KLQkJCW1pbmltdW1beV9wbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3RhdGUsIDAp OwotCQkJbWluaW11bVtwbGFuZV9pZF0gPSBza2xfZGRiX21pbl9hbGxvYyhwc3RhdGUsIDEpOwot CQl9Ci0JfQotCi0JbWluaW11bVtQTEFORV9DVVJTT1JdID0gc2tsX2N1cnNvcl9hbGxvY2F0aW9u KG51bV9hY3RpdmUpOwotfQotCiBzdGF0aWMgaW50CiBza2xfYWxsb2NhdGVfcGlwZV9kZGIoc3Ry dWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJICAgICAgc3RydWN0IHNrbF9kZGJfYWxs b2NhdGlvbiAqZGRiIC8qIG91dCAqLykKQEAgLTQ0MTEsMTUgKzQzMTUsMTggQEAgc2tsX2FsbG9j YXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5kZXYpOwogCXN0cnVjdCBp bnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKIAlzdHJ1Y3Qgc2ts X2RkYl9lbnRyeSAqYWxsb2MgPSAmY3N0YXRlLT53bS5za2wuZGRiOwotCXVpbnQxNl90IGFsbG9j X3NpemUsIHN0YXJ0OwotCXVpbnQxNl90IG1pbmltdW1bSTkxNV9NQVhfUExBTkVTXSA9IHt9Owot CXVpbnQxNl90IHV2X21pbmltdW1bSTkxNV9NQVhfUExBTkVTXSA9IHt9OworCXN0cnVjdCBza2xf ZGRiX2VudHJ5ICpwbGFuZV9hbGxvYywgKnV2X3BsYW5lX2FsbG9jOworCXN0cnVjdCBza2xfcGxh bmVfd20gKndtOworCXVpbnQxNl90IGFsbG9jX3NpemUsIHN0YXJ0ID0gMDsKKwl1aW50MTZfdCB0 b3RhbFtJOTE1X01BWF9QTEFORVNdID0ge307CisJdWludDE2X3QgdXZfdG90YWxbSTkxNV9NQVhf UExBTkVTXSA9IHt9OwogCXU2NCB0b3RhbF9kYXRhX3JhdGU7CiAJZW51bSBwbGFuZV9pZCBwbGFu ZV9pZDsKIAlpbnQgbnVtX2FjdGl2ZTsKIAl1NjQgcGxhbmVfZGF0YV9yYXRlW0k5MTVfTUFYX1BM QU5FU10gPSB7fTsKIAl1NjQgdXZfcGxhbmVfZGF0YV9yYXRlW0k5MTVfTUFYX1BMQU5FU10gPSB7 fTsKLQl1aW50MTZfdCB0b3RhbF9taW5fYmxvY2tzID0gMDsKKwl1aW50MTZfdCBibG9ja3MgPSAw OworCWludCBsZXZlbDsKIAogCS8qIENsZWFyIHRoZSBwYXJ0aXRpb25pbmcgZm9yIGRpc2FibGVk IHBsYW5lcy4gKi8KIAltZW1zZXQoY3N0YXRlLT53bS5za2wucGxhbmVfZGRiX3ksIDAsIHNpemVv Zihjc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJfeSkpOwpAQCAtNDQ0OSw4MSArNDM1NiwxMDAgQEAg c2tsX2FsbG9jYXRlX3BpcGVfZGRiKHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJ aWYgKGFsbG9jX3NpemUgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlza2xfZGRiX2NhbGNfbWluKGNz dGF0ZSwgbnVtX2FjdGl2ZSwgbWluaW11bSwgdXZfbWluaW11bSk7CisJLyogQWxsb2NhdGUgZml4 ZWQgbnVtYmVyIG9mIGJsb2NrcyBmb3IgY3Vyc29yLiAqLworCXRvdGFsW1BMQU5FX0NVUlNPUl0g PSBza2xfY3Vyc29yX2FsbG9jYXRpb24obnVtX2FjdGl2ZSk7CisJYWxsb2Nfc2l6ZSAtPSB0b3Rh bFtQTEFORV9DVVJTT1JdOwogCiAJLyoKLQkgKiAxLiBBbGxvY2F0ZSB0aGUgbWluaW51bSByZXF1 aXJlZCBibG9ja3MgZm9yIGVhY2ggYWN0aXZlIHBsYW5lCi0JICogYW5kIGFsbG9jYXRlIHRoZSBj dXJzb3IsIGl0IGRvZXNuJ3QgcmVxdWlyZSBleHRyYSBhbGxvY2F0aW9uCi0JICogcHJvcG9ydGlv bmFsIHRvIHRoZSBkYXRhIHJhdGUuCisJICogRmluZCB0aGUgaGlnaGVzdCB3YXRlcm1hcmsgbGV2 ZWwgZm9yIHdoaWNoIHdlIGNhbiBzYXRpc2Z5IHRoZSBibG9jaworCSAqIHJlcXVpcmVtZW50IG9m IGFjdGl2ZSBwbGFuZXMuCiAJICovCisJZm9yIChsZXZlbCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2 X3ByaXYpIC0gMTsgbGV2ZWwgPj0gMDsgbGV2ZWwtLSkgeworCQlmb3JfZWFjaF9wbGFuZV9pZF9v bl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7CisJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5v cHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CisJCQlibG9ja3MgKz0gd20tPndtW2xldmVsXS5wbGFu ZV9yZXNfYjsKKwkJCWJsb2NrcyArPSB3bS0+dXZfd21bbGV2ZWxdLnBsYW5lX3Jlc19iOworCQl9 CiAKLQlmb3JfZWFjaF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7Ci0J CXRvdGFsX21pbl9ibG9ja3MgKz0gbWluaW11bVtwbGFuZV9pZF07Ci0JCXRvdGFsX21pbl9ibG9j a3MgKz0gdXZfbWluaW11bVtwbGFuZV9pZF07CisJCWlmIChibG9ja3MgPCBhbGxvY19zaXplKSB7 CisJCQlhbGxvY19zaXplIC09IGJsb2NrczsKKwkJCWJyZWFrOworCQl9CiAJfQogCi0JaWYgKHRv dGFsX21pbl9ibG9ja3MgPiBhbGxvY19zaXplKSB7CisJaWYgKGxldmVsIDwgMCkgewogCQlEUk1f REVCVUdfS01TKCJSZXF1ZXN0ZWQgZGlzcGxheSBjb25maWd1cmF0aW9uIGV4Y2VlZHMgc3lzdGVt IEREQiBsaW1pdGF0aW9ucyIpOwotCQlEUk1fREVCVUdfS01TKCJtaW5pbXVtIHJlcXVpcmVkICVk LyVkXG4iLCB0b3RhbF9taW5fYmxvY2tzLAotCQkJCQkJCWFsbG9jX3NpemUpOworCQlEUk1fREVC VUdfS01TKCJtaW5pbXVtIHJlcXVpcmVkICVkLyVkXG4iLCBibG9ja3MsCisJCQkgICAgICBhbGxv Y19zaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWxsb2Nfc2l6ZSAtPSB0b3RhbF9t aW5fYmxvY2tzOwotCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uc3Rh cnQgPSBhbGxvYy0+ZW5kIC0gbWluaW11bVtQTEFORV9DVVJTT1JdOwotCWNzdGF0ZS0+d20uc2ts LnBsYW5lX2RkYl95W1BMQU5FX0NVUlNPUl0uZW5kID0gYWxsb2MtPmVuZDsKLQogCS8qCi0JICog Mi4gRGlzdHJpYnV0ZSB0aGUgcmVtYWluaW5nIHNwYWNlIGluIHByb3BvcnRpb24gdG8gdGhlIGFt b3VudCBvZgotCSAqIGRhdGEgZWFjaCBwbGFuZSBuZWVkcyB0byBmZXRjaCBmcm9tIG1lbW9yeS4K LQkgKgotCSAqIEZJWE1FOiB3ZSBtYXkgbm90IGFsbG9jYXRlIGV2ZXJ5IHNpbmdsZSBibG9jayBo ZXJlLgorCSAqIElmIGFueSBub24tY3Vyc29yIHBsYW5lcyBhcmUgdHVybmVkIG9uIChpLmUuLCB0 b3RhbF9kYXRhX3JhdGUgIT0gMCksCisJICogZ3JhbnQgZWFjaCBwbGFuZSB0aGUgYmxvY2tzIGl0 IHJlcXVpcmVzIGF0IHRoZSBoaWdoZXN0IGFjaGlldmFibGUKKwkgKiB3YXRlcm1hcmsgbGV2ZWws IHBsdXMgYW4gZXh0cmEgc2hhcmUgb2YgdGhlIGxlZnRvdmVyIGJsb2NrcworCSAqIHByb3BvcnRp b25hbCB0byBpdHMgcmVsYXRpdmUgZGF0YSByYXRlLgogCSAqLwotCWlmICh0b3RhbF9kYXRhX3Jh dGUgPT0gMCkKLQkJcmV0dXJuIDA7CisJaWYgKHRvdGFsX2RhdGFfcmF0ZSkgeworCQlmb3JfZWFj aF9wbGFuZV9pZF9vbl9jcnRjKGludGVsX2NydGMsIHBsYW5lX2lkKSB7CisJCQl1NjQgcmF0ZTsK IAotCXN0YXJ0ID0gYWxsb2MtPnN0YXJ0OwotCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50 ZWxfY3J0YywgcGxhbmVfaWQpIHsKLQkJdTY0IGRhdGFfcmF0ZSwgdXZfZGF0YV9yYXRlOwotCQl1 aW50MTZfdCBwbGFuZV9ibG9ja3MsIHV2X3BsYW5lX2Jsb2NrczsKLQotCQlpZiAocGxhbmVfaWQg PT0gUExBTkVfQ1VSU09SKQotCQkJY29udGludWU7CisJCQl3bSA9ICZjc3RhdGUtPndtLnNrbC5v cHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CiAKLQkJZGF0YV9yYXRlID0gcGxhbmVfZGF0YV9yYXRl W3BsYW5lX2lkXTsKKwkJCXJhdGUgPSBwbGFuZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQkJdG90 YWxbcGxhbmVfaWRdID0gd20tPndtW2xldmVsXS5wbGFuZV9yZXNfYiArCisJCQkJZGl2NjRfdTY0 KGFsbG9jX3NpemUgKiByYXRlLCB0b3RhbF9kYXRhX3JhdGUpOwogCi0JCS8qCi0JCSAqIGFsbG9j YXRpb24gZm9yIChwYWNrZWQgZm9ybWF0cykgb3IgKHV2LXBsYW5lIHBhcnQgb2YgcGxhbmFyIGZv cm1hdCk6Ci0JCSAqIHByb21vdGUgdGhlIGV4cHJlc3Npb24gdG8gNjQgYml0cyB0byBhdm9pZCBv dmVyZmxvd2luZywgdGhlCi0JCSAqIHJlc3VsdCBpcyA8IGF2YWlsYWJsZSBhcyBkYXRhX3JhdGUg LyB0b3RhbF9kYXRhX3JhdGUgPCAxCi0JCSAqLwotCQlwbGFuZV9ibG9ja3MgPSBtaW5pbXVtW3Bs YW5lX2lkXTsKLQkJcGxhbmVfYmxvY2tzICs9IGRpdjY0X3U2NChhbGxvY19zaXplICogZGF0YV9y YXRlLCB0b3RhbF9kYXRhX3JhdGUpOwotCi0JCS8qIExlYXZlIGRpc2FibGVkIHBsYW5lcyBhdCAo MCwwKSAqLwotCQlpZiAoZGF0YV9yYXRlKSB7Ci0JCQljc3RhdGUtPndtLnNrbC5wbGFuZV9kZGJf eVtwbGFuZV9pZF0uc3RhcnQgPSBzdGFydDsKLQkJCWNzdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl95 W3BsYW5lX2lkXS5lbmQgPSBzdGFydCArIHBsYW5lX2Jsb2NrczsKKwkJCXJhdGUgPSB1dl9wbGFu ZV9kYXRhX3JhdGVbcGxhbmVfaWRdOworCQkJdXZfdG90YWxbcGxhbmVfaWRdID0gd20tPnV2X3dt W2xldmVsXS5wbGFuZV9yZXNfYiArCisJCQkJZGl2NjRfdTY0KGFsbG9jX3NpemUgKiByYXRlLCB0 b3RhbF9kYXRhX3JhdGUpOwogCQl9CisJfQogCi0JCXN0YXJ0ICs9IHBsYW5lX2Jsb2NrczsKKwkv KiBTZXQgdGhlIGFjdHVhbCBEREIgc3RhcnQvZW5kIHBvaW50cyBmb3IgZWFjaCBwbGFuZSAqLwor CXN0YXJ0ID0gYWxsb2MtPnN0YXJ0OworCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxf Y3J0YywgcGxhbmVfaWQpIHsKKwkJcGxhbmVfYWxsb2MgPSAmY3N0YXRlLT53bS5za2wucGxhbmVf ZGRiX3lbcGxhbmVfaWRdOworCQl1dl9wbGFuZV9hbGxvYyA9ICZjc3RhdGUtPndtLnNrbC5wbGFu ZV9kZGJfdXZbcGxhbmVfaWRdOwogCi0JCS8qIEFsbG9jYXRlIEREQiBmb3IgVVYgcGxhbmUgZm9y IHBsYW5hciBmb3JtYXQvTlYxMiAqLwotCQl1dl9kYXRhX3JhdGUgPSB1dl9wbGFuZV9kYXRhX3Jh dGVbcGxhbmVfaWRdOworCQkvKiBHZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3 YXRlcm1hcmtzICovCisJCVdBUk5fT04oSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiB1dl90 b3RhbFtwbGFuZV9pZF0pOwogCi0JCXV2X3BsYW5lX2Jsb2NrcyA9IHV2X21pbmltdW1bcGxhbmVf aWRdOwotCQl1dl9wbGFuZV9ibG9ja3MgKz0gZGl2NjRfdTY0KGFsbG9jX3NpemUgKiB1dl9kYXRh X3JhdGUsIHRvdGFsX2RhdGFfcmF0ZSk7CisJCS8qIExlYXZlIGRpc2FibGVkIHBsYW5lcyBhdCAo MCwwKSAqLworCQlpZiAodG90YWxbcGxhbmVfaWRdKSB7CisJCQlwbGFuZV9hbGxvYy0+c3RhcnQg PSBzdGFydDsKKwkJCXBsYW5lX2FsbG9jLT5lbmQgPSBzdGFydCArPSB0b3RhbFtwbGFuZV9pZF07 CisJCX0KIAotCQkvKiBHZW4xMSsgdXNlcyBhIHNlcGFyYXRlIHBsYW5lIGZvciBVViB3YXRlcm1h cmtzICovCi0JCVdBUk5fT04oSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSAmJiB1dl9wbGFuZV9i bG9ja3MpOworCQlpZiAodXZfdG90YWxbcGxhbmVfaWRdKSB7CisJCQl1dl9wbGFuZV9hbGxvYy0+ c3RhcnQgPSBzdGFydDsKKwkJCXV2X3BsYW5lX2FsbG9jLT5lbmQgPSBzdGFydCArIHV2X3RvdGFs W3BsYW5lX2lkXTsKKwkJfQorCX0KIAotCQlpZiAodXZfZGF0YV9yYXRlKSB7Ci0JCQljc3RhdGUt PndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdLnN0YXJ0ID0gc3RhcnQ7Ci0JCQljc3RhdGUt PndtLnNrbC5wbGFuZV9kZGJfdXZbcGxhbmVfaWRdLmVuZCA9Ci0JCQkJc3RhcnQgKyB1dl9wbGFu ZV9ibG9ja3M7CisJLyoKKwkgKiBXaGVuIHdlIGNhbGN1bGF0ZWQgd2F0ZXJtYXJrIHZhbHVlcyB3 ZSBkaWRuJ3Qga25vdyBob3cgaGlnaAorCSAqIG9mIGEgbGV2ZWwgd2UnZCBhY3R1YWxseSBiZSBh YmxlIHRvIGhpdCwgc28gd2UganVzdCBtYXJrZWQKKwkgKiBhbGwgbGV2ZWxzIGFzICJlbmFibGVk LiIgIEdvIGJhY2sgbm93IGFuZCBkaXNhYmxlIHRoZSBvbmVzCisJICogdGhhdCBhcmVuJ3QgYWN0 dWFsbHkgcG9zc2libGUuCisJICovCisJZm9yICggOyBsZXZlbCA8IGlsa193bV9tYXhfbGV2ZWwo ZGV2X3ByaXYpOyBsZXZlbCsrKSB7CisJCWZvcl9lYWNoX3BsYW5lX2lkX29uX2NydGMoaW50ZWxf Y3J0YywgcGxhbmVfaWQpIHsKKwkJCXdtID0gJmNzdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVz W3BsYW5lX2lkXTsKKwkJCXdtLT53bVtsZXZlbF0ucGxhbmVfZW4gPSBmYWxzZTsKKwkJCXdtLT53 bVtsZXZlbF0ucGxhbmVfcmVzX2IgPSAwOworCQkJd20tPndtW2xldmVsXS5wbGFuZV9yZXNfbCA9 IDA7CiAJCX0KKwl9CiAKLQkJc3RhcnQgKz0gdXZfcGxhbmVfYmxvY2tzOworCS8qCisJICogR28g YmFjayBhbmQgZGlzYWJsZSB0aGUgdHJhbnNpdGlvbiB3YXRlcm1hcmsgaWYgaXQgdHVybnMgb3V0 IHdlCisJICogZG9uJ3QgaGF2ZSBlbm91Z2ggRERCIGJsb2NrcyBmb3IgaXQuCisJICovCisJZm9y X2VhY2hfcGxhbmVfaWRfb25fY3J0YyhpbnRlbF9jcnRjLCBwbGFuZV9pZCkgeworCQl3bSA9ICZj c3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07CisJCWlmICh3bS0+dHJhbnNf d20ucGxhbmVfcmVzX2IgPiB0b3RhbFtwbGFuZV9pZF0pCisJCQl3bS0+dHJhbnNfd20ucGxhbmVf ZW4gPSBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQ3MjAsMTcgKzQ2NDYsMTUgQEAgc2ts X2NvbXB1dGVfcGxhbmVfd21fcGFyYW1zKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpj c3RhdGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2tsX2NvbXB1dGVfcGxhbmVfd20o Y29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKLQkJCQljb25zdCBzdHJ1Y3Qg aW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKLQkJCQl1aW50MTZfdCBkZGJfYWxsb2Nh dGlvbiwKLQkJCQlpbnQgbGV2ZWwsCi0JCQkJY29uc3Qgc3RydWN0IHNrbF93bV9wYXJhbXMgKndw LAotCQkJCWNvbnN0IHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAotCQkJCXN0cnVj dCBza2xfd21fbGV2ZWwgKnJlc3VsdCAvKiBvdXQgKi8pCitzdGF0aWMgdm9pZCBza2xfY29tcHV0 ZV9wbGFuZV93bShjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAorCQkJCSBj b25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3RhdGUgKmludGVsX3BzdGF0ZSwKKwkJCQkgaW50IGxl dmVsLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2tsX3dtX3BhcmFtcyAqd3AsCisJCQkJIGNvbnN0IHN0 cnVjdCBza2xfd21fbGV2ZWwgKnJlc3VsdF9wcmV2LAorCQkJCSBzdHJ1Y3Qgc2tsX3dtX2xldmVs ICpyZXN1bHQgLyogb3V0ICovKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9CiAJCXRvX2k5MTUoaW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwotCWNvbnN0IHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZSA9ICZpbnRlbF9wc3RhdGUtPmJhc2U7CiAJdWlu dDMyX3QgbGF0ZW5jeSA9IGRldl9wcml2LT53bS5za2xfbGF0ZW5jeVtsZXZlbF07CiAJdWludF9m aXhlZF8xNl8xNl90IG1ldGhvZDEsIG1ldGhvZDI7CiAJdWludF9maXhlZF8xNl8xNl90IHNlbGVj dGVkX3Jlc3VsdDsKQEAgLTQ3NDAsOSArNDY2NCw2IEBAIHN0YXRpYyBpbnQgc2tsX2NvbXB1dGVf cGxhbmVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAlib29sIGFw cGx5X21lbW9yeV9id193YSA9IHNrbF9uZWVkc19tZW1vcnlfYndfd2Eoc3RhdGUpOwogCXVpbnQz Ml90IG1pbl9kaXNwX2J1Zl9uZWVkZWQ7CiAKLQlpZiAobGF0ZW5jeSA9PSAwKQotCQlyZXR1cm4g bGV2ZWwgPT0gMCA/IC1FSU5WQUwgOiAwOwotCiAJLyogRGlzcGxheSBXQSAjMTE0MToga2JsLGNm bCAqLwogCWlmICgoSVNfS0FCWUxBS0UoZGV2X3ByaXYpIHx8IElTX0NPRkZFRUxBS0UoZGV2X3By aXYpIHx8CiAJICAgIElTX0NOTF9SRVZJRChkZXZfcHJpdiwgQ05MX1JFVklEX0EwLCBDTkxfUkVW SURfQjApKSAmJgpAQCAtNDgyOCwzOCArNDc0OSwyNCBAQCBzdGF0aWMgaW50IHNrbF9jb21wdXRl X3BsYW5lX3dtKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUsCiAJCW1pbl9k aXNwX2J1Zl9uZWVkZWQgPSByZXNfYmxvY2tzOwogCX0KIAotCWlmICgobGV2ZWwgPiAwICYmIHJl c19saW5lcyA+IDMxKSB8fAotCSAgICByZXNfYmxvY2tzID49IGRkYl9hbGxvY2F0aW9uIHx8Ci0J ICAgIG1pbl9kaXNwX2J1Zl9uZWVkZWQgPj0gZGRiX2FsbG9jYXRpb24pIHsKLQkJLyoKLQkJICog SWYgdGhlcmUgYXJlIG5vIHZhbGlkIGxldmVsIDAgd2F0ZXJtYXJrcywgdGhlbiB3ZSBjYW4ndAot CQkgKiBzdXBwb3J0IHRoaXMgZGlzcGxheSBjb25maWd1cmF0aW9uLgotCQkgKi8KLQkJaWYgKGxl dmVsKSB7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lID0gcHN0YXRlLT5wbGFuZTsKLQotCQkJRFJNX0RFQlVHX0tNUygiUmVxdWVzdGVkIGRpc3Bs YXkgY29uZmlndXJhdGlvbiBleGNlZWRzIHN5c3RlbSB3YXRlcm1hcmsgbGltaXRhdGlvbnNcbiIp OwotCQkJRFJNX0RFQlVHX0tNUygiW1BMQU5FOiVkOiVzXSBibG9ja3MgcmVxdWlyZWQgPSAldS8l dSwgbGluZXMgcmVxdWlyZWQgPSAldS8zMVxuIiwKLQkJCQkgICAgICBwbGFuZS0+YmFzZS5pZCwg cGxhbmUtPm5hbWUsCi0JCQkJICAgICAgcmVzX2Jsb2NrcywgZGRiX2FsbG9jYXRpb24sIHJlc19s aW5lcyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQogCS8qIFRoZSBudW1iZXIgb2Yg bGluZXMgYXJlIGlnbm9yZWQgZm9yIHRoZSBsZXZlbCAwIHdhdGVybWFyay4gKi8KKwlpZiAobGV2 ZWwgPiAwICYmIHJlc19saW5lcyA+IDMxKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIHJlc19s aW5lcyBpcyB2YWxpZCwgYXNzdW1lIHdlIGNhbiB1c2UgdGhpcyB3YXRlcm1hcmsgbGV2ZWwKKwkg KiBmb3Igbm93LiAgV2UnbGwgY29tZSBiYWNrIGFuZCBkaXNhYmxlIGl0IGFmdGVyIHdlIGNhbGN1 bGF0ZSB0aGUKKwkgKiBEREIgYWxsb2NhdGlvbiBpZiBpdCB0dXJucyBvdXQgd2UgZG9uJ3QgYWN0 dWFsbHkgaGF2ZSBlbm91Z2gKKwkgKiBibG9ja3MgdG8gc2F0aXNmeSBpdC4KKwkgKi8KIAlyZXN1 bHQtPnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKIAlyZXN1bHQtPnBsYW5lX3Jlc19sID0gcmVz X2xpbmVzOwogCXJlc3VsdC0+cGxhbmVfZW4gPSB0cnVlOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0 YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBza2xfY29tcHV0ZV93bV9sZXZlbHMoY29uc3Qgc3RydWN0 IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX3Bs YW5lX3N0YXRlICppbnRlbF9wc3RhdGUsCi0JCSAgICAgIHVpbnQxNl90IGRkYl9ibG9ja3MsCiAJ CSAgICAgIGNvbnN0IHN0cnVjdCBza2xfd21fcGFyYW1zICp3bV9wYXJhbXMsCiAJCSAgICAgIHN0 cnVjdCBza2xfd21fbGV2ZWwgKmxldmVscykKIHsKQEAgLTQ4NjcsMjUgKzQ3NzQsMTUgQEAgc2ts X2NvbXB1dGVfd21fbGV2ZWxzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjc3RhdGUs CiAJCXRvX2k5MTUoaW50ZWxfcHN0YXRlLT5iYXNlLnBsYW5lLT5kZXYpOwogCWludCBsZXZlbCwg bWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXZfcHJpdik7CiAJc3RydWN0IHNrbF93bV9s ZXZlbCAqcmVzdWx0X3ByZXYgPSAmbGV2ZWxzWzBdOwotCWludCByZXQ7CiAKIAlmb3IgKGxldmVs ID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7CiAJCXN0cnVjdCBza2xfd21fbGV2 ZWwgKnJlc3VsdCA9ICZsZXZlbHNbbGV2ZWxdOwogCi0JCXJldCA9IHNrbF9jb21wdXRlX3BsYW5l X3dtKGNzdGF0ZSwKLQkJCQkJICAgaW50ZWxfcHN0YXRlLAotCQkJCQkgICBkZGJfYmxvY2tzLAot CQkJCQkgICBsZXZlbCwKLQkJCQkJICAgd21fcGFyYW1zLAotCQkJCQkgICByZXN1bHRfcHJldiwK LQkJCQkJICAgcmVzdWx0KTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7CisJCXNrbF9jb21w dXRlX3BsYW5lX3dtKGNzdGF0ZSwgaW50ZWxfcHN0YXRlLCBsZXZlbCwgd21fcGFyYW1zLAorCQkJ CSAgICAgcmVzdWx0X3ByZXYsIHJlc3VsdCk7CiAKIAkJcmVzdWx0X3ByZXYgPSByZXN1bHQ7CiAJ fQotCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNDkxMyw4ICs0ODEwLDcg QEAgc2tsX2NvbXB1dGVfbGluZXRpbWVfd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg KmNzdGF0ZSkKIAogc3RhdGljIHZvaWQgc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3N0YXRlLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBz a2xfd21fcGFyYW1zICp3cCwKLQkJCQkgICAgICBzdHJ1Y3Qgc2tsX3BsYW5lX3dtICp3bSwKLQkJ CQkgICAgICB1aW50MTZfdCBkZGJfYWxsb2NhdGlvbikKKwkJCQkgICAgICBzdHJ1Y3Qgc2tsX3Bs YW5lX3dtICp3bSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3N0YXRlLT5iYXNlLmNy dGMtPmRldjsKIAljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7CkBAIC00OTYyLDM0ICs0ODU4LDM4IEBAIHN0YXRpYyB2b2lkIHNrbF9jb21wdXRl X3RyYW5zaXRpb25fd20oY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNzdGF0ZSwKIAog CX0KIAotCXJlc19ibG9ja3MgKz0gMTsKLQotCWlmIChyZXNfYmxvY2tzIDwgZGRiX2FsbG9jYXRp b24pIHsKLQkJd20tPnRyYW5zX3dtLnBsYW5lX3Jlc19iID0gcmVzX2Jsb2NrczsKLQkJd20tPnRy YW5zX3dtLnBsYW5lX2VuID0gdHJ1ZTsKLQl9CisJLyoKKwkgKiBKdXN0IGFzc3VtZSB3ZSBjYW4g ZW5hYmxlIHRoZSB0cmFuc2l0aW9uIHdhdGVybWFyay4gIEFmdGVyCisJICogY29tcHV0aW5nIHRo ZSBEREIgd2UnbGwgY29tZSBiYWNrIGFuZCBkaXNhYmxlIGl0IGlmIHRoYXQKKwkgKiBhc3N1bXB0 aW9uIHR1cm5zIG91dCB0byBiZSBmYWxzZS4KKwkgKi8KKwl3bS0+dHJhbnNfd20ucGxhbmVfcmVz X2IgPSByZXNfYmxvY2tzICsgMTsKKwl3bS0+dHJhbnNfd20ucGxhbmVfZW4gPSB0cnVlOwogfQog CiBzdGF0aWMgaW50IHNrbF9idWlsZF9wbGFuZV93bV9zaW5nbGUoc3RydWN0IGludGVsX2NydGNf c3RhdGUgKmNydGNfc3RhdGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfcGxhbmVfc3Rh dGUgKnBsYW5lX3N0YXRlLAogCQkJCSAgICAgZW51bSBwbGFuZV9pZCBwbGFuZV9pZCwgaW50IGNv bG9yX3BsYW5lKQogeworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY3J0Y19zdGF0ZS0+YmFzZS5jcnRjLT5kZXYpOwogCXN0cnVjdCBza2xfcGxhbmVfd20gKndt ID0gJmNydGNfc3RhdGUtPndtLnNrbC5vcHRpbWFsLnBsYW5lc1twbGFuZV9pZF07Ci0JdTE2IGRk Yl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJmNydGNfc3RhdGUtPndtLnNrbC5wbGFuZV9k ZGJfeVtwbGFuZV9pZF0pOwogCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKIAlpbnQg cmV0OwogCisJLyoKKwkgKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBzb21lb25lIG92ZXJyaWRl cyB0aGUgbGF0ZW5jeSB0byBhbiBpbnZhbGlkCisJICogdmFsdWUgb2YgMCBpbiBkZWJ1Z2ZzLgor CSAqLworCWlmIChkZXZfcHJpdi0+d20uc2tsX2xhdGVuY3lbMF0gPT0gMCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKIAlyZXQgPSBza2xfY29tcHV0ZV9wbGFuZV93bV9wYXJhbXMoY3J0Y19zdGF0ZSwg cGxhbmVfc3RhdGUsCiAJCQkJCSAgJndtX3BhcmFtcywgY29sb3JfcGxhbmUpOwogCWlmIChyZXQp CiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBza2xfY29tcHV0ZV93bV9sZXZlbHMoY3J0Y19zdGF0 ZSwgcGxhbmVfc3RhdGUsCi0JCQkJICAgIGRkYl9ibG9ja3MsICZ3bV9wYXJhbXMsIHdtLT53bSk7 Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXNrbF9jb21wdXRlX3RyYW5zaXRpb25fd20o Y3J0Y19zdGF0ZSwgJndtX3BhcmFtcywgd20sIGRkYl9ibG9ja3MpOworCXNrbF9jb21wdXRlX3dt X2xldmVscyhjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSwgJndtX3BhcmFtcywgd20tPndtKTsKKwlz a2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKGNydGNfc3RhdGUsICZ3bV9wYXJhbXMsIHdtKTsKIAog CXJldHVybiAwOwogfQpAQCAtNDk5OSw3ICs0ODk5LDYgQEAgc3RhdGljIGludCBza2xfYnVpbGRf cGxhbmVfd21fdXYoc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJCQkJIGVu dW0gcGxhbmVfaWQgcGxhbmVfaWQpCiB7CiAJc3RydWN0IHNrbF9wbGFuZV93bSAqd20gPSAmY3J0 Y19zdGF0ZS0+d20uc2tsLm9wdGltYWwucGxhbmVzW3BsYW5lX2lkXTsKLQl1MTYgZGRiX2Jsb2Nr cyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmY3J0Y19zdGF0ZS0+d20uc2tsLnBsYW5lX2RkYl91dltw bGFuZV9pZF0pOwogCXN0cnVjdCBza2xfd21fcGFyYW1zIHdtX3BhcmFtczsKIAlpbnQgcmV0Owog CkBAIC01MDExLDEwICs0OTEwLDcgQEAgc3RhdGljIGludCBza2xfYnVpbGRfcGxhbmVfd21fdXYo c3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCiAJaWYgKHJldCkKIAkJcmV0dXJu IHJldDsKIAotCXJldCA9IHNrbF9jb21wdXRlX3dtX2xldmVscyhjcnRjX3N0YXRlLCBwbGFuZV9z dGF0ZSwKLQkJCQkgICAgZGRiX2Jsb2NrcywgJndtX3BhcmFtcywgd20tPnV2X3dtKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OworCXNrbF9jb21wdXRlX3dtX2xldmVscyhjcnRjX3N0YXRlLCBw bGFuZV9zdGF0ZSwgJndtX3BhcmFtcywgd20tPnV2X3dtKTsKIAogCXJldHVybiAwOwogfQpAQCAt NTUzMiwxMyArNTQyOCw5IEBAIHNrbF9jb21wdXRlX3dtKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKIAlpZiAocmV0IHx8ICFjaGFuZ2VkKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0g c2tsX2NvbXB1dGVfZGRiKHN0YXRlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyoK IAkgKiBDYWxjdWxhdGUgV00ncyBmb3IgYWxsIHBpcGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyB0 cmFuc2FjdGlvbi4KLQkgKiBOb3RlIHRoYXQgdGhlIEREQiBhbGxvY2F0aW9uIGFib3ZlIG1heSBo YXZlIGFkZGVkIG1vcmUgQ1JUQydzIHRoYXQKKwkgKiBOb3RlIHRoYXQgc2tsX2RkYl9hZGRfYWZm ZWN0ZWRfcGlwZXMgbWF5IGhhdmUgYWRkZWQgbW9yZSBDUlRDJ3MgdGhhdAogCSAqIHdlcmVuJ3Qg b3RoZXJ3aXNlIGJlaW5nIG1vZGlmaWVkIChhbmQgc2V0IGJpdHMgaW4gZGlydHlfcGlwZXMpIGlm CiAJICogcGlwZSBhbGxvY2F0aW9ucyBoYWQgdG8gY2hhbmdlLgogCSAqLwpAQCAtNTU2OCw2ICs1 NDYwLDExIEBAIHNrbF9jb21wdXRlX3dtKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkK IAkJaW50ZWxfY3N0YXRlLT51cGRhdGVfd21fcHJlID0gdHJ1ZTsKIAl9CiAKKwlyZXQgPSBza2xf Y29tcHV0ZV9kZGIoc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwogCXNrbF9w cmludF93bV9jaGFuZ2VzKGludGVsX3N0YXRlKTsKIAogCXJldHVybiAwOwotLSAKMi4xNC40Cgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK