From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v3 13/19] drm/mgag200: Convert mgag200 driver to |struct drm_gem_vram_object| Date: Mon, 29 Apr 2019 16:43:35 +0200 Message-ID: <20190429144341.12615-14-tzimmermann@suse.de> References: <20190429144341.12615-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id A049589258 for ; Mon, 29 Apr 2019 14:43:52 +0000 (UTC) In-Reply-To: <20190429144341.12615-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: daniel@ffwll.ch, airlied@linux.ie, kraxel@redhat.com, christian.koenig@amd.com, ray.huang@amd.com, Jerry.Zhang@amd.com, hdegoede@redhat.com, z.liuxinliang@hisilicon.com, zourongrong@gmail.com, kong.kongxinwei@hisilicon.com, puck.chen@hisilicon.com Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org List-Id: dri-devel@lists.freedesktop.org VGhlIGRhdGEgc3RydWN0dXJlIHxzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdHwgYW5kIGl0cyBo ZWxwZXJzIHJlcGxhY2UKfHN0cnVjdCBtZ2FnMjAwX2JvfC4gSXQncyB0aGUgc2FtZSBpbXBsZW1l bnRhdGlvbjsgZXhjZXB0IGZvciB0aGUgdHlwZQpuYW1lcy4KClNpZ25lZC1vZmYtYnk6IFRob21h cyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9t Z2FnMjAwL0tjb25maWcgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL21nYWcyMDAv bWdhZzIwMF9jdXJzb3IuYyB8ICA2MyArKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tZ2FnMjAw L21nYWcyMDBfZHJ2LmMgICAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcy MDBfZHJ2LmggICAgfCAgNjIgKystLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcy MDBfZmIuYyAgICAgfCAgMTggKy0tCiBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21h aW4uYyAgIHwgIDg0ICsrKy0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAw X21vZGUuYyAgIHwgIDQ1ICsrKy0tLQogZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF90 dG0uYyAgICB8IDE3MiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOCBmaWxlcyBjaGFuZ2VkLCAx MDIgaW5zZXJ0aW9ucygrKSwgMzQ3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tZ2FnMjAwL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9LY29uZmln CmluZGV4IGRiNTg1Nzg3MTlkMi4uNTJiN2MzZWUzMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWdhZzIwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL0tjb25m aWcKQEAgLTMsNiArMyw3IEBAIGNvbmZpZyBEUk1fTUdBRzIwMAogCWRlcGVuZHMgb24gRFJNICYm IFBDSSAmJiBNTVUKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRFJNX1RUTQorCXNl bGVjdCBEUk1fR0VNX1ZSQU1fSEVMUEVSCiAJaGVscAogCSBUaGlzIGlzIGEgS01TIGRyaXZlciBm b3IgdGhlIE1HQSBHMjAwIHNlcnZlciBjaGlwcywgaXQKICAgICAgICAgIGRvZXMgbm90IHN1cHBv cnQgdGhlIG9yaWdpbmFsIE1HQSBHMjAwIG9yIGFueSBvZiB0aGUgZGVza3RvcApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1 L2RybS9tZ2FnMjAwL21nYWcyMDBfY3Vyc29yLmMKaW5kZXggOTY4ZTIwMzc5ZDU0Li5jY2EzOTIy ZjlmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfY3Vyc29y LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9jdXJzb3IuYwpAQCAtMjMs OSArMjMsOSBAQCBzdGF0aWMgdm9pZCBtZ2FfaGlkZV9jdXJzb3Ioc3RydWN0IG1nYV9kZXZpY2Ug Km1kZXYpCiAJV1JFRzgoTUdBX0NVUlBPU1hMLCAwKTsKIAlXUkVHOChNR0FfQ1VSUE9TWEgsIDAp OwogCWlmIChtZGV2LT5jdXJzb3IucGl4ZWxzXzEtPnBpbl9jb3VudCkKLQkJbWdhZzIwMF9ib191 bnBpbihtZGV2LT5jdXJzb3IucGl4ZWxzXzEpOworCQlkcm1fZ2VtX3ZyYW1fdW5waW4obWRldi0+ Y3Vyc29yLnBpeGVsc18xKTsKIAlpZiAobWRldi0+Y3Vyc29yLnBpeGVsc18yLT5waW5fY291bnQp Ci0JCW1nYWcyMDBfYm9fdW5waW4obWRldi0+Y3Vyc29yLnBpeGVsc18yKTsKKwkJZHJtX2dlbV92 cmFtX3VucGluKG1kZXYtPmN1cnNvci5waXhlbHNfMik7CiB9CiAKIGludCBtZ2FfY3J0Y19jdXJz b3Jfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKQEAgLTM2LDEyICszNiwxMiBAQCBpbnQgbWdh X2NydGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiB7CiAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAlzdHJ1Y3QgbWdhX2RldmljZSAqbWRldiA9IChzdHJ1 Y3QgbWdhX2RldmljZSAqKWRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG1nYWcyMDBfYm8gKnBp eGVsc18xID0gbWRldi0+Y3Vyc29yLnBpeGVsc18xOwotCXN0cnVjdCBtZ2FnMjAwX2JvICpwaXhl bHNfMiA9IG1kZXYtPmN1cnNvci5waXhlbHNfMjsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqcGl4ZWxz X2N1cnJlbnQgPSBtZGV2LT5jdXJzb3IucGl4ZWxzX2N1cnJlbnQ7Ci0Jc3RydWN0IG1nYWcyMDBf Ym8gKnBpeGVsc19wcmV2ID0gbWRldi0+Y3Vyc29yLnBpeGVsc19wcmV2OworCXN0cnVjdCBkcm1f Z2VtX3ZyYW1fb2JqZWN0ICpwaXhlbHNfMSA9IG1kZXYtPmN1cnNvci5waXhlbHNfMTsKKwlzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqcGl4ZWxzXzIgPSBtZGV2LT5jdXJzb3IucGl4ZWxzXzI7 CisJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKnBpeGVsc19jdXJyZW50ID0gbWRldi0+Y3Vy c29yLnBpeGVsc19jdXJyZW50OworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpwaXhlbHNf cHJldiA9IG1kZXYtPmN1cnNvci5waXhlbHNfcHJldjsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iajsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqYm8gPSBOVUxMOworCXN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8gPSBOVUxMOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCBpLCBy b3csIGNvbDsKIAl1aW50MzJfdCBjb2xvdXJfc2V0WzE2XTsKQEAgLTUwLDcgKzUwLDcgQEAgaW50 IG1nYV9jcnRjX2N1cnNvcl9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCXVpbnQzMl90IHRo aXNfY29sb3VyOwogCWJvb2wgZm91bmQgPSBmYWxzZTsKIAlpbnQgY29sb3VyX2NvdW50ID0gMDsK LQl1NjQgZ3B1X2FkZHI7CisJczY0IGdwdV9hZGRyOwogCXU4IHJlZ19pbmRleDsKIAl1OCB0aGlz X3Jvd1s0OF07CiAKQEAgLTc5LDQ0ICs3OSw1NSBAQCBpbnQgbWdhX2NydGNfY3Vyc29yX3NldChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5PRU5UOwogCi0J cmV0ID0gbWdhZzIwMF9ib19yZXNlcnZlKHBpeGVsc18xLCB0cnVlKTsKKwlyZXQgPSBkcm1fZ2Vt X3ZyYW1fcmVzZXJ2ZShwaXhlbHNfMSwgdHJ1ZSk7CiAJaWYgKHJldCkgewogCQlXUkVHOChNR0Ff Q1VSUE9TWEwsIDApOwogCQlXUkVHOChNR0FfQ1VSUE9TWEgsIDApOwogCQlnb3RvIG91dF91bnJl ZjsKIAl9Ci0JcmV0ID0gbWdhZzIwMF9ib19yZXNlcnZlKHBpeGVsc18yLCB0cnVlKTsKKwlyZXQg PSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShwaXhlbHNfMiwgdHJ1ZSk7CiAJaWYgKHJldCkgewogCQlX UkVHOChNR0FfQ1VSUE9TWEwsIDApOwogCQlXUkVHOChNR0FfQ1VSUE9TWEgsIDApOwotCQltZ2Fn MjAwX2JvX3VucmVzZXJ2ZShwaXhlbHNfMSk7CisJCWRybV9nZW1fdnJhbV91bnJlc2VydmUocGl4 ZWxzXzEpOwogCQlnb3RvIG91dF91bnJlc2VydmUxOwogCX0KIAogCS8qIE1vdmUgY3Vyc29yIGJ1 ZmZlcnMgaW50byBWUkFNIGlmIHRoZXkgYXJlbid0IGFscmVhZHkgKi8KIAlpZiAoIXBpeGVsc18x LT5waW5fY291bnQpIHsKLQkJcmV0ID0gbWdhZzIwMF9ib19waW4ocGl4ZWxzXzEsIFRUTV9QTF9G TEFHX1ZSQU0sCi0JCQkJICAgICAmbWRldi0+Y3Vyc29yLnBpeGVsc18xX2dwdV9hZGRyKTsKKwkJ cmV0ID0gZHJtX2dlbV92cmFtX3BpbihwaXhlbHNfMSwgRFJNX0dFTV9WUkFNX1BMX0ZMQUdfVlJB TSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDE7CisJCWdwdV9hZGRyID0gZHJtX2dlbV92cmFt X29mZnNldChwaXhlbHNfMSk7CisJCWlmIChncHVfYWRkciA8IDApIHsKKwkJCWRybV9nZW1fdnJh bV91bnBpbihwaXhlbHNfMSk7CisJCQlnb3RvIG91dDE7CisJCX0KKwkJbWRldi0+Y3Vyc29yLnBp eGVsc18xX2dwdV9hZGRyID0gZ3B1X2FkZHI7CiAJfQogCWlmICghcGl4ZWxzXzItPnBpbl9jb3Vu dCkgewotCQlyZXQgPSBtZ2FnMjAwX2JvX3BpbihwaXhlbHNfMiwgVFRNX1BMX0ZMQUdfVlJBTSwK LQkJCQkgICAgICZtZGV2LT5jdXJzb3IucGl4ZWxzXzJfZ3B1X2FkZHIpOworCQlyZXQgPSBkcm1f Z2VtX3ZyYW1fcGluKHBpeGVsc18yLCBEUk1fR0VNX1ZSQU1fUExfRkxBR19WUkFNKTsKIAkJaWYg KHJldCkgewotCQkJbWdhZzIwMF9ib191bnBpbihwaXhlbHNfMSk7CisJCQlkcm1fZ2VtX3ZyYW1f dW5waW4ocGl4ZWxzXzEpOworCQkJZ290byBvdXQxOworCQl9CisJCWdwdV9hZGRyID0gZHJtX2dl bV92cmFtX29mZnNldChwaXhlbHNfMik7CisJCWlmIChncHVfYWRkciA8IDApIHsKKwkJCWRybV9n ZW1fdnJhbV91bnBpbihwaXhlbHNfMSk7CisJCQlkcm1fZ2VtX3ZyYW1fdW5waW4ocGl4ZWxzXzIp OwogCQkJZ290byBvdXQxOwogCQl9CisJCW1kZXYtPmN1cnNvci5waXhlbHNfMl9ncHVfYWRkciA9 IGdwdV9hZGRyOwogCX0KIAotCWJvID0gZ2VtX3RvX21nYV9ibyhvYmopOwotCXJldCA9IG1nYWcy MDBfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7CisJZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShvYmop OworCXJldCA9IGRybV9nZW1fdnJhbV9yZXNlcnZlKGdibywgdHJ1ZSk7CiAJaWYgKHJldCkgewog CQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZXNlcnZlIHVzZXIgYm9cbiIp OwogCQlnb3RvIG91dDE7CiAJfQotCWlmICghYm8tPmttYXAudmlydHVhbCkgewotCQlyZXQgPSB0 dG1fYm9fa21hcCgmYm8tPmJvLCAwLCBiby0+Ym8ubnVtX3BhZ2VzLCAmYm8tPmttYXApOworCWlm ICghZ2JvLT5rbWFwLnZpcnR1YWwpIHsKKwkJcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAs IGdiby0+Ym8ubnVtX3BhZ2VzLCAmZ2JvLT5rbWFwKTsKIAkJaWYgKHJldCkgewogCQkJZGV2X2Vy cigmZGV2LT5wZGV2LT5kZXYsICJmYWlsZWQgdG8ga21hcCB1c2VyIGJ1ZmZlciB1cGRhdGVzXG4i KTsKIAkJCWdvdG8gb3V0MjsKQEAgLTEyNiw3ICsxMzcsNyBAQCBpbnQgbWdhX2NydGNfY3Vyc29y X3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJbWVtc2V0KCZjb2xvdXJfc2V0WzBdLCAwLCBz aXplb2YodWludDMyX3QpKjE2KTsKIAkvKiB3aWR0aCpoZWlnaHQqNCA9IDE2Mzg0ICovCiAJZm9y IChpID0gMDsgaSA8IDE2Mzg0OyBpICs9IDQpIHsKLQkJdGhpc19jb2xvdXIgPSBpb3JlYWQzMihi by0+a21hcC52aXJ0dWFsICsgaSk7CisJCXRoaXNfY29sb3VyID0gaW9yZWFkMzIoZ2JvLT5rbWFw LnZpcnR1YWwgKyBpKTsKIAkJLyogTm8gdHJhbnNwYXJlbmN5ICovCiAJCWlmICh0aGlzX2NvbG91 cj4+MjQgIT0gMHhmZiAmJgogCQkJdGhpc19jb2xvdXI+PjI0ICE9IDB4MCkgewpAQCAtMTkyLDcg KzIwMyw3IEBAIGludCBtZ2FfY3J0Y19jdXJzb3Jfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK IAlmb3IgKHJvdyA9IDA7IHJvdyA8IDY0OyByb3crKykgewogCQltZW1zZXQoJnRoaXNfcm93WzBd LCAwLCA0OCk7CiAJCWZvciAoY29sID0gMDsgY29sIDwgNjQ7IGNvbCsrKSB7Ci0JCQl0aGlzX2Nv bG91ciA9IGlvcmVhZDMyKGJvLT5rbWFwLnZpcnR1YWwgKyA0Kihjb2wgKyA2NCpyb3cpKTsKKwkJ CXRoaXNfY29sb3VyID0gaW9yZWFkMzIoZ2JvLT5rbWFwLnZpcnR1YWwgKyA0Kihjb2wgKyA2NCpy b3cpKTsKIAkJCS8qIHdyaXRlIHRyYW5zcGFyZW50IHBpeGVscyAqLwogCQkJaWYgKHRoaXNfY29s b3VyPj4yNCA9PSAweDApIHsKIAkJCQl0aGlzX3Jvd1s0NyAtIGNvbC84XSB8PSAweDgwPj4oY29s JTgpOwpAQCAtMjM4LDE1ICsyNDksMTUgQEAgaW50IG1nYV9jcnRjX2N1cnNvcl9zZXQoc3RydWN0 IGRybV9jcnRjICpjcnRjLAogCiAJdHRtX2JvX2t1bm1hcCgmcGl4ZWxzX3ByZXYtPmttYXApOwog IG91dDM6Ci0JdHRtX2JvX2t1bm1hcCgmYm8tPmttYXApOworCXR0bV9ib19rdW5tYXAoJmdiby0+ a21hcCk7CiAgb3V0MjoKLQltZ2FnMjAwX2JvX3VucmVzZXJ2ZShibyk7CisJZHJtX2dlbV92cmFt X3VucmVzZXJ2ZShnYm8pOwogIG91dDE6CiAJaWYgKHJldCkKIAkJbWdhX2hpZGVfY3Vyc29yKG1k ZXYpOwotCW1nYWcyMDBfYm9fdW5yZXNlcnZlKHBpeGVsc18xKTsKKwlkcm1fZ2VtX3ZyYW1fdW5y ZXNlcnZlKHBpeGVsc18xKTsKIG91dF91bnJlc2VydmUxOgotCW1nYWcyMDBfYm9fdW5yZXNlcnZl KHBpeGVsc18yKTsKKwlkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKHBpeGVsc18yKTsKIG91dF91bnJl ZjoKIAlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2Fn MjAwL21nYWcyMDBfZHJ2LmMKaW5kZXggYWM2YWY0YmQ5ZGY2Li44NWMzZWQ3ZjAzODUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfZHJ2LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9kcnYuYwpAQCAtODAsOSArODAsOSBAQCBzdGF0aWMg c3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewogCS5taW5vciA9IERSSVZFUl9NSU5PUiwKIAku cGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExFVkVMLAogCi0JLmdlbV9mcmVlX29iamVjdF91bmxv Y2tlZCA9IG1nYWcyMDBfZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2Nr ZWQgPSBkcm1fZ2VtX3ZyYW1fZHJpdmVyX2dlbV9mcmVlX29iamVjdF91bmxvY2tlZCwKIAkuZHVt Yl9jcmVhdGUgPSBtZ2FnMjAwX2R1bWJfY3JlYXRlLAotCS5kdW1iX21hcF9vZmZzZXQgPSBtZ2Fn MjAwX2R1bWJfbW1hcF9vZmZzZXQsCisJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1fdnJhbV9k cml2ZXJfZHVtYl9tbWFwX29mZnNldCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBt Z2FnMjAwX3BjaV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIw MC9tZ2FnMjAwX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF9kcnYuaApp bmRleCA4YzMxZTQ0MjJjYWUuLjg2YjMzZTIzYWI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21nYWcyMDAvbWdhZzIwMF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9t Z2FnMjAwX2Rydi5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAyMDEwIE1hdHQg VHVybmVyLgotICogQ29weXJpZ2h0IDIwMTIgUmVkIEhhdCAKKyAqIENvcHlyaWdodCAyMDEyIFJl ZCBIYXQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRp dGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVk ZSA8ZHJtL3R0bS90dG1fbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMu aD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KQEAgLTE1OSwxMyArMTYwLDEzIEBA IHN0cnVjdCBtZ2FfY3Vyc29yIHsKIAkgICBJZiBlaXRoZXIgb2YgdGhlc2UgaXMgTlVMTCwgdGhl biBkb24ndCBkbyBoYXJkd2FyZSBjdXJzb3JzLCBhbmQKIAkgICBmYWxsIGJhY2sgdG8gc29mdHdh cmUuCiAJKi8KLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqcGl4ZWxzXzE7Ci0Jc3RydWN0IG1nYWcyMDBf Ym8gKnBpeGVsc18yOworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpwaXhlbHNfMTsKKwlz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqcGl4ZWxzXzI7CiAJdTY0IHBpeGVsc18xX2dwdV9h ZGRyLCBwaXhlbHNfMl9ncHVfYWRkcjsKIAkvKiBUaGUgY3VycmVudGx5IGRpc3BsYXllZCBpY29u LCB0aGlzIHBvaW50cyB0byBvbmUgb2YgcGl4ZWxzXzEsIG9yIHBpeGVsc18yICovCi0Jc3RydWN0 IG1nYWcyMDBfYm8gKnBpeGVsc19jdXJyZW50OworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpwaXhlbHNfY3VycmVudDsKIAkvKiBUaGUgcHJldmlvdXNseSBkaXNwbGF5ZWQgaWNvbiAqLwot CXN0cnVjdCBtZ2FnMjAwX2JvICpwaXhlbHNfcHJldjsKKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqcGl4ZWxzX3ByZXY7CiB9OwogCiBzdHJ1Y3QgbWdhX21jIHsKQEAgLTIxOSwyMyArMjIw LDYgQEAgc3RydWN0IG1nYV9kZXZpY2UgewogCXUzMiB1bmlxdWVfcmV2X2lkOwogfTsKIAotCi1z dHJ1Y3QgbWdhZzIwMF9ibyB7Ci0Jc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IGJvOwotCXN0cnVj dCB0dG1fcGxhY2VtZW50IHBsYWNlbWVudDsKLQlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIGttYXA7 Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0IGdlbTsKLQlzdHJ1Y3QgdHRtX3BsYWNlIHBsYWNlbWVu dHNbM107Ci0JaW50IHBpbl9jb3VudDsKLX07Ci0jZGVmaW5lIGdlbV90b19tZ2FfYm8oZ29iaikg Y29udGFpbmVyX29mKChnb2JqKSwgc3RydWN0IG1nYWcyMDBfYm8sIGdlbSkKLQotc3RhdGljIGlu bGluZSBzdHJ1Y3QgbWdhZzIwMF9ibyAqCi1tZ2FnMjAwX2JvKHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8pCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihibywgc3RydWN0IG1nYWcyMDBfYm8s IGJvKTsKLX0KLQogCQkJCS8qIG1nYWcyMDBfbW9kZS5jICovCiBpbnQgbWdhZzIwMF9tb2Rlc2V0 X2luaXQoc3RydWN0IG1nYV9kZXZpY2UgKm1kZXYpOwogdm9pZCBtZ2FnMjAwX21vZGVzZXRfZmlu aShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldik7CkBAIC0yNTksNDUgKzI0MywxNSBAQCBpbnQgbWdh ZzIwMF9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiBpbnQgbWdhZzIwMF9kdW1i X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAogCQkJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKTsKLXZvaWQgbWdhZzIwMF9n ZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotaW50Ci1tZ2FnMjAw X2R1bWJfbW1hcF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCi0JCQkgdWludDMyX3QgaGFuZGxlLAotCQkJIHVpbnQ2NF90ICpvZmZzZXQp OworCiAJCQkJLyogbWdhZzIwMF9pMmMuYyAqLwogc3RydWN0IG1nYV9pMmNfY2hhbiAqbWdhZzIw MF9pMmNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBtZ2FnMjAwX2kyY19k ZXN0cm95KHN0cnVjdCBtZ2FfaTJjX2NoYW4gKmkyYyk7CiAKLXZvaWQgbWdhZzIwMF90dG1fcGxh Y2VtZW50KHN0cnVjdCBtZ2FnMjAwX2JvICpibywgaW50IGRvbWFpbik7Ci0KLXN0YXRpYyBpbmxp bmUgaW50IG1nYWcyMDBfYm9fcmVzZXJ2ZShzdHJ1Y3QgbWdhZzIwMF9ibyAqYm8sIGJvb2wgbm9f d2FpdCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdHRtX2JvX3Jlc2VydmUoJmJvLT5ibywgdHJ1 ZSwgbm9fd2FpdCwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZ UyAmJiByZXQgIT0gLUVCVVNZKQotCQkJRFJNX0VSUk9SKCJyZXNlcnZlIGZhaWxlZCAlcFxuIiwg Ym8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2 b2lkIG1nYWcyMDBfYm9fdW5yZXNlcnZlKHN0cnVjdCBtZ2FnMjAwX2JvICpibykKLXsKLQl0dG1f Ym9fdW5yZXNlcnZlKCZiby0+Ym8pOwotfQotCi1pbnQgbWdhZzIwMF9ib19jcmVhdGUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgaW50IHNpemUsIGludCBhbGlnbiwKLQkJICAgICAgdWludDMyX3Qg ZmxhZ3MsIHN0cnVjdCBtZ2FnMjAwX2JvICoqcGFzdGJvKTsKIGludCBtZ2FnMjAwX21tX2luaXQo c3RydWN0IG1nYV9kZXZpY2UgKm1kZXYpOwogdm9pZCBtZ2FnMjAwX21tX2Zpbmkoc3RydWN0IG1n YV9kZXZpY2UgKm1kZXYpOwogaW50IG1nYWcyMDBfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotaW50IG1nYWcyMDBfYm9fcGluKHN0cnVjdCBtZ2Fn MjAwX2JvICpibywgdTMyIHBsX2ZsYWcsIHU2NCAqZ3B1X2FkZHIpOwotaW50IG1nYWcyMDBfYm9f dW5waW4oc3RydWN0IG1nYWcyMDBfYm8gKmJvKTsKLWludCBtZ2FnMjAwX2JvX3B1c2hfc3lzcmFt KHN0cnVjdCBtZ2FnMjAwX2JvICpibyk7Ci0JCQkgICAvKiBtZ2FnMjAwX2N1cnNvci5jICovCisK IGludCBtZ2FfY3J0Y19jdXJzb3Jfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCiAJCQkJCQl1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IHdpZHRo LCB1aW50MzJfdCBoZWlnaHQpOwogaW50IG1nYV9jcnRjX2N1cnNvcl9tb3ZlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywgaW50IHgsIGludCB5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t Z2FnMjAwL21nYWcyMDBfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfZmIu YwppbmRleCA1YjdlNjRjYWMwMDQuLjUwOGVjMmRkZGJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21nYWcyMDAvbWdhZzIwMF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAw L21nYWcyMDBfZmIuYwpAQCAtMjMsNyArMjMsNyBAQCBzdGF0aWMgdm9pZCBtZ2FfZGlydHlfdXBk YXRlKHN0cnVjdCBtZ2FfZmJkZXYgKm1mYmRldiwKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqYm87CisJc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgKmdibzsKIAlpbnQgc3JjX29mZnNldCwgZHN0X29mZnNldDsKIAlpbnQgYnBw ID0gbWZiZGV2LT5tZmIuYmFzZS5mb3JtYXQtPmNwcFswXTsKIAlpbnQgcmV0ID0gLUVCVVNZOwpA QCAtMzMsNyArMzMsNyBAQCBzdGF0aWMgdm9pZCBtZ2FfZGlydHlfdXBkYXRlKHN0cnVjdCBtZ2Ff ZmJkZXYgKm1mYmRldiwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJb2JqID0gbWZiZGV2LT5t ZmIub2JqOwotCWJvID0gZ2VtX3RvX21nYV9ibyhvYmopOworCWdibyA9IGRybV9nZW1fdnJhbV9v Zl9nZW0ob2JqKTsKIAogCS8qCiAJICogdHJ5IGFuZCByZXNlcnZlIHRoZSBCTywgaWYgd2UgZmFp bCB3aXRoIGJ1c3kKQEAgLTQxLDcgKzQxLDcgQEAgc3RhdGljIHZvaWQgbWdhX2RpcnR5X3VwZGF0 ZShzdHJ1Y3QgbWdhX2ZiZGV2ICptZmJkZXYsCiAJICogc3RvcmUgdXAgdGhlIGRhbWFnZSB1bnRp bCBsYXRlci4KIAkgKi8KIAlpZiAoZHJtX2Nhbl9zbGVlcCgpKQotCQlyZXQgPSBtZ2FnMjAwX2Jv X3Jlc2VydmUoYm8sIHRydWUpOworCQlyZXQgPSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShnYm8sIHRy dWUpOwogCWlmIChyZXQpIHsKIAkJaWYgKHJldCAhPSAtRUJVU1kpCiAJCQlyZXR1cm47CkBAIC03 NSwxMSArNzUsMTEgQEAgc3RhdGljIHZvaWQgbWdhX2RpcnR5X3VwZGF0ZShzdHJ1Y3QgbWdhX2Zi ZGV2ICptZmJkZXYsCiAJbWZiZGV2LT54MiA9IG1mYmRldi0+eTIgPSAwOwogCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1mYmRldi0+ZGlydHlfbG9jaywgZmxhZ3MpOwogCi0JaWYgKCFiby0+a21h cC52aXJ0dWFsKSB7Ci0JCXJldCA9IHR0bV9ib19rbWFwKCZiby0+Ym8sIDAsIGJvLT5iby5udW1f cGFnZXMsICZiby0+a21hcCk7CisJaWYgKCFnYm8tPmttYXAudmlydHVhbCkgeworCQlyZXQgPSB0 dG1fYm9fa21hcCgmZ2JvLT5ibywgMCwgZ2JvLT5iby5udW1fcGFnZXMsICZnYm8tPmttYXApOwog CQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBrbWFwIGZiIHVwZGF0ZXNcbiIp OwotCQkJbWdhZzIwMF9ib191bnJlc2VydmUoYm8pOworCQkJZHJtX2dlbV92cmFtX3VucmVzZXJ2 ZShnYm8pOwogCQkJcmV0dXJuOwogCQl9CiAJCXVubWFwID0gdHJ1ZTsKQEAgLTg3LDEzICs4Nywx MyBAQCBzdGF0aWMgdm9pZCBtZ2FfZGlydHlfdXBkYXRlKHN0cnVjdCBtZ2FfZmJkZXYgKm1mYmRl diwKIAlmb3IgKGkgPSB5OyBpIDw9IHkyOyBpKyspIHsKIAkJLyogYXNzdW1lIGVxdWFsIHN0cmlk ZSBmb3Igbm93ICovCiAJCXNyY19vZmZzZXQgPSBkc3Rfb2Zmc2V0ID0gaSAqIG1mYmRldi0+bWZi LmJhc2UucGl0Y2hlc1swXSArICh4ICogYnBwKTsKLQkJbWVtY3B5X3RvaW8oYm8tPmttYXAudmly dHVhbCArIHNyY19vZmZzZXQsIG1mYmRldi0+c3lzcmFtICsgc3JjX29mZnNldCwgKHgyIC0geCAr IDEpICogYnBwKTsKKwkJbWVtY3B5X3RvaW8oZ2JvLT5rbWFwLnZpcnR1YWwgKyBzcmNfb2Zmc2V0 LCBtZmJkZXYtPnN5c3JhbSArIHNyY19vZmZzZXQsICh4MiAtIHggKyAxKSAqIGJwcCk7CiAKIAl9 CiAJaWYgKHVubWFwKQotCQl0dG1fYm9fa3VubWFwKCZiby0+a21hcCk7CisJCXR0bV9ib19rdW5t YXAoJmdiby0+a21hcCk7CiAKLQltZ2FnMjAwX2JvX3VucmVzZXJ2ZShibyk7CisJZHJtX2dlbV92 cmFtX3VucmVzZXJ2ZShnYm8pOwogfQogCiBzdGF0aWMgdm9pZCBtZ2FfZmlsbHJlY3Qoc3RydWN0 IGZiX2luZm8gKmluZm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21haW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbWFpbi5jCmluZGV4 IDE2MzI1NTA5OTc3OS4uNTlhNDAyOGE1YzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v bWdhZzIwMC9tZ2FnMjAwX21haW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2Fn MjAwX21haW4uYwpAQCAtMjMwLDExICsyMzAsMTMgQEAgaW50IG1nYWcyMDBfZHJpdmVyX2xvYWQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIAl9CiAKIAkvKiBN YWtlIHNtYWxsIGJ1ZmZlcnMgdG8gc3RvcmUgYSBoYXJkd2FyZSBjdXJzb3IgKGRvdWJsZSBidWZm ZXJlZCBpY29uIHVwZGF0ZXMpICovCi0JbWdhZzIwMF9ib19jcmVhdGUoZGV2LCByb3VuZHVwKDQ4 KjY0LCBQQUdFX1NJWkUpLCAwLCAwLAotCQkJCQkgICZtZGV2LT5jdXJzb3IucGl4ZWxzXzEpOwot CW1nYWcyMDBfYm9fY3JlYXRlKGRldiwgcm91bmR1cCg0OCo2NCwgUEFHRV9TSVpFKSwgMCwgMCwK LQkJCQkJICAmbWRldi0+Y3Vyc29yLnBpeGVsc18yKTsKLQlpZiAoIW1kZXYtPmN1cnNvci5waXhl bHNfMiB8fCAhbWRldi0+Y3Vyc29yLnBpeGVsc18xKSB7CisJbWRldi0+Y3Vyc29yLnBpeGVsc18x ID0gZHJtX2dlbV92cmFtX2NyZWF0ZShkZXYsICZtZGV2LT50dG0uYmRldiwKKwkJCQkJCSAgICBy b3VuZHVwKDQ4KjY0LCBQQUdFX1NJWkUpLAorCQkJCQkJICAgIDAsIDApOworCW1kZXYtPmN1cnNv ci5waXhlbHNfMiA9IGRybV9nZW1fdnJhbV9jcmVhdGUoZGV2LCAmbWRldi0+dHRtLmJkZXYsCisJ CQkJCQkgICAgcm91bmR1cCg0OCo2NCwgUEFHRV9TSVpFKSwKKwkJCQkJCSAgICAwLCAwKTsKKwlp ZiAoSVNfRVJSKG1kZXYtPmN1cnNvci5waXhlbHNfMikgfHwgSVNfRVJSKG1kZXYtPmN1cnNvci5w aXhlbHNfMSkpIHsKIAkJbWRldi0+Y3Vyc29yLnBpeGVsc18xID0gTlVMTDsKIAkJbWRldi0+Y3Vy c29yLnBpeGVsc18yID0gTlVMTDsKIAkJZGV2X3dhcm4oJmRldi0+cGRldi0+ZGV2LApAQCAtMjcy LDcgKzI3NCw4IEBAIGludCBtZ2FnMjAwX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKIAkJICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsCiAJCSAgIHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqKm9iaikKIHsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqYXN0Ym87CisJc3RydWN0IG1nYV9k ZXZpY2UgKm1kZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2Jq ZWN0ICpnYm87CiAJaW50IHJldDsKIAogCSpvYmogPSBOVUxMOwpAQCAtMjgxLDEzICsyODQsMTQg QEAgaW50IG1nYWcyMDBfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCWlmIChz aXplID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gbWdhZzIwMF9ib19jcmVhdGUo ZGV2LCBzaXplLCAwLCAwLCAmYXN0Ym8pOwotCWlmIChyZXQpIHsKKwlnYm8gPSBkcm1fZ2VtX3Zy YW1fY3JlYXRlKGRldiwgJm1kZXYtPnR0bS5iZGV2LCBzaXplLCAwLCBmYWxzZSk7CisJaWYgKElT X0VSUihnYm8pKSB7CisJCXJldCA9IFBUUl9FUlIoZ2JvKTsKIAkJaWYgKHJldCAhPSAtRVJFU1RB UlRTWVMpCiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBHRU0gb2JqZWN0XG4iKTsK IAkJcmV0dXJuIHJldDsKIAl9Ci0JKm9iaiA9ICZhc3Riby0+Z2VtOworCSpvYmogPSAmZ2JvLT5n ZW07CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NSw2NCArMjk5LDggQEAgaW50IG1nYWcyMDBfZHVt Yl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAogCQkgICAgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkJICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKIHsKLQlpbnQg cmV0OwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKLQl1MzIgaGFuZGxlOwotCi0JYXJn cy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqICgoYXJncy0+YnBwICsgNykgLyA4KTsKLQlhcmdzLT5z aXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Ci0KLQlyZXQgPSBtZ2FnMjAwX2dlbV9j cmVhdGUoZGV2LCBhcmdzLT5zaXplLCBmYWxzZSwKLQkJCSAgICAgJmdvYmopOwotCWlmIChyZXQp Ci0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwgZ29i aiwgJmhhbmRsZSk7Ci0JZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdvYmopOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7Ci0JcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyB2b2lkIG1nYWcyMDBfYm9fdW5yZWYoc3RydWN0IG1nYWcyMDBfYm8gKipi bykKLXsKLQlpZiAoKCpibykgPT0gTlVMTCkKLQkJcmV0dXJuOwotCXR0bV9ib19wdXQoJigoKmJv KS0+Ym8pKTsKLQkqYm8gPSBOVUxMOwotfQotCi12b2lkIG1nYWcyMDBfZ2VtX2ZyZWVfb2JqZWN0 KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBtZ2FnMjAwX2JvICptZ2Fn MjAwX2JvID0gZ2VtX3RvX21nYV9ibyhvYmopOwotCi0JbWdhZzIwMF9ib191bnJlZigmbWdhZzIw MF9ibyk7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1NjQgbWdhZzIwMF9ib19tbWFwX29mZnNldChz dHJ1Y3QgbWdhZzIwMF9ibyAqYm8pCi17Ci0JcmV0dXJuIGRybV92bWFfbm9kZV9vZmZzZXRfYWRk cigmYm8tPmJvLnZtYV9ub2RlKTsKLX0KLQotaW50Ci1tZ2FnMjAwX2R1bWJfbW1hcF9vZmZzZXQo c3RydWN0IGRybV9maWxlICpmaWxlLAotCQkgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0J CSAgICAgdWludDMyX3QgaGFuZGxlLAotCQkgICAgIHVpbnQ2NF90ICpvZmZzZXQpCi17Ci0Jc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IG1nYWcyMDBfYm8gKmJvOwotCi0Jb2Jq ID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7Ci0JaWYgKG9iaiA9PSBOVUxM KQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWJvID0gZ2VtX3RvX21nYV9ibyhvYmopOwotCSpvZmZz ZXQgPSBtZ2FnMjAwX2JvX21tYXBfb2Zmc2V0KGJvKTsKKwlzdHJ1Y3QgbWdhX2RldmljZSAqbWRl diA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2Jq KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZHJtX2dlbV92cmFtX2ZpbGxfY3JlYXRlX2R1bWIoZmls ZSwgZGV2LCAmbWRldi0+dHRtLmJkZXYsIDAsCisJCQkJCSAgICBmYWxzZSwgYXJncyk7CiB9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYyBiL2RyaXZl cnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfbW9kZS5jCmluZGV4IDc0ODFhM2Q1NTZhZC4uZGRl YzJjNDg1MzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21v ZGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhZzIwMC9tZ2FnMjAwX21vZGUuYwpAQCAtODY3 LDQ4ICs4NjcsNTcgQEAgc3RhdGljIGludCBtZ2FfY3J0Y19kb19zZXRfYmFzZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCiAJc3RydWN0IG1nYV9kZXZpY2UgKm1kZXYgPSBjcnRjLT5kZXYtPmRldl9w cml2YXRlOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCXN0cnVjdCBtZ2FfZnJhbWVi dWZmZXIgKm1nYV9mYjsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqYm87CisJc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgKmdibzsKIAlpbnQgcmV0OwotCXU2NCBncHVfYWRkcjsKKwlzNjQgZ3B1X2Fk ZHI7CiAKIAkvKiBwdXNoIHRoZSBwcmV2aW91cyBmYiB0byBzeXN0ZW0gcmFtICovCiAJaWYgKCFh dG9taWMgJiYgZmIpIHsKIAkJbWdhX2ZiID0gdG9fbWdhX2ZyYW1lYnVmZmVyKGZiKTsKIAkJb2Jq ID0gbWdhX2ZiLT5vYmo7Ci0JCWJvID0gZ2VtX3RvX21nYV9ibyhvYmopOwotCQlyZXQgPSBtZ2Fn MjAwX2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwkJZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShv YmopOworCQlyZXQgPSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShnYm8sIGZhbHNlKTsKIAkJaWYgKHJl dCkKIAkJCXJldHVybiByZXQ7Ci0JCW1nYWcyMDBfYm9fcHVzaF9zeXNyYW0oYm8pOwotCQltZ2Fn MjAwX2JvX3VucmVzZXJ2ZShibyk7CisJCWRybV9nZW1fdnJhbV9wdXNoX3RvX3N5c3RlbShnYm8p OworCQlkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKGdibyk7CiAJfQogCiAJbWdhX2ZiID0gdG9fbWdh X2ZyYW1lYnVmZmVyKGNydGMtPnByaW1hcnktPmZiKTsKIAlvYmogPSBtZ2FfZmItPm9iajsKLQli byA9IGdlbV90b19tZ2FfYm8ob2JqKTsKKwlnYm8gPSBkcm1fZ2VtX3ZyYW1fb2ZfZ2VtKG9iaik7 CiAKLQlyZXQgPSBtZ2FnMjAwX2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlyZXQgPSBkcm1fZ2Vt X3ZyYW1fcmVzZXJ2ZShnYm8sIGZhbHNlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0J cmV0ID0gbWdhZzIwMF9ib19waW4oYm8sIFRUTV9QTF9GTEFHX1ZSQU0sICZncHVfYWRkcik7Ci0J aWYgKHJldCkgewotCQltZ2FnMjAwX2JvX3VucmVzZXJ2ZShibyk7Ci0JCXJldHVybiByZXQ7CisJ cmV0ID0gZHJtX2dlbV92cmFtX3BpbihnYm8sIERSTV9HRU1fVlJBTV9QTF9GTEFHX1ZSQU0pOwor CWlmIChyZXQpCisJCWdvdG8gZXJyX2RybV9nZW1fdnJhbV91bnJlc2VydmU7CisJZ3B1X2FkZHIg PSBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KGdibyk7CisJaWYgKGdwdV9hZGRyIDwgMCkgeworCQlyZXQg PSAoaW50KWdwdV9hZGRyOworCQlnb3RvIGVycl9kcm1fZ2VtX3ZyYW1fdW5waW47CiAJfQogCiAJ aWYgKCZtZGV2LT5tZmJkZXYtPm1mYiA9PSBtZ2FfZmIpIHsKIAkJLyogaWYgcHVzaGluZyBjb25z b2xlIGluIGttYXAgaXQgKi8KLQkJcmV0ID0gdHRtX2JvX2ttYXAoJmJvLT5ibywgMCwgYm8tPmJv Lm51bV9wYWdlcywgJmJvLT5rbWFwKTsKKwkJcmV0ID0gdHRtX2JvX2ttYXAoJmdiby0+Ym8sIDAs IGdiby0+Ym8ubnVtX3BhZ2VzLCAmZ2JvLT5rbWFwKTsKIAkJaWYgKHJldCkKIAkJCURSTV9FUlJP UigiZmFpbGVkIHRvIGttYXAgZmJjb25cbiIpOwogCiAJfQotCW1nYWcyMDBfYm9fdW5yZXNlcnZl KGJvKTsKKwlkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKGdibyk7CiAKIAltZ2Ffc2V0X3N0YXJ0X2Fk ZHJlc3MoY3J0YywgKHUzMilncHVfYWRkcik7CiAKIAlyZXR1cm4gMDsKKworZXJyX2RybV9nZW1f dnJhbV91bnBpbjoKKwlkcm1fZ2VtX3ZyYW1fdW5waW4oZ2JvKTsKK2Vycl9kcm1fZ2VtX3ZyYW1f dW5yZXNlcnZlOgorCWRybV9nZW1fdnJhbV91bnJlc2VydmUoZ2JvKTsKKwlyZXR1cm4gcmV0Owog fQogCiBzdGF0aWMgaW50IG1nYV9jcnRjX21vZGVfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpj cnRjLCBpbnQgeCwgaW50IHksCkBAIC0xNDI4LDEyICsxNDM3LDEyIEBAIHN0YXRpYyB2b2lkIG1n YV9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogCWlmIChjcnRjLT5wcmltYXJ5 LT5mYikgewogCQlzdHJ1Y3QgbWdhX2ZyYW1lYnVmZmVyICptZ2FfZmIgPSB0b19tZ2FfZnJhbWVi dWZmZXIoY3J0Yy0+cHJpbWFyeS0+ZmIpOwogCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9 IG1nYV9mYi0+b2JqOwotCQlzdHJ1Y3QgbWdhZzIwMF9ibyAqYm8gPSBnZW1fdG9fbWdhX2JvKG9i aik7Ci0JCXJldCA9IG1nYWcyMDBfYm9fcmVzZXJ2ZShibywgZmFsc2UpOworCQlzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbShvYmopOworCQlyZXQg PSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShnYm8sIGZhbHNlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVy bjsKLQkJbWdhZzIwMF9ib19wdXNoX3N5c3JhbShibyk7Ci0JCW1nYWcyMDBfYm9fdW5yZXNlcnZl KGJvKTsKKwkJZHJtX2dlbV92cmFtX3B1c2hfdG9fc3lzdGVtKGdibyk7CisJCWRybV9nZW1fdnJh bV91bnJlc2VydmUoZ2JvKTsKIAl9CiAJY3J0Yy0+cHJpbWFyeS0+ZmIgPSBOVUxMOwogfQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF90dG0uYyBiL2RyaXZlcnMv Z3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfdHRtLmMKaW5kZXggYmQ0MjM2NWE4YWE4Li4yYzAyNDkw ODZiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZ2FnMjAwL21nYWcyMDBfdHRtLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL21nYWcyMDAvbWdhZzIwMF90dG0uYwpAQCAtMzYsMjMgKzM2 LDYgQEAgbWdhZzIwMF9iZGV2KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZCkKIAlyZXR1cm4gY29u dGFpbmVyX29mKGJkLCBzdHJ1Y3QgbWdhX2RldmljZSwgdHRtLmJkZXYpOwogfQogCi1zdGF0aWMg dm9pZCBtZ2FnMjAwX2JvX3R0bV9kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJv KQotewotCXN0cnVjdCBtZ2FnMjAwX2JvICpibzsKLQotCWJvID0gY29udGFpbmVyX29mKHRibywg c3RydWN0IG1nYWcyMDBfYm8sIGJvKTsKLQotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5n ZW0pOwotCWtmcmVlKGJvKTsKLX0KLQotc3RhdGljIGJvb2wgbWdhZzIwMF90dG1fYm9faXNfbWdh ZzIwMF9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQotewotCWlmIChiby0+ZGVzdHJv eSA9PSAmbWdhZzIwMF9ib190dG1fZGVzdHJveSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZh bHNlOwotfQotCiBzdGF0aWMgaW50CiBtZ2FnMjAwX2JvX2luaXRfbWVtX3R5cGUoc3RydWN0IHR0 bV9ib19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IHR5cGUsCiAJCSAgICAgc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyICptYW4pCkBAIC03OCwyNiArNjEsNiBAQCBtZ2FnMjAwX2JvX2luaXRfbWVt X3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IHR5cGUsCiAJcmV0dXJu IDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1tZ2FnMjAwX2JvX2V2aWN0X2ZsYWdzKHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8sIHN0cnVjdCB0dG1fcGxhY2VtZW50ICpwbCkKLXsKLQlzdHJ1Y3Qg bWdhZzIwMF9ibyAqbWdhYm8gPSBtZ2FnMjAwX2JvKGJvKTsKLQotCWlmICghbWdhZzIwMF90dG1f Ym9faXNfbWdhZzIwMF9ibyhibykpCi0JCXJldHVybjsKLQotCW1nYWcyMDBfdHRtX3BsYWNlbWVu dChtZ2FibywgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKLQkqcGwgPSBtZ2Fiby0+cGxhY2VtZW50Owot fQotCi1zdGF0aWMgaW50IG1nYWcyMDBfYm9fdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QgKmJvLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAq bWdhYm8gPSBtZ2FnMjAwX2JvKGJvKTsKLQotCXJldHVybiBkcm1fdm1hX25vZGVfdmVyaWZ5X2Fj Y2VzcygmbWdhYm8tPmdlbS52bWFfbm9kZSwKLQkJCQkJICBmaWxwLT5wcml2YXRlX2RhdGEpOwot fQotCiBzdGF0aWMgaW50IG1nYWcyMDBfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9f ZGV2aWNlICpiZGV2LAogCQkJCSAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCiB7CkBAIC0xNjIs OSArMTI1LDkgQEAgc3RydWN0IHR0bV9ib19kcml2ZXIgbWdhZzIwMF9ib19kcml2ZXIgPSB7CiAJ LnR0bV90dF9jcmVhdGUgPSBtZ2FnMjAwX3R0bV90dF9jcmVhdGUsCiAJLmluaXRfbWVtX3R5cGUg PSBtZ2FnMjAwX2JvX2luaXRfbWVtX3R5cGUsCiAJLmV2aWN0aW9uX3ZhbHVhYmxlID0gdHRtX2Jv X2V2aWN0aW9uX3ZhbHVhYmxlLAotCS5ldmljdF9mbGFncyA9IG1nYWcyMDBfYm9fZXZpY3RfZmxh Z3MsCisJLmV2aWN0X2ZsYWdzID0gZHJtX2dlbV92cmFtX2JvX2RyaXZlcl9ldmljdF9mbGFncywK IAkubW92ZSA9IE5VTEwsCi0JLnZlcmlmeV9hY2Nlc3MgPSBtZ2FnMjAwX2JvX3ZlcmlmeV9hY2Nl c3MsCisJLnZlcmlmeV9hY2Nlc3MgPSBkcm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX3ZlcmlmeV9hY2Nl c3MsCiAJLmlvX21lbV9yZXNlcnZlID0gJm1nYWcyMDBfdHRtX2lvX21lbV9yZXNlcnZlLAogCS5p b19tZW1fZnJlZSA9ICZtZ2FnMjAwX3R0bV9pb19tZW1fZnJlZSwKIH07CkBAIC0yMTEsMTM3ICsx NzQsNiBAQCB2b2lkIG1nYWcyMDBfbW1fZmluaShzdHJ1Y3QgbWdhX2RldmljZSAqbWRldikKIAlt ZGV2LT5mYl9tdHJyID0gMDsKIH0KIAotdm9pZCBtZ2FnMjAwX3R0bV9wbGFjZW1lbnQoc3RydWN0 IG1nYWcyMDBfYm8gKmJvLCBpbnQgZG9tYWluKQotewotCXUzMiBjID0gMDsKLQl1bnNpZ25lZCBp OwotCi0JYm8tPnBsYWNlbWVudC5wbGFjZW1lbnQgPSBiby0+cGxhY2VtZW50czsKLQliby0+cGxh Y2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gYm8tPnBsYWNlbWVudHM7Ci0JaWYgKGRvbWFpbiAmIFRU TV9QTF9GTEFHX1ZSQU0pCi0JCWJvLT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfRkxB R19XQyB8IFRUTV9QTF9GTEFHX1VOQ0FDSEVEIHwgVFRNX1BMX0ZMQUdfVlJBTTsKLQlpZiAoZG9t YWluICYgVFRNX1BMX0ZMQUdfU1lTVEVNKQotCQliby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0g VFRNX1BMX01BU0tfQ0FDSElORyB8IFRUTV9QTF9GTEFHX1NZU1RFTTsKLQlpZiAoIWMpCi0JCWJv LT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZM QUdfU1lTVEVNOwotCWJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IGM7Ci0JYm8tPnBsYWNl bWVudC5udW1fYnVzeV9wbGFjZW1lbnQgPSBjOwotCWZvciAoaSA9IDA7IGkgPCBjOyArK2kpIHsK LQkJYm8tPnBsYWNlbWVudHNbaV0uZnBmbiA9IDA7Ci0JCWJvLT5wbGFjZW1lbnRzW2ldLmxwZm4g PSAwOwotCX0KLX0KLQotaW50IG1nYWcyMDBfYm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGludCBzaXplLCBpbnQgYWxpZ24sCi0JCSAgdWludDMyX3QgZmxhZ3MsIHN0cnVjdCBtZ2Fn MjAwX2JvICoqcG1nYWJvKQotewotCXN0cnVjdCBtZ2FfZGV2aWNlICptZGV2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKLQlzdHJ1Y3QgbWdhZzIwMF9ibyAqbWdhYm87Ci0Jc2l6ZV90IGFjY19zaXplOwot CWludCByZXQ7Ci0KLQltZ2FibyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZ2FnMjAwX2JvKSwg R0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZ2FibykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBk cm1fZ2VtX29iamVjdF9pbml0KGRldiwgJm1nYWJvLT5nZW0sIHNpemUpOwotCWlmIChyZXQpIHsK LQkJa2ZyZWUobWdhYm8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1nYWJvLT5iby5iZGV2ID0g Jm1kZXYtPnR0bS5iZGV2OwotCi0JbWdhZzIwMF90dG1fcGxhY2VtZW50KG1nYWJvLCBUVE1fUExf RkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKLQotCWFjY19zaXplID0gdHRtX2JvX2Rt YV9hY2Nfc2l6ZSgmbWRldi0+dHRtLmJkZXYsIHNpemUsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1 Y3QgbWdhZzIwMF9ibykpOwotCi0JcmV0ID0gdHRtX2JvX2luaXQoJm1kZXYtPnR0bS5iZGV2LCAm bWdhYm8tPmJvLCBzaXplLAotCQkJICB0dG1fYm9fdHlwZV9kZXZpY2UsICZtZ2Fiby0+cGxhY2Vt ZW50LAotCQkJICBhbGlnbiA+PiBQQUdFX1NISUZULCBmYWxzZSwgYWNjX3NpemUsCi0JCQkgIE5V TEwsIE5VTEwsIG1nYWcyMDBfYm9fdHRtX2Rlc3Ryb3kpOwotCWlmIChyZXQpCi0JCXJldHVybiBy ZXQ7Ci0KLQkqcG1nYWJvID0gbWdhYm87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg dTY0IG1nYWcyMDBfYm9fZ3B1X29mZnNldChzdHJ1Y3QgbWdhZzIwMF9ibyAqYm8pCi17Ci0JcmV0 dXJuIGJvLT5iby5vZmZzZXQ7Ci19Ci0KLWludCBtZ2FnMjAwX2JvX3BpbihzdHJ1Y3QgbWdhZzIw MF9ibyAqYm8sIHUzMiBwbF9mbGFnLCB1NjQgKmdwdV9hZGRyKQotewotCXN0cnVjdCB0dG1fb3Bl cmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9OwotCWludCBpLCByZXQ7Ci0KLQlpZiAo Ym8tPnBpbl9jb3VudCkgewotCQliby0+cGluX2NvdW50Kys7Ci0JCWlmIChncHVfYWRkcikKLQkJ CSpncHVfYWRkciA9IG1nYWcyMDBfYm9fZ3B1X29mZnNldChibyk7Ci0JCXJldHVybiAwOwotCX0K LQotCW1nYWcyMDBfdHRtX3BsYWNlbWVudChibywgcGxfZmxhZyk7Ci0JZm9yIChpID0gMDsgaSA8 IGJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudDsgaSsrKQotCQliby0+cGxhY2VtZW50c1tpXS5m bGFncyB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKLQlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJv LT5ibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0K LQliby0+cGluX2NvdW50ID0gMTsKLQlpZiAoZ3B1X2FkZHIpCi0JCSpncHVfYWRkciA9IG1nYWcy MDBfYm9fZ3B1X29mZnNldChibyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBtZ2FnMjAwX2JvX3Vu cGluKHN0cnVjdCBtZ2FnMjAwX2JvICpibykKLXsKLQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHgg Y3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKLQlpbnQgaTsKLQlpZiAoIWJvLT5waW5fY291bnQpIHsK LQkJRFJNX0VSUk9SKCJ1bnBpbiBiYWQgJXBcbiIsIGJvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWJv LT5waW5fY291bnQtLTsKLQlpZiAoYm8tPnBpbl9jb3VudCkKLQkJcmV0dXJuIDA7Ci0KLQlmb3Ig KGkgPSAwOyBpIDwgYm8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50IDsgaSsrKQotCQliby0+cGxh Y2VtZW50c1tpXS5mbGFncyAmPSB+VFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Ci0JcmV0dXJuIHR0bV9i b192YWxpZGF0ZSgmYm8tPmJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7Ci19Ci0KLWludCBtZ2Fn MjAwX2JvX3B1c2hfc3lzcmFtKHN0cnVjdCBtZ2FnMjAwX2JvICpibykKLXsKLQlzdHJ1Y3QgdHRt X29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKLQlpbnQgaSwgcmV0OwotCWlm ICghYm8tPnBpbl9jb3VudCkgewotCQlEUk1fRVJST1IoInVucGluIGJhZCAlcFxuIiwgYm8pOwot CQlyZXR1cm4gMDsKLQl9Ci0JYm8tPnBpbl9jb3VudC0tOwotCWlmIChiby0+cGluX2NvdW50KQot CQlyZXR1cm4gMDsKLQotCWlmIChiby0+a21hcC52aXJ0dWFsKQotCQl0dG1fYm9fa3VubWFwKCZi by0+a21hcCk7Ci0KLQltZ2FnMjAwX3R0bV9wbGFjZW1lbnQoYm8sIFRUTV9QTF9GTEFHX1NZU1RF TSk7Ci0JZm9yIChpID0gMDsgaSA8IGJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7IGkrKykK LQkJYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Ci0KLQly ZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT5ibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwotCWlm IChyZXQpIHsKLQkJRFJNX0VSUk9SKCJwdXNoaW5nIHRvIFZSQU0gZmFpbGVkXG4iKTsKLQkJcmV0 dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBtZ2FnMjAwX21tYXAoc3RydWN0IGZp bGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotLSAKMi4yMS4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=