From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH 1/4] xen: re-introduce support for grant v2 interface Date: Fri, 8 Sep 2017 16:48:46 +0200 Message-ID: <20170908144849.2958-2-jgross@suse.com> References: <20170908144849.2958-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dqLl4-0005Js-BE for xen-devel@lists.xenproject.org; Fri, 08 Sep 2017 16:03:54 +0000 In-Reply-To: <20170908144849.2958-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, xen-devel@lists.xenproject.org Cc: Juergen Gross , boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org VGhlIGdyYW50IHYyIHN1cHBvcnQgd2FzIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsIHdpdGgKY29t bWl0IDQzOGIzM2M3MTQ1Y2E4YTUxMzFhMzBjMzZkOGY1OWJjZTExOWExOWEgKCJ4ZW4vZ3JhbnQt dGFibGU6CnJlbW92ZSBzdXBwb3J0IGZvciBWMiB0YWJsZXMiKSBhcyB0aGUgaGlnaGVyIG1lbW9y eSBmb290cHJpbnQgb2YgdjIKZ3JhbnRzIHJlc3VsdGVkIGluIGxlc3MgZ3JhbnRzIGJlaW5nIHBv c3NpYmxlIGZvciBhIGtlcm5lbCBjb21wYXJlZAp0byB0aGUgdjEgZ3JhbnQgaW50ZXJmYWNlLgoK QXMgbWFjaGluZXMgd2l0aCBtb3JlIHRoYW4gMTZUQiBvZiBtZW1vcnkgYXJlIGV4cGVjdGVkIHRv IGJlIG1vcmUKY29tbW9uIGluIHRoZSBuZWFyIGZ1dHVyZSBzdXBwb3J0IG9mIGdyYW50IHYyIGlz IG1hbmRhdG9yeSBpbiBvcmRlcgp0byBiZSBhYmxlIHRvIHJ1biBhIFhlbiBwdiBkb21haW4gYXQg YW55IG1lbW9yeSBsb2NhdGlvbi4KClNvIHJlLWFkZCBncmFudCB2MiBzdXBwb3J0IGJhc2ljYWxs eSBieSByZXZlcnRpbmcgYWJvdmUgY29tbWl0LgoKU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBHcm9z cyA8amdyb3NzQHN1c2UuY29tPgotLS0KIGFyY2gvYXJtL3hlbi9ncmFudC10YWJsZS5jIHwgICA5 ICstCiBhcmNoL3g4Ni94ZW4vZ3JhbnQtdGFibGUuYyB8ICA2MCArKysrKysrKy0KIGRyaXZlcnMv eGVuL2dyYW50LXRhYmxlLmMgIHwgMzEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaCAgfCAgMzAgKysrKy0KIDQg ZmlsZXMgY2hhbmdlZCwgMzk4IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2FyY2gvYXJtL3hlbi9ncmFudC10YWJsZS5jIGIvYXJjaC9hcm0veGVuL2dyYW50LXRh YmxlLmMKaW5kZXggZTQzNzkxODI5YWNlLi45MWNmMDhiYTFlOTUgMTAwNjQ0Ci0tLSBhL2FyY2gv YXJtL3hlbi9ncmFudC10YWJsZS5jCisrKyBiL2FyY2gvYXJtL3hlbi9ncmFudC10YWJsZS5jCkBA IC00NSw3ICs0NSwxNCBAQCB2b2lkIGFyY2hfZ250dGFiX3VubWFwKHZvaWQgKnNoYXJlZCwgdW5z aWduZWQgbG9uZyBucl9nZnJhbWVzKQogCXJldHVybjsKIH0KIAotaW50IGFyY2hfZ250dGFiX2lu aXQodW5zaWduZWQgbG9uZyBucl9zaGFyZWQpCitpbnQgYXJjaF9nbnR0YWJfbWFwX3N0YXR1cyh1 aW50NjRfdCAqZnJhbWVzLCB1bnNpZ25lZCBsb25nIG5yX2dmcmFtZXMsCisJCQkgICB1bnNpZ25l ZCBsb25nIG1heF9ucl9nZnJhbWVzLAorCQkJICAgZ3JhbnRfc3RhdHVzX3QgKipfX3NoYXJlZCkK K3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworaW50IGFyY2hfZ250dGFiX2luaXQodW5zaWduZWQg bG9uZyBucl9zaGFyZWQsIHVuc2lnbmVkIGxvbmcgbnJfc3RhdHVzKQogewogCXJldHVybiAwOwog fQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMgYi9hcmNoL3g4Ni94ZW4v Z3JhbnQtdGFibGUuYwppbmRleCA4MDliNmM4MTI2NTQuLjkyY2NjNzE4MTUyZCAxMDA2NDQKLS0t IGEvYXJjaC94ODYveGVuL2dyYW50LXRhYmxlLmMKKysrIGIvYXJjaC94ODYveGVuL2dyYW50LXRh YmxlLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ250dGFiX3ZtX2FyZWEgewog CXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJcHRlX3QgKipwdGVzOwotfSBnbnR0YWJfc2hhcmVk X3ZtX2FyZWE7Cit9IGdudHRhYl9zaGFyZWRfdm1fYXJlYSwgZ250dGFiX3N0YXR1c192bV9hcmVh OwogCiBpbnQgYXJjaF9nbnR0YWJfbWFwX3NoYXJlZCh1bnNpZ25lZCBsb25nICpmcmFtZXMsIHVu c2lnbmVkIGxvbmcgbnJfZ2ZyYW1lcywKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbWF4X25yX2dmcmFt ZXMsCkBAIC03MywxNiArNzMsNDMgQEAgaW50IGFyY2hfZ250dGFiX21hcF9zaGFyZWQodW5zaWdu ZWQgbG9uZyAqZnJhbWVzLCB1bnNpZ25lZCBsb25nIG5yX2dmcmFtZXMsCiAJcmV0dXJuIDA7CiB9 CiAKK2ludCBhcmNoX2dudHRhYl9tYXBfc3RhdHVzKHVpbnQ2NF90ICpmcmFtZXMsIHVuc2lnbmVk IGxvbmcgbnJfZ2ZyYW1lcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbWF4X25yX2dmcmFtZXMsCisJ CQkgICBncmFudF9zdGF0dXNfdCAqKl9fc2hhcmVkKQoreworCWdyYW50X3N0YXR1c190ICpzaGFy ZWQgPSAqX19zaGFyZWQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgaTsK KworCWlmIChzaGFyZWQgPT0gTlVMTCkKKwkJKl9fc2hhcmVkID0gc2hhcmVkID0gZ250dGFiX3N0 YXR1c192bV9hcmVhLmFyZWEtPmFkZHI7CisKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcpc2hhcmVk OworCisJZm9yIChpID0gMDsgaSA8IG5yX2dmcmFtZXM7IGkrKykgeworCQlzZXRfcHRlX2F0KCZp bml0X21tLCBhZGRyLCBnbnR0YWJfc3RhdHVzX3ZtX2FyZWEucHRlc1tpXSwKKwkJCSAgIG1mbl9w dGUoZnJhbWVzW2ldLCBQQUdFX0tFUk5FTCkpOworCQlhZGRyICs9IFBBR0VfU0laRTsKKwl9CisK KwlyZXR1cm4gMDsKK30KKwogdm9pZCBhcmNoX2dudHRhYl91bm1hcCh2b2lkICpzaGFyZWQsIHVu c2lnbmVkIGxvbmcgbnJfZ2ZyYW1lcykKIHsKKwlwdGVfdCAqKnB0ZXM7CiAJdW5zaWduZWQgbG9u ZyBhZGRyOwogCXVuc2lnbmVkIGxvbmcgaTsKIAorCWlmIChzaGFyZWQgPT0gZ250dGFiX3N0YXR1 c192bV9hcmVhLmFyZWEtPmFkZHIpCisJCXB0ZXMgPSBnbnR0YWJfc3RhdHVzX3ZtX2FyZWEucHRl czsKKwllbHNlCisJCXB0ZXMgPSBnbnR0YWJfc2hhcmVkX3ZtX2FyZWEucHRlczsKKwogCWFkZHIg PSAodW5zaWduZWQgbG9uZylzaGFyZWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfZ2ZyYW1lczsg aSsrKSB7Ci0JCXNldF9wdGVfYXQoJmluaXRfbW0sIGFkZHIsIGdudHRhYl9zaGFyZWRfdm1fYXJl YS5wdGVzW2ldLAotCQkJICAgX19wdGUoMCkpOworCQlzZXRfcHRlX2F0KCZpbml0X21tLCBhZGRy LCBwdGVzW2ldLCBfX3B0ZSgwKSk7CiAJCWFkZHIgKz0gUEFHRV9TSVpFOwogCX0KIH0KQEAgLTEw MiwxMiArMTI5LDM1IEBAIHN0YXRpYyBpbnQgYXJjaF9nbnR0YWJfdmFsbG9jKHN0cnVjdCBnbnR0 YWJfdm1fYXJlYSAqYXJlYSwgdW5zaWduZWQgbnJfZnJhbWVzKQogCXJldHVybiAwOwogfQogCi1p bnQgYXJjaF9nbnR0YWJfaW5pdCh1bnNpZ25lZCBsb25nIG5yX3NoYXJlZCkKK3N0YXRpYyB2b2lk IGFyY2hfZ250dGFiX3ZmcmVlKHN0cnVjdCBnbnR0YWJfdm1fYXJlYSAqYXJlYSkKIHsKKwlmcmVl X3ZtX2FyZWEoYXJlYS0+YXJlYSk7CisJa2ZyZWUoYXJlYS0+cHRlcyk7Cit9CisKK2ludCBhcmNo X2dudHRhYl9pbml0KHVuc2lnbmVkIGxvbmcgbnJfc2hhcmVkLCB1bnNpZ25lZCBsb25nIG5yX3N0 YXR1cykKK3sKKwlpbnQgcmV0OworCiAJaWYgKCF4ZW5fcHZfZG9tYWluKCkpCiAJCXJldHVybiAw OwogCi0JcmV0dXJuIGFyY2hfZ250dGFiX3ZhbGxvYygmZ250dGFiX3NoYXJlZF92bV9hcmVhLCBu cl9zaGFyZWQpOworCXJldCA9IGFyY2hfZ250dGFiX3ZhbGxvYygmZ250dGFiX3NoYXJlZF92bV9h cmVhLCBucl9zaGFyZWQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkg KiBBbHdheXMgYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGZyYW1lcyBpbiBjYXNl CisJICogd2UncmUgbWlncmF0ZWQgdG8gYSBob3N0IHdpdGggVjIgc3VwcG9ydC4KKwkgKi8KKwly ZXQgPSBhcmNoX2dudHRhYl92YWxsb2MoJmdudHRhYl9zdGF0dXNfdm1fYXJlYSwgbnJfc3RhdHVz KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlhcmNo X2dudHRhYl92ZnJlZSgmZ250dGFiX3NoYXJlZF92bV9hcmVhKTsKKwlyZXR1cm4gLUVOT01FTTsK IH0KIAogI2lmZGVmIENPTkZJR19YRU5fUFZICmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ncmFu dC10YWJsZS5jIGIvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYwppbmRleCAyYzZhOTExNGQzMzIu LjY1YzRiZGIwYjQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYworKysg Yi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCkBAIC03MSw2ICs3MSw3IEBAIHN0cnVjdCBncmFu dF9mcmFtZXMgeGVuX2F1dG9feGxhdF9ncmFudF9mcmFtZXM7CiAKIHN0YXRpYyB1bmlvbiB7CiAJ c3RydWN0IGdyYW50X2VudHJ5X3YxICp2MTsKKwl1bmlvbiBncmFudF9lbnRyeV92MiAqdjI7CiAJ dm9pZCAqYWRkcjsKIH0gZ250dGFiX3NoYXJlZDsKIApAQCAtMTIxLDYgKzEyMiwyOSBAQCBzdHJ1 Y3QgZ250dGFiX29wcyB7CiAJICogYnkgYml0IG9wZXJhdGlvbnMuCiAJICovCiAJaW50ICgqcXVl cnlfZm9yZWlnbl9hY2Nlc3MpKGdyYW50X3JlZl90IHJlZik7CisJLyoKKwkgKiBHcmFudCBhIGRv bWFpbiB0byBhY2Nlc3MgYSByYW5nZSBvZiBieXRlcyB3aXRoaW4gdGhlIHBhZ2UgcmVmZXJyZWQg YnkKKwkgKiBhbiBhdmFpbGFibGUgZ3JhbnQgZW50cnkuIFJlZiBwYXJhbWV0ZXIgaXMgcmVmZXJl bmNlIG9mIGEgZ3JhbnQgZW50cnkKKwkgKiB3aGljaCB3aWxsIGJlIHN1Yi1wYWdlIGFjY2Vzc2Vk LCBkb21pZCBpcyBpZCBvZiBncmFudGVlIGRvbWFpbiwgZnJhbWUKKwkgKiBpcyBmcmFtZSBhZGRy ZXNzIG9mIHN1YnBhZ2UgZ3JhbnQsIGZsYWdzIGlzIGdyYW50IHR5cGUgYW5kIGZsYWcKKwkgKiBp bmZvcm1hdGlvbiwgcGFnZV9vZmYgaXMgb2Zmc2V0IG9mIHRoZSByYW5nZSBvZiBieXRlcywgYW5k IGxlbmd0aCBpcworCSAqIGxlbmd0aCBvZiBieXRlcyB0byBiZSBhY2Nlc3NlZC4KKwkgKi8KKwl2 b2lkICgqdXBkYXRlX3N1YnBhZ2VfZW50cnkpKGdyYW50X3JlZl90IHJlZiwgZG9taWRfdCBkb21p ZCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZnJhbWUsIGludCBmbGFncywKKwkJCQkgICAgIHVu c2lnbmVkIHBhZ2Vfb2ZmLCB1bnNpZ25lZCBsZW5ndGgpOworCS8qCisJICogUmVkaXJlY3QgYW4g YXZhaWxhYmxlIGdyYW50IGVudHJ5IG9uIGRvbWFpbiBBIHRvIGFub3RoZXIgZ3JhbnQKKwkgKiBy ZWZlcmVuY2Ugb2YgZG9tYWluIEIsIHRoZW4gYWxsb3cgZG9tYWluIEMgdG8gdXNlIGdyYW50IHJl ZmVyZW5jZQorCSAqIG9mIGRvbWFpbiBCIHRyYW5zaXRpdmVseS4gUmVmIHBhcmFtZXRlciBpcyBh biBhdmFpbGFibGUgZ3JhbnQgZW50cnkKKwkgKiByZWZlcmVuY2Ugb24gZG9tYWluIEEsIGRvbWlk IGlzIGlkIG9mIGRvbWFpbiBDIHdoaWNoIGFjY2Vzc2VzIGdyYW50CisJICogZW50cnkgdHJhbnNp dGl2ZWx5LCBmbGFncyBpcyBncmFudCB0eXBlIGFuZCBmbGFnIGluZm9ybWF0aW9uLAorCSAqIHRy YW5zX2RvbWlkIGlzIGlkIG9mIGRvbWFpbiBCIHdob3NlIGdyYW50IGVudHJ5IGlzIGZpbmFsbHkg YWNjZXNzZWQKKwkgKiB0cmFuc2l0aXZlbHksIHRyYW5zX2dyZWYgaXMgZ3JhbnQgZW50cnkgdHJh bnNpdGl2ZSByZWZlcmVuY2Ugb2YKKwkgKiBkb21haW4gQi4KKwkgKi8KKwl2b2lkICgqdXBkYXRl X3RyYW5zX2VudHJ5KShncmFudF9yZWZfdCByZWYsIGRvbWlkX3QgZG9taWQsIGludCBmbGFncywK KwkJCQkgICBkb21pZF90IHRyYW5zX2RvbWlkLCBncmFudF9yZWZfdCB0cmFuc19ncmVmKTsKIH07 CiAKIHN0cnVjdCB1bm1hcF9yZWZzX2NhbGxiYWNrX2RhdGEgewpAQCAtMTMwLDYgKzE1NCw5IEBA IHN0cnVjdCB1bm1hcF9yZWZzX2NhbGxiYWNrX2RhdGEgewogCiBzdGF0aWMgY29uc3Qgc3RydWN0 IGdudHRhYl9vcHMgKmdudHRhYl9pbnRlcmZhY2U7CiAKKy8qIFRoaXMgcmVmbGVjdHMgc3RhdHVz IG9mIGdyYW50IGVudHJpZXMsIHNvIGFjdCBhcyBhIGdsb2JhbCB2YWx1ZS4gKi8KK3N0YXRpYyBn cmFudF9zdGF0dXNfdCAqZ3JzdGF0dXM7CisKIHN0YXRpYyBpbnQgZ3JhbnRfdGFibGVfdmVyc2lv bjsKIHN0YXRpYyBpbnQgZ3JlZnNfcGVyX2dyYW50X2ZyYW1lOwogCkBAIC0xMzgsNiArMTY1LDcg QEAgc3RhdGljIHN0cnVjdCBnbnR0YWJfZnJlZV9jYWxsYmFjayAqZ250dGFiX2ZyZWVfY2FsbGJh Y2tfbGlzdDsKIHN0YXRpYyBpbnQgZ250dGFiX2V4cGFuZCh1bnNpZ25lZCBpbnQgcmVxX2VudHJp ZXMpOwogCiAjZGVmaW5lIFJQUCAoUEFHRV9TSVpFIC8gc2l6ZW9mKGdyYW50X3JlZl90KSkKKyNk ZWZpbmUgU1BQIChQQUdFX1NJWkUgLyBzaXplb2YoZ3JhbnRfc3RhdHVzX3QpKQogCiBzdGF0aWMg aW5saW5lIGdyYW50X3JlZl90ICpfX2dudHRhYl9lbnRyeShncmFudF9yZWZfdCBlbnRyeSkKIHsK QEAgLTIxMCw3ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCBwdXRfZnJlZV9lbnRyeShncmFudF9yZWZf dCByZWYpCiB9CiAKIC8qCi0gKiBGb2xsb3dpbmcgYXBwbGllcyB0byBnbnR0YWJfdXBkYXRlX2Vu dHJ5X3YxLgorICogRm9sbG93aW5nIGFwcGxpZXMgdG8gZ250dGFiX3VwZGF0ZV9lbnRyeV92MSBh bmQgZ250dGFiX3VwZGF0ZV9lbnRyeV92Mi4KICAqIEludHJvZHVjaW5nIGEgdmFsaWQgZW50cnkg aW50byB0aGUgZ3JhbnQgdGFibGU6CiAgKiAgMS4gV3JpdGUgZW50LT5kb21pZC4KICAqICAyLiBX cml0ZSBlbnQtPmZyYW1lOgpAQCAtMjI5LDYgKzI1NywxNSBAQCBzdGF0aWMgdm9pZCBnbnR0YWJf dXBkYXRlX2VudHJ5X3YxKGdyYW50X3JlZl90IHJlZiwgZG9taWRfdCBkb21pZCwKIAlnbnR0YWJf c2hhcmVkLnYxW3JlZl0uZmxhZ3MgPSBmbGFnczsKIH0KIAorc3RhdGljIHZvaWQgZ250dGFiX3Vw ZGF0ZV9lbnRyeV92MihncmFudF9yZWZfdCByZWYsIGRvbWlkX3QgZG9taWQsCisJCQkJICAgdW5z aWduZWQgbG9uZyBmcmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWdudHRhYl9zaGFyZWQu djJbcmVmXS5oZHIuZG9taWQgPSBkb21pZDsKKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0uZnVsbF9w YWdlLmZyYW1lID0gZnJhbWU7CisJd21iKCk7CS8qIEh5cGVydmlzb3IgY29uY3VycmVudCBhY2Nl c3Nlcy4gKi8KKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0uaGRyLmZsYWdzID0gR1RGX3Blcm1pdF9h Y2Nlc3MgfCBmbGFnczsKK30KKwogLyoKICAqIFB1YmxpYyBncmFudC1pc3N1aW5nIGludGVyZmFj ZSBmdW5jdGlvbnMKICAqLwpAQCAtMjU1LDExICsyOTIsMTMyIEBAIGludCBnbnR0YWJfZ3JhbnRf Zm9yZWlnbl9hY2Nlc3MoZG9taWRfdCBkb21pZCwgdW5zaWduZWQgbG9uZyBmcmFtZSwKIH0KIEVY UE9SVF9TWU1CT0xfR1BMKGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzcyk7CiAKK3N0YXRpYyB2 b2lkIGdudHRhYl91cGRhdGVfc3VicGFnZV9lbnRyeV92MihncmFudF9yZWZfdCByZWYsIGRvbWlk X3QgZG9taWQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZnJhbWUsIGludCBmbGFncywKKwkJCQkJ ICAgdW5zaWduZWQgcGFnZV9vZmYsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwlnbnR0YWJfc2hhcmVk LnYyW3JlZl0uc3ViX3BhZ2UuZnJhbWUgPSBmcmFtZTsKKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0u c3ViX3BhZ2UucGFnZV9vZmYgPSBwYWdlX29mZjsKKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0uc3Vi X3BhZ2UubGVuZ3RoID0gbGVuZ3RoOworCWdudHRhYl9zaGFyZWQudjJbcmVmXS5oZHIuZG9taWQg PSBkb21pZDsKKwl3bWIoKTsKKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0uaGRyLmZsYWdzID0KKwkJ CQlHVEZfcGVybWl0X2FjY2VzcyB8IEdURl9zdWJfcGFnZSB8IGZsYWdzOworfQorCitpbnQgZ250 dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3N1YnBhZ2VfcmVmKGdyYW50X3JlZl90IHJlZiwgZG9t aWRfdCBkb21pZCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZnJhbWUsIGludCBmbGFncywKKwkJ CQkJICAgIHVuc2lnbmVkIHBhZ2Vfb2ZmLAorCQkJCQkgICAgdW5zaWduZWQgbGVuZ3RoKQorewor CWlmIChmbGFncyAmIChHVEZfYWNjZXB0X3RyYW5zZmVyIHwgR1RGX3JlYWRpbmcgfAorCQkgICAg IEdURl93cml0aW5nIHwgR1RGX3RyYW5zaXRpdmUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYg KGdudHRhYl9pbnRlcmZhY2UtPnVwZGF0ZV9zdWJwYWdlX2VudHJ5ID09IE5VTEwpCisJCXJldHVy biAtRU5PU1lTOworCisJZ250dGFiX2ludGVyZmFjZS0+dXBkYXRlX3N1YnBhZ2VfZW50cnkocmVm LCBkb21pZCwgZnJhbWUsIGZsYWdzLAorCQkJCQkgICAgICAgcGFnZV9vZmYsIGxlbmd0aCk7CisK KwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdudHRhYl9ncmFudF9mb3JlaWduX2Fj Y2Vzc19zdWJwYWdlX3JlZik7CisKK2ludCBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3Nfc3Vi cGFnZShkb21pZF90IGRvbWlkLCB1bnNpZ25lZCBsb25nIGZyYW1lLAorCQkJCQlpbnQgZmxhZ3Ms IHVuc2lnbmVkIHBhZ2Vfb2ZmLAorCQkJCQl1bnNpZ25lZCBsZW5ndGgpCit7CisJaW50IHJlZiwg cmM7CisKKwlyZWYgPSBnZXRfZnJlZV9lbnRyaWVzKDEpOworCWlmICh1bmxpa2VseShyZWYgPCAw KSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlyYyA9IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vz c19zdWJwYWdlX3JlZihyZWYsIGRvbWlkLCBmcmFtZSwgZmxhZ3MsCisJCQkJCQkgICAgIHBhZ2Vf b2ZmLCBsZW5ndGgpOworCWlmIChyYyA8IDApIHsKKwkJcHV0X2ZyZWVfZW50cnkocmVmKTsKKwkJ cmV0dXJuIHJjOworCX0KKworCXJldHVybiByZWY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnbnR0 YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3Nfc3VicGFnZSk7CisKK2Jvb2wgZ250dGFiX3N1YnBhZ2Vf Z3JhbnRzX2F2YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBnbnR0YWJfaW50ZXJmYWNlLT51cGRh dGVfc3VicGFnZV9lbnRyeSAhPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX3N1 YnBhZ2VfZ3JhbnRzX2F2YWlsYWJsZSk7CisKK3N0YXRpYyB2b2lkIGdudHRhYl91cGRhdGVfdHJh bnNfZW50cnlfdjIoZ3JhbnRfcmVmX3QgcmVmLCBkb21pZF90IGRvbWlkLAorCQkJCQkgaW50IGZs YWdzLCBkb21pZF90IHRyYW5zX2RvbWlkLAorCQkJCQkgZ3JhbnRfcmVmX3QgdHJhbnNfZ3JlZikK K3sKKwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0udHJhbnNpdGl2ZS50cmFuc19kb21pZCA9IHRyYW5z X2RvbWlkOworCWdudHRhYl9zaGFyZWQudjJbcmVmXS50cmFuc2l0aXZlLmdyZWYgPSB0cmFuc19n cmVmOworCWdudHRhYl9zaGFyZWQudjJbcmVmXS5oZHIuZG9taWQgPSBkb21pZDsKKwl3bWIoKTsK KwlnbnR0YWJfc2hhcmVkLnYyW3JlZl0uaGRyLmZsYWdzID0KKwkJCQlHVEZfcGVybWl0X2FjY2Vz cyB8IEdURl90cmFuc2l0aXZlIHwgZmxhZ3M7Cit9CisKK2ludCBnbnR0YWJfZ3JhbnRfZm9yZWln bl9hY2Nlc3NfdHJhbnNfcmVmKGdyYW50X3JlZl90IHJlZiwgZG9taWRfdCBkb21pZCwKKwkJCQkJ ICBpbnQgZmxhZ3MsIGRvbWlkX3QgdHJhbnNfZG9taWQsCisJCQkJCSAgZ3JhbnRfcmVmX3QgdHJh bnNfZ3JlZikKK3sKKwlpZiAoZmxhZ3MgJiAoR1RGX2FjY2VwdF90cmFuc2ZlciB8IEdURl9yZWFk aW5nIHwKKwkJICAgICBHVEZfd3JpdGluZyB8IEdURl9zdWJfcGFnZSkpCisJCXJldHVybiAtRVBF Uk07CisKKwlpZiAoZ250dGFiX2ludGVyZmFjZS0+dXBkYXRlX3RyYW5zX2VudHJ5ID09IE5VTEwp CisJCXJldHVybiAtRU5PU1lTOworCisJZ250dGFiX2ludGVyZmFjZS0+dXBkYXRlX3RyYW5zX2Vu dHJ5KHJlZiwgZG9taWQsIGZsYWdzLCB0cmFuc19kb21pZCwKKwkJCQkJICAgICB0cmFuc19ncmVm KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX2dyYW50X2ZvcmVp Z25fYWNjZXNzX3RyYW5zX3JlZik7CisKK2ludCBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3Nf dHJhbnMoZG9taWRfdCBkb21pZCwgaW50IGZsYWdzLAorCQkJCSAgICAgIGRvbWlkX3QgdHJhbnNf ZG9taWQsCisJCQkJICAgICAgZ3JhbnRfcmVmX3QgdHJhbnNfZ3JlZikKK3sKKwlpbnQgcmVmLCBy YzsKKworCXJlZiA9IGdldF9mcmVlX2VudHJpZXMoMSk7CisJaWYgKHVubGlrZWx5KHJlZiA8IDAp KQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXJjID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNz X3RyYW5zX3JlZihyZWYsIGRvbWlkLCBmbGFncywKKwkJCQkJCSAgIHRyYW5zX2RvbWlkLCB0cmFu c19ncmVmKTsKKwlpZiAocmMgPCAwKSB7CisJCXB1dF9mcmVlX2VudHJ5KHJlZik7CisJCXJldHVy biByYzsKKwl9CisKKwlyZXR1cm4gcmVmOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX2dy YW50X2ZvcmVpZ25fYWNjZXNzX3RyYW5zKTsKKworYm9vbCBnbnR0YWJfdHJhbnNfZ3JhbnRzX2F2 YWlsYWJsZSh2b2lkKQoreworCXJldHVybiBnbnR0YWJfaW50ZXJmYWNlLT51cGRhdGVfdHJhbnNf ZW50cnkgIT0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdudHRhYl90cmFuc19ncmFudHNf YXZhaWxhYmxlKTsKKwogc3RhdGljIGludCBnbnR0YWJfcXVlcnlfZm9yZWlnbl9hY2Nlc3NfdjEo Z3JhbnRfcmVmX3QgcmVmKQogewogCXJldHVybiBnbnR0YWJfc2hhcmVkLnYxW3JlZl0uZmxhZ3Mg JiAoR1RGX3JlYWRpbmd8R1RGX3dyaXRpbmcpOwogfQogCitzdGF0aWMgaW50IGdudHRhYl9xdWVy eV9mb3JlaWduX2FjY2Vzc192MihncmFudF9yZWZfdCByZWYpCit7CisJcmV0dXJuIGdyc3RhdHVz W3JlZl0gJiAoR1RGX3JlYWRpbmd8R1RGX3dyaXRpbmcpOworfQorCiBpbnQgZ250dGFiX3F1ZXJ5 X2ZvcmVpZ25fYWNjZXNzKGdyYW50X3JlZl90IHJlZikKIHsKIAlyZXR1cm4gZ250dGFiX2ludGVy ZmFjZS0+cXVlcnlfZm9yZWlnbl9hY2Nlc3MocmVmKTsKQEAgLTI4Miw2ICs0NDAsMjkgQEAgc3Rh dGljIGludCBnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZl92MShncmFudF9yZWZfdCByZWYs IGludCByZWFkb25seSkKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBnbnR0YWJfZW5kX2Zv cmVpZ25fYWNjZXNzX3JlZl92MihncmFudF9yZWZfdCByZWYsIGludCByZWFkb25seSkKK3sKKwln bnR0YWJfc2hhcmVkLnYyW3JlZl0uaGRyLmZsYWdzID0gMDsKKwltYigpOwkvKiBDb25jdXJyZW50 IGFjY2VzcyBieSBoeXBlcnZpc29yLiAqLworCWlmIChncnN0YXR1c1tyZWZdICYgKEdURl9yZWFk aW5nfEdURl93cml0aW5nKSkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBU aGUgcmVhZCBvZiBncnN0YXR1cyBuZWVkcyB0byBoYXZlIGFjcXVpcmUgc2VtYW50aWNzLgorCQkg KiAgT24geDg2LCByZWFkcyBhbHJlYWR5IGhhdmUgdGhhdCwgYW5kIHdlIGp1c3QgbmVlZCB0bwor CQkgKiBwcm90ZWN0IGFnYWluc3QgY29tcGlsZXIgcmVvcmRlcmluZ3MuCisJCSAqIE9uIG90aGVy IGFyY2hpdGVjdHVyZXMgd2UgbWF5IG5lZWQgYSBmdWxsIGJhcnJpZXIuCisJCSAqLworI2lmZGVm IENPTkZJR19YODYKKwkJYmFycmllcigpOworI2Vsc2UKKwkJbWIoKTsKKyNlbmRpZgorCX0KKwor CXJldHVybiAxOworfQorCiBzdGF0aWMgaW5saW5lIGludCBfZ250dGFiX2VuZF9mb3JlaWduX2Fj Y2Vzc19yZWYoZ3JhbnRfcmVmX3QgcmVmLCBpbnQgcmVhZG9ubHkpCiB7CiAJcmV0dXJuIGdudHRh Yl9pbnRlcmZhY2UtPmVuZF9mb3JlaWduX2FjY2Vzc19yZWYocmVmLCByZWFkb25seSk7CkBAIC00 NDIsNiArNjIzLDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdudHRhYl9lbmRfZm9yZWlnbl90 cmFuc2Zlcl9yZWZfdjEoZ3JhbnRfcmVmX3QgcmVmKQogCXJldHVybiBmcmFtZTsKIH0KIAorc3Rh dGljIHVuc2lnbmVkIGxvbmcgZ250dGFiX2VuZF9mb3JlaWduX3RyYW5zZmVyX3JlZl92MihncmFu dF9yZWZfdCByZWYpCit7CisJdW5zaWduZWQgbG9uZyBmcmFtZTsKKwl1MTYgICAgICAgICAgIGZs YWdzOworCXUxNiAgICAgICAgICAqcGZsYWdzOworCisJcGZsYWdzID0gJmdudHRhYl9zaGFyZWQu djJbcmVmXS5oZHIuZmxhZ3M7CisKKwkvKgorCSAqIElmIGEgdHJhbnNmZXIgaXMgbm90IGV2ZW4g eWV0IHN0YXJ0ZWQsIHRyeSB0byByZWNsYWltIHRoZSBncmFudAorCSAqIHJlZmVyZW5jZSBhbmQg cmV0dXJuIGZhaWx1cmUgKD09IDApLgorCSAqLworCXdoaWxlICghKChmbGFncyA9ICpwZmxhZ3Mp ICYgR1RGX3RyYW5zZmVyX2NvbW1pdHRlZCkpIHsKKwkJaWYgKHN5bmNfY21weGNoZyhwZmxhZ3Ms IGZsYWdzLCAwKSA9PSBmbGFncykKKwkJCXJldHVybiAwOworCQljcHVfcmVsYXgoKTsKKwl9CisK KwkvKiBJZiBhIHRyYW5zZmVyIGlzIGluIHByb2dyZXNzIHRoZW4gd2FpdCB1bnRpbCBpdCBpcyBj b21wbGV0ZWQuICovCisJd2hpbGUgKCEoZmxhZ3MgJiBHVEZfdHJhbnNmZXJfY29tcGxldGVkKSkg eworCQlmbGFncyA9ICpwZmxhZ3M7CisJCWNwdV9yZWxheCgpOworCX0KKworCXJtYigpOyAgLyog UmVhZCB0aGUgZnJhbWUgbnVtYmVyIC9hZnRlci8gcmVhZGluZyBjb21wbGV0aW9uIHN0YXR1cy4g Ki8KKwlmcmFtZSA9IGdudHRhYl9zaGFyZWQudjJbcmVmXS5mdWxsX3BhZ2UuZnJhbWU7CisJQlVH X09OKGZyYW1lID09IDApOworCisJcmV0dXJuIGZyYW1lOworfQorCiB1bnNpZ25lZCBsb25nIGdu dHRhYl9lbmRfZm9yZWlnbl90cmFuc2Zlcl9yZWYoZ3JhbnRfcmVmX3QgcmVmKQogewogCXJldHVy biBnbnR0YWJfaW50ZXJmYWNlLT5lbmRfZm9yZWlnbl90cmFuc2Zlcl9yZWYocmVmKTsKQEAgLTkz OCw2ICsxMTUwLDEyIEBAIGludCBnbnR0YWJfdW5tYXBfcmVmc19zeW5jKHN0cnVjdCBnbnRhYl91 bm1hcF9xdWV1ZV9kYXRhICppdGVtKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX3VubWFw X3JlZnNfc3luYyk7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnJfc3RhdHVzX2ZyYW1lcyh1bnNp Z25lZCBpbnQgbnJfZ3JhbnRfZnJhbWVzKQoreworCUJVR19PTihncmVmc19wZXJfZ3JhbnRfZnJh bWUgPT0gMCk7CisJcmV0dXJuIChucl9ncmFudF9mcmFtZXMgKiBncmVmc19wZXJfZ3JhbnRfZnJh bWUgKyBTUFAgLSAxKSAvIFNQUDsKK30KKwogc3RhdGljIGludCBnbnR0YWJfbWFwX2ZyYW1lc192 MSh4ZW5fcGZuX3QgKmZyYW1lcywgdW5zaWduZWQgaW50IG5yX2dmcmFtZXMpCiB7CiAJaW50IHJj OwpAQCAtOTU1LDYgKzExNzMsNTUgQEAgc3RhdGljIHZvaWQgZ250dGFiX3VubWFwX2ZyYW1lc192 MSh2b2lkKQogCWFyY2hfZ250dGFiX3VubWFwKGdudHRhYl9zaGFyZWQuYWRkciwgbnJfZ3JhbnRf ZnJhbWVzKTsKIH0KIAorc3RhdGljIGludCBnbnR0YWJfbWFwX2ZyYW1lc192Mih4ZW5fcGZuX3Qg KmZyYW1lcywgdW5zaWduZWQgaW50IG5yX2dmcmFtZXMpCit7CisJdWludDY0X3QgKnNmcmFtZXM7 CisJdW5zaWduZWQgaW50IG5yX3NmcmFtZXM7CisJc3RydWN0IGdudHRhYl9nZXRfc3RhdHVzX2Zy YW1lcyBnZXRmcmFtZXM7CisJaW50IHJjOworCisJbnJfc2ZyYW1lcyA9IG5yX3N0YXR1c19mcmFt ZXMobnJfZ2ZyYW1lcyk7CisKKwkvKiBObyBuZWVkIGZvciBremFsbG9jIGFzIGl0IGlzIGluaXRp YWxpemVkIGluIGZvbGxvd2luZyBoeXBlcmNhbGwKKwkgKiBHTlRUQUJPUF9nZXRfc3RhdHVzX2Zy YW1lcy4KKwkgKi8KKwlzZnJhbWVzID0ga21hbGxvY19hcnJheShucl9zZnJhbWVzLCBzaXplb2Yo dWludDY0X3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNmcmFtZXMpCisJCXJldHVybiAtRU5PTUVN OworCisJZ2V0ZnJhbWVzLmRvbSAgICAgICAgPSBET01JRF9TRUxGOworCWdldGZyYW1lcy5ucl9m cmFtZXMgID0gbnJfc2ZyYW1lczsKKwlzZXRfeGVuX2d1ZXN0X2hhbmRsZShnZXRmcmFtZXMuZnJh bWVfbGlzdCwgc2ZyYW1lcyk7CisKKwlyYyA9IEhZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3AoR05U VEFCT1BfZ2V0X3N0YXR1c19mcmFtZXMsCisJCQkJICAgICAgICZnZXRmcmFtZXMsIDEpOworCWlm IChyYyA9PSAtRU5PU1lTKSB7CisJCWtmcmVlKHNmcmFtZXMpOworCQlyZXR1cm4gLUVOT1NZUzsK Kwl9CisKKwlCVUdfT04ocmMgfHwgZ2V0ZnJhbWVzLnN0YXR1cyk7CisKKwlyYyA9IGFyY2hfZ250 dGFiX21hcF9zdGF0dXMoc2ZyYW1lcywgbnJfc2ZyYW1lcywKKwkJCQkgICAgbnJfc3RhdHVzX2Zy YW1lcyhnbnR0YWJfbWF4X2dyYW50X2ZyYW1lcygpKSwKKwkJCQkgICAgJmdyc3RhdHVzKTsKKwlC VUdfT04ocmMpOworCWtmcmVlKHNmcmFtZXMpOworCisJcmMgPSBhcmNoX2dudHRhYl9tYXBfc2hh cmVkKGZyYW1lcywgbnJfZ2ZyYW1lcywKKwkJCQkgICAgZ250dGFiX21heF9ncmFudF9mcmFtZXMo KSwKKwkJCQkgICAgJmdudHRhYl9zaGFyZWQuYWRkcik7CisJQlVHX09OKHJjKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBnbnR0YWJfdW5tYXBfZnJhbWVzX3YyKHZvaWQpCit7CisJ YXJjaF9nbnR0YWJfdW5tYXAoZ250dGFiX3NoYXJlZC5hZGRyLCBucl9ncmFudF9mcmFtZXMpOwor CWFyY2hfZ250dGFiX3VubWFwKGdyc3RhdHVzLCBucl9zdGF0dXNfZnJhbWVzKG5yX2dyYW50X2Zy YW1lcykpOworfQorCiBzdGF0aWMgaW50IGdudHRhYl9tYXAodW5zaWduZWQgaW50IHN0YXJ0X2lk eCwgdW5zaWduZWQgaW50IGVuZF9pZHgpCiB7CiAJc3RydWN0IGdudHRhYl9zZXR1cF90YWJsZSBz ZXR1cDsKQEAgLTEwMjIsMTMgKzEyODksNDUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnbnR0YWJf b3BzIGdudHRhYl92MV9vcHMgPSB7CiAJLnF1ZXJ5X2ZvcmVpZ25fYWNjZXNzCQk9IGdudHRhYl9x dWVyeV9mb3JlaWduX2FjY2Vzc192MSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ250dGFi X29wcyBnbnR0YWJfdjJfb3BzID0geworCS5tYXBfZnJhbWVzCQkJPSBnbnR0YWJfbWFwX2ZyYW1l c192MiwKKwkudW5tYXBfZnJhbWVzCQkJPSBnbnR0YWJfdW5tYXBfZnJhbWVzX3YyLAorCS51cGRh dGVfZW50cnkJCQk9IGdudHRhYl91cGRhdGVfZW50cnlfdjIsCisJLmVuZF9mb3JlaWduX2FjY2Vz c19yZWYJCT0gZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWZfdjIsCisJLmVuZF9mb3JlaWdu X3RyYW5zZmVyX3JlZgk9IGdudHRhYl9lbmRfZm9yZWlnbl90cmFuc2Zlcl9yZWZfdjIsCisJLnF1 ZXJ5X2ZvcmVpZ25fYWNjZXNzCQk9IGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vzc192MiwKKwku dXBkYXRlX3N1YnBhZ2VfZW50cnkJCT0gZ250dGFiX3VwZGF0ZV9zdWJwYWdlX2VudHJ5X3YyLAor CS51cGRhdGVfdHJhbnNfZW50cnkJCT0gZ250dGFiX3VwZGF0ZV90cmFuc19lbnRyeV92MiwKK307 CisKIHN0YXRpYyB2b2lkIGdudHRhYl9yZXF1ZXN0X3ZlcnNpb24odm9pZCkKIHsKLQkvKiBPbmx5 IHZlcnNpb24gMSBpcyB1c2VkLCB3aGljaCB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUuICovCi0J Z3JhbnRfdGFibGVfdmVyc2lvbiA9IDE7Ci0JZ3JlZnNfcGVyX2dyYW50X2ZyYW1lID0gWEVOX1BB R0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgZ3JhbnRfZW50cnlfdjEpOwotCWdudHRhYl9pbnRlcmZh Y2UgPSAmZ250dGFiX3YxX29wczsKKwlpbnQgcmM7CisJc3RydWN0IGdudHRhYl9zZXRfdmVyc2lv biBnc3Y7CiAKKwlnc3YudmVyc2lvbiA9IDE7CisKKwlyYyA9IEhZUEVSVklTT1JfZ3JhbnRfdGFi bGVfb3AoR05UVEFCT1Bfc2V0X3ZlcnNpb24sICZnc3YsIDEpOworCWlmIChyYyA9PSAwICYmIGdz di52ZXJzaW9uID09IDIpIHsKKwkJZ3JhbnRfdGFibGVfdmVyc2lvbiA9IDI7CisJCWdyZWZzX3Bl cl9ncmFudF9mcmFtZSA9IFhFTl9QQUdFX1NJWkUgLworCQkJCQlzaXplb2YodW5pb24gZ3JhbnRf ZW50cnlfdjIpOworCQlnbnR0YWJfaW50ZXJmYWNlID0gJmdudHRhYl92Ml9vcHM7CisJfSBlbHNl IGlmIChncmFudF90YWJsZV92ZXJzaW9uID09IDIpIHsKKwkJLyoKKwkJICogSWYgd2UndmUgYWxy ZWFkeSB1c2VkIHZlcnNpb24gMiBmZWF0dXJlcywKKwkJICogYnV0IHRoZW4gc3VkZGVubHkgZGlz Y292ZXIgdGhhdCB0aGV5J3JlIG5vdAorCQkgKiBhdmFpbGFibGUgKGUuZy4gbWlncmF0aW5nIHRv IGFuIG9sZGVyCisJCSAqIHZlcnNpb24gb2YgWGVuKSwgYWxtb3N0IHVuYm91bmRlZCBiYWRuZXNz CisJCSAqIGNhbiBoYXBwZW4uCisJCSAqLworCQlwYW5pYygid2UgbmVlZCBncmFudCB0YWJsZXMg dmVyc2lvbiAyLCBidXQgb25seSB2ZXJzaW9uIDEgaXMgYXZhaWxhYmxlIik7CisJfSBlbHNlIHsK KwkJZ3JhbnRfdGFibGVfdmVyc2lvbiA9IDE7CisJCWdyZWZzX3Blcl9ncmFudF9mcmFtZSA9IFhF Tl9QQUdFX1NJWkUgLworCQkJCQlzaXplb2Yoc3RydWN0IGdyYW50X2VudHJ5X3YxKTsKKwkJZ250 dGFiX2ludGVyZmFjZSA9ICZnbnR0YWJfdjFfb3BzOworCX0KIAlwcl9pbmZvKCJHcmFudCB0YWJs ZXMgdXNpbmcgdmVyc2lvbiAlZCBsYXlvdXRcbiIsIGdyYW50X3RhYmxlX3ZlcnNpb24pOwogfQog CkBAIC0xMTIyLDcgKzE0MjEsOCBAQCBpbnQgZ250dGFiX2luaXQodm9pZCkKIAkJfQogCX0KIAot CXJldCA9IGFyY2hfZ250dGFiX2luaXQobWF4X25yX2dyYW50X2ZyYW1lcyk7CisJcmV0ID0gYXJj aF9nbnR0YWJfaW5pdChtYXhfbnJfZ3JhbnRfZnJhbWVzLAorCQkJICAgICAgIG5yX3N0YXR1c19m cmFtZXMobWF4X25yX2dyYW50X2ZyYW1lcykpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGluaV9u b21lbTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaCBiL2luY2x1ZGUv eGVuL2dyYW50X3RhYmxlLmgKaW5kZXggMzRiMTM3OWY5Nzc3Li5kZDZjN2EzMmVlMzIgMTAwNjQ0 Ci0tLSBhL2luY2x1ZGUveGVuL2dyYW50X3RhYmxlLmgKKysrIGIvaW5jbHVkZS94ZW4vZ3JhbnRf dGFibGUuaApAQCAtODQsNiArODQsMjQgQEAgaW50IGdudHRhYl9yZXN1bWUodm9pZCk7CiAKIGlu dCBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWRfdCBkb21pZCwgdW5zaWduZWQgbG9u ZyBmcmFtZSwKIAkJCQlpbnQgcmVhZG9ubHkpOworaW50IGdudHRhYl9ncmFudF9mb3JlaWduX2Fj Y2Vzc19zdWJwYWdlKGRvbWlkX3QgZG9taWQsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCisJCQkJCWlu dCBmbGFncywgdW5zaWduZWQgcGFnZV9vZmYsCisJCQkJCXVuc2lnbmVkIGxlbmd0aCk7CitpbnQg Z250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3RyYW5zKGRvbWlkX3QgZG9taWQsIGludCBmbGFn cywKKwkJCQkgICAgICBkb21pZF90IHRyYW5zX2RvbWlkLAorCQkJCSAgICAgIGdyYW50X3JlZl90 IHRyYW5zX2dyZWYpOworCisvKgorICogQXJlIHN1Yi1wYWdlIGdyYW50cyBhdmFpbGFibGUgb24g dGhpcyB2ZXJzaW9uIG9mIFhlbj8gIFJldHVybnMgdHJ1ZSBpZiB0aGV5CisgKiBhcmUsIGFuZCBm YWxzZSBpZiB0aGV5J3JlIG5vdC4KKyAqLworYm9vbCBnbnR0YWJfc3VicGFnZV9ncmFudHNfYXZh aWxhYmxlKHZvaWQpOworCisvKgorICogQXJlIHRyYW5zaXRpdmUgZ3JhbnRzIGF2YWlsYWJsZSBv biB0aGlzIHZlcnNpb24gb2YgWGVuPyAgUmV0dXJucyB0cnVlIGlmIHRoZXkKKyAqIGFyZSwgYW5k IGZhbHNlIGlmIHRoZXkncmUgbm90LgorICovCitib29sIGdudHRhYl90cmFuc19ncmFudHNfYXZh aWxhYmxlKHZvaWQpOwogCiAvKgogICogRW5kIGFjY2VzcyB0aHJvdWdoIHRoZSBnaXZlbiBncmFu dCByZWZlcmVuY2UsIGlmZiB0aGUgZ3JhbnQgZW50cnkgaXMgbm8KQEAgLTEzMCw2ICsxNDgsMTMg QEAgdm9pZCBnbnR0YWJfY2FuY2VsX2ZyZWVfY2FsbGJhY2soc3RydWN0IGdudHRhYl9mcmVlX2Nh bGxiYWNrICpjYWxsYmFjayk7CiAKIHZvaWQgZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3Jl ZihncmFudF9yZWZfdCByZWYsIGRvbWlkX3QgZG9taWQsCiAJCQkJICAgICB1bnNpZ25lZCBsb25n IGZyYW1lLCBpbnQgcmVhZG9ubHkpOworaW50IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzc19z dWJwYWdlX3JlZihncmFudF9yZWZfdCByZWYsIGRvbWlkX3QgZG9taWQsCisJCQkJCSAgICB1bnNp Z25lZCBsb25nIGZyYW1lLCBpbnQgZmxhZ3MsCisJCQkJCSAgICB1bnNpZ25lZCBwYWdlX29mZiwK KwkJCQkJICAgIHVuc2lnbmVkIGxlbmd0aCk7CitpbnQgZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNj ZXNzX3RyYW5zX3JlZihncmFudF9yZWZfdCByZWYsIGRvbWlkX3QgZG9taWQsCisJCQkJCSAgaW50 IGZsYWdzLCBkb21pZF90IHRyYW5zX2RvbWlkLAorCQkJCQkgIGdyYW50X3JlZl90IHRyYW5zX2dy ZWYpOwogCiAvKiBHaXZlIGFjY2VzcyB0byB0aGUgZmlyc3QgNEsgb2YgdGhlIHBhZ2UgKi8KIHN0 YXRpYyBpbmxpbmUgdm9pZCBnbnR0YWJfcGFnZV9ncmFudF9mb3JlaWduX2FjY2Vzc19yZWZfb25l KApAQCAtMTc0LDEwICsxOTksMTMgQEAgZ250dGFiX3NldF91bm1hcF9vcChzdHJ1Y3QgZ250dGFi X3VubWFwX2dyYW50X3JlZiAqdW5tYXAsIHBoeXNfYWRkcl90IGFkZHIsCiAJdW5tYXAtPmRldl9i dXNfYWRkciA9IDA7CiB9CiAKLWludCBhcmNoX2dudHRhYl9pbml0KHVuc2lnbmVkIGxvbmcgbnJf c2hhcmVkKTsKK2ludCBhcmNoX2dudHRhYl9pbml0KHVuc2lnbmVkIGxvbmcgbnJfc2hhcmVkLCB1 bnNpZ25lZCBsb25nIG5yX3N0YXR1cyk7CiBpbnQgYXJjaF9nbnR0YWJfbWFwX3NoYXJlZCh4ZW5f cGZuX3QgKmZyYW1lcywgdW5zaWduZWQgbG9uZyBucl9nZnJhbWVzLAogCQkJICAgdW5zaWduZWQg bG9uZyBtYXhfbnJfZ2ZyYW1lcywKIAkJCSAgIHZvaWQgKipfX3NoYXJlZCk7CitpbnQgYXJjaF9n bnR0YWJfbWFwX3N0YXR1cyh1aW50NjRfdCAqZnJhbWVzLCB1bnNpZ25lZCBsb25nIG5yX2dmcmFt ZXMsCisJCQkgICB1bnNpZ25lZCBsb25nIG1heF9ucl9nZnJhbWVzLAorCQkJICAgZ3JhbnRfc3Rh dHVzX3QgKipfX3NoYXJlZCk7CiB2b2lkIGFyY2hfZ250dGFiX3VubWFwKHZvaWQgKnNoYXJlZCwg dW5zaWduZWQgbG9uZyBucl9nZnJhbWVzKTsKIAogc3RydWN0IGdyYW50X2ZyYW1lcyB7Ci0tIAoy LjEyLjMKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlz dHMueGVuLm9yZy94ZW4tZGV2ZWwK