From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Anholt Subject: [PATCH] drm/v3d: Use the new shmem helpers to reduce driver boilerplate. Date: Thu, 14 Mar 2019 09:34:51 -0700 Message-ID: <20190314163451.13431-1-eric@anholt.net> References: <20190313004344.24169-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from anholt.net (anholt.net [50.246.234.109]) by gabe.freedesktop.org (Postfix) with ESMTP id BA7CB6E15A for ; Thu, 14 Mar 2019 16:34:55 +0000 (UTC) In-Reply-To: <20190313004344.24169-1-robh@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: david.emett@broadcom.com, thomas.spurden@broadcom.com, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org VGhlIG5ldyBzaG1lbSBoZWxwZXJzIGZyb20gTm9yYWxmIGFuZCBSb2IgYWJzdHJhY3Qgb3V0IGEg YnVuY2ggb2Ygb3VyCkJPIGNyZWF0aW9uIGFuZCBtYXBwaW5nIGNvZGUuCgp2MjogVXNlIHRoZSBu ZXcgc2d0IGdldHRlciwgYW5kIGZsYWcgcGFnZXMgYXMgZGlydHkgYmVmb3JlIGZyZWVpbmcuCgpT aWduZWQtb2ZmLWJ5OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotLS0KIGRyaXZlcnMv Z3B1L2RybS92M2QvS2NvbmZpZyAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Jv LmMgIHwgMzE3ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX2Rydi5jIHwgIDI3ICstLQogZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2 LmggfCAgMTQgKy0KIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jIHwgIDEyICstCiBkcml2 ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYyB8ICAgOCArLQogZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfbW11LmMgfCAgMTEgKy0KIDcgZmlsZXMgY2hhbmdlZCwgMTIwIGluc2VydGlvbnMoKyksIDI3 MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNkL0tjb25maWcg Yi9kcml2ZXJzL2dwdS9kcm0vdjNkL0tjb25maWcKaW5kZXggMTU1MmJmNTUyYzk0Li43NWE3NGM0 NWYxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vdjNkL0tjb25maWcKQEAgLTUsNiArNSw3IEBAIGNvbmZpZyBEUk1fVjNECiAJ ZGVwZW5kcyBvbiBDT01NT05fQ0xLCiAJZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgRFJNX1NDSEVE CisJc2VsZWN0IERSTV9HRU1fU0hNRU1fSEVMUEVSCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgb3B0 aW9uIGlmIHlvdSBoYXZlIGEgc3lzdGVtIHRoYXQgaGFzIGEgQnJvYWRjb20KIAkgIFYzRCAzLngg b3IgbmV3ZXIgR1BVLCBzdWNoIGFzIEJDTTcyNjguCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfYm8uYwppbmRleCBkZmYz OGJmMzZjNTAuLjgyZjA4ZDg2MTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3YzZC92 M2RfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9iby5jCkBAIC0yNSwxNTggKzI1 LDYgQEAKICNpbmNsdWRlICJ2M2RfZHJ2LmgiCiAjaW5jbHVkZSAidWFwaS9kcm0vdjNkX2RybS5o IgogCi0vKiBQaW5zIHRoZSBzaG1lbSBwYWdlcywgZmlsbHMgaW4gdGhlIC5wYWdlcyBhbmQgLnNn dCBmaWVsZHMgb2YgdGhlIEJPLCBhbmQgbWFwcwotICogaXQgZm9yIERNQS4KLSAqLwotc3RhdGlj IGludAotdjNkX2JvX2dldF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKLXsKLQlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iaiA9ICZiby0+YmFzZTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g b2JqLT5kZXY7Ci0JaW50IG5wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOwotCWludCBy ZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmYm8tPmxvY2spOwotCWlmIChiby0+cGFnZXNfcmVmY291 bnQrKyAhPSAwKQotCQlnb3RvIHVubG9jazsKLQotCWlmICghb2JqLT5pbXBvcnRfYXR0YWNoKSB7 Ci0JCWJvLT5wYWdlcyA9IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7Ci0JCWlmIChJU19FUlIoYm8t PnBhZ2VzKSkgewotCQkJcmV0ID0gUFRSX0VSUihiby0+cGFnZXMpOwotCQkJZ290byB1bmxvY2s7 Ci0JCX0KLQotCQliby0+c2d0ID0gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBh Z2VzKTsKLQkJaWYgKElTX0VSUihiby0+c2d0KSkgewotCQkJcmV0ID0gUFRSX0VSUihiby0+c2d0 KTsKLQkJCWdvdG8gcHV0X3BhZ2VzOwotCQl9Ci0KLQkJLyogTWFwIHRoZSBwYWdlcyBmb3IgdXNl IGJ5IHRoZSBHUFUuICovCi0JCWRtYV9tYXBfc2coZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKLQkJ CSAgIGJvLT5zZ3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JfSBlbHNlIHsKLQkJYm8t PnBhZ2VzID0ga2NhbGxvYyhucGFnZXMsIHNpemVvZigqYm8tPnBhZ2VzKSwgR0ZQX0tFUk5FTCk7 Ci0JCWlmICghYm8tPnBhZ2VzKQotCQkJZ290byBwdXRfcGFnZXM7Ci0KLQkJZHJtX3ByaW1lX3Nn X3RvX3BhZ2VfYWRkcl9hcnJheXMoYm8tPnNndCwgYm8tPnBhZ2VzLAotCQkJCQkJIE5VTEwsIG5w YWdlcyk7Ci0KLQkJLyogTm90ZSB0aGF0IGRtYS1idWZzIGNvbWUgaW4gbWFwcGVkLiAqLwotCX0K LQotCW11dGV4X3VubG9jaygmYm8tPmxvY2spOwotCi0JcmV0dXJuIDA7Ci0KLXB1dF9wYWdlczoK LQlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywgdHJ1ZSwgdHJ1ZSk7Ci0JYm8tPnBh Z2VzID0gTlVMTDsKLXVubG9jazoKLQliby0+cGFnZXNfcmVmY291bnQtLTsKLQltdXRleF91bmxv Y2soJmJvLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZAotdjNkX2JvX3B1 dF9wYWdlcyhzdHJ1Y3QgdjNkX2JvICpibykKLXsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9i aiA9ICZiby0+YmFzZTsKLQotCW11dGV4X2xvY2soJmJvLT5sb2NrKTsKLQlpZiAoLS1iby0+cGFn ZXNfcmVmY291bnQgPT0gMCkgewotCQlpZiAoIW9iai0+aW1wb3J0X2F0dGFjaCkgewotCQkJZG1h X3VubWFwX3NnKG9iai0+ZGV2LT5kZXYsIGJvLT5zZ3QtPnNnbCwKLQkJCQkgICAgIGJvLT5zZ3Qt Pm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7Ci0JCQlzZ19mcmVlX3RhYmxlKGJvLT5zZ3QpOwot CQkJa2ZyZWUoYm8tPnNndCk7Ci0JCQlkcm1fZ2VtX3B1dF9wYWdlcyhvYmosIGJvLT5wYWdlcywg dHJ1ZSwgdHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlrZnJlZShiby0+cGFnZXMpOwotCQl9Ci0JfQot CW11dGV4X3VubG9jaygmYm8tPmxvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IHYzZF9ibyAqdjNk X2JvX2NyZWF0ZV9zdHJ1Y3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICAgc2l6ZV90 IHVuYWxpZ25lZF9zaXplKQotewotCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGRl dik7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0Jc3RydWN0IHYzZF9ibyAqYm87Ci0J c2l6ZV90IHNpemUgPSByb3VuZHVwKHVuYWxpZ25lZF9zaXplLCBQQUdFX1NJWkUpOwotCWludCBy ZXQ7Ci0KLQlpZiAoc2l6ZSA9PSAwKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCWJv ID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibykKLQkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7Ci0Jb2JqID0gJmJvLT5iYXNlOwotCi0JSU5JVF9MSVNUX0hFQUQo JmJvLT51bnJlZl9oZWFkKTsKLQltdXRleF9pbml0KCZiby0+bG9jayk7Ci0KLQlyZXQgPSBkcm1f Z2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWVf Ym87Ci0KLQlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7Ci0JcmV0ID0gZHJtX21tX2luc2VydF9u b2RlX2dlbmVyaWMoJnYzZC0+bW0sICZiby0+bm9kZSwKLQkJCQkJIG9iai0+c2l6ZSA+PiBQQUdF X1NISUZULAotCQkJCQkgR01QX0dSQU5VTEFSSVRZID4+IFBBR0VfU0hJRlQsIDAsIDApOwotCXNw aW5fdW5sb2NrKCZ2M2QtPm1tX2xvY2spOwotCWlmIChyZXQpCi0JCWdvdG8gZnJlZV9vYmo7Ci0K LQlyZXR1cm4gYm87Ci0KLWZyZWVfb2JqOgotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsK LWZyZWVfYm86Ci0Ja2ZyZWUoYm8pOwotCXJldHVybiBFUlJfUFRSKHJldCk7Ci19Ci0KLXN0cnVj dCB2M2RfYm8gKnYzZF9ib19jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCi0JCQkgICAgIHNpemVfdCB1bmFsaWduZWRfc2l6ZSkKLXsKLQlz dHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOwotCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqOwotCXN0cnVjdCB2M2RfYm8gKmJvOwotCWludCByZXQ7Ci0KLQlibyA9IHYzZF9i b19jcmVhdGVfc3RydWN0KGRldiwgdW5hbGlnbmVkX3NpemUpOwotCWlmIChJU19FUlIoYm8pKQot CQlyZXR1cm4gYm87Ci0Jb2JqID0gJmJvLT5iYXNlOwotCi0JcmV0ID0gdjNkX2JvX2dldF9wYWdl cyhibyk7Ci0JaWYgKHJldCkKLQkJZ290byBmcmVlX21tOwotCi0JdjNkX21tdV9pbnNlcnRfcHRl cyhibyk7Ci0KLQltdXRleF9sb2NrKCZ2M2QtPmJvX2xvY2spOwotCXYzZC0+Ym9fc3RhdHMubnVt X2FsbG9jYXRlZCsrOwotCXYzZC0+Ym9fc3RhdHMucGFnZXNfYWxsb2NhdGVkICs9IG9iai0+c2l6 ZSA+PiBQQUdFX1NISUZUOwotCW11dGV4X3VubG9jaygmdjNkLT5ib19sb2NrKTsKLQotCXJldHVy biBibzsKLQotZnJlZV9tbToKLQlzcGluX2xvY2soJnYzZC0+bW1fbG9jayk7Ci0JZHJtX21tX3Jl bW92ZV9ub2RlKCZiby0+bm9kZSk7Ci0Jc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7Ci0KLQlk cm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7Ci0Ja2ZyZWUoYm8pOwotCXJldHVybiBFUlJfUFRS KHJldCk7Ci19Ci0KIC8qIENhbGxlZCBEUk0gY29yZSBvbiB0aGUgbGFzdCB1c2Vyc3BhY2Uva2Vy bmVsIHVucmVmZXJlbmNlIG9mIHRoZQogICogQk8uCiAgKi8KQEAgLTE4NSw4MyArMzMsMTIwIEBA IHZvaWQgdjNkX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogCXN0cnVj dCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KG9iai0+ZGV2KTsKIAlzdHJ1Y3QgdjNkX2JvICpi byA9IHRvX3YzZF9ibyhvYmopOwogCisJdjNkX21tdV9yZW1vdmVfcHRlcyhibyk7CisKIAltdXRl eF9sb2NrKCZ2M2QtPmJvX2xvY2spOwogCXYzZC0+Ym9fc3RhdHMubnVtX2FsbG9jYXRlZC0tOwog CXYzZC0+Ym9fc3RhdHMucGFnZXNfYWxsb2NhdGVkIC09IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZU OwogCW11dGV4X3VubG9jaygmdjNkLT5ib19sb2NrKTsKIAotCXYzZF9ib19wdXRfcGFnZXMoYm8p OwotCi0JaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkKLQkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9i aiwgYm8tPnNndCk7Ci0KLQl2M2RfbW11X3JlbW92ZV9wdGVzKGJvKTsKIAlzcGluX2xvY2soJnYz ZC0+bW1fbG9jayk7CiAJZHJtX21tX3JlbW92ZV9ub2RlKCZiby0+bm9kZSk7CiAJc3Bpbl91bmxv Y2soJnYzZC0+bW1fbG9jayk7CiAKLQltdXRleF9kZXN0cm95KCZiby0+bG9jayk7CisJZHJtX2dl bV9zaG1lbV9wdXRfcGFnZXMoJmJvLT5iYXNlKTsKIAotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uo b2JqKTsKLQlrZnJlZShibyk7Ci19CisJLyogR1BVIGV4ZWN1dGlvbiBtYXkgaGF2ZSBkaXJ0aWVk IGFueSBwYWdlcyBpbiB0aGUgQk8uICovCisJYm8tPmJhc2UucGFnZXNfbWFya19kaXJ0eV9vbl9w dXQgPSB0cnVlOwogCi1zdGF0aWMgdm9pZAotdjNkX3NldF9tbWFwX3ZtYV9mbGFncyhzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7Ci0J dm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1BUDsKLQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJv dF93cml0ZWNvbWJpbmUodm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKSk7CisJZHJtX2dl bV9zaG1lbV9mcmVlX29iamVjdChvYmopOwogfQogCi12bV9mYXVsdF90IHYzZF9nZW1fZmF1bHQo c3RydWN0IHZtX2ZhdWx0ICp2bWYpCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0 X2Z1bmNzIHYzZF9nZW1fZnVuY3MgPSB7CisJLmZyZWUgPSB2M2RfZnJlZV9vYmplY3QsCisJLnBy aW50X2luZm8gPSBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8sCisJLnBpbiA9IGRybV9nZW1fc2ht ZW1fcGluLAorCS51bnBpbiA9IGRybV9nZW1fc2htZW1fdW5waW4sCisJLmdldF9zZ190YWJsZSA9 IGRybV9nZW1fc2htZW1fZ2V0X3NnX3RhYmxlLAorCS52bWFwID0gZHJtX2dlbV9zaG1lbV92bWFw LAorCS52dW5tYXAgPSBkcm1fZ2VtX3NobWVtX3Z1bm1hcCwKKwkudm1fb3BzID0gJmRybV9nZW1f c2htZW1fdm1fb3BzLAorfTsKKworLyogZ2VtX2NyZWF0ZV9vYmplY3QgZnVuY3Rpb24gZm9yIGFs bG9jYXRpbmcgYSBCTyBzdHJ1Y3QgYW5kIGRvaW5nCisgKiBlYXJseSBzZXR1cC4KKyAqLworc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICp2M2RfY3JlYXRlX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzaXplX3Qgc2l6ZSkKIHsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+ dm1hOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7 Ci0Jc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2RfYm8ob2JqKTsKLQlwZm5fdCBwZm47Ci0JcGdv ZmZfdCBwZ29mZjsKLQotCS8qIFdlIGRvbid0IHVzZSB2bWYtPnBnb2ZmIHNpbmNlIHRoYXQgaGFz IHRoZSBmYWtlIG9mZnNldDogKi8KLQlwZ29mZiA9ICh2bWYtPmFkZHJlc3MgLSB2bWEtPnZtX3N0 YXJ0KSA+PiBQQUdFX1NISUZUOwotCXBmbiA9IF9fcGZuX3RvX3Bmbl90KHBhZ2VfdG9fcGZuKGJv LT5wYWdlc1twZ29mZl0pLCBQRk5fREVWKTsKKwlzdHJ1Y3QgdjNkX2JvICpibzsKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iajsKIAotCXJldHVybiB2bWZfaW5zZXJ0X21peGVkKHZtYSwgdm1m LT5hZGRyZXNzLCBwZm4pOwotfQorCWlmIChzaXplID09IDApCisJCXJldHVybiBOVUxMOwogCi1p bnQgdjNkX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQotewotCWludCByZXQ7CisJYm8gPSBremFsbG9jKHNpemVvZigqYm8pLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWJvKQorCQlyZXR1cm4gTlVMTDsKKwlvYmogPSAmYm8tPmJhc2UuYmFzZTsKIAotCXJl dCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJ b2JqLT5mdW5jcyA9ICZ2M2RfZ2VtX2Z1bmNzOwogCi0JdjNkX3NldF9tbWFwX3ZtYV9mbGFncyh2 bWEpOworCUlOSVRfTElTVF9IRUFEKCZiby0+dW5yZWZfaGVhZCk7CiAKLQlyZXR1cm4gcmV0Owor CXJldHVybiAmYm8tPmJhc2UuYmFzZTsKIH0KIAotaW50IHYzZF9wcmltZV9tbWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBp bnQKK3YzZF9ib19jcmVhdGVfZmluaXNoKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewor CXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KG9iai0+ZGV2KTsKKwlzdHJ1Y3QgdjNk X2JvICpibyA9IHRvX3YzZF9ibyhvYmopOworCXN0cnVjdCBzZ190YWJsZSAqc2d0OwogCWludCBy ZXQ7CiAKLQlyZXQgPSBkcm1fZ2VtX21tYXBfb2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOwotCWlm IChyZXQgPCAwKQorCS8qIFNvIGZhciB3ZSBwaW4gdGhlIEJPIGluIHRoZSBNTVUgZm9yIGl0cyBs aWZldGltZSwgc28gdXNlCisJICogc2htZW0ncyBoZWxwZXIgZm9yIGdldHRpbmcgYSBsaWZldGlt ZSBzZ3QuCisJICovCisJc2d0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfc2d0KCZiby0+YmFz ZS5iYXNlKTsKKwlpZiAoSVNfRVJSKHNndCkpCisJCXJldHVybiBQVFJfRVJSKHNndCk7CisKKwlz cGluX2xvY2soJnYzZC0+bW1fbG9jayk7CisJLyogQWxsb2NhdGUgdGhlIG9iamVjdCdzIHNwYWNl IGluIHRoZSBHUFUncyBwYWdlIHRhYmxlcy4KKwkgKiBJbnNlcnRpbmcgUFRFcyB3aWxsIGhhcHBl biBsYXRlciwgYnV0IHRoZSBvZmZzZXQgaXMgZm9yIHRoZQorCSAqIGxpZmV0aW1lIG9mIHRoZSBC Ty4KKwkgKi8KKwlyZXQgPSBkcm1fbW1faW5zZXJ0X25vZGVfZ2VuZXJpYygmdjNkLT5tbSwgJmJv LT5ub2RlLAorCQkJCQkgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkJCSBHTVBfR1JBTlVM QVJJVFkgPj4gUEFHRV9TSElGVCwgMCwgMCk7CisJc3Bpbl91bmxvY2soJnYzZC0+bW1fbG9jayk7 CisJaWYgKHJldCkgeworCQlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcygmYm8tPmJhc2UpOwogCQly ZXR1cm4gcmV0OworCX0KIAotCXYzZF9zZXRfbW1hcF92bWFfZmxhZ3Modm1hKTsKKwkvKiBUcmFj ayBzdGF0cyBmb3IgL2RlYnVnL2RyaS9uL2JvX3N0YXRzLiAqLworCW11dGV4X2xvY2soJnYzZC0+ Ym9fbG9jayk7CisJdjNkLT5ib19zdGF0cy5udW1fYWxsb2NhdGVkKys7CisJdjNkLT5ib19zdGF0 cy5wYWdlc19hbGxvY2F0ZWQgKz0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7CisJbXV0ZXhfdW5s b2NrKCZ2M2QtPmJvX2xvY2spOworCisJdjNkX21tdV9pbnNlcnRfcHRlcyhibyk7CiAKIAlyZXR1 cm4gMDsKIH0KIAotc3RydWN0IHNnX3RhYmxlICoKLXYzZF9wcmltZV9nZXRfc2dfdGFibGUoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCitzdHJ1Y3QgdjNkX2JvICp2M2RfYm9fY3JlYXRlKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJICAg ICBzaXplX3QgdW5hbGlnbmVkX3NpemUpCiB7Ci0Jc3RydWN0IHYzZF9ibyAqYm8gPSB0b192M2Rf Ym8ob2JqKTsKLQlpbnQgbnBhZ2VzID0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0 IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbV9vYmo7CisJc3RydWN0IHYzZF9ibyAqYm87CisJ aW50IHJldDsKKworCXNobWVtX29iaiA9IGRybV9nZW1fc2htZW1fY3JlYXRlKGRldiwgdW5hbGln bmVkX3NpemUpOworCWlmICghc2htZW1fb2JqKQorCQlyZXR1cm4gTlVMTDsKKwlibyA9IHRvX3Yz ZF9ibygmc2htZW1fb2JqLT5iYXNlKTsKKworCXJldCA9IHYzZF9ib19jcmVhdGVfZmluaXNoKCZz aG1lbV9vYmotPmJhc2UpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9vYmo7CisKKwlyZXR1cm4g Ym87CiAKLQlyZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBhZ2VzKTsK K2ZyZWVfb2JqOgorCWRybV9nZW1fc2htZW1fZnJlZV9vYmplY3QoJnNobWVtX29iai0+YmFzZSk7 CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKQEAg LTI2OSwyNyArMTU0LDE4IEBAIHYzZF9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAogCQkJ ICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKIHsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNk X2RldihkZXYpOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCXN0cnVjdCB2M2RfYm8g KmJvOwotCi0JYm8gPSB2M2RfYm9fY3JlYXRlX3N0cnVjdChkZXYsIGF0dGFjaC0+ZG1hYnVmLT5z aXplKTsKLQlpZiAoSVNfRVJSKGJvKSkKLQkJcmV0dXJuIEVSUl9DQVNUKGJvKTsKLQlvYmogPSAm Ym8tPmJhc2U7Ci0KLQlvYmotPnJlc3YgPSBhdHRhY2gtPmRtYWJ1Zi0+cmVzdjsKKwlpbnQgcmV0 OwogCi0JYm8tPnNndCA9IHNndDsKLQlvYmotPmltcG9ydF9hdHRhY2ggPSBhdHRhY2g7Ci0JdjNk X2JvX2dldF9wYWdlcyhibyk7CisJb2JqID0gZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2df dGFibGUoZGV2LCBhdHRhY2gsIHNndCk7CisJaWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gb2Jq OwogCi0JbXV0ZXhfbG9jaygmdjNkLT5ib19sb2NrKTsKLQl2M2QtPmJvX3N0YXRzLm51bV9hbGxv Y2F0ZWQrKzsKLQl2M2QtPmJvX3N0YXRzLnBhZ2VzX2FsbG9jYXRlZCArPSBvYmotPnNpemUgPj4g UEFHRV9TSElGVDsKLQltdXRleF91bmxvY2soJnYzZC0+Ym9fbG9jayk7Ci0KLQl2M2RfbW11X2lu c2VydF9wdGVzKGJvKTsKKwlyZXQgPSB2M2RfYm9fY3JlYXRlX2ZpbmlzaChvYmopOworCWlmIChy ZXQpIHsKKwkJZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdChvYmopOworCQlyZXR1cm4gRVJSX1BU UihyZXQpOworCX0KIAogCXJldHVybiBvYmo7CiB9CkBAIC0zMTIsOCArMTg4LDggQEAgaW50IHYz ZF9jcmVhdGVfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAog CWFyZ3MtPm9mZnNldCA9IGJvLT5ub2RlLnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAKLQlyZXQgPSBk cm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCAmYm8tPmJhc2UsICZhcmdzLT5oYW5kbGUp OwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm8tPmJhc2UpOworCXJldCA9IGRybV9n ZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZiby0+YmFzZS5iYXNlLCAmYXJncy0+aGFuZGxl KTsKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJvLT5iYXNlLmJhc2UpOwogCiAJcmV0 dXJuIHJldDsKIH0KQEAgLTMyMyw3ICsxOTksNiBAQCBpbnQgdjNkX21tYXBfYm9faW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIHsKIAlzdHJ1Y3QgZHJtX3YzZF9tbWFw X2JvICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmo7Ci0JaW50 IHJldDsKIAogCWlmIChhcmdzLT5mbGFncyAhPSAwKSB7CiAJCURSTV9JTkZPKCJ1bmtub3duIG1t YXBfYm8gZmxhZ3M6ICVkXG4iLCBhcmdzLT5mbGFncyk7CkBAIC0zMzYsMTIgKzIxMSwxMCBAQCBp bnQgdjNkX21tYXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK IAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZz ZXQoZ2VtX29iaik7Ci0JaWYgKHJldCA9PSAwKQotCQlhcmdzLT5vZmZzZXQgPSBkcm1fdm1hX25v ZGVfb2Zmc2V0X2FkZHIoJmdlbV9vYmotPnZtYV9ub2RlKTsKKwlhcmdzLT5vZmZzZXQgPSBkcm1f dm1hX25vZGVfb2Zmc2V0X2FkZHIoJmdlbV9vYmotPnZtYV9ub2RlKTsKIAlkcm1fZ2VtX29iamVj dF9wdXRfdW5sb2NrZWQoZ2VtX29iaik7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQog CiBpbnQgdjNkX2dldF9ib19vZmZzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmMKaW5kZXggODliNzU2N2Q1NTBmLi5kNjAwNjI4YmI1 YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92M2QvdjNkX2Rydi5jCkBAIC0xNjEsMTcgKzE2MSw3IEBAIHYzZF9wb3N0Y2xv c2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQogCWtmcmVl KHYzZF9wcml2KTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjNk X2RybV9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gZHJtX29wZW4s Ci0JLnJlbGVhc2UgPSBkcm1fcmVsZWFzZSwKLQkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGws Ci0JLm1tYXAgPSB2M2RfbW1hcCwKLQkucG9sbCA9IGRybV9wb2xsLAotCS5yZWFkID0gZHJtX3Jl YWQsCi0JLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCi0JLmxsc2VlayA9IG5vb3Bf bGxzZWVrLAotfTsKK0RFRklORV9EUk1fR0VNX1NITUVNX0ZPUFModjNkX2RybV9mb3BzKTsKIAog LyogRFJNX0FVVEggaXMgcmVxdWlyZWQgb24gU1VCTUlUX0NMIGZvciBub3csIHdoaWxlIHdlIGRv bid0IGhhdmUgR01QCiAgKiBwcm90ZWN0aW9uIGJldHdlZW4gY2xpZW50cy4gIE5vdGUgdGhhdCBy ZW5kZXIgbm9kZXMgd291bGQgYmUgYmUKQEAgLTE4OSwxMiArMTc5LDYgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1faW9jdGxfZGVzYyB2M2RfZHJtX2lvY3Rsc1tdID0gewogCURSTV9JT0NUTF9E RUZfRFJWKFYzRF9TVUJNSVRfVEZVLCB2M2Rfc3VibWl0X3RmdV9pb2N0bCwgRFJNX1JFTkRFUl9B TExPVyB8IERSTV9BVVRIKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9u c19zdHJ1Y3QgdjNkX3ZtX29wcyA9IHsKLQkuZmF1bHQgPSB2M2RfZ2VtX2ZhdWx0LAotCS5vcGVu ID0gZHJtX2dlbV92bV9vcGVuLAotCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCi19OwotCiBz dGF0aWMgc3RydWN0IGRybV9kcml2ZXIgdjNkX2RybV9kcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0 dXJlcyA9IChEUklWRVJfR0VNIHwKIAkJCSAgICBEUklWRVJfUkVOREVSIHwKQEAgLTIwOCwxNiAr MTkyLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciB2M2RfZHJtX2RyaXZlciA9IHsKIAku ZGVidWdmc19pbml0ID0gdjNkX2RlYnVnZnNfaW5pdCwKICNlbmRpZgogCi0JLmdlbV9mcmVlX29i amVjdF91bmxvY2tlZCA9IHYzZF9mcmVlX29iamVjdCwKLQkuZ2VtX3ZtX29wcyA9ICZ2M2Rfdm1f b3BzLAotCisJLmdlbV9jcmVhdGVfb2JqZWN0ID0gdjNkX2NyZWF0ZV9vYmplY3QsCiAJLnByaW1l X2hhbmRsZV90b19mZCA9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAogCS5wcmltZV9mZF90 b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKLQkuZ2VtX3ByaW1lX2ltcG9y dCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAotCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9w cmltZV9leHBvcnQsCi0JLmdlbV9wcmltZV9nZXRfc2dfdGFibGUJPSB2M2RfcHJpbWVfZ2V0X3Nn X3RhYmxlLAogCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gdjNkX3ByaW1lX2ltcG9ydF9z Z190YWJsZSwKLQkuZ2VtX3ByaW1lX21tYXAgPSB2M2RfcHJpbWVfbW1hcCwKKwkuZ2VtX3ByaW1l X21tYXAgPSBkcm1fZ2VtX3ByaW1lX21tYXAsCiAKIAkuaW9jdGxzID0gdjNkX2RybV9pb2N0bHMs CiAJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHYzZF9kcm1faW9jdGxzKSwKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rf ZHJ2LmgKaW5kZXggNjU5MDZjMDVkYzljLi43YjBmZTYyNDBmN2QgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Ry di5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJt L2RybV9lbmNvZGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2dlbV9zaG1lbV9oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZ3B1X3NjaGVkdWxlci5oPgog I2luY2x1ZGUgInVhcGkvZHJtL3YzZF9kcm0uaCIKIApAQCAtMTExLDE2ICsxMTIsMTAgQEAgc3Ry dWN0IHYzZF9maWxlX3ByaXYgewogfTsKIAogc3RydWN0IHYzZF9ibyB7Ci0Jc3RydWN0IGRybV9n ZW1fb2JqZWN0IGJhc2U7Ci0KLQlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgYmFzZTsKIAogCXN0cnVjdCBkcm1fbW1fbm9kZSBub2RlOwogCi0JdTMyIHBh Z2VzX3JlZmNvdW50OwotCXN0cnVjdCBwYWdlICoqcGFnZXM7Ci0Jc3RydWN0IHNnX3RhYmxlICpz Z3Q7Ci0KIAkvKiBMaXN0IGVudHJ5IGZvciB0aGUgQk8ncyBwb3NpdGlvbiBpbgogCSAqIHYzZF9l eGVjX2luZm8tPnVucmVmX2xpc3QKIAkgKi8KQEAgLTI1OCw2ICsyNTMsNyBAQCBzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGxvbmcgbnNlY3NfdG9famlmZmllc190aW1lb3V0KGNvbnN0IHU2NCBuKQog fQogCiAvKiB2M2RfYm8uYyAqLworc3RydWN0IGRybV9nZW1fb2JqZWN0ICp2M2RfY3JlYXRlX29i amVjdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7CiB2b2lkIHYzZF9mcmVl X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopOwogc3RydWN0IHYzZF9ibyAq djNkX2JvX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdiwKIAkJCSAgICAgc2l6ZV90IHNpemUpOwpAQCAtMjY3LDEwICsyNjMsNiBAQCBpbnQg djNkX21tYXBfYm9faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJ ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHYzZF9nZXRfYm9fb2Zmc2V0 X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYpOwotdm1fZmF1bHRfdCB2M2RfZ2VtX2ZhdWx0KHN0cnVjdCB2 bV9mYXVsdCAqdm1mKTsKLWludCB2M2RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpOwotaW50IHYzZF9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1zdHJ1Y3Qgc2dfdGFibGUg KnYzZF9wcmltZV9nZXRfc2dfdGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICp2M2RfcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCQkJCQkgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAog CQkJCQkJIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92M2QvdjNkX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZ2VtLmMKaW5kZXggOTQ1 ZWFhYWFkMDE2Li5iODRkODljN2IzZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2Qv djNkX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2dlbS5jCkBAIC0yMDEsNyAr MjAxLDggQEAgdjNkX2F0dGFjaF9vYmplY3RfZmVuY2VzKHN0cnVjdCB2M2RfYm8gKipib3MsIGlu dCBib19jb3VudCwKIAogCWZvciAoaSA9IDA7IGkgPCBib19jb3VudDsgaSsrKSB7CiAJCS8qIFhY WDogVXNlIHNoYXJlZCBmZW5jZXMgZm9yIHJlYWQtb25seSBvYmplY3RzLiAqLwotCQlyZXNlcnZh dGlvbl9vYmplY3RfYWRkX2V4Y2xfZmVuY2UoYm9zW2ldLT5iYXNlLnJlc3YsIGZlbmNlKTsKKwkJ cmVzZXJ2YXRpb25fb2JqZWN0X2FkZF9leGNsX2ZlbmNlKGJvc1tpXS0+YmFzZS5iYXNlLnJlc3Ys CisJCQkJCQkgIGZlbmNlKTsKIAl9CiB9CiAKQEAgLTIzNyw3ICsyMzgsOCBAQCB2M2RfbG9ja19i b19yZXNlcnZhdGlvbnMoc3RydWN0IHYzZF9ibyAqKmJvcywKIAkgKiBiZWZvcmUgd2UgY29tbWl0 IHRoZSBDTCB0byB0aGUgaGFyZHdhcmUuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGJvX2NvdW50 OyBpKyspIHsKLQkJcmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkKGJvc1tp XS0+YmFzZS5yZXN2LCAxKTsKKwkJcmV0ID0gcmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hh cmVkKGJvc1tpXS0+YmFzZS5iYXNlLnJlc3YsCisJCQkJCQkJMSk7CiAJCWlmIChyZXQpIHsKIAkJ CXYzZF91bmxvY2tfYm9fcmVzZXJ2YXRpb25zKGJvcywgYm9fY291bnQsCiAJCQkJCQkgICBhY3F1 aXJlX2N0eCk7CkBAIC0zNDUsMTEgKzM0NywxMSBAQCB2M2RfZXhlY19jbGVhbnVwKHN0cnVjdCBr cmVmICpyZWYpCiAJZG1hX2ZlbmNlX3B1dChleGVjLT5yZW5kZXJfZG9uZV9mZW5jZSk7CiAKIAlm b3IgKGkgPSAwOyBpIDwgZXhlYy0+Ym9fY291bnQ7IGkrKykKLQkJZHJtX2dlbV9vYmplY3RfcHV0 X3VubG9ja2VkKCZleGVjLT5ib1tpXS0+YmFzZSk7CisJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxv Y2tlZCgmZXhlYy0+Ym9baV0tPmJhc2UuYmFzZSk7CiAJa3ZmcmVlKGV4ZWMtPmJvKTsKIAogCWxp c3RfZm9yX2VhY2hfZW50cnlfc2FmZShibywgc2F2ZSwgJmV4ZWMtPnVucmVmX2xpc3QsIHVucmVm X2hlYWQpIHsKLQkJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZiby0+YmFzZSk7CisJCWRy bV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmYm8tPmJhc2UuYmFzZSk7CiAJfQogCiAJcG1fcnVu dGltZV9tYXJrX2xhc3RfYnVzeSh2M2QtPmRldik7CkBAIC0zNzYsNyArMzc4LDcgQEAgdjNkX3Rm dV9qb2JfY2xlYW51cChzdHJ1Y3Qga3JlZiAqcmVmKQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUoam9iLT5ibyk7IGkrKykgewogCQlpZiAoam9iLT5ib1tpXSkKLQkJCWRybV9nZW1fb2Jq ZWN0X3B1dF91bmxvY2tlZCgmam9iLT5ib1tpXS0+YmFzZSk7CisJCQlkcm1fZ2VtX29iamVjdF9w dXRfdW5sb2NrZWQoJmpvYi0+Ym9baV0tPmJhc2UuYmFzZSk7CiAJfQogCiAJcG1fcnVudGltZV9t YXJrX2xhc3RfYnVzeSh2M2QtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2lycS5jCmluZGV4IGI4YWVhMmRm YmU4Mi4uYjRkNmFlODExODZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9p cnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9pcnEuYwpAQCAtMzcsMTIgKzM3LDE0 IEBAIHYzZF9vdmVyZmxvd19tZW1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdjNkX2Rldiwgb3ZlcmZsb3dfbWVtX3dvcmspOwogCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmdjNkLT5kcm07CiAJc3RydWN0IHYzZF9ibyAqYm8gPSB2 M2RfYm9fY3JlYXRlKGRldiwgTlVMTCAvKiBYWFg6IEdNUCAqLywgMjU2ICogMTAyNCk7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCWlm IChJU19FUlIoYm8pKSB7CiAJCURSTV9FUlJPUigiQ291bGRuJ3QgYWxsb2NhdGUgYmlubmVyIG92 ZXJmbG93IG1lbVxuIik7CiAJCXJldHVybjsKIAl9CisJb2JqID0gJmJvLT5iYXNlLmJhc2U7CiAK IAkvKiBXZSBsb3N0IGEgcmFjZSwgYW5kIG91ciB3b3JrIHRhc2sgY2FtZSBpbiBhZnRlciB0aGUg YmluIGpvYgogCSAqIGNvbXBsZXRlZCBhbmQgZXhpdGVkLiAgVGhpcyBjYW4gaGFwcGVuIGJlY2F1 c2UgdGhlIEhXCkBAIC01OSwxNSArNjEsMTUgQEAgdjNkX292ZXJmbG93X21lbV93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKIAkJZ290byBvdXQ7CiAJfQogCi0JZHJtX2dlbV9vYmplY3Rf Z2V0KCZiby0+YmFzZSk7CisJZHJtX2dlbV9vYmplY3RfZ2V0KG9iaik7CiAJbGlzdF9hZGRfdGFp bCgmYm8tPnVucmVmX2hlYWQsICZ2M2QtPmJpbl9qb2ItPnVucmVmX2xpc3QpOwogCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnYzZC0+am9iX2xvY2ssIGlycWZsYWdzKTsKIAogCVYzRF9DT1JFX1dS SVRFKDAsIFYzRF9QVEJfQlBPQSwgYm8tPm5vZGUuc3RhcnQgPDwgUEFHRV9TSElGVCk7Ci0JVjNE X0NPUkVfV1JJVEUoMCwgVjNEX1BUQl9CUE9TLCBiby0+YmFzZS5zaXplKTsKKwlWM0RfQ09SRV9X UklURSgwLCBWM0RfUFRCX0JQT1MsIG9iai0+c2l6ZSk7CiAKIG91dDoKLQlkcm1fZ2VtX29iamVj dF9wdXRfdW5sb2NrZWQoJmJvLT5iYXNlKTsKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo b2JqKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdjNkL3YzZF9tbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX21tdS5jCmluZGV4IGIw MGY5N2MzMWI3MC4uN2EyMWYxNzg3YWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdjNk L3YzZF9tbXUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9tbXUuYwpAQCAtODMsMTMg KzgzLDE0IEBAIGludCB2M2RfbW11X3NldF9wYWdlX3RhYmxlKHN0cnVjdCB2M2RfZGV2ICp2M2Qp CiAKIHZvaWQgdjNkX21tdV9pbnNlcnRfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKIHsKLQlzdHJ1 Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2Rldihiby0+YmFzZS5kZXYpOworCXN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW1fb2JqID0gJmJvLT5iYXNlOworCXN0cnVjdCB2M2RfZGV2 ICp2M2QgPSB0b192M2RfZGV2KHNobWVtX29iai0+YmFzZS5kZXYpOwogCXUzMiBwYWdlID0gYm8t Pm5vZGUuc3RhcnQ7CiAJdTMyIHBhZ2VfcHJvdCA9IFYzRF9QVEVfV1JJVEVBQkxFIHwgVjNEX1BU RV9WQUxJRDsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7 CiAKLQlmb3JfZWFjaF9zZyhiby0+c2d0LT5zZ2wsIHNnbCwgYm8tPnNndC0+bmVudHMsIGNvdW50 KSB7CisJZm9yX2VhY2hfc2coc2htZW1fb2JqLT5zZ3QtPnNnbCwgc2dsLCBzaG1lbV9vYmotPnNn dC0+bmVudHMsIGNvdW50KSB7CiAJCXUzMiBwYWdlX2FkZHJlc3MgPSBzZ19kbWFfYWRkcmVzcyhz Z2wpID4+IFYzRF9NTVVfUEFHRV9TSElGVDsKIAkJdTMyIHB0ZSA9IHBhZ2VfcHJvdCB8IHBhZ2Vf YWRkcmVzczsKIAkJdTMyIGk7CkBAIC0xMDIsNyArMTAzLDcgQEAgdm9pZCB2M2RfbW11X2luc2Vy dF9wdGVzKHN0cnVjdCB2M2RfYm8gKmJvKQogCX0KIAogCVdBUk5fT05fT05DRShwYWdlIC0gYm8t Pm5vZGUuc3RhcnQgIT0KLQkJICAgICBiby0+YmFzZS5zaXplID4+IFYzRF9NTVVfUEFHRV9TSElG VCk7CisJCSAgICAgc2htZW1fb2JqLT5iYXNlLnNpemUgPj4gVjNEX01NVV9QQUdFX1NISUZUKTsK IAogCWlmICh2M2RfbW11X2ZsdXNoX2FsbCh2M2QpKQogCQlkZXZfZXJyKHYzZC0+ZGV2LCAiTU1V IGZsdXNoIHRpbWVvdXRcbiIpOwpAQCAtMTEwLDggKzExMSw4IEBAIHZvaWQgdjNkX21tdV9pbnNl cnRfcHRlcyhzdHJ1Y3QgdjNkX2JvICpibykKIAogdm9pZCB2M2RfbW11X3JlbW92ZV9wdGVzKHN0 cnVjdCB2M2RfYm8gKmJvKQogewotCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGJv LT5iYXNlLmRldik7Ci0JdTMyIG5wYWdlcyA9IGJvLT5iYXNlLnNpemUgPj4gVjNEX01NVV9QQUdF X1NISUZUOworCXN0cnVjdCB2M2RfZGV2ICp2M2QgPSB0b192M2RfZGV2KGJvLT5iYXNlLmJhc2Uu ZGV2KTsKKwl1MzIgbnBhZ2VzID0gYm8tPmJhc2UuYmFzZS5zaXplID4+IFYzRF9NTVVfUEFHRV9T SElGVDsKIAl1MzIgcGFnZTsKIAogCWZvciAocGFnZSA9IGJvLT5ub2RlLnN0YXJ0OyBwYWdlIDwg Ym8tPm5vZGUuc3RhcnQgKyBucGFnZXM7IHBhZ2UrKykKLS0gCjIuMjAuMQoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs