From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH v5 08/11] drm/fb-helper: Remove drm_fb_helper_connector Date: Mon, 6 May 2019 20:01:36 +0200 Message-ID: <20190506180139.6913-9-noralf@tronnes.org> References: <20190506180139.6913-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190506180139.6913-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QWxsIGRyaXZlcnMgYWRkIGFsbCB0aGVpciBjb25uZWN0b3JzIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0 byBrZWVwIGFyb3VuZCBhbgphcnJheSBvZiBhdmFpbGFibGUgY29ubmVjdG9ycy4KClJlbmFtZSBm dW5jdGlvbnMgd2hpY2ggc2lnbmF0dXJlIGlzIGNoYW5nZWQgc2luY2UgdGhleSB3aWxsIGJlIG1v dmVkIHRvCmRybV9jbGllbnQgaW4gYSBsYXRlciBwYXRjaC4KClNpZ25lZC1vZmYtYnk6IE5vcmFs ZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L3Rv ZG8ucnN0ICAgICAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyB8IDQ5 OCArKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW5jbHVkZS9kcm0vZHJtX2NsaWVu dC5oICAgICAgICB8ICAxNSArCiBpbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggICAgIHwgIDgw ICsrLS0tCiA0IGZpbGVzIGNoYW5nZWQsIDE5MyBpbnNlcnRpb25zKCspLCA0MDQgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QgYi9Eb2N1bWVudGF0 aW9uL2dwdS90b2RvLnJzdAppbmRleCA5ZDQwMzhjNTAwMTMuLmFiOTZiYTA2MDBhOSAxMDA2NDQK LS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvdG9kby5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUv dG9kby5yc3QKQEAgLTI5Miw2ICsyOTIsMTAgQEAgZHJtX2ZiX2hlbHBlciB0YXNrcwogLSBUaGUg bWF4IGNvbm5lY3RvciBhcmd1bWVudCBmb3IgZHJtX2ZiX2hlbHBlcl9pbml0KCkgYW5kCiAgIGRy bV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAoKSBpc24ndCB1c2VkIGFueW1vcmUgYW5kIGNhbiBiZSBy ZW1vdmVkLgogCistIFRoZSBoZWxwZXIgZG9lc24ndCBrZWVwIGFuIGFycmF5IG9mIGNvbm5lY3Rv cnMgYW55bW9yZSBzbyB0aGVzZSBjYW4gYmUKKyAgcmVtb3ZlZDogZHJtX2ZiX2hlbHBlcl9zaW5n bGVfYWRkX2FsbF9jb25uZWN0b3JzKCksCisgIGRybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0 b3IoKSBhbmQgZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcigpLgorCiBDb3JlIHJl ZmFjdG9yaW5ncwogPT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5k ZXggYWZiNTQwZjU2NTU1Li5lZTBhZjU1MzRmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpA QCAtOTAsMTIgKzkwLDYgQEAgc3RhdGljIERFRklORV9NVVRFWChrZXJuZWxfZmJfaGVscGVyX2xv Y2spOwogICogU2V0dXAgZmJkZXYgZW11bGF0aW9uIGJ5IGNhbGxpbmcgZHJtX2ZiX2hlbHBlcl9m YmRldl9zZXR1cCgpIGFuZCB0ZWFyIGl0CiAgKiBkb3duIGJ5IGNhbGxpbmcgZHJtX2ZiX2hlbHBl cl9mYmRldl90ZWFyZG93bigpLgogICoKLSAqIERyaXZlcnMgdGhhdCBuZWVkIHRvIGhhbmRsZSBj b25uZWN0b3IgaG90cGx1Z2dpbmcgKGUuZy4gZHAgbXN0KSBjYW4ndCB1c2UKLSAqIHRoZSBzZXR1 cCBoZWxwZXIgYW5kIHdpbGwgbmVlZCB0byBkbyB0aGUgd2hvbGUgZm91ci1zdGVwIHNldHVwIHBy b2Nlc3Mgd2l0aAotICogZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKCksIGRybV9mYl9oZWxwZXJfaW5p dCgpLAotICogZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKCksIGVuYWJs ZSBob3RwbHVnZ2luZyBhbmQKLSAqIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoKSB0byBh dm9pZCBhIHBvc3NpYmxlIHJhY2Ugd2luZG93LgotICoKICAqIEF0IHJ1bnRpbWUgZHJpdmVycyBz aG91bGQgcmVzdG9yZSB0aGUgZmJkZXYgY29uc29sZSBieSB1c2luZwogICogZHJtX2ZiX2hlbHBl cl9sYXN0Y2xvc2UoKSBhcyB0aGVpciAmZHJtX2RyaXZlci5sYXN0Y2xvc2UgY2FsbGJhY2suCiAg KiBUaGV5IHNob3VsZCBhbHNvIG5vdGlmeSB0aGUgZmIgaGVscGVyIGNvZGUgZnJvbSB1cGRhdGVz IHRvIHRoZSBvdXRwdXQKQEAgLTExOCw4ICsxMTIsNyBAQCBzdGF0aWMgREVGSU5FX01VVEVYKGtl cm5lbF9mYl9oZWxwZXJfbG9jayk7CiAgKiBlbmNvZGVycyBhbmQgY29ubmVjdG9ycy4gVG8gZmlu aXNoIHVwIHRoZSBmYmRldiBoZWxwZXIgaW5pdGlhbGl6YXRpb24sIHRoZQogICogZHJtX2ZiX2hl bHBlcl9pbml0KCkgZnVuY3Rpb24gaXMgY2FsbGVkLiBUbyBwcm9iZSBmb3IgYWxsIGF0dGFjaGVk IGRpc3BsYXlzCiAgKiBhbmQgc2V0IHVwIGFuIGluaXRpYWwgY29uZmlndXJhdGlvbiB1c2luZyB0 aGUgZGV0ZWN0ZWQgaGFyZHdhcmUsIGRyaXZlcnMKLSAqIHNob3VsZCBjYWxsIGRybV9mYl9oZWxw ZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycygpIGZvbGxvd2VkIGJ5Ci0gKiBkcm1fZmJfaGVs cGVyX2luaXRpYWxfY29uZmlnKCkuCisgKiBzaG91bGQgY2FsbCBkcm1fZmJfaGVscGVyX2luaXRp YWxfY29uZmlnKCkuCiAgKgogICogSWYgJmRybV9mcmFtZWJ1ZmZlcl9mdW5jcy5kaXJ0eSBpcyBz ZXQsIHRoZQogICogZHJtX2ZiX2hlbHBlcl97Y2ZiLHN5c31fe3dyaXRlLGZpbGxyZWN0LGNvcHlh cmVhLGltYWdlYmxpdH0gZnVuY3Rpb25zIHdpbGwKQEAgLTEzMiwxNjUgKzEyNSw2IEBAIHN0YXRp YyBERUZJTkVfTVVURVgoa2VybmVsX2ZiX2hlbHBlcl9sb2NrKTsKICAqIGRlZmVycmVkIEkvTyAo Y291cGxlZCB3aXRoIGRybV9mYl9oZWxwZXJfZmJkZXZfdGVhcmRvd24oKSkuCiAgKi8KIAotI2Rl ZmluZSBkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYmgsIGlfXykgXAotCWZvciAo KHsgbG9ja2RlcF9hc3NlcnRfaGVsZCgmKGZiaCktPmxvY2spOyB9KSwgXAotCSAgICAgaV9fID0g MDsgaV9fIDwgKGZiaCktPmNvbm5lY3Rvcl9jb3VudDsgaV9fKyspCi0KLXN0YXRpYyBpbnQgX19k cm1fZmJfaGVscGVyX2FkZF9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9o ZWxwZXIsCi0JCQkJCSAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlz dHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2Nvbm47Ci0Jc3RydWN0IGRybV9mYl9o ZWxwZXJfY29ubmVjdG9yICoqdGVtcDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLQlpZiAoIWRy bV9mYmRldl9lbXVsYXRpb24pCi0JCXJldHVybiAwOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgm ZmJfaGVscGVyLT5sb2NrKTsKLQotCWNvdW50ID0gZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQg KyAxOwotCi0JaWYgKGNvdW50ID4gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb19hbGxvY19jb3Vu dCkgewotCQlzaXplX3Qgc2l6ZSA9IGNvdW50ICogc2l6ZW9mKGZiX2Nvbm4pOwotCi0JCXRlbXAg PSBrcmVhbGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvLCBzaXplLCBHRlBfS0VSTkVMKTsK LQkJaWYgKCF0ZW1wKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJZmJfaGVscGVyLT5jb25uZWN0 b3JfaW5mb19hbGxvY19jb3VudCA9IGNvdW50OwotCQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZv ID0gdGVtcDsKLQl9Ci0KLQlmYl9jb25uID0ga3phbGxvYyhzaXplb2YoKmZiX2Nvbm4pLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWZiX2Nvbm4pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZHJtX2Nvbm5l Y3Rvcl9nZXQoY29ubmVjdG9yKTsKLQlmYl9jb25uLT5jb25uZWN0b3IgPSBjb25uZWN0b3I7Ci0J ZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCsrXSA9 IGZiX2Nvbm47Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRybV9mYl9oZWxwZXJfYWRkX29uZV9j b25uZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQkgICAgc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFmYl9oZWxw ZXIpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQllcnIg PSBfX2RybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3IoZmJfaGVscGVyLCBjb25uZWN0b3Ip OwotCW11dGV4X3VubG9jaygmZmJfaGVscGVyLT5sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci1F WFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3IpOwotCi0vKioKLSAq IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycygpIC0gYWRkIGFsbCBjb25u ZWN0b3JzIHRvIGZiZGV2Ci0gKiAJCQkJCSAgICAgICBlbXVsYXRpb24gaGVscGVyCi0gKiBAZmJf aGVscGVyOiBmYmRldiBpbml0aWFsaXplZCB3aXRoIGRybV9mYl9oZWxwZXJfaW5pdCwgY2FuIGJl IE5VTEwKLSAqCi0gKiBUaGlzIGZ1bmN0aW9ucyBhZGRzIGFsbCB0aGUgYXZhaWxhYmxlIGNvbm5l Y3RvcnMgZm9yIHVzZSB3aXRoIHRoZSBnaXZlbgotICogZmJfaGVscGVyLiBUaGlzIGlzIGEgc2Vw YXJhdGUgc3RlcCB0byBhbGxvdyBkcml2ZXJzIHRvIGZyZWVseSBhc3NpZ24KLSAqIGNvbm5lY3Rv cnMgdG8gdGhlIGZiZGV2LCBlLmcuIGlmIHNvbWUgYXJlIHJlc2VydmVkIGZvciBzcGVjaWFsIHB1 cnBvc2VzIG9yCi0gKiBub3QgYWRlcXVhdGUgdG8gYmUgdXNlZCBmb3IgdGhlIGZiY29uLgotICoK LSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdGVjdGVkIGFnYWluc3QgY29uY3VycmVudCBjb25uZWN0 b3IgaG90YWRkcy9yZW1vdmFscwotICogdXNpbmcgZHJtX2ZiX2hlbHBlcl9hZGRfb25lX2Nvbm5l Y3RvcigpIGFuZAotICogZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcigpLgotICov Ci1pbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKHN0cnVjdCBkcm1f ZmJfaGVscGVyICpmYl9oZWxwZXIpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xpc3Rf aXRlciBjb25uX2l0ZXI7Ci0JaW50IGksIHJldCA9IDA7Ci0KLQlpZiAoIWRybV9mYmRldl9lbXVs YXRpb24gfHwgIWZiX2hlbHBlcikKLQkJcmV0dXJuIDA7Ci0KLQlkZXYgPSBmYl9oZWxwZXItPmRl djsKLQotCW11dGV4X2xvY2soJmZiX2hlbHBlci0+bG9jayk7Ci0JZHJtX2Nvbm5lY3Rvcl9saXN0 X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKLQlkcm1fZm9yX2VhY2hfY29ubmVjdG9yX2l0 ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Ci0JCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spCi0JCQljb250aW51ZTsKLQotCQly ZXQgPSBfX2RybV9mYl9oZWxwZXJfYWRkX29uZV9jb25uZWN0b3IoZmJfaGVscGVyLCBjb25uZWN0 b3IpOwotCQlpZiAocmV0KQotCQkJZ290byBmYWlsOwotCX0KLQlnb3RvIG91dDsKLQotZmFpbDoK LQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKLQkJc3Ry dWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwZXJfY29ubmVjdG9yID0KLQkJCWZi X2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07Ci0KLQkJZHJtX2Nvbm5lY3Rvcl9wdXQoZmJfaGVs cGVyX2Nvbm5lY3Rvci0+Y29ubmVjdG9yKTsKLQotCQlrZnJlZShmYl9oZWxwZXJfY29ubmVjdG9y KTsKLQkJZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXSA9IE5VTEw7Ci0JfQotCWZiX2hlbHBl ci0+Y29ubmVjdG9yX2NvdW50ID0gMDsKLW91dDoKLQlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9l bmQoJmNvbm5faXRlcik7Ci0JbXV0ZXhfdW5sb2NrKCZmYl9oZWxwZXItPmxvY2spOwotCi0JcmV0 dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9j b25uZWN0b3JzKTsKLQotc3RhdGljIGludCBfX2RybV9mYl9oZWxwZXJfcmVtb3ZlX29uZV9jb25u ZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQkJCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9y ICpmYl9oZWxwZXJfY29ubmVjdG9yOwotCWludCBpLCBqOwotCi0JaWYgKCFkcm1fZmJkZXZfZW11 bGF0aW9uKQotCQlyZXR1cm4gMDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmZiX2hlbHBlci0+ bG9jayk7Ci0KLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkp IHsKLQkJaWYgKGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV0tPmNvbm5lY3RvciA9PSBjb25u ZWN0b3IpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9j b3VudCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZmJfaGVscGVyX2Nvbm5lY3RvciA9IGZiX2hlbHBl ci0+Y29ubmVjdG9yX2luZm9baV07Ci0JZHJtX2Nvbm5lY3Rvcl9wdXQoZmJfaGVscGVyX2Nvbm5l Y3Rvci0+Y29ubmVjdG9yKTsKLQotCWZvciAoaiA9IGkgKyAxOyBqIDwgZmJfaGVscGVyLT5jb25u ZWN0b3JfY291bnQ7IGorKykKLQkJZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tqIC0gMV0gPSBm Yl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2pdOwotCi0JZmJfaGVscGVyLT5jb25uZWN0b3JfY291 bnQtLTsKLQlrZnJlZShmYl9oZWxwZXJfY29ubmVjdG9yKTsKLQotCXJldHVybiAwOwotfQotCi1p bnQgZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqZmJfaGVscGVyLAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KQotewotCWludCBlcnI7Ci0KLQlpZiAoIWZiX2hlbHBlcikKLQkJcmV0dXJuIDA7Ci0KLQltdXRl eF9sb2NrKCZmYl9oZWxwZXItPmxvY2spOwotCWVyciA9IF9fZHJtX2ZiX2hlbHBlcl9yZW1vdmVf b25lX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGNvbm5lY3Rvcik7Ci0JbXV0ZXhfdW5sb2NrKCZmYl9o ZWxwZXItPmxvY2spOwotCi0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woZHJtX2ZiX2hl bHBlcl9yZW1vdmVfb25lX2Nvbm5lY3Rvcik7Ci0KIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJf cmVzdG9yZV9sdXRfYXRvbWljKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAl1aW50MTZfdCAq cl9iYXNlLCAqZ19iYXNlLCAqYl9iYXNlOwpAQCAtNjQwLDIwICs0NzQsOSBAQCBpbnQgZHJtX2Zi X2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQlyZXR1cm4gcmV0OwogCX0K IAotCWZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm8gPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcu bnVtX2Nvbm5lY3Rvciwgc2l6ZW9mKHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvKQotCQlnb3RvIG91 dF9mcmVlOwotCi0JZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb19hbGxvY19jb3VudCA9IGRldi0+ bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKLQlmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCA9 IDA7Ci0KIAlkZXYtPmZiX2hlbHBlciA9IGZiX2hlbHBlcjsKIAogCXJldHVybiAwOwotb3V0X2Zy ZWU6Ci0JZHJtX2NsaWVudF9yZWxlYXNlKCZmYl9oZWxwZXItPmNsaWVudCk7Ci0KLQlyZXR1cm4g LUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9pbml0KTsKIApAQCAtNzI4 LDcgKzU1MSw2IEBAIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaSk7 CiB2b2lkIGRybV9mYl9oZWxwZXJfZmluaShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVy KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwotCWludCBpOwogCiAJaWYgKCFmYl9oZWxwZXIp CiAJCXJldHVybjsKQEAgLTc2MSwxMiArNTgzLDYgQEAgdm9pZCBkcm1fZmJfaGVscGVyX2Zpbmko c3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKIAogCWlmICghZmJfaGVscGVyLT5jbGll bnQuZnVuY3MpCiAJCWRybV9jbGllbnRfcmVsZWFzZSgmZmJfaGVscGVyLT5jbGllbnQpOwotCi0J Zm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKLQkJZHJt X2Nvbm5lY3Rvcl9wdXQoZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yKTsK LQkJa2ZyZWUoZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXSk7Ci0JfQotCWtmcmVlKGZiX2hl bHBlci0+Y29ubmVjdG9yX2luZm8pOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2Zp bmkpOwogCkBAIC0xNjQ1LDggKzE0NjEsOSBAQCBzdGF0aWMgaW50IGRybV9mYl9oZWxwZXJfc2lu Z2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7CiAJaW50IHJldCA9IDA7 CiAJaW50IGNydGNfY291bnQgPSAwOwotCWludCBpOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX2xp c3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplIHNp emVzOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGRybV9tb2Rl X3NldCAqbW9kZV9zZXQ7CiAJaW50IGJlc3RfZGVwdGggPSAwOwogCkBAIC0xNjYzLDExICsxNDgw LDExIEBAIHN0YXRpYyBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRy bV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAlpZiAocHJlZmVycmVkX2JwcCAhPSBzaXplcy5zdXJm YWNlX2JwcCkKIAkJc2l6ZXMuc3VyZmFjZV9kZXB0aCA9IHNpemVzLnN1cmZhY2VfYnBwID0gcHJl ZmVycmVkX2JwcDsKIAotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBl ciwgaSkgewotCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9jb25u ID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKKwlkcm1fY29ubmVjdG9yX2xpc3RfaXRl cl9iZWdpbihmYl9oZWxwZXItPmRldiwgJmNvbm5faXRlcik7CisJZHJtX2NsaWVudF9mb3JfZWFj aF9jb25uZWN0b3JfaXRlcihjb25uZWN0b3IsICZjb25uX2l0ZXIpIHsKIAkJc3RydWN0IGRybV9j bWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKIAotCQljbWRsaW5lX21vZGUgPSAmZmJfaGVscGVy X2Nvbm4tPmNvbm5lY3Rvci0+Y21kbGluZV9tb2RlOworCQljbWRsaW5lX21vZGUgPSAmY29ubmVj dG9yLT5jbWRsaW5lX21vZGU7CiAKIAkJaWYgKGNtZGxpbmVfbW9kZS0+YnBwX3NwZWNpZmllZCkg ewogCQkJc3dpdGNoIChjbWRsaW5lX21vZGUtPmJwcCkgewpAQCAtMTY5Miw2ICsxNTA5LDcgQEAg c3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqZmJfaGVscGVyLAogCQkJYnJlYWs7CiAJCX0KIAl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0 X2l0ZXJfZW5kKCZjb25uX2l0ZXIpOwogCiAJLyoKIAkgKiBJZiB3ZSBydW4gaW50byBhIHNpdHVh dGlvbiB3aGVyZSwgZm9yIGV4YW1wbGUsIHRoZSBwcmltYXJ5IHBsYW5lCkBAIC0xODc2LDI2ICsx Njk0LDEyIEBAIHZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2luZm8oc3RydWN0IGZiX2luZm8gKmlu Zm8sCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZmlsbF9pbmZvKTsKIAotc3RhdGlj IGludCBkcm1fZmJfaGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqZmJfaGVscGVyLAotCQkJCQkJdWludDMyX3QgbWF4WCwKLQkJCQkJCXVpbnQzMl90IG1h eFkpCi17Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlpbnQgaSwgY291bnQg PSAwOwotCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7 Ci0JCWNvbm5lY3RvciA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV0tPmNvbm5lY3RvcjsK LQkJY291bnQgKz0gY29ubmVjdG9yLT5mdW5jcy0+ZmlsbF9tb2Rlcyhjb25uZWN0b3IsIG1heFgs IG1heFkpOwotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmRybV9oYXNfcHJlZmVycmVkX21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9y ICpmYl9jb25uZWN0b3IsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqCitkcm1fY29ubmVjdG9yX2hhc19wcmVmZXJyZWRfbW9kZShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZGUs ICZmYl9jb25uZWN0b3ItPmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KG1vZGUsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CiAJCWlmIChtb2RlLT5oZGlz cGxheSA+IHdpZHRoIHx8CiAJCSAgICBtb2RlLT52ZGlzcGxheSA+IGhlaWdodCkKIAkJCWNvbnRp bnVlOwpAQCAtMTkwNCwyMCArMTcwOCwxNSBAQCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJt X2hhc19wcmVmZXJyZWRfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKgogCX0K IAlyZXR1cm4gTlVMTDsKIH0KLUVYUE9SVF9TWU1CT0woZHJtX2hhc19wcmVmZXJyZWRfbW9kZSk7 CiAKLXN0YXRpYyBib29sIGRybV9oYXNfY21kbGluZV9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVy X2Nvbm5lY3RvciAqZmJfY29ubmVjdG9yKQotewotCXJldHVybiBmYl9jb25uZWN0b3ItPmNvbm5l Y3Rvci0+Y21kbGluZV9tb2RlLnNwZWNpZmllZDsKLX0KLQotc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKmRybV9waWNrX2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3Ig KmZiX2hlbHBlcl9jb25uKQorc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoKK2RybV9j b25uZWN0b3JfcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cikKIHsKIAlzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqY21kbGluZV9tb2RlOwogCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlOwogCWJvb2wgcHJlZmVyX25vbl9pbnRlcmxhY2U7CiAKLQlj bWRsaW5lX21vZGUgPSAmZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+Y21kbGluZV9tb2RlOwor CWNtZGxpbmVfbW9kZSA9ICZjb25uZWN0b3ItPmNtZGxpbmVfbW9kZTsKIAlpZiAoY21kbGluZV9t b2RlLT5zcGVjaWZpZWQgPT0gZmFsc2UpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xOTI5LDcgKzE3 MjgsNyBAQCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX3BpY2tfY21kbGluZV9tb2RlKHN0 cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZgogCiAJcHJlZmVyX25vbl9pbnRlcmxhY2Ug PSAhY21kbGluZV9tb2RlLT5pbnRlcmxhY2U7CiBhZ2FpbjoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KG1vZGUsICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5tb2RlcywgaGVhZCkgeworCWxpc3Rf Zm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKIAkJLyogY2hl Y2sgd2lkdGgvaGVpZ2h0ICovCiAJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBjbWRsaW5lX21vZGUt PnhyZXMgfHwKIAkJICAgIG1vZGUtPnZkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eXJlcykKQEAg LTE5NTYsMTIgKzE3NTUsMTEgQEAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9waWNrX2Nt ZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmYKIAl9CiAKIGNyZWF0 ZV9tb2RlOgotCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGVfZnJvbV9jbWRsaW5lX21vZGUoZmJfaGVs cGVyX2Nvbm4tPmNvbm5lY3Rvci0+ZGV2LAotCQkJCQkJIGNtZGxpbmVfbW9kZSk7Ci0JbGlzdF9h ZGQoJm1vZGUtPmhlYWQsICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5tb2Rlcyk7CisJbW9k ZSA9IGRybV9tb2RlX2NyZWF0ZV9mcm9tX2NtZGxpbmVfbW9kZShjb25uZWN0b3ItPmRldiwgY21k bGluZV9tb2RlKTsKKwlsaXN0X2FkZCgmbW9kZS0+aGVhZCwgJmNvbm5lY3Rvci0+bW9kZXMpOwor CiAJcmV0dXJuIG1vZGU7CiB9Ci1FWFBPUlRfU1lNQk9MKGRybV9waWNrX2NtZGxpbmVfbW9kZSk7 CiAKIHN0YXRpYyBib29sIGRybV9jb25uZWN0b3JfZW5hYmxlZChzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yLCBib29sIHN0cmljdCkKIHsKQEAgLTE5NzgsMTUgKzE3NzYsMTYgQEAgc3Rh dGljIGJvb2wgZHJtX2Nvbm5lY3Rvcl9lbmFibGVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsIGJvb2wgc3RyaWN0KQogCXJldHVybiBlbmFibGU7CiB9CiAKLXN0YXRpYyB2b2lkIGRy bV9lbmFibGVfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJ CSAgYm9vbCAqZW5hYmxlZCkKK3N0YXRpYyB2b2lkIGRybV9jbGllbnRfY29ubmVjdG9yc19lbmFi bGVkKHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkJICB1bnNpZ25lZCBp bnQgY29ubmVjdG9yX2NvdW50LAorCQkJCQkgIGJvb2wgKmVuYWJsZWQpCiB7CiAJYm9vbCBhbnlf ZW5hYmxlZCA9IGZhbHNlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50 IGkgPSAwOwogCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBp KSB7Ci0JCWNvbm5lY3RvciA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV0tPmNvbm5lY3Rv cjsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKyspIHsKKwkJY29ubmVjdG9y ID0gY29ubmVjdG9yc1tpXTsKIAkJZW5hYmxlZFtpXSA9IGRybV9jb25uZWN0b3JfZW5hYmxlZChj b25uZWN0b3IsIHRydWUpOwogCQlEUk1fREVCVUdfS01TKCJjb25uZWN0b3IgJWQgZW5hYmxlZD8g JXNcbiIsIGNvbm5lY3Rvci0+YmFzZS5pZCwKIAkJCSAgICAgIGNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLm5vbl9kZXNrdG9wID8gIm5vbiBkZXNrdG9wIiA6IGVuYWJsZWRbaV0gPyAieWVzIiA6ICJu byIpOwpAQCAtMTk5NywyOCArMTc5NiwyNyBAQCBzdGF0aWMgdm9pZCBkcm1fZW5hYmxlX2Nvbm5l Y3RvcnMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAlpZiAoYW55X2VuYWJsZWQp CiAJCXJldHVybjsKIAotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBl ciwgaSkgewotCQljb25uZWN0b3IgPSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldLT5jb25u ZWN0b3I7Ci0JCWVuYWJsZWRbaV0gPSBkcm1fY29ubmVjdG9yX2VuYWJsZWQoY29ubmVjdG9yLCBm YWxzZSk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykKKwkJZW5h YmxlZFtpXSA9IGRybV9jb25uZWN0b3JfZW5hYmxlZChjb25uZWN0b3JzW2ldLCBmYWxzZSk7CiB9 CiAKLXN0YXRpYyBib29sIGRybV90YXJnZXRfY2xvbmVkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJ ICAgICAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCi0JCQkgICAgICBib29sICplbmFi bGVkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCitzdGF0aWMgYm9vbCBkcm1fY2xpZW50X3Rhcmdl dF9jbG9uZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkcm1fY29u bmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjb25uZWN0b3JfY291 bnQsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAorCQkJCSAgICAg c3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJICAgICBib29sICplbmFibGVkLCBp bnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAJaW50IGNvdW50LCBpLCBqOwogCWJvb2wgY2FuX2Ns b25lID0gZmFsc2U7Ci0Jc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwZXJf Y29ubjsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZG10X21vZGUsICptb2RlOwogCiAJLyog b25seSBjb250ZW1wbGF0ZSBjbG9uaW5nIGluIHRoZSBzaW5nbGUgY3J0YyBjYXNlICovCi0JaWYg KGZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YyA+IDEpCisJaWYgKGRldi0+bW9k ZV9jb25maWcubnVtX2NydGMgPiAxKQogCQlyZXR1cm4gZmFsc2U7CiAKIAljb3VudCA9IDA7Ci0J ZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBpKSB7CisJZm9yIChp ID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsrKSB7CiAJCWlmIChlbmFibGVkW2ldKQogCQkJ Y291bnQrKzsKIAl9CkBAIC0yMDI5LDExICsxODI3LDEwIEBAIHN0YXRpYyBib29sIGRybV90YXJn ZXRfY2xvbmVkKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAKIAkvKiBjaGVjayB0 aGUgY29tbWFuZCBsaW5lIG9yIGlmIG5vdGhpbmcgY29tbW9uIHBpY2sgMTAyNHg3NjggKi8KIAlj YW5fY2xvbmUgPSB0cnVlOwotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hl bHBlciwgaSkgeworCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkrKykgewogCQlp ZiAoIWVuYWJsZWRbaV0pCiAJCQljb250aW51ZTsKLQkJZmJfaGVscGVyX2Nvbm4gPSBmYl9oZWxw ZXItPmNvbm5lY3Rvcl9pbmZvW2ldOwotCQltb2Rlc1tpXSA9IGRybV9waWNrX2NtZGxpbmVfbW9k ZShmYl9oZWxwZXJfY29ubik7CisJCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9waWNrX2NtZGxp bmVfbW9kZShjb25uZWN0b3JzW2ldKTsKIAkJaWYgKCFtb2Rlc1tpXSkgewogCQkJY2FuX2Nsb25l ID0gZmFsc2U7CiAJCQlicmVhazsKQEAgLTIwNTcsMTQgKzE4NTQsMTMgQEAgc3RhdGljIGJvb2wg ZHJtX3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAogCS8q IHRyeSBhbmQgZmluZCBhIDEwMjR4NzY4IG1vZGUgb24gZWFjaCBjb25uZWN0b3IgKi8KIAljYW5f Y2xvbmUgPSB0cnVlOwotCWRtdF9tb2RlID0gZHJtX21vZGVfZmluZF9kbXQoZmJfaGVscGVyLT5k ZXYsIDEwMjQsIDc2OCwgNjAsIGZhbHNlKTsKKwlkbXRfbW9kZSA9IGRybV9tb2RlX2ZpbmRfZG10 KGRldiwgMTAyNCwgNzY4LCA2MCwgZmFsc2UpOwogCi0JZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9j b25uZWN0b3IoZmJfaGVscGVyLCBpKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3Vu dDsgaSsrKSB7CiAJCWlmICghZW5hYmxlZFtpXSkKIAkJCWNvbnRpbnVlOwogCi0JCWZiX2hlbHBl cl9jb25uID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXTsKLQkJbGlzdF9mb3JfZWFjaF9l bnRyeShtb2RlLCAmZmJfaGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJ bGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yc1tpXS0+bW9kZXMsIGhlYWQpIHsK IAkJCWlmIChkcm1fbW9kZV9tYXRjaChtb2RlLCBkbXRfbW9kZSwKIAkJCQkJICAgRFJNX01PREVf TUFUQ0hfVElNSU5HUyB8CiAJCQkJCSAgIERSTV9NT0RFX01BVENIX0NMT0NLIHwKQEAgLTIwODQs MzAgKzE4ODAsMzEgQEAgc3RhdGljIGJvb2wgZHJtX3RhcmdldF9jbG9uZWQoc3RydWN0IGRybV9m Yl9oZWxwZXIgKmZiX2hlbHBlciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgZHJt X2dldF90aWxlX29mZnNldHMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCXN0cnVjdCBkcm1fZmJfb2Zmc2V0 ICpvZmZzZXRzLAotCQkJCWludCBpZHgsCi0JCQkJaW50IGhfaWR4LCBpbnQgdl9pZHgpCitzdGF0 aWMgaW50IGRybV9jbGllbnRfZ2V0X3RpbGVfb2Zmc2V0cyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq KmNvbm5lY3RvcnMsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBjb25uZWN0b3JfY291bnQsCisJ CQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJICAgICAgIHN0 cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAorCQkJCSAgICAgICBpbnQgaWR4LAorCQkJCSAg ICAgICBpbnQgaF9pZHgsIGludCB2X2lkeCkKIHsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25u ZWN0b3IgKmZiX2hlbHBlcl9jb25uOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7 CiAJaW50IGk7CiAJaW50IGhvZmZzZXQgPSAwLCB2b2Zmc2V0ID0gMDsKIAotCWRybV9mYl9oZWxw ZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBlciwgaSkgewotCQlmYl9oZWxwZXJfY29ubiA9 IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07Ci0JCWlmICghZmJfaGVscGVyX2Nvbm4tPmNv bm5lY3Rvci0+aGFzX3RpbGUpCisJZm9yIChpID0gMDsgaSA8IGNvbm5lY3Rvcl9jb3VudDsgaSsr KSB7CisJCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNbaV07CisJCWlmICghY29ubmVjdG9yLT5oYXNf dGlsZSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghbW9kZXNbaV0gJiYgKGhfaWR4IHx8IHZfaWR4 KSkgewogCQkJRFJNX0RFQlVHX0tNUygibm8gbW9kZXMgZm9yIGNvbm5lY3RvciB0aWxlZCAlZCAl ZFxuIiwgaSwKLQkJCQkgICAgICBmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5iYXNlLmlkKTsK KwkJCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYg KGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfaF9sb2MgPCBoX2lkeCkKKwkJaWYgKGNv bm5lY3Rvci0+dGlsZV9oX2xvYyA8IGhfaWR4KQogCQkJaG9mZnNldCArPSBtb2Rlc1tpXS0+aGRp c3BsYXk7CiAKLQkJaWYgKGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfdl9sb2MgPCB2 X2lkeCkKKwkJaWYgKGNvbm5lY3Rvci0+dGlsZV92X2xvYyA8IHZfaWR4KQogCQkJdm9mZnNldCAr PSBtb2Rlc1tpXS0+dmRpc3BsYXk7CiAJfQogCW9mZnNldHNbaWR4XS54ID0gaG9mZnNldDsKQEAg LTIxMTYsMjAgKzE5MTMsMjEgQEAgc3RhdGljIGludCBkcm1fZ2V0X3RpbGVfb2Zmc2V0cyhzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9v bCBkcm1fdGFyZ2V0X3ByZWZlcnJlZChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAot CQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqKm1vZGVzLAotCQkJCSBzdHJ1Y3QgZHJtX2Zi X29mZnNldCAqb2Zmc2V0cywKLQkJCQkgYm9vbCAqZW5hYmxlZCwgaW50IHdpZHRoLCBpbnQgaGVp Z2h0KQorc3RhdGljIGJvb2wgZHJtX2NsaWVudF90YXJnZXRfcHJlZmVycmVkKHN0cnVjdCBkcm1f Y29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkJdW5zaWduZWQgaW50IGNvbm5lY3Rvcl9jb3Vu dCwKKwkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKKwkJCQkJc3RydWN0IGRy bV9mYl9vZmZzZXQgKm9mZnNldHMsCisJCQkJCWJvb2wgKmVuYWJsZWQsIGludCB3aWR0aCwgaW50 IGhlaWdodCkKIHsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBlcl9j b25uOwotCWNvbnN0IHU2NCBtYXNrID0gQklUX1VMTChmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3Vu dCkgLSAxOworCWNvbnN0IHU2NCBtYXNrID0gQklUX1VMTChjb25uZWN0b3JfY291bnQpIC0gMTsK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXU2NCBjb25uX2NvbmZpZ3VyZWQg PSAwOwogCWludCB0aWxlX3Bhc3MgPSAwOwogCWludCBpOwogCiByZXRyeToKLQlkcm1fZmJfaGVs cGVyX2Zvcl9lYWNoX2Nvbm5lY3RvcihmYl9oZWxwZXIsIGkpIHsKLQkJZmJfaGVscGVyX2Nvbm4g PSBmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvW2ldOworCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0 b3JfY291bnQ7IGkrKykgeworCQljb25uZWN0b3IgPSBjb25uZWN0b3JzW2ldOwogCiAJCWlmIChj b25uX2NvbmZpZ3VyZWQgJiBCSVRfVUxMKGkpKQogCQkJY29udGludWU7CkBAIC0yMTQwLDE3ICsx OTM4LDE3IEBAIHN0YXRpYyBib29sIGRybV90YXJnZXRfcHJlZmVycmVkKHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIsCiAJCX0KIAogCQkvKiBmaXJzdCBwYXNzIG92ZXIgYWxsIHRoZSB1 bnRpbGVkIGNvbm5lY3RvcnMgKi8KLQkJaWYgKHRpbGVfcGFzcyA9PSAwICYmIGZiX2hlbHBlcl9j b25uLT5jb25uZWN0b3ItPmhhc190aWxlKQorCQlpZiAodGlsZV9wYXNzID09IDAgJiYgY29ubmVj dG9yLT5oYXNfdGlsZSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh0aWxlX3Bhc3MgPT0gMSkgewot CQkJaWYgKGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfaF9sb2MgIT0gMCB8fAotCQkJ ICAgIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfdl9sb2MgIT0gMCkKKwkJCWlmIChj b25uZWN0b3ItPnRpbGVfaF9sb2MgIT0gMCB8fAorCQkJICAgIGNvbm5lY3Rvci0+dGlsZV92X2xv YyAhPSAwKQogCQkJCWNvbnRpbnVlOwogCiAJCX0gZWxzZSB7Ci0JCQlpZiAoZmJfaGVscGVyX2Nv bm4tPmNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSB0aWxlX3Bhc3MgLSAxICYmCi0JCQkgICAgZmJf aGVscGVyX2Nvbm4tPmNvbm5lY3Rvci0+dGlsZV92X2xvYyAhPSB0aWxlX3Bhc3MgLSAxKQorCQkJ aWYgKGNvbm5lY3Rvci0+dGlsZV9oX2xvYyAhPSB0aWxlX3Bhc3MgLSAxICYmCisJCQkgICAgY29u bmVjdG9yLT50aWxlX3ZfbG9jICE9IHRpbGVfcGFzcyAtIDEpCiAJCQkvKiBpZiB0aGlzIHRpbGVf cGFzcyBkb2Vzbid0IGNvdmVyIGFueSBvZiB0aGUgdGlsZXMgLSBrZWVwIGdvaW5nICovCiAJCQkJ Y29udGludWU7CiAKQEAgLTIxNTgsMjIgKzE5NTYsMjIgQEAgc3RhdGljIGJvb2wgZHJtX3Rhcmdl dF9wcmVmZXJyZWQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCSAqIGZpbmQg dGhlIHRpbGUgb2Zmc2V0cyBmb3IgdGhpcyBwYXNzIC0gbmVlZCB0byBmaW5kCiAJCQkgKiBhbGwg dGlsZXMgbGVmdCBhbmQgYWJvdmUKIAkJCSAqLwotCQkJZHJtX2dldF90aWxlX29mZnNldHMoZmJf aGVscGVyLCBtb2Rlcywgb2Zmc2V0cywKLQkJCQkJICAgICBpLCBmYl9oZWxwZXJfY29ubi0+Y29u bmVjdG9yLT50aWxlX2hfbG9jLCBmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT50aWxlX3ZfbG9j KTsKKwkJCWRybV9jbGllbnRfZ2V0X3RpbGVfb2Zmc2V0cyhjb25uZWN0b3JzLCBjb25uZWN0b3Jf Y291bnQsIG1vZGVzLCBvZmZzZXRzLCBpLAorCQkJCQkJICAgIGNvbm5lY3Rvci0+dGlsZV9oX2xv YywgY29ubmVjdG9yLT50aWxlX3ZfbG9jKTsKIAkJfQogCQlEUk1fREVCVUdfS01TKCJsb29raW5n IGZvciBjbWRsaW5lIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAotCQkJICAgICAgZmJfaGVscGVy X2Nvbm4tPmNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQp OwogCiAJCS8qIGdvdCBmb3IgY29tbWFuZCBsaW5lIG1vZGUgZmlyc3QgKi8KLQkJbW9kZXNbaV0g PSBkcm1fcGlja19jbWRsaW5lX21vZGUoZmJfaGVscGVyX2Nvbm4pOworCQltb2Rlc1tpXSA9IGRy bV9jb25uZWN0b3JfcGlja19jbWRsaW5lX21vZGUoY29ubmVjdG9yKTsKIAkJaWYgKCFtb2Rlc1tp XSkgewogCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29u bmVjdG9yICVkICVkXG4iLAotCQkJCSAgICAgIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPmJh c2UuaWQsIGZiX2hlbHBlcl9jb25uLT5jb25uZWN0b3ItPnRpbGVfZ3JvdXAgPyBmYl9oZWxwZXJf Y29ubi0+Y29ubmVjdG9yLT50aWxlX2dyb3VwLT5pZCA6IDApOwotCQkJbW9kZXNbaV0gPSBkcm1f aGFzX3ByZWZlcnJlZF9tb2RlKGZiX2hlbHBlcl9jb25uLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCQkg ICAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvci0+dGlsZV9ncm91cCA/IGNvbm5lY3Rv ci0+dGlsZV9ncm91cC0+aWQgOiAwKTsKKwkJCW1vZGVzW2ldID0gZHJtX2Nvbm5lY3Rvcl9oYXNf cHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKIAkJfQogCQkvKiBObyBw cmVmZXJyZWQgbW9kZXMsIHBpY2sgb25lIG9mZiB0aGUgbGlzdCAqLwotCQlpZiAoIW1vZGVzW2ld ICYmICFsaXN0X2VtcHR5KCZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9yLT5tb2RlcykpIHsKLQkJ CWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZXNbaV0sICZmYl9oZWxwZXJfY29ubi0+Y29ubmVjdG9y LT5tb2RlcywgaGVhZCkKKwkJaWYgKCFtb2Rlc1tpXSAmJiAhbGlzdF9lbXB0eSgmY29ubmVjdG9y LT5tb2RlcykpIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZXNbaV0sICZjb25uZWN0b3It Pm1vZGVzLCBoZWFkKQogCQkJCWJyZWFrOwogCQl9CiAJCURSTV9ERUJVR19LTVMoImZvdW5kIG1v ZGUgJXNcbiIsIG1vZGVzW2ldID8gbW9kZXNbaV0tPm5hbWUgOgpAQCAtMjIwMiw0MCArMjAwMCw0 MSBAQCBzdGF0aWMgYm9vbCBjb25uZWN0b3JfaGFzX3Bvc3NpYmxlX2NydGMoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgZHJt X3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCSAgc3RydWN0 IGRybV9jcnRjICoqYmVzdF9jcnRjcywKLQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKipt b2RlcywKLQkJCSAgaW50IG4sIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBpbnQgZHJt X2NsaWVudF9waWNrX2NydGNzKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAorCQkJCSBz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCisJCQkJIHVuc2lnbmVkIGludCBjb25u ZWN0b3JfY291bnQsCisJCQkJIHN0cnVjdCBkcm1fY3J0YyAqKmJlc3RfY3J0Y3MsCisJCQkJIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJIGludCBuLCBpbnQgd2lkdGgsIGlu dCBoZWlnaHQpCiB7Ci0Jc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVy LT5jbGllbnQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2OwogCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50IG15X3Njb3JlLCBiZXN0X3Njb3JlLCBz Y29yZTsKIAlzdHJ1Y3QgZHJtX2NydGMgKipjcnRjcywgKmNydGM7CiAJc3RydWN0IGRybV9tb2Rl X3NldCAqbW9kZXNldDsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBl cl9jb25uOwogCWludCBvOwogCi0JaWYgKG4gPT0gZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQp CisJaWYgKG4gPT0gY29ubmVjdG9yX2NvdW50KQogCQlyZXR1cm4gMDsKIAotCWZiX2hlbHBlcl9j b25uID0gZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tuXTsKLQljb25uZWN0b3IgPSBmYl9oZWxw ZXJfY29ubi0+Y29ubmVjdG9yOworCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNbbl07CiAKIAliZXN0 X2NydGNzW25dID0gTlVMTDsKLQliZXN0X3Njb3JlID0gZHJtX3BpY2tfY3J0Y3MoZmJfaGVscGVy LCBiZXN0X2NydGNzLCBtb2RlcywgbisxLCB3aWR0aCwgaGVpZ2h0KTsKKwliZXN0X3Njb3JlID0g ZHJtX2NsaWVudF9waWNrX2NydGNzKGNsaWVudCwgY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50 LAorCQkJCQkgICBiZXN0X2NydGNzLCBtb2RlcywgbiArIDEsIHdpZHRoLCBoZWlnaHQpOwogCWlm IChtb2Rlc1tuXSA9PSBOVUxMKQogCQlyZXR1cm4gYmVzdF9zY29yZTsKIAotCWNydGNzID0ga2Nh bGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwgc2l6ZW9mKCpjcnRjcyksIEdGUF9LRVJO RUwpOworCWNydGNzID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqY3J0Y3MpLCBH RlBfS0VSTkVMKTsKIAlpZiAoIWNydGNzKQogCQlyZXR1cm4gYmVzdF9zY29yZTsKIAogCW15X3Nj b3JlID0gMTsKIAlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25u ZWN0ZWQpCiAJCW15X3Njb3JlKys7Ci0JaWYgKGRybV9oYXNfY21kbGluZV9tb2RlKGZiX2hlbHBl cl9jb25uKSkKKwlpZiAoY29ubmVjdG9yLT5jbWRsaW5lX21vZGUuc3BlY2lmaWVkKQogCQlteV9z Y29yZSsrOwotCWlmIChkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGZiX2hlbHBlcl9jb25uLCB3aWR0 aCwgaGVpZ2h0KSkKKwlpZiAoZHJtX2Nvbm5lY3Rvcl9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVj dG9yLCB3aWR0aCwgaGVpZ2h0KSkKIAkJbXlfc2NvcmUrKzsKIAogCS8qCkBAIC0yMjU0LDcgKzIw NTMsNyBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCiAKIAkJaWYgKG8gPCBuKSB7CiAJCQkvKiBpZ25vcmUgY2xvbmluZyB1bmxlc3Mg b25seSBhIHNpbmdsZSBjcnRjICovCi0JCQlpZiAoZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmln Lm51bV9jcnRjID4gMSkKKwkJCWlmIChkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjID4gMSkKIAkJ CQljb250aW51ZTsKIAogCQkJaWYgKCFkcm1fbW9kZV9lcXVhbChtb2Rlc1tvXSwgbW9kZXNbbl0p KQpAQCAtMjI2MywxMiArMjA2MiwxMSBAQCBzdGF0aWMgaW50IGRybV9waWNrX2NydGNzKHN0cnVj dCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAKIAkJY3J0Y3Nbbl0gPSBjcnRjOwogCQltZW1j cHkoY3J0Y3MsIGJlc3RfY3J0Y3MsIG4gKiBzaXplb2YoKmNydGNzKSk7Ci0JCXNjb3JlID0gbXlf c2NvcmUgKyBkcm1fcGlja19jcnRjcyhmYl9oZWxwZXIsIGNydGNzLCBtb2RlcywgbiArIDEsCi0J CQkJCQkgIHdpZHRoLCBoZWlnaHQpOworCQlzY29yZSA9IG15X3Njb3JlICsgZHJtX2NsaWVudF9w aWNrX2NydGNzKGNsaWVudCwgY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50LAorCQkJCQkJCSBj cnRjcywgbW9kZXMsIG4gKyAxLCB3aWR0aCwgaGVpZ2h0KTsKIAkJaWYgKHNjb3JlID4gYmVzdF9z Y29yZSkgewogCQkJYmVzdF9zY29yZSA9IHNjb3JlOwotCQkJbWVtY3B5KGJlc3RfY3J0Y3MsIGNy dGNzLAotCQkJICAgICAgIGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50ICogc2l6ZW9mKCpjcnRj cykpOworCQkJbWVtY3B5KGJlc3RfY3J0Y3MsIGNydGNzLCBjb25uZWN0b3JfY291bnQgKiBzaXpl b2YoKmNydGNzKSk7CiAJCX0KIAl9CiAKQEAgLTIyNzcsMTUgKzIwNzUsMTcgQEAgc3RhdGljIGlu dCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogfQogCiAv KiBUcnkgdG8gcmVhZCB0aGUgQklPUyBkaXNwbGF5IGNvbmZpZ3VyYXRpb24gYW5kIHVzZSBpdCBm b3IgdGhlIGluaXRpYWwgY29uZmlnICovCi1zdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13 YXJlX2NvbmZpZyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAotCQkJCQkgIHN0cnVj dCBkcm1fY3J0YyAqKmNydGNzLAotCQkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9k ZXMsCi0JCQkJCSAgc3RydWN0IGRybV9mYl9vZmZzZXQgKm9mZnNldHMsCi0JCQkJCSAgYm9vbCAq ZW5hYmxlZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorc3RhdGljIGJvb2wgZHJtX2NsaWVudF9m aXJtd2FyZV9jb25maWcoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCisJCQkJICAgICAg IHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9ycywKKwkJCQkgICAgICAgdW5zaWduZWQg aW50IGNvbm5lY3Rvcl9jb3VudCwKKwkJCQkgICAgICAgc3RydWN0IGRybV9jcnRjICoqY3J0Y3Ms CisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCisJCQkJICAgICAg IHN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXRzLAorCQkJCSAgICAgICBib29sICplbmFibGVk LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZi X2hlbHBlci0+ZGV2OwotCXVuc2lnbmVkIGludCBjb3VudCA9IG1pbihmYl9oZWxwZXItPmNvbm5l Y3Rvcl9jb3VudCwgQklUU19QRVJfTE9ORyk7CisJdW5zaWduZWQgaW50IGNvdW50ID0gbWluX3Qo dW5zaWduZWQgaW50LCBjb25uZWN0b3JfY291bnQsIEJJVFNfUEVSX0xPTkcpOwogCXVuc2lnbmVk IGxvbmcgY29ubl9jb25maWd1cmVkLCBjb25uX3NlcSwgbWFzazsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gY2xpZW50LT5kZXY7CiAJaW50IGksIGo7CiAJYm9vbCAqc2F2ZV9lbmFibGVkOwog CWJvb2wgZmFsbGJhY2sgPSB0cnVlLCByZXQgPSB0cnVlOwpAQCAtMjMxMSwxMyArMjExMSwxMSBA QCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyLAogcmV0cnk6CiAJY29ubl9zZXEgPSBjb25uX2NvbmZpZ3VyZWQ7 CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9mYl9oZWxwZXJf Y29ubmVjdG9yICpmYl9jb25uOwogCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwog CQlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJCXN0cnVjdCBkcm1fY3J0YyAqbmV3X2Ny dGM7CiAKLQkJZmJfY29ubiA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07Ci0JCWNvbm5l Y3RvciA9IGZiX2Nvbm4tPmNvbm5lY3RvcjsKKwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsK IAogCQlpZiAoY29ubl9jb25maWd1cmVkICYgQklUKGkpKQogCQkJY29udGludWU7CkBAIC0yMzc0 LDE0ICsyMTcyLDEzIEBAIHN0YXRpYyBib29sIGRybV9mYl9oZWxwZXJfZmlybXdhcmVfY29uZmln KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgICBjb25uZWN0b3ItPm5h bWUpOwogCiAJCS8qIGdvIGZvciBjb21tYW5kIGxpbmUgbW9kZSBmaXJzdCAqLwotCQltb2Rlc1tp XSA9IGRybV9waWNrX2NtZGxpbmVfbW9kZShmYl9jb25uKTsKKwkJbW9kZXNbaV0gPSBkcm1fY29u bmVjdG9yX3BpY2tfY21kbGluZV9tb2RlKGNvbm5lY3Rvcik7CiAKIAkJLyogdHJ5IGZvciBwcmVm ZXJyZWQgbmV4dCAqLwogCQlpZiAoIW1vZGVzW2ldKSB7CiAJCQlEUk1fREVCVUdfS01TKCJsb29r aW5nIGZvciBwcmVmZXJyZWQgbW9kZSBvbiBjb25uZWN0b3IgJXMgJWRcbiIsCiAJCQkJICAgICAg Y29ubmVjdG9yLT5uYW1lLCBjb25uZWN0b3ItPmhhc190aWxlKTsKLQkJCW1vZGVzW2ldID0gZHJt X2hhc19wcmVmZXJyZWRfbW9kZShmYl9jb25uLCB3aWR0aCwKLQkJCQkJCQkgIGhlaWdodCk7CisJ CQltb2Rlc1tpXSA9IGRybV9jb25uZWN0b3JfaGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwg d2lkdGgsIGhlaWdodCk7CiAJCX0KIAogCQkvKiBObyBwcmVmZXJyZWQgbW9kZSBtYXJrZWQgYnkg dGhlIEVESUQ/IEFyZSB0aGVyZSBhbnkgbW9kZXM/ICovCkBAIC0yNDU2LDggKzIyNTMsMTIgQEAg c3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9maXJtd2FyZV9jb25maWcoc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwKIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQkJICAgIHUzMiB3aWR0aCwgdTMyIGhlaWdodCkKIHsK KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCAqKmNvbm5lY3RvcnMgPSBOVUxMOwog CXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gJmZiX2hlbHBlci0+Y2xpZW50OworCXN0 cnVjdCBkcm1fY29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7CiAJc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGZiX2hlbHBlci0+ZGV2OworCXVuc2lnbmVkIGludCB0b3RhbF9tb2Rlc19jb3Vu dCA9IDA7CisJdW5zaWduZWQgaW50IGNvbm5lY3Rvcl9jb3VudCA9IDA7CiAJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKiptb2RlczsKIAlzdHJ1Y3QgZHJtX2ZiX29mZnNldCAqb2Zmc2V0czsKIAlz dHJ1Y3QgZHJtX2NydGMgKipjcnRjczsKQEAgLTI0NjUsMTYgKzIyNjYsMjggQEAgc3RhdGljIHZv aWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJaW50 IGk7CiAKIAlEUk1fREVCVUdfS01TKCJcbiIpOwotCS8qIHByZXZlbnQgY29uY3VycmVudCBtb2Rp ZmljYXRpb24gb2YgY29ubmVjdG9yX2NvdW50IGJ5IGhvdHBsdWcgKi8KLQlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZmYl9oZWxwZXItPmxvY2spOwogCi0JY3J0Y3MgPSBrY2FsbG9jKGZiX2hlbHBlci0+ Y29ubmVjdG9yX2NvdW50LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7Ci0JbW9kZXMgPSBr Y2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LAotCQkJc2l6ZW9mKHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICopLCBHRlBfS0VSTkVMKTsKLQlvZmZzZXRzID0ga2NhbGxvYyhmYl9oZWxw ZXItPmNvbm5lY3Rvcl9jb3VudCwKLQkJCSAgc2l6ZW9mKHN0cnVjdCBkcm1fZmJfb2Zmc2V0KSwg R0ZQX0tFUk5FTCk7Ci0JZW5hYmxlZCA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3JfY291 bnQsCi0JCQkgIHNpemVvZihib29sKSwgR0ZQX0tFUk5FTCk7CisJZHJtX2Nvbm5lY3Rvcl9saXN0 X2l0ZXJfYmVnaW4oZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fY2xpZW50X2Zvcl9lYWNoX2Nvbm5l Y3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgeworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqKnRtcDsKKworCQl0bXAgPSBrcmVhbGxvYyhjb25uZWN0b3JzLCAoY29ubmVjdG9yX2NvdW50 ICsgMSkgKiBzaXplb2YoKmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0bXApCisJ CQlnb3RvIGZyZWVfY29ubmVjdG9yczsKKworCQljb25uZWN0b3JzID0gdG1wOworCQlkcm1fY29u bmVjdG9yX2dldChjb25uZWN0b3IpOworCQljb25uZWN0b3JzW2Nvbm5lY3Rvcl9jb3VudCsrXSA9 IGNvbm5lY3RvcjsKKwl9CisJZHJtX2Nvbm5lY3Rvcl9saXN0X2l0ZXJfZW5kKCZjb25uX2l0ZXIp OworCisJaWYgKCFjb25uZWN0b3JfY291bnQpCisJCXJldHVybjsKKworCWNydGNzID0ga2NhbGxv Yyhjb25uZWN0b3JfY291bnQsIHNpemVvZigqY3J0Y3MpLCBHRlBfS0VSTkVMKTsKKwltb2RlcyA9 IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2YoKm1vZGVzKSwgR0ZQX0tFUk5FTCk7CisJ b2Zmc2V0cyA9IGtjYWxsb2MoY29ubmVjdG9yX2NvdW50LCBzaXplb2YoKm9mZnNldHMpLCBHRlBf S0VSTkVMKTsKKwllbmFibGVkID0ga2NhbGxvYyhjb25uZWN0b3JfY291bnQsIHNpemVvZihib29s KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcnRjcyB8fCAhbW9kZXMgfHwgIWVuYWJsZWQgfHwgIW9m ZnNldHMpIHsKIAkJRFJNX0VSUk9SKCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQln b3RvIG91dDsKQEAgLTI0ODMsNDAgKzIyOTYsNDIgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2Ny dGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJbXV0ZXhfbG9jaygmY2xpZW50 LT5tb2Rlc2V0X211dGV4KTsKIAogCW11dGV4X2xvY2soJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7Ci0JaWYgKGRybV9mYl9oZWxwZXJfcHJvYmVfY29ubmVjdG9yX21vZGVzKGZi X2hlbHBlciwgd2lkdGgsIGhlaWdodCkgPT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9y X2NvdW50OyBpKyspCisJCXRvdGFsX21vZGVzX2NvdW50ICs9IGNvbm5lY3RvcnNbaV0tPmZ1bmNz LT5maWxsX21vZGVzKGNvbm5lY3RvcnNbaV0sIHdpZHRoLCBoZWlnaHQpOworCWlmICghdG90YWxf bW9kZXNfY291bnQpCiAJCURSTV9ERUJVR19LTVMoIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29u bmVjdGVkIHdpdGggbW9kZXNcbiIpOwotCWRybV9lbmFibGVfY29ubmVjdG9ycyhmYl9oZWxwZXIs IGVuYWJsZWQpOworCWRybV9jbGllbnRfY29ubmVjdG9yc19lbmFibGVkKGNvbm5lY3RvcnMsIGNv bm5lY3Rvcl9jb3VudCwgZW5hYmxlZCk7CiAKLQlpZiAoIWRybV9mYl9oZWxwZXJfZmlybXdhcmVf Y29uZmlnKGZiX2hlbHBlciwgY3J0Y3MsIG1vZGVzLCBvZmZzZXRzLAotCQkJCQkgICBlbmFibGVk LCB3aWR0aCwgaGVpZ2h0KSkgewotCQltZW1zZXQobW9kZXMsIDAsIGZiX2hlbHBlci0+Y29ubmVj dG9yX2NvdW50KnNpemVvZihtb2Rlc1swXSkpOwotCQltZW1zZXQoY3J0Y3MsIDAsIGZiX2hlbHBl ci0+Y29ubmVjdG9yX2NvdW50KnNpemVvZihjcnRjc1swXSkpOwotCQltZW1zZXQob2Zmc2V0cywg MCwgZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQqc2l6ZW9mKG9mZnNldHNbMF0pKTsKKwlpZiAo IWRybV9jbGllbnRfZmlybXdhcmVfY29uZmlnKGNsaWVudCwgY29ubmVjdG9ycywgY29ubmVjdG9y X2NvdW50LCBjcnRjcywKKwkJCQkJbW9kZXMsIG9mZnNldHMsIGVuYWJsZWQsIHdpZHRoLCBoZWln aHQpKSB7CisJCW1lbXNldChtb2RlcywgMCwgY29ubmVjdG9yX2NvdW50ICogc2l6ZW9mKCptb2Rl cykpOworCQltZW1zZXQoY3J0Y3MsIDAsIGNvbm5lY3Rvcl9jb3VudCAqIHNpemVvZigqY3J0Y3Mp KTsKKwkJbWVtc2V0KG9mZnNldHMsIDAsIGNvbm5lY3Rvcl9jb3VudCAqIHNpemVvZigqb2Zmc2V0 cykpOwogCi0JCWlmICghZHJtX3RhcmdldF9jbG9uZWQoZmJfaGVscGVyLCBtb2Rlcywgb2Zmc2V0 cywKLQkJCQkgICAgICAgZW5hYmxlZCwgd2lkdGgsIGhlaWdodCkgJiYKLQkJICAgICFkcm1fdGFy Z2V0X3ByZWZlcnJlZChmYl9oZWxwZXIsIG1vZGVzLCBvZmZzZXRzLAotCQkJCQkgIGVuYWJsZWQs IHdpZHRoLCBoZWlnaHQpKQorCQlpZiAoIWRybV9jbGllbnRfdGFyZ2V0X2Nsb25lZChkZXYsIGNv bm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwgbW9kZXMsCisJCQkJCSAgICAgIG9mZnNldHMsIGVu YWJsZWQsIHdpZHRoLCBoZWlnaHQpICYmCisJCSAgICAhZHJtX2NsaWVudF90YXJnZXRfcHJlZmVy cmVkKGNvbm5lY3RvcnMsIGNvbm5lY3Rvcl9jb3VudCwgbW9kZXMsCisJCQkJCQkgb2Zmc2V0cywg ZW5hYmxlZCwgd2lkdGgsIGhlaWdodCkpCiAJCQlEUk1fRVJST1IoIlVuYWJsZSB0byBmaW5kIGlu aXRpYWwgbW9kZXNcbiIpOwogCiAJCURSTV9ERUJVR19LTVMoInBpY2tpbmcgQ1JUQ3MgZm9yICVk eCVkIGNvbmZpZ1xuIiwKIAkJCSAgICAgIHdpZHRoLCBoZWlnaHQpOwogCi0JCWRybV9waWNrX2Ny dGNzKGZiX2hlbHBlciwgY3J0Y3MsIG1vZGVzLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKwkJZHJtX2Ns aWVudF9waWNrX2NydGNzKGNsaWVudCwgY29ubmVjdG9ycywgY29ubmVjdG9yX2NvdW50LAorCQkJ CSAgICAgIGNydGNzLCBtb2RlcywgMCwgd2lkdGgsIGhlaWdodCk7CiAJfQogCW11dGV4X3VubG9j aygmZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCWRybV9jbGllbnRfbW9k ZXNldF9yZWxlYXNlKGNsaWVudCk7CiAKLQlkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3Rv cihmYl9oZWxwZXIsIGkpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdG9yX2NvdW50OyBpKysp IHsKIAkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBtb2Rlc1tpXTsKIAkJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gY3J0Y3NbaV07CiAJCXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZz ZXQgPSAmb2Zmc2V0c1tpXTsKIAogCQlpZiAobW9kZSAmJiBjcnRjKSB7CiAJCQlzdHJ1Y3QgZHJt X21vZGVfc2V0ICptb2Rlc2V0ID0gZHJtX2NsaWVudF9maW5kX21vZGVzZXQoY2xpZW50LCBjcnRj KTsKLQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPQotCQkJCWZiX2hlbHBlci0+ Y29ubmVjdG9yX2luZm9baV0tPmNvbm5lY3RvcjsKKwkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IgPSBjb25uZWN0b3JzW2ldOwogCiAJCQlEUk1fREVCVUdfS01TKCJkZXNpcmVkIG1v ZGUgJXMgc2V0IG9uIGNydGMgJWQgKCVkLCVkKVxuIiwKIAkJCQkgICAgICBtb2RlLT5uYW1lLCBj cnRjLT5iYXNlLmlkLCBvZmZzZXQtPngsIG9mZnNldC0+eSk7CkBAIC0yNTM5LDYgKzIzNTQsMTAg QEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9o ZWxwZXIsCiAJa2ZyZWUobW9kZXMpOwogCWtmcmVlKG9mZnNldHMpOwogCWtmcmVlKGVuYWJsZWQp OworZnJlZV9jb25uZWN0b3JzOgorCWZvciAoaSA9IDA7IGkgPCBjb25uZWN0b3JfY291bnQ7IGkr KykKKwkJZHJtX2Nvbm5lY3Rvcl9wdXQoY29ubmVjdG9yc1tpXSk7CisJa2ZyZWUoY29ubmVjdG9y cyk7CiB9CiAKIC8qCkBAIC0yNTUxLDEwICsyMzcwLDExIEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1 cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogc3RhdGljIHZvaWQgZHJt X3NldHVwX2NydGNzX2ZiKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiB7CiAJc3Ry dWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSAmZmJfaGVscGVyLT5jbGllbnQ7CisJc3RydWN0 IGRybV9jb25uZWN0b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5m byA9IGZiX2hlbHBlci0+ZmJkZXY7CiAJdW5zaWduZWQgaW50IHJvdGF0aW9uLCBzd19yb3RhdGlv bnMgPSAwOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IGRybV9t b2RlX3NldCAqbW9kZXNldDsKLQlpbnQgaTsKIAogCW11dGV4X2xvY2soJmNsaWVudC0+bW9kZXNl dF9tdXRleCk7CiAJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGNsaWVudCkg ewpAQCAtMjU3MSwxMCArMjM5MSw4IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjc19mYihz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCX0KIAltdXRleF91bmxvY2soJmNsaWVu dC0+bW9kZXNldF9tdXRleCk7CiAKLQltdXRleF9sb2NrKCZmYl9oZWxwZXItPmRldi0+bW9kZV9j b25maWcubXV0ZXgpOwotCWRybV9mYl9oZWxwZXJfZm9yX2VhY2hfY29ubmVjdG9yKGZiX2hlbHBl ciwgaSkgewotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0KLQkJCQkJZmJfaGVs cGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yOworCWRybV9jb25uZWN0b3JfbGlzdF9p dGVyX2JlZ2luKGZiX2hlbHBlci0+ZGV2LCAmY29ubl9pdGVyKTsKKwlkcm1fY2xpZW50X2Zvcl9l YWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgewogCiAJCS8qIHVzZSBm aXJzdCBjb25uZWN0ZWQgY29ubmVjdG9yIGZvciB0aGUgcGh5c2ljYWwgZGltZW5zaW9ucyAqLwog CQlpZiAoY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsK QEAgLTI1ODMsNyArMjQwMSw3IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjc19mYihzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JbXV0ZXhf dW5sb2NrKCZmYl9oZWxwZXItPmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9jb25uZWN0 b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKIAogCXN3aXRjaCAoc3dfcm90YXRpb25zKSB7 CiAJY2FzZSBEUk1fTU9ERV9ST1RBVEVfMDoKQEAgLTI4MjIsMTIgKzI2NDAsNiBAQCBpbnQgZHJt X2ZiX2hlbHBlcl9mYmRldl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQlyZXR1cm4g cmV0OwogCX0KIAotCXJldCA9IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9y cyhmYl9oZWxwZXIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCURSTV9ERVZfRVJST1IoZGV2LT5kZXYs ICJmYmRldjogRmFpbGVkIHRvIGFkZCBjb25uZWN0b3JzIChyZXQ9JWQpXG4iLCByZXQpOwotCQln b3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Ci0JfQotCiAJaWYgKCFkcm1fZHJ2X3VzZXNfYXRv bWljX21vZGVzZXQoZGV2KSkKIAkJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMo ZGV2KTsKIApAQCAtMzEzMywxMCArMjk0NSw2IEBAIHN0YXRpYyBpbnQgZHJtX2ZiZGV2X2NsaWVu dF9ob3RwbHVnKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQogCWlmIChyZXQpCiAJCWdv dG8gZXJyOwogCi0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3Jz KGZiX2hlbHBlcik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfY2xlYW51cDsKLQogCWlmICghZHJt X2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGRldikpCiAJCWRybV9oZWxwZXJfZGlzYWJsZV91bnVz ZWRfZnVuY3Rpb25zKGRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jbGllbnQu aCBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAppbmRleCA2Y2Y0ODQxOWY3N2YuLjhkOTQ4ODBi YmUyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCisrKyBiL2luY2x1ZGUv ZHJtL2RybV9jbGllbnQuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5o PgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rv ci5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgogCiBzdHJ1Y3QgZHJtX2NsaWVudF9kZXY7 CkBAIC0xNjksNiArMTcwLDIwIEBAIGludCBkcm1fY2xpZW50X21vZGVzZXRfZHBtcyhzdHJ1Y3Qg ZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgaW50IG1vZGUpOwogCWZvciAoKHsgbG9ja2RlcF9hc3Nl cnRfaGVsZCgmKGNsaWVudCktPm1vZGVzZXRfbXV0ZXgpOyB9KSwgXAogCSAgICAgbW9kZXNldCA9 IChjbGllbnQpLT5tb2Rlc2V0czsgbW9kZXNldC0+Y3J0YzsgbW9kZXNldCsrKQogCisvKioKKyAq IGRybV9jbGllbnRfZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIgLSBjb25uZWN0b3JfbGlzdCBpdGVy YXRvciBtYWNybworICogQGNvbm5lY3RvcjogJnN0cnVjdCBkcm1fY29ubmVjdG9yIHBvaW50ZXIg dXNlZCBhcyBjdXJzb3IKKyAqIEBpdGVyOiAmc3RydWN0IGRybV9jb25uZWN0b3JfbGlzdF9pdGVy CisgKgorICogVGhpcyBpdGVyYXRlcyB0aGUgY29ubmVjdG9ycyB0aGF0IGFyZSB1c2VhYmxlIGZv ciBpbnRlcm5hbCBjbGllbnRzIChleGNsdWRlcworICogd3JpdGViYWNrIGNvbm5lY3RvcnMpLgor ICoKKyAqIEZvciBtb3JlIGluZm8gc2VlIGRybV9mb3JfZWFjaF9jb25uZWN0b3JfaXRlcigpLgor ICovCisjZGVmaW5lIGRybV9jbGllbnRfZm9yX2VhY2hfY29ubmVjdG9yX2l0ZXIoY29ubmVjdG9y LCBpdGVyKSBcCisJZHJtX2Zvcl9lYWNoX2Nvbm5lY3Rvcl9pdGVyKGNvbm5lY3RvciwgaXRlcikg XAorCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1Jf V1JJVEVCQUNLKQorCiBpbnQgZHJtX2NsaWVudF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5v ciAqbWlub3IpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxw ZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCA2YjMzNGY0ZDhhMjIuLmUx NGQ1MmVmOTYzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCisrKyBi L2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaApAQCAtOTcsMTYgKzk3LDEwIEBAIHN0cnVjdCBk cm1fZmJfaGVscGVyX2Z1bmNzIHsKIAkJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1cmZhY2Vfc2l6 ZSAqc2l6ZXMpOwogfTsKIAotc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yIHsKLQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwotfTsKLQogLyoqCiAgKiBzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAtIG1haW4gc3RydWN0dXJlIHRvIGVtdWxhdGUgZmJkZXYgb24gdG9wIG9mIEtNUwog ICogQGZiOiBTY2Fub3V0IGZyYW1lYnVmZmVyIG9iamVjdAogICogQGRldjogRFJNIGRldmljZQot ICogQGNvbm5lY3Rvcl9jb3VudDogbnVtYmVyIG9mIGNvbm5lY3RlZCBjb25uZWN0b3JzCi0gKiBA Y29ubmVjdG9yX2luZm9fYWxsb2NfY291bnQ6IHNpemUgb2YgY29ubmVjdG9yX2luZm8KICAqIEBm dW5jczogZHJpdmVyIGNhbGxiYWNrcyBmb3IgZmIgaGVscGVyCiAgKiBAZmJkZXY6IGVtdWxhdGVk IGZiZGV2IGRldmljZSBpbmZvIHN0cnVjdAogICogQHBzZXVkb19wYWxldHRlOiBmYWtlIHBhbGV0 dGUgb2YgMTYgY29sb3JzCkBAIC0xMzgsMTUgKzEzMiw2IEBAIHN0cnVjdCBkcm1fZmJfaGVscGVy IHsKIAogCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwogCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXY7Ci0JaW50IGNvbm5lY3Rvcl9jb3VudDsKLQlpbnQgY29ubmVjdG9yX2luZm9fYWxsb2NfY291 bnQ7Ci0JLyoqCi0JICogQGNvbm5lY3Rvcl9pbmZvOgotCSAqCi0JICogQXJyYXkgb2YgcGVyLWNv bm5lY3RvciBpbmZvcm1hdGlvbi4gRG8gbm90IGl0ZXJhdGUgZGlyZWN0bHksIGJ1dCB1c2UKLQkg KiBkcm1fZmJfaGVscGVyX2Zvcl9lYWNoX2Nvbm5lY3Rvci4KLQkgKi8KLQlzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jb25uZWN0b3IgKipjb25uZWN0b3JfaW5mbzsKIAljb25zdCBzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9mdW5jcyAqZnVuY3M7CiAJc3RydWN0IGZiX2luZm8gKmZiZGV2OwogCXUzMiBwc2V1 ZG9fcGFsZXR0ZVsxN107CkBAIC0yODYsMTggKzI3MSw4IEBAIGludCBkcm1fZmJfaGVscGVyX2lv Y3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLAogCiBpbnQgZHJtX2Zi X2hlbHBlcl9ob3RwbHVnX2V2ZW50KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwog aW50IGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlciwgaW50IGJwcF9zZWwpOwotaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxf Y29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGludCBkcm1fZmJf aGVscGVyX2RlYnVnX2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIGludCBkcm1fZmJfaGVs cGVyX2RlYnVnX2xlYXZlKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICoKLWRybV9oYXNfcHJlZmVycmVkX21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXJfY29u bmVjdG9yICpmYl9jb25uZWN0b3IsCi0JCQlpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKgotZHJtX3BpY2tfY21kbGluZV9tb2RlKHN0cnVjdCBkcm1fZmJf aGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscGVyX2Nvbm4pOwotCi1pbnQgZHJtX2ZiX2hlbHBlcl9h ZGRfb25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKLWludCBkcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVf Y29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCi0JCQkJICAgICAgIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9mYmRl dl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwKQEAgLTQ3MiwxMiArNDQ3LDYgQEAgc3RhdGljIGlubGluZSBpbnQg ZHJtX2ZiX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotZHJtX2ZiX2hlbHBlcl9z aW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIp Ci17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRybV9mYl9oZWxwZXJfZGVi dWdfZW50ZXIoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJcmV0dXJuIDA7CkBAIC00ODgsMzQg KzQ1Nyw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRybV9mYl9oZWxwZXJfZGVidWdfbGVhdmUoc3Ry dWN0IGZiX2luZm8gKmluZm8pCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKgotZHJtX2hhc19wcmVmZXJyZWRfbW9kZShzdHJ1Y3QgZHJtX2Zi X2hlbHBlcl9jb25uZWN0b3IgKmZiX2Nvbm5lY3RvciwKLQkJICAgICAgIGludCB3aWR0aCwgaW50 IGhlaWdodCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqCi1kcm1fcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9mYl9oZWxw ZXJfY29ubmVjdG9yICpmYl9oZWxwZXJfY29ubiwKLQkJICAgICAgaW50IHdpZHRoLCBpbnQgaGVp Z2h0KQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZHJtX2ZiX2hl bHBlcl9hZGRfb25lX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAot CQkJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCi17Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgaW50Ci1kcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKHN0 cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCi0JCQkJICAgc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQKIGRy bV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKQEAgLTU1Nyw2ICs0OTgsMjcgQEAgZHJtX2Zi ZGV2X2dlbmVyaWNfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBy ZWZlcnJlZF9icHApCiAKICNlbmRpZgogCisvKiBUT0RPOiBUaGVyZSdzIGEgdG9kbyBlbnRyeSB0 byByZW1vdmUgdGhlc2UgdGhyZWUgKi8KK3N0YXRpYyBpbmxpbmUgaW50Citkcm1fZmJfaGVscGVy X3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl cikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2RybV9mYl9oZWxwZXJf YWRkX29uZV9jb25uZWN0b3Ioc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKKwkJCQlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW5saW5lIGludAorZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3RvcihzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAorCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpCit7CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZHJtX2ZiX2hlbHBlcl9yZW1v dmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzIC0gcmVtb3ZlIGZpcm13YXJlLWNvbmZpZ3VyZWQg ZnJhbWVidWZmZXJzCiAgKiBAYTogbWVtb3J5IHJhbmdlLCB1c2VycyBvZiB3aGljaCBhcmUgdG8g YmUgcmVtb3ZlZAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9kcmktZGV2ZWw=