From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 4/7] drm/i915: Rip out legacy page_flip completion/irq handling Date: Thu, 20 Jul 2017 19:57:51 +0200 Message-ID: <20170720175754.30751-5-daniel.vetter@ffwll.ch> References: <20170720175754.30751-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 603C46E6FB for ; Thu, 20 Jul 2017 17:58:07 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id 143so4398861wmu.5 for ; Thu, 20 Jul 2017 10:58:07 -0700 (PDT) In-Reply-To: <20170720175754.30751-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel Graphics Development Cc: Daniel Vetter , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org QWxsIHRoZXNlIHJhY2VzIGFuZCB0aGluZ3MgYXJlIG5vdyBzb2x2ZWQgdGhyb3VnaCB0aGUgdmJs YW5rIGV2YXNpb24KdHJpY2ssIHBsdXMgZXZlbnQgaGFuZGxpbmcgaXMgZG9uZSB1c2luZyBub3Jt YWwgdmJsYW5rIGV2ZW4gcHJvY2Vzc2luZwphbmQgZHJtX2NydGNfYXJtX3ZibGFua19ldmVudC4g V2UgY2FuIGdldCByaWQgb2YgYWxsIHRoaXMgY29tcGxleGl0eS4KCkNjOiBNYWFydGVuIExhbmto b3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpDYzogVmlsbGUgU3lyasOk bMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IE1hYXJ0ZW4g TGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYt Ynk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgICAgICB8IDE1MSArKysrLS0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyB8IDIxNSAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2 LmggICAgIHwgICAzIC0KIDMgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMzQ3IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGYwY2IyNzhjZWU4Yi4uYjY0 Yzg5ZTBmYmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTE3MDgsMTggKzE3MDgsNiBA QCBzdGF0aWMgdm9pZCBnZW45X2d1Y19pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsIHUzMiBndF9paXIpCiAJfQogfQogCi1zdGF0aWMgYm9vbCBpbnRlbF9waXBl X2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAotCQkJCSAg ICAgZW51bSBwaXBlIHBpcGUpCi17Ci0JYm9vbCByZXQ7Ci0KLQlyZXQgPSBkcm1faGFuZGxlX3Zi bGFuaygmZGV2X3ByaXYtPmRybSwgcGlwZSk7Ci0JaWYgKHJldCkKLQkJaW50ZWxfZmluaXNoX3Bh Z2VfZmxpcF9tbWlvKGRldl9wcml2LCBwaXBlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRp YyB2b2lkIHZhbGxleXZpZXdfcGlwZXN0YXRfaXJxX2FjayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAJCQkJCXUzMiBpaXIsIHUzMiBwaXBlX3N0YXRzW0k5MTVfTUFYX1BJUEVT XSkKIHsKQEAgLTE3ODQsMTIgKzE3NzIsOCBAQCBzdGF0aWMgdm9pZCB2YWxsZXl2aWV3X3BpcGVz dGF0X2lycV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAllbnVt IHBpcGUgcGlwZTsKIAogCWZvcl9lYWNoX3BpcGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJaWYgKHBp cGVfc3RhdHNbcGlwZV0gJiBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTICYmCi0J CSAgICBpbnRlbF9waXBlX2hhbmRsZV92YmxhbmsoZGV2X3ByaXYsIHBpcGUpKQotCQkJaW50ZWxf Y2hlY2tfcGFnZV9mbGlwKGRldl9wcml2LCBwaXBlKTsKLQotCQlpZiAocGlwZV9zdGF0c1twaXBl XSAmIFBMQU5FX0ZMSVBfRE9ORV9JTlRfU1RBVFVTX1ZMVikKLQkJCWludGVsX2ZpbmlzaF9wYWdl X2ZsaXBfY3MoZGV2X3ByaXYsIHBpcGUpOworCQlpZiAocGlwZV9zdGF0c1twaXBlXSAmIFBJUEVf U1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpCisJCQlkcm1faGFuZGxlX3ZibGFuaygmZGV2 X3ByaXYtPmRybSwgcGlwZSk7CiAKIAkJaWYgKHBpcGVfc3RhdHNbcGlwZV0gJiBQSVBFX0NSQ19E T05FX0lOVEVSUlVQVF9TVEFUVVMpCiAJCQlpOXh4X3BpcGVfY3JjX2lycV9oYW5kbGVyKGRldl9w cml2LCBwaXBlKTsKQEAgLTIyNDEsMTkgKzIyMjUsMTQgQEAgc3RhdGljIHZvaWQgaWxrX2Rpc3Bs YXlfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAogCQlEUk1f RVJST1IoIlBvaXNvbiBpbnRlcnJ1cHRcbiIpOwogCiAJZm9yX2VhY2hfcGlwZShkZXZfcHJpdiwg cGlwZSkgewotCQlpZiAoZGVfaWlyICYgREVfUElQRV9WQkxBTksocGlwZSkgJiYKLQkJICAgIGlu dGVsX3BpcGVfaGFuZGxlX3ZibGFuayhkZXZfcHJpdiwgcGlwZSkpCi0JCQlpbnRlbF9jaGVja19w YWdlX2ZsaXAoZGV2X3ByaXYsIHBpcGUpOworCQlpZiAoZGVfaWlyICYgREVfUElQRV9WQkxBTkso cGlwZSkpCisJCQlkcm1faGFuZGxlX3ZibGFuaygmZGV2X3ByaXYtPmRybSwgcGlwZSk7CiAKIAkJ aWYgKGRlX2lpciAmIERFX1BJUEVfRklGT19VTkRFUlJVTihwaXBlKSkKIAkJCWludGVsX2NwdV9m aWZvX3VuZGVycnVuX2lycV9oYW5kbGVyKGRldl9wcml2LCBwaXBlKTsKIAogCQlpZiAoZGVfaWly ICYgREVfUElQRV9DUkNfRE9ORShwaXBlKSkKIAkJCWk5eHhfcGlwZV9jcmNfaXJxX2hhbmRsZXIo ZGV2X3ByaXYsIHBpcGUpOwotCi0JCS8qIHBsYW5lL3BpcGVzIG1hcCAxOjEgb24gaWxrKyAqLwot CQlpZiAoZGVfaWlyICYgREVfUExBTkVfRkxJUF9ET05FKHBpcGUpKQotCQkJaW50ZWxfZmluaXNo X3BhZ2VfZmxpcF9jcyhkZXZfcHJpdiwgcGlwZSk7CiAJfQogCiAJLyogY2hlY2sgZXZlbnQgZnJv bSBQQ0ggKi8KQEAgLTIzMTUsMTMgKzIyOTQsOCBAQCBzdGF0aWMgdm9pZCBpdmJfZGlzcGxheV9p cnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCWludGVsX29w cmVnaW9uX2FzbGVfaW50cihkZXZfcHJpdik7CiAKIAlmb3JfZWFjaF9waXBlKGRldl9wcml2LCBw aXBlKSB7Ci0JCWlmIChkZV9paXIgJiAoREVfUElQRV9WQkxBTktfSVZCKHBpcGUpKSAmJgotCQkg ICAgaW50ZWxfcGlwZV9oYW5kbGVfdmJsYW5rKGRldl9wcml2LCBwaXBlKSkKLQkJCWludGVsX2No ZWNrX3BhZ2VfZmxpcChkZXZfcHJpdiwgcGlwZSk7Ci0KLQkJLyogcGxhbmUvcGlwZXMgbWFwIDE6 MSBvbiBpbGsrICovCi0JCWlmIChkZV9paXIgJiBERV9QTEFORV9GTElQX0RPTkVfSVZCKHBpcGUp KQotCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcF9jcyhkZXZfcHJpdiwgcGlwZSk7CisJCWlmIChk ZV9paXIgJiAoREVfUElQRV9WQkxBTktfSVZCKHBpcGUpKSkKKwkJCWRybV9oYW5kbGVfdmJsYW5r KCZkZXZfcHJpdi0+ZHJtLCBwaXBlKTsKIAl9CiAKIAkvKiBjaGVjayBldmVudCBmcm9tIFBDSCAq LwpAQCAtMjUwMiw3ICsyNDc2LDcgQEAgZ2VuOF9kZV9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBtYXN0ZXJfY3RsKQogCX0KIAogCWZvcl9lYWNoX3Bp cGUoZGV2X3ByaXYsIHBpcGUpIHsKLQkJdTMyIGZsaXBfZG9uZSwgZmF1bHRfZXJyb3JzOworCQl1 MzIgZmF1bHRfZXJyb3JzOwogCiAJCWlmICghKG1hc3Rlcl9jdGwgJiBHRU44X0RFX1BJUEVfSVJR KHBpcGUpKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjUxNiwxOCArMjQ5MCw4IEBAIGdlbjhfZGVfaXJx X2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgbWFzdGVyX2N0 bCkKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJCUk5MTVfV1JJVEUoR0VOOF9ERV9QSVBFX0lJUihw aXBlKSwgaWlyKTsKIAotCQlpZiAoaWlyICYgR0VOOF9QSVBFX1ZCTEFOSyAmJgotCQkgICAgaW50 ZWxfcGlwZV9oYW5kbGVfdmJsYW5rKGRldl9wcml2LCBwaXBlKSkKLQkJCWludGVsX2NoZWNrX3Bh Z2VfZmxpcChkZXZfcHJpdiwgcGlwZSk7Ci0KLQkJZmxpcF9kb25lID0gaWlyOwotCQlpZiAoSU5U RUxfSU5GTyhkZXZfcHJpdiktPmdlbiA+PSA5KQotCQkJZmxpcF9kb25lICY9IEdFTjlfUElQRV9Q TEFORTFfRkxJUF9ET05FOwotCQllbHNlCi0JCQlmbGlwX2RvbmUgJj0gR0VOOF9QSVBFX1BSSU1B UllfRkxJUF9ET05FOwotCi0JCWlmIChmbGlwX2RvbmUpCi0JCQlpbnRlbF9maW5pc2hfcGFnZV9m bGlwX2NzKGRldl9wcml2LCBwaXBlKTsKKwkJaWYgKGlpciAmIEdFTjhfUElQRV9WQkxBTkspCisJ CQlkcm1faGFuZGxlX3ZibGFuaygmZGV2X3ByaXYtPmRybSwgcGlwZSk7CiAKIAkJaWYgKGlpciAm IEdFTjhfUElQRV9DRENMS19DUkNfRE9ORSkKIAkJCWhzd19waXBlX2NyY19pcnFfaGFuZGxlcihk ZXZfcHJpdiwgcGlwZSk7CkBAIC0zNzEwLDM0ICszNjc0LDYgQEAgc3RhdGljIGludCBpOHh4X2ly cV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogLyoKICAqIFJldHVybnMgdHJ1 ZSB3aGVuIGEgcGFnZSBmbGlwIGhhcyBjb21wbGV0ZWQuCiAgKi8KLXN0YXRpYyBib29sIGk4eHhf aGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAg ICAgaW50IHBsYW5lLCBpbnQgcGlwZSwgdTMyIGlpcikKLXsKLQl1MTYgZmxpcF9wZW5kaW5nID0g RElTUExBWV9QTEFORV9GTElQX1BFTkRJTkcocGxhbmUpOwotCi0JaWYgKCFpbnRlbF9waXBlX2hh bmRsZV92YmxhbmsoZGV2X3ByaXYsIHBpcGUpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoKGlp ciAmIGZsaXBfcGVuZGluZykgPT0gMCkKLQkJZ290byBjaGVja19wYWdlX2ZsaXA7Ci0KLQkvKiBX ZSBkZXRlY3QgRmxpcERvbmUgYnkgbG9va2luZyBmb3IgdGhlIGNoYW5nZSBpbiBQZW5kaW5nRmxp cCBmcm9tICcxJwotCSAqIHRvICcwJyBvbiB0aGUgZm9sbG93aW5nIHZibGFuaywgaS5lLiBJSVIg aGFzIHRoZSBQZW5kaW5nZmxpcAotCSAqIGFzc2VydGVkIGZvbGxvd2luZyB0aGUgTUlfRElTUExB WV9GTElQLCBidXQgSVNSIGlzIGRlYXNzZXJ0ZWQsIGhlbmNlCi0JICogdGhlIGZsaXAgaXMgY29t cGxldGVkIChubyBsb25nZXIgcGVuZGluZykuIFNpbmNlIHRoaXMgZG9lc24ndCByYWlzZQotCSAq IGFuIGludGVycnVwdCBwZXIgc2UsIHdlIHdhdGNoIGZvciB0aGUgY2hhbmdlIGF0IHZibGFuay4K LQkgKi8KLQlpZiAoSTkxNV9SRUFEMTYoSVNSKSAmIGZsaXBfcGVuZGluZykKLQkJZ290byBjaGVj a19wYWdlX2ZsaXA7Ci0KLQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwX2NzKGRldl9wcml2LCBwaXBl KTsKLQlyZXR1cm4gdHJ1ZTsKLQotY2hlY2tfcGFnZV9mbGlwOgotCWludGVsX2NoZWNrX3BhZ2Vf ZmxpcChkZXZfcHJpdiwgcGlwZSk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgaXJxcmV0 dXJuX3QgaTh4eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGFyZzsKQEAgLTM3NDUsOSArMzY4MSw2IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBpOHh4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAl1MTYgaWlyLCBuZXdf aWlyOwogCXUzMiBwaXBlX3N0YXRzWzJdOwogCWludCBwaXBlOwotCXUxNiBmbGlwX21hc2sgPQot CQlJOTE1X0RJU1BMQVlfUExBTkVfQV9GTElQX1BFTkRJTkdfSU5URVJSVVBUIHwKLQkJSTkxNV9E SVNQTEFZX1BMQU5FX0JfRkxJUF9QRU5ESU5HX0lOVEVSUlVQVDsKIAlpcnFyZXR1cm5fdCByZXQ7 CiAKIAlpZiAoIWludGVsX2lycXNfZW5hYmxlZChkZXZfcHJpdikpCkBAIC0zNzYxLDcgKzM2OTQs NyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTh4eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICph cmcpCiAJaWYgKGlpciA9PSAwKQogCQlnb3RvIG91dDsKIAotCXdoaWxlIChpaXIgJiB+ZmxpcF9t YXNrKSB7CisJd2hpbGUgKGlpcikgewogCQkvKiBDYW4ndCByZWx5IG9uIHBpcGVzdGF0IGludGVy cnVwdCBiaXQgaW4gaWlyIGFzIGl0IG1pZ2h0CiAJCSAqIGhhdmUgYmVlbiBjbGVhcmVkIGFmdGVy IHRoZSBwaXBlc3RhdCBpbnRlcnJ1cHQgd2FzIHJlY2VpdmVkLgogCQkgKiBJdCBkb2Vzbid0IHNl dCB0aGUgYml0IGluIGlpciBhZ2FpbiwgYnV0IGl0IHN0aWxsIHByb2R1Y2VzCkBAIC0zNzgzLDcg KzM3MTYsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTh4eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICphcmcpCiAJCX0KIAkJc3Bpbl91bmxvY2soJmRldl9wcml2LT5pcnFfbG9jayk7CiAKLQkJ STkxNV9XUklURTE2KElJUiwgaWlyICYgfmZsaXBfbWFzayk7CisJCUk5MTVfV1JJVEUxNihJSVIs IGlpcik7CiAJCW5ld19paXIgPSBJOTE1X1JFQUQxNihJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3Jp dGVzICovCiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCkBAIC0zNzk0LDkgKzM3 MjcsOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTh4eF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICphcmcpCiAJCQlpZiAoSEFTX0ZCQyhkZXZfcHJpdikpCiAJCQkJcGxhbmUgPSAhcGxhbmU7CiAK LQkJCWlmIChwaXBlX3N0YXRzW3BpcGVdICYgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUyAm JgotCQkJICAgIGk4eHhfaGFuZGxlX3ZibGFuayhkZXZfcHJpdiwgcGxhbmUsIHBpcGUsIGlpcikp Ci0JCQkJZmxpcF9tYXNrICY9IH5ESVNQTEFZX1BMQU5FX0ZMSVBfUEVORElORyhwbGFuZSk7CisJ CQlpZiAocGlwZV9zdGF0c1twaXBlXSAmIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMpCisJ CQkJZHJtX2hhbmRsZV92YmxhbmsoJmRldl9wcml2LT5kcm0sIHBpcGUpOwogCiAJCQlpZiAocGlw ZV9zdGF0c1twaXBlXSAmIFBJUEVfQ1JDX0RPTkVfSU5URVJSVVBUX1NUQVRVUykKIAkJCQlpOXh4 X3BpcGVfY3JjX2lycV9oYW5kbGVyKGRldl9wcml2LCBwaXBlKTsKQEAgLTM4OTYsNDUgKzM4Mjgs MTEgQEAgc3RhdGljIGludCBpOTE1X2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQogCXJldHVybiAwOwogfQogCi0vKgotICogUmV0dXJucyB0cnVlIHdoZW4gYSBwYWdlIGZs aXAgaGFzIGNvbXBsZXRlZC4KLSAqLwotc3RhdGljIGJvb2wgaTkxNV9oYW5kbGVfdmJsYW5rKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAgICBpbnQgcGxhbmUsIGlu dCBwaXBlLCB1MzIgaWlyKQotewotCXUzMiBmbGlwX3BlbmRpbmcgPSBESVNQTEFZX1BMQU5FX0ZM SVBfUEVORElORyhwbGFuZSk7Ci0KLQlpZiAoIWludGVsX3BpcGVfaGFuZGxlX3ZibGFuayhkZXZf cHJpdiwgcGlwZSkpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmICgoaWlyICYgZmxpcF9wZW5kaW5n KSA9PSAwKQotCQlnb3RvIGNoZWNrX3BhZ2VfZmxpcDsKLQotCS8qIFdlIGRldGVjdCBGbGlwRG9u ZSBieSBsb29raW5nIGZvciB0aGUgY2hhbmdlIGluIFBlbmRpbmdGbGlwIGZyb20gJzEnCi0JICog dG8gJzAnIG9uIHRoZSBmb2xsb3dpbmcgdmJsYW5rLCBpLmUuIElJUiBoYXMgdGhlIFBlbmRpbmdm bGlwCi0JICogYXNzZXJ0ZWQgZm9sbG93aW5nIHRoZSBNSV9ESVNQTEFZX0ZMSVAsIGJ1dCBJU1Ig aXMgZGVhc3NlcnRlZCwgaGVuY2UKLQkgKiB0aGUgZmxpcCBpcyBjb21wbGV0ZWQgKG5vIGxvbmdl ciBwZW5kaW5nKS4gU2luY2UgdGhpcyBkb2Vzbid0IHJhaXNlCi0JICogYW4gaW50ZXJydXB0IHBl ciBzZSwgd2Ugd2F0Y2ggZm9yIHRoZSBjaGFuZ2UgYXQgdmJsYW5rLgotCSAqLwotCWlmIChJOTE1 X1JFQUQoSVNSKSAmIGZsaXBfcGVuZGluZykKLQkJZ290byBjaGVja19wYWdlX2ZsaXA7Ci0KLQlp bnRlbF9maW5pc2hfcGFnZV9mbGlwX2NzKGRldl9wcml2LCBwaXBlKTsKLQlyZXR1cm4gdHJ1ZTsK LQotY2hlY2tfcGFnZV9mbGlwOgotCWludGVsX2NoZWNrX3BhZ2VfZmxpcChkZXZfcHJpdiwgcGlw ZSk7Ci0JcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgaTkxNV9pcnFfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGFy ZzsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7CiAJ dTMyIGlpciwgbmV3X2lpciwgcGlwZV9zdGF0c1tJOTE1X01BWF9QSVBFU107Ci0JdTMyIGZsaXBf bWFzayA9Ci0JCUk5MTVfRElTUExBWV9QTEFORV9BX0ZMSVBfUEVORElOR19JTlRFUlJVUFQgfAot CQlJOTE1X0RJU1BMQVlfUExBTkVfQl9GTElQX1BFTkRJTkdfSU5URVJSVVBUOwogCWludCBwaXBl LCByZXQgPSBJUlFfTk9ORTsKIAogCWlmICghaW50ZWxfaXJxc19lbmFibGVkKGRldl9wcml2KSkK QEAgLTM5NDUsNyArMzg0Myw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmFyZykKIAogCWlpciA9IEk5MTVfUkVBRChJSVIpOwogCWRvIHsKLQkJ Ym9vbCBpcnFfcmVjZWl2ZWQgPSAoaWlyICYgfmZsaXBfbWFzaykgIT0gMDsKKwkJYm9vbCBpcnFf cmVjZWl2ZWQgPSAoaWlyKSAhPSAwOwogCQlib29sIGJsY19ldmVudCA9IGZhbHNlOwogCiAJCS8q IENhbid0IHJlbHkgb24gcGlwZXN0YXQgaW50ZXJydXB0IGJpdCBpbiBpaXIgYXMgaXQgbWlnaHQK QEAgLTM5ODAsNyArMzg3OCw3IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVy KGludCBpcnEsIHZvaWQgKmFyZykKIAkJCQlpOXh4X2hwZF9pcnFfaGFuZGxlcihkZXZfcHJpdiwg aG90cGx1Z19zdGF0dXMpOwogCQl9CiAKLQkJSTkxNV9XUklURShJSVIsIGlpciAmIH5mbGlwX21h c2spOworCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIp OyAvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRF UlJVUFQpCkBAIC0zOTkxLDkgKzM4ODksOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTkxNV9pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCQlpZiAoSEFTX0ZCQyhkZXZfcHJpdikpCiAJ CQkJcGxhbmUgPSAhcGxhbmU7CiAKLQkJCWlmIChwaXBlX3N0YXRzW3BpcGVdICYgUElQRV9WQkxB TktfSU5URVJSVVBUX1NUQVRVUyAmJgotCQkJICAgIGk5MTVfaGFuZGxlX3ZibGFuayhkZXZfcHJp diwgcGxhbmUsIHBpcGUsIGlpcikpCi0JCQkJZmxpcF9tYXNrICY9IH5ESVNQTEFZX1BMQU5FX0ZM SVBfUEVORElORyhwbGFuZSk7CisJCQlpZiAocGlwZV9zdGF0c1twaXBlXSAmIFBJUEVfVkJMQU5L X0lOVEVSUlVQVF9TVEFUVVMpCisJCQkJZHJtX2hhbmRsZV92YmxhbmsoJmRldl9wcml2LT5kcm0s IHBpcGUpOwogCiAJCQlpZiAocGlwZV9zdGF0c1twaXBlXSAmIFBJUEVfTEVHQUNZX0JMQ19FVkVO VF9TVEFUVVMpCiAJCQkJYmxjX2V2ZW50ID0gdHJ1ZTsKQEAgLTQwMjYsNyArMzkyMyw3IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAkJ ICovCiAJCXJldCA9IElSUV9IQU5ETEVEOwogCQlpaXIgPSBuZXdfaWlyOwotCX0gd2hpbGUgKGlp ciAmIH5mbGlwX21hc2spOworCX0gd2hpbGUgKGlpcik7CiAKIAllbmFibGVfcnBtX3dha2VyZWZf YXNzZXJ0cyhkZXZfcHJpdik7CiAKQEAgLTQxNjEsOSArNDA1OCw2IEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBpOTY1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAl1MzIgaWlyLCBuZXdf aWlyOwogCXUzMiBwaXBlX3N0YXRzW0k5MTVfTUFYX1BJUEVTXTsKIAlpbnQgcmV0ID0gSVJRX05P TkUsIHBpcGU7Ci0JdTMyIGZsaXBfbWFzayA9Ci0JCUk5MTVfRElTUExBWV9QTEFORV9BX0ZMSVBf UEVORElOR19JTlRFUlJVUFQgfAotCQlJOTE1X0RJU1BMQVlfUExBTkVfQl9GTElQX1BFTkRJTkdf SU5URVJSVVBUOwogCiAJaWYgKCFpbnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYpKQogCQlyZXR1 cm4gSVJRX05PTkU7CkBAIC00MTc0LDcgKzQwNjgsNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgaTk2 NV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJaWlyID0gSTkxNV9SRUFEKElJUik7 CiAKIAlmb3IgKDs7KSB7Ci0JCWJvb2wgaXJxX3JlY2VpdmVkID0gKGlpciAmIH5mbGlwX21hc2sp ICE9IDA7CisJCWJvb2wgaXJxX3JlY2VpdmVkID0gKGlpcikgIT0gMDsKIAkJYm9vbCBibGNfZXZl bnQgPSBmYWxzZTsKIAogCQkvKiBDYW4ndCByZWx5IG9uIHBpcGVzdGF0IGludGVycnVwdCBiaXQg aW4gaWlyIGFzIGl0IG1pZ2h0CkBAIC00MjEyLDcgKzQxMDYsNyBAQCBzdGF0aWMgaXJxcmV0dXJu X3QgaTk2NV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCQkJaTl4eF9ocGRfaXJx X2hhbmRsZXIoZGV2X3ByaXYsIGhvdHBsdWdfc3RhdHVzKTsKIAkJfQogCi0JCUk5MTVfV1JJVEUo SUlSLCBpaXIgJiB+ZmxpcF9tYXNrKTsKKwkJSTkxNV9XUklURShJSVIsIGlpcik7CiAJCW5ld19p aXIgPSBJOTE1X1JFQUQoSUlSKTsgLyogRmx1c2ggcG9zdGVkIHdyaXRlcyAqLwogCiAJCWlmIChp aXIgJiBJOTE1X1VTRVJfSU5URVJSVVBUKQpAQCAtNDIyMSw5ICs0MTE1LDggQEAgc3RhdGljIGly cXJldHVybl90IGk5NjVfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogCQkJbm90aWZ5 X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKIAogCQlmb3JfZWFjaF9waXBlKGRldl9wcml2 LCBwaXBlKSB7Ci0JCQlpZiAocGlwZV9zdGF0c1twaXBlXSAmIFBJUEVfU1RBUlRfVkJMQU5LX0lO VEVSUlVQVF9TVEFUVVMgJiYKLQkJCSAgICBpOTE1X2hhbmRsZV92YmxhbmsoZGV2X3ByaXYsIHBp cGUsIHBpcGUsIGlpcikpCi0JCQkJZmxpcF9tYXNrICY9IH5ESVNQTEFZX1BMQU5FX0ZMSVBfUEVO RElORyhwaXBlKTsKKwkJCWlmIChwaXBlX3N0YXRzW3BpcGVdICYgUElQRV9TVEFSVF9WQkxBTktf SU5URVJSVVBUX1NUQVRVUykKKwkJCQlkcm1faGFuZGxlX3ZibGFuaygmZGV2X3ByaXYtPmRybSwg cGlwZSk7CiAKIAkJCWlmIChwaXBlX3N0YXRzW3BpcGVdICYgUElQRV9MRUdBQ1lfQkxDX0VWRU5U X1NUQVRVUykKIAkJCQlibGNfZXZlbnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlz cGxheS5jCmluZGV4IDYzZWE4ZDZiMmViZC4uZmNiZDRiN2ZhOTZjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0zNDA5LDE0ICszNDA5LDYgQEAgc3RhdGljIHZvaWQgc2t5 bGFrZV9kaXNhYmxlX3ByaW1hcnlfcGxhbmUoc3RydWN0IGludGVsX3BsYW5lICpwcmltYXJ5LAog CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT51bmNvcmUubG9jaywgaXJxZmxhZ3Mp OwogfQogCi1zdGF0aWMgdm9pZCBpbnRlbF9jb21wbGV0ZV9wYWdlX2ZsaXBzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKLXsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YzsKLQot CWZvcl9lYWNoX2ludGVsX2NydGMoJmRldl9wcml2LT5kcm0sIGNydGMpCi0JCWludGVsX2Zpbmlz aF9wYWdlX2ZsaXBfY3MoZGV2X3ByaXYsIGNydGMtPnBpcGUpOwotfQotCiBzdGF0aWMgaW50CiBf X2ludGVsX2Rpc3BsYXlfcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCSAgICAgICBz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCkBAIC0zNTM0LDEzICszNTI2LDYgQEAgdm9p ZCBpbnRlbF9maW5pc2hfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQog CWlmICghc3RhdGUpCiAJCWdvdG8gdW5sb2NrOwogCi0JLyoKLQkgKiBGbGlwcyBpbiB0aGUgcmlu Z3Mgd2lsbCBiZSBudWtlZCBieSB0aGUgcmVzZXQsCi0JICogc28gY29tcGxldGUgYWxsIHBlbmRp bmcgZmxpcHMgc28gdGhhdCB1c2VyIHNwYWNlCi0JICogd2lsbCBnZXQgaXRzIGV2ZW50cyBhbmQg bm90IGdldCBzdHVjay4KLQkgKi8KLQlpbnRlbF9jb21wbGV0ZV9wYWdlX2ZsaXBzKGRldl9wcml2 KTsKLQogCWRldl9wcml2LT5tb2Rlc2V0X3Jlc3RvcmVfc3RhdGUgPSBOVUxMOwogCiAJLyogcmVz ZXQgZG9lc24ndCB0b3VjaCB0aGUgZGlzcGxheSAqLwpAQCAtMTAxMzYsMTQwICsxMDEyMSw2IEBA IHN0YXRpYyB2b2lkIGludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJ a2ZyZWUoaW50ZWxfY3J0Yyk7CiB9CiAKLS8qIElzICdhJyBhZnRlciBvciBlcXVhbCB0byAnYic/ ICovCi1zdGF0aWMgYm9vbCBnNHhfZmxpcF9jb3VudF9hZnRlcl9lcSh1MzIgYSwgdTMyIGIpCi17 Ci0JcmV0dXJuICEoKGEgLSBiKSAmIDB4ODAwMDAwMDApOwotfQotCi1zdGF0aWMgYm9vbCBfX3Bh Z2VmbGlwX2ZpbmlzaGVkX2NzKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJCSAgIHN0cnVj dCBpbnRlbF9mbGlwX3dvcmsgKndvcmspCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNy dGMtPmJhc2UuZGV2OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoZGV2KTsKLQotCWlmIChhYm9ydF9mbGlwX29uX3Jlc2V0KGNydGMpKQotCQlyZXR1cm4gdHJ1 ZTsKLQotCS8qCi0JICogVGhlIHJlbGV2YW50IHJlZ2lzdGVycyBkb2VuJ3QgZXhpc3Qgb24gcHJl LWN0Zy4KLQkgKiBBcyB0aGUgZmxpcCBkb25lIGludGVycnVwdCBkb2Vzbid0IHRyaWdnZXIgZm9y IG1taW8KLQkgKiBmbGlwcyBvbiBnbWNoIHBsYXRmb3JtcywgYSBmbGlwIGNvdW50IGNoZWNrIGlz bid0Ci0JICogcmVhbGx5IG5lZWRlZCB0aGVyZS4gQnV0IHNpbmNlIGN0ZyBoYXMgdGhlIHJlZ2lz dGVycywKLQkgKiBpbmNsdWRlIGl0IGluIHRoZSBjaGVjayBhbnl3YXkuCi0JICovCi0JaWYgKElO VEVMX0dFTihkZXZfcHJpdikgPCA1ICYmICFJU19HNFgoZGV2X3ByaXYpKQotCQlyZXR1cm4gdHJ1 ZTsKLQotCS8qCi0JICogQkRXIHNpZ25hbHMgZmxpcCBkb25lIGltbWVkaWF0ZWx5IGlmIHRoZSBw bGFuZQotCSAqIGlzIGRpc2FibGVkLCBldmVuIGlmIHRoZSBwbGFuZSBlbmFibGUgaXMgYWxyZWFk eQotCSAqIGFybWVkIHRvIG9jY3VyIGF0IHRoZSBuZXh0IHZibGFuayA6KAotCSAqLwotCi0JLyoK LQkgKiBBIERTUFNVUkZMSVZFIGNoZWNrIGlzbid0IGVub3VnaCBpbiBjYXNlIHRoZSBtbWlvIGFu ZCBDUyBmbGlwcwotCSAqIHVzZWQgdGhlIHNhbWUgYmFzZSBhZGRyZXNzLiBJbiB0aGF0IGNhc2Ug dGhlIG1taW8gZmxpcCBtaWdodAotCSAqIGhhdmUgY29tcGxldGVkLCBidXQgdGhlIENTIGhhc24n dCBldmVuIGV4ZWN1dGVkIHRoZSBmbGlwIHlldC4KLQkgKgotCSAqIEEgZmxpcCBjb3VudCBjaGVj ayBpc24ndCBlbm91Z2ggYXMgdGhlIENTIG1pZ2h0IGhhdmUgdXBkYXRlZAotCSAqIHRoZSBiYXNl IGFkZHJlc3MganVzdCBhZnRlciBzdGFydCBvZiB2YmxhbmssIGJ1dCBiZWZvcmUgd2UKLQkgKiBt YW5hZ2VkIHRvIHByb2Nlc3MgdGhlIGludGVycnVwdC4gVGhpcyBtZWFucyB3ZSdkIGNvbXBsZXRl IHRoZQotCSAqIENTIGZsaXAgdG9vIHNvb24uCi0JICoKLQkgKiBDb21iaW5pbmcgYm90aCBjaGVj a3Mgc2hvdWxkIGdldCB1cyBhIGdvb2QgZW5vdWdoIHJlc3VsdC4gSXQgbWF5Ci0JICogc3RpbGwg aGFwcGVuIHRoYXQgdGhlIENTIGZsaXAgaGFzIGJlZW4gZXhlY3V0ZWQsIGJ1dCBoYXMgbm90Ci0J ICogeWV0IGFjdHVhbGx5IGNvbXBsZXRlZC4gQnV0IGluIGNhc2UgdGhlIGJhc2UgYWRkcmVzcyBp cyB0aGUgc2FtZQotCSAqIGFueXdheSwgd2UgZG9uJ3QgcmVhbGx5IGNhcmUuCi0JICovCi0JcmV0 dXJuIChJOTE1X1JFQUQoRFNQU1VSRkxJVkUoY3J0Yy0+cGxhbmUpKSAmIH4weGZmZikgPT0KLQkJ Y3J0Yy0+ZmxpcF93b3JrLT5ndHRfb2Zmc2V0ICYmCi0JCWc0eF9mbGlwX2NvdW50X2FmdGVyX2Vx KEk5MTVfUkVBRChQSVBFX0ZMSVBDT1VOVF9HNFgoY3J0Yy0+cGlwZSkpLAotCQkJCSAgICBjcnRj LT5mbGlwX3dvcmstPmZsaXBfY291bnQpOwotfQotCi1zdGF0aWMgYm9vbAotX19wYWdlZmxpcF9m aW5pc2hlZF9tbWlvKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAotCQkJICAgICAgIHN0cnVjdCBp bnRlbF9mbGlwX3dvcmsgKndvcmspCi17Ci0JLyoKLQkgKiBNTUlPIHdvcmsgY29tcGxldGVzIHdo ZW4gdmJsYW5rIGlzIGRpZmZlcmVudCBmcm9tCi0JICogZmxpcF9xdWV1ZWRfdmJsYW5rLgotCSAq Ci0JICogUmVzZXQgY291bnRlciB2YWx1ZSBkb2Vzbid0IG1hdHRlciwgdGhpcyBpcyBoYW5kbGVk IGJ5Ci0JICogaTkxNV93YWl0X3JlcXVlc3QgZmluaXNoaW5nIGVhcmx5LCBzbyBubyBuZWVkIHRv IGhhbmRsZQotCSAqIHJlc2V0IGhlcmUuCi0JICovCi0JcmV0dXJuIGludGVsX2NydGNfZ2V0X3Zi bGFua19jb3VudGVyKGNydGMpICE9IHdvcmstPmZsaXBfcXVldWVkX3ZibGFuazsKLX0KLQotCi1z dGF0aWMgYm9vbCBwYWdlZmxpcF9maW5pc2hlZChzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YywKLQkJ CSAgICAgIHN0cnVjdCBpbnRlbF9mbGlwX3dvcmsgKndvcmspCi17Ci0JaWYgKCFhdG9taWNfcmVh ZCgmd29yay0+cGVuZGluZykpCi0JCXJldHVybiBmYWxzZTsKLQotCXNtcF9ybWIoKTsKLQotCWlm IChpc19tbWlvX3dvcmsod29yaykpCi0JCXJldHVybiBfX3BhZ2VmbGlwX2ZpbmlzaGVkX21taW8o Y3J0Yywgd29yayk7Ci0JZWxzZQotCQlyZXR1cm4gX19wYWdlZmxpcF9maW5pc2hlZF9jcyhjcnRj LCB3b3JrKTsKLX0KLQotdm9pZCBpbnRlbF9maW5pc2hfcGFnZV9mbGlwX2NzKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHBpcGUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0gaW50ZWxf Z2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwotCXN0cnVjdCBpbnRlbF9mbGlwX3dv cmsgKndvcms7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIElnbm9yZSBlYXJseSB2Ymxh bmsgaXJxcyAqLwotCWlmICghY3J0YykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBUaGlzIGlzIGNh bGxlZCBib3RoIGJ5IGlycSBoYW5kbGVycyBhbmQgdGhlIHJlc2V0IGNvZGUgKHRvIGNvbXBsZXRl Ci0JICogbG9zdCBwYWdlZmxpcHMpIHNvIG5lZWRzIHRoZSBmdWxsIGlycXNhdmUgc3BpbmxvY2tz LgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQl3 b3JrID0gY3J0Yy0+ZmxpcF93b3JrOwotCi0JaWYgKHdvcmsgIT0gTlVMTCAmJgotCSAgICAhaXNf bW1pb193b3JrKHdvcmspICYmCi0JICAgIHBhZ2VmbGlwX2ZpbmlzaGVkKGNydGMsIHdvcmspKQot CQlwYWdlX2ZsaXBfY29tcGxldGVkKGNydGMpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgaW50ZWxfZmluaXNoX3BhZ2VfZmxp cF9tbWlvKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHBpcGUpCi17Ci0J c3RydWN0IGRybV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwotCXN0cnVjdCBpbnRlbF9j cnRjICpjcnRjID0gaW50ZWxfZ2V0X2NydGNfZm9yX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwotCXN0 cnVjdCBpbnRlbF9mbGlwX3dvcmsgKndvcms7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8q IElnbm9yZSBlYXJseSB2YmxhbmsgaXJxcyAqLwotCWlmICghY3J0YykKLQkJcmV0dXJuOwotCi0J LyoKLQkgKiBUaGlzIGlzIGNhbGxlZCBib3RoIGJ5IGlycSBoYW5kbGVycyBhbmQgdGhlIHJlc2V0 IGNvZGUgKHRvIGNvbXBsZXRlCi0JICogbG9zdCBwYWdlZmxpcHMpIHNvIG5lZWRzIHRoZSBmdWxs IGlycXNhdmUgc3BpbmxvY2tzLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50 X2xvY2ssIGZsYWdzKTsKLQl3b3JrID0gY3J0Yy0+ZmxpcF93b3JrOwotCi0JaWYgKHdvcmsgIT0g TlVMTCAmJgotCSAgICBpc19tbWlvX3dvcmsod29yaykgJiYKLQkgICAgcGFnZWZsaXBfZmluaXNo ZWQoY3J0Yywgd29yaykpCi0JCXBhZ2VfZmxpcF9jb21wbGV0ZWQoY3J0Yyk7Ci0KLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGlu bGluZSB2b2lkIGludGVsX21hcmtfcGFnZV9mbGlwX2FjdGl2ZShzdHJ1Y3QgaW50ZWxfY3J0YyAq Y3J0YywKIAkJCQkJICAgICAgIHN0cnVjdCBpbnRlbF9mbGlwX3dvcmsgKndvcmspCiB7CkBAIC0x MDI4MCw3MiArMTAxMzEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfbWFya19wYWdlX2Zs aXBfYWN0aXZlKHN0cnVjdCBpbnRlbF9jcnRjICpjcnRjLAogCWF0b21pY19zZXQoJndvcmstPnBl bmRpbmcsIDEpOwogfQogCi1zdGF0aWMgYm9vbCBfX3BhZ2VmbGlwX3N0YWxsX2NoZWNrX2NzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxf Y3J0YyAqaW50ZWxfY3J0YywKLQkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfZmxpcF93b3JrICp3b3Jr KQotewotCXUzMiBhZGRyLCB2Ymxhbms7Ci0KLQlpZiAoIWF0b21pY19yZWFkKCZ3b3JrLT5wZW5k aW5nKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0Jc21wX3JtYigpOwotCi0JdmJsYW5rID0gaW50ZWxf Y3J0Y19nZXRfdmJsYW5rX2NvdW50ZXIoaW50ZWxfY3J0Yyk7Ci0JaWYgKHdvcmstPmZsaXBfcmVh ZHlfdmJsYW5rID09IDApIHsKLQkJaWYgKHdvcmstPmZsaXBfcXVldWVkX3JlcSAmJgotCQkgICAg IWk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHdvcmstPmZsaXBfcXVldWVkX3JlcSkpCi0JCQly ZXR1cm4gZmFsc2U7Ci0KLQkJd29yay0+ZmxpcF9yZWFkeV92YmxhbmsgPSB2Ymxhbms7Ci0JfQot Ci0JaWYgKHZibGFuayAtIHdvcmstPmZsaXBfcmVhZHlfdmJsYW5rIDwgMykKLQkJcmV0dXJuIGZh bHNlOwotCi0JLyogUG90ZW50aWFsIHN0YWxsIC0gaWYgd2Ugc2VlIHRoYXQgdGhlIGZsaXAgaGFz IGhhcHBlbmVkLAotCSAqIGFzc3VtZSBhIG1pc3NlZCBpbnRlcnJ1cHQuICovCi0JaWYgKElOVEVM X0dFTihkZXZfcHJpdikgPj0gNCkKLQkJYWRkciA9IEk5MTVfSElfRElTUEJBU0UoSTkxNV9SRUFE KERTUFNVUkYoaW50ZWxfY3J0Yy0+cGxhbmUpKSk7Ci0JZWxzZQotCQlhZGRyID0gSTkxNV9SRUFE KERTUEFERFIoaW50ZWxfY3J0Yy0+cGxhbmUpKTsKLQotCS8qIFRoZXJlIGlzIGEgcG90ZW50aWFs IGlzc3VlIGhlcmUgd2l0aCBhIGZhbHNlIHBvc2l0aXZlIGFmdGVyIGEgZmxpcAotCSAqIHRvIHRo ZSBzYW1lIGFkZHJlc3MuIFdlIGNvdWxkIGFkZHJlc3MgdGhpcyBieSBjaGVja2luZyBmb3IgYQot CSAqIG5vbi1pbmNyZW1lbnRpbmcgZnJhbWUgY291bnRlci4KLQkgKi8KLQlyZXR1cm4gYWRkciA9 PSB3b3JrLT5ndHRfb2Zmc2V0OwotfQotCi12b2lkIGludGVsX2NoZWNrX3BhZ2VfZmxpcChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBwaXBlKQotewotCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsKLQlzdHJ1Y3QgaW50ZWxfY3J0YyAqY3J0YyA9 IGludGVsX2dldF9jcnRjX2Zvcl9waXBlKGRldl9wcml2LCBwaXBlKTsKLQlzdHJ1Y3QgaW50ZWxf ZmxpcF93b3JrICp3b3JrOwotCi0JV0FSTl9PTighaW5faW50ZXJydXB0KCkpOwotCi0JaWYgKGNy dGMgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrKCZkZXYtPmV2ZW50X2xvY2spOwot CXdvcmsgPSBjcnRjLT5mbGlwX3dvcms7Ci0KLQlpZiAod29yayAhPSBOVUxMICYmICFpc19tbWlv X3dvcmsod29yaykgJiYKLQkgICAgX19wYWdlZmxpcF9zdGFsbF9jaGVja19jcyhkZXZfcHJpdiwg Y3J0Yywgd29yaykpIHsKLQkJV0FSTl9PTkNFKDEsCi0JCQkgICJLaWNraW5nIHN0dWNrIHBhZ2Ug ZmxpcDogcXVldWVkIGF0ICVkLCBub3cgJWRcbiIsCi0JCQl3b3JrLT5mbGlwX3F1ZXVlZF92Ymxh bmssIGludGVsX2NydGNfZ2V0X3ZibGFua19jb3VudGVyKGNydGMpKTsKLQkJcGFnZV9mbGlwX2Nv bXBsZXRlZChjcnRjKTsKLQkJd29yayA9IE5VTEw7Ci0JfQotCi0JaWYgKHdvcmsgIT0gTlVMTCAm JiAhaXNfbW1pb193b3JrKHdvcmspICYmCi0JICAgIGludGVsX2NydGNfZ2V0X3ZibGFua19jb3Vu dGVyKGNydGMpIC0gd29yay0+ZmxpcF9xdWV1ZWRfdmJsYW5rID4gMSkKLQkJaW50ZWxfcXVldWVf cnBzX2Jvb3N0X2Zvcl9yZXF1ZXN0KHdvcmstPmZsaXBfcXVldWVkX3JlcSk7Ci0Jc3Bpbl91bmxv Y2soJmRldi0+ZXZlbnRfbG9jayk7Ci19Ci0KIC8qKgogICogaW50ZWxfd21fbmVlZF91cGRhdGUg LSBDaGVjayB3aGV0aGVyIHdhdGVybWFya3MgbmVlZCB1cGRhdGluZwogICogQHBsYW5lOiBkcm0g cGxhbmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmgKaW5kZXggYTg4MzRkYWY1YzA3Li4wNGY4MGIw MTNkYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xNDA4LDkgKzE0MDgsNiBAQCB2 b2lkIGludGVsX3VucGluX2ZiX3ZtYShzdHJ1Y3QgaTkxNV92bWEgKnZtYSk7CiBzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICoKIGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAogCQkJIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7 Ci12b2lkIGludGVsX2ZpbmlzaF9wYWdlX2ZsaXBfY3Moc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LCBpbnQgcGlwZSk7Ci12b2lkIGludGVsX2ZpbmlzaF9wYWdlX2ZsaXBfbW1pbyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBwaXBlKTsKLXZvaWQgaW50ZWxf Y2hlY2tfcGFnZV9mbGlwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgaW50IHBp cGUpOwogaW50IGludGVsX3ByZXBhcmVfcGxhbmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpOwogdm9pZCBpbnRlbF9j bGVhbnVwX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAotLSAKMi4xMy4yCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK