From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH 07/16] drm/fb-helper: Remove drm_fb_helper_crtc Date: Tue, 26 Mar 2019 18:55:37 +0100 Message-ID: <20190326175546.18126-8-noralf@tronnes.org> References: <20190326175546.18126-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190326175546.18126-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: intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , mstaudt@suse.de List-Id: dri-devel@lists.freedesktop.org SXQgbm93IG9ubHkgY29udGFpbnMgdGhlIG1vZGVzZXQgc28gdXNlIHRoYXQgZGlyZWN0bHkgaW5z dGVhZC4gVGhlIG1vZGVzZXQKY29kZSB3aWxsIGJlIG1vdmVkIHRvIGRybV9jbGllbnQsIHNvIGFk ZCBjb2RlIHRoZXJlLgoKVGhlIG1vZGVzZXQgY29ubmVjdG9yIGFycmF5IHNpemUgaXMgaGFyZGNv ZGVkIGZvciB0aGUgY2xvbmVkIGNhc2UgdG8gYXZvaWQKaGF2aW5nIHRvIHBhc3MgaW4gYSB2YWx1 ZSBmcm9tIHRoZSBkcml2ZXIuIEEgdmFsdWUgb2YgOCBpcyBjaG9zZW4gdG8gZXJyCm9uIHRoZSBz YWZlIHNpZGUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbWF4IGNvbm5lY3RvciBhcmd1bWVudCBmb3IK ZHJtX2ZiX2hlbHBlcl9pbml0KCkgYW5kIGRybV9mYl9oZWxwZXJfZmJkZXZfc2V0dXAoKSBpc24n dCB1c2VkIGFueW1vcmUsCmEgdG9kbyBlbnRyeSBmb3IgdGhpcyBpcyBhZGRlZC4KClNpZ25lZC1v ZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KIERvY3VtZW50 YXRpb24vZ3B1L3RvZG8ucnN0ICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL2RybV9jbGll bnQuYyAgICB8ICA5MyArKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVy LmMgfCAyNjIgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGluY2x1ZGUvZHJtL2Ry bV9jbGllbnQuaCAgICAgICAgfCAgMTYgKysKIGluY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCAg ICAgfCAgMTQgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMjA3IGluc2VydGlvbnMoKyksIDE4NSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdCBiL0RvY3Vt ZW50YXRpb24vZ3B1L3RvZG8ucnN0CmluZGV4IDE1MjhhZDJkNTk4Yi4uOGZhMDhiNWZlYWI3IDEw MDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS90b2RvLnJzdAorKysgYi9Eb2N1bWVudGF0aW9u L2dwdS90b2RvLnJzdApAQCAtMzAwLDYgKzMwMCwxMyBAQCBpdCB0byB1c2UgZHJtX21vZGVfaHN5 bmMoKSBpbnN0ZWFkLgogCiBDb250YWN0OiBTZWFuIFBhdWwKIAorZHJtX2ZiX2hlbHBlciBjbGVh bnVwIHRhc2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLSBUaGUgbWF4IGNvbm5l Y3RvciBhcmd1bWVudCBmb3IgZHJtX2ZiX2hlbHBlcl9pbml0KCkgYW5kCisgIGRybV9mYl9oZWxw ZXJfZmJkZXZfc2V0dXAoKSBpc24ndCB1c2VkIGFueW1vcmUgYW5kIGNhbiBiZSByZW1vdmVkLgor CisKIENvcmUgcmVmYWN0b3JpbmdzCiA9PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQu YwppbmRleCA5YjJiZDI4ZGRlMGEuLjg0Zjg0OGYyMTY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9jbGllbnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCkBA IC0zOTIsNiArMzkyLDk5IEBAIHZvaWQgZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUoc3Ry dWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIpCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jbGll bnRfZnJhbWVidWZmZXJfZGVsZXRlKTsKIAorLyoqCisgKiBkcm1fY2xpZW50X21vZGVzZXRzX2Ny ZWF0ZSgpIC0gQ3JlYXRlIG1vZGVzZXQgYXJyYXkKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSAmZHJtX21vZGVfc2V0IGFycmF5LCBvbmUgZW50cnkg cGVyIENSVEMuCisgKgorICogUmV0dXJuczoKKyAqIEEgJmRybV9tb2RlX3NldCBhcnJheSBvciBh biBlcnJvciBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworc3RydWN0IGRybV9t b2RlX3NldCAqZHJtX2NsaWVudF9tb2Rlc2V0c19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2NydGMgPSBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRj OworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQsICptb2Rlc2V0czsKKwl1bnNpZ25lZCBp bnQgbWF4X2Nvbm5lY3Rvcl9jb3VudCA9IDE7CisJc3RydWN0IGRybV9jcnRjICpjcnRjOworCXVu c2lnbmVkIGludCBpID0gMDsKKworCS8qIEFkZCB0ZXJtaW5hdGluZyB6ZXJvIGVudHJ5IHRvIGVu YWJsZSBpbmRleCBsZXNzIGl0ZXJhdGlvbiAqLworCW1vZGVzZXRzID0ga2NhbGxvYyhudW1fY3J0 YyArIDEsIHNpemVvZigqbW9kZXNldHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vZGVzZXRzKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWRybV9mb3JfZWFjaF9jcnRjKGNydGMsIGRl dikKKwkJbW9kZXNldHNbaSsrXS5jcnRjID0gY3J0YzsKKworCS8qIENsb25pbmcgaXMgb25seSBz dXBwb3J0ZWQgaW4gdGhlIHNpbmdsZSBjcnRjIGNhc2UuICovCisJaWYgKG51bV9jcnRjID09IDEp CisJCW1heF9jb25uZWN0b3JfY291bnQgPSBEUk1fQ0xJRU5UX01BWF9DTE9ORURfQ09OTkVDVE9S UzsKKworCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBtb2Rlc2V0cykgewor CQltb2Rlc2V0LT5jb25uZWN0b3JzID0ga2NhbGxvYyhtYXhfY29ubmVjdG9yX2NvdW50LAorCQkJ CQkgICAgICBzaXplb2YoKm1vZGVzZXQtPmNvbm5lY3RvcnMpLCBHRlBfS0VSTkVMKTsKKwkJaWYg KCFtb2Rlc2V0LT5jb25uZWN0b3JzKQorCQkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlyZXR1cm4g bW9kZXNldHM7CisKK2Vycl9mcmVlOgorCWRybV9jbGllbnRfbW9kZXNldHNfcmVsZWFzZShtb2Rl c2V0cyk7CisKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KK0VYUE9SVF9TWU1CT0woZHJt X2NsaWVudF9tb2Rlc2V0c19jcmVhdGUpOworCisvKioKKyAqIGRybV9jbGllbnRfbW9kZXNldHNf cmVsZWFzZSgpIC0gRnJlZSBtb2Rlc2V0cworICogQG1vZGVzZXRzOiBNb2Rlc2V0IGFycmF5IChj YW4gYmUgTlVMTCBvciBlcnJvciBwb2ludGVyKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVzdHJv eXMgYW55IGF0dGFjaGVkIGRpc3BsYXkgbW9kZXMsIHB1dHMgY29ubmVjdG9ycyBhbmQgZnJlZXMK KyAqIHRoZSBtb2Rlc2V0IGFycmF5LgorICovCit2b2lkIGRybV9jbGllbnRfbW9kZXNldHNfcmVs ZWFzZShzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0cykKK3sKKwlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2Rlc2V0OworCXVuc2lnbmVkIGludCBpOworCisJaWYgKElTX0VSUl9PUl9OVUxMKG1v ZGVzZXRzKSkKKwkJcmV0dXJuOworCisJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVz ZXQsIG1vZGVzZXRzKSB7CisJCWRybV9tb2RlX2Rlc3Ryb3kobW9kZXNldC0+Y3J0Yy0+ZGV2LCBt b2Rlc2V0LT5tb2RlKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXNldC0+bnVtX2Nvbm5lY3Rv cnM7IGkrKykKKwkJCWRybV9jb25uZWN0b3JfcHV0KG1vZGVzZXQtPmNvbm5lY3RvcnNbaV0pOwor CQlrZnJlZShtb2Rlc2V0LT5jb25uZWN0b3JzKTsKKwl9CisJa2ZyZWUobW9kZXNldHMpOworfQor RVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X21vZGVzZXRzX3JlbGVhc2UpOworCisvKioKKyAqIGRy bV9jbGllbnRfZmluZF9tb2Rlc2V0KCkgLSBGaW5kIG1vZGVzZXQgbWF0Y2hpbmcgYSBDUlRDCisg KiBAbW9kZXNldHM6IE1vZGVzZXQgYXJyYXkKKyAqIEBjcnRjOiBDUlRDCisgKgorICogVGhpcyBm dW5jdGlvbiBsb29rcyB1cCB0aGUgbW9kZXNldCBjb25uZWN0ZWQgdG8gQGNydGMuCisgKgorICog UmV0dXJuczoKKyAqIEEgJmRybV9tb2RlX3NldCBvciBOVUxMLgorICovCitzdHJ1Y3QgZHJtX21v ZGVfc2V0ICpkcm1fY2xpZW50X2ZpbmRfbW9kZXNldChzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rl c2V0cywgc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1v ZGVzZXQ7CisKKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgbW9kZXNldHMp CisJCWlmIChtb2Rlc2V0LT5jcnRjID09IGNydGMpCisJCQlyZXR1cm4gbW9kZXNldDsKKworCXJl dHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2ZpbmRfbW9kZXNldCk7CisK ICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyBpbnQgZHJtX2NsaWVudF9kZWJ1Z2ZzX2lu dGVybmFsX2NsaWVudHMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZmJfaGVscGVyLmMKaW5kZXggNjM0ZjRkY2YwYzQxLi44NWJlYTUxZTIwNzIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2RybV9mYl9oZWxwZXIuYwpAQCAtMzE2LDEzICszMTYsMTAgQEAgaW50IGRybV9mYl9oZWxwZXJf ZGVidWdfZW50ZXIoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGRybV9mYl9oZWxw ZXIgKmhlbHBlciA9IGluZm8tPnBhcjsKIAljb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1 bmNzICpmdW5jczsKLQlpbnQgaTsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKIAog CWxpc3RfZm9yX2VhY2hfZW50cnkoaGVscGVyLCAma2VybmVsX2ZiX2hlbHBlcl9saXN0LCBrZXJu ZWxfZmJfbGlzdCkgewotCQlmb3IgKGkgPSAwOyBpIDwgaGVscGVyLT5jcnRjX2NvdW50OyBpKysp IHsKLQkJCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0ID0KLQkJCQkmaGVscGVyLT5jcnRj X2luZm9baV0ubW9kZV9zZXQ7Ci0KKwkJZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVf c2V0LCBoZWxwZXItPm1vZGVzZXRzKSB7CiAJCQlpZiAoIW1vZGVfc2V0LT5jcnRjLT5lbmFibGVk KQogCQkJCWNvbnRpbnVlOwogCkBAIC0zNTQsMTIgKzM1MSwxMCBAQCBpbnQgZHJtX2ZiX2hlbHBl cl9kZWJ1Z19sZWF2ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqaGVscGVyID0gaW5mby0+cGFyOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAljb25zdCBz dHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpmdW5jczsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0 ICptb2RlX3NldDsKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKLQlpbnQgaTsKLQotCWZv ciAoaSA9IDA7IGkgPCBoZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX21v ZGVfc2V0ICptb2RlX3NldCA9ICZoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKIAorCWRy bV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgaGVscGVyLT5tb2Rlc2V0cykgewog CQljcnRjID0gbW9kZV9zZXQtPmNydGM7CiAJCWlmIChkcm1fZHJ2X3VzZXNfYXRvbWljX21vZGVz ZXQoY3J0Yy0+ZGV2KSkKIAkJCWNvbnRpbnVlOwpAQCAtNDM2LDggKzQzMSw5IEBAIHN0YXRpYyBp bnQgcmVzdG9yZV9mYmRldl9tb2RlX2F0b21pYyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVs cGVyLCBib29sIGFjdGl2CiAJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CiAJ c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CiAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl OwotCWludCBpLCByZXQ7CiAJc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4IGN0eDsKKwlz dHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldDsKKwlpbnQgcmV0OwogCiAJZHJtX21vZGVzZXRf YWNxdWlyZV9pbml0KCZjdHgsIDApOwogCkBAIC00NjcsOCArNDYzLDcgQEAgc3RhdGljIGludCBy ZXN0b3JlX2ZiZGV2X21vZGVfYXRvbWljKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIs IGJvb2wgYWN0aXYKIAkJCWdvdG8gb3V0X3N0YXRlOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBm Yl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rl X3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwlkcm1fY2xpZW50X2Zv cl9lYWNoX21vZGVzZXQobW9kZV9zZXQsIGZiX2hlbHBlci0+bW9kZXNldHMpIHsKIAkJc3RydWN0 IGRybV9wbGFuZSAqcHJpbWFyeSA9IG1vZGVfc2V0LT5jcnRjLT5wcmltYXJ5OwogCQl1bnNpZ25l ZCBpbnQgcm90YXRpb247CiAKQEAgLTUxNyw4ICs1MTIsOSBAQCBzdGF0aWMgaW50IHJlc3RvcmVf ZmJkZXZfbW9kZV9hdG9taWMoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgYm9vbCBh Y3Rpdgogc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVfbGVnYWN5KHN0cnVjdCBkcm1fZmJf aGVscGVyICpmYl9oZWxwZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGZiX2hlbHBl ci0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0OwogCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwotCWludCBpLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCiAJZHJtX21vZGVz ZXRfbG9ja19hbGwoZmJfaGVscGVyLT5kZXYpOwogCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwg ZGV2KSB7CkBAIC01MzEsOCArNTI3LDcgQEAgc3RhdGljIGludCByZXN0b3JlX2ZiZGV2X21vZGVf bGVnYWN5KHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpCiAJCQkJCQkgICAgRFJNX01P REVfUk9UQVRFXzApOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291 bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZmYl9oZWxwZXIt PmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9k ZV9zZXQsIGZiX2hlbHBlci0+bW9kZXNldHMpIHsKIAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0g bW9kZV9zZXQtPmNydGM7CiAKIAkJaWYgKGNydGMtPmZ1bmNzLT5jdXJzb3Jfc2V0MikgewpAQCAt Njg3LDEyICs2ODIsMTAgQEAgc3RhdGljIHZvaWQgZHBtc19sZWdhY3koc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciwgaW50IGRwbXNfbW9kZSkKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlz dHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0OwotCWludCBpLCBqOworCWludCBqOwogCiAJZHJt X21vZGVzZXRfbG9ja19hbGwoZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRj X2NvdW50OyBpKyspIHsKLQkJbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2Rl X3NldDsKLQorCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBmYl9oZWxwZXIt Pm1vZGVzZXRzKSB7CiAJCWlmICghbW9kZXNldC0+Y3J0Yy0+ZW5hYmxlZCkKIAkJCWNvbnRpbnVl OwogCkBAIC03NjIsNDMgKzc1NSw2IEBAIGludCBkcm1fZmJfaGVscGVyX2JsYW5rKGludCBibGFu aywgc3RydWN0IGZiX2luZm8gKmluZm8pCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJf YmxhbmspOwogCi1zdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX21vZGVzZXRfcmVsZWFzZShzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAotCQkJCQkgIHN0cnVjdCBkcm1fbW9kZV9zZXQgKm1v ZGVzZXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbW9kZXNldC0+bnVtX2Nvbm5l Y3RvcnM7IGkrKykgewotCQlkcm1fY29ubmVjdG9yX3B1dChtb2Rlc2V0LT5jb25uZWN0b3JzW2ld KTsKLQkJbW9kZXNldC0+Y29ubmVjdG9yc1tpXSA9IE5VTEw7Ci0JfQotCW1vZGVzZXQtPm51bV9j b25uZWN0b3JzID0gMDsKLQotCWRybV9tb2RlX2Rlc3Ryb3koaGVscGVyLT5kZXYsIG1vZGVzZXQt Pm1vZGUpOwotCW1vZGVzZXQtPm1vZGUgPSBOVUxMOwotCi0JLyogRklYTUUgc2hvdWxkIGhvbGQg YSByZWY/ICovCi0JbW9kZXNldC0+ZmIgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBkcm1fZmJf aGVscGVyX2NydGNfZnJlZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyKQotewotCWludCBp OwotCi0JZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKLQkJ ZHJtX2Nvbm5lY3Rvcl9wdXQoaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yKTsK LQkJa2ZyZWUoaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXSk7Ci0JfQotCWtmcmVlKGhlbHBlci0+ Y29ubmVjdG9yX2luZm8pOwotCi0JZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsg aSsrKSB7Ci0JCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQgPSAmaGVscGVyLT5jcnRjX2lu Zm9baV0ubW9kZV9zZXQ7Ci0KLQkJZHJtX2ZiX2hlbHBlcl9tb2Rlc2V0X3JlbGVhc2UoaGVscGVy LCBtb2Rlc2V0KTsKLQkJa2ZyZWUobW9kZXNldC0+Y29ubmVjdG9ycyk7Ci0JfQotCWtmcmVlKGhl bHBlci0+Y3J0Y19pbmZvKTsKLX0KLQogc3RhdGljIHZvaWQgZHJtX2ZiX2hlbHBlcl9yZXN1bWVf d29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqaGVscGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1fZmJfaGVscGVyLApAQCAt ODc3LDcgKzgzMyw3IEBAIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9wcmVwYXJlKTsKICAq IGRybV9mYl9oZWxwZXJfaW5pdCAtIGluaXRpYWxpemUgYSAmc3RydWN0IGRybV9mYl9oZWxwZXIK ICAqIEBkZXY6IGRybSBkZXZpY2UKICAqIEBmYl9oZWxwZXI6IGRyaXZlci1hbGxvY2F0ZWQgZmJk ZXYgaGVscGVyIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCi0gKiBAbWF4X2Nvbm5fY291bnQ6IG1h eCBjb25uZWN0b3IgY291bnQKKyAqIEBtYXhfY29ubl9jb3VudDogbWF4IGNvbm5lY3RvciBjb3Vu dCAobm90IHVzZWQpCiAgKgogICogVGhpcyBhbGxvY2F0ZXMgdGhlIHN0cnVjdHVyZXMgZm9yIHRo ZSBmYmRldiBoZWxwZXIgd2l0aCB0aGUgZ2l2ZW4gbGltaXRzLgogICogTm90ZSB0aGF0IHRoaXMg d29uJ3QgeWV0IHRvdWNoIHRoZSBoYXJkd2FyZSAodGhyb3VnaCB0aGUgZHJpdmVyIGludGVyZmFj ZXMpCkBAIC04OTMsNTMgKzg0OSwyOCBAQCBpbnQgZHJtX2ZiX2hlbHBlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVy LAogCQkgICAgICAgaW50IG1heF9jb25uX2NvdW50KQogewotCXN0cnVjdCBkcm1fY3J0YyAqY3J0 YzsKLQlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsK LQlpbnQgaTsKLQogCWlmICghZHJtX2ZiZGV2X2VtdWxhdGlvbikgewogCQlkZXYtPmZiX2hlbHBl ciA9IGZiX2hlbHBlcjsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFtYXhfY29ubl9jb3VudCkK LQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmYl9oZWxwZXItPmNydGNfaW5mbyA9IGtjYWxsb2MoY29u ZmlnLT5udW1fY3J0Yywgc2l6ZW9mKHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMpLCBHRlBfS0VS TkVMKTsKLQlpZiAoIWZiX2hlbHBlci0+Y3J0Y19pbmZvKQorCWZiX2hlbHBlci0+bW9kZXNldHMg PSBkcm1fY2xpZW50X21vZGVzZXRzX2NyZWF0ZShkZXYpOworCWlmIChJU19FUlIoZmJfaGVscGVy LT5tb2Rlc2V0cykpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmJfaGVscGVyLT5jcnRjX2NvdW50 ID0gY29uZmlnLT5udW1fY3J0YzsKIAlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvID0ga2NhbGxv YyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsIHNpemVvZihzdHJ1Y3QgZHJtX2ZiX2hl bHBlcl9jb25uZWN0b3IgKiksIEdGUF9LRVJORUwpOwotCWlmICghZmJfaGVscGVyLT5jb25uZWN0 b3JfaW5mbykgewotCQlrZnJlZShmYl9oZWxwZXItPmNydGNfaW5mbyk7Ci0JCXJldHVybiAtRU5P TUVNOwotCX0KKwlpZiAoIWZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm8pCisJCWdvdG8gb3V0X2Zy ZWU7CisKIAlmYl9oZWxwZXItPmNvbm5lY3Rvcl9pbmZvX2FsbG9jX2NvdW50ID0gZGV2LT5tb2Rl X2NvbmZpZy5udW1fY29ubmVjdG9yOwogCWZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50ID0gMDsK IAotCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQlmYl9o ZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5jb25uZWN0b3JzID0KLQkJCWtjYWxsb2MobWF4 X2Nvbm5fY291bnQsCi0JCQkJc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yICopLAotCQkJCUdG UF9LRVJORUwpOwotCi0JCWlmICghZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY29u bmVjdG9ycykKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCWZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1v ZGVfc2V0Lm51bV9jb25uZWN0b3JzID0gMDsKLQl9Ci0KLQlpID0gMDsKLQlkcm1fZm9yX2VhY2hf Y3J0YyhjcnRjLCBkZXYpIHsKLQkJZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuY3J0 YyA9IGNydGM7Ci0JCWkrKzsKLQl9Ci0KIAlkZXYtPmZiX2hlbHBlciA9IGZiX2hlbHBlcjsKIAog CXJldHVybiAwOwogb3V0X2ZyZWU6Ci0JZHJtX2ZiX2hlbHBlcl9jcnRjX2ZyZWUoZmJfaGVscGVy KTsKKwlkcm1fY2xpZW50X21vZGVzZXRzX3JlbGVhc2UoZmJfaGVscGVyLT5tb2Rlc2V0cyk7CisK IAlyZXR1cm4gLUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9pbml0KTsK QEAgLTEwMTQsNiArOTQ1LDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3VucmVnaXN0 ZXJfZmJpKTsKIHZvaWQgZHJtX2ZiX2hlbHBlcl9maW5pKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CisJaW50IGk7CiAKIAlpZiAoIWZi X2hlbHBlcikKIAkJcmV0dXJuOwpAQCAtMTA0Myw4ICs5NzUsMTMgQEAgdm9pZCBkcm1fZmJfaGVs cGVyX2Zpbmkoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKIAltdXRleF91bmxvY2so Jmtlcm5lbF9mYl9oZWxwZXJfbG9jayk7CiAKIAltdXRleF9kZXN0cm95KCZmYl9oZWxwZXItPmxv Y2spOwotCWRybV9mYl9oZWxwZXJfY3J0Y19mcmVlKGZiX2hlbHBlcik7CisJZHJtX2NsaWVudF9t b2Rlc2V0c19yZWxlYXNlKGZiX2hlbHBlci0+bW9kZXNldHMpOwogCisJZm9yIChpID0gMDsgaSA8 IGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50OyBpKyspIHsKKwkJZHJtX2Nvbm5lY3Rvcl9wdXQo ZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yKTsKKwkJa2ZyZWUoZmJfaGVs cGVyLT5jb25uZWN0b3JfaW5mb1tpXSk7CisJfQorCWtmcmVlKGZiX2hlbHBlci0+Y29ubmVjdG9y X2luZm8pOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2ZpbmkpOwogCkBAIC0xMzg5 LDEzICsxMzI2LDE0IEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9wc2V1ZG9fcGFsZXR0ZShzdHJ1Y3Qg ZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCiBzdGF0aWMgaW50IHNldGNtYXBf bGVnYWN5KHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1f bW9kZV9zZXQgKm1vZGVzZXQ7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXUxNiAqciwgKmcs ICpiOwotCWludCBpLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCiAJZHJtX21vZGVzZXRfbG9j a19hbGwoZmJfaGVscGVyLT5kZXYpOwotCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNf Y291bnQ7IGkrKykgewotCQljcnRjID0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQu Y3J0YzsKKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgZmJfaGVscGVyLT5t b2Rlc2V0cykgeworCQljcnRjID0gbW9kZXNldC0+Y3J0YzsKIAkJaWYgKCFjcnRjLT5mdW5jcy0+ Z2FtbWFfc2V0IHx8ICFjcnRjLT5nYW1tYV9zaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAg LTE0NzEsMTAgKzE0MDksMTEgQEAgc3RhdGljIGludCBzZXRjbWFwX2F0b21pYyhzdHJ1Y3QgZmJf Y21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCiAJc3RydWN0IGRybV9tb2Rlc2V0X2Fj cXVpcmVfY3R4IGN0eDsKIAlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CiAJc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVz ZXQ7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXUxNiAqciwgKmcsICpiOwotCWludCBpLCBy ZXQgPSAwOwogCWJvb2wgcmVwbGFjZWQ7CisJaW50IHJldCA9IDA7CiAKIAlkcm1fbW9kZXNldF9h Y3F1aXJlX2luaXQoJmN0eCwgMCk7CiAKQEAgLTE0ODYsOCArMTQyNSw4IEBAIHN0YXRpYyBpbnQg c2V0Y21hcF9hdG9taWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZv KQogCiAJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKIHJldHJ5OgotCWZvciAoaSA9IDA7IGkg PCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQljcnRjID0gZmJfaGVscGVyLT5jcnRj X2luZm9baV0ubW9kZV9zZXQuY3J0YzsKKwlkcm1fY2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9k ZXNldCwgZmJfaGVscGVyLT5tb2Rlc2V0cykgeworCQljcnRjID0gbW9kZXNldC0+Y3J0YzsKIAog CQlpZiAoIWdhbW1hX2x1dCkKIAkJCWdhbW1hX2x1dCA9IHNldGNtYXBfbmV3X2dhbW1hX2x1dChj cnRjLCBjbWFwKTsKQEAgLTE1MTUsOCArMTQ1NCw4IEBAIHN0YXRpYyBpbnQgc2V0Y21hcF9hdG9t aWMoc3RydWN0IGZiX2NtYXAgKmNtYXAsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogCWlmIChyZXQp CiAJCWdvdG8gb3V0X3N0YXRlOwogCi0JZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19j b3VudDsgaSsrKSB7Ci0JCWNydGMgPSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldC5j cnRjOworCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBmYl9oZWxwZXItPm1v ZGVzZXRzKSB7CisJCWNydGMgPSBtb2Rlc2V0LT5jcnRjOwogCiAJCXIgPSBjcnRjLT5nYW1tYV9z dG9yZTsKIAkJZyA9IHIgKyBjcnRjLT5nYW1tYV9zaXplOwpAQCAtMTU5Miw3ICsxNTMxLDYgQEAg aW50IGRybV9mYl9oZWxwZXJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGlu dCBjbWQsCiAJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAq ZmJfaGVscGVyID0gaW5mby0+cGFyOwotCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0Owog CXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTYyMCw4ICsxNTU4 LDcgQEAgaW50IGRybV9mYl9oZWxwZXJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2ln bmVkIGludCBjbWQsCiAJCSAqIG1ha2UuIElmIHdlJ3JlIG5vdCBzbWFydCBlbm91Z2ggaGVyZSwg b25lIHNob3VsZAogCQkgKiBqdXN0IGNvbnNpZGVyIHN3aXRjaCB0aGUgdXNlcnNwYWNlIHRvIEtN Uy4KIAkJICovCi0JCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvWzBdLm1vZGVfc2V0 OwotCQljcnRjID0gbW9kZV9zZXQtPmNydGM7CisJCWNydGMgPSBmYl9oZWxwZXItPm1vZGVzZXRz WzBdLmNydGM7CiAKIAkJLyoKIAkJICogT25seSB3YWl0IGZvciBhIHZibGFuayBldmVudCBpZiB0 aGUgQ1JUQyBpcwpAQCAtMTgxNywxMyArMTc1NCw5IEBAIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hl bHBlcl9zZXRfcGFyKTsKIAogc3RhdGljIHZvaWQgcGFuX3NldChzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAqZmJfaGVscGVyLCBpbnQgeCwgaW50IHkpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGRybV9tb2RlX3NldCAq bW9kZV9zZXQ7Ci0KLQkJbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9z ZXQ7CisJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7CiAKKwlkcm1fY2xpZW50X2Zvcl9l YWNoX21vZGVzZXQobW9kZV9zZXQsIGZiX2hlbHBlci0+bW9kZXNldHMpIHsKIAkJbW9kZV9zZXQt PnggPSB4OwogCQltb2RlX3NldC0+eSA9IHk7CiAJfQpAQCAtMTg1MywxMiArMTc4Niw5IEBAIHN0 YXRpYyBpbnQgcGFuX2Rpc3BsYXlfbGVnYWN5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFy LAogCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0 IGRybV9tb2RlX3NldCAqbW9kZXNldDsKIAlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKIAogCWRybV9t b2Rlc2V0X2xvY2tfYWxsKGZiX2hlbHBlci0+ZGV2KTsKLQlmb3IgKGkgPSAwOyBpIDwgZmJfaGVs cGVyLT5jcnRjX2NvdW50OyBpKyspIHsKLQkJbW9kZXNldCA9ICZmYl9oZWxwZXItPmNydGNfaW5m b1tpXS5tb2RlX3NldDsKLQorCWRybV9jbGllbnRfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBm Yl9oZWxwZXItPm1vZGVzZXRzKSB7CiAJCW1vZGVzZXQtPnggPSB2YXItPnhvZmZzZXQ7CiAJCW1v ZGVzZXQtPnkgPSB2YXItPnlvZmZzZXQ7CiAKQEAgLTE5MTcsNiArMTg0Nyw3IEBAIHN0YXRpYyBp bnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlciwKIAlpbnQgY3J0Y19jb3VudCA9IDA7CiAJaW50IGk7CiAJc3RydWN0IGRybV9mYl9o ZWxwZXJfc3VyZmFjZV9zaXplIHNpemVzOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0 OwogCWludCBiZXN0X2RlcHRoID0gMDsKIAogCW1lbXNldCgmc2l6ZXMsIDAsIHNpemVvZihzdHJ1 Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUpKTsKQEAgLTE5NjcsMTMgKzE4OTgsMTIgQEAg c3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2ZiX2hl bHBlciAqZmJfaGVscGVyLAogCSAqIHN1cHBvcnRzIFJHQkE1NTUxICgxNiBicHAsIGRlcHRoIDE1 KSBidXQgbm90IFJHQjU2NSAoMTYgYnBwLCBkZXB0aAogCSAqIDE2KSB3ZSBuZWVkIHRvIHNjYWxl IGRvd24gdGhlIGRlcHRoIG9mIHRoZSBzaXplcyB3ZSByZXF1ZXN0LgogCSAqLwotCWZvciAoaSA9 IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2RlX3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKKwlkcm1f Y2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZV9zZXQsIGZiX2hlbHBlci0+bW9kZXNldHMpIHsK IAkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gbW9kZV9zZXQtPmNydGM7CiAJCXN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lID0gY3J0Yy0+cHJpbWFyeTsKIAkJaW50IGo7CiAKLQkJRFJNX0RFQlVHKCJ0 ZXN0IENSVEMgJWQgcHJpbWFyeSBwbGFuZVxuIiwgaSk7CisJCURSTV9ERUJVRygidGVzdCBDUlRD ICV1IHByaW1hcnkgcGxhbmVcbiIsIGRybV9jcnRjX2luZGV4KGNydGMpKTsKIAogCQlmb3IgKGog PSAwOyBqIDwgcGxhbmUtPmZvcm1hdF9jb3VudDsgaisrKSB7CiAJCQljb25zdCBzdHJ1Y3QgZHJt X2Zvcm1hdF9pbmZvICpmbXQ7CkBAIC0yMDEzLDkgKzE5NDMsOCBAQCBzdGF0aWMgaW50IGRybV9m Yl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIs CiAKIAkvKiBmaXJzdCB1cCBnZXQgYSBjb3VudCBvZiBjcnRjcyBub3cgaW4gdXNlIGFuZCBuZXcg bWluL21heGVzIHdpZHRoL2hlaWdodHMgKi8KIAljcnRjX2NvdW50ID0gMDsKLQlmb3IgKGkgPSAw OyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwlkcm1fY2xpZW50X2Zvcl9lYWNo X21vZGVzZXQobW9kZV9zZXQsIGZiX2hlbHBlci0+bW9kZXNldHMpIHsKIAkJc3RydWN0IGRybV9k aXNwbGF5X21vZGUgKmRlc2lyZWRfbW9kZTsKLQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9z ZXQ7CiAJCWludCB4LCB5LCBqOwogCQkvKiBpbiBjYXNlIG9mIHRpbGUgZ3JvdXAsIGFyZSB3ZSB0 aGUgbGFzdCB0aWxlIHZlcnQgb3IgaG9yaXo/CiAJCSAqIElmIG5vIHRpbGUgZ3JvdXAgeW91IGFy ZSBhbHdheXMgdGhlIGxhc3Qgb25lIGJvdGggdmVydGljYWxseQpAQCAtMjAyMyw3ICsxOTUyLDYg QEAgc3RhdGljIGludCBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyLAogCQkgKi8KIAkJYm9vbCBsYXN0diA9IHRydWUsIGxhc3RoID0g dHJ1ZTsKIAotCQltb2RlX3NldCA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsK IAkJZGVzaXJlZF9tb2RlID0gbW9kZV9zZXQtPm1vZGU7CiAKIAkJaWYgKCFkZXNpcmVkX21vZGUp CkBAIC0yMjgyLDcgKzIyMTAsNyBAQCBzdGF0aWMgYm9vbCBkcm1fdGFyZ2V0X2Nsb25lZChzdHJ1 Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpk bXRfbW9kZSwgKm1vZGU7CiAKIAkvKiBvbmx5IGNvbnRlbXBsYXRlIGNsb25pbmcgaW4gdGhlIHNp bmdsZSBjcnRjIGNhc2UgKi8KLQlpZiAoZmJfaGVscGVyLT5jcnRjX2NvdW50ID4gMSkKKwlpZiAo ZmJfaGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjID4gMSkKIAkJcmV0dXJuIGZhbHNl OwogCiAJY291bnQgPSAwOwpAQCAtMjQ3MSwxNSArMjM5OSwxNyBAQCBzdGF0aWMgYm9vbCBjb25u ZWN0b3JfaGFzX3Bvc3NpYmxlX2NydGMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK IH0KIAogc3RhdGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyLAotCQkJICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICoqYmVzdF9jcnRjcywKKwkJ CSAgc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldHMsCisJCQkgIHN0cnVjdCBkcm1fY3J0YyAq KmJlc3RfY3J0Y3MsCiAJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICoqbW9kZXMsCiAJCQkg IGludCBuLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0JaW50IGMsIG87CiAJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlpbnQgbXlfc2NvcmUsIGJlc3Rfc2NvcmUsIHNjb3Jl OwotCXN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKipjcnRjcywgKmNydGM7CisJc3RydWN0IGRy bV9jcnRjICoqY3J0Y3MsICpjcnRjOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVzZXQ7CiAJ c3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yICpmYl9oZWxwZXJfY29ubjsKKwlpbnQgbzsK IAogCWlmIChuID09IGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50KQogCQlyZXR1cm4gMDsKQEAg LTI0ODgsMTIgKzI0MTgsMTEgQEAgc3RhdGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCWNvbm5lY3RvciA9IGZiX2hlbHBlcl9jb25uLT5jb25u ZWN0b3I7CiAKIAliZXN0X2NydGNzW25dID0gTlVMTDsKLQliZXN0X3Njb3JlID0gZHJtX3BpY2tf Y3J0Y3MoZmJfaGVscGVyLCBiZXN0X2NydGNzLCBtb2RlcywgbisxLCB3aWR0aCwgaGVpZ2h0KTsK KwliZXN0X3Njb3JlID0gZHJtX3BpY2tfY3J0Y3MoZmJfaGVscGVyLCBtb2Rlc2V0cywgYmVzdF9j cnRjcywgbW9kZXMsIG4gKyAxLCB3aWR0aCwgaGVpZ2h0KTsKIAlpZiAobW9kZXNbbl0gPT0gTlVM TCkKIAkJcmV0dXJuIGJlc3Rfc2NvcmU7CiAKLQljcnRjcyA9IGtjYWxsb2MoZmJfaGVscGVyLT5j b25uZWN0b3JfY291bnQsCi0JCQlzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqKSwg R0ZQX0tFUk5FTCk7CisJY3J0Y3MgPSBrY2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50 LCBzaXplb2YoKmNydGNzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcnRjcykKIAkJcmV0dXJuIGJl c3Rfc2NvcmU7CiAKQEAgLTI1MDksMTEgKzI0MzgsMTAgQEAgc3RhdGljIGludCBkcm1fcGlja19j cnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCSAqIHNlbGVjdCBhIGNydGMg Zm9yIHRoaXMgY29ubmVjdG9yIGFuZCB0aGVuIGF0dGVtcHQgdG8gY29uZmlndXJlCiAJICogcmVt YWluaW5nIGNvbm5lY3RvcnMKIAkgKi8KLQlmb3IgKGMgPSAwOyBjIDwgZmJfaGVscGVyLT5jcnRj X2NvdW50OyBjKyspIHsKLQkJY3J0YyA9ICZmYl9oZWxwZXItPmNydGNfaW5mb1tjXTsKKwlkcm1f Y2xpZW50X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgbW9kZXNldHMpIHsKKwkJY3J0YyA9IG1v ZGVzZXQtPmNydGM7CiAKLQkJaWYgKCFjb25uZWN0b3JfaGFzX3Bvc3NpYmxlX2NydGMoY29ubmVj dG9yLAotCQkJCQkJIGNydGMtPm1vZGVfc2V0LmNydGMpKQorCQlpZiAoIWNvbm5lY3Rvcl9oYXNf cG9zc2libGVfY3J0Yyhjb25uZWN0b3IsIGNydGMpKQogCQkJY29udGludWU7CiAKIAkJZm9yIChv ID0gMDsgbyA8IG47IG8rKykKQEAgLTI1MjIsNyArMjQ1MCw3IEBAIHN0YXRpYyBpbnQgZHJtX3Bp Y2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAogCQlpZiAobyA8IG4p IHsKIAkJCS8qIGlnbm9yZSBjbG9uaW5nIHVubGVzcyBvbmx5IGEgc2luZ2xlIGNydGMgKi8KLQkJ CWlmIChmYl9oZWxwZXItPmNydGNfY291bnQgPiAxKQorCQkJaWYgKGZiX2hlbHBlci0+ZGV2LT5t b2RlX2NvbmZpZy5udW1fY3J0YyA+IDEpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghZHJtX21v ZGVfZXF1YWwobW9kZXNbb10sIG1vZGVzW25dKSkKQEAgLTI1MzAsMTQgKzI0NTgsMTMgQEAgc3Rh dGljIGludCBkcm1fcGlja19jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAog CQl9CiAKIAkJY3J0Y3Nbbl0gPSBjcnRjOwotCQltZW1jcHkoY3J0Y3MsIGJlc3RfY3J0Y3MsIG4g KiBzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY3J0YyAqKSk7Ci0JCXNjb3JlID0gbXlfc2Nv cmUgKyBkcm1fcGlja19jcnRjcyhmYl9oZWxwZXIsIGNydGNzLCBtb2RlcywgbiArIDEsCisJCW1l bWNweShjcnRjcywgYmVzdF9jcnRjcywgbiAqIHNpemVvZigqY3J0Y3MpKTsKKwkJc2NvcmUgPSBt eV9zY29yZSArIGRybV9waWNrX2NydGNzKGZiX2hlbHBlciwgbW9kZXNldHMsIGNydGNzLCBtb2Rl cywgbiArIDEsCiAJCQkJCQkgIHdpZHRoLCBoZWlnaHQpOwogCQlpZiAoc2NvcmUgPiBiZXN0X3Nj b3JlKSB7CiAJCQliZXN0X3Njb3JlID0gc2NvcmU7CiAJCQltZW1jcHkoYmVzdF9jcnRjcywgY3J0 Y3MsCi0JCQkgICAgICAgZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQgKgotCQkJICAgICAgIHNp emVvZihzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICopKTsKKwkJCSAgICAgICBmYl9oZWxwZXIt PmNvbm5lY3Rvcl9jb3VudCAqIHNpemVvZigqY3J0Y3MpKTsKIAkJfQogCX0KIApAQCAtMjU0NSwy MSArMjQ3Miw5IEBAIHN0YXRpYyBpbnQgZHJtX3BpY2tfY3J0Y3Moc3RydWN0IGRybV9mYl9oZWxw ZXIgKmZiX2hlbHBlciwKIAlyZXR1cm4gYmVzdF9zY29yZTsKIH0KIAotc3RhdGljIHN0cnVjdCBk cm1fZmJfaGVscGVyX2NydGMgKgotZHJtX2ZiX2hlbHBlcl9jcnRjKHN0cnVjdCBkcm1fZmJfaGVs cGVyICpmYl9oZWxwZXIsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKLXsKLQlpbnQgaTsKLQotCWZv ciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykKLQkJaWYgKGZiX2hlbHBl ci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0LmNydGMgPT0gY3J0YykKLQkJCXJldHVybiAmZmJfaGVs cGVyLT5jcnRjX2luZm9baV07Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyogVHJ5IHRvIHJlYWQg dGhlIEJJT1MgZGlzcGxheSBjb25maWd1cmF0aW9uIGFuZCB1c2UgaXQgZm9yIHRoZSBpbml0aWFs IGNvbmZpZyAqLwogc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9maXJtd2FyZV9jb25maWcoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKLQkJCQkJICBzdHJ1Y3QgZHJtX2ZiX2hlbHBl cl9jcnRjICoqY3J0Y3MsCisJCQkJCSAgc3RydWN0IGRybV9jcnRjICoqY3J0Y3MsCiAJCQkJCSAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlcywKIAkJCQkJICBzdHJ1Y3QgZHJtX2ZiX29m ZnNldCAqb2Zmc2V0cywKIAkJCQkJICBib29sICplbmFibGVkLCBpbnQgd2lkdGgsIGludCBoZWln aHQpCkBAIC0yNTkxLDcgKzI1MDYsNyBAQCBzdGF0aWMgYm9vbCBkcm1fZmJfaGVscGVyX2Zpcm13 YXJlX2NvbmZpZyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQlzdHJ1Y3QgZHJt X2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2Nvbm47CiAJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3I7CiAJCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQkJc3RydWN0IGRybV9m Yl9oZWxwZXJfY3J0YyAqbmV3X2NydGM7CisJCXN0cnVjdCBkcm1fY3J0YyAqbmV3X2NydGM7CiAK IAkJZmJfY29ubiA9IGZiX2hlbHBlci0+Y29ubmVjdG9yX2luZm9baV07CiAJCWNvbm5lY3RvciA9 IGZiX2Nvbm4tPmNvbm5lY3RvcjsKQEAgLTI2MzQsNyArMjU0OSw3IEBAIHN0YXRpYyBib29sIGRy bV9mYl9oZWxwZXJfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxw ZXIsCiAKIAkJbnVtX2Nvbm5lY3RvcnNfZW5hYmxlZCsrOwogCi0JCW5ld19jcnRjID0gZHJtX2Zi X2hlbHBlcl9jcnRjKGZiX2hlbHBlciwgY29ubmVjdG9yLT5zdGF0ZS0+Y3J0Yyk7CisJCW5ld19j cnRjID0gY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YzsKIAogCQkvKgogCQkgKiBNYWtlIHN1cmUgd2Un cmUgbm90IHRyeWluZyB0byBkcml2ZSBtdWx0aXBsZSBjb25uZWN0b3JzCkBAIC0yNzM3LDkgKzI2 NTIsMTAgQEAgc3RhdGljIHZvaWQgZHJtX3NldHVwX2NydGNzKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpmYl9oZWxwZXIsCiAJCQkgICAgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQogewogCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9j cnRjICoqY3J0Y3M7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiptb2RlczsKIAlzdHJ1Y3Qg ZHJtX2ZiX29mZnNldCAqb2Zmc2V0czsKKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0czsK KwlzdHJ1Y3QgZHJtX2NydGMgKipjcnRjczsKIAlib29sICplbmFibGVkOwogCWludCBpOwogCkBA IC0yNzQ3LDE1ICsyNjYzLDE1IEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjcyhzdHJ1Y3Qg ZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCS8qIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmlj YXRpb24gb2YgY29ubmVjdG9yX2NvdW50IGJ5IGhvdHBsdWcgKi8KIAlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZmYl9oZWxwZXItPmxvY2spOwogCi0JY3J0Y3MgPSBrY2FsbG9jKGZiX2hlbHBlci0+Y29u bmVjdG9yX2NvdW50LAotCQkJc2l6ZW9mKHN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgKiksIEdG UF9LRVJORUwpOworCW1vZGVzZXRzID0gZHJtX2NsaWVudF9tb2Rlc2V0c19jcmVhdGUoZGV2KTsK KwljcnRjcyA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3JfY291bnQsIHNpemVvZigqY3J0 Y3MpLCBHRlBfS0VSTkVMKTsKIAltb2RlcyA9IGtjYWxsb2MoZmJfaGVscGVyLT5jb25uZWN0b3Jf Y291bnQsCiAJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiksIEdGUF9LRVJORUwp OwogCW9mZnNldHMgPSBrY2FsbG9jKGZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LAogCQkJICBz aXplb2Yoc3RydWN0IGRybV9mYl9vZmZzZXQpLCBHRlBfS0VSTkVMKTsKIAllbmFibGVkID0ga2Nh bGxvYyhmYl9oZWxwZXItPmNvbm5lY3Rvcl9jb3VudCwKIAkJCSAgc2l6ZW9mKGJvb2wpLCBHRlBf S0VSTkVMKTsKLQlpZiAoIWNydGNzIHx8ICFtb2RlcyB8fCAhZW5hYmxlZCB8fCAhb2Zmc2V0cykg eworCWlmIChJU19FUlIobW9kZXNldHMpIHx8ICFjcnRjcyB8fCAhbW9kZXMgfHwgIWVuYWJsZWQg fHwgIW9mZnNldHMpIHsKIAkJRFJNX0VSUk9SKCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIp OwogCQlnb3RvIG91dDsKIAl9CkBAIC0yNzgwLDI4ICsyNjk2LDI2IEBAIHN0YXRpYyB2b2lkIGRy bV9zZXR1cF9jcnRjcyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAogCQlEUk1fREVC VUdfS01TKCJwaWNraW5nIENSVENzIGZvciAlZHglZCBjb25maWdcbiIsCiAJCQkgICAgICB3aWR0 aCwgaGVpZ2h0KTsKIAotCQlkcm1fcGlja19jcnRjcyhmYl9oZWxwZXIsIGNydGNzLCBtb2Rlcywg MCwgd2lkdGgsIGhlaWdodCk7CisJCWRybV9waWNrX2NydGNzKGZiX2hlbHBlciwgbW9kZXNldHMs IGNydGNzLCBtb2RlcywgMCwgd2lkdGgsIGhlaWdodCk7CiAJfQogCW11dGV4X3VubG9jaygmZmJf aGVscGVyLT5kZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAotCS8qIG5lZWQgdG8gc2V0IHRoZSBt b2Rlc2V0cyB1cCBoZXJlIGZvciB1c2UgbGF0ZXIgKi8KLQkvKiBmaWxsIG91dCB0aGUgY29ubmVj dG9yPC0+Y3J0YyBtYXBwaW5ncyBpbnRvIHRoZSBtb2Rlc2V0cyAqLwotCWZvciAoaSA9IDA7IGkg PCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykKLQkJZHJtX2ZiX2hlbHBlcl9tb2Rlc2V0X3Jl bGVhc2UoZmJfaGVscGVyLAotCQkJCQkgICAgICAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9k ZV9zZXQpOwotCiAJZHJtX2ZiX2hlbHBlcl9mb3JfZWFjaF9jb25uZWN0b3IoZmJfaGVscGVyLCBp KSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gbW9kZXNbaV07Ci0JCXN0cnVj dCBkcm1fZmJfaGVscGVyX2NydGMgKmZiX2NydGMgPSBjcnRjc1tpXTsKKwkJc3RydWN0IGRybV9j cnRjICpjcnRjID0gY3J0Y3NbaV07CiAJCXN0cnVjdCBkcm1fZmJfb2Zmc2V0ICpvZmZzZXQgPSAm b2Zmc2V0c1tpXTsKIAotCQlpZiAobW9kZSAmJiBmYl9jcnRjKSB7Ci0JCQlzdHJ1Y3QgZHJtX21v ZGVfc2V0ICptb2Rlc2V0ID0gJmZiX2NydGMtPm1vZGVfc2V0OworCQlpZiAobW9kZSAmJiBjcnRj KSB7CisJCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0ID0gZHJtX2NsaWVudF9maW5kX21v ZGVzZXQobW9kZXNldHMsIGNydGMpOwogCQkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9CiAJCQkJZmJfaGVscGVyLT5jb25uZWN0b3JfaW5mb1tpXS0+Y29ubmVjdG9yOwogCiAJCQlE Uk1fREVCVUdfS01TKCJkZXNpcmVkIG1vZGUgJXMgc2V0IG9uIGNydGMgJWQgKCVkLCVkKVxuIiwK LQkJCQkgICAgICBtb2RlLT5uYW1lLCBmYl9jcnRjLT5tb2RlX3NldC5jcnRjLT5iYXNlLmlkLCBv ZmZzZXQtPngsIG9mZnNldC0+eSk7CisJCQkJICAgICAgbW9kZS0+bmFtZSwgY3J0Yy0+YmFzZS5p ZCwgb2Zmc2V0LT54LCBvZmZzZXQtPnkpOworCisJCQlpZiAoV0FSTl9PTl9PTkNFKG1vZGVzZXQt Pm51bV9jb25uZWN0b3JzID09IERSTV9DTElFTlRfTUFYX0NMT05FRF9DT05ORUNUT1JTIHx8CisJ CQkJCSAoZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YyA+IDEgJiYgbW9kZXNldC0+bnVtX2Nvbm5l Y3RvcnMgPT0gMSkpKQorCQkJCWJyZWFrOwogCiAJCQltb2Rlc2V0LT5tb2RlID0gZHJtX21vZGVf ZHVwbGljYXRlKGRldiwgbW9kZSk7CiAJCQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3IpOwpA QCAtMjgxMCwxMSArMjcyNCwxNCBAQCBzdGF0aWMgdm9pZCBkcm1fc2V0dXBfY3J0Y3Moc3RydWN0 IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwKIAkJCW1vZGVzZXQtPnkgPSBvZmZzZXQtPnk7CiAJ CX0KIAl9CisKKwlzd2FwKGZiX2hlbHBlci0+bW9kZXNldHMsIG1vZGVzZXRzKTsKIG91dDoKIAlr ZnJlZShjcnRjcyk7CiAJa2ZyZWUobW9kZXMpOwogCWtmcmVlKG9mZnNldHMpOwogCWtmcmVlKGVu YWJsZWQpOworCWRybV9jbGllbnRfbW9kZXNldHNfcmVsZWFzZShtb2Rlc2V0cyk7CiB9CiAKIC8q CkBAIC0yODI4LDExICsyNzQ1LDEwIEBAIHN0YXRpYyB2b2lkIGRybV9zZXR1cF9jcnRjc19mYihz dHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogewogCXN0cnVjdCBmYl9pbmZvICppbmZv ID0gZmJfaGVscGVyLT5mYmRldjsKIAl1bnNpZ25lZCBpbnQgcm90YXRpb24sIHN3X3JvdGF0aW9u cyA9IDA7CisJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKIAlpbnQgaTsKIAotCWZvciAo aSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZHJtX21v ZGVfc2V0ICptb2Rlc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ldLm1vZGVfc2V0OwotCisJ ZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGZiX2hlbHBlci0+bW9kZXNldHMp IHsKIAkJaWYgKCFtb2Rlc2V0LT5udW1fY29ubmVjdG9ycykKIAkJCWNvbnRpbnVlOwogCkBAIC0z MDU4LDggKzI5NzQsNyBAQCBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVu dCk7CiAgKiBAZnVuY3M6IGZiZGV2IGhlbHBlciBmdW5jdGlvbnMKICAqIEBwcmVmZXJyZWRfYnBw OiBQcmVmZXJyZWQgYml0cyBwZXIgcGl4ZWwgZm9yIHRoZSBkZXZpY2UuCiAgKiAgICAgICAgICAg ICAgICAgQGRldi0+bW9kZV9jb25maWcucHJlZmVycmVkX2RlcHRoIGlzIHVzZWQgaWYgdGhpcyBp cyB6ZXJvLgotICogQG1heF9jb25uX2NvdW50OiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0b3Jz LgotICogICAgICAgICAgICAgICAgICBAZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yIGlz IHVzZWQgaWYgdGhpcyBpcyB6ZXJvLgorICogQG1heF9jb25uX2NvdW50OiBNYXhpbXVtIG51bWJl ciBvZiBjb25uZWN0b3JzIChub3QgdXNlZCkKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdXAg ZmJkZXYgZW11bGF0aW9uIGFuZCByZWdpc3RlcnMgZmJkZXYgZm9yIGFjY2VzcyBieQogICogdXNl cnNwYWNlLiBJZiBhbGwgY29ubmVjdG9ycyBhcmUgZGlzY29ubmVjdGVkLCBzZXR1cCBpcyBkZWZl cnJlZCB0byB0aGUgbmV4dApAQCAtMzA4NywxNiArMzAwMiw5IEBAIGludCBkcm1fZmJfaGVscGVy X2ZiZGV2X3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJaWYgKCFwcmVmZXJyZWRfYnBw KQogCQlwcmVmZXJyZWRfYnBwID0gMzI7CiAKLQlpZiAoIW1heF9jb25uX2NvdW50KQotCQltYXhf Y29ubl9jb3VudCA9IGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKLQlpZiAoIW1heF9j b25uX2NvdW50KSB7Ci0JCURSTV9ERVZfRVJST1IoZGV2LT5kZXYsICJmYmRldjogTm8gY29ubmVj dG9yc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWRybV9mYl9oZWxwZXJfcHJlcGFy ZShkZXYsIGZiX2hlbHBlciwgZnVuY3MpOwogCi0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRl diwgZmJfaGVscGVyLCBtYXhfY29ubl9jb3VudCk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0 KGRldiwgZmJfaGVscGVyLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQlEUk1fREVWX0VSUk9SKGRl di0+ZGV2LCAiZmJkZXY6IEZhaWxlZCB0byBpbml0aWFsaXplIChyZXQ9JWQpXG4iLCByZXQpOwog CQlyZXR1cm4gcmV0OwpAQCAtMzQxMyw3ICszMzIxLDcgQEAgc3RhdGljIGludCBkcm1fZmJkZXZf Y2xpZW50X2hvdHBsdWcoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpCiAKIAlkcm1fZmJf aGVscGVyX3ByZXBhcmUoZGV2LCBmYl9oZWxwZXIsICZkcm1fZmJfaGVscGVyX2dlbmVyaWNfZnVu Y3MpOwogCi0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRldiwgZmJfaGVscGVyLCBkZXYtPm1v ZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdChkZXYs IGZiX2hlbHBlciwgMCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvZHJtL2RybV9jbGllbnQuaCBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAppbmRleCA4 YjU1MmIxYTZjZTkuLmIyZWZjZTNmNzc4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2Ns aWVudC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaApAQCAtNSw2ICs1LDggQEAKIAog I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKwog c3RydWN0IGRybV9jbGllbnRfZGV2Owogc3RydWN0IGRybV9kZXZpY2U7CiBzdHJ1Y3QgZHJtX2Zp bGU7CkBAIC0xMyw2ICsxNSw4IEBAIHN0cnVjdCBkcm1fZ2VtX29iamVjdDsKIHN0cnVjdCBkcm1f bWlub3I7CiBzdHJ1Y3QgbW9kdWxlOwogCisjZGVmaW5lIERSTV9DTElFTlRfTUFYX0NMT05FRF9D T05ORUNUT1JTCTgKKwogLyoqCiAgKiBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyAtIERSTSBjbGll bnQgY2FsbGJhY2tzCiAgKi8KQEAgLTEzNSw2ICsxMzksMTggQEAgc3RydWN0IGRybV9jbGllbnRf YnVmZmVyICoKIGRybV9jbGllbnRfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50 X2RldiAqY2xpZW50LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsIHUzMiBmb3JtYXQpOwogdm9pZCBk cm1fY2xpZW50X2ZyYW1lYnVmZmVyX2RlbGV0ZShzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1 ZmZlcik7CiAKK3N0cnVjdCBkcm1fbW9kZV9zZXQgKmRybV9jbGllbnRfbW9kZXNldHNfY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCBkcm1fY2xpZW50X21vZGVzZXRzX3JlbGVh c2Uoc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldHMpOworc3RydWN0IGRybV9tb2RlX3NldCAq ZHJtX2NsaWVudF9maW5kX21vZGVzZXQoc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldHMsIHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKKy8qKgorICogZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rl c2V0KCkgLSBJdGVyYXRlIG92ZXIgbW9kZXNldHMKKyAqIEBtb2Rlc2V0OiAmZHJtX21vZGVfc2V0 IGxvb3AgY3Vyc29yCisgKiBAbW9kZXNldHM6IE1vZGVzZXQgYXJyYXkgdG8gaXRlcmF0ZSBvdmVy CisgKi8KKyNkZWZpbmUgZHJtX2NsaWVudF9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIG1vZGVz ZXRzKSBcCisJZm9yIChtb2Rlc2V0ID0gbW9kZXNldHM7IG1vZGVzZXQtPmNydGM7IG1vZGVzZXQr KykKKwogaW50IGRybV9jbGllbnRfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmggYi9p bmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKaW5kZXggYmNhNGIzNGRjOTNiLi45MDU2OTdjMzdj NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAorKysgYi9pbmNsdWRl L2RybS9kcm1fZmJfaGVscGVyLmgKQEAgLTQ2LDEwICs0Niw2IEBAIHN0cnVjdCBkcm1fZmJfb2Zm c2V0IHsKIAlpbnQgeCwgeTsKIH07CiAKLXN0cnVjdCBkcm1fZmJfaGVscGVyX2NydGMgewotCXN0 cnVjdCBkcm1fbW9kZV9zZXQgbW9kZV9zZXQ7Ci19OwotCiAvKioKICAqIHN0cnVjdCBkcm1fZmJf aGVscGVyX3N1cmZhY2Vfc2l6ZSAtIGRlc2NyaWJlcyBmYmRldiBzaXplIGFuZCBzY2Fub3V0IHN1 cmZhY2Ugc2l6ZQogICogQGZiX3dpZHRoOiBmYmRldiB3aWR0aApAQCAtMTEwLDggKzEwNiw2IEBA IHN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciB7CiAgKiBzdHJ1Y3QgZHJtX2ZiX2hlbHBl ciAtIG1haW4gc3RydWN0dXJlIHRvIGVtdWxhdGUgZmJkZXYgb24gdG9wIG9mIEtNUwogICogQGZi OiBTY2Fub3V0IGZyYW1lYnVmZmVyIG9iamVjdAogICogQGRldjogRFJNIGRldmljZQotICogQGNy dGNfY291bnQ6IG51bWJlciBvZiBwb3NzaWJsZSBDUlRDcwotICogQGNydGNfaW5mbzogcGVyLUNS VEMgaGVscGVyIHN0YXRlIChtb2RlLCB4L3kgb2Zmc2V0LCBldGMpCiAgKiBAY29ubmVjdG9yX2Nv dW50OiBudW1iZXIgb2YgY29ubmVjdGVkIGNvbm5lY3RvcnMKICAqIEBjb25uZWN0b3JfaW5mb19h bGxvY19jb3VudDogc2l6ZSBvZiBjb25uZWN0b3JfaW5mbwogICogQGZ1bmNzOiBkcml2ZXIgY2Fs bGJhY2tzIGZvciBmYiBoZWxwZXIKQEAgLTE0NSw4ICsxMzksMTIgQEAgc3RydWN0IGRybV9mYl9o ZWxwZXIgewogCiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRybV9kZXZp Y2UgKmRldjsKLQlpbnQgY3J0Y19jb3VudDsKLQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jcnRjICpj cnRjX2luZm87CisKKwkvKioKKwkgKiBAbW9kZXNldHM6IENSVEMgY29uZmlndXJhdGlvbnMKKwkg Ki8KKwlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rlc2V0czsKKwogCWludCBjb25uZWN0b3JfY291 bnQ7CiAJaW50IGNvbm5lY3Rvcl9pbmZvX2FsbG9jX2NvdW50OwogCS8qKgotLSAKMi4yMC4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=