From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 06/15] drm/ast: Convert AST driver to |struct drm_gem_ttm_object| Date: Mon, 8 Apr 2019 11:21:35 +0200 Message-ID: <20190408092144.4548-7-tzimmermann@suse.de> References: <20190408092144.4548-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 946EE891FB for ; Mon, 8 Apr 2019 09:21:53 +0000 (UTC) In-Reply-To: <20190408092144.4548-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 U2lnbmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0t LQogZHJpdmVycy9ncHUvZHJtL2FzdC9LY29uZmlnICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9k cm0vYXN0L2FzdF9kcnYuYyAgfCAgIDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5o ICB8ICA1MiArLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9mYi5jICAgfCAgMTgg KystLQogZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jIHwgIDc0ICsrLS0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMgfCAgNzggKysrKysrKysrLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vYXN0L2FzdF90dG0uYyAgfCAxNzIgKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiA3IGZpbGVzIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKyksIDMzMCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vYXN0L0tjb25maWcKaW5kZXggOTY0N2UxZjA3MDg4Li44ZDkwYzViMjMxYzcg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L0tjb25maWcKQEAgLTMsNyArMyw3IEBAIGNvbmZpZyBEUk1fQVNUCiAJZGVwZW5k cyBvbiBEUk0gJiYgUENJICYmIE1NVQogCXNlbGVjdCBEUk1fVFRNCiAJc2VsZWN0IERSTV9LTVNf SEVMUEVSCi0Jc2VsZWN0IERSTV9UVE0KKwlzZWxlY3QgRFJNX0dFTV9UVE1fSEVMUEVSCiAJaGVs cAogCSBTYXkgeWVzIGZvciBleHBlcmltZW50YWwgQVNUIEdQVSBkcml2ZXIuIERvIG5vdCBlbmFi bGUKIAkgdGhpcyBkcml2ZXIgd2l0aG91dCBoYXZpbmcgYSB3b3JraW5nIC1tb2Rlc2V0dGluZywK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5jIGIvZHJpdmVycy9ncHUv ZHJtL2FzdC9hc3RfZHJ2LmMKaW5kZXggMzg3MWIzOWQ0ZGVhLi5iODIwZWIxYzgzMTIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hc3QvYXN0X2Rydi5jCkBAIC0yMjgsOSArMjI4LDkgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJp dmVyIGRyaXZlciA9IHsKIAkubWlub3IgPSBEUklWRVJfTUlOT1IsCiAJLnBhdGNobGV2ZWwgPSBE UklWRVJfUEFUQ0hMRVZFTCwKIAotCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSBhc3RfZ2Vt X2ZyZWVfb2JqZWN0LAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSBkcm1fZ2VtX3R0bV9k cml2ZXJfZ2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkLAogCS5kdW1iX2NyZWF0ZSA9IGFzdF9kdW1i X2NyZWF0ZSwKLQkuZHVtYl9tYXBfb2Zmc2V0ID0gYXN0X2R1bWJfbW1hcF9vZmZzZXQsCisJLmR1 bWJfbWFwX29mZnNldCA9IGRybV9nZW1fdHRtX2RyaXZlcl9kdW1iX21tYXBfb2Zmc2V0LAogCiB9 OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9hc3QvYXN0X2Rydi5oCmluZGV4IDFjZjBjNzVlNDExZC4uOTM5YWNhYzRjYzRhIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9kcnYuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9kcnYuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGRybS90dG0v dHRtX21vZHVsZS5oPgogCiAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX2dlbV90dG1faGVscGVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRl IDxsaW51eC9pMmMtYWxnby1iaXQuaD4KQEAgLTMyMSwyNSArMzIyLDYgQEAgdm9pZCBhc3RfZmJk ZXZfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgYXN0X2ZiZGV2X3NldF9zdXNw ZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdGF0ZSk7CiB2b2lkIGFzdF9mYmRldl9z ZXRfYmFzZShzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgdW5zaWduZWQgbG9uZyBncHVfYWRkcik7 CiAKLXN0cnVjdCBhc3RfYm8gewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBibzsKLQlzdHJ1 Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7Ci0Jc3RydWN0IHR0bV9ib19rbWFwX29iaiBrbWFw OwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBnZW07Ci0Jc3RydWN0IHR0bV9wbGFjZSBwbGFjZW1l bnRzWzNdOwotCWludCBwaW5fY291bnQ7Ci19OwotI2RlZmluZSBnZW1fdG9fYXN0X2JvKGdvYmop IGNvbnRhaW5lcl9vZigoZ29iaiksIHN0cnVjdCBhc3RfYm8sIGdlbSkKLQotc3RhdGljIGlubGlu ZSBzdHJ1Y3QgYXN0X2JvICoKLWFzdF9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQot ewotCXJldHVybiBjb250YWluZXJfb2YoYm8sIHN0cnVjdCBhc3RfYm8sIGJvKTsKLX0KLQotCi0j ZGVmaW5lIHRvX2FzdF9vYmooeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhc3RfZ2VtX29iamVj dCwgYmFzZSkKLQogI2RlZmluZSBBU1RfTU1fQUxJR05fU0hJRlQgNAogI2RlZmluZSBBU1RfTU1f QUxJR05fTUFTSyAoKDEgPDwgQVNUX01NX0FMSUdOX1NISUZUKSAtIDEpCiAKQEAgLTM0Nyw0NSAr MzI5LDEzIEBAIGV4dGVybiBpbnQgYXN0X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmls ZSwKIAkJCSAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZHJtX21vZGVf Y3JlYXRlX2R1bWIgKmFyZ3MpOwogCi1leHRlcm4gdm9pZCBhc3RfZ2VtX2ZyZWVfb2JqZWN0KHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLWV4dGVybiBpbnQgYXN0X2R1bWJfbW1hcF9vZmZz ZXQoc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0J CQkJdWludDMyX3QgaGFuZGxlLAotCQkJCXVpbnQ2NF90ICpvZmZzZXQpOwotCiBpbnQgYXN0X21t X2luaXQoc3RydWN0IGFzdF9wcml2YXRlICphc3QpOwogdm9pZCBhc3RfbW1fZmluaShzdHJ1Y3Qg YXN0X3ByaXZhdGUgKmFzdCk7CiAKLWludCBhc3RfYm9fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIGludCBzaXplLCBpbnQgYWxpZ24sCi0JCSAgdWludDMyX3QgZmxhZ3MsIHN0cnVjdCBh c3RfYm8gKipwYXN0Ym8pOwotCiBpbnQgYXN0X2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIAkJICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsCiAJCSAgIHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqKm9iaik7CiAKLWludCBhc3RfYm9fcGluKHN0cnVjdCBhc3RfYm8gKmJvLCB1MzIg cGxfZmxhZywgdTY0ICpncHVfYWRkcik7Ci1pbnQgYXN0X2JvX3VucGluKHN0cnVjdCBhc3RfYm8g KmJvKTsKLQotc3RhdGljIGlubGluZSBpbnQgYXN0X2JvX3Jlc2VydmUoc3RydWN0IGFzdF9ibyAq Ym8sIGJvb2wgbm9fd2FpdCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdHRtX2JvX3Jlc2VydmUo JmJvLT5ibywgdHJ1ZSwgbm9fd2FpdCwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9 IC1FUkVTVEFSVFNZUyAmJiByZXQgIT0gLUVCVVNZKQotCQkJRFJNX0VSUk9SKCJyZXNlcnZlIGZh aWxlZCAlcFxuIiwgYm8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIGlubGluZSB2b2lkIGFzdF9ib191bnJlc2VydmUoc3RydWN0IGFzdF9ibyAqYm8pCi17Ci0J dHRtX2JvX3VucmVzZXJ2ZSgmYm8tPmJvKTsKLX0KLQotdm9pZCBhc3RfdHRtX3BsYWNlbWVudChz dHJ1Y3QgYXN0X2JvICpibywgaW50IGRvbWFpbik7Ci1pbnQgYXN0X2JvX3B1c2hfc3lzcmFtKHN0 cnVjdCBhc3RfYm8gKmJvKTsKIGludCBhc3RfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCiAvKiBhc3QgcG9zdCAqLwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9hc3QvYXN0X2ZiLmMK aW5kZXggZTcxOGQwZjYwZDZiLi4wOTc1MDE0NTFjYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hc3QvYXN0X2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfZmIuYwpAQCAt NDksNyArNDksNyBAQCBzdGF0aWMgdm9pZCBhc3RfZGlydHlfdXBkYXRlKHN0cnVjdCBhc3RfZmJk ZXYgKmFmYmRldiwKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlz dHJ1Y3QgYXN0X2JvICpibzsKKwlzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm87CiAJaW50 IHNyY19vZmZzZXQsIGRzdF9vZmZzZXQ7CiAJaW50IGJwcCA9IGFmYmRldi0+YWZiLmJhc2UuZm9y bWF0LT5jcHBbMF07CiAJaW50IHJldCA9IC1FQlVTWTsKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGlj IHZvaWQgYXN0X2RpcnR5X3VwZGF0ZShzdHJ1Y3QgYXN0X2ZiZGV2ICphZmJkZXYsCiAJdW5zaWdu ZWQgbG9uZyBmbGFnczsKIAogCW9iaiA9IGFmYmRldi0+YWZiLm9iajsKLQlibyA9IGdlbV90b19h c3RfYm8ob2JqKTsKKwlnYm8gPSBkcm1fZ2VtX3R0bV9vZl9nZW0ob2JqKTsKIAogCS8qCiAJICog dHJ5IGFuZCByZXNlcnZlIHRoZSBCTywgaWYgd2UgZmFpbCB3aXRoIGJ1c3kKQEAgLTY3LDcgKzY3 LDcgQEAgc3RhdGljIHZvaWQgYXN0X2RpcnR5X3VwZGF0ZShzdHJ1Y3QgYXN0X2ZiZGV2ICphZmJk ZXYsCiAJICogc3RvcmUgdXAgdGhlIGRhbWFnZSB1bnRpbCBsYXRlci4KIAkgKi8KIAlpZiAoZHJt X2Nhbl9zbGVlcCgpKQotCQlyZXQgPSBhc3RfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7CisJCXJldCA9 IGRybV9nZW1fdHRtX3Jlc2VydmUoZ2JvLCB0cnVlKTsKIAlpZiAocmV0KSB7CiAJCWlmIChyZXQg IT0gLUVCVVNZKQogCQkJcmV0dXJuOwpAQCAtMTAxLDExICsxMDEsMTEgQEAgc3RhdGljIHZvaWQg YXN0X2RpcnR5X3VwZGF0ZShzdHJ1Y3QgYXN0X2ZiZGV2ICphZmJkZXYsCiAJYWZiZGV2LT54MiA9 IGFmYmRldi0+eTIgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFmYmRldi0+ZGlydHlf bG9jaywgZmxhZ3MpOwogCi0JaWYgKCFiby0+a21hcC52aXJ0dWFsKSB7Ci0JCXJldCA9IHR0bV9i b19rbWFwKCZiby0+Ym8sIDAsIGJvLT5iby5udW1fcGFnZXMsICZiby0+a21hcCk7CisJaWYgKCFn Ym8tPmttYXAudmlydHVhbCkgeworCQlyZXQgPSB0dG1fYm9fa21hcCgmZ2JvLT5ibywgMCwgZ2Jv LT5iby5udW1fcGFnZXMsICZnYm8tPmttYXApOwogCQlpZiAocmV0KSB7CiAJCQlEUk1fRVJST1Io ImZhaWxlZCB0byBrbWFwIGZiIHVwZGF0ZXNcbiIpOwotCQkJYXN0X2JvX3VucmVzZXJ2ZShibyk7 CisJCQlkcm1fZ2VtX3R0bV91bnJlc2VydmUoZ2JvKTsKIAkJCXJldHVybjsKIAkJfQogCQl1bm1h cCA9IHRydWU7CkBAIC0xMTMsMTMgKzExMywxMyBAQCBzdGF0aWMgdm9pZCBhc3RfZGlydHlfdXBk YXRlKHN0cnVjdCBhc3RfZmJkZXYgKmFmYmRldiwKIAlmb3IgKGkgPSB5OyBpIDw9IHkyOyBpKysp IHsKIAkJLyogYXNzdW1lIGVxdWFsIHN0cmlkZSBmb3Igbm93ICovCiAJCXNyY19vZmZzZXQgPSBk c3Rfb2Zmc2V0ID0gaSAqIGFmYmRldi0+YWZiLmJhc2UucGl0Y2hlc1swXSArICh4ICogYnBwKTsK LQkJbWVtY3B5X3RvaW8oYm8tPmttYXAudmlydHVhbCArIHNyY19vZmZzZXQsIGFmYmRldi0+c3lz cmFtICsgc3JjX29mZnNldCwgKHgyIC0geCArIDEpICogYnBwKTsKKwkJbWVtY3B5X3RvaW8oZ2Jv LT5rbWFwLnZpcnR1YWwgKyBzcmNfb2Zmc2V0LCBhZmJkZXYtPnN5c3JhbSArIHNyY19vZmZzZXQs ICh4MiAtIHggKyAxKSAqIGJwcCk7CiAKIAl9CiAJaWYgKHVubWFwKQotCQl0dG1fYm9fa3VubWFw KCZiby0+a21hcCk7CisJCXR0bV9ib19rdW5tYXAoJmdiby0+a21hcCk7CiAKLQlhc3RfYm9fdW5y ZXNlcnZlKGJvKTsKKwlkcm1fZ2VtX3R0bV91bnJlc2VydmUoZ2JvKTsKIH0KIAogc3RhdGljIHZv aWQgYXN0X2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5j CmluZGV4IDI4NTQzOTk4NTZiYS4uM2RkMTVkMDIxYWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYXN0L2FzdF9tYWluLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5j CkBAIC01OTMsNyArNTkzLDggQEAgaW50IGFzdF9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCiAJCSAgIHUzMiBzaXplLCBib29sIGlza2VybmVsLAogCQkgICBzdHJ1Y3QgZHJtX2dl bV9vYmplY3QgKipvYmopCiB7Ci0Jc3RydWN0IGFzdF9ibyAqYXN0Ym87CisJc3RydWN0IGFzdF9w cml2YXRlICphc3QgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZ2VtX3R0bV9vYmpl Y3QgKmdibzsKIAlpbnQgcmV0OwogCiAJKm9iaiA9IE5VTEw7CkBAIC02MDIsMTMgKzYwMywxNCBA QCBpbnQgYXN0X2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoc2l6ZSA9 PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGFzdF9ib19jcmVhdGUoZGV2LCBzaXpl LCAwLCAwLCAmYXN0Ym8pOwotCWlmIChyZXQpIHsKKwlnYm8gPSBkcm1fZ2VtX3R0bV9jcmVhdGUo ZGV2LCAmYXN0LT50dG0uYmRldiwgc2l6ZSwgMCwgZmFsc2UpOworCWlmIChJU19FUlIoZ2JvKSkg eworCQlyZXQgPSBQVFJfRVJSKGdibyk7CiAJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQogCQkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgR0VNIG9iamVjdFxuIik7CiAJCXJldHVybiBy ZXQ7CiAJfQotCSpvYmogPSAmYXN0Ym8tPmdlbTsKKwkqb2JqID0gJmdiby0+Z2VtOwogCXJldHVy biAwOwogfQogCkBAIC02MTYsNjYgKzYxOCw4IEBAIGludCBhc3RfZHVtYl9jcmVhdGUoc3RydWN0 IGRybV9maWxlICpmaWxlLAogCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIHN0 cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBk cm1fZ2VtX29iamVjdCAqZ29iajsKLQl1MzIgaGFuZGxlOwotCi0JYXJncy0+cGl0Y2ggPSBhcmdz LT53aWR0aCAqICgoYXJncy0+YnBwICsgNykgLyA4KTsKLQlhcmdzLT5zaXplID0gYXJncy0+cGl0 Y2ggKiBhcmdzLT5oZWlnaHQ7Ci0KLQlyZXQgPSBhc3RfZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNp emUsIGZhbHNlLAotCQkJICAgICAmZ29iaik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQot CXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCBnb2JqLCAmaGFuZGxlKTsKLQlkcm1f Z2VtX29iamVjdF9wdXRfdW5sb2NrZWQoZ29iaik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsK LQotCWFyZ3MtPmhhbmRsZSA9IGhhbmRsZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQg YXN0X2JvX3VucmVmKHN0cnVjdCBhc3RfYm8gKipibykKLXsKLQlpZiAoKCpibykgPT0gTlVMTCkK LQkJcmV0dXJuOwotCXR0bV9ib19wdXQoJigoKmJvKS0+Ym8pKTsKLQkqYm8gPSBOVUxMOwotfQot Ci12b2lkIGFzdF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCi17 Ci0Jc3RydWN0IGFzdF9ibyAqYXN0X2JvID0gZ2VtX3RvX2FzdF9ibyhvYmopOwotCi0JYXN0X2Jv X3VucmVmKCZhc3RfYm8pOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdTY0IGFzdF9ib19tbWFwX29m ZnNldChzdHJ1Y3QgYXN0X2JvICpibykKLXsKLQlyZXR1cm4gZHJtX3ZtYV9ub2RlX29mZnNldF9h ZGRyKCZiby0+Ym8udm1hX25vZGUpOwotfQotaW50Ci1hc3RfZHVtYl9tbWFwX29mZnNldChzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUsCi0JCSAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJICAg ICB1aW50MzJfdCBoYW5kbGUsCi0JCSAgICAgdWludDY0X3QgKm9mZnNldCkKLXsKLQlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgYXN0X2JvICpibzsKLQotCW9iaiA9IGRybV9n ZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBoYW5kbGUpOwotCWlmIChvYmogPT0gTlVMTCkKLQkJcmV0 dXJuIC1FTk9FTlQ7Ci0KLQlibyA9IGdlbV90b19hc3RfYm8ob2JqKTsKLQkqb2Zmc2V0ID0gYXN0 X2JvX21tYXBfb2Zmc2V0KGJvKTsKLQotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChvYmop OwotCi0JcmV0dXJuIDA7CisJc3RydWN0IGFzdF9wcml2YXRlICphc3QgPSBkZXYtPmRldl9wcml2 YXRlOwogCisJcmV0dXJuIGRybV9nZW1fdHRtX2ZpbGxfY3JlYXRlX2R1bWIoZmlsZSwgZGV2LCAm YXN0LT50dG0uYmRldiwgMCwKKwkJCQkJICAgIGZhbHNlLCBhcmdzKTsKIH0KLQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbW9kZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfbW9kZS5jCmluZGV4IDk3ZmVkMDYyN2QxYy4uYTQ5ZmU2NjE4ZDczIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tb2RlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9h c3RfbW9kZS5jCkBAIC01MjksNTAgKzUyOSw1OSBAQCBzdGF0aWMgaW50IGFzdF9jcnRjX2RvX3Nl dF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAlzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCA9 IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJ c3RydWN0IGFzdF9mcmFtZWJ1ZmZlciAqYXN0X2ZiOwotCXN0cnVjdCBhc3RfYm8gKmJvOworCXN0 cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibzsKIAlpbnQgcmV0OwotCXU2NCBncHVfYWRkcjsK KwlzNjQgZ3B1X2FkZHI7CiAKIAkvKiBwdXNoIHRoZSBwcmV2aW91cyBmYiB0byBzeXN0ZW0gcmFt ICovCiAJaWYgKCFhdG9taWMgJiYgZmIpIHsKIAkJYXN0X2ZiID0gdG9fYXN0X2ZyYW1lYnVmZmVy KGZiKTsKIAkJb2JqID0gYXN0X2ZiLT5vYmo7Ci0JCWJvID0gZ2VtX3RvX2FzdF9ibyhvYmopOwot CQlyZXQgPSBhc3RfYm9fcmVzZXJ2ZShibywgZmFsc2UpOworCQlnYm8gPSBkcm1fZ2VtX3R0bV9v Zl9nZW0ob2JqKTsKKwkJcmV0ID0gZHJtX2dlbV90dG1fcmVzZXJ2ZShnYm8sIGZhbHNlKTsKIAkJ aWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWFzdF9ib19wdXNoX3N5c3JhbShibyk7Ci0JCWFz dF9ib191bnJlc2VydmUoYm8pOworCQlkcm1fZ2VtX3R0bV9wdXNoX3RvX3N5c3RlbShnYm8pOwor CQlkcm1fZ2VtX3R0bV91bnJlc2VydmUoZ2JvKTsKIAl9CiAKIAlhc3RfZmIgPSB0b19hc3RfZnJh bWVidWZmZXIoY3J0Yy0+cHJpbWFyeS0+ZmIpOwogCW9iaiA9IGFzdF9mYi0+b2JqOwotCWJvID0g Z2VtX3RvX2FzdF9ibyhvYmopOworCWdibyA9IGRybV9nZW1fdHRtX29mX2dlbShvYmopOwogCi0J cmV0ID0gYXN0X2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlyZXQgPSBkcm1fZ2VtX3R0bV9yZXNl cnZlKGdibywgZmFsc2UpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhc3Rf Ym9fcGluKGJvLCBUVE1fUExfRkxBR19WUkFNLCAmZ3B1X2FkZHIpOwotCWlmIChyZXQpIHsKLQkJ YXN0X2JvX3VucmVzZXJ2ZShibyk7Ci0JCXJldHVybiByZXQ7CisJcmV0ID0gZHJtX2dlbV90dG1f cGluKGdibywgVFRNX1BMX0ZMQUdfVlJBTSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZHJtX2dl bV90dG1fdW5yZXNlcnZlOworCWdwdV9hZGRyID0gZHJtX2dlbV90dG1fdnJhbV9vZmZzZXQoZ2Jv KTsKKwlpZiAoZ3B1X2FkZHIgPCAwKSB7CisJCXJldCA9IChpbnQpZ3B1X2FkZHI7CisJCWdvdG8g ZXJyX2RybV9nZW1fdHRtX3VucGluOwogCX0KIAogCWlmICgmYXN0LT5mYmRldi0+YWZiID09IGFz dF9mYikgewogCQkvKiBpZiBwdXNoaW5nIGNvbnNvbGUgaW4ga21hcCBpdCAqLwotCQlyZXQgPSB0 dG1fYm9fa21hcCgmYm8tPmJvLCAwLCBiby0+Ym8ubnVtX3BhZ2VzLCAmYm8tPmttYXApOworCQly ZXQgPSB0dG1fYm9fa21hcCgmZ2JvLT5ibywgMCwgZ2JvLT5iby5udW1fcGFnZXMsICZnYm8tPmtt YXApOwogCQlpZiAocmV0KQogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8ga21hcCBmYmNvblxuIik7 CiAJCWVsc2UKIAkJCWFzdF9mYmRldl9zZXRfYmFzZShhc3QsIGdwdV9hZGRyKTsKIAl9Ci0JYXN0 X2JvX3VucmVzZXJ2ZShibyk7CisJZHJtX2dlbV90dG1fdW5yZXNlcnZlKGdibyk7CiAKIAlhc3Rf c2V0X29mZnNldF9yZWcoY3J0Yyk7CiAJYXN0X3NldF9zdGFydF9hZGRyZXNzX2NydDEoY3J0Yywg KHUzMilncHVfYWRkcik7CiAKIAlyZXR1cm4gMDsKKworZXJyX2RybV9nZW1fdHRtX3VucGluOgor CWRybV9nZW1fdHRtX3VucGluKGdibyk7CitlcnJfZHJtX2dlbV90dG1fdW5yZXNlcnZlOgorCWRy bV9nZW1fdHRtX3VucmVzZXJ2ZShnYm8pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQg YXN0X2NydGNfbW9kZV9zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQg eSwKQEAgLTYyNSwxNCArNjM0LDEzIEBAIHN0YXRpYyB2b2lkIGFzdF9jcnRjX2Rpc2FibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQogCWlmIChjcnRjLT5wcmltYXJ5LT5mYikgewogCQlzdHJ1Y3Qg YXN0X2ZyYW1lYnVmZmVyICphc3RfZmIgPSB0b19hc3RfZnJhbWVidWZmZXIoY3J0Yy0+cHJpbWFy eS0+ZmIpOwogCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IGFzdF9mYi0+b2JqOwotCQlz dHJ1Y3QgYXN0X2JvICpibyA9IGdlbV90b19hc3RfYm8ob2JqKTsKKwkJc3RydWN0IGRybV9nZW1f dHRtX29iamVjdCAqZ2JvID0gZHJtX2dlbV90dG1fb2ZfZ2VtKG9iaik7CiAKLQkJcmV0ID0gYXN0 X2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwkJcmV0ID0gZHJtX2dlbV90dG1fcmVzZXJ2ZShnYm8s IGZhbHNlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybjsKLQotCQlhc3RfYm9fcHVzaF9zeXNyYW0o Ym8pOwotCQlhc3RfYm9fdW5yZXNlcnZlKGJvKTsKKwkJZHJtX2dlbV90dG1fcHVzaF90b19zeXN0 ZW0oZ2JvKTsKKwkJZHJtX2dlbV90dG1fdW5yZXNlcnZlKGdibyk7CiAJfQogCWNydGMtPnByaW1h cnktPmZiID0gTlVMTDsKIH0KQEAgLTkxOCwyNiArOTI2LDMyIEBAIHN0YXRpYyBpbnQgYXN0X2N1 cnNvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJaW50IHNpemU7CiAJaW50IHJldDsK IAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgYXN0X2JvICpibzsKLQl1aW50 NjRfdCBncHVfYWRkcjsKKwlzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm87CisJczY0IGdw dV9hZGRyOwogCiAJc2l6ZSA9IChBU1RfSFdDX1NJWkUgKyBBU1RfSFdDX1NJR05BVFVSRV9TSVpF KSAqIEFTVF9ERUZBVUxUX0hXQ19OVU07CiAKIAlyZXQgPSBhc3RfZ2VtX2NyZWF0ZShkZXYsIHNp emUsIHRydWUsICZvYmopOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7Ci0JYm8gPSBnZW1fdG9f YXN0X2JvKG9iaik7Ci0JcmV0ID0gYXN0X2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlnYm8gPSBk cm1fZ2VtX3R0bV9vZl9nZW0ob2JqKTsKKwlyZXQgPSBkcm1fZ2VtX3R0bV9yZXNlcnZlKGdibywg ZmFsc2UpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gZmFpbDsKIAotCXJldCA9 IGFzdF9ib19waW4oYm8sIFRUTV9QTF9GTEFHX1ZSQU0sICZncHVfYWRkcik7Ci0JYXN0X2JvX3Vu cmVzZXJ2ZShibyk7CisJcmV0ID0gZHJtX2dlbV90dG1fcGluKGdibywgVFRNX1BMX0ZMQUdfVlJB TSk7CisJZHJtX2dlbV90dG1fdW5yZXNlcnZlKGdibyk7CiAJaWYgKHJldCkKIAkJZ290byBmYWls OworCWdwdV9hZGRyID0gZHJtX2dlbV90dG1fdnJhbV9vZmZzZXQoZ2JvKTsKKwlpZiAoZ3B1X2Fk ZHIgPCAwKSB7CisJCWRybV9nZW1fdHRtX3VucGluKGdibyk7CisJCXJldCA9IChpbnQpZ3B1X2Fk ZHI7CisJCWdvdG8gZmFpbDsKKwl9CiAKIAkvKiBrbWFwIHRoZSBvYmplY3QgKi8KLQlyZXQgPSB0 dG1fYm9fa21hcCgmYm8tPmJvLCAwLCBiby0+Ym8ubnVtX3BhZ2VzLCAmYXN0LT5jYWNoZV9rbWFw KTsKKwlyZXQgPSB0dG1fYm9fa21hcCgmZ2JvLT5ibywgMCwgZ2JvLT5iby5udW1fcGFnZXMsICZh c3QtPmNhY2hlX2ttYXApOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIApAQCAtMTE3Myw4ICsx MTg3LDggQEAgc3RhdGljIGludCBhc3RfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMs CiAJc3RydWN0IGFzdF9wcml2YXRlICphc3QgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwogCXN0 cnVjdCBhc3RfY3J0YyAqYXN0X2NydGMgPSB0b19hc3RfY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKm9iajsKLQlzdHJ1Y3QgYXN0X2JvICpibzsKLQl1aW50NjRfdCBncHVfYWRk cjsKKwlzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm87CisJczY0IGdwdV9hZGRyOwogCXUz MiBjc3VtOwogCWludCByZXQ7CiAJc3RydWN0IHR0bV9ib19rbWFwX29iaiB1b2JqX21hcDsKQEAg LTExOTMsMTMgKzEyMDcsMTMgQEAgc3RhdGljIGludCBhc3RfY3Vyc29yX3NldChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCiAJCURSTV9FUlJPUigiQ2Fubm90IGZpbmQgY3Vyc29yIG9iamVjdCAleCBm b3IgY3J0Y1xuIiwgaGFuZGxlKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWJvID0gZ2VtX3Rv X2FzdF9ibyhvYmopOworCWdibyA9IGRybV9nZW1fdHRtX29mX2dlbShvYmopOwogCi0JcmV0ID0g YXN0X2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKKwlyZXQgPSBkcm1fZ2VtX3R0bV9yZXNlcnZlKGdi bywgZmFsc2UpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbDsKIAotCXJldCA9IHR0bV9ib19rbWFw KCZiby0+Ym8sIDAsIGJvLT5iby5udW1fcGFnZXMsICZ1b2JqX21hcCk7CisJcmV0ID0gdHRtX2Jv X2ttYXAoJmdiby0+Ym8sIDAsIGdiby0+Ym8ubnVtX3BhZ2VzLCAmdW9ial9tYXApOwogCiAJc3Jj ID0gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJnVvYmpfbWFwLCAmc3JjX2lzaW9tZW0pOwogCWRzdCA9 IHR0bV9rbWFwX29ial92aXJ0dWFsKCZhc3QtPmNhY2hlX2ttYXAsICZkc3RfaXNpb21lbSk7CkBA IC0xMjE2LDcgKzEyMzAsNyBAQCBzdGF0aWMgaW50IGFzdF9jdXJzb3Jfc2V0KHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKIAogCS8qIHdyaXRlIGNoZWNrc3VtICsgc2lnbmF0dXJlICovCiAJdHRtX2Jv X2t1bm1hcCgmdW9ial9tYXApOwotCWFzdF9ib191bnJlc2VydmUoYm8pOworCWRybV9nZW1fdHRt X3VucmVzZXJ2ZShnYm8pOwogCXsKIAkJdTggKmRzdCA9ICh1OCAqKWFzdC0+Y2FjaGVfa21hcC52 aXJ0dWFsICsgKEFTVF9IV0NfU0laRSArIEFTVF9IV0NfU0lHTkFUVVJFX1NJWkUpKmFzdC0+bmV4 dF9jdXJzb3IgKyBBU1RfSFdDX1NJWkU7CiAJCXdyaXRlbChjc3VtLCBkc3QpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXN0L2Fz dF90dG0uYwppbmRleCA3NWQ0NzdiMzc4NTQuLmZkNTg3YzhmYjhmNyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FzdC9hc3RfdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3Rf dHRtLmMKQEAgLTM2LDIzICszNiw2IEBAIGFzdF9iZGV2KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpi ZCkKIAlyZXR1cm4gY29udGFpbmVyX29mKGJkLCBzdHJ1Y3QgYXN0X3ByaXZhdGUsIHR0bS5iZGV2 KTsKIH0KIAotc3RhdGljIHZvaWQgYXN0X2JvX3R0bV9kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqdGJvKQotewotCXN0cnVjdCBhc3RfYm8gKmJvOwotCi0JYm8gPSBjb250YWluZXJf b2YodGJvLCBzdHJ1Y3QgYXN0X2JvLCBibyk7Ci0KLQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZi by0+Z2VtKTsKLQlrZnJlZShibyk7Ci19Ci0KLXN0YXRpYyBib29sIGFzdF90dG1fYm9faXNfYXN0 X2JvKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCi17Ci0JaWYgKGJvLT5kZXN0cm95ID09 ICZhc3RfYm9fdHRtX2Rlc3Ryb3kpCi0JCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0K LQogc3RhdGljIGludAogYXN0X2JvX2luaXRfbWVtX3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2Ug KmJkZXYsIHVpbnQzMl90IHR5cGUsCiAJCSAgICAgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2Vy ICptYW4pCkBAIC03OCwyNiArNjEsNiBAQCBhc3RfYm9faW5pdF9tZW1fdHlwZShzdHJ1Y3QgdHRt X2JvX2RldmljZSAqYmRldiwgdWludDMyX3QgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGlj IHZvaWQKLWFzdF9ib19ldmljdF9mbGFncyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBz dHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGwpCi17Ci0Jc3RydWN0IGFzdF9ibyAqYXN0Ym8gPSBhc3Rf Ym8oYm8pOwotCi0JaWYgKCFhc3RfdHRtX2JvX2lzX2FzdF9ibyhibykpCi0JCXJldHVybjsKLQot CWFzdF90dG1fcGxhY2VtZW50KGFzdGJvLCBUVE1fUExfRkxBR19TWVNURU0pOwotCSpwbCA9IGFz dGJvLT5wbGFjZW1lbnQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXN0X2JvX3ZlcmlmeV9hY2Nlc3Moc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0 IGFzdF9ibyAqYXN0Ym8gPSBhc3RfYm8oYm8pOwotCi0JcmV0dXJuIGRybV92bWFfbm9kZV92ZXJp ZnlfYWNjZXNzKCZhc3Riby0+Z2VtLnZtYV9ub2RlLAotCQkJCQkgIGZpbHAtPnByaXZhdGVfZGF0 YSk7Ci19Ci0KIHN0YXRpYyBpbnQgYXN0X3R0bV9pb19tZW1fcmVzZXJ2ZShzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldiwKIAkJCQkgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQogewpAQCAtMTYy LDkgKzEyNSw5IEBAIHN0cnVjdCB0dG1fYm9fZHJpdmVyIGFzdF9ib19kcml2ZXIgPSB7CiAJLnR0 bV90dF9jcmVhdGUgPSBhc3RfdHRtX3R0X2NyZWF0ZSwKIAkuaW5pdF9tZW1fdHlwZSA9IGFzdF9i b19pbml0X21lbV90eXBlLAogCS5ldmljdGlvbl92YWx1YWJsZSA9IHR0bV9ib19ldmljdGlvbl92 YWx1YWJsZSwKLQkuZXZpY3RfZmxhZ3MgPSBhc3RfYm9fZXZpY3RfZmxhZ3MsCisJLmV2aWN0X2Zs YWdzID0gZHJtX2dlbV90dG1fYm9fZHJpdmVyX2V2aWN0X2ZsYWdzLAogCS5tb3ZlID0gTlVMTCwK LQkudmVyaWZ5X2FjY2VzcyA9IGFzdF9ib192ZXJpZnlfYWNjZXNzLAorCS52ZXJpZnlfYWNjZXNz ID0gZHJtX2dlbV90dG1fYm9fZHJpdmVyX3ZlcmlmeV9hY2Nlc3MsCiAJLmlvX21lbV9yZXNlcnZl ID0gJmFzdF90dG1faW9fbWVtX3Jlc2VydmUsCiAJLmlvX21lbV9mcmVlID0gJmFzdF90dG1faW9f bWVtX2ZyZWUsCiB9OwpAQCAtMjEwLDEzNyArMTczLDYgQEAgdm9pZCBhc3RfbW1fZmluaShzdHJ1 Y3QgYXN0X3ByaXZhdGUgKmFzdCkKIAkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMCkp OwogfQogCi12b2lkIGFzdF90dG1fcGxhY2VtZW50KHN0cnVjdCBhc3RfYm8gKmJvLCBpbnQgZG9t YWluKQotewotCXUzMiBjID0gMDsKLQl1bnNpZ25lZCBpOwotCi0JYm8tPnBsYWNlbWVudC5wbGFj ZW1lbnQgPSBiby0+cGxhY2VtZW50czsKLQliby0+cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0g Ym8tPnBsYWNlbWVudHM7Ci0JaWYgKGRvbWFpbiAmIFRUTV9QTF9GTEFHX1ZSQU0pCi0JCWJvLT5w bGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfRkxBR19XQyB8IFRUTV9QTF9GTEFHX1VOQ0FD SEVEIHwgVFRNX1BMX0ZMQUdfVlJBTTsKLQlpZiAoZG9tYWluICYgVFRNX1BMX0ZMQUdfU1lTVEVN KQotCQliby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0gVFRNX1BMX0ZMQUdfQ0FDSEVEIHwgVFRN X1BMX0ZMQUdfU1lTVEVNOwotCWlmICghYykKLQkJYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9 IFRUTV9QTF9GTEFHX0NBQ0hFRCB8IFRUTV9QTF9GTEFHX1NZU1RFTTsKLQliby0+cGxhY2VtZW50 Lm51bV9wbGFjZW1lbnQgPSBjOwotCWJvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0g YzsKLQlmb3IgKGkgPSAwOyBpIDwgYzsgKytpKSB7Ci0JCWJvLT5wbGFjZW1lbnRzW2ldLmZwZm4g PSAwOwotCQliby0+cGxhY2VtZW50c1tpXS5scGZuID0gMDsKLQl9Ci19Ci0KLWludCBhc3RfYm9f Y3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzaXplLCBpbnQgYWxpZ24sCi0JCSAg dWludDMyX3QgZmxhZ3MsIHN0cnVjdCBhc3RfYm8gKipwYXN0Ym8pCi17Ci0Jc3RydWN0IGFzdF9w cml2YXRlICphc3QgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBhc3RfYm8gKmFzdGJvOwot CXNpemVfdCBhY2Nfc2l6ZTsKLQlpbnQgcmV0OwotCi0JYXN0Ym8gPSBremFsbG9jKHNpemVvZihz dHJ1Y3QgYXN0X2JvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhc3RibykKLQkJcmV0dXJuIC1FTk9N RU07Ci0KLQlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgJmFzdGJvLT5nZW0sIHNpemUp OwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3I7Ci0KLQlhc3Riby0+Ym8uYmRldiA9ICZhc3QtPnR0 bS5iZGV2OwotCi0JYXN0X3R0bV9wbGFjZW1lbnQoYXN0Ym8sIFRUTV9QTF9GTEFHX1ZSQU0gfCBU VE1fUExfRkxBR19TWVNURU0pOwotCi0JYWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKCZh c3QtPnR0bS5iZGV2LCBzaXplLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGFzdF9ibykpOwot Ci0JcmV0ID0gdHRtX2JvX2luaXQoJmFzdC0+dHRtLmJkZXYsICZhc3Riby0+Ym8sIHNpemUsCi0J CQkgIHR0bV9ib190eXBlX2RldmljZSwgJmFzdGJvLT5wbGFjZW1lbnQsCi0JCQkgIGFsaWduID4+ IFBBR0VfU0hJRlQsIGZhbHNlLCBhY2Nfc2l6ZSwKLQkJCSAgTlVMTCwgTlVMTCwgYXN0X2JvX3R0 bV9kZXN0cm95KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yOwotCi0JKnBhc3RibyA9IGFzdGJv OwotCXJldHVybiAwOwotZXJyb3I6Ci0Ja2ZyZWUoYXN0Ym8pOwotCXJldHVybiByZXQ7Ci19Ci0K LXN0YXRpYyBpbmxpbmUgdTY0IGFzdF9ib19ncHVfb2Zmc2V0KHN0cnVjdCBhc3RfYm8gKmJvKQot ewotCXJldHVybiBiby0+Ym8ub2Zmc2V0OwotfQotCi1pbnQgYXN0X2JvX3BpbihzdHJ1Y3QgYXN0 X2JvICpibywgdTMyIHBsX2ZsYWcsIHU2NCAqZ3B1X2FkZHIpCi17Ci0Jc3RydWN0IHR0bV9vcGVy YXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07Ci0JaW50IGksIHJldDsKLQotCWlmIChi by0+cGluX2NvdW50KSB7Ci0JCWJvLT5waW5fY291bnQrKzsKLQkJaWYgKGdwdV9hZGRyKQotCQkJ KmdwdV9hZGRyID0gYXN0X2JvX2dwdV9vZmZzZXQoYm8pOwotCX0KLQotCWFzdF90dG1fcGxhY2Vt ZW50KGJvLCBwbF9mbGFnKTsKLQlmb3IgKGkgPSAwOyBpIDwgYm8tPnBsYWNlbWVudC5udW1fcGxh Y2VtZW50OyBpKyspCi0JCWJvLT5wbGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9GTEFHX05P X0VWSUNUOwotCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPmJvLCAmYm8tPnBsYWNlbWVudCwg JmN0eCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCWJvLT5waW5fY291bnQgPSAxOwot CWlmIChncHVfYWRkcikKLQkJKmdwdV9hZGRyID0gYXN0X2JvX2dwdV9vZmZzZXQoYm8pOwotCXJl dHVybiAwOwotfQotCi1pbnQgYXN0X2JvX3VucGluKHN0cnVjdCBhc3RfYm8gKmJvKQotewotCXN0 cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9OwotCWludCBpOwot CWlmICghYm8tPnBpbl9jb3VudCkgewotCQlEUk1fRVJST1IoInVucGluIGJhZCAlcFxuIiwgYm8p OwotCQlyZXR1cm4gMDsKLQl9Ci0JYm8tPnBpbl9jb3VudC0tOwotCWlmIChiby0+cGluX2NvdW50 KQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFj ZW1lbnQgOyBpKyspCi0JCWJvLT5wbGFjZW1lbnRzW2ldLmZsYWdzICY9IH5UVE1fUExfRkxBR19O T19FVklDVDsKLQlyZXR1cm4gdHRtX2JvX3ZhbGlkYXRlKCZiby0+Ym8sICZiby0+cGxhY2VtZW50 LCAmY3R4KTsKLX0KLQotaW50IGFzdF9ib19wdXNoX3N5c3JhbShzdHJ1Y3QgYXN0X2JvICpibykK LXsKLQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKLQlp bnQgaSwgcmV0OwotCWlmICghYm8tPnBpbl9jb3VudCkgewotCQlEUk1fRVJST1IoInVucGluIGJh ZCAlcFxuIiwgYm8pOwotCQlyZXR1cm4gMDsKLQl9Ci0JYm8tPnBpbl9jb3VudC0tOwotCWlmIChi by0+cGluX2NvdW50KQotCQlyZXR1cm4gMDsKLQotCWlmIChiby0+a21hcC52aXJ0dWFsKQotCQl0 dG1fYm9fa3VubWFwKCZiby0+a21hcCk7Ci0KLQlhc3RfdHRtX3BsYWNlbWVudChibywgVFRNX1BM X0ZMQUdfU1lTVEVNKTsKLQlmb3IgKGkgPSAwOyBpIDwgYm8tPnBsYWNlbWVudC5udW1fcGxhY2Vt ZW50IDsgaSsrKQotCQliby0+cGxhY2VtZW50c1tpXS5mbGFncyB8PSBUVE1fUExfRkxBR19OT19F VklDVDsKLQotCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPmJvLCAmYm8tPnBsYWNlbWVudCwg JmN0eCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoInB1c2hpbmcgdG8gVlJBTSBmYWlsZWRc biIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQogaW50IGFzdF9tbWFwKHN0 cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLS0gCjIuMjEuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs