From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v3 08/11] drm/fb-helper: Remove drm_fb_helper_connector Date: Sat, 20 Apr 2019 12:45:53 +0200 Message-ID: <20190420104556.31127-9-noralf@tronnes.org> References: <20190420104556.31127-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190420104556.31127-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: maxime.ripard@bootlin.com, daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= List-Id: intel-gfx@lists.freedesktop.org QWxsIGRyaXZlcnMgYWRkIGFsbCB0aGVpciBjb25uZWN0b3JzIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0 byBrZWVwIGFyb3VuZCBhbgphcnJheSBvZiBhdmFpbGFibGUgY29ubmVjdG9ycy4KClJlbmFtZSBm dW5jdGlvbnMgd2hpY2ggc2lnbmF0dXJlIGlzIGNoYW5nZWQgc2luY2UgdGhleSB3aWxsIGJlIG1v dmVkIHRvCmRybV9jbGllbnQgaW4gYSBsYXRlciBwYXRjaC4KClNpZ25lZC1vZmYtYnk6IE5vcmFs ZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L3Rv ZG8ucnN0ICAgICAgfCAgIDMgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyB8IDQ5 OCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW5jbHVkZS9kcm0vZHJtX2NsaWVu dC5oICAgICAgICB8ICAxNSArCiBpbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggICAgIHwgIDgw ICsrLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDE5MiBpbnNlcnRpb25zKCspLCA0MDQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgYi9Eb2N1bWVudGF0 aW9uL2dwdS90b2RvLnJzdAppbmRleCA4ZmEwOGI1ZmVhYjcuLmY2Y2RkMWMyNjc4OCAxMDA2NDQK LS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUv dG9kby5yc3QKQEAgLTMwNiw2ICszMDYsOSBAQCBkcm1fZmJfaGVscGVyIGNsZWFudXAgdGFza3MK IC0gVGhlIG1heCBjb25uZWN0b3IgYXJndW1lbnQgZm9yIGRybV9mYl9oZWxwZXJfaW5pdCgpIGFu ZAogICBkcm1fZmJfaGVscGVyX2ZiZGV2X3NldHVwKCkgaXNuJ3QgdXNlZCBhbnltb3JlIGFuZCBj YW4gYmUgcmVtb3ZlZC4KIAorLSBUaGUgaGVscGVyIGRvZXNuJ3Qga2VlcCBhbiBhcnJheSBvZiBj b25uZWN0b3JzIGFueW1vcmUgc28gdGhlc2UgY2FuIGJlCisgIHJlbW92ZWQ6IGRybV9mYl9oZWxw ZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycygpLAorICBkcm1fZmJfaGVscGVyX2FkZF9vbmVf Y29ubmVjdG9yKCkgYW5kIGRybV9mYl9oZWxwZXJfcmVtb3ZlX29uZV9jb25uZWN0b3IoKS4KIAog Q29yZSByZWZhY3RvcmluZ3MKID09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIu YwppbmRleCA4OGQyZjZkZWRmZjIuLjNhNTcyMTBjOWVjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBl ci5jCkBAIC05MCwxMiArOTAsNiBAQCBzdGF0aWMgREVGSU5FX01VVEVYKGtlcm5lbF9mYl9oZWxw ZXJfbG9jayk7CiAgKiBTZXR1cCBmYmRldiBlbXVsYXRpb24gYnkgY2FsbGluZyBkcm1fZmJfaGVs cGVyX2ZiZGV2X3NldHVwKCkgYW5kIHRlYXIgaXQKICAqIGRvd24gYnkgY2FsbGluZyBkcm1fZmJf aGVscGVyX2ZiZGV2X3RlYXJkb3duKCkuCiAgKgotICogRHJpdmVycyB0aGF0IG5lZWQgdG8gaGFu ZGxlIGNvbm5lY3RvciBob3RwbHVnZ2luZyAoZS5nLiBkcCBtc3QpIGNhbid0IHVzZQotICogdGhl IHNldHVwIGhlbHBlciBhbmQgd2lsbCBuZWVkIHRvIGRvIHRoZSB3aG9sZSBmb3VyLXN0ZXAgc2V0 dXAgcHJvY2VzcyB3aXRoCi0gKiBkcm1fZmJfaGVscGVyX3ByZXBhcmUoKSwgZHJtX2ZiX2hlbHBl cl9pbml0KCksCi0gKiBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoKSwg ZW5hYmxlIGhvdHBsdWdnaW5nIGFuZAotICogZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZygp IHRvIGF2b2lkIGEgcG9zc2libGUgcmFjZSB3aW5kb3cuCi0gKgogICogQXQgcnVudGltZSBkcml2 ZXJzIHNob3VsZCByZXN0b3JlIHRoZSBmYmRldiBjb25zb2xlIGJ5IHVzaW5nCiAgKiBkcm1fZmJf aGVscGVyX2xhc3RjbG9zZSgpIGFzIHRoZWlyICZkcm1fZHJpdmVyLmxhc3RjbG9zZSBjYWxsYmFj ay4KICAqIFRoZXkgc2hvdWxkIGFsc28gbm90aWZ5IHRoZSBmYiBoZWxwZXIgY29kZSBmcm9tIHVw ZGF0ZXMgdG8gdGhlIG91dHB1dApAQCAtMTE4LDggKzExMiw3IEBAIHN0YXRpYyBERUZJTkVfTVVU RVgoa2VybmVsX2ZiX2hlbHBlcl9sb2NrKTsKICAqIGVuY29kZXJzIGFuZCBjb25uZWN0b3JzLiBU byBmaW5pc2ggdXAgdGhlIGZiZGV2IGhlbHBlciBpbml0aWFsaXphdGlvbiwgdGhlCiAgKiBkcm1f ZmJfaGVscGVyX2luaXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQuIFRvIHByb2JlIGZvciBhbGwgYXR0 YWNoZWQgZGlzcGxheXMKICAqIGFuZCBzZXQgdXAgYW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIHVz aW5nIHRoZSBkZXRlY3RlZCBoYXJkd2FyZSwgZHJpdmVycwotICogc2hvdWxkIGNhbGwgZHJtX2Zi X2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKCkgZm9sbG93ZWQgYnkKLSAqIGRybV9m Yl9oZWxwZXJfaW5pdGlhbF9jb25maWcoKS4KKyAqIHNob3VsZCBjYWxsIGRybV9mYl9oZWxwZXJf aW5pdGlhbF9jb25maWcoKS4KICAqCiAgKiBJZiAmZHJtX2ZyYW1lYnVmZmVyX2Z1bmNzLmRpcnR5 IGlzIHNldCwgdGhlCiAgKiBkcm1fZmJfaGVscGVyX3tjZmIsc3lzfV97d3JpdGUsZmlsbHJlY3Qs Y29weWFyZWEsaW1hZ2VibGl0fSBmdW5jdGlvbnMgd2lsbApAQCAtMTMyLDE2NSArMTI1LDYgQEAg c3RhdGljIERFRklORV9NVVRFWChrZXJuZWxfZmJfaGVscGVyX2xvY2spOwogICogZGVmZXJyZWQg SS9PIChjb3VwbGVkIHdpdGggZHJtX2ZiX2hlbHBlcl9mYmRldl90ZWFyZG93bigpKS4KICAqLwog Ci0jZGVmaW5lIGRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiaCwgaV9fKSBcCi0J Zm9yICgoeyBsb2NrZGVwX2Fzc2VydF9oZWxkKCYoZmJoKS0+bG9jayk7IH0pLCBcCi0JICAgICBp X18gPSAwOyBpX18gPCAoZmJoKS0+Y29ubmVjdG9yX2NvdW50OyBpX18rKykKLQotc3RhdGljIGlu dCBfX2RybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIg KmZiX2hlbHBlciwKLQkJCQkJICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQot ewotCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfY29ubjsKLQlzdHJ1Y3QgZHJt X2ZiX2hlbHBlcl9jb25uZWN0b3IgKip0ZW1wOwotCXVuc2lnbmVkIGludCBjb3VudDsKLQotCWlm ICghZHJtX2ZiZGV2X2VtdWxhdGlvbikKLQkJcmV0dXJuIDA7Ci0KLQlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZmYl9oZWxwZXItPmxvY2spOwotCi0JY291bnQgPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9j b3VudCArIDE7Ci0KLQlpZiAoY291bnQgPiBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvX2FsbG9j X2NvdW50KSB7Ci0JCXNpemVfdCBzaXplID0gY291bnQgKiBzaXplb2YoZmJfY29ubik7Ci0KLQkJ dGVtcCA9IGtyZWFsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm8sIHNpemUsIEdGUF9LRVJO RUwpOwotCQlpZiAoIXRlbXApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlmYl9oZWxwZXItPmNv bm5lY3Rvcl9pbmZvX2FsbG9jX2NvdW50ID0gY291bnQ7Ci0JCWZiX2hlbHBlci0+Y29ubmVjdG9y X2luZm8gPSB0ZW1wOwotCX0KLQotCWZiX2Nvbm4gPSBremFsbG9jKHNpemVvZigqZmJfY29ubiks IEdGUF9LRVJORUwpOwotCWlmICghZmJfY29ubikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkcm1f Y29ubmVjdG9yX2dldChjb25uZWN0b3IpOwotCWZiX2Nvbm4tPmNvbm5lY3RvciA9IGNvbm5lY3Rv cjsKLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50 KytdID0gZmJfY29ubjsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZHJtX2ZiX2hlbHBlcl9hZGRf b25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCSAgICBz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCWludCBlcnI7Ci0KLQlpZiAoIWZi X2hlbHBlcikKLQkJcmV0dXJuIDA7Ci0KLQltdXRleF9sb2NrKCZmYl9oZWxwZXItPmxvY2spOwot CWVyciA9IF9fZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGNvbm5l Y3Rvcik7Ci0JbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmxvY2spOwotCi0JcmV0dXJuIGVycjsK LX0KLUVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5lY3Rvcik7Ci0KLS8q KgotICogZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKCkgLSBhZGQgYWxs IGNvbm5lY3RvcnMgdG8gZmJkZXYKLSAqIAkJCQkJICAgICAgIGVtdWxhdGlvbiBoZWxwZXIKLSAq IEBmYl9oZWxwZXI6IGZiZGV2IGluaXRpYWxpemVkIHdpdGggZHJtX2ZiX2hlbHBlcl9pbml0LCBj YW4gYmUgTlVMTAotICoKLSAqIFRoaXMgZnVuY3Rpb25zIGFkZHMgYWxsIHRoZSBhdmFpbGFibGUg Y29ubmVjdG9ycyBmb3IgdXNlIHdpdGggdGhlIGdpdmVuCi0gKiBmYl9oZWxwZXIuIFRoaXMgaXMg YSBzZXBhcmF0ZSBzdGVwIHRvIGFsbG93IGRyaXZlcnMgdG8gZnJlZWx5IGFzc2lnbgotICogY29u bmVjdG9ycyB0byB0aGUgZmJkZXYsIGUuZy4gaWYgc29tZSBhcmUgcmVzZXJ2ZWQgZm9yIHNwZWNp YWwgcHVycG9zZXMgb3IKLSAqIG5vdCBhZGVxdWF0ZSB0byBiZSB1c2VkIGZvciB0aGUgZmJjb24u Ci0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBjb25jdXJyZW50IGNv bm5lY3RvciBob3RhZGRzL3JlbW92YWxzCi0gKiB1c2luZyBkcm1fZmJfaGVscGVyX2FkZF9vbmVf Y29ubmVjdG9yKCkgYW5kCi0gKiBkcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKCku Ci0gKi8KLWludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKLXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owot CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jf bGlzdF9pdGVyIGNvbm5faXRlcjsKLQlpbnQgaSwgcmV0ID0gMDsKLQotCWlmICghZHJtX2ZiZGV2 X2VtdWxhdGlvbiB8fCAhZmJfaGVscGVyKQotCQlyZXR1cm4gMDsKLQotCWRldiA9IGZiX2hlbHBl ci0+ZGV2OwotCi0JbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9iZWdpbihkZXYsICZjb25uX2l0ZXIpOwotCWRybV9mb3JfZWFjaF9jb25uZWN0 b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKLQkJaWYgKGNvbm5lY3Rvci0+Y29ubmVj dG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSykKLQkJCWNvbnRpbnVlOwot Ci0JCXJldCA9IF9fZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGNv bm5lY3Rvcik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZhaWw7Ci0JfQotCWdvdG8gb3V0OwotCi1m YWlsOgotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewot CQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9jb25uZWN0b3IgPQot CQkJZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKLQotCQlkcm1fY29ubmVjdG9yX3B1dChm Yl9oZWxwZXJfY29ubmVjdG9yLT5jb25uZWN0b3IpOwotCi0JCWtmcmVlKGZiX2hlbHBlcl9jb25u ZWN0b3IpOwotCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldID0gTlVMTDsKLQl9Ci0JZmJf aGVscGVyLT5jb25uZWN0b3JfY291bnQgPSAwOwotb3V0OgotCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2VuZCgmY29ubl9pdGVyKTsKLQltdXRleF91bmxvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0K LQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRf YWxsX2Nvbm5lY3RvcnMpOwotCi1zdGF0aWMgaW50IF9fZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25l X2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCQkJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2hlbHBlcl9jb25uZWN0b3I7Ci0JaW50IGksIGo7Ci0KLQlpZiAoIWRybV9mYmRl dl9lbXVsYXRpb24pCi0JCXJldHVybiAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmZmJfaGVs cGVyLT5sb2NrKTsKLQotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBl ciwgaSkgewotCQlpZiAoZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yID09 IGNvbm5lY3RvcikKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IGZiX2hlbHBlci0+Y29ubmVj dG9yX2NvdW50KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmYl9oZWxwZXJfY29ubmVjdG9yID0gZmJf aGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKLQlkcm1fY29ubmVjdG9yX3B1dChmYl9oZWxwZXJf Y29ubmVjdG9yLT5jb25uZWN0b3IpOwotCi0JZm9yIChqID0gaSArIDE7IGogPCBmYl9oZWxwZXIt PmNvbm5lY3Rvcl9jb3VudDsgaisrKQotCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ogLSAx XSA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9bal07Ci0KLQlmYl9oZWxwZXItPmNvbm5lY3Rv cl9jb3VudC0tOwotCWtmcmVlKGZiX2hlbHBlcl9jb25uZWN0b3IpOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLWludCBkcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0JaW50IGVycjsKLQotCWlmICghZmJfaGVscGVyKQotCQlyZXR1cm4gMDsKLQot CW11dGV4X2xvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0JZXJyID0gX19kcm1fZmJfaGVscGVyX3Jl bW92ZV9vbmVfY29ubmVjdG9yKGZiX2hlbHBlciwgY29ubmVjdG9yKTsKLQltdXRleF91bmxvY2so JmZiX2hlbHBlci0+bG9jayk7Ci0KLQlyZXR1cm4gZXJyOwotfQotRVhQT1JUX1NZTUJPTChkcm1f ZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKTsKLQogc3RhdGljIHZvaWQgZHJtX2ZiX2hl bHBlcl9yZXN0b3JlX2x1dF9hdG9taWMoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXVpbnQx Nl90ICpyX2Jhc2UsICpnX2Jhc2UsICpiX2Jhc2U7CkBAIC02MzAsMjAgKzQ2NCw5IEBAIGludCBk cm1fZmJfaGVscGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCXJldHVybiByZXQ7 CiAJfQogCi0JZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mbyA9IGtjYWxsb2MoZGV2LT5tb2RlX2Nv bmZpZy5udW1fY29ubmVjdG9yLCBzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9y ICopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm8pCi0JCWdv dG8gb3V0X2ZyZWU7Ci0KLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvX2FsbG9jX2NvdW50ID0g ZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yOwotCWZiX2hlbHBlci0+Y29ubmVjdG9yX2Nv dW50ID0gMDsKLQogCWRldi0+ZmJfaGVscGVyID0gZmJfaGVscGVyOwogCiAJcmV0dXJuIDA7Ci1v dXRfZnJlZToKLQlkcm1fY2xpZW50X3JlbGVhc2UoJmZiX2hlbHBlci0+Y2xpZW50KTsKLQotCXJl dHVybiAtRU5PTUVNOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXQpOwogCkBA IC03MTgsNyArNTQxLDYgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3VucmVnaXN0ZXJf ZmJpKTsKIHZvaWQgZHJtX2ZiX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9o ZWxwZXIpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87Ci0JaW50IGk7CiAKIAlpZiAoIWZiX2hl bHBlcikKIAkJcmV0dXJuOwpAQCAtNzUxLDEyICs1NzMsNiBAQCB2b2lkIGRybV9mYl9oZWxwZXJf ZmluaShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCiAJaWYgKCFmYl9oZWxwZXIt PmNsaWVudC5mdW5jcykKIAkJZHJtX2NsaWVudF9yZWxlYXNlKCZmYl9oZWxwZXItPmNsaWVudCk7 Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQ7IGkrKykgewot CQlkcm1fY29ubmVjdG9yX3B1dChmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25uZWN0 b3IpOwotCQlrZnJlZShmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldKTsKLQl9Ci0Ja2ZyZWUo ZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mbyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxw ZXJfZmluaSk7CiAKQEAgLTE2MzUsOCArMTQ1MSw5IEBAIHN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBl cl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAlzdHJ1 Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKIAlpbnQgcmV0 ID0gMDsKIAlpbnQgY3J0Y19jb3VudCA9IDA7Ci0JaW50IGk7CisJc3RydWN0IGRybV9jb25uZWN0 b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3Np emUgc2l6ZXM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZHJt X21vZGVfc2V0ICptb2RlX3NldDsKIAlpbnQgYmVzdF9kZXB0aCA9IDA7CiAKQEAgLTE2NTMsMTEg KzE0NzAsMTEgQEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWlmIChwcmVmZXJyZWRfYnBwICE9IHNpemVz LnN1cmZhY2VfYnBwKQogCQlzaXplcy5zdXJmYWNlX2RlcHRoID0gc2l6ZXMuc3VyZmFjZV9icHAg PSBwcmVmZXJyZWRfYnBwOwogCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJf aGVscGVyLCBpKSB7Ci0JCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscGVy X2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOworCWRybV9jb25uZWN0b3JfbGlz dF9pdGVyX2JlZ2luKGZiX2hlbHBlci0+ZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fY2xpZW50X2Zv cl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgewogCQlzdHJ1Y3Qg ZHJtX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOwogCi0JCWNtZGxpbmVfbW9kZSA9ICZmYl9o ZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5jbWRsaW5lX21vZGU7CisJCWNtZGxpbmVfbW9kZSA9ICZj b25uZWN0b3ItPmNtZGxpbmVfbW9kZTsKIAogCQlpZiAoY21kbGluZV9tb2RlLT5icHBfc3BlY2lm aWVkKSB7CiAJCQlzd2l0Y2ggKGNtZGxpbmVfbW9kZS0+YnBwKSB7CkBAIC0xNjgyLDYgKzE0OTks NyBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQlicmVhazsKIAkJfQogCX0KKwlkcm1fY29ubmVjdG9y X2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7CiAKIAkvKgogCSAqIElmIHdlIHJ1biBpbnRvIGEg c2l0dWF0aW9uIHdoZXJlLCBmb3IgZXhhbXBsZSwgdGhlIHByaW1hcnkgcGxhbmUKQEAgLTE4NjYs MjYgKzE2ODQsMTIgQEAgdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfaW5mbyhzdHJ1Y3QgZmJfaW5m byAqaW5mbywKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9maWxsX2luZm8pOwogCi1z dGF0aWMgaW50IGRybV9mYl9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCi0JCQkJCQl1aW50MzJfdCBtYXhYLAotCQkJCQkJdWludDMy X3QgbWF4WSkKLXsKLQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCWludCBpLCBj b3VudCA9IDA7Ci0KLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIs IGkpIHsKLQkJY29ubmVjdG9yID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVj dG9yOwotCQljb3VudCArPSBjb25uZWN0b3ItPmZ1bmNzLT5maWxsX21vZGVzKGNvbm5lY3Rvciwg bWF4WCwgbWF4WSk7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqZHJtX2hhc19wcmVmZXJyZWRfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2Nvbm5lY3RvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGljIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICoKK2RybV9jb25uZWN0b3JfaGFzX3ByZWZlcnJlZF9tb2RlKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsK IAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnko bW9kZSwgJmZiX2Nvbm5lY3Rvci0+Y29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCWxpc3RfZm9y X2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKIAkJaWYgKG1vZGUt PmhkaXNwbGF5ID4gd2lkdGggfHwKIAkJICAgIG1vZGUtPnZkaXNwbGF5ID4gaGVpZ2h0KQogCQkJ Y29udGludWU7CkBAIC0xODk0LDIwICsxNjk4LDE1IEBAIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICpkcm1faGFzX3ByZWZlcnJlZF9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAq CiAJfQogCXJldHVybiBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChkcm1faGFzX3ByZWZlcnJlZF9t b2RlKTsKIAotc3RhdGljIGJvb2wgZHJtX2hhc19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9mYl9o ZWxwZXJfY29ubmVjdG9yICpmYl9jb25uZWN0b3IpCi17Ci0JcmV0dXJuIGZiX2Nvbm5lY3Rvci0+ Y29ubmVjdG9yLT5jbWRsaW5lX21vZGUuc3BlY2lmaWVkOwotfQotCi1zdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqZHJtX3BpY2tfY21kbGluZV9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5l Y3RvciAqZmJfaGVscGVyX2Nvbm4pCitzdGF0aWMgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKgor ZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yKQogewogCXN0cnVjdCBkcm1fY21kbGluZV9tb2RlICpjbWRsaW5lX21vZGU7CiAJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAJYm9vbCBwcmVmZXJfbm9uX2ludGVybGFjZTsK IAotCWNtZGxpbmVfbW9kZSA9ICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5jbWRsaW5lX21v ZGU7CisJY21kbGluZV9tb2RlID0gJmNvbm5lY3Rvci0+Y21kbGluZV9tb2RlOwogCWlmIChjbWRs aW5lX21vZGUtPnNwZWNpZmllZCA9PSBmYWxzZSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE5MTks NyArMTcxOCw3IEBAIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fcGlja19jbWRsaW5lX21v ZGUoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmCiAKIAlwcmVmZXJfbm9uX2ludGVy bGFjZSA9ICFjbWRsaW5lX21vZGUtPmludGVybGFjZTsKIGFnYWluOgotCWxpc3RfZm9yX2VhY2hf ZW50cnkobW9kZSwgJmZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJ bGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgewogCQkv KiBjaGVjayB3aWR0aC9oZWlnaHQgKi8KIAkJaWYgKG1vZGUtPmhkaXNwbGF5ICE9IGNtZGxpbmVf bW9kZS0+eHJlcyB8fAogCQkgICAgbW9kZS0+dmRpc3BsYXkgIT0gY21kbGluZV9tb2RlLT55cmVz KQpAQCAtMTk0NiwxMiArMTc0NSwxMSBAQCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX3Bp Y2tfY21kbGluZV9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZgogCX0KIAog Y3JlYXRlX21vZGU6Ci0JbW9kZSA9IGRybV9tb2RlX2NyZWF0ZV9mcm9tX2NtZGxpbmVfbW9kZShm Yl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5kZXYsCi0JCQkJCQkgY21kbGluZV9tb2RlKTsKLQls aXN0X2FkZCgmbW9kZS0+aGVhZCwgJmZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPm1vZGVzKTsK Kwltb2RlID0gZHJtX21vZGVfY3JlYXRlX2Zyb21fY21kbGluZV9tb2RlKGNvbm5lY3Rvci0+ZGV2 LCBjbWRsaW5lX21vZGUpOworCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rl cyk7CisKIAlyZXR1cm4gbW9kZTsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX3BpY2tfY21kbGluZV9t b2RlKTsKIAogc3RhdGljIGJvb2wgZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsIGJvb2wgc3RyaWN0KQogewpAQCAtMTk2OCwxNSArMTc2NiwxNiBA QCBzdGF0aWMgYm9vbCBkcm1fY29ubmVjdG9yX2VuYWJsZWQoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwgYm9vbCBzdHJpY3QpCiAJcmV0dXJuIGVuYWJsZTsKIH0KIAotc3RhdGljIHZv aWQgZHJtX2VuYWJsZV9jb25uZWN0b3JzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIs Ci0JCQkJICBib29sICplbmFibGVkKQorc3RhdGljIHZvaWQgZHJtX2NsaWVudF9jb25uZWN0b3Jz X2VuYWJsZWQoc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAorCQkJCQkgIHVuc2ln bmVkIGludCBjb25uZWN0b3JfY291bnQsCisJCQkJCSAgYm9vbCAqZW5hYmxlZCkKIHsKIAlib29s IGFueV9lbmFibGVkID0gZmFsc2U7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsK IAlpbnQgaSA9IDA7CiAKLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxw ZXIsIGkpIHsKLQkJY29ubmVjdG9yID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29u bmVjdG9yOworCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykgeworCQljb25u ZWN0b3IgPSBjb25uZWN0b3JzW2ldOwogCQllbmFibGVkW2ldID0gZHJtX2Nvbm5lY3Rvcl9lbmFi bGVkKGNvbm5lY3RvciwgdHJ1ZSk7CiAJCURSTV9ERUJVR19LTVMoImNvbm5lY3RvciAlZCBlbmFi bGVkPyAlc1xuIiwgY29ubmVjdG9yLT5iYXNlLmlkLAogCQkJICAgICAgY29ubmVjdG9yLT5kaXNw bGF5X2luZm8ubm9uX2Rlc2t0b3AgPyAibm9uIGRlc2t0b3AiIDogZW5hYmxlZFtpXSA/ICJ5ZXMi IDogIm5vIik7CkBAIC0xOTg3LDI4ICsxNzg2LDI3IEBAIHN0YXRpYyB2b2lkIGRybV9lbmFibGVf Y29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWlmIChhbnlfZW5h YmxlZCkKIAkJcmV0dXJuOwogCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJf aGVscGVyLCBpKSB7Ci0JCWNvbm5lY3RvciA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV0t PmNvbm5lY3RvcjsKLQkJZW5hYmxlZFtpXSA9IGRybV9jb25uZWN0b3JfZW5hYmxlZChjb25uZWN0 b3IsIGZhbHNlKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKQor CQllbmFibGVkW2ldID0gZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKGNvbm5lY3RvcnNbaV0sIGZhbHNl KTsKIH0KIAotc3RhdGljIGJvb2wgZHJtX3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwKLQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMs Ci0JCQkgICAgICBzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKLQkJCSAgICAgIGJvb2wg KmVuYWJsZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBib29sIGRybV9jbGllbnRf dGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRy bV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNvbm5lY3Rv cl9jb3VudCwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJ ICAgICBzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKKwkJCQkgICAgIGJvb2wgKmVuYWJs ZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKIAlpbnQgY291bnQsIGksIGo7CiAJYm9vbCBj YW5fY2xvbmUgPSBmYWxzZTsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hl bHBlcl9jb25uOwogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkbXRfbW9kZSwgKm1vZGU7CiAK IAkvKiBvbmx5IGNvbnRlbXBsYXRlIGNsb25pbmcgaW4gdGhlIHNpbmdsZSBjcnRjIGNhc2UgKi8K LQlpZiAoZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjID4gMSkKKwlpZiAoZGV2 LT5tb2RlX2NvbmZpZy5udW1fY3J0YyA+IDEpCiAJCXJldHVybiBmYWxzZTsKIAogCWNvdW50ID0g MDsKLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKKwlm b3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspIHsKIAkJaWYgKGVuYWJsZWRbaV0p CiAJCQljb3VudCsrOwogCX0KQEAgLTIwMTksMTEgKzE4MTcsMTAgQEAgc3RhdGljIGJvb2wgZHJt X3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAogCS8qIGNo ZWNrIHRoZSBjb21tYW5kIGxpbmUgb3IgaWYgbm90aGluZyBjb21tb24gcGljayAxMDI0eDc2OCAq LwogCWNhbl9jbG9uZSA9IHRydWU7Ci0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3Io ZmJfaGVscGVyLCBpKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7 CiAJCWlmICghZW5hYmxlZFtpXSkKIAkJCWNvbnRpbnVlOwotCQlmYl9oZWxwZXJfY29ubiA9IGZi X2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07Ci0JCW1vZGVzW2ldID0gZHJtX3BpY2tfY21kbGlu ZV9tb2RlKGZiX2hlbHBlcl9jb25uKTsKKwkJbW9kZXNbaV0gPSBkcm1fY29ubmVjdG9yX3BpY2tf Y21kbGluZV9tb2RlKGNvbm5lY3RvcnNbaV0pOwogCQlpZiAoIW1vZGVzW2ldKSB7CiAJCQljYW5f Y2xvbmUgPSBmYWxzZTsKIAkJCWJyZWFrOwpAQCAtMjA0NywxNCArMTg0NCwxMyBAQCBzdGF0aWMg Ym9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAog CiAJLyogdHJ5IGFuZCBmaW5kIGEgMTAyNHg3NjggbW9kZSBvbiBlYWNoIGNvbm5lY3RvciAqLwog CWNhbl9jbG9uZSA9IHRydWU7Ci0JZG10X21vZGUgPSBkcm1fbW9kZV9maW5kX2RtdChmYl9oZWxw ZXItPmRldiwgMTAyNCwgNzY4LCA2MCwgZmFsc2UpOworCWRtdF9tb2RlID0gZHJtX21vZGVfZmlu ZF9kbXQoZGV2LCAxMDI0LCA3NjgsIDYwLCBmYWxzZSk7CiAKLQlkcm1fZmJfaGVscGVyX2Zvcl9l YWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9y X2NvdW50OyBpKyspIHsKIAkJaWYgKCFlbmFibGVkW2ldKQogCQkJY29udGludWU7CiAKLQkJZmJf aGVscGVyX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwotCQlsaXN0X2Zvcl9l YWNoX2VudHJ5KG1vZGUsICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5tb2RlcywgaGVhZCkg eworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUsICZjb25uZWN0b3JzW2ldLT5tb2RlcywgaGVh ZCkgewogCQkJaWYgKGRybV9tb2RlX21hdGNoKG1vZGUsIGRtdF9tb2RlLAogCQkJCQkgICBEUk1f TU9ERV9NQVRDSF9USU1JTkdTIHwKIAkJCQkJICAgRFJNX01PREVfTUFUQ0hfQ0xPQ0sgfApAQCAt MjA3NCwzMCArMTg3MCwzMSBAQCBzdGF0aWMgYm9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlu dCBkcm1fZ2V0X3RpbGVfb2Zmc2V0cyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAot CQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCi0JCQkJc3RydWN0IGRybV9mYl9v ZmZzZXQgKm9mZnNldHMsCi0JCQkJaW50IGlkeCwKLQkJCQlpbnQgaF9pZHgsIGludCB2X2lkeCkK K3N0YXRpYyBpbnQgZHJtX2NsaWVudF9nZXRfdGlsZV9vZmZzZXRzKHN0cnVjdCBkcm1fY29ubmVj dG9yICoqY29ubmVjdG9ycywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvbm5lY3Rvcl9jb3Vu dCwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKKwkJCQkgICAg ICAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJICAgICAgIGludCBpZHgsCisJ CQkJICAgICAgIGludCBoX2lkeCwgaW50IHZfaWR4KQogewotCXN0cnVjdCBkcm1fZmJfaGVscGVy X2Nvbm5lY3RvciAqZmJfaGVscGVyX2Nvbm47CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcjsKIAlpbnQgaTsKIAlpbnQgaG9mZnNldCA9IDAsIHZvZmZzZXQgPSAwOwogCi0JZHJtX2Zi X2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7Ci0JCWZiX2hlbHBlcl9j b25uID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKLQkJaWYgKCFmYl9oZWxwZXJfY29u bi0+Y29ubmVjdG9yLT5oYXNfdGlsZSkKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50 OyBpKyspIHsKKwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKKwkJaWYgKCFjb25uZWN0b3It Pmhhc190aWxlKQogCQkJY29udGludWU7CiAKIAkJaWYgKCFtb2Rlc1tpXSAmJiAoaF9pZHggfHwg dl9pZHgpKSB7CiAJCQlEUk1fREVCVUdfS01TKCJubyBtb2RlcyBmb3IgY29ubmVjdG9yIHRpbGVk ICVkICVkXG4iLCBpLAotCQkJCSAgICAgIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPmJhc2Uu aWQpOworCQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAJCQljb250aW51ZTsKIAkJfQot CQlpZiAoZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV9oX2xvYyA8IGhfaWR4KQorCQlp ZiAoY29ubmVjdG9yLT50aWxlX2hfbG9jIDwgaF9pZHgpCiAJCQlob2Zmc2V0ICs9IG1vZGVzW2ld LT5oZGlzcGxheTsKIAotCQlpZiAoZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV92X2xv YyA8IHZfaWR4KQorCQlpZiAoY29ubmVjdG9yLT50aWxlX3ZfbG9jIDwgdl9pZHgpCiAJCQl2b2Zm c2V0ICs9IG1vZGVzW2ldLT52ZGlzcGxheTsKIAl9CiAJb2Zmc2V0c1tpZHhdLnggPSBob2Zmc2V0 OwpAQCAtMjEwNiwyMCArMTkwMywyMSBAQCBzdGF0aWMgaW50IGRybV9nZXRfdGlsZV9vZmZzZXRz KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRp YyBib29sIGRybV90YXJnZXRfcHJlZmVycmVkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIsCi0JCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCi0JCQkJIHN0cnVjdCBk cm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAotCQkJCSBib29sICplbmFibGVkLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCitzdGF0aWMgYm9vbCBkcm1fY2xpZW50X3RhcmdldF9wcmVmZXJyZWQoc3RydWN0 IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAorCQkJCQl1bnNpZ25lZCBpbnQgY29ubmVjdG9y X2NvdW50LAorCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAorCQkJCQlzdHJ1 Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKKwkJCQkJYm9vbCAqZW5hYmxlZCwgaW50IHdpZHRo LCBpbnQgaGVpZ2h0KQogewotCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVs cGVyX2Nvbm47Ci0JY29uc3QgdTY0IG1hc2sgPSBCSVRfVUxMKGZiX2hlbHBlci0+Y29ubmVjdG9y X2NvdW50KSAtIDE7CisJY29uc3QgdTY0IG1hc2sgPSBCSVRfVUxMKGNvbm5lY3Rvcl9jb3VudCkg LSAxOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJdTY0IGNvbm5fY29uZmln dXJlZCA9IDA7CiAJaW50IHRpbGVfcGFzcyA9IDA7CiAJaW50IGk7CiAKIHJldHJ5OgotCWRybV9m Yl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewotCQlmYl9oZWxwZXJf Y29ubiA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07CisJZm9yIChpID0gMDsgaSA8IGNv bm5lY3Rvcl9jb3VudDsgaSsrKSB7CisJCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNbaV07CiAKIAkJ aWYgKGNvbm5fY29uZmlndXJlZCAmIEJJVF9VTEwoaSkpCiAJCQljb250aW51ZTsKQEAgLTIxMzAs MTcgKzE5MjgsMTcgQEAgc3RhdGljIGJvb2wgZHJtX3RhcmdldF9wcmVmZXJyZWQoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJfQogCiAJCS8qIGZpcnN0IHBhc3Mgb3ZlciBhbGwg dGhlIHVudGlsZWQgY29ubmVjdG9ycyAqLwotCQlpZiAodGlsZV9wYXNzID09IDAgJiYgZmJfaGVs cGVyX2Nvbm4tPmNvbm5lY3Rvci0+aGFzX3RpbGUpCisJCWlmICh0aWxlX3Bhc3MgPT0gMCAmJiBj b25uZWN0b3ItPmhhc190aWxlKQogCQkJY29udGludWU7CiAKIAkJaWYgKHRpbGVfcGFzcyA9PSAx KSB7Ci0JCQlpZiAoZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSAwIHx8 Ci0JCQkgICAgZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV92X2xvYyAhPSAwKQorCQkJ aWYgKGNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSAwIHx8CisJCQkgICAgY29ubmVjdG9yLT50aWxl X3ZfbG9jICE9IDApCiAJCQkJY29udGludWU7CiAKIAkJfSBlbHNlIHsKLQkJCWlmIChmYl9oZWxw ZXJfY29ubi0+Y29ubmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKLQkJCSAg ICBmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT50aWxlX3ZfbG9jICE9IHRpbGVfcGFzcyAtIDEp CisJCQlpZiAoY29ubmVjdG9yLT50aWxlX2hfbG9jICE9IHRpbGVfcGFzcyAtIDEgJiYKKwkJCSAg ICBjb25uZWN0b3ItPnRpbGVfdl9sb2MgIT0gdGlsZV9wYXNzIC0gMSkKIAkJCS8qIGlmIHRoaXMg dGlsZV9wYXNzIGRvZXNuJ3QgY292ZXIgYW55IG9mIHRoZSB0aWxlcyAtIGtlZXAgZ29pbmcgKi8K IAkJCQljb250aW51ZTsKIApAQCAtMjE0OCwyMiArMTk0NiwyMiBAQCBzdGF0aWMgYm9vbCBkcm1f dGFyZ2V0X3ByZWZlcnJlZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJICog ZmluZCB0aGUgdGlsZSBvZmZzZXRzIGZvciB0aGlzIHBhc3MgLSBuZWVkIHRvIGZpbmQKIAkJCSAq IGFsbCB0aWxlcyBsZWZ0IGFuZCBhYm92ZQogCQkJICovCi0JCQlkcm1fZ2V0X3RpbGVfb2Zmc2V0 cyhmYl9oZWxwZXIsIG1vZGVzLCBvZmZzZXRzLAotCQkJCQkgICAgIGksIGZiX2hlbHBlcl9jb25u LT5jb25uZWN0b3ItPnRpbGVfaF9sb2MsIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVf dl9sb2MpOworCQkJZHJtX2NsaWVudF9nZXRfdGlsZV9vZmZzZXRzKGNvbm5lY3RvcnMsIGNvbm5l Y3Rvcl9jb3VudCwgbW9kZXMsIG9mZnNldHMsIGksCisJCQkJCQkgICAgY29ubmVjdG9yLT50aWxl X2hfbG9jLCBjb25uZWN0b3ItPnRpbGVfdl9sb2MpOwogCQl9CiAJCURSTV9ERUJVR19LTVMoImxv b2tpbmcgZm9yIGNtZGxpbmUgbW9kZSBvbiBjb25uZWN0b3IgJWRcbiIsCi0JCQkgICAgICBmYl9o ZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJCSAgICAgIGNvbm5lY3Rvci0+YmFz ZS5pZCk7CiAKIAkJLyogZ290IGZvciBjb21tYW5kIGxpbmUgbW9kZSBmaXJzdCAqLwotCQltb2Rl c1tpXSA9IGRybV9waWNrX2NtZGxpbmVfbW9kZShmYl9oZWxwZXJfY29ubik7CisJCW1vZGVzW2ld ID0gZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpOwogCQlpZiAoIW1v ZGVzW2ldKSB7CiAJCQlEUk1fREVCVUdfS01TKCJsb29raW5nIGZvciBwcmVmZXJyZWQgbW9kZSBv biBjb25uZWN0b3IgJWQgJWRcbiIsCi0JCQkJICAgICAgZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rv ci0+YmFzZS5pZCwgZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV9ncm91cCA/IGZiX2hl bHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfZ3JvdXAtPmlkIDogMCk7Ci0JCQltb2Rlc1tpXSA9 IGRybV9oYXNfcHJlZmVycmVkX21vZGUoZmJfaGVscGVyX2Nvbm4sIHdpZHRoLCBoZWlnaHQpOwor CQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yLT50aWxlX2dyb3VwID8gY29u bmVjdG9yLT50aWxlX2dyb3VwLT5pZCA6IDApOworCQkJbW9kZXNbaV0gPSBkcm1fY29ubmVjdG9y X2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpOwogCQl9CiAJCS8q IE5vIHByZWZlcnJlZCBtb2RlcywgcGljayBvbmUgb2ZmIHRoZSBsaXN0ICovCi0JCWlmICghbW9k ZXNbaV0gJiYgIWxpc3RfZW1wdHkoJmZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPm1vZGVzKSkg ewotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmZiX2hlbHBlcl9jb25uLT5jb25u ZWN0b3ItPm1vZGVzLCBoZWFkKQorCQlpZiAoIW1vZGVzW2ldICYmICFsaXN0X2VtcHR5KCZjb25u ZWN0b3ItPm1vZGVzKSkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmNvbm5l Y3Rvci0+bW9kZXMsIGhlYWQpCiAJCQkJYnJlYWs7CiAJCX0KIAkJRFJNX0RFQlVHX0tNUygiZm91 bmQgbW9kZSAlc1xuIiwgbW9kZXNbaV0gPyBtb2Rlc1tpXS0+bmFtZSA6CkBAIC0yMTkyLDQwICsx OTkwLDQxIEBAIHN0YXRpYyBib29sIGNvbm5lY3Rvcl9oYXNfcG9zc2libGVfY3J0YyhzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlu dCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJICBz dHJ1Y3QgZHJtX2NydGMgKipiZXN0X2NydGNzLAotCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqKm1vZGVzLAotCQkJICBpbnQgbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGljIGlu dCBkcm1fY2xpZW50X3BpY2tfY3J0Y3Moc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCisJ CQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkgdW5zaWduZWQgaW50 IGNvbm5lY3Rvcl9jb3VudCwKKwkJCQkgc3RydWN0IGRybV9jcnRjICoqYmVzdF9jcnRjcywKKwkJ CQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKKwkJCQkgaW50IG4sIGludCB3aWR0 aCwgaW50IGhlaWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9o ZWxwZXItPmNsaWVudDsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7CiAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlpbnQgbXlfc2NvcmUsIGJlc3Rfc2Nv cmUsIHNjb3JlOwogCXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzLCAqY3J0YzsKIAlzdHJ1Y3QgZHJt X21vZGVfc2V0ICptb2Rlc2V0OwotCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJf aGVscGVyX2Nvbm47CiAJaW50IG87CiAKLQlpZiAobiA9PSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9j b3VudCkKKwlpZiAobiA9PSBjb25uZWN0b3JfY291bnQpCiAJCXJldHVybiAwOwogCi0JZmJfaGVs cGVyX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW25dOwotCWNvbm5lY3RvciA9IGZi X2hlbHBlcl9jb25uLT5jb25uZWN0b3I7CisJY29ubmVjdG9yID0gY29ubmVjdG9yc1tuXTsKIAog CWJlc3RfY3J0Y3Nbbl0gPSBOVUxMOwotCWJlc3Rfc2NvcmUgPSBkcm1fcGlja19jcnRjcyhmYl9o ZWxwZXIsIGJlc3RfY3J0Y3MsIG1vZGVzLCBuKzEsIHdpZHRoLCBoZWlnaHQpOworCWJlc3Rfc2Nv cmUgPSBkcm1fY2xpZW50X3BpY2tfY3J0Y3MoY2xpZW50LCBjb25uZWN0b3JzLCBjb25uZWN0b3Jf Y291bnQsCisJCQkJCSAgIGJlc3RfY3J0Y3MsIG1vZGVzLCBuICsgMSwgd2lkdGgsIGhlaWdodCk7 CiAJaWYgKG1vZGVzW25dID09IE5VTEwpCiAJCXJldHVybiBiZXN0X3Njb3JlOwogCi0JY3J0Y3Mg PSBrY2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQ X0tFUk5FTCk7CisJY3J0Y3MgPSBrY2FsbG9jKGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRj cyksIEdGUF9LRVJORUwpOwogCWlmICghY3J0Y3MpCiAJCXJldHVybiBiZXN0X3Njb3JlOwogCiAJ bXlfc2NvcmUgPSAxOwogCWlmIChjb25uZWN0b3ItPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVz X2Nvbm5lY3RlZCkKIAkJbXlfc2NvcmUrKzsKLQlpZiAoZHJtX2hhc19jbWRsaW5lX21vZGUoZmJf aGVscGVyX2Nvbm4pKQorCWlmIChjb25uZWN0b3ItPmNtZGxpbmVfbW9kZS5zcGVjaWZpZWQpCiAJ CW15X3Njb3JlKys7Ci0JaWYgKGRybV9oYXNfcHJlZmVycmVkX21vZGUoZmJfaGVscGVyX2Nvbm4s IHdpZHRoLCBoZWlnaHQpKQorCWlmIChkcm1fY29ubmVjdG9yX2hhc19wcmVmZXJyZWRfbW9kZShj b25uZWN0b3IsIHdpZHRoLCBoZWlnaHQpKQogCQlteV9zY29yZSsrOwogCiAJLyoKQEAgLTIyNDQs NyArMjA0Myw3IEBAIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwKIAogCQlpZiAobyA8IG4pIHsKIAkJCS8qIGlnbm9yZSBjbG9uaW5nIHVu bGVzcyBvbmx5IGEgc2luZ2xlIGNydGMgKi8KLQkJCWlmIChmYl9oZWxwZXItPmRldi0+bW9kZV9j b25maWcubnVtX2NydGMgPiAxKQorCQkJaWYgKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMgPiAx KQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoIWRybV9tb2RlX2VxdWFsKG1vZGVzW29dLCBtb2Rl c1tuXSkpCkBAIC0yMjUzLDEyICsyMDUyLDExIEBAIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0Y3Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAogCQljcnRjc1tuXSA9IGNydGM7CiAJ CW1lbWNweShjcnRjcywgYmVzdF9jcnRjcywgbiAqIHNpemVvZigqY3J0Y3MpKTsKLQkJc2NvcmUg PSBteV9zY29yZSArIGRybV9waWNrX2NydGNzKGZiX2hlbHBlciwgY3J0Y3MsIG1vZGVzLCBuICsg MSwKLQkJCQkJCSAgd2lkdGgsIGhlaWdodCk7CisJCXNjb3JlID0gbXlfc2NvcmUgKyBkcm1fY2xp ZW50X3BpY2tfY3J0Y3MoY2xpZW50LCBjb25uZWN0b3JzLCBjb25uZWN0b3JfY291bnQsCisJCQkJ CQkJIGNydGNzLCBtb2RlcywgbiArIDEsIHdpZHRoLCBoZWlnaHQpOwogCQlpZiAoc2NvcmUgPiBi ZXN0X3Njb3JlKSB7CiAJCQliZXN0X3Njb3JlID0gc2NvcmU7Ci0JCQltZW1jcHkoYmVzdF9jcnRj cywgY3J0Y3MsCi0JCQkgICAgICAgZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQgKiBzaXplb2Yo KmNydGNzKSk7CisJCQltZW1jcHkoYmVzdF9jcnRjcywgY3J0Y3MsIGNvbm5lY3Rvcl9jb3VudCAq IHNpemVvZigqY3J0Y3MpKTsKIAkJfQogCX0KIApAQCAtMjI2NywxNSArMjA2NSwxNyBAQCBzdGF0 aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiB9 CiAKIC8qIFRyeSB0byByZWFkIHRoZSBCSU9TIGRpc3BsYXkgY29uZmlndXJhdGlvbiBhbmQgdXNl IGl0IGZvciB0aGUgaW5pdGlhbCBjb25maWcgKi8KLXN0YXRpYyBib29sIGRybV9mYl9oZWxwZXJf ZmlybXdhcmVfY29uZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCi0JCQkJCSAg c3RydWN0IGRybV9jcnRjICoqY3J0Y3MsCi0JCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Kiptb2RlcywKLQkJCQkJICBzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0cywKLQkJCQkJICBi b29sICplbmFibGVkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitzdGF0aWMgYm9vbCBkcm1fY2xp ZW50X2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKKwkJCQkg ICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzLAorCQkJCSAgICAgICB1bnNp Z25lZCBpbnQgY29ubmVjdG9yX2NvdW50LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKipj cnRjcywKKwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKKwkJCQkg ICAgICAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJICAgICAgIGJvb2wgKmVu YWJsZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZmJfaGVscGVyLT5kZXY7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gbWluKGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50LCBCSVRTX1BFUl9MT05HKTsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSBt aW5fdCh1bnNpZ25lZCBpbnQsIGNvbm5lY3Rvcl9jb3VudCwgQklUU19QRVJfTE9ORyk7CiAJdW5z aWduZWQgbG9uZyBjb25uX2NvbmZpZ3VyZWQsIGNvbm5fc2VxOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjbGllbnQtPmRldjsKIAlpbnQgaSwgajsKIAlib29sICpzYXZlX2VuYWJsZWQ7CiAJ Ym9vbCBmYWxsYmFjayA9IHRydWUsIHJldCA9IHRydWU7CkBAIC0yMjk3LDEzICsyMDk3LDExIEBA IHN0YXRpYyBib29sIGRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIsCiAJY29ubl9jb25maWd1cmVkID0gMDsKIHJldHJ5OgogCWZvciAo aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rv ciAqZmJfY29ubjsKIAkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAkJc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyOwogCQlzdHJ1Y3QgZHJtX2NydGMgKm5ld19jcnRjOwogCi0J CWZiX2Nvbm4gPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwotCQljb25uZWN0b3IgPSBm Yl9jb25uLT5jb25uZWN0b3I7CisJCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNbaV07CiAKIAkJaWYg KGNvbm5fY29uZmlndXJlZCAmIEJJVChpKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjM2MSwxNCArMjE1 OSwxMyBAQCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJICAgICAgY29ubmVjdG9yLT5uYW1lKTsKIAog CQkvKiBnbyBmb3IgY29tbWFuZCBsaW5lIG1vZGUgZmlyc3QgKi8KLQkJbW9kZXNbaV0gPSBkcm1f cGlja19jbWRsaW5lX21vZGUoZmJfY29ubik7CisJCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9w aWNrX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpOwogCiAJCS8qIHRyeSBmb3IgcHJlZmVycmVkIG5l eHQgKi8KIAkJaWYgKCFtb2Rlc1tpXSkgewogCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3Ig cHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVzICVkXG4iLAogCQkJCSAgICAgIGNvbm5lY3Rv ci0+bmFtZSwgY29ubmVjdG9yLT5oYXNfdGlsZSk7Ci0JCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJl ZmVycmVkX21vZGUoZmJfY29ubiwgd2lkdGgsCi0JCQkJCQkJICBoZWlnaHQpOworCQkJbW9kZXNb aV0gPSBkcm1fY29ubmVjdG9yX2hhc19wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIHdpZHRoLCBo ZWlnaHQpOwogCQl9CiAKIAkJLyogTm8gcHJlZmVycmVkIG1vZGUgbWFya2VkIGJ5IHRoZSBFRElE PyBBcmUgdGhlcmUgYW55IG1vZGVzPyAqLwpAQCAtMjQ0NSw4ICsyMjQyLDEyIEBAIHN0YXRpYyBi b29sIGRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCiBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwKIAkJCSAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCiB7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgKipjb25uZWN0b3JzID0gTlVMTDsKIAlzdHJ1Y3Qg ZHJtX2NsaWVudF9kZXYgKmNsaWVudCA9ICZmYl9oZWxwZXItPmNsaWVudDsKKwlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9saXN0X2l0ZXIgY29ubl9pdGVyOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBmYl9oZWxwZXItPmRldjsKKwl1bnNpZ25lZCBpbnQgdG90YWxfbW9kZXNfY291bnQgPSAwOwor CXVuc2lnbmVkIGludCBjb25uZWN0b3JfY291bnQgPSAwOwogCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICoqbW9kZXM7CiAJc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHM7CiAJc3RydWN0IGRy bV9jcnRjICoqY3J0Y3M7CkBAIC0yNDU0LDE2ICsyMjU1LDI4IEBAIHN0YXRpYyB2b2lkIGRybV9z ZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWludCBpOwogCiAJ RFJNX0RFQlVHX0tNUygiXG4iKTsKLQkvKiBwcmV2ZW50IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9u IG9mIGNvbm5lY3Rvcl9jb3VudCBieSBob3RwbHVnICovCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgm ZmJfaGVscGVyLT5sb2NrKTsKIAotCWNydGNzID0ga2NhbGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rv cl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJORUwpOwotCW1vZGVzID0ga2NhbGxvYyhm Yl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwKLQkJCXNpemVvZihzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqKSwgR0ZQX0tFUk5FTCk7Ci0Jb2Zmc2V0cyA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25u ZWN0b3JfY291bnQsCi0JCQkgIHNpemVvZihzdHJ1Y3QgZHJtX2ZiX29mZnNldCksIEdGUF9LRVJO RUwpOwotCWVuYWJsZWQgPSBrY2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LAotCQkJ ICBzaXplb2YoYm9vbCksIEdGUF9LRVJORUwpOworCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2Jl Z2luKGRldiwgJmNvbm5faXRlcik7CisJZHJtX2NsaWVudF9mb3JfZWFjaF9jb25uZWN0b3JfaXRl cihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKip0bXA7 CisKKwkJdG1wID0ga3JlYWxsb2MoY29ubmVjdG9ycywgKGNvbm5lY3Rvcl9jb3VudCArIDEpICog c2l6ZW9mKCpjb25uZWN0b3JzKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdG1wKQorCQkJZ290byBm cmVlX2Nvbm5lY3RvcnM7CisKKwkJY29ubmVjdG9ycyA9IHRtcDsKKwkJZHJtX2Nvbm5lY3Rvcl9n ZXQoY29ubmVjdG9yKTsKKwkJY29ubmVjdG9yc1tjb25uZWN0b3JfY291bnQrK10gPSBjb25uZWN0 b3I7CisJfQorCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKKworCWlm ICghY29ubmVjdG9yX2NvdW50KQorCQlyZXR1cm47CisKKwljcnRjcyA9IGtjYWxsb2MoY29ubmVj dG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7CisJbW9kZXMgPSBrY2FsbG9j KGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCptb2RlcyksIEdGUF9LRVJORUwpOworCW9mZnNldHMg PSBrY2FsbG9jKGNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpvZmZzZXRzKSwgR0ZQX0tFUk5FTCk7 CisJZW5hYmxlZCA9IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2YoYm9vbCksIEdGUF9L RVJORUwpOwogCWlmICghY3J0Y3MgfHwgIW1vZGVzIHx8ICFlbmFibGVkIHx8ICFvZmZzZXRzKSB7 CiAJCURSTV9FUlJPUigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBvdXQ7 CkBAIC0yNDcyLDQwICsyMjg1LDQyIEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCW11dGV4X2xvY2soJmNsaWVudC0+bW9kZXNl dF9tdXRleCk7CiAKIAltdXRleF9sb2NrKCZmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubXV0 ZXgpOwotCWlmIChkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhmYl9oZWxwZXIs IHdpZHRoLCBoZWlnaHQpID09IDApCisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsg aSsrKQorCQl0b3RhbF9tb2Rlc19jb3VudCArPSBjb25uZWN0b3JzW2ldLT5mdW5jcy0+ZmlsbF9t b2Rlcyhjb25uZWN0b3JzW2ldLCB3aWR0aCwgaGVpZ2h0KTsKKwlpZiAoIXRvdGFsX21vZGVzX2Nv dW50KQogCQlEUk1fREVCVUdfS01TKCJObyBjb25uZWN0b3JzIHJlcG9ydGVkIGNvbm5lY3RlZCB3 aXRoIG1vZGVzXG4iKTsKLQlkcm1fZW5hYmxlX2Nvbm5lY3RvcnMoZmJfaGVscGVyLCBlbmFibGVk KTsKKwlkcm1fY2xpZW50X2Nvbm5lY3RvcnNfZW5hYmxlZChjb25uZWN0b3JzLCBjb25uZWN0b3Jf Y291bnQsIGVuYWJsZWQpOwogCi0JaWYgKCFkcm1fZmJfaGVscGVyX2Zpcm13YXJlX2NvbmZpZyhm Yl9oZWxwZXIsIGNydGNzLCBtb2Rlcywgb2Zmc2V0cywKLQkJCQkJICAgZW5hYmxlZCwgd2lkdGgs IGhlaWdodCkpIHsKLQkJbWVtc2V0KG1vZGVzLCAwLCBmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3Vu dCpzaXplb2YobW9kZXNbMF0pKTsKLQkJbWVtc2V0KGNydGNzLCAwLCBmYl9oZWxwZXItPmNvbm5l Y3Rvcl9jb3VudCpzaXplb2YoY3J0Y3NbMF0pKTsKLQkJbWVtc2V0KG9mZnNldHMsIDAsIGZiX2hl bHBlci0+Y29ubmVjdG9yX2NvdW50KnNpemVvZihvZmZzZXRzWzBdKSk7CisJaWYgKCFkcm1fY2xp ZW50X2Zpcm13YXJlX2NvbmZpZyhjbGllbnQsIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwg Y3J0Y3MsCisJCQkJCW1vZGVzLCBvZmZzZXRzLCBlbmFibGVkLCB3aWR0aCwgaGVpZ2h0KSkgewor CQltZW1zZXQobW9kZXMsIDAsIGNvbm5lY3Rvcl9jb3VudCAqIHNpemVvZigqbW9kZXMpKTsKKwkJ bWVtc2V0KGNydGNzLCAwLCBjb25uZWN0b3JfY291bnQgKiBzaXplb2YoKmNydGNzKSk7CisJCW1l bXNldChvZmZzZXRzLCAwLCBjb25uZWN0b3JfY291bnQgKiBzaXplb2YoKm9mZnNldHMpKTsKIAot CQlpZiAoIWRybV90YXJnZXRfY2xvbmVkKGZiX2hlbHBlciwgbW9kZXMsIG9mZnNldHMsCi0JCQkJ ICAgICAgIGVuYWJsZWQsIHdpZHRoLCBoZWlnaHQpICYmCi0JCSAgICAhZHJtX3RhcmdldF9wcmVm ZXJyZWQoZmJfaGVscGVyLCBtb2Rlcywgb2Zmc2V0cywKLQkJCQkJICBlbmFibGVkLCB3aWR0aCwg aGVpZ2h0KSkKKwkJaWYgKCFkcm1fY2xpZW50X3RhcmdldF9jbG9uZWQoZGV2LCBjb25uZWN0b3Jz LCBjb25uZWN0b3JfY291bnQsIG1vZGVzLAorCQkJCQkgICAgICBvZmZzZXRzLCBlbmFibGVkLCB3 aWR0aCwgaGVpZ2h0KSAmJgorCQkgICAgIWRybV9jbGllbnRfdGFyZ2V0X3ByZWZlcnJlZChjb25u ZWN0b3JzLCBjb25uZWN0b3JfY291bnQsIG1vZGVzLAorCQkJCQkJIG9mZnNldHMsIGVuYWJsZWQs IHdpZHRoLCBoZWlnaHQpKQogCQkJRFJNX0VSUk9SKCJVbmFibGUgdG8gZmluZCBpbml0aWFsIG1v ZGVzXG4iKTsKIAogCQlEUk1fREVCVUdfS01TKCJwaWNraW5nIENSVENzIGZvciAlZHglZCBjb25m aWdcbiIsCiAJCQkgICAgICB3aWR0aCwgaGVpZ2h0KTsKIAotCQlkcm1fcGlja19jcnRjcyhmYl9o ZWxwZXIsIGNydGNzLCBtb2RlcywgMCwgd2lkdGgsIGhlaWdodCk7CisJCWRybV9jbGllbnRfcGlj a19jcnRjcyhjbGllbnQsIGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwKKwkJCQkgICAgICBj cnRjcywgbW9kZXMsIDAsIHdpZHRoLCBoZWlnaHQpOwogCX0KIAltdXRleF91bmxvY2soJmZiX2hl bHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAKIAlkcm1fY2xpZW50X21vZGVzZXRfcmVs ZWFzZShjbGllbnQpOwogCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVs cGVyLCBpKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CiAJCXN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gbW9kZXNbaV07CiAJCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9IGNydGNzW2ldOwogCQlzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0ID0gJm9m ZnNldHNbaV07CiAKIAkJaWYgKG1vZGUgJiYgY3J0YykgewogCQkJc3RydWN0IGRybV9tb2RlX3Nl dCAqbW9kZXNldCA9IGRybV9jbGllbnRfZmluZF9tb2Rlc2V0KGNsaWVudCwgY3J0Yyk7Ci0JCQlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0KLQkJCQlmYl9oZWxwZXItPmNvbm5lY3Rv cl9pbmZvW2ldLT5jb25uZWN0b3I7CisJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y ID0gY29ubmVjdG9yc1tpXTsKIAogCQkJRFJNX0RFQlVHX0tNUygiZGVzaXJlZCBtb2RlICVzIHNl dCBvbiBjcnRjICVkICglZCwlZClcbiIsCiAJCQkJICAgICAgbW9kZS0+bmFtZSwgY3J0Yy0+YmFz ZS5pZCwgb2Zmc2V0LT54LCBvZmZzZXQtPnkpOwpAQCAtMjUyOCw2ICsyMzQzLDEwIEBAIHN0YXRp YyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAog CWtmcmVlKG1vZGVzKTsKIAlrZnJlZShvZmZzZXRzKTsKIAlrZnJlZShlbmFibGVkKTsKK2ZyZWVf Y29ubmVjdG9yczoKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspCisJCWRy bV9jb25uZWN0b3JfcHV0KGNvbm5lY3RvcnNbaV0pOworCWtmcmVlKGNvbm5lY3RvcnMpOwogfQog CiAvKgpAQCAtMjU0MCwxMCArMjM1OSwxMSBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Mo c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9j cnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogewogCXN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50ID0gJmZiX2hlbHBlci0+Y2xpZW50OworCXN0cnVjdCBkcm1fY29u bmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmYl9o ZWxwZXItPmZiZGV2OwogCXVuc2lnbmVkIGludCByb3RhdGlvbiwgc3dfcm90YXRpb25zID0gMDsK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCBkcm1fbW9kZV9zZXQg Km1vZGVzZXQ7Ci0JaW50IGk7CiAKIAltdXRleF9sb2NrKCZjbGllbnQtPm1vZGVzZXRfbXV0ZXgp OwogCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBjbGllbnQpIHsKQEAgLTI1 NjAsMTAgKzIzODAsOCBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3NfZmIoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKIAl9CiAJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPm1vZGVz ZXRfbXV0ZXgpOwogCi0JbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11 dGV4KTsKLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsK LQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9Ci0JCQkJCWZiX2hlbHBlci0+Y29u bmVjdG9yX2luZm9baV0tPmNvbm5lY3RvcjsKKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9iZWdp bihmYl9oZWxwZXItPmRldiwgJmNvbm5faXRlcik7CisJZHJtX2NsaWVudF9mb3JfZWFjaF9jb25u ZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKIAogCQkvKiB1c2UgZmlyc3QgY29u bmVjdGVkIGNvbm5lY3RvciBmb3IgdGhlIHBoeXNpY2FsIGRpbWVuc2lvbnMgKi8KIAkJaWYgKGNv bm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CkBAIC0yNTcy LDcgKzIzOTAsNyBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3NfZmIoc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlcikKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygm ZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlkcm1fY29ubmVjdG9yX2xpc3Rf aXRlcl9lbmQoJmNvbm5faXRlcik7CiAKIAlzd2l0Y2ggKHN3X3JvdGF0aW9ucykgewogCWNhc2Ug RFJNX01PREVfUk9UQVRFXzA6CkBAIC0yODExLDEyICsyNjI5LDYgQEAgaW50IGRybV9mYl9oZWxw ZXJfZmJkZXZfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJcmV0dXJuIHJldDsKIAl9 CiAKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoZmJfaGVs cGVyKTsKLQlpZiAocmV0IDwgMCkgewotCQlEUk1fREVWX0VSUk9SKGRldi0+ZGV2LCAiZmJkZXY6 IEZhaWxlZCB0byBhZGQgY29ubmVjdG9ycyAocmV0PSVkKVxuIiwgcmV0KTsKLQkJZ290byBlcnJf ZHJtX2ZiX2hlbHBlcl9maW5pOwotCX0KLQogCWlmICghZHJtX2Rydl91c2VzX2F0b21pY19tb2Rl c2V0KGRldikpCiAJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKGRldik7CiAK QEAgLTMxMjIsMTAgKzI5MzQsNiBAQCBzdGF0aWMgaW50IGRybV9mYmRldl9jbGllbnRfaG90cGx1 ZyhzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCkKIAlpZiAocmV0KQogCQlnb3RvIGVycjsK IAotCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhmYl9oZWxw ZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2NsZWFudXA7Ci0KIAlpZiAoIWRybV9kcnZfdXNl c19hdG9taWNfbW9kZXNldChkZXYpKQogCQlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0 aW9ucyhkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmggYi9pbmNs dWRlL2RybS9kcm1fY2xpZW50LmgKaW5kZXggNmNmNDg0MTlmNzdmLi44ZDk0ODgwYmJlMjUgMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAorKysgYi9pbmNsdWRlL2RybS9kcm1f Y2xpZW50LmgKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgogCisjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KICNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KIAogc3RydWN0IGRybV9jbGllbnRfZGV2OwpAQCAtMTY5 LDYgKzE3MCwyMCBAQCBpbnQgZHJtX2NsaWVudF9tb2Rlc2V0X2RwbXMoc3RydWN0IGRybV9jbGll bnRfZGV2ICpjbGllbnQsIGludCBtb2RlKTsKIAlmb3IgKCh7IGxvY2tkZXBfYXNzZXJ0X2hlbGQo JihjbGllbnQpLT5tb2Rlc2V0X211dGV4KTsgfSksIFwKIAkgICAgIG1vZGVzZXQgPSAoY2xpZW50 KS0+bW9kZXNldHM7IG1vZGVzZXQtPmNydGM7IG1vZGVzZXQrKykKIAorLyoqCisgKiBkcm1fY2xp ZW50X2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyIC0gY29ubmVjdG9yX2xpc3QgaXRlcmF0b3IgbWFj cm8KKyAqIEBjb25uZWN0b3I6ICZzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBwb2ludGVyIHVzZWQgYXMg Y3Vyc29yCisgKiBAaXRlcjogJnN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlcgorICoKKyAq IFRoaXMgaXRlcmF0ZXMgdGhlIGNvbm5lY3RvcnMgdGhhdCBhcmUgdXNlYWJsZSBmb3IgaW50ZXJu YWwgY2xpZW50cyAoZXhjbHVkZXMKKyAqIHdyaXRlYmFjayBjb25uZWN0b3JzKS4KKyAqCisgKiBG b3IgbW9yZSBpbmZvIHNlZSBkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoKS4KKyAqLworI2Rl ZmluZSBkcm1fY2xpZW50X2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgaXRlcikg XAorCWRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsIGl0ZXIpIFwKKwkJaWYg KGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFD SykKKwogaW50IGRybV9jbGllbnRfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9p bmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggNmIzMzRmNGQ4YTIyLi5lMTRkNTJlZjk2 MzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRl L2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTk3LDE2ICs5NywxMCBAQCBzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9mdW5jcyB7CiAJCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUgKnNpemVz KTsKIH07CiAKLXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciB7Ci0Jc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcjsKLX07Ci0KIC8qKgogICogc3RydWN0IGRybV9mYl9oZWxwZXIg LSBtYWluIHN0cnVjdHVyZSB0byBlbXVsYXRlIGZiZGV2IG9uIHRvcCBvZiBLTVMKICAqIEBmYjog U2Nhbm91dCBmcmFtZWJ1ZmZlciBvYmplY3QKICAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBjb25u ZWN0b3JfY291bnQ6IG51bWJlciBvZiBjb25uZWN0ZWQgY29ubmVjdG9ycwotICogQGNvbm5lY3Rv cl9pbmZvX2FsbG9jX2NvdW50OiBzaXplIG9mIGNvbm5lY3Rvcl9pbmZvCiAgKiBAZnVuY3M6IGRy aXZlciBjYWxsYmFja3MgZm9yIGZiIGhlbHBlcgogICogQGZiZGV2OiBlbXVsYXRlZCBmYmRldiBk ZXZpY2UgaW5mbyBzdHJ1Y3QKICAqIEBwc2V1ZG9fcGFsZXR0ZTogZmFrZSBwYWxldHRlIG9mIDE2 IGNvbG9ycwpAQCAtMTM4LDE1ICsxMzIsNiBAQCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciB7CiAKIAlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCWlu dCBjb25uZWN0b3JfY291bnQ7Ci0JaW50IGNvbm5lY3Rvcl9pbmZvX2FsbG9jX2NvdW50OwotCS8q KgotCSAqIEBjb25uZWN0b3JfaW5mbzoKLQkgKgotCSAqIEFycmF5IG9mIHBlci1jb25uZWN0b3Ig aW5mb3JtYXRpb24uIERvIG5vdCBpdGVyYXRlIGRpcmVjdGx5LCBidXQgdXNlCi0JICogZHJtX2Zi X2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IuCi0JICovCi0Jc3RydWN0IGRybV9mYl9oZWxwZXJf Y29ubmVjdG9yICoqY29ubmVjdG9yX2luZm87CiAJY29uc3Qgc3RydWN0IGRybV9mYl9oZWxwZXJf ZnVuY3MgKmZ1bmNzOwogCXN0cnVjdCBmYl9pbmZvICpmYmRldjsKIAl1MzIgcHNldWRvX3BhbGV0 dGVbMTddOwpAQCAtMjg2LDE4ICsyNzEsOCBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9pb2N0bChzdHJ1 Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKIAogaW50IGRybV9mYl9oZWxwZXJf aG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGludCBkcm1f ZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIs IGludCBicHBfc2VsKTsKLWludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3Rv cnMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiBpbnQgZHJtX2ZiX2hlbHBlcl9k ZWJ1Z19lbnRlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBpbnQgZHJtX2ZiX2hlbHBlcl9kZWJ1 Z19sZWF2ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq Ci1kcm1faGFzX3ByZWZlcnJlZF9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAq ZmJfY29ubmVjdG9yLAotCQkJaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICoKLWRybV9waWNrX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9j b25uZWN0b3IgKmZiX2hlbHBlcl9jb25uKTsKLQotaW50IGRybV9mYl9oZWxwZXJfYWRkX29uZV9j b25uZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3Rvcik7Ci1pbnQgZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3Rv cihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIAogaW50IGRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCkBAIC00NzIsMTIgKzQ0Nyw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRybV9mYl9o ZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAly ZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWRybV9mYl9oZWxwZXJfc2luZ2xlX2Fk ZF9hbGxfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQotewotCXJl dHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVy KHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCXJldHVybiAwOwpAQCAtNDg4LDM0ICs0NTcsNiBA QCBzdGF0aWMgaW5saW5lIGludCBkcm1fZmJfaGVscGVyX2RlYnVnX2xlYXZlKHN0cnVjdCBmYl9p bmZvICppbmZvKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICoKLWRybV9oYXNfcHJlZmVycmVkX21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXJf Y29ubmVjdG9yICpmYl9jb25uZWN0b3IsCi0JCSAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQp Ci17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKgotZHJtX3BpY2tfY21kbGluZV9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5l Y3RvciAqZmJfaGVscGVyX2Nvbm4sCi0JCSAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsK LQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRybV9mYl9oZWxwZXJfYWRk X29uZV9jb25uZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMg aW5saW5lIGludAotZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50CiBkcm1fZmJfaGVs cGVyX2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIsCkBAIC01NTcsNiArNDk4LDI3IEBAIGRybV9mYmRldl9nZW5l cmljX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBwcmVmZXJyZWRf YnBwKQogCiAjZW5kaWYKIAorLyogVE9ETzogVGhlcmUncyBhIHRvZG8gZW50cnkgdG8gcmVtb3Zl IHRoZXNlIHRocmVlICovCitzdGF0aWMgaW5saW5lIGludAorZHJtX2ZiX2hlbHBlcl9zaW5nbGVf YWRkX2FsbF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCit7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citkcm1fZmJfaGVscGVyX2FkZF9vbmVf Y29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCisJCQkJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQKK2RybV9mYl9oZWxwZXJfcmVtb3ZlX29uZV9jb25uZWN0b3Ioc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwKKwkJCQkgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQoreworCXJldHVybiAwOworfQorCiAvKioKICAqIGRybV9mYl9oZWxwZXJfcmVtb3ZlX2NvbmZs aWN0aW5nX2ZyYW1lYnVmZmVycyAtIHJlbW92ZSBmaXJtd2FyZS1jb25maWd1cmVkIGZyYW1lYnVm ZmVycwogICogQGE6IG1lbW9yeSByYW5nZSwgdXNlcnMgb2Ygd2hpY2ggYXJlIHRvIGJlIHJlbW92 ZWQKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4