From mboxrd@z Thu Jan 1 00:00:00 1970 From: Damien Lespiau Subject: [PATCH 47/89] drm/i915/skl: SKL Watermark Computation Date: Thu, 4 Sep 2014 12:27:13 +0100 Message-ID: <1409830075-11139-48-git-send-email-damien.lespiau@intel.com> References: <1409830075-11139-1-git-send-email-damien.lespiau@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 E9B426E6AC for ; Thu, 4 Sep 2014 04:28:41 -0700 (PDT) In-Reply-To: <1409830075-11139-1-git-send-email-damien.lespiau@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: Pradeep Bhat List-Id: intel-gfx@lists.freedesktop.org RnJvbTogUHJhZGVlcCBCaGF0IDxwcmFkZWVwLmJoYXRAaW50ZWwuY29tPgoKVGhpcyBwYXRjaCBp bXBsZW1lbnRzIHRoZSB3YXRlcm1hcmsgYWxnb3JpdGhtIGFuZCBpdHMgbmVjZXNzYXJ5CmZ1bmN0 aW9ucy4gVHdvIGZ1bmN0aW9uIHBvaW50ZXJzIHNrbF91cGRhdGVfd20gYW5kCnNrbF91cGRhdGVf c3ByaXRlX3dtIGFyZSBwcm92aWRlZC4gVGhlIHNrbF91cGRhdGVfd20gd2lsbCB1cGRhdGUKdGhl IHdhdGVybWFya3MgZm9yIHRoZSBjcnRjIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IGFuZCB0aGVu CmNoZWNrcyBmb3IgY2hhbmdlIGluIEREQiBhbGxvY2F0aW9uIGZvciBvdGhlciBhY3RpdmUgcGlw ZXMgYW5kCnJlY29tcHV0ZXMgdGhlIHdhdGVybWFya3MgZm9yIHRob3NlIFBpcGVzIGFuZCBwbGFu ZXMgYXMgd2VsbC4KRmluYWxseSBpdCBkb2VzIHRoZSByZWdpc3RlciBwcm9ncmFtbWluZyBmb3Ig YWxsIGRpcnR5IHBpcGVzLgpUaGUgdHJpZ2dlciBvZiB0aGUgV2F0ZXJtYXJrIGRvdWJsZSBidWZm ZXIgcmVnaXN0ZXJzIHdpbGwgaGF2ZQp0byBiZSBvbmNlIHRoZSBwbGFuZSBjb25maWd1cmF0aW9u cyBhcmUgZG9uZSBieSB0aGUgY2FsbGVyLgoKdjI6IGZpeGVkIHRoZSBkaXZpZGUtYnktMCBlcnJv ciBpbiB0aGUgcmVzdWx0cyBjb21wdXRhdGlvbiBmdW5jLgogICAgQWxzbyByZXdvcmtlZCB0aGUg UExBTkVfV00gcmVnaXN0ZXIgdmFsdWVzIGNvbXB1dGF0aW9uIGZ1bmMgdG8KICAgIG1ha2UgaXQg bW9yZSBjb21wYWN0LiBJbmNvcnBvcmF0ZWQgYWxsIG90aGVyIHJldmlldyBjb21tZW50cwogICAg ZnJvbSBEYW1pZW4uCgp2MzogQ2hhbmdlZCB0aGUgc2tsX2NvbXB1dGVfcGxhbmVfd20gZnVuY3Rp b24gdG8gbm93IHJldHVybiBzdWNjZXNzCiAgICBvciBmYWlsdXJlLiBBbHNvIHRoZSByZXN1bHQg YmxvY2tzIGFuZCBsaW5lcyBhcmUgY29tcHV0ZWQgaGVyZQogICAgaW5zdGVhZCBvZiBpbiBza2xf Y29tcHV0ZV93bV9yZXN1bHRzIGZ1bmN0aW9uLgoKdjQ6IEFkanVzdCBza2xfZGRiX2FsbG9jX2No YW5nZWQoKSB0byB0aGUgbmV3IHBsYW5lcy9jdXJzb3Igc3BsaXQKICAgIChEYW1pZW4pCgp2NTog UmV3b3JrZWQgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgbmV3IHBsYW5lL2N1 cnNvcgogICAgc3BsaXQuCgp2NjogUmV3b3JrIHRoZSBsb2dpYyB0aGF0IHRyaWdnZXJzIHRoZSBE REIgYWxsb2NhdGlvbiBhbmQgV00gY29tcHV0YXRpb24KICAgIG9mIHNrbF91cGRhdGVfb3RoZXJf cGlwZV93bSgpIHRvIG5vdCBkZXBlbmQgb24gbm9uLWNvbXB1dGVkIEREQgogICAgdmFsdWVzLgog ICAgQWx3YXlzIGdpdmUgYSB2YWxpZCBjdXJzb3Jfd2lkdGggKGF0IGJvb3QgaXQncyAwKSB0byBr ZWVwIHRoZQogICAgaW52YXJpYW50IHRoYXQgd2UgY29uc2lkZXIgdGhlIGN1cnNvciBwbGFuZSBh bHdheXMgZW5hYmxlZC4KICAgIE90aGVyd2lzZSB3ZSBlbmQgdXAgZGl2aWRpbmcgYnkgMCBpbiBz a2xfY29tcHV0ZV9wbGFuZV93bSgpCiAgICAoRGFtaWVuIExlc3BpYXUpCgp2NzogU3BlbGwgb3V0 IGFsbG9jYXRpb24KICAgIHNrbF9kZGJfIGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSB0aGUgZGRiIGFz IGZpcnN0IGFyZ3VtZW50CiAgICBNYWtlIHRoZSBza2xfZGRiX2FsbG9jX2NoYW5nZWQoKSBwYXJh bWV0ZXJzIGNvbnN0CiAgICAoRGFtaWVuKQoKdjg6IFJlYmFzZSBvbiB0b3Agb2YgdGhlIGNydGMt PnByaW1hcnkgY2hhbmdlcwoKdjk6IFNwbGl0IHRoZSBzdGFnaW5nIHJlc3VsdHMgc3RydWN0dXJl IHRvIG5vdCBleGNlZWQgdGhlIDFLYiBzdGFjawogICAgYWxsb2NhdGlvbiBpbiBza2xfdXBkYXRl X3dtKCkKClNpZ25lZC1vZmYtYnk6IFByYWRlZXAgQmhhdCA8cHJhZGVlcC5iaGF0QGludGVsLmNv bT4KU2lnbmVkLW9mZi1ieTogRGFtaWVuIExlc3BpYXUgPGRhbWllbi5sZXNwaWF1QGludGVsLmNv bT4KCmRybS9pOTE1L3NrbDogRG9uJ3QgYWxsb2NhdGUgYXMgbXVjaCBvbiB0aGUgc3RhY2sgaW4g c2tsX3VwZGF0ZV93bSgpCgpTdGFjayBzcGFjZSBjYW4gYmUgc2NhcmNlIGFuZCBhIGNvbXBpbGVy IGNoZWNrIGhhcyBiZWVuIGFkZGVkIHRvIHdhcm4gaWYgdGhlCnBlci1mdW5jdGlvbiBzdGFjayBh bGxvY2F0aW9uIGlzIGFib3ZlIDFLQi4KCldlIHdlIHdlcmUgaGl0dGluZyB0aGF0IHdhcm5pbmcg aW4gc2tsX3VwZGF0ZV93bSgpLCBzbyBtb3ZlIHRoZSBiaWcKcmVzdWx0cyBhcnJheSBpbiBkZXZf cHJpdiBpbnN0ZWFkLgoKRm9yIHJlZmVyZW5jZSwgaGVyZSdzIHRoZSBjb21waWxlciB3YXJuaW5n IGJlZm9yZSB0aGlzIHBhdGNoOgoKICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jOiBJ biBmdW5jdGlvbiDigJhza2xfdXBkYXRlX3dt4oCZOgogIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3BtLmM6MzYxODoxOiB3YXJuaW5nOiB0aGUgZnJhbWUgc2l6ZSBvZiAxMjk2IGJ5dGVzCiAg ICBpcyBsYXJnZXIgdGhhbiAxMDI0IGJ5dGVzIFstV2ZyYW1lLWxhcmdlci10aGFuPV0KClNpZ25l ZC1vZmYtYnk6IERhbWllbiBMZXNwaWF1IDxkYW1pZW4ubGVzcGlhdUBpbnRlbC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCB8ICAxMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYyB8IDQyMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDQzNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZGUyNzhhNS4uOWIwZTM5OCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5oCkBAIC0xNzA5LDggKzE3MDksMTggQEAgc3RydWN0IGRybV9pOTE1X3By aXZhdGUgewogCQkgKi8KIAkJdWludDE2X3Qgc2tsX2xhdGVuY3lbOF07CiAKKwkJLyoKKwkJICog VGhlIHNrbF93bV92YWx1ZXMgc3RydWN0dXJlIGlzIGEgYml0IHRvbyBiaWcgZm9yIHN0YWNrCisJ CSAqIGFsbG9jYXRpb24sIHNvIHdlIGtlZXAgdGhlIHN0YWdpbmcgc3RydWN0IHdoZXJlIHdlIHN0 b3JlCisJCSAqIGludGVybWVkaWF0ZSByZXN1bHRzIGhlcmUgaW5zdGVhZC4KKwkJICovCisJCXN0 cnVjdCBza2xfd21fdmFsdWVzIHNrbF9yZXN1bHRzOworCiAJCS8qIGN1cnJlbnQgaGFyZHdhcmUg c3RhdGUgKi8KLQkJc3RydWN0IGlsa193bV92YWx1ZXMgaHc7CisJCXVuaW9uIHsKKwkJCXN0cnVj dCBpbGtfd21fdmFsdWVzIGh3OworCQkJc3RydWN0IHNrbF93bV92YWx1ZXMgc2tsX2h3OworCQl9 OwogCX0gd207CiAKIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBtOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3BtLmMKaW5kZXggMjUwM2FiOS4uNGVlOTBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wbS5jCkBA IC0yOTM3LDYgKzI5MzcsNDI3IEBAIHN0YXRpYyBib29sIGlsa19kaXNhYmxlX2xwX3dtKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCiAJcmV0dXJuIF9pbGtfZGlzYWJsZV9scF93bShkZXZfcHJpdiwg V01fRElSVFlfTFBfQUxMKTsKIH0KIAorc3RhdGljIHVpbnQzMl90IHNrbF9waXBlX3BpeGVsX3Jh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRj KTsKKwl1aW50MzJfdCBwaXhlbF9yYXRlOworCisJcGl4ZWxfcmF0ZSA9IGludGVsX2NydGMtPmNv bmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfY2xvY2s7CisKKwlyZXR1cm4gcGl4ZWxfcmF0ZTsKK30K Kworc3RhdGljIHVpbnQzMl90IHNrbF93bV9tZXRob2QxKHVpbnQzMl90IHBpeGVsX3JhdGUsIHVp bnQ4X3QgYnl0ZXNfcGVyX3BpeGVsLAorCQkJICAgICAgIHVpbnQzMl90IGxhdGVuY3kpCit7CisJ dWludDMyX3Qgd21faW50ZXJtZWRpYXRlX3ZhbCwgcmV0OworCisJaWYgKGxhdGVuY3kgPT0gMCkK KwkJcmV0dXJuIFVJTlRfTUFYOworCisJd21faW50ZXJtZWRpYXRlX3ZhbCA9IGxhdGVuY3kgKiBw aXhlbF9yYXRlICogYnl0ZXNfcGVyX3BpeGVsOworCXJldCA9IERJVl9ST1VORF9VUCh3bV9pbnRl cm1lZGlhdGVfdmFsLCAxMDAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1aW50MzJf dCBza2xfd21fbWV0aG9kMih1aW50MzJfdCBwaXhlbF9yYXRlLCB1aW50MzJfdCBwaXBlX2h0b3Rh bCwKKwkJCSAgICAgICB1aW50MzJfdCBob3Jpel9waXhlbHMsIHVpbnQ4X3QgYnl0ZXNfcGVyX3Bp eGVsLAorCQkJICAgICAgIHVpbnQzMl90IGxhdGVuY3kpCit7CisJdWludDMyX3QgcmV0LCBwbGFu ZV9ieXRlc19wZXJfbGluZSwgd21faW50ZXJtZWRpYXRlX3ZhbDsKKworCWlmIChsYXRlbmN5ID09 IDApCisJCXJldHVybiBVSU5UX01BWDsKKworCXBsYW5lX2J5dGVzX3Blcl9saW5lID0gaG9yaXpf cGl4ZWxzICogYnl0ZXNfcGVyX3BpeGVsOworCXdtX2ludGVybWVkaWF0ZV92YWwgPSBsYXRlbmN5 ICogcGl4ZWxfcmF0ZTsKKwlyZXQgPSBESVZfUk9VTkRfVVAod21faW50ZXJtZWRpYXRlX3ZhbCwg cGlwZV9odG90YWwgKiAxMDAwKSAqCisJCQkJcGxhbmVfYnl0ZXNfcGVyX2xpbmU7CisKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV90cmFuc2l0aW9uX3dtKHN0cnVj dCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpw YXJhbXMsCisJCQkJICBzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pCit7CisJLyoKKwkgKiBG b3Igbm93IGl0IGlzIHN1Z2dlc3RlZCB0byB1c2UgdGhlIExQMCB3bSB2YWwgb2YgY29ycmVzcG9u ZGluZworCSAqIHBsYW5lIGFzIHRyYW5zaXRpb24gd20gdmFsLiBUaGlzIGlzIGRvbmUgd2hpbGUg Y29tcHV0aW5nIHJlc3VsdHMuCisJICovCisJaWYgKCFwYXJhbXMtPmFjdGl2ZSkKKwkJcmV0dXJu OworfQorCitzdGF0aWMgdWludDMyX3QKK3NrbF9jb21wdXRlX2xpbmV0aW1lX3dtKHN0cnVjdCBk cm1fY3J0YyAqY3J0Yywgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnApCit7CisJaWYg KCFpbnRlbF9jcnRjX2FjdGl2ZShjcnRjKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gRElWX1JP VU5EX1VQKDggKiBwLT5waXBlX2h0b3RhbCAqIDEwMDAsIHAtPnBpeGVsX3JhdGUpOworCit9CisK K3N0YXRpYyBib29sIHNrbF9kZGJfYWxsb2NhdGlvbl9jaGFuZ2VkKGNvbnN0IHN0cnVjdCBza2xf ZGRiX2FsbG9jYXRpb24gKm5ld19kZGIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBpbnRlbF9jcnRj LT5iYXNlLmRldjsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCBza2xfZGRiX2FsbG9jYXRpb24gKmN1cl9kZGIgPSAmZGV2X3By aXYtPndtLnNrbF9ody5kZGI7CisJZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwor CXNpemVfdCBzaXplOworCisJc2l6ZSA9IEFSUkFZX1NJWkUobmV3X2RkYi0+cGxhbmVbcGlwZV0p ICogc2l6ZW9mKHN0cnVjdCBza2xfZGRiX2VudHJ5KTsKKwlpZiAobWVtY21wKG5ld19kZGItPnBs YW5lW3BpcGVdLCBjdXJfZGRiLT5wbGFuZVtwaXBlXSwgc2l6ZSkpCisJCXJldHVybiB0cnVlOwor CisJaWYgKG1lbWNtcCgmbmV3X2RkYi0+Y3Vyc29yW3BpcGVdLCAmY3VyX2RkYi0+Y3Vyc29yW3Bp cGVdLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBza2xfZGRiX2VudHJ5KSkpCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9nbG9i YWxfcGFyYW1ldGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBp bnRlbF93bV9jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYt Pm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKKwkJY29uZmlnLT5udW1fcGlwZXNfYWN0aXZl ICs9IGludGVsX2NydGNfYWN0aXZlKGNydGMpOworCisJLyogRklYTUU6IEkgZG9uJ3QgdGhpbmsg d2UgbmVlZCB0aG9zZSB0d28gZ2xvYmFsIHBhcmFtZXRlcnMgb24gU0tMICovCisJbGlzdF9mb3Jf ZWFjaF9lbnRyeShwbGFuZSwgJmRldi0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkgewor CQlzdHJ1Y3QgaW50ZWxfcGxhbmUgKmludGVsX3BsYW5lID0gdG9faW50ZWxfcGxhbmUocGxhbmUp OworCisJCWNvbmZpZy0+c3ByaXRlc19lbmFibGVkIHw9IGludGVsX3BsYW5lLT53bS5lbmFibGVk OworCQljb25maWctPnNwcml0ZXNfc2NhbGVkIHw9IGludGVsX3BsYW5lLT53bS5zY2FsZWQ7CisJ fQorfQorCitzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9waXBlX3BhcmFtZXRlcnMoc3RydWN0 IGRybV9jcnRjICpjcnRjLAorCQkJCQkgICBzdHJ1Y3Qgc2tsX3BpcGVfd21fcGFyYW1ldGVycyAq cCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBpbnRl bF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwllbnVtIHBpcGUgcGlw ZSA9IGludGVsX2NydGMtPnBpcGU7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJaW50IGkg PSAxOyAvKiBJbmRleCBmb3Igc3ByaXRlIHBsYW5lcyBzdGFydCAqLworCisJcC0+YWN0aXZlID0g aW50ZWxfY3J0Y19hY3RpdmUoY3J0Yyk7CisJaWYgKHAtPmFjdGl2ZSkgeworCQlwLT5waXBlX2h0 b3RhbCA9IGludGVsX2NydGMtPmNvbmZpZy5hZGp1c3RlZF9tb2RlLmNydGNfaHRvdGFsOworCQlw LT5waXhlbF9yYXRlID0gc2tsX3BpcGVfcGl4ZWxfcmF0ZShkZXYsIGNydGMpOworCisJCS8qCisJ CSAqIEZvciBub3csIGFzc3VtZSBwcmltYXJ5IGFuZCBjdXJzb3IgcGxhbmVzIGFyZSBhbHdheXMg ZW5hYmxlZC4KKwkJICovCisJCXAtPnBsYW5lWzBdLmVuYWJsZWQgPSB0cnVlOworCQlwLT5wbGFu ZVswXS5ieXRlc19wZXJfcGl4ZWwgPQorCQkJY3J0Yy0+cHJpbWFyeS0+ZmItPmJpdHNfcGVyX3Bp eGVsIC8gODsKKwkJcC0+cGxhbmVbMF0uaG9yaXpfcGl4ZWxzID0gaW50ZWxfY3J0Yy0+Y29uZmln LnBpcGVfc3JjX3c7CisJCXAtPnBsYW5lWzBdLnZlcnRfcGl4ZWxzID0gaW50ZWxfY3J0Yy0+Y29u ZmlnLnBpcGVfc3JjX2g7CisKKwkJcC0+Y3Vyc29yLmVuYWJsZWQgPSB0cnVlOworCQlwLT5jdXJz b3IuYnl0ZXNfcGVyX3BpeGVsID0gNDsKKwkJcC0+Y3Vyc29yLmhvcml6X3BpeGVscyA9IGludGVs X2NydGMtPmN1cnNvcl93aWR0aCA/CisJCQkJCSBpbnRlbF9jcnRjLT5jdXJzb3Jfd2lkdGggOiA2 NDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBsYW5lLCAmZGV2LT5tb2RlX2NvbmZpZy5w bGFuZV9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0 b19pbnRlbF9wbGFuZShwbGFuZSk7CisKKwkJaWYgKGludGVsX3BsYW5lLT5waXBlID09IHBpcGUp CisJCQlwLT5wbGFuZVtpKytdID0gaW50ZWxfcGxhbmUtPndtOworCX0KK30KKworc3RhdGljIGJv b2wgc2tsX2NvbXB1dGVfcGxhbmVfd20oc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnAs CisJCQkJICAgc3RydWN0IGludGVsX3BsYW5lX3dtX3BhcmFtZXRlcnMgKnBfcGFyYW1zLAorCQkJ CSAgIHVpbnQxNl90IG1heF9wYWdlX2J1ZmZfYWxsb2MsCisJCQkJICAgdWludDMyX3QgbWVtX3Zh bHVlLAorCQkJCSAgIHVpbnQxNl90ICpyZXNfYmxvY2tzLCAvKiBvdXQgKi8KKwkJCQkgICB1aW50 OF90ICpyZXNfbGluZXMgLyogb3V0ICovKQoreworCXVpbnQzMl90IG1ldGhvZDEsIG1ldGhvZDIs IHBsYW5lX2J5dGVzX3Blcl9saW5lOworCXVpbnQzMl90IHJlc3VsdF9ieXRlczsKKworCWlmICgh cC0+YWN0aXZlIHx8ICFwX3BhcmFtcy0+ZW5hYmxlZCkgeworCQkqcmVzX2Jsb2NrcyA9IFBMQU5F X1dNX0JMT0NLU19ERUZBVUxUOworCQkqcmVzX2xpbmVzID0gUExBTkVfV01fTElORVNfREVGQVVM VDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW1ldGhvZDEgPSBza2xfd21fbWV0aG9kMShwLT5w aXhlbF9yYXRlLAorCQkJCSBwX3BhcmFtcy0+Ynl0ZXNfcGVyX3BpeGVsLAorCQkJCSBtZW1fdmFs dWUpOworCW1ldGhvZDIgPSBza2xfd21fbWV0aG9kMihwLT5waXhlbF9yYXRlLAorCQkJCSBwLT5w aXBlX2h0b3RhbCwKKwkJCQkgcF9wYXJhbXMtPmhvcml6X3BpeGVscywKKwkJCQkgcF9wYXJhbXMt PmJ5dGVzX3Blcl9waXhlbCwKKwkJCQkgbWVtX3ZhbHVlKTsKKworCXBsYW5lX2J5dGVzX3Blcl9s aW5lID0gcF9wYXJhbXMtPmhvcml6X3BpeGVscyAqCisJCQkJCXBfcGFyYW1zLT5ieXRlc19wZXJf cGl4ZWw7CisKKwkvKiBGb3Igbm93IHh0aWxlIGFuZCBsaW5lYXIgKi8KKwlpZiAoKChtYXhfcGFn ZV9idWZmX2FsbG9jICogNTEyKSAvIHBsYW5lX2J5dGVzX3Blcl9saW5lKSA+PSAxKQorCQlyZXN1 bHRfYnl0ZXMgPSBtaW4obWV0aG9kMSwgbWV0aG9kMik7CisJZWxzZQorCQlyZXN1bHRfYnl0ZXMg PSBtZXRob2QxOworCisJKnJlc19ibG9ja3MgPSBESVZfUk9VTkRfVVAocmVzdWx0X2J5dGVzLCA1 MTIpICsgMTsKKwkqcmVzX2xpbmVzID0gRElWX1JPVU5EX1VQKHJlc3VsdF9ieXRlcywgcGxhbmVf Ynl0ZXNfcGVyX2xpbmUpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNrbF9j b21wdXRlX3dtX2xldmVsKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwK KwkJCQkgc3RydWN0IHNrbF9kZGJfYWxsb2NhdGlvbiAqZGRiLAorCQkJCSBzdHJ1Y3Qgc2tsX3Bp cGVfd21fcGFyYW1ldGVycyAqcCwKKwkJCQkgZW51bSBwaXBlIHBpcGUsCisJCQkJIGludCBsZXZl bCwKKwkJCQkgaW50IG51bV9wbGFuZXMsCisJCQkJIHN0cnVjdCBza2xfd21fbGV2ZWwgKnJlc3Vs dCkKK3sKKwl1aW50MTZfdCBsYXRlbmN5ID0gZGV2X3ByaXYtPndtLnNrbF9sYXRlbmN5W2xldmVs XTsKKwl1aW50MTZfdCBkZGJfYmxvY2tzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51 bV9wbGFuZXM7IGkrKykgeworCQlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGIt PnBsYW5lW3BpcGVdW2ldKTsKKworCQlyZXN1bHQtPnBsYW5lX2VuW2ldID0gc2tsX2NvbXB1dGVf cGxhbmVfd20ocCwgJnAtPnBsYW5lW2ldLAorCQkJCQkJZGRiX2Jsb2NrcywKKwkJCQkJCWxhdGVu Y3ksCisJCQkJCQkmcmVzdWx0LT5wbGFuZV9yZXNfYltpXSwKKwkJCQkJCSZyZXN1bHQtPnBsYW5l X3Jlc19sW2ldKTsKKwl9CisKKwlkZGJfYmxvY2tzID0gc2tsX2RkYl9lbnRyeV9zaXplKCZkZGIt PmN1cnNvcltwaXBlXSk7CisJcmVzdWx0LT5jdXJzb3JfZW4gPSBza2xfY29tcHV0ZV9wbGFuZV93 bShwLCAmcC0+Y3Vyc29yLCBkZGJfYmxvY2tzLAorCQkJCQkJIGxhdGVuY3ksICZyZXN1bHQtPmN1 cnNvcl9yZXNfYiwKKwkJCQkJCSAmcmVzdWx0LT5jdXJzb3JfcmVzX2wpOworfQorCitzdGF0aWMg dm9pZCBza2xfY29tcHV0ZV9waXBlX3dtKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQlzdHJ1 Y3Qgc2tsX2RkYl9hbGxvY2F0aW9uICpkZGIsCisJCQkJc3RydWN0IHNrbF9waXBlX3dtX3BhcmFt ZXRlcnMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc2tsX3BpcGVfd20gKnBpcGVfd20pCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9jcnRj ICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlpbnQgbGV2ZWwsIG1heF9sZXZl bCA9IGlsa193bV9tYXhfbGV2ZWwoZGV2KTsKKworCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8PSBt YXhfbGV2ZWw7IGxldmVsKyspIHsKKwkJc2tsX2NvbXB1dGVfd21fbGV2ZWwoZGV2X3ByaXYsIGRk YiwgcGFyYW1zLCBpbnRlbF9jcnRjLT5waXBlLAorCQkJCSAgICAgbGV2ZWwsIGludGVsX251bV9w bGFuZXMoaW50ZWxfY3J0YyksCisJCQkJICAgICAmcGlwZV93bS0+d21bbGV2ZWxdKTsKKwl9CisJ cGlwZV93bS0+bGluZXRpbWUgPSBza2xfY29tcHV0ZV9saW5ldGltZV93bShjcnRjLCBwYXJhbXMp OworCisJc2tsX2NvbXB1dGVfdHJhbnNpdGlvbl93bShjcnRjLCBwYXJhbXMsIHBpcGVfd20pOwor fQorCitzdGF0aWMgdm9pZCBza2xfY29tcHV0ZV93bV9yZXN1bHRzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJICAgc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgKnAsCisJCQkJICAg c3RydWN0IHNrbF9waXBlX3dtICpwX3dtLAorCQkJCSAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpy LAorCQkJCSAgIHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjKQoreworCWludCBpLCBsZXZl bCwgbWF4X2xldmVsID0gaWxrX3dtX21heF9sZXZlbChkZXYpOworCXVpbnQzMl90IHRlbXA7CisJ ZW51bSBwaXBlIHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOworCXVpbnQxNl90IGRkYl9ibG9ja3M7 CisKKwlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPD0gbWF4X2xldmVsOyBsZXZlbCsrKSB7CisJCWZv ciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGludGVsX2NydGMpOyBpKyspIHsKKwkJCXRl bXAgPSAwOworCQkJZGRiX2Jsb2NrcyA9IHNrbF9kZGJfZW50cnlfc2l6ZSgmci0+ZGRiLnBsYW5l W3BpcGVdW2ldKTsKKworCQkJaWYgKChwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2JbaV0gPiBk ZGJfYmxvY2tzKSB8fAorCQkJCShwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2xbaV0gPiAzMSkp CisJCQkJcF93bS0+d21bbGV2ZWxdLnBsYW5lX2VuW2ldID0gZmFsc2U7CisKKwkJCXRlbXAgfD0g cF93bS0+d21bbGV2ZWxdLnBsYW5lX3Jlc19sW2ldIDw8CisJCQkJCVBMQU5FX1dNX0xJTkVTX1NI SUZUOworCQkJdGVtcCB8PSBwX3dtLT53bVtsZXZlbF0ucGxhbmVfcmVzX2JbaV07CisJCQlpZiAo cF93bS0+d21bbGV2ZWxdLnBsYW5lX2VuW2ldKQorCQkJCXRlbXAgfD0gUExBTkVfV01fRU47CisK KwkJCXItPnBsYW5lW3BpcGVdW2ldW2xldmVsXSA9IHRlbXA7CisJCQkvKiBVc2UgdGhlIExQMCBX TSB2YWx1ZSBmb3IgdHJhbnNpdGlvbiBXTSBmb3Igbm93LiAqLworCQkJaWYgKGxldmVsID09IDAp CisJCQkJci0+cGxhbmVfdHJhbnNbcGlwZV1baV0gPSB0ZW1wOworCQl9CisKKwkJdGVtcCA9IDA7 CisJCWRkYl9ibG9ja3MgPSBza2xfZGRiX2VudHJ5X3NpemUoJnItPmRkYi5jdXJzb3JbcGlwZV0p OworCisJCWlmICgocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9yZXNfYiA+IGRkYl9ibG9ja3MpIHx8 CisJCQkocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9yZXNfbCA+IDMxKSkKKwkJCXBfd20tPndtW2xl dmVsXS5jdXJzb3JfZW4gPSBmYWxzZTsKKworCQl0ZW1wIHw9IHBfd20tPndtW2xldmVsXS5jdXJz b3JfcmVzX2wgPDwgUExBTkVfV01fTElORVNfU0hJRlQ7CisJCXRlbXAgfD0gcF93bS0+d21bbGV2 ZWxdLmN1cnNvcl9yZXNfYjsKKworCQlpZiAocF93bS0+d21bbGV2ZWxdLmN1cnNvcl9lbikKKwkJ CXRlbXAgfD0gUExBTkVfV01fRU47CisKKwkJci0+Y3Vyc29yW3BpcGVdW2xldmVsXSA9IHRlbXA7 CisJCS8qIFVzZSB0aGUgTFAwIFdNIHZhbHVlIGZvciB0cmFuc2l0aW9uIFdNIGZvciBub3cuICov CisJCWlmIChsZXZlbCA9PSAwKQorCQkJci0+Y3Vyc29yX3RyYW5zW3BpcGVdID0gdGVtcDsKKwor CX0KKworCXItPndtX2xpbmV0aW1lW3BpcGVdID0gcF93bS0+bGluZXRpbWU7Cit9CisKK3N0YXRp YyB2b2lkIHNrbF93cml0ZV93bV92YWx1ZXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAorCQkJCXN0cnVjdCBza2xfd21fdmFsdWVzICpuZXcpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJc3RydWN0IGludGVsX2NydGMgKmNydGM7CisJaW50 IGksIGxldmVsLCBtYXhfbGV2ZWwgPSBpbGtfd21fbWF4X2xldmVsKGRldik7CisJZW51bSBwaXBl IHBpcGU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNy dGNfbGlzdCwgYmFzZS5oZWFkKSB7CisJCXBpcGUgPSBjcnRjLT5waXBlOworCQlpZiAobmV3LT5k aXJ0eVtwaXBlXSkgeworCQkJSTkxNV9XUklURShQSVBFX1dNX0xJTkVUSU1FKHBpcGUpLAorCQkJ CQluZXctPndtX2xpbmV0aW1lW3BpcGVdKTsKKworCQkJZm9yIChsZXZlbCA9IDA7IGxldmVsIDw9 IG1heF9sZXZlbDsgbGV2ZWwrKykgeworCQkJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxh bmVzKGNydGMpOyBpKyspCisJCQkJCUk5MTVfV1JJVEUoUExBTkVfV00ocGlwZSwgaSwgbGV2ZWwp LAorCQkJCQkJbmV3LT5wbGFuZVtwaXBlXVtpXVtsZXZlbF0pOworCQkJCUk5MTVfV1JJVEUoQ1VS X1dNKHBpcGUsIGxldmVsKSwKKwkJCQkJbmV3LT5jdXJzb3JbcGlwZV1bbGV2ZWxdKTsKKwkJCX0K KwkJCWZvciAoaSA9IDA7IGkgPCBpbnRlbF9udW1fcGxhbmVzKGNydGMpOyBpKyspCisJCQkJSTkx NV9XUklURShQTEFORV9XTV9UUkFOUyhwaXBlLCBpKSwKKwkJCQkJCW5ldy0+cGxhbmVfdHJhbnNb cGlwZV1baV0pOworCQkJSTkxNV9XUklURShDVVJfV01fVFJBTlMocGlwZSksIG5ldy0+Y3Vyc29y X3RyYW5zW3BpcGVdKTsKKwkJfQorCX0KKworCWRldl9wcml2LT53bS5za2xfaHcgPSAqbmV3Owor fQorCitzdGF0aWMgYm9vbCBza2xfdXBkYXRlX3BpcGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRj LAorCQkJICAgICAgIHN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0ZXJzICpwYXJhbXMsCisJCQkg ICAgICAgc3RydWN0IGludGVsX3dtX2NvbmZpZyAqY29uZmlnLAorCQkJICAgICAgIHN0cnVjdCBz a2xfZGRiX2FsbG9jYXRpb24gKmRkYiwgLyogb3V0ICovCisJCQkgICAgICAgc3RydWN0IHNrbF9w aXBlX3dtICpwaXBlX3dtIC8qIG91dCAqLykKK3sKKwlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxf Y3J0YyA9IHRvX2ludGVsX2NydGMoY3J0Yyk7CisKKwlza2xfY29tcHV0ZV93bV9waXBlX3BhcmFt ZXRlcnMoY3J0YywgcGFyYW1zKTsKKwlza2xfY29tcHV0ZV9waXBlX3dtKGNydGMsIGRkYiwgcGFy YW1zLCBwaXBlX3dtKTsKKworCWlmICghbWVtY21wKCZpbnRlbF9jcnRjLT53bS5za2xfYWN0aXZl LCBwaXBlX3dtLCBzaXplb2YoKnBpcGVfd20pKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaW50ZWxf Y3J0Yy0+d20uc2tsX2FjdGl2ZSA9ICpwaXBlX3dtOworCXJldHVybiB0cnVlOworfQorCitzdGF0 aWMgdm9pZCBza2xfdXBkYXRlX290aGVyX3BpcGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBpbnRlbF93 bV9jb25maWcgKmNvbmZpZywKKwkJCQkgICAgIHN0cnVjdCBza2xfd21fdmFsdWVzICpyKQorewor CXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjOworCXN0cnVjdCBpbnRlbF9jcnRjICp0aGlz X2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBza2xfcGlwZV93bV9wYXJhbWV0 ZXJzIHBhcmFtczsKKwlzdHJ1Y3Qgc2tsX3BpcGVfd20gcGlwZV93bTsKKworCS8qCisJICogSWYg dGhlIFdNIHVwZGF0ZSBoYXNuJ3QgY2hhbmdlZCB0aGUgYWxsb2NhdGlvbiBmb3IgdGhpc19jcnRj ICh0aGUKKwkgKiBjcnRjIHdlIGFyZSBjdXJyZW50bHkgY29tcHV0aW5nIHRoZSBuZXcgV00gdmFs dWVzIGZvciksIG90aGVyCisJICogZW5hYmxlZCBjcnRjcyB3aWxsIGtlZXAgdGhlIHNhbWUgYWxs b2NhdGlvbiBhbmQgd2UgZG9uJ3QgbmVlZCB0bworCSAqIHJlY29tcHV0ZSBhbnl0aGluZyBmb3Ig dGhlbS4KKwkgKi8KKwlpZiAoIXNrbF9kZGJfYWxsb2NhdGlvbl9jaGFuZ2VkKCZyLT5kZGIsIHRo aXNfY3J0YykpCisJCXJldHVybjsKKworCS8qCisJICogT3RoZXJ3aXNlLCBiZWNhdXNlIG9mIHRo aXNfY3J0YyBiZWluZyBmcmVzaGx5IGVuYWJsZWQvZGlzYWJsZWQsIHRoZQorCSAqIG90aGVyIGFj dGl2ZSBwaXBlcyBuZWVkIG5ldyBEREIgYWxsb2NhdGlvbiBhbmQgV00gdmFsdWVzLgorCSAqLwor CWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZWxfY3J0YywgJmRldi0+bW9kZV9jb25maWcuY3J0Y19s aXN0LAorCQkJCWJhc2UuaGVhZCkgeworCQlib29sIHdtX2NoYW5nZWQ7CisKKwkJaWYgKHRoaXNf Y3J0Yy0+cGlwZSA9PSBpbnRlbF9jcnRjLT5waXBlKQorCQkJY29udGludWU7CisKKwkJaWYgKCFp bnRlbF9jcnRjLT5hY3RpdmUpCisJCQljb250aW51ZTsKKworCQl3bV9jaGFuZ2VkID0gc2tsX3Vw ZGF0ZV9waXBlX3dtKCZpbnRlbF9jcnRjLT5iYXNlLAorCQkJCQkJJnBhcmFtcywgY29uZmlnLAor CQkJCQkJJnItPmRkYiwgJnBpcGVfd20pOworCisJCS8qCisJCSAqIElmIHdlIGVuZCB1cCByZS1j b21wdXRpbmcgdGhlIG90aGVyIHBpcGUgV00gdmFsdWVzLCBpdCdzCisJCSAqIGJlY2F1c2UgaXQg d2FzIHJlYWxseSBuZWVkZWQsIHNvIHdlIGV4cGVjdCB0aGUgV00gdmFsdWVzIHRvCisJCSAqIGJl IGRpZmZlcmVudC4KKwkJICovCisJCVdBUk5fT04oIXdtX2NoYW5nZWQpOworCisJCXNrbF9jb21w dXRlX3dtX3Jlc3VsdHMoZGV2LCAmcGFyYW1zLCAmcGlwZV93bSwgciwgaW50ZWxfY3J0Yyk7CisJ CXItPmRpcnR5W2ludGVsX2NydGMtPnBpcGVdID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk IHNrbF91cGRhdGVfd20oc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBpbnRlbF9j cnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHNrbF9waXBlX3dtX3BhcmFtZXRlcnMgcGFyYW1z ID0ge307CisJc3RydWN0IHNrbF93bV92YWx1ZXMgKnJlc3VsdHMgPSAmZGV2X3ByaXYtPndtLnNr bF9yZXN1bHRzOworCXN0cnVjdCBza2xfcGlwZV93bSBwaXBlX3dtID0ge307CisJc3RydWN0IGlu dGVsX3dtX2NvbmZpZyBjb25maWcgPSB7fTsKKworCW1lbXNldChyZXN1bHRzLCAwLCBzaXplb2Yo KnJlc3VsdHMpKTsKKworCXNrbF9jb21wdXRlX3dtX2dsb2JhbF9wYXJhbWV0ZXJzKGRldiwgJmNv bmZpZyk7CisKKwlpZiAoIXNrbF91cGRhdGVfcGlwZV93bShjcnRjLCAmcGFyYW1zLCAmY29uZmln LAorCQkJCSZyZXN1bHRzLT5kZGIsICZwaXBlX3dtKSkKKwkJcmV0dXJuOworCisJc2tsX2NvbXB1 dGVfd21fcmVzdWx0cyhkZXYsICZwYXJhbXMsICZwaXBlX3dtLCByZXN1bHRzLCBpbnRlbF9jcnRj KTsKKwlyZXN1bHRzLT5kaXJ0eVtpbnRlbF9jcnRjLT5waXBlXSA9IHRydWU7CisKKwlza2xfdXBk YXRlX290aGVyX3BpcGVfd20oZGV2LCBjcnRjLCAmY29uZmlnLCByZXN1bHRzKTsKKwlza2xfd3Jp dGVfd21fdmFsdWVzKGRldl9wcml2LCByZXN1bHRzKTsKK30KKworc3RhdGljIHZvaWQKK3NrbF91 cGRhdGVfc3ByaXRlX3dtKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCisJCSAgICAgdWludDMyX3Qgc3ByaXRlX3dpZHRoLCB1aW50MzJfdCBzcHJpdGVfaGVp Z2h0LAorCQkgICAgIGludCBwaXhlbF9zaXplLCBib29sIGVuYWJsZWQsIGJvb2wgc2NhbGVkKQor eworCXN0cnVjdCBpbnRlbF9wbGFuZSAqaW50ZWxfcGxhbmUgPSB0b19pbnRlbF9wbGFuZShwbGFu ZSk7CisKKwlpbnRlbF9wbGFuZS0+d20uZW5hYmxlZCA9IGVuYWJsZWQ7CisJaW50ZWxfcGxhbmUt PndtLnNjYWxlZCA9IHNjYWxlZDsKKwlpbnRlbF9wbGFuZS0+d20uaG9yaXpfcGl4ZWxzID0gc3By aXRlX3dpZHRoOworCWludGVsX3BsYW5lLT53bS52ZXJ0X3BpeGVscyA9IHNwcml0ZV9oZWlnaHQ7 CisJaW50ZWxfcGxhbmUtPndtLmJ5dGVzX3Blcl9waXhlbCA9IHBpeGVsX3NpemU7CisKKwlza2xf dXBkYXRlX3dtKGNydGMpOworfQorCiBzdGF0aWMgdm9pZCBpbGtfdXBkYXRlX3dtKHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2lu dGVsX2NydGMoY3J0Yyk7CkBAIC03NDY0LDYgKzc4ODUsOCBAQCB2b2lkIGludGVsX2luaXRfcG0o c3RydWN0IGRybV9kZXZpY2UgKmRldikKIAkJc2tsX3NldHVwX3dtX2xhdGVuY3koZGV2KTsKIAog CQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGdlbjlfaW5pdF9jbG9ja19n YXRpbmc7CisJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IHNrbF91cGRhdGVfd207CisJ CWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV9zcHJpdGVfd20gPSBza2xfdXBkYXRlX3Nwcml0ZV93 bTsKIAl9IGVsc2UgaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlpbGtfc2V0dXBfd21fbGF0 ZW5jeShkZXYpOwogCi0tIAoxLjguMy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=