From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v2 08/15] drm/fbconv: Add plane-state check and update Date: Mon, 14 Oct 2019 16:04:09 +0200 Message-ID: <20191014140416.28517-9-tzimmermann@suse.de> References: <20191014140416.28517-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 59C486E503 for ; Mon, 14 Oct 2019 14:04:24 +0000 (UTC) In-Reply-To: <20191014140416.28517-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net List-Id: dri-devel@lists.freedesktop.org Rm9yIHRoZSB1cGRhdGUgb2YgdGhlIHByaW1hcnkgcGxhbmUsIHdlIGNvcHkgdGhlIGNvbnRlbnQg b2YgYSBTSE1FTSBidWZmZXIKb2JqZWN0IHRvIHRoZSBoYXJkd2FyZSdzIG9uLXNjcmVlbiBidWZm ZXI7IGRvaW5nIGEgZm9ybWF0IGNvbnZlcnNpb24gaWYKbmVjZXNzYXJ5LiBUaGlzIGlzIGFibGUg dG8gc3VwcG9ydCBhbGwgY29tYmluYXRpb25zIG9mIGZyYW1lYnVmZmVycyBhbmQKaGFyZHdhcmUs IGFuZCBzaG91bGQgd29yayB3aXRoIGFueSBmYmRldiBkcml2ZXIuCgpPY2Nhc2lvbmFsbHksIGZi ZGV2IGRyaXZlcnMgcmVxdWlyZSBhbiB1cGRhdGUgb2YgdGhlIGhhcmR3YXJlJ3MgZ2FtbWEKdGFi bGVzIHRvIG5vdCBzaG93IGRpc3RvcnRlZCBjb2xvcnMuIFdlIGFsc28gZG8gdGhpcyBkdXJpbmcg dGhlIHBsYW5lCnVwZGF0ZS4KClRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3IgaG9yaXpvbnRhbCBwYW5u aW5nLCBhcyBmYmRldiBkcml2ZXJzIHZhcnkgd2lkZWx5CmluIHRoZWlyIGNhcGFiaWxpdHkgdG8g ZG8gdGhpcy4gVmVydGljYWwgcGFubmluZyBpcyBzdXBwb3J0ZWQgdG8gdGhlCmV4dGVuZCBhbGxv d2VkIGJ5IGF2YWlsYWJsZSB2aWRlbyByYW0uIEhvd2V2ZXIsIHRoaXMgd2hvbGUgZnVuY3Rpb25h bGl0eQppcyBtb3JlIGludGVyZXN0aW5nIGZvciBwb3J0aW5nIGRyaXZlcnMgYW5kIG5vdCBkaXJl Y3RseSByZXF1aXJlZCBieQpmYmNvbnYgaXRzZWxmLgoKU2lnbmVkLW9mZi1ieTogVGhvbWFzIFpp bW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mYmNvbnZfaGVscGVy LmMgfCA1MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogaW5jbHVkZS9kcm0vZHJtX2Zi Y29udl9oZWxwZXIuaCAgICAgfCAgIDkgKwogMyBmaWxlcyBjaGFuZ2VkLCA1MDcgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGVkNjg5MjAxZWM4MS4uMmNlNzc0OWMz MTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZwpAQCAtMTYwLDYgKzE2MCw3IEBAIGNvbmZpZyBEUk1fRFBfQ0VDCiBjb25m aWcgRFJNX0ZCQ09OVl9IRUxQRVIKIAl0cmlzdGF0ZSAiRW5hYmxlIGZiZGV2IGNvbnZlcnNpb24g aGVscGVycyIKIAlkZXBlbmRzIG9uIERSTQorCXNlbGVjdCBEUk1fR0VNX1NITUVNX0hFTFBFUgog CWhlbHAKIAkgIFByb3ZpZGVzIGhlbHBlcnMgZm9yIHJ1bm5pbmcgRFJNIG9uIHRvcCBvZiBmYmRl diBkcml2ZXJzLiBDaG9vc2UKIAkgIHRoaXMgb3B0aW9uIGlmIHlvdSdyZSBjb252ZXJ0aW5nIGFu IGZiZGV2IGRyaXZlciB0byBEUk0uIFRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9mYmNvbnZfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiY29udl9oZWxwZXIuYwpp bmRleCA0Y2RhMWYxNWUwNzIuLmNmMjE4MDE2YWMwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2RybV9mYmNvbnZfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYmNvbnZf aGVscGVyLmMKQEAgLTUsMTIgKzUsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCiAjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kYW1hZ2Vf aGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9mYmNvbnZfaGVscGVyLmg+CiAjaW5jbHVkZSA8 ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Zvcm1hdF9oZWxwZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX2dlbV9mcmFtZWJ1ZmZlcl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+CiAj aW5jbHVkZSA8ZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9wcmludC5oPgogI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV92YmxhbmsuaD4KIAogLyoKICAqIEZvcm1hdCBjb252ZXJzaW9uIGhlbHBlcnMK QEAgLTcyOCwxMCArNzMzLDE5MiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgY29ubmVjdG9yX2Z1bmNzID0gewogCS5hdG9taWNfcHJpbnRfc3RhdGUgPSBOVUxMCiB9 OwogCisvKgorICogQ29sb3JtYXAgdXBkYXRlcworICovCisKKy8qIHByb3ZpZGVzIGEgZGVmYXVs dCBjb2xvcm1hcCBmb3IgcGFsZXR0ZSBtb2RlcyAqLworc3RhdGljIGludCBjcmVhdGVfcGFsZXR0 ZV9jbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl92 YXJfc2NyZWVuaW5mbyAqZmJfdmFyKQoreworCV9fdTMyIGxlbjsKKwljb25zdCBzdHJ1Y3QgZmJf Y21hcCAqZGVmYXVsdF9jbWFwOworCWludCByZXQ7CisKKwlsZW4gPSBtYXgzKGZiX3Zhci0+cmVk Lmxlbmd0aCwKKwkJICAgZmJfdmFyLT5ncmVlbi5sZW5ndGgsCisJCSAgIGZiX3Zhci0+Ymx1ZS5s ZW5ndGgpOworCWlmICghbGVuIHx8IChsZW4gPiAzMSkpIHsKKwkJRFJNX0VSUk9SKCJmYmNvbnY6 IEdhbW1hIExVVCBoYXMgaW52YWxpZCBiaXQgY291bnQgb2YgJXVcbiIsCisJCQkgICh1bnNpZ25l ZCBpbnQpbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGVmYXVsdF9jbWFwID0gZmJf ZGVmYXVsdF9jbWFwKDF1bCA8PCBsZW4pOworCWlmICghZGVmYXVsdF9jbWFwKSB7CisJCURSTV9F UlJPUigiZmJjb252OiBmYl9kZWZhdWx0X2NtYXAoKSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKGNtYXAsIGRlZmF1bHRfY21hcC0+bGVu LCAwKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmJjb252OiBmYl9hbGxvY19jbWFwKCkg ZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gZmJfY29weV9j bWFwKGRlZmF1bHRfY21hcCwgY21hcCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZiY29u djogZmJfY29weV9jbWFwKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZmJfZGVh bGxvY19jbWFwOworCX0KKworCXJldHVybiAwOworCitlcnJfZmJfZGVhbGxvY19jbWFwOgorCWZi X2RlYWxsb2NfY21hcChjbWFwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBwcm92aWRlcyBhIGxp bmVhciBjb2xvciByYW1wIGZvciBSR0IgbW9kZXMgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX2xpbmVh cl9jbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX3Zh cl9zY3JlZW5pbmZvICpmYl92YXIpCit7CisJaW50IHJldDsKKwlzaXplX3QgaTsKKwl1bnNpZ25l ZCBpbnQgajsKKwl1MTYgKmx1dDsKKwl1MTYgaW5jcjsKKwl1MTYgKmdhbW1hX2x1dFszXTsKKwlf X3UzMiBsZW47CisJY29uc3QgX191MzIgZ2FtbWFfbGVuWzNdID0geworCQlmYl92YXItPnJlZC5s ZW5ndGgsCisJCWZiX3Zhci0+Z3JlZW4ubGVuZ3RoLAorCQlmYl92YXItPmJsdWUubGVuZ3RoCisJ fTsKKworCWxlbiA9IG1heDMoZ2FtbWFfbGVuWzBdLCBnYW1tYV9sZW5bMV0sIGdhbW1hX2xlblsy XSk7CisJaWYgKCFsZW4gfHwgKGxlbiA+IDgpKSB7CisJCURSTV9FUlJPUigiZmJjb252OiBnYW1t YSBMVVQgaGFzIGludmFsaWQgYml0IGNvdW50IG9mICV1XG4iLAorCQkJICAodW5zaWduZWQgaW50 KWxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGZiX2FsbG9jX2NtYXAoY21h cCwgMXVsIDw8IGxlbiwgMCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZiY29udjogZmJf YWxsb2NfY21hcCgpIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJ Z2FtbWFfbHV0WzBdID0gY21hcC0+cmVkOworCWdhbW1hX2x1dFsxXSA9IGNtYXAtPmdyZWVuOwor CWdhbW1hX2x1dFsyXSA9IGNtYXAtPmJsdWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShnYW1tYV9sdXQpOyArK2kpIHsKKwkJbHV0ID0gZ2FtbWFfbHV0W2ldOworCQlsZW4gPSAxdWwg PDwgZ2FtbWFfbGVuW2ldOworCQlpbmNyID0gMHgxMDAwMHUgPj4gZ2FtbWFfbGVuW2ldOworCQlm b3IgKGogPSAwOyBqIDwgbGVuOyArK2osICsrbHV0KQorCQkJKmx1dCA9IGluY3IgKiBqOworCisJ CS8qIEluIG9yZGVyIHRvIGhhdmUgbm8gaW50ZW5zaXR5IGF0IGluZGV4IDAgYW5kIGZ1bGwKKwkJ ICogaW50ZW5zaXR5IGF0IHRoZSBmaW5hbCBpbmRleCBvZiB0aGUgTFVULCB3ZSBmaXgtdXAgdGhl CisJCSAqIHRhYmxlJ3MgZmluYWwgZW50cmllcy4gVGhlIGZpeC11cCBtYWtlcyBpbnRlbnNpdHkg Z3JvdworCQkgKiBmYXN0ZXIgbmVhciB0aGUgZmluYWwgZW50cmllcyBvZiB0aGUgZ2FtbWEgTFVU LiBUaGUgaHVtYW4KKwkJICogZXllIGlzIG1vcmUgc2Vuc2l0aXZlIHRvIGNoYW5nZXMgdG8gdGhl IGxvd2VyIGludGVuc2l0aWVzLAorCQkgKiBzbyB0aGlzIGlzIHByb2JhYmx5IG5vdCBkaXJlY3Rs eSBwZXJjZWl2YWJsZS4KKwkJICovCisJCWZvciAobHV0IC09IGdhbW1hX2xlbltpXSwgaiA9IGdh bW1hX2xlbltpXTsgaiA+IDA7ICsrbHV0KSB7CisJCQktLWo7CisJCQkvKiBzdWJ0cmFjdCAxIHRv IG5vdCBvdmVyZmxvdyB0aGUgTFVUJ3MgZmluYWwgZW50cnkgKi8KKwkJCSpsdXQgKz0gKGluY3Ig Pj4gaikgLSAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2Nt YXAoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJc3RydWN0IGZiX2NtYXAgY21hcDsKKwlp bnQgcmV0OworCisJbWVtc2V0KCZjbWFwLCAwLCBzaXplb2YoY21hcCkpOworCisJc3dpdGNoIChm Yl9pbmZvLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCXJl dCA9IGNyZWF0ZV9wYWxldHRlX2NtYXAoJmNtYXAsICZmYl9pbmZvLT52YXIpOworCQlicmVhazsK KwljYXNlIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUjoKKwkJcmV0ID0gY3JlYXRlX2xpbmVhcl9jbWFw KCZjbWFwLCAmZmJfaW5mby0+dmFyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7 CisJfQorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBmYl9zZXRfY21hcCgmY21h cCwgZmJfaW5mbyk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoImZiY29udjogZmJfc2V0X2Nt YXAoKSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mYl9kZWFsbG9jX2NtYXA7CisJ fQorCWZiX2RlYWxsb2NfY21hcCgmY21hcCk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZiX2RlYWxs b2NfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmNtYXApOworCXJldHVybiByZXQ7Cit9CisKIC8q CiAgKiBTaW1wbGUgZGlzcGxheSBwaXBlCiAgKi8KIAorc3RhdGljIHZvaWQgZHJtX2ZiY29udl91 cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9jcnRjX3N0YXRlKAorCXN0cnVjdCBmYl92YXJf c2NyZWVuaW5mbyAqZmJfdmFyLCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUpCit7 CisJZHJtX2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9tb2RlKAorCQlmYl92 YXIsICZjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlKTsKK30KKworc3RhdGljIGludCBkcm1fZmJj b252X3VwZGF0ZV9mYl92YXJfc2NyZWVuaW5mb19mcm9tX2ZyYW1lYnVmZmVyKAorCXN0cnVjdCBm Yl92YXJfc2NyZWVuaW5mbyAqZmJfdmFyLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwlz aXplX3QgdnJhbV9zaXplKQoreworCXVuc2lnbmVkIGludCB3aWR0aCwgcGl0Y2g7CisJdWludDY0 X3QgY3BwLCBsaW5lczsKKwlpbnQgcmV0OworCisJLyogT3VyIHZpcnR1YWwgc2NyZWVuIGNvdmVy cyBhbGwgdGhlIGdyYXBoaWNzIG1lbW9yeSAoc2FucyBzb21lCisJICogdHJhaWxpbmcgYnl0ZXMp LiBUaGlzIGFsbG93cyBmb3Igc2V0dGluZyB0aGUgc2Nhbm91dCBidWZmZXIncworCSAqIGFkZHJl c3Mgd2l0aCBmYl9wYW5fZGlzcGxheSgpLgorCSAqLworCisJd2lkdGggPSBmYi0+cGl0Y2hlc1sw XTsKKwljcHAgPSBmYi0+Zm9ybWF0WzBdLmNwcFswXTsKKwlkb19kaXYod2lkdGgsIGNwcCk7CisK KwlpZiAod2lkdGggPiAoX191MzIpLTEpCisJCXJldHVybiAtRUlOVkFMOyAvKiB3b3VsZCBvdmVy ZmxvdyBmYl92YXItPnhyZXNfdmlydHVhbCAqLworCisJcGl0Y2ggPSBmYi0+cGl0Y2hlc1swXTsK KwlsaW5lcyA9IHZyYW1fc2l6ZTsKKwlkb19kaXYobGluZXMsIHBpdGNoKTsKKworCWlmIChsaW5l cyA+IChfX3UzMiktMSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIHdvdWxkIG92ZXJmbG93IGZiX3Zh ci0+eXJlc192aXJ0dWFsICovCisKKwlmYl92YXItPnhyZXNfdmlydHVhbCA9IHdpZHRoOworCWZi X3Zhci0+eXJlc192aXJ0dWFsID0gbGluZXM7CisKKwlyZXQgPSBkcm1fZmJjb252X3VwZGF0ZV9m Yl92YXJfc2NyZWVuaW5mb19mcm9tX2Zvcm1hdCgKKwkJZmJfdmFyLCBmYi0+Zm9ybWF0WzBdLmZv cm1hdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCiAvKioK ICAqIGRybV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9tb2RlX3ZhbGlkIC0gZGVmYXVsdCBp bXBsZW1lbnRhdGlvbiBmb3IKICAqCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5j cy5tb2RlX3ZhbGlkCkBAIC03NjcsNiArOTU0LDUyIEBAIGJvb2wgZHJtX2ZiY29udl9zaW1wbGVf ZGlzcGxheV9waXBlX21vZGVfZml4dXAoCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYmNvbnZfc2lt cGxlX2Rpc3BsYXlfcGlwZV9tb2RlX2ZpeHVwKTsKIAorLyoqCisgKiBkcm1fZmJjb252X2JsaXRf cmVjdCAtIGNvcHkgYW4gYXJlYSBvZiBwaXhlbCBkYXRhIGZyb20gYSBmcmFtZWJ1ZmZlcgorICoJ dG8gdGhlIGhhcmR3YXJlIGJ1ZmZlcgorICogQGRzdDoJdGhlIG9uLXNjcmVlbiBoYXJkd2FyZSBi dWZmZXIKKyAqIEB2YWRkcjoJdGhlIHNvdXJjZSBidWZmZXIgaW4ga2VybmVsIGFkZHJlc3Mgc3Bh Y2UKKyAqIEBmYjoJCXRoZSBmcmFtZWJ1ZmZlciBvZiB0aGUgc291cmNlIGJ1ZmZlcgorICogQHJl Y3Q6CXRoZSBhcmVhIHRvIGNvcHkKKyAqIFJldHVybnM6CisgKgkwIG9uIHN1Y2Nlc3MsIG9yCisg KglhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g Y29waWVzIHRoZSBwaXhlbCBkYXRhIGZyb20gYSBEUk0gZnJhbWVidWZmZXIgdG8gYSBoYXJkd2Fy ZQorICogYnVmZmVyOyBkb2luZyBuZWNlc3NhcnkgZm9ybWF0IGNvbnZlcnNpb24gaW4gdGhlIHBy b2Nlc3MuIE5vdCBhbGwKKyAqIGNvbWJpbmF0aW9ucyBvZiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9u IGZvcm1hdHMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgKi8KK2ludCBkcm1fZmJjb252X2Js aXRfcmVjdCh2b2lkICpkc3QsIHZvaWQgKnZhZGRyLCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpm YiwKKwkJCSBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGZiLT5kZXY7CisKKwlpZiAoIXZhZGRyKQorCQlyZXR1cm4gMDsgLyogbm8gZnJhbWVidWZm ZXIgc2V0IGZvciBwbGFuZTsgbm8gZXJyb3IgKi8KKworCWlmIChkZXYtPm1vZGVfY29uZmlnLnBy ZWZlcnJlZF9kZXB0aCA9PSAoZmItPmZvcm1hdC0+Y3BwWzBdICogOCkpCisJCWRybV9mYl9tZW1j cHlfZHN0Y2xpcChkc3QsIHZhZGRyLCBmYiwgcmVjdCk7CisKKwllbHNlIGlmIChmYi0+Zm9ybWF0 LT5jcHBbMF0gPT0gNCAmJgorCQkgZGV2LT5tb2RlX2NvbmZpZy5wcmVmZXJyZWRfZGVwdGggPT0g MTYpCisJCWRybV9mYl94cmdiODg4OF90b19yZ2I1NjVfZHN0Y2xpcChkc3QsIGZiLT5waXRjaGVz WzBdLAorCQkJCQkJICB2YWRkciwgZmIsIHJlY3QsIGZhbHNlKTsKKworCWVsc2UgaWYgKGZiLT5m b3JtYXQtPmNwcFswXSA9PSA0ICYmCisJCSBkZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0 aCA9PSAyNCkKKwkJZHJtX2ZiX3hyZ2I4ODg4X3RvX3JnYjg4OF9kc3RjbGlwKGRzdCwgZmItPnBp dGNoZXNbMF0sCisJCQkJCQkgIHZhZGRyLCBmYiwgcmVjdCk7CisKKwllbHNlIHsKKwkJLyogVE9E TzogYWRkIHRoZSBtaXNzaW5nIGNvbnZlcnNpb24gKi8KKwkJRFJNX0VSUk9SKCJmYmNvbnY6IG1p c21hdGNoaW5nIHBpeGVsIGZvcm1hdHNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwly ZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2ZiY29udl9ibGl0X3JlY3QpOworCiAvKioK ICAqIGRybV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9lbmFibGUgLSBkZWZhdWx0IGltcGxl bWVudGF0aW9uIGZvcgogICoJc3RydWN0IGRybV9zaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzLmVu YWJsZQpAQCAtODAzLDYgKzEwMzYsMTAwIEBAIGRybV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlw ZV9jaGVjayhzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCiAJCQkJICAgICBz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKIAkJCQkgICAgIHN0cnVjdCBkcm1f Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKIHsKKwlzdHJ1Y3QgZHJtX2ZiY29udl9tb2Rlc2V0ICpt b2Rlc2V0OworCXN0cnVjdCBmYl92aWRlb21vZGUgZmJfbW9kZSwgZmJfdmFyX21vZGU7CisJaW50 IHJldDsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZmJfdmFyOworCisJLyoKKwkgKiBDUlRD IGNoZWNrCisJICovCisKKwltb2Rlc2V0ID0gZHJtX2ZiY29udl9tb2Rlc2V0X29mX3BpcGUocGlw ZSk7CisKKwkvKiBEUk0gcG9ydGluZyBub3Rlczogd2hlbiBmYmNvbiB0YWtlcyBvdmVyIHRoZSBj b25zb2xlLCBpdCByZWd1bGFybHkKKwkgKiBjaGFuZ2VzIHRoZSBkaXNwbGF5IG1vZGUuIFdoZXJl J3MgYXBwYXJlbnRseSBubyB3YXkgdG8gZGV0ZWN0IHRoaXMKKwkgKiBkaXJlY3RseSBmcm9tIGZi Y29uIGl0c2VsZi4gRFJNJ3MgbW9kZSBpbmZvcm1hdGlvbiBtaWdodCB0aGVyZWZvcmUKKwkgKiBi ZSBvdXQgb2YgZGF0YSwgYWZ0ZXIgaXQgdGFrZXMgb3ZlciB0aGUgZGlzcGxheSBhdCBhIGxhdGVy IHRpbWUuCisJICogSGVyZSwgd2UgdGVzdCB0aGUgQ1JUQydzIGN1cnJlbnQgbW9kZSB3aXRoIHRo ZSBmYmRldiBzdGF0ZS4gSWYgdGhleQorCSAqIGRvIG5vdCBtYXRjaCwgd2UgcmVxdWVzdCBhIG1v ZGUgY2hhbmdlIGZyb20gRFJNLiBJZiB5b3UgcG9ydCBhbgorCSAqIGZiZGV2IGRyaXZlciB0byBE Uk0sIHlvdSBjYW4gcmVtb3ZlIHRoaXMgY29kZSBzZWN0aW9uLCBEUk0gd2lsbAorCSAqIGJlIGlu IGZ1bGwgY29udHJvbCBvZiB0aGUgZGlzcGxheSBkZXZpY2UgYW5kIGRvZXNuJ3QgaGF2ZSB0byBy ZWFjdAorCSAqIHRvIGNoYW5nZXMgZnJvbSBleHRlcm5hbCBzb3VyY2VzLgorCSAqLworCisJaWYg KCFjcnRjX3N0YXRlLT5tb2RlX2NoYW5nZWQgJiYgY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5j bG9jaykgeworCQlkcm1fZmJjb252X2luaXRfZmJfdmlkZW9tb2RlX2Zyb21fbW9kZSgKKwkJCSZm Yl9tb2RlLCAmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZSk7CisJCWZiX3Zhcl90b192aWRlb21v ZGUoJmZiX3Zhcl9tb2RlLCAmbW9kZXNldC0+ZmJfaW5mby0+dmFyKTsKKwkJaWYgKCFmYl9tb2Rl X2lzX2VxdWFsKCZmYl9tb2RlLCAmZmJfdmFyX21vZGUpKQorCQkJY3J0Y19zdGF0ZS0+bW9kZV9j aGFuZ2VkID0gdHJ1ZTsKKwl9CisKKwkvKiBUT0RPOiBUaGUgdmJsYW5rIGludGVycnVwdCBpcyBj dXJyZW50bHkgbm90IHN1cHBvcnRlZC4gV2Ugc2V0CisJICogdGhlIGNvcnJlc3BvbmRpbmcgZmxh ZyBhcyBhIHdvcmthcm91bmQuIFNvbWUgZmJkZXYgZHJpdmVycworCSAqIHN1cHBvcnQgRkJJT19X QUlURk9SVlNZTkMsIHdoaWNoIHdlIG1pZ2h0IHVzZSBmb3IgcXVlcnlpbmcKKwkgKiB2Ymxhbmtz LgorCSAqCisJICogRFJNIHBvcnRpbmcgbm90ZXM6IGlmIHlvdSdyZSBwb3J0aW5nIGFuIGZiZGV2 IGRyaXZlciB0byBEUk0sCisJICogcmVtb3ZlIHRoaXMgbGluZSBhbmQgaW5zdGVhZCBzaWduYWwg YSB2YmxhbmsgZXZlbnQgZnJvbSB0aGUKKwkgKiBpbnRlcnJ1cHQgaGFuZGxlci4KKwkgKi8KKwlj cnRjX3N0YXRlLT5ub192YmxhbmsgPSB0cnVlOworCisJLyoKKwkgKiBQbGFuZSBjaGVjaworCSAq LworCisJaWYgKCFwbGFuZV9zdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZShwbGFuZV9zdGF0ZSwgY3J0Y19zdGF0ZSwK KwkJCQkJCSAgMSA8PCAxNiwgMSA8PCAxNiwKKwkJCQkJCSAgZmFsc2UsIHRydWUpOworCWlmIChy ZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFwbGFuZV9zdGF0ZS0+dmlzaWJsZSB8fCAh cGxhbmVfc3RhdGUtPmZiKQorCQlyZXR1cm4gMDsKKworCS8qIFZpcnR1YWwgc2NyZWVuIHNpemVz IGFyZSBub3Qgc3VwcG9ydGVkLgorCSAqLworCisJaWYgKGRybV9yZWN0X3dpZHRoKCZwbGFuZV9z dGF0ZS0+ZHN0KSAhPSBwbGFuZV9zdGF0ZS0+ZmItPndpZHRoIHx8CisJICAgIGRybV9yZWN0X2hl aWdodCgmcGxhbmVfc3RhdGUtPmRzdCkgIT0gcGxhbmVfc3RhdGUtPmZiLT5oZWlnaHQpIHsKKwkJ RFJNX0VSUk9SKCJmYmNvbnY6IHZpcnR1YWwgc2NyZWVuIHNpemVzIG5vdCBzdXBwb3J0ZWRcbiIp OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHBsYW5lX3N0YXRlLT5kc3QueDEgfHwgcGxh bmVfc3RhdGUtPmRzdC55MSkgeworCQlEUk1fRVJST1IoImZiY29udjogdmlydHVhbCBzY3JlZW4g b2Zmc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBQ aXhlbCBmb3JtYXRzIGhhdmUgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZiZGV2LiBUaGlzIGlzCisJ ICogdXN1YWxseSBzb21lIHZhcmlhdGlvbiBvZiBYUkdCLgorCSAqLworCisJaWYgKCFwaXBlLT5w bGFuZS5zdGF0ZSB8fAorCSAgICAhcGlwZS0+cGxhbmUuc3RhdGUtPmZiIHx8CisJICAgIHBpcGUt PnBsYW5lLnN0YXRlLT5mYi0+Zm9ybWF0WzBdLmZvcm1hdCAhPQorCQlwbGFuZV9zdGF0ZS0+ZmIt PmZvcm1hdFswXS5mb3JtYXQpIHsKKworCQlpZiAobW9kZXNldC0+ZmJfaW5mby0+ZmJvcHMtPmZi X2NoZWNrX3ZhcikgeworCQkJbWVtY3B5KCZmYl92YXIsICZtb2Rlc2V0LT5mYl9pbmZvLT52YXIs CisJCQkgICAgICAgc2l6ZW9mKGZiX3ZhcikpOworCQkJZHJtX2ZiY29udl91cGRhdGVfZmJfdmFy X3NjcmVlbmluZm9fZnJvbV9jcnRjX3N0YXRlKAorCQkJCSZmYl92YXIsIGNydGNfc3RhdGUpOwor CQkJZHJtX2ZiY29udl91cGRhdGVfZmJfdmFyX3NjcmVlbmluZm9fZnJvbV9mcmFtZWJ1ZmZlcigK KwkJCQkmZmJfdmFyLCBwbGFuZV9zdGF0ZS0+ZmIsCisJCQkJbW9kZXNldC0+ZmJfaW5mby0+Zml4 LnNtZW1fbGVuKTsKKwkJCXJldCA9IG1vZGVzZXQtPmZiX2luZm8tPmZib3BzLT5mYl9jaGVja192 YXIoCisJCQkJJmZiX3ZhciwgbW9kZXNldC0+ZmJfaW5mbyk7CisJCQlpZiAocmV0IDwgMCkKKwkJ CQlyZXR1cm4gcmV0OworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRy bV9mYmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9jaGVjayk7CkBAIC04MTYsNyArMTE0MywxMTkg QEAgRVhQT1JUX1NZTUJPTChkcm1fZmJjb252X3NpbXBsZV9kaXNwbGF5X3BpcGVfY2hlY2spOwog dm9pZAogZHJtX2ZiY29udl9zaW1wbGVfZGlzcGxheV9waXBlX3VwZGF0ZShzdHJ1Y3QgZHJtX3Np bXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCiAJCQkJICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqb2xkX3BsYW5lX3N0YXRlKQoteyB9Cit7CisJc3RydWN0IGRybV9mYmNvbnZfbW9kZXNldCAq bW9kZXNldDsKKwl1aW50MzJfdCBmb3JtYXQ7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIGZi X3ZhcjsKKwlpbnQgcmV0OworCWJvb2wgZG9fYmxpdDsKKwlzdHJ1Y3QgZHJtX3JlY3QgcmVjdDsK KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSAmcGlwZS0+Y3J0YzsKKworCS8qCisJICogUGxhbmUg dXBkYXRlCisJICovCisKKwltb2Rlc2V0ID0gZHJtX2ZiY29udl9tb2Rlc2V0X29mX3BpcGUocGlw ZSk7CisKKwlmb3JtYXQgPSBkcm1fZmJjb252X2Zvcm1hdF9vZl9mYl9pbmZvKG1vZGVzZXQtPmZi X2luZm8pOworCisJLyogRFJNIHBvcnRpbmcgbm90ZXM6IFNvbWUgZmJkZXYgZHJpdmVycyByZXBv cnQgYWxwaGEgY2hhbm5lbHMgZm9yCisJICogdGhlaXIgZnJhbWVidWZmZXIsIGV2ZW4gdGhvdWdo IHRoZXkgZG9uJ3Qgc3VwcG9ydCB0cmFuc3BhcmVudAorCSAqIHByaW1hcnkgcGxhbmVzLiBGb3Ig dGhlIGZvcm1hdCB0ZXN0IGJlbG93LCB3ZSBpZ25vcmUgdGhlIGFscGhhCisJICogY2hhbm5lbCBh bmQgdXNlIHRoZSBub24tdHJhbnNwYXJlbnQgZXF1aXZhbGVudCBvZiB0aGUgcGl4ZWwgZm9ybWF0 LgorCSAqIElmIHlvdSdyZSBwb3J0aW5nIGFuIGZiZGV2IGRyaXZlciB0byBEUk0sIHJlbW92ZSB0 aGlzIHN3aXRjaAorCSAqIHN0YXRlbWVudCBhbmQgcmVwb3J0IHRoZSBjb3JyZWN0IGZvcm1hdCBp bnN0ZWFkLgorCSAqLworCXN3aXRjaCAoZm9ybWF0KSB7CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4 ODg4OgorCQlmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4OworCQlicmVhazsKKwljYXNlIERS TV9GT1JNQVRfQUJHUjg4ODg6CisJCWZvcm1hdCA9IERSTV9GT1JNQVRfWEJHUjg4ODg7CisJCWJy ZWFrOworCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJZm9ybWF0ID0gRFJNX0ZPUk1BVF9S R0JYODg4ODsKKwkJYnJlYWs7CisJY2FzZSBEUk1fRk9STUFUX0JHUkE4ODg4OgorCQlmb3JtYXQg PSBEUk1fRk9STUFUX0JHUlg4ODg4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9 CisKKwlpZiAoIXBpcGUtPnBsYW5lLnN0YXRlLT5mYikgeworCQkvKiBObyBmcmFtZWJ1ZmZlciBp bnN0YWxsZWQ7IGJsYW5rIGRpc3BsYXkuICovCisJCWZiX2JsYW5rKG1vZGVzZXQtPmZiX2luZm8s IEZCX0JMQU5LX05PUk1BTCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGZvcm1hdCAhPSBwaXBl LT5wbGFuZS5zdGF0ZS0+ZmItPmZvcm1hdFswXS5mb3JtYXQpIHx8CisJICAgIChtb2Rlc2V0LT5m Yl9pbmZvLT52YXIueHJlc192aXJ0dWFsICE9CisJICAgIHBpcGUtPnBsYW5lLnN0YXRlLT5mYi0+ d2lkdGgpKSB7CisKKwkJLyogUGl4ZWwgZm9ybWF0IGNoYW5nZWQsIHVwZGF0ZSBmYl9pbmZvIGFj Y29yZGluZ2x5CisJCSAqLworCisJCW1lbWNweSgmZmJfdmFyLCAmbW9kZXNldC0+ZmJfaW5mby0+ dmFyLCBzaXplb2YoZmJfdmFyKSk7CisJCXJldCA9IGRybV9mYmNvbnZfdXBkYXRlX2ZiX3Zhcl9z Y3JlZW5pbmZvX2Zyb21fZnJhbWVidWZmZXIoCisJCQkmZmJfdmFyLCBwaXBlLT5wbGFuZS5zdGF0 ZS0+ZmIsCisJCQltb2Rlc2V0LT5mYl9pbmZvLT5maXguc21lbV9sZW4pOworCQlpZiAocmV0KQor CQkJcmV0dXJuOworCisJCWZiX3Zhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVzsKKworCQly ZXQgPSBmYl9zZXRfdmFyKG1vZGVzZXQtPmZiX2luZm8sICZmYl92YXIpOworCQlpZiAocmV0KSB7 CisJCQlEUk1fRVJST1IoImZiY29udjogZmJfc2V0X3ZhcigpIGZhaWxlZDogJWRcbiIsIHJldCk7 CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoIW9sZF9wbGFuZV9zdGF0ZS0+ZmIgfHwgLyog Zmlyc3QtdGltZSB1cGRhdGUgKi8KKwkgICAgKGZvcm1hdCAhPSBwaXBlLT5wbGFuZS5zdGF0ZS0+ ZmItPmZvcm1hdFswXS5mb3JtYXQpKSB7CisKKwkJLyogRFJNIHBvcnRpbmcgbm90ZXM6IEJlbG93 IHdlIHNldCB0aGUgTFVUcyBmb3IgcGFsZXR0ZSBhbmQKKwkJICogZ2FtbWEgY29ycmVjdGlvbi4g VGhpcyBpcyByZXF1aXJlZCBieSBzb21lIGZiZGV2IGRyaXZlcnMsCisJCSAqIHN1Y2ggYXMgbnZp ZGlhZmIgYW5kIGF0eWZiLCB3aGljaCBkb24ndCBpbml0aWFsaXplIHRoZQorCQkgKiB0YWJsZSB0 byBwYXNzLXRocm91Z2ggdGhlIGZyYW1lYnVmZmVyIHZhbHVlcyB1bmNoYW5nZWQuIFRoaXMKKwkJ ICogaXMgYWN0dWFsbHkgQ1JUQyBzdGF0ZSwgYnV0IHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9uCisJ CSAqIGNydGNfaGVscGVyX21vZGVfc2V0X25vZmIoKSBpcyBvbmx5IGNhbGxlZCB3aGVuIGEgQ1JU QworCQkgKiBwcm9wZXJ0eSBjaGFuZ2VzLCBjaGFuZ2VzIGluIGNvbG9yIGZvcm1hdHMgYXJlIG5v dCBoYW5kbGVkCisJCSAqIHRoZXJlLiBXaGVuIHlvdSdyZSBwb3J0aW5nIGEgZmJkZXYgZHJpdmVy IHRvIERSTSwgcmVtb3ZlCisJCSAqIHRoZSBjYWxsLiBHYW1tYSBMVVRzIGFyZSBDUlRDIHByb3Bl cnRpZXMgYW5kIHNob3VsZCBiZQorCQkgKiBoYW5kbGVkIHRoZXJlLiBFaXRoZXIgcmVtb3ZlIGdh bW1hIGNvcnJlY3Rpb24gb3Igc2V0IHVwCisJCSAqIHRoZSByZXNwZWN0aXZlIENSVEMgcHJvcGVy dGllcyBmb3IgdXNlcnNwYWNlLgorCQkgKi8KKwkJc2V0X2NtYXAobW9kZXNldC0+ZmJfaW5mbyk7 CisJfQorCisJbWVtY3B5KCZmYl92YXIsICZtb2Rlc2V0LT5mYl9pbmZvLT52YXIsIHNpemVvZihm Yl92YXIpKTsKKwlmYl92YXIueG9mZnNldCA9IDA7CisJZmJfdmFyLnlvZmZzZXQgPSAwOworCisJ cmV0ID0gZmJfcGFuX2Rpc3BsYXkobW9kZXNldC0+ZmJfaW5mbywgJmZiX3Zhcik7CisJaWYgKHJl dCkgeworCQlEUk1fRVJST1IoImZiY29udjogZmJfcGFuX2Rpc3BsYXkoKSBmYWlsZWQ6ICVkXG4i LCByZXQpOworCQlyZXR1cm47CisJfQorCisJZG9fYmxpdCA9IGRybV9hdG9taWNfaGVscGVyX2Rh bWFnZV9tZXJnZWQob2xkX3BsYW5lX3N0YXRlLAorCQkJCQkJICBwaXBlLT5wbGFuZS5zdGF0ZSwK KwkJCQkJCSAgJnJlY3QpOworCWlmIChkb19ibGl0KQorCQlkcm1fZmJjb252X2JsaXRfcmVjdCht b2Rlc2V0LT5ibGl0LnNjcmVlbl9iYXNlLAorCQkJCSAgICAgbW9kZXNldC0+YmxpdC52bWFwLCBw aXBlLT5wbGFuZS5zdGF0ZS0+ZmIsCisJCQkJICAgICAmcmVjdCk7CisKKwlpZiAoY3J0Yy0+c3Rh dGUtPmV2ZW50KSB7CisJCXNwaW5fbG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJ CWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KGNydGMsIGNydGMtPnN0YXRlLT5ldmVudCk7CisJ CWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ZGV2 LT5ldmVudF9sb2NrKTsKKwl9Cit9CiBFWFBPUlRfU1lNQk9MKGRybV9mYmNvbnZfc2ltcGxlX2Rp c3BsYXlfcGlwZV91cGRhdGUpOwogCiAvKioKQEAgLTgzNyw3ICsxMjc2LDQ4IEBAIEVYUE9SVF9T WU1CT0woZHJtX2ZiY29udl9zaW1wbGVfZGlzcGxheV9waXBlX3VwZGF0ZSk7CiBpbnQKIGRybV9m YmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fc2ltcGxlX2Rp c3BsYXlfcGlwZSAqcGlwZSwKIAkJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSkKLXsgfQoreworCXN0cnVjdCBkcm1fZmJjb252X21vZGVzZXQgKm1vZGVzZXQgPSBkcm1f ZmJjb252X21vZGVzZXRfb2ZfcGlwZShwaXBlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9 IG1vZGVzZXQtPmZiX2luZm87CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9z dGF0ZS0+ZmI7CisJYm9vbCB1bm1hcF9zY3JlZW5fYmFzZSA9IGZhbHNlOworCXZvaWQgKnNjcmVl bl9iYXNlOworCXZvaWQgKnZtYXA7CisJaW50IHJldDsKKworCWlmICghZmIpCisJCXJldHVybiAw OworCisJc2NyZWVuX2Jhc2UgPSBmYl9pbmZvLT5zY3JlZW5fYmFzZTsKKworCWlmICghc2NyZWVu X2Jhc2UpIHsKKwkJc2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGZiX2luZm8tPmZpeC5zbWVtX3N0YXJ0 LAorCQkJCSAgICAgIGZiX2luZm8tPmZpeC5zbWVtX2xlbik7CisJCWlmICghc2NyZWVuX2Jhc2Up IHsKKwkJCURSTV9FUlJPUigiZmJjb252OiBpb3JlbWFwKCkgZmFpbGVkXG4iKTsKKwkJCXJldHVy biAtRU5PTUVNOworCQl9CisJCXVubWFwX3NjcmVlbl9iYXNlID0gdHJ1ZTsKKwl9CisKKwl2bWFw ID0gZHJtX2dlbV9zaG1lbV92bWFwKGZiLT5vYmpbMF0pOworCWlmICghdm1hcCkgeworCQlEUk1f RVJST1IoImZiY29udjogZHJtX2dlbV9zaG1lbV92bWFwKCkgZmFpbGVkXG4iKTsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwltb2Rlc2V0LT5ibGl0LnZtYXAg PSB2bWFwOworCW1vZGVzZXQtPmJsaXQuc2NyZWVuX2Jhc2UgPSBzY3JlZW5fYmFzZTsKKwltb2Rl c2V0LT5ibGl0LnVubWFwX3NjcmVlbl9iYXNlID0gdW5tYXBfc2NyZWVuX2Jhc2U7CisKKwlyZXR1 cm4gMDsKKworZXJyX2lvdW5tYXA6CisJaWYgKHVubWFwX3NjcmVlbl9iYXNlKQorCQlpb3VubWFw KHNjcmVlbl9iYXNlKTsKKwlyZXR1cm4gcmV0OworfQogRVhQT1JUX1NZTUJPTChkcm1fZmJjb252 X3NpbXBsZV9kaXNwbGF5X3BpcGVfcHJlcGFyZV9mYik7CiAKIC8qKgpAQCAtODUzLDcgKzEzMzMs MjEgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJjb252X3NpbXBsZV9kaXNwbGF5X3BpcGVfcHJlcGFy ZV9mYik7CiB2b2lkCiBkcm1fZmJjb252X3NpbXBsZV9kaXNwbGF5X3BpcGVfY2xlYW51cF9mYihz dHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCiAJCQkJCSAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUpCi17IH0KK3sKKwlzdHJ1Y3QgZHJtX2ZiY29udl9tb2Rl c2V0ICptb2Rlc2V0ID0gZHJtX2ZiY29udl9tb2Rlc2V0X29mX3BpcGUocGlwZSk7CisJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7CisKKwlpZiAoIWZiKQorCQly ZXR1cm47CisKKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcChmYi0+b2JqWzBdLCBtb2Rlc2V0LT5ibGl0 LnZtYXApOworCisJaWYgKG1vZGVzZXQtPmJsaXQudW5tYXBfc2NyZWVuX2Jhc2UpCisJCWlvdW5t YXAobW9kZXNldC0+YmxpdC5zY3JlZW5fYmFzZSk7CisKKwltZW1zZXQoJm1vZGVzZXQtPmJsaXQs IDAsIHNpemVvZihtb2Rlc2V0LT5ibGl0KSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9mYmNvbnZf c2ltcGxlX2Rpc3BsYXlfcGlwZV9jbGVhbnVwX2ZiKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyBzaW1wbGVfZGlzcGxheV9waXBlX2Z1bmNzID0g ewogCS5tb2RlX3ZhbGlkID0gZHJtX2ZiY29udl9zaW1wbGVfZGlzcGxheV9waXBlX21vZGVfdmFs aWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJjb252X2hlbHBlci5oIGIvaW5jbHVk ZS9kcm0vZHJtX2ZiY29udl9oZWxwZXIuaAppbmRleCA3OTcxNmFmNjg3YzEuLjNlNjJiNWU4MGFm NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiY29udl9oZWxwZXIuaAorKysgYi9pbmNs dWRlL2RybS9kcm1fZmJjb252X2hlbHBlci5oCkBAIC05Miw2ICs5Miw5IEBAIHZvaWQKIGRybV9m YmNvbnZfc2ltcGxlX2Rpc3BsYXlfcGlwZV9jbGVhbnVwX2ZiKHN0cnVjdCBkcm1fc2ltcGxlX2Rp c3BsYXlfcGlwZSAqcGlwZSwKIAkJCQkJICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSk7CiAKK2ludCBkcm1fZmJjb252X2JsaXRfcmVjdCh2b2lkICpkc3QsIHZvaWQgKnZhZGRy LCBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKKwkJCSBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3Qp OworCiAvKgogICogTW9kZXNldCBoZWxwZXJzCiAgKi8KQEAgLTEwNyw2ICsxMTAsMTIgQEAgc3Ry dWN0IGRybV9mYmNvbnZfbW9kZXNldCB7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9y OwogCXN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSBwaXBlOwogCisJc3RydWN0IHsKKwkJ dm9pZCAqdm1hcDsKKwkJdm9pZCAqc2NyZWVuX2Jhc2U7CisJCWJvb2wgdW5tYXBfc2NyZWVuX2Jh c2U7CisJfSBibGl0OworCiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZmJfaW5m byAqZmJfaW5mbzsKIH07Ci0tIAoyLjIzLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==