From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC 2/3] drm: Add panic handling Date: Tue, 9 Aug 2016 19:45:41 +0200 Message-ID: <1470764742-20323-3-git-send-email-noralf@tronnes.org> References: <1470764742-20323-1-git-send-email-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id EA06B6E619 for ; Tue, 9 Aug 2016 17:45:59 +0000 (UTC) In-Reply-To: <1470764742-20323-1-git-send-email-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 List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIHN1cHBvcnQgZm9yIG91dHB1dHRpbmcga2VybmVsIG1lc3NhZ2VzIG9uIHBhbmlj KCkuClRoZSBkcml2ZXJzIHRoYXQgc3VwcG9ydHMgaXQsIHByb3ZpZGVzIGEgZnJhbWVidWZmZXIg dGhhdCB0aGUKbWVzc2FnZXMgY2FuIGJlIHJlbmRlcmVkIG9uLgoKU2lnbmVkLW9mZi1ieTogTm9y YWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL01h a2VmaWxlICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jICAgICAgfCAg IDMgKwogZHJpdmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oIHwgICA0ICsKIGRyaXZlcnMvZ3B1 L2RybS9kcm1fcGFuaWMuYyAgICB8IDYwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtUC5oICAgICAgICAgICAgIHwgIDIyICsrCiA1IGZp bGVzIGNoYW5nZWQsIDYzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGViYTMy YWQuLmZmMDRlNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAgZHJtLXkgICAgICAgOj0J ZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKIAkJZHJtX2luZm8ubyBkcm1fZGVi dWdmcy5vIGRybV9lbmNvZGVyX3NsYXZlLm8gXAogCQlkcm1fdHJhY2VfcG9pbnRzLm8gZHJtX2ds b2JhbC5vIGRybV9wcmltZS5vIFwKIAkJZHJtX3JlY3QubyBkcm1fdm1hX21hbmFnZXIubyBkcm1f ZmxpcF93b3JrLm8gXAotCQlkcm1fbW9kZXNldF9sb2NrLm8gZHJtX2F0b21pYy5vIGRybV9icmlk Z2UubworCQlkcm1fbW9kZXNldF9sb2NrLm8gZHJtX2F0b21pYy5vIGRybV9icmlkZ2UubyBkcm1f cGFuaWMubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogZHJtLSQoQ09O RklHX0RSTV9HRU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5j CmluZGV4IDNiMTQzNjYuLjQ1N2VlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f ZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtODYxLDYgKzg2MSw4IEBA IHN0YXRpYyBpbnQgX19pbml0IGRybV9jb3JlX2luaXQodm9pZCkKIAkJZ290byBlcnJfcDM7CiAJ fQogCisJZHJtX3BhbmljX2luaXQoKTsKKwogCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4l ZC4lZCAlc1xuIiwKIAkJIENPUkVfTkFNRSwgQ09SRV9NQUpPUiwgQ09SRV9NSU5PUiwgQ09SRV9Q QVRDSExFVkVMLCBDT1JFX0RBVEUpOwogCXJldHVybiAwOwpAQCAtODc2LDYgKzg3OCw3IEBAIGVy cl9wMToKIAogc3RhdGljIHZvaWQgX19leGl0IGRybV9jb3JlX2V4aXQodm9pZCkKIHsKKwlkcm1f cGFuaWNfZXhpdCgpOwogCWRlYnVnZnNfcmVtb3ZlKGRybV9kZWJ1Z2ZzX3Jvb3QpOwogCWRybV9z eXNmc19kZXN0cm95KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJu YWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW50ZXJuYWwuaAppbmRleCBiODZkYzliLi43NDYz ZDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ludGVybmFsLmgKKysrIGIvZHJp dmVycy9ncHUvZHJtL2RybV9pbnRlcm5hbC5oCkBAIC05MCw2ICs5MCwxMCBAQCBpbnQgZHJtX2dl bV9vcGVuX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiB2b2lkIGRy bV9nZW1fb3BlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdmF0ZSk7CiB2b2lkIGRybV9nZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdmF0ZSk7CiAKKy8qIGRybV9wYW5pYy5jICovCit2b2lk IGRybV9wYW5pY19pbml0KHZvaWQpOwordm9pZCBkcm1fcGFuaWNfZXhpdCh2b2lkKTsKKwogLyog ZHJtX2RlYnVnZnMuYyAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogaW50IGRybV9k ZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGFuaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f cGFuaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg1YzlkCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9wYW5pYy5jCkBAIC0wLDAgKzEsNjA2 IEBACisvKgorICogQ29weXJpZ2h0IDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mb250Lmg+CisjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCitzdHJ1Y3QgZHJtX3Bhbmlj X2ZiIHsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwl2b2lkICp2bWVtOworCWNvbnN0 IHN0cnVjdCBmb250X2Rlc2MgKmZvbnQ7CisJdW5zaWduZWQgaW50IGNvbHM7CisJdW5zaWduZWQg aW50IHJvd3M7CisJdW5zaWduZWQgaW50IHhwb3M7CisJdW5zaWduZWQgaW50IHlwb3M7Cit9Owor CisjZGVmaW5lIERSTV9QQU5JQ19NQVhfRkJTCTY0CitzdGF0aWMgc3RydWN0IGRybV9wYW5pY19m YiBkcm1fcGFuaWNfZmJzW0RSTV9QQU5JQ19NQVhfRkJTXTsKKworI2RlZmluZSBEUk1fUEFOSUNf TUFYX0tNU0dTCVNaXzRLCitzdGF0aWMgY2hhciAqZHJtX3BhbmljX2ttc2dzOworc3RhdGljIHNp emVfdCBkcm1fcGFuaWNfa21zZ3NfcG9zOworCitzdGF0aWMgYm9vbCBkcm1fcGFuaWNfYWN0aXZl OworCitzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKwor c3RhdGljIGlubGluZSB2b2lkIGRybV9wYW5pY19kcmF3X3BpeGVsKHU4ICpkc3QsIHUzMiBwaXhl bF9mb3JtYXQsIGJvb2wgdmFsKQoreworCXN3aXRjaCAocGl4ZWxfZm9ybWF0ICYgfkRSTV9GT1JN QVRfQklHX0VORElBTikgeworCisJY2FzZSBEUk1fRk9STUFUX0M4OgorCWNhc2UgRFJNX0ZPUk1B VF9SR0IzMzI6CisJY2FzZSBEUk1fRk9STUFUX0JHUjIzMzoKKwkJKmRzdCA9IHZhbCA/IDB4ZmYg OiAweDAwOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCNDQ0NDoKKwljYXNlIERS TV9GT1JNQVRfQVJHQjQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I0NDQ0OgorCWNhc2UgRFJN X0ZPUk1BVF9BQkdSNDQ0NDoKKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweDBmZmYgOiAweDAwMDAs ICh1MTYgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9SR0JYNDQ0NDoKKwlj YXNlIERSTV9GT1JNQVRfUkdCQTQ0NDQ6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg0NDQ0OgorCWNh c2UgRFJNX0ZPUk1BVF9CR1JBNDQ0NDoKKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweGZmZjAgOiAw eDAwMDAsICh1MTYgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1 NToKKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6CisJY2FzZSBEUk1fRk9STUFUX1hCR1IxNTU1 OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKKwkJcHV0X3VuYWxpZ25lZCh2YWwgPyAweDdm ZmYgOiAweDAwMDAsICh1MTYgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZPUk1BVF9S R0JYNTU1MToKKwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6CisJY2FzZSBEUk1fRk9STUFUX0JH Ulg1NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKKwkJcHV0X3VuYWxpZ25lZCh2YWwg PyAweGZmZmUgOiAweDAwMDAsICh1MTYgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJNX0ZP Uk1BVF9SR0I1NjU6CisJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKKwkJcHV0X3VuYWxpZ25lZCh2 YWwgPyAweGZmZmYgOiAweDAwMDAsICh1MTYgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJN X0ZPUk1BVF9SR0I4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKKwkJZHN0WzBdID0gdmFs ID8gMHhmZiA6IDB4MDA7CisJCWRzdFsxXSA9IHZhbCA/IDB4ZmYgOiAweDAwOworCQlkc3RbMl0g PSB2YWwgPyAweGZmIDogMHgwMDsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4 ODg6CisJY2FzZSBEUk1fRk9STUFUX0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJCXB1dF91bmFsaWduZWQodmFsID8gMHgw MGZmZmZmZiA6IDB4MDAwMDAwMDAsICh1MzIgKilkc3QpOworCQlicmVhazsKKworCWNhc2UgRFJN X0ZPUk1BVF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1f Rk9STUFUX0JHUlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcHV0X3VuYWxp Z25lZCh2YWwgPyAweGZmZmZmZjAwIDogMHgwMDAwMDAwMCwgKHUzMiAqKWRzdCk7CisJCWJyZWFr OworCisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgorCWNhc2UgRFJNX0ZPUk1BVF9BUkdC MjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfWEJHUjIxMDEwMTA6CisJY2FzZSBEUk1fRk9STUFU X0FCR1IyMTAxMDEwOgorCQlwdXRfdW5hbGlnbmVkKHZhbCA/IDB4M2ZmZmZmZmYgOiAweDAwMDAw MDAwLCAodTMyICopZHN0KTsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9GT1JNQVRfUkdCWDEwMTAx MDI6CisJY2FzZSBEUk1fRk9STUFUX1JHQkExMDEwMTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JY MTAxMDEwMjoKKwljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAxMDI6CisJCXB1dF91bmFsaWduZWQo dmFsID8gMHhmZmZmZmZmYyA6IDB4MDAwMDAwMDAsICh1MzIgKilkc3QpOworCQlicmVhazsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkIGRybV9wYW5pY19yZW5kZXIoc3RydWN0IGRybV9wYW5pY19mYiAq cGZiLAorCQkJICAgICBjb25zdCBjaGFyICp0ZXh0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWNv bnN0IHN0cnVjdCBmb250X2Rlc2MgKmZvbnQgPSBwZmItPmZvbnQ7CisJdW5zaWduZWQgaW50IHBp eF9kZXB0aCwgcGl4X2JwcCwgY3BwOworCXVuc2lnbmVkIGludCBjb2wgPSBwZmItPnhwb3M7CisJ dW5zaWduZWQgaW50IHJvdyA9IHBmYi0+eXBvczsKKwl1bnNpZ25lZCBpbnQgaSwgaCwgdzsKKwl2 b2lkICpkc3QsICpwb3M7CisJdTggZm9udGxpbmU7CisKKwlpZiAoKHJvdyArIDEpICogZm9udC0+ aGVpZ2h0ID4gcGZiLT5mYi0+aGVpZ2h0KQorCQlyZXR1cm47CisKKwlpZiAoKGNvbCArIGxlbikg KiBmb250LT53aWR0aCA+IHBmYi0+ZmItPndpZHRoKQorCQlyZXR1cm47CisKKwlkcm1fZmJfZ2V0 X2JwcF9kZXB0aChwZmItPmZiLT5waXhlbF9mb3JtYXQsICZwaXhfZGVwdGgsICZwaXhfYnBwKTsK KwljcHAgPSBESVZfUk9VTkRfVVAocGl4X2JwcCwgOCk7CisKKwkvKiBUT0RPOiBzaG91bGQgZmIt Pm9mZnNldHNbMF0gYmUgYWRkZWQgaGVyZT8gKi8KKwlkc3QgPSBwZmItPnZtZW0gKyAocm93ICog Zm9udC0+aGVpZ2h0ICogcGZiLT5mYi0+cGl0Y2hlc1swXSkgKworCSAgICAgIChjb2wgKiBmb250 LT53aWR0aCAqIGNwcCk7CisKKwlmb3IgKGggPSAwOyBoIDwgZm9udC0+aGVpZ2h0OyBoKyspIHsK KwkJcG9zID0gZHN0OworCisJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQkJZm9udGxp bmUgPSAqKHU4ICopKGZvbnQtPmRhdGEgKyB0ZXh0W2ldICogZm9udC0+aGVpZ2h0ICsgaCk7CisK KwkJCWZvciAodyA9IDA7IHcgPCBmb250LT53aWR0aDsgdysrKSB7CisJCQkJZHJtX3BhbmljX2Ry YXdfcGl4ZWwocG9zLCBwZmItPmZiLT5waXhlbF9mb3JtYXQsCisJCQkJCQkgICAgIGZvbnRsaW5l ICYgQklUKDcgLSB3KSk7CisJCQkJcG9zICs9IGNwcDsKKwkJCX0KKwkJfQorCisJCWRzdCArPSBw ZmItPmZiLT5waXRjaGVzWzBdOworCX0KK30KKworc3RhdGljIHZvaWQgZHJtX3BhbmljX3Njcm9s bF91cChzdHJ1Y3QgZHJtX3BhbmljX2ZiICpwZmIpCit7CisJdm9pZCAqc3JjID0gcGZiLT52bWVt ICsgKHBmYi0+Zm9udC0+aGVpZ2h0ICogcGZiLT5mYi0+cGl0Y2hlc1swXSk7CisJc2l6ZV90IGxl biA9IChwZmItPmZiLT5oZWlnaHQgLSBwZmItPmZvbnQtPmhlaWdodCkgKgorCQkgICAgIHBmYi0+ ZmItPnBpdGNoZXNbMF07CisKKwlkcm1fcGFuaWNfbG9nKCIlc1xuIiwgX19mdW5jX18pOworCisJ bWVtbW92ZShwZmItPnZtZW0sIHNyYywgbGVuKTsKKwltZW1zZXQocGZiLT52bWVtICsgbGVuLCAw LCBwZmItPmZvbnQtPmhlaWdodCAqIHBmYi0+ZmItPnBpdGNoZXNbMF0pOworfQorCitzdGF0aWMg dm9pZCBkcm1fcGFuaWNfY2xlYXJfc2NyZWVuKHN0cnVjdCBkcm1fcGFuaWNfZmIgKnBmYikKK3sK KwltZW1zZXQocGZiLT52bWVtLCAwLCBwZmItPmZiLT5oZWlnaHQgKiBwZmItPmZiLT5waXRjaGVz WzBdKTsKK30KKworc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZ19tc2coY2hhciAqcHJlLCBjb25z dCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBsZW4pCit7CisJY2hhciBidWZbNTEyXTsKKworCWlm IChsZW4gPiA1MTApCisJCWxlbiA9IDUxMDsKKworCW1lbWNweShidWYsIHN0ciwgbGVuKTsKKwli dWZbbGVuXSA9ICdcbic7CisJYnVmW2xlbiArIDFdID0gJ1wwJzsKKworCWRybV9wYW5pY19sb2co IiVzJXMiLCBwcmUsIGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9wYW5pY19wdXRjc19ub19s ZihzdHJ1Y3QgZHJtX3BhbmljX2ZiICpwZmIsCisJCQkJICBjb25zdCBjaGFyICpzdHIsIHVuc2ln bmVkIGludCBsZW4pCit7CisJZHJtX3BhbmljX2xvZygiJXMobGVuPSV1KSB4PSV1LCB5PSV1XG4i LCBfX2Z1bmNfXywgbGVuLAorCQkJcGZiLT54cG9zLCBwZmItPnlwb3MpOworCisJaWYgKGxlbiA8 PSAwKQorCQlyZXR1cm47CisKKwlkcm1fcGFuaWNfbG9nX21zZygiIiwgc3RyLCBsZW4pOworCisJ ZHJtX3BhbmljX3JlbmRlcihwZmIsIHN0ciwgbGVuKTsKKworfQorCitzdGF0aWMgdm9pZCBkcm1f cGFuaWNfcHV0Y3Moc3RydWN0IGRybV9wYW5pY19mYiAqcGZiLAorCQkJICAgIGNvbnN0IGNoYXIg KnN0ciwgdW5zaWduZWQgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBpbnQgc2xlbjsKKwlpbnQgbGVu ID0gbnVtOworCWNoYXIgKmxmOworCisJZHJtX3BhbmljX2xvZygiJXMobnVtPSV1KVxuIiwgX19m dW5jX18sIG51bSk7CisKKwl3aGlsZSAobGVuID4gMCkgeworCisJCWlmIChwZmItPnlwb3MgPT0g cGZiLT5yb3dzKSB7CisJCQlwZmItPnlwb3MtLTsKKwkJCWRybV9wYW5pY19zY3JvbGxfdXAocGZi KTsKKwkJfQorCisJCWxmID0gc3RycGJyayhzdHIsICJcbiIpOworCQlpZiAobGYpCisJCQlzbGVu ID0gbGYgLSBzdHI7CisJCWVsc2UKKwkJCXNsZW4gPSBsZW47CisKKwkJaWYgKHBmYi0+eHBvcyAr IHNsZW4gPiBwZmItPmNvbHMpCisJCQlzbGVuID0gcGZiLT5jb2xzIC0gcGZiLT54cG9zOworCisJ CWRybV9wYW5pY19wdXRjc19ub19sZihwZmIsIHN0ciwgc2xlbik7CisKKwkJbGVuIC09IHNsZW47 CisJCXN0ciArPSBzbGVuOworCQlwZmItPnhwb3MgKz0gc2xlbjsKKworCQlpZiAobGYpIHsKKwkJ CXN0cisrOworCQkJbGVuLS07CisJCQlwZmItPnhwb3MgPSAwOworCQkJcGZiLT55cG9zKys7CisJ CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRybV9wYW5pY193cml0ZShjb25zdCBjaGFyICpzdHIs IHVuc2lnbmVkIGludCBudW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIW51bSkKKwkJ cmV0dXJuOworCisJZHJtX3BhbmljX2xvZygiJXMobnVtPSV1KVxuIiwgX19mdW5jX18sIG51bSk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgRFJNX1BBTklDX01BWF9GQlM7IGkrKykgeworCQlpZiAoIWRy bV9wYW5pY19mYnNbaV0uZmIpCisJCQlicmVhazsKKwkJZHJtX3BhbmljX3B1dGNzKCZkcm1fcGFu aWNfZmJzW2ldLCBzdHIsIG51bSk7CisJfQorfQorCisvKiB0aGlzIG9uZSBpcyBzZXJpYWxpemVk IGJ5IGNvbnNvbGVfbG9jaygpICovCitzdGF0aWMgdm9pZCBkcm1fcGFuaWNfY29uc29sZV93cml0 ZShzdHJ1Y3QgY29uc29sZSAqY29uLAorCQkJCSAgICBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVk IGludCBudW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlkcm1fcGFuaWNfbG9nX21zZygiLT4i LCBzdHIsIG51bSk7CisKKwkvKiBCdWZmZXIgdXAgbWVzc2FnZXMgdG8gYmUgcmVwbGF5ZWQgb24g cGFuaWMgKi8KKwlpZiAoIWRybV9wYW5pY19hY3RpdmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51 bTsgaSsrKSB7CisJCQlkcm1fcGFuaWNfa21zZ3NbZHJtX3BhbmljX2ttc2dzX3BvcysrXSA9ICpz dHIrKzsKKwkJCWlmIChkcm1fcGFuaWNfa21zZ3NfcG9zID09IERSTV9QQU5JQ19NQVhfS01TR1Mp CisJCQkJZHJtX3BhbmljX2ttc2dzX3BvcyA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWRy bV9wYW5pY193cml0ZShzdHIsIG51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBkcm1f cGFuaWNfY29uc29sZSA9IHsKKwkubmFtZSA9ICAgICAgICAgImRybXBhbmljIiwKKwkud3JpdGUg PSAgICAgICAgZHJtX3BhbmljX2NvbnNvbGVfd3JpdGUsCisJLmZsYWdzID0gICAgICAgIENPTl9Q UklOVEJVRkZFUiB8IENPTl9FTkFCTEVELAorCS5pbmRleCA9ICAgICAgICAwLAorfTsKKworLyoK KyAqIFRoZSBwYW5pYygpIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBvbmx5IG9uZSBDUFUgaXMg YWxsb3dlZCB0byBydW4gaXQncworICogY29kZS4gU28gd2hlbiB0aGlzIGhhbmRsZXIgaXMgY2Fs bGVkLCB3ZSdyZSBhbG9uZS4gTm8gcmFjaW5nIHdpdGgKKyAqIGNvbnNvbGUud3JpdGUoKSBpcyBw b3NzaWJsZS4KKyAqLworc3RhdGljIGludCBkcm1fcGFuaWNfaGFuZGxlcihzdHJ1Y3Qgbm90aWZp ZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXYsCisJCQkgICAgIHZvaWQgKnB0cikKK3sK Kwljb25zdCBzdHJ1Y3QgZm9udF9kZXNjICpmb250OworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg KmZiOworCXN0cnVjdCBkcm1fcGFuaWNfZmIgKnBmYjsKKwlzdHJ1Y3QgZHJtX21pbm9yICptaW5v cjsKKwl1bnNpZ25lZCBpbnQgZmJzID0gMDsKKwl2b2lkICp2bWVtOworCWludCBpOworCisJZHJt X3BhbmljX2xvZygiJXNcbiIsIF9fZnVuY19fKTsKKworCWRybV9wYW5pY19hY3RpdmUgPSB0cnVl OworCisJZHJtX21pbm9yX2Zvcl9lYWNoKG1pbm9yLCBEUk1fTUlOT1JfTEVHQUNZLCBpKSB7CisJ CWRybV9wYW5pY19sb2coIkZvdW5kIG1pbm9yPSVkXG4iLCBtaW5vci0+aW5kZXgpOworCQlpZiAo IW1pbm9yLT5kZXYgfHwgIW1pbm9yLT5kZXYtPmRyaXZlciB8fAorCQkgICAgIW1pbm9yLT5kZXYt PmRyaXZlci0+cGFuaWMpIHsKKwkJCWRybV9wYW5pY19sb2coIlNraXBwaW5nOiBObyBwYW5pYyBo YW5kbGVyXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmIgPSBtaW5vci0+ZGV2LT5kcml2 ZXItPnBhbmljKG1pbm9yLT5kZXYsICZ2bWVtKTsKKwkJaWYgKCFmYikgeworCQkJZHJtX3Bhbmlj X2xvZygiU2tpcHBpbmc6IERyaXZlciByZXR1cm5lZCBOVUxMXG4iKTsKKwkJCWNvbnRpbnVlOwor CQl9CisKKwkJaWYgKCFmYiB8fCAhdm1lbSB8fCBmYi0+ZGV2ICE9IG1pbm9yLT5kZXYgfHwgIWZi LT5waXRjaGVzWzBdKSB7CisJCQlkcm1fcGFuaWNfbG9nKCJTa2lwcGluZzogRmFpbGVkIGNoZWNr XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogb25seSA4LWJpdCB3aWRlIGZvbnRzIGFy ZSBzdXBwb3J0ZWQgKi8KKwkJZm9udCA9IGdldF9kZWZhdWx0X2ZvbnQoZmItPndpZHRoLCBmYi0+ aGVpZ2h0LCBCSVQoNyksIC0xKTsKKwkJaWYgKCFmb250KSB7CisJCQlkcm1fcGFuaWNfbG9nKCJT a2lwcGluZzogTm8gZm9udCBhdmFpbGFibGVcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlw ZmIgPSAmZHJtX3BhbmljX2Zic1tmYnMrK107CisKKwkJcGZiLT5mYiA9IGZiOworCQlwZmItPnZt ZW0gPSB2bWVtOworCQlwZmItPmZvbnQgPSBmb250OworCQlwZmItPmNvbHMgPSBmYi0+d2lkdGgg LyBmb250LT53aWR0aDsKKwkJcGZiLT5yb3dzID0gZmItPmhlaWdodCAvIGZvbnQtPmhlaWdodDsK KworCQlkcm1fcGFuaWNfY2xlYXJfc2NyZWVuKHBmYik7CisKKwkJZHJtX3BhbmljX2xvZygiICAg ICV1eCV1IC0+ICV1eCV1LCAlcywgJXNcbiIsIGZiLT53aWR0aCwKKwkJCQlmYi0+aGVpZ2h0LCBw ZmItPmNvbHMsIHBmYi0+cm93cywgZm9udC0+bmFtZSwKKwkJCQlkcm1fZ2V0X2Zvcm1hdF9uYW1l KGZiLT5waXhlbF9mb3JtYXQpKTsKKwl9CisKKwlpZiAoZHJtX3BhbmljX2ttc2dzWzBdKSB7CisJ CS8qIHNhZmVndWFyZCBpbiBjYXNlIHdlIGludGVycnVwdGVkIGRybV9wYW5pY19jb25zb2xlX3dy aXRlICovCisJCWlmIChkcm1fcGFuaWNfa21zZ3NfcG9zID49IERSTV9QQU5JQ19NQVhfS01TR1Mp CisJCQlkcm1fcGFuaWNfa21zZ3NfcG9zID0gMDsKKworCQlkcm1fcGFuaWNfd3JpdGUoJmRybV9w YW5pY19rbXNnc1tkcm1fcGFuaWNfa21zZ3NfcG9zXSwKKwkJCQlEUk1fUEFOSUNfTUFYX0tNU0dT IC0gZHJtX3BhbmljX2ttc2dzX3Bvcyk7CisJCWRybV9wYW5pY193cml0ZShkcm1fcGFuaWNfa21z Z3MsIGRybV9wYW5pY19rbXNnc19wb3MpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30K Kworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkcm1fcGFuaWNfYmxvY2sgPSB7CisJLm5v dGlmaWVyX2NhbGwgPSBkcm1fcGFuaWNfaGFuZGxlciwKK307CisKKworCisjaWZkZWYgQ09ORklH X0RFQlVHX0ZTCisKKy8qIE91dCBvZiBiYW5kIGxvZ2dpbmcgaXMgdXNlZnVsIGF0IGxlYXN0IGlu IHRoZSBpbml0aWFsIGRldmVsb3BtZW50IHBoYXNlICovCisjZGVmaW5lIERSTV9QQU5JQ19MT0df U0laRQlTWl82NEsKKyNkZWZpbmUgRFJNX1BBTklDX0xPR19MSU5FCTEyOAorI2RlZmluZSBEUk1f UEFOSUNfTE9HX0VOVFJJRVMJKERSTV9QQU5JQ19MT0dfU0laRSAvIERSTV9QQU5JQ19MT0dfTElO RSkKKworc3RhdGljIGNoYXIgKmxvZ19idWY7CitzdGF0aWMgc2l6ZV90IGxvZ19wb3M7CitzdGF0 aWMgc3RydWN0IGRlbnRyeSAqZHJtX3BhbmljX2xvZ2ZzX3Jvb3Q7CisKK3N0YXRpYyB2b2lkIGRy bV9wYW5pY19sb2coY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXUz MiByZW1fbnNlYzsKKwljaGFyICp0ZXh0OworCXNpemVfdCBsZW47CisJdTY0IHNlYzsKKworCWlm ICghbG9nX2J1ZiB8fCBvb3BzX2luX3Byb2dyZXNzKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChh cmdzLCBmbXQpOworCisJaWYgKGxvZ19wb3MgPj0gRFJNX1BBTklDX0xPR19FTlRSSUVTKQorCQls b2dfcG9zID0gMDsKKworCXRleHQgPSBsb2dfYnVmICsgKGxvZ19wb3MrKyAqIERSTV9QQU5JQ19M T0dfTElORSk7CisJaWYgKGxvZ19wb3MgPT0gRFJNX1BBTklDX0xPR19FTlRSSUVTKQorCQlsb2df cG9zID0gMDsKKworCXNlYyA9IGRpdl91NjRfcmVtKGxvY2FsX2Nsb2NrKCksIDEwMDAwMDAwMDAs ICZyZW1fbnNlYyk7CisKKwlsZW4gPSBzY25wcmludGYodGV4dCwgRFJNX1BBTklDX0xPR19MSU5F LCAiWyU1bGx1LiUwNnVdICIsIHNlYywKKwkJCXJlbV9uc2VjIC8gMTAwMCk7CisKKwl2c2NucHJp bnRmKHRleHQgKyBsZW4sIERSTV9QQU5JQ19MT0dfTElORSAtIGxlbiwgZm10LCBhcmdzKTsKKwor CS8qIE1ha2Ugc3VyZSB0byBhbHdheXMgaGF2ZSBhIG5ld2xpbmUgaW4gY2FzZSBvZiBvdmVyZmxv dyAqLworCWlmICh0ZXh0W0RSTV9QQU5JQ19MT0dfTElORSAtIDJdICE9ICdcMCcpCisJCXRleHRb RFJNX1BBTklDX0xPR19MSU5FIC0gMl0gPSAnXG4nOworCisJdmFfZW5kKGFyZ3MpOworfQorCitz dGF0aWMgaW50IGRybV9wYW5pY19sb2dfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYp Cit7CisJc2l6ZV90IHBvcyA9IGxvZ19wb3M7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciAqdGV4 dDsKKworCWZvciAoaSA9IDA7IGkgPCBEUk1fUEFOSUNfTE9HX0VOVFJJRVM7IGkrKykgeworCQl0 ZXh0ID0gbG9nX2J1ZiArIChwb3MrKyAqIERSTV9QQU5JQ19MT0dfTElORSk7CisJCWlmIChwb3Mg PT0gRFJNX1BBTklDX0xPR19FTlRSSUVTKQorCQkJcG9zID0gMDsKKwkJaWYgKCp0ZXh0ID09ICdc MCcpCisJCQljb250aW51ZTsKKwkJc2VxX3B1dHMobSwgdGV4dCk7CisJfQorCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgZHJtX3BhbmljX2xvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkcm1fcGFu aWNfbG9nX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBkcm1fcGFuaWNfbG9nX29wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5v cGVuICAgID0gZHJtX3BhbmljX2xvZ19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxs c2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKy8q CisgKiBGYWtlL3NpbXVsYXRlIHBhbmljKCkgYXQgZGlmZmVyZW50IGxldmVsczoKKyAqIDE6IG9u bHkgdHJpZ2dlciBwYW5pYyBoYW5kbGluZyBpbnRlcm5hbGx5CisgKiAyOiBhZGQgbG9jYWxfaXJx X2Rpc2FibGUoKQorICogMzogYWRkIGJ1c3Rfc3BpbmxvY2tzKCk7CisgKiAxMDA6IGRvbid0IGZh a2UgaXQsIGRvIGNhbGwgcGFuaWMoKQorICovCitzdGF0aWMgaW50IGRybV90ZXh0X2Zha2VfcGFu aWModW5zaWduZWQgaW50IGxldmVsKQoreworI2lmbmRlZiBNT0RVTEUKKwlpbnQgb2xkX2xvZ2xl dmVsID0gY29uc29sZV9sb2dsZXZlbDsKKyNlbmRpZgorCisJaWYgKCFsZXZlbCAmJiBsZXZlbCAh PSAxMDAgJiYgbGV2ZWwgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsZXZlbCA9PSAx MDApCisJCXBhbmljKCJURVNUSU5HIik7CisKKwlpZiAobGV2ZWwgPiAxKQorCQlsb2NhbF9pcnFf ZGlzYWJsZSgpOworCisjaWZuZGVmIE1PRFVMRQorCWNvbnNvbGVfdmVyYm9zZSgpOworI2VuZGlm CisJaWYgKGxldmVsID4gMikKKwkJYnVzdF9zcGlubG9ja3MoMSk7CisKKwlwcl9lbWVyZygiS2Vy bmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IEZBS0lORz0ldSwgb29wc19pbl9wcm9ncmVzcz0lZFxu IiwKKwkJIGxldmVsLCBvb3BzX2luX3Byb2dyZXNzKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19C VUdWRVJCT1NFCisJZHVtcF9zdGFjaygpOworI2VuZGlmCisJLyogc2ltdWxhdGUgY2FsbGluZyBw YW5pY19ub3RpZmllcl9saXN0ICovCisJZHJtX3BhbmljX2hhbmRsZXIoTlVMTCwgMCwgTlVMTCk7 CisKKwlpZiAobGV2ZWwgPiAyKQorCQlidXN0X3NwaW5sb2NrcygwKTsKKworI2lmbmRlZiBNT0RV TEUKKwljb25zb2xlX2ZsdXNoX29uX3BhbmljKCk7CisjZW5kaWYKKwlwcl9lbWVyZygiLS0tWyBl bmQgS2VybmVsIHBhbmljIC0gbm90IHN5bmNpbmc6IEZBS0lOR1xuIik7CisKKwlpZiAobGV2ZWwg PiAxKQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyNpZm5kZWYgTU9EVUxFCisJY29uc29sZV9s b2dsZXZlbCA9IG9sZF9sb2dsZXZlbDsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBzc2l6ZV90IGRybV90ZXh0X3BhbmljX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAg ICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9m Zl90ICpwcG9zKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJc3NpemVfdCByZXQgPSAw OworCWNoYXIgYnVmWzI0XTsKKwlzaXplX3Qgc2l6ZTsKKworCXNpemUgPSBtaW4oc2l6ZW9mKGJ1 ZikgLSAxLCBjb3VudCk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIHNpemUp KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZltzaXplXSA9ICdcMCc7CisJcmV0ID0ga3N0cnRv dWxsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRy bV90ZXh0X2Zha2VfcGFuaWModmFsKTsKKworCXJldHVybiByZXQgPCAwID8gcmV0IDogY291bnQ7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRybV90ZXh0X3Bhbmlj X29wcyA9IHsKKwkud3JpdGUgPSAgICAgICAgZHJtX3RleHRfcGFuaWNfd3JpdGUsCisJLm9wZW4g PSAgICAgICAgIHNpbXBsZV9vcGVuLAorCS5sbHNlZWsgPSAgICAgICBkZWZhdWx0X2xsc2VlaywK K307CisKK3N0YXRpYyBpbnQgZHJtX3BhbmljX2xvZ2ZzX2luaXQodm9pZCkKK3sKKwlkcm1fcGFu aWNfbG9nZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHJtLXBhbmljIiwgTlVMTCk7CisJ aWYgKCFkcm1fcGFuaWNfbG9nZnNfcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWRl YnVnZnNfY3JlYXRlX2ZpbGUoImxvZyIsIFNfSVJVR08sIGRybV9wYW5pY19sb2dmc19yb290LCBO VUxMLAorCQkJICAgICZkcm1fcGFuaWNfbG9nX29wcykpCisJCWdvdG8gZXJyX3JlbW92ZTsKKwor CWxvZ19idWYgPSBremFsbG9jKERSTV9QQU5JQ19MT0dfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFsb2dfYnVmKQorCQlnb3RvIGVycl9yZW1vdmU7CisKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJw YW5pYyIsIFNfSVdVU1IsIGRybV9wYW5pY19sb2dmc19yb290LCBOVUxMLAorCQkJICAgICZkcm1f dGV4dF9wYW5pY19vcHMpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmU6CisJZGVidWdmc19y ZW1vdmVfcmVjdXJzaXZlKGRybV9wYW5pY19sb2dmc19yb290KTsKKworCXJldHVybiAtRU5PTUVN OworfQorCitzdGF0aWMgdm9pZCBkcm1fcGFuaWNfbG9nZnNfZXhpdCh2b2lkKQoreworCWRlYnVn ZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkcm1fcGFuaWNfbG9nZnNfcm9vdCk7CisJa2ZyZWUobG9nX2J1 Zik7CisJbG9nX2J1ZiA9IE5VTEw7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbnQgZHJtX3Bhbmlj X2xvZ2ZzX2luaXQodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZ2ZzX2V4 aXQodm9pZCkKK3sKK30KKworc3RhdGljIHZvaWQgZHJtX3BhbmljX2xvZyhjb25zdCBjaGFyICpm bXQsIC4uLikKK3sKK30KKworI2VuZGlmCisKKwordm9pZCBfX2luaXQgZHJtX3BhbmljX2luaXQo dm9pZCkKK3sKKwlkcm1fcGFuaWNfa21zZ3MgPSBremFsbG9jKERSTV9QQU5JQ19NQVhfS01TR1Ms IEdGUF9LRVJORUwpOworCWlmICghZHJtX3BhbmljX2ttc2dzKSB7CisJCURSTV9FUlJPUigiRmFp bGVkIHRvIHNldHVwIHBhbmljIGhhbmRsZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJZHJtX3Bh bmljX2xvZ2ZzX2luaXQoKTsKK2RybV9wYW5pY19sb2coIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmVn aXN0ZXJfY29uc29sZSgmZHJtX3BhbmljX2NvbnNvbGUpOworCWF0b21pY19ub3RpZmllcl9jaGFp bl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkgICAgICAgJmRybV9wYW5pY19i bG9jayk7Cit9CisKK3ZvaWQgX19leGl0IGRybV9wYW5pY19leGl0KHZvaWQpCit7CisJaWYgKCFk cm1fcGFuaWNfa21zZ3MpCisJCXJldHVybjsKKworCWRybV9wYW5pY19sb2dmc19leGl0KCk7CisJ YXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJ CQkJCSAmZHJtX3BhbmljX2Jsb2NrKTsKKwl1bnJlZ2lzdGVyX2NvbnNvbGUoJmRybV9wYW5pY19j b25zb2xlKTsKKwlrZnJlZShkcm1fcGFuaWNfa21zZ3MpOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGJjNzAwNmUuLjRlODQ2NTQg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgK QEAgLTU1MCw2ICs1NTAsMjggQEAgc3RydWN0IGRybV9kcml2ZXIgewogCQkJICBib29sIGZyb21f b3Blbik7CiAJdm9pZCAoKm1hc3Rlcl9kcm9wKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiAKKwkvKioKKwkgKiBAcGFuaWM6CisJICoKKwkgKiBU aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBwYW5pYygpIGFza2luZyBmb3IgYSBmcmFtZWJ1ZmZl ciB0bworCSAqIGRpc3BsYXkgdGhlIHBhbmljIG1lc3NhZ2VzIG9uLiBJdCBhbHNvIG5lZWRzIHRo ZSB2aXJ0dWFsIGFkZHJlc3MKKwkgKiBvZiB0aGUgYmFja2luZyBidWZmZXIuCisJICogVGhpcyBm dW5jdGlvbiBpcyBvcHRpb25hbC4KKwkgKgorCSAqIE5PVEU6CisJICoKKwkgKiBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCBpbiBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW4gYW5kIGl0IGNhbm5vdAor CSAqIHNsZWVwLiBDYXJlIG11c3QgYmUgdGFrZW4gc28gdGhlIG1hY2hpbmUgaXMgbm90IGtpbGxl ZCBldmVuIGhhcmRlciwKKwkgKiBwcmV2ZW50aW5nIG91dHB1dCBmcm9tIGdvaW5nIG91dCBvbiBz ZXJpYWwvbmV0Y29uc29sZS4KKwkgKgorCSAqIFJFVFVSTlM6CisJICoKKwkgKiBGcmFtZWJ1ZmZl ciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHBhbmljIG1lc3NhZ2VzLAorCSAq IGFsb25nc2lkZSB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBiYWNraW5nIGJ1ZmZlciwgb3Ig TlVMTCBpZgorCSAqIHRoZSBkcml2ZXIgaXMgdW5hYmxlIHRvIHByb3ZpZGUgdGhpcy4KKwkgKi8K KwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICooKnBhbmljKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICoqdm1lbSk7CisKIAlpbnQgKCpkZWJ1Z2ZzX2luaXQpKHN0cnVjdCBkcm1fbWlub3Ig Km1pbm9yKTsKIAl2b2lkICgqZGVidWdmc19jbGVhbnVwKShzdHJ1Y3QgZHJtX21pbm9yICptaW5v cik7CiAKLS0gCjIuOC4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK