From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH 12/15] drm/vboxvideo: Convert vboxvideo driver to |struct drm_gem_ttm_object| Date: Mon, 8 Apr 2019 11:21:41 +0200 Message-ID: <20190408092144.4548-13-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 2CC36897EF for ; Mon, 8 Apr 2019 09:21:57 +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 VGhpcyBwYXRjaCByZXBsYWNlcyB8c3RydWN0IHZib3hfYm98IGFuZCBpdHMgaGVscGVycyB3aXRo IHRoZSBnZW5lcmljCmltcGxlbWVudGF0aW9uIG9mIHxzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0 fC4gVGhlIG9ubHkgY2hhbmdlIGluCnNlbWFudGljcyBpcyB0aGF0ICZ0dG1fYm9fZHJpdmVyLnZl cmlmeV9hY2Nlc3MoKSBub3cgZG9lcyB0aGUgYWN0dWFsCnZlcmlmaWNhdGlvbi4KClNpZ25lZC1v ZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIGRyaXZl cnMvZ3B1L2RybS92Ym94dmlkZW8vS2NvbmZpZyAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJt L3Zib3h2aWRlby92Ym94X2Rydi5jICB8ICAgNSArLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRl by92Ym94X2Rydi5oICB8ICA1OCArLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zi b3hfZmIuYyAgIHwgIDIyICstLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21haW4u YyB8ICA3MCArLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYyB8 ICAzNiArKystLQogZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X3R0bS5jICB8IDIyMyAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25z KCspLCAzNzAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2 aWRlby9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby9LY29uZmlnCmluZGV4IDFm NDE4MmUyZTk4MC4uYzFjYTg3ZGY4MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJv eHZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby9LY29uZmlnCkBA IC0zLDYgKzMsNyBAQCBjb25maWcgRFJNX1ZCT1hWSURFTwogCWRlcGVuZHMgb24gRFJNICYmIFg4 NiAmJiBQQ0kKIAlzZWxlY3QgRFJNX0tNU19IRUxQRVIKIAlzZWxlY3QgRFJNX1RUTQorCXNlbGVj dCBEUk1fR0VNX1RUTV9IRUxQRVIKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKIAloZWxwCiAJ ICBUaGlzIGlzIGEgS01TIGRyaXZlciBmb3IgdGhlIHZpcnR1YWwgR3JhcGhpY3MgQ2FyZCB1c2Vk IGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmMKaW5kZXggZmI2YTBmMGI4MTY3Li43 NWIxNjUzODY5MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9k cnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmMKQEAgLTIxNSw5 ICsyMTUsMTAgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkubWlub3Ig PSBEUklWRVJfTUlOT1IsCiAJLnBhdGNobGV2ZWwgPSBEUklWRVJfUEFUQ0hMRVZFTCwKIAotCS5n ZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPSB2Ym94X2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX2Zy ZWVfb2JqZWN0X3VubG9ja2VkID0KKwkJZHJtX2dlbV90dG1fZHJpdmVyX2dlbV9mcmVlX29iamVj dF91bmxvY2tlZCwKIAkuZHVtYl9jcmVhdGUgPSB2Ym94X2R1bWJfY3JlYXRlLAotCS5kdW1iX21h cF9vZmZzZXQgPSB2Ym94X2R1bWJfbW1hcF9vZmZzZXQsCisJLmR1bWJfbWFwX29mZnNldCA9IGRy bV9nZW1fdHRtX2RyaXZlcl9kdW1iX21tYXBfb2Zmc2V0LAogCS5wcmltZV9oYW5kbGVfdG9fZmQg PSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJt X2dlbV9wcmltZV9mZF90b19oYW5kbGUsCiAJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2VtX3By aW1lX2V4cG9ydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuaAppbmRleCBlY2UzMWYz OTU1NDAuLjdkYjRlOTYxODA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRl by92Ym94X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuaApA QCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgogI2luY2x1ZGUg PGRybS9kcm1fZmJfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2dlbV90dG1faGVscGVyLmg+CiAKICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19h cGkuaD4KICNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIuaD4KQEAgLTE3MCw3MyArMTcx LDE2IEBAIGludCB2Ym94ZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCiAJ CSAgc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFjZV9zaXplICpzaXplcyk7CiB2b2lkIHZib3hf ZmJkZXZfZmluaShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94KTsKIAotc3RydWN0IHZib3hfYm8g ewotCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCBibzsKLQlzdHJ1Y3QgdHRtX3BsYWNlbWVudCBw bGFjZW1lbnQ7Ci0Jc3RydWN0IHR0bV9ib19rbWFwX29iaiBrbWFwOwotCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCBnZW07Ci0Jc3RydWN0IHR0bV9wbGFjZSBwbGFjZW1lbnRzWzNdOwotCWludCBwaW5f Y291bnQ7Ci19OwotCi0jZGVmaW5lIGdlbV90b192Ym94X2JvKGdvYmopIGNvbnRhaW5lcl9vZigo Z29iaiksIHN0cnVjdCB2Ym94X2JvLCBnZW0pCi0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHZib3hf Ym8gKnZib3hfYm8oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKLXsKLQlyZXR1cm4gY29u dGFpbmVyX29mKGJvLCBzdHJ1Y3QgdmJveF9ibywgYm8pOwotfQotCi0jZGVmaW5lIHRvX3Zib3hf b2JqKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdmJveF9nZW1fb2JqZWN0LCBiYXNlKQotCi1z dGF0aWMgaW5saW5lIHU2NCB2Ym94X2JvX2dwdV9vZmZzZXQoc3RydWN0IHZib3hfYm8gKmJvKQot ewotCXJldHVybiBiby0+Ym8ub2Zmc2V0OwotfQotCiBpbnQgdmJveF9kdW1iX2NyZWF0ZShzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCSAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAg ICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwogCi12b2lkIHZib3hfZ2VtX2Zy ZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKLWludCB2Ym94X2R1bWJfbW1h cF9vZmZzZXQoc3RydWN0IGRybV9maWxlICpmaWxlLAotCQkJICBzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAotCQkJICB1MzIgaGFuZGxlLCB1NjQgKm9mZnNldCk7Ci0KIGludCB2Ym94X21tX2luaXQo c3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCk7CiB2b2lkIHZib3hfbW1fZmluaShzdHJ1Y3QgdmJv eF9wcml2YXRlICp2Ym94KTsKIAotaW50IHZib3hfYm9fY3JlYXRlKHN0cnVjdCB2Ym94X3ByaXZh dGUgKnZib3gsIGludCBzaXplLCBpbnQgYWxpZ24sCi0JCSAgIHUzMiBmbGFncywgc3RydWN0IHZi b3hfYm8gKipwdmJveGJvKTsKLQogaW50IHZib3hfZ2VtX2NyZWF0ZShzdHJ1Y3QgdmJveF9wcml2 YXRlICp2Ym94LAogCQkgICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsIHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqKm9iaik7Ci0KLWludCB2Ym94X2JvX3BpbihzdHJ1Y3QgdmJveF9ibyAqYm8sIHUz MiBwbF9mbGFnKTsKLWludCB2Ym94X2JvX3VucGluKHN0cnVjdCB2Ym94X2JvICpibyk7Ci0KLXN0 YXRpYyBpbmxpbmUgaW50IHZib3hfYm9fcmVzZXJ2ZShzdHJ1Y3QgdmJveF9ibyAqYm8sIGJvb2wg bm9fd2FpdCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdHRtX2JvX3Jlc2VydmUoJmJvLT5ibywg dHJ1ZSwgbm9fd2FpdCwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlpZiAocmV0ICE9IC1FUkVTVEFS VFNZUyAmJiByZXQgIT0gLUVCVVNZKQotCQkJRFJNX0VSUk9SKCJyZXNlcnZlIGZhaWxlZCAlcFxu IiwgYm8pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGlu ZSB2b2lkIHZib3hfYm9fdW5yZXNlcnZlKHN0cnVjdCB2Ym94X2JvICpibykKLXsKLQl0dG1fYm9f dW5yZXNlcnZlKCZiby0+Ym8pOwotfQotCi12b2lkIHZib3hfdHRtX3BsYWNlbWVudChzdHJ1Y3Qg dmJveF9ibyAqYm8sIGludCBkb21haW4pOwotaW50IHZib3hfYm9fcHVzaF9zeXNyYW0oc3RydWN0 IHZib3hfYm8gKmJvKTsKIGludCB2Ym94X21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKTsKLXZvaWQgKnZib3hfYm9fa21hcChzdHJ1Y3QgdmJveF9ibyAq Ym8pOwotdm9pZCB2Ym94X2JvX2t1bm1hcChzdHJ1Y3QgdmJveF9ibyAqYm8pOwogCiAvKiB2Ym94 X3ByaW1lLmMgKi8KIGludCB2Ym94X2dlbV9wcmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2ZiLmMg Yi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZmIuYwppbmRleCBiNzI0ZmU3YzBjMzAu LjFjZjBjNmJkNThiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94 X2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X2ZiLmMKQEAgLTUxLDkg KzUxLDkgQEAgaW50IHZib3hmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwK IAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7Ci0Jc3RydWN0IHZib3hfYm8gKmJvOworCXN0cnVj dCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibzsKIAlpbnQgc2l6ZSwgcmV0OwotCXU2NCBncHVfYWRk cjsKKwlzNjQgZ3B1X2FkZHI7CiAJdTMyIHBpdGNoOwogCiAJbW9kZV9jbWQud2lkdGggPSBzaXpl cy0+c3VyZmFjZV93aWR0aDsKQEAgLTc1LDkgKzc1LDkgQEAgaW50IHZib3hmYl9jcmVhdGUoc3Ry dWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0J Ym8gPSBnZW1fdG9fdmJveF9ibyhnb2JqKTsKKwlnYm8gPSBkcm1fZ2VtX3R0bV9vZl9nZW0oZ29i aik7CiAKLQlyZXQgPSB2Ym94X2JvX3BpbihibywgVFRNX1BMX0ZMQUdfVlJBTSk7CisJcmV0ID0g ZHJtX2dlbV90dG1fcGluKGdibywgVFRNX1BMX0ZMQUdfVlJBTSk7CiAJaWYgKHJldCkKIAkJcmV0 dXJuIHJldDsKIApAQCAtODYsNyArODYsNyBAQCBpbnQgdmJveGZiX2NyZWF0ZShzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqaGVscGVyLAogCQlyZXR1cm4gUFRSX0VSUihpbmZvKTsKIAogCWluZm8tPnNj cmVlbl9zaXplID0gc2l6ZTsKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyIF9faW9tZW0gKil2 Ym94X2JvX2ttYXAoYm8pOworCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKWRy bV9nZW1fdHRtX2ttYXAoZ2JvLCB0cnVlKTsKIAlpZiAoSVNfRVJSKGluZm8tPnNjcmVlbl9iYXNl KSkKIAkJcmV0dXJuIFBUUl9FUlIoaW5mby0+c2NyZWVuX2Jhc2UpOwogCkBAIC0xMDQsNyArMTA0 LDkgQEAgaW50IHZib3hmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAog CWRybV9mYl9oZWxwZXJfZmlsbF9pbmZvKGluZm8sIGhlbHBlciwgc2l6ZXMpOwogCi0JZ3B1X2Fk ZHIgPSB2Ym94X2JvX2dwdV9vZmZzZXQoYm8pOworCWdwdV9hZGRyID0gZHJtX2dlbV90dG1fdnJh bV9vZmZzZXQoZ2JvKTsKKwlpZiAoZ3B1X2FkZHIgPCAwKQorCQlyZXR1cm4gKGludClncHVfYWRk cjsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJh c2UgKyBncHVfYWRkcjsKIAlpbmZvLT5maXguc21lbV9sZW4gPSB2Ym94LT5hdmFpbGFibGVfdnJh bV9zaXplIC0gZ3B1X2FkZHI7CiAKQEAgLTEzMiwxMiArMTM0LDEwIEBAIHZvaWQgdmJveF9mYmRl dl9maW5pKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gpCiAJZHJtX2ZiX2hlbHBlcl91bnJlZ2lz dGVyX2ZiaSgmdmJveC0+ZmJfaGVscGVyKTsKIAogCWlmIChhZmItPm9iaikgewotCQlzdHJ1Y3Qg dmJveF9ibyAqYm8gPSBnZW1fdG9fdmJveF9ibyhhZmItPm9iaik7CisJCXN0cnVjdCBkcm1fZ2Vt X3R0bV9vYmplY3QgKmdibyA9IGRybV9nZW1fdHRtX29mX2dlbShhZmItPm9iaik7CiAKLQkJdmJv eF9ib19rdW5tYXAoYm8pOwotCi0JCWlmIChiby0+cGluX2NvdW50KQotCQkJdmJveF9ib191bnBp bihibyk7CisJCWRybV9nZW1fdHRtX2t1bm1hcChnYm8pOworCQlkcm1fZ2VtX3R0bV91bnBpbihn Ym8pOwogCiAJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChhZmItPm9iaik7CiAJCWFmYi0+ b2JqID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9t YWluLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbWFpbi5jCmluZGV4IGY0ZDAy ZGU1NTE4YS4uMGMzZWRlMDU4ZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZp ZGVvL3Zib3hfbWFpbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWlu LmMKQEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIHZib3hfaHdfZmluaShzdHJ1Y3QgdmJveF9wcml2 YXRlICp2Ym94KQogaW50IHZib3hfZ2VtX2NyZWF0ZShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94 LAogCQkgICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Km9iaikKIHsKLQlzdHJ1Y3QgdmJveF9ibyAqdmJveGJvOworCXN0cnVjdCBkcm1fZ2VtX3R0bV9v YmplY3QgKmdibzsKIAlpbnQgcmV0OwogCiAJKm9iaiA9IE5VTEw7CkBAIC0yODMsMTQgKzI4Mywx NSBAQCBpbnQgdmJveF9nZW1fY3JlYXRlKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gsCiAJaWYg KHNpemUgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSB2Ym94X2JvX2NyZWF0ZSh2 Ym94LCBzaXplLCAwLCAwLCAmdmJveGJvKTsKLQlpZiAocmV0KSB7CisJZ2JvID0gZHJtX2dlbV90 dG1fY3JlYXRlKCZ2Ym94LT5kZGV2LCAmdmJveC0+dHRtLmJkZXYsIHNpemUsIDAsIGZhbHNlKTsK KwlpZiAoSVNfRVJSKGdibykpIHsKKwkJcmV0ID0gUFRSX0VSUihnYm8pOwogCQlpZiAocmV0ICE9 IC1FUkVTVEFSVFNZUykKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIEdFTSBvYmpl Y3RcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCSpvYmogPSAmdmJveGJvLT5nZW07CisJKm9i aiA9ICZnYm8tPmdlbTsKIAogCXJldHVybiAwOwogfQpAQCAtMjk4LDY0ICsyOTksOSBAQCBpbnQg dmJveF9nZW1fY3JlYXRlKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gsCiBpbnQgdmJveF9kdW1i X2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCiAJCSAgICAgc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQogewotCXN0cnVjdCB2Ym94 X3ByaXZhdGUgKnZib3ggPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgdmJveF9wcml2YXRl LCBkZGV2KTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmo7Ci0JdTMyIGhhbmRsZTsKLQlp bnQgcmV0OwotCi0JYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqICgoYXJncy0+YnBwICsgNykg LyA4KTsKLQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7Ci0KLQlyZXQg PSB2Ym94X2dlbV9jcmVhdGUodmJveCwgYXJncy0+c2l6ZSwgZmFsc2UsICZnb2JqKTsKLQlpZiAo cmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUs IGdvYmosICZoYW5kbGUpOwotCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChnb2JqKTsKLQlp ZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3ggPSBkZXYt PmRldl9wcml2YXRlOwogCi0JYXJncy0+aGFuZGxlID0gaGFuZGxlOwotCi0JcmV0dXJuIDA7Ci19 Ci0KLXZvaWQgdmJveF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmop Ci17Ci0Jc3RydWN0IHZib3hfYm8gKnZib3hfYm8gPSBnZW1fdG9fdmJveF9ibyhvYmopOworCXJl dHVybiBkcm1fZ2VtX3R0bV9maWxsX2NyZWF0ZV9kdW1iKGZpbGUsIGRldiwgJnZib3gtPnR0bS5i ZGV2LCAwLAorCQkJCQkgICAgZmFsc2UsIGFyZ3MpOwogCi0JdHRtX2JvX3B1dCgmdmJveF9iby0+ Ym8pOwotfQotCi1zdGF0aWMgaW5saW5lIHU2NCB2Ym94X2JvX21tYXBfb2Zmc2V0KHN0cnVjdCB2 Ym94X2JvICpibykKLXsKLQlyZXR1cm4gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZiby0+Ym8u dm1hX25vZGUpOwotfQotCi1pbnQKLXZib3hfZHVtYl9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsCi0JCSAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgIHUzMiBo YW5kbGUsIHU2NCAqb2Zmc2V0KQotewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCWlu dCByZXQ7Ci0Jc3RydWN0IHZib3hfYm8gKmJvOwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBoYW5kbGUpOwotCWlm ICghb2JqKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQli byA9IGdlbV90b192Ym94X2JvKG9iaik7Ci0JKm9mZnNldCA9IHZib3hfYm9fbW1hcF9vZmZzZXQo Ym8pOwotCi0JZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JcmV0ID0gMDsKLQotb3V0X3VubG9j azoKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYyBiL2RyaXZl cnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMKaW5kZXggNjIwYTZlMzhmNzFmLi5mYWFi ZjI4MDE3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2Rl LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwpAQCAtMTczLDcg KzE3Myw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3J0Y19zZXRfYmFzZV9hbmRfbW9kZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJCQkJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCQlp bnQgeCwgaW50IHkpCiB7Ci0Jc3RydWN0IHZib3hfYm8gKmJvID0gZ2VtX3RvX3Zib3hfYm8odG9f dmJveF9mcmFtZWJ1ZmZlcihmYiktPm9iaik7CisJc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAq Z2JvID0KKwkJZHJtX2dlbV90dG1fb2ZfZ2VtKHRvX3Zib3hfZnJhbWVidWZmZXIoZmIpLT5vYmop OwogCXN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3ggPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwog CXN0cnVjdCB2Ym94X2NydGMgKnZib3hfY3J0YyA9IHRvX3Zib3hfY3J0YyhjcnRjKTsKIAlib29s IG5lZWRzX21vZGVzZXQgPSBkcm1fYXRvbWljX2NydGNfbmVlZHNfbW9kZXNldChjcnRjLT5zdGF0 ZSk7CkBAIC0xODcsNyArMTg4LDcgQEAgc3RhdGljIHZvaWQgdmJveF9jcnRjX3NldF9iYXNlX2Fu ZF9tb2RlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAogCXZib3hfY3J0Yy0+eCA9IHg7CiAJdmJv eF9jcnRjLT55ID0geTsKLQl2Ym94X2NydGMtPmZiX29mZnNldCA9IHZib3hfYm9fZ3B1X29mZnNl dChibyk7CisJdmJveF9jcnRjLT5mYl9vZmZzZXQgPSBkcm1fZ2VtX3R0bV92cmFtX29mZnNldChn Ym8pOwogCiAJLyogdmJveF9kb19tb2Rlc2V0KCkgY2hlY2tzIHZib3gtPnNpbmdsZV9mcmFtZWJ1 ZmZlciBzbyB1cGRhdGUgaXQgbm93ICovCiAJaWYgKG5lZWRzX21vZGVzZXQgJiYgdmJveF9zZXRf dXBfaW5wdXRfbWFwcGluZyh2Ym94KSkgewpAQCAtMzAzLDE0ICszMDQsMTQgQEAgc3RhdGljIHZv aWQgdmJveF9wcmltYXJ5X2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAog c3RhdGljIGludCB2Ym94X3ByaW1hcnlfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCiB7Ci0Jc3RydWN0 IHZib3hfYm8gKmJvOworCXN0cnVjdCBkcm1fZ2VtX3R0bV9vYmplY3QgKmdibzsKIAlpbnQgcmV0 OwogCiAJaWYgKCFuZXdfc3RhdGUtPmZiKQogCQlyZXR1cm4gMDsKIAotCWJvID0gZ2VtX3RvX3Zi b3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihuZXdfc3RhdGUtPmZiKS0+b2JqKTsKLQlyZXQgPSB2 Ym94X2JvX3BpbihibywgVFRNX1BMX0ZMQUdfVlJBTSk7CisJZ2JvID0gZHJtX2dlbV90dG1fb2Zf Z2VtKHRvX3Zib3hfZnJhbWVidWZmZXIobmV3X3N0YXRlLT5mYiktPm9iaik7CisJcmV0ID0gZHJt X2dlbV90dG1fcGluKGdibywgVFRNX1BMX0ZMQUdfVlJBTSk7CiAJaWYgKHJldCkKIAkJRFJNX1dB Uk4oIkVycm9yICVkIHBpbm5pbmcgbmV3IGZiLCBvdXQgb2YgdmlkZW8gbWVtP1xuIiwgcmV0KTsK IApAQCAtMzIwLDEzICszMjEsMTMgQEAgc3RhdGljIGludCB2Ym94X3ByaW1hcnlfcHJlcGFyZV9m YihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIHN0YXRpYyB2b2lkIHZib3hfcHJpbWFyeV9jbGVh bnVwX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICpvbGRfc3RhdGUpCiB7Ci0Jc3RydWN0IHZib3hfYm8gKmJvOworCXN0cnVjdCBkcm1f Z2VtX3R0bV9vYmplY3QgKmdibzsKIAogCWlmICghb2xkX3N0YXRlLT5mYikKIAkJcmV0dXJuOwog Ci0JYm8gPSBnZW1fdG9fdmJveF9ibyh0b192Ym94X2ZyYW1lYnVmZmVyKG9sZF9zdGF0ZS0+ZmIp LT5vYmopOwotCXZib3hfYm9fdW5waW4oYm8pOworCWdibyA9IGRybV9nZW1fdHRtX29mX2dlbSh0 b192Ym94X2ZyYW1lYnVmZmVyKG9sZF9zdGF0ZS0+ZmIpLT5vYmopOworCWRybV9nZW1fdHRtX3Vu cGluKGdibyk7CiB9CiAKIHN0YXRpYyBpbnQgdmJveF9jdXJzb3JfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLApAQCAtMzg2LDcgKzM4Nyw4IEBAIHN0YXRpYyB2b2lkIHZib3hf Y3Vyc29yX2F0b21pY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCWNvbnRhaW5l cl9vZihwbGFuZS0+ZGV2LCBzdHJ1Y3QgdmJveF9wcml2YXRlLCBkZGV2KTsKIAlzdHJ1Y3QgdmJv eF9jcnRjICp2Ym94X2NydGMgPSB0b192Ym94X2NydGMocGxhbmUtPnN0YXRlLT5jcnRjKTsKIAlz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHBsYW5lLT5zdGF0ZS0+ZmI7Ci0Jc3RydWN0IHZi b3hfYm8gKmJvID0gZ2VtX3RvX3Zib3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihmYiktPm9iaik7 CisJc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2JvID0KKwkJZHJtX2dlbV90dG1fb2ZfZ2Vt KHRvX3Zib3hfZnJhbWVidWZmZXIoZmIpLT5vYmopOwogCXUzMiB3aWR0aCA9IHBsYW5lLT5zdGF0 ZS0+Y3J0Y193OwogCXUzMiBoZWlnaHQgPSBwbGFuZS0+c3RhdGUtPmNydGNfaDsKIAlzaXplX3Qg ZGF0YV9zaXplLCBtYXNrX3NpemU7CkBAIC00MDUsNyArNDA3LDcgQEAgc3RhdGljIHZvaWQgdmJv eF9jdXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl2Ym94X2Ny dGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKIAogCS8qIHBpbm5pbmcgaXMgZG9uZSBpbiBwcmVw YXJlL2NsZWFudXAgZnJhbWVidWZmZXIgKi8KLQlzcmMgPSB2Ym94X2JvX2ttYXAoYm8pOworCXNy YyA9IGRybV9nZW1fdHRtX2ttYXAoZ2JvLCB0cnVlKTsKIAlpZiAoSVNfRVJSKHNyYykpIHsKIAkJ bXV0ZXhfdW5sb2NrKCZ2Ym94LT5od19tdXRleCk7CiAJCURSTV9XQVJOKCJDb3VsZCBub3Qga21h cCBjdXJzb3IgYm8sIHNraXBwaW5nIHVwZGF0ZVxuIik7CkBAIC00MjEsNyArNDIzLDcgQEAgc3Rh dGljIHZvaWQgdmJveF9jdXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKIAlkYXRhX3NpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQgKyBtYXNrX3NpemU7CiAKIAljb3B5 X2N1cnNvcl9pbWFnZShzcmMsIHZib3gtPmN1cnNvcl9kYXRhLCB3aWR0aCwgaGVpZ2h0LCBtYXNr X3NpemUpOwotCXZib3hfYm9fa3VubWFwKGJvKTsKKwlkcm1fZ2VtX3R0bV9rdW5tYXAoZ2JvKTsK IAogCWZsYWdzID0gVkJPWF9NT1VTRV9QT0lOVEVSX1ZJU0lCTEUgfCBWQk9YX01PVVNFX1BPSU5U RVJfU0hBUEUgfAogCQlWQk9YX01PVVNFX1BPSU5URVJfQUxQSEE7CkBAIC00NjEsMjUgKzQ2Mywy NSBAQCBzdGF0aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwKIHN0YXRpYyBpbnQgdmJveF9jdXJzb3JfcHJlcGFyZV9mYihzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm5ld19zdGF0ZSkK IHsKLQlzdHJ1Y3QgdmJveF9ibyAqYm87CisJc3RydWN0IGRybV9nZW1fdHRtX29iamVjdCAqZ2Jv OwogCiAJaWYgKCFuZXdfc3RhdGUtPmZiKQogCQlyZXR1cm4gMDsKIAotCWJvID0gZ2VtX3RvX3Zi b3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihuZXdfc3RhdGUtPmZiKS0+b2JqKTsKLQlyZXR1cm4g dmJveF9ib19waW4oYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CisJZ2JvID0gZHJtX2dlbV90dG1f b2ZfZ2VtKHRvX3Zib3hfZnJhbWVidWZmZXIobmV3X3N0YXRlLT5mYiktPm9iaik7CisJcmV0dXJu IGRybV9nZW1fdHRtX3BpbihnYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7CiB9CiAKIHN0YXRpYyB2 b2lkIHZib3hfY3Vyc29yX2NsZWFudXBfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJCQkJ ICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQogewotCXN0cnVjdCB2Ym94X2Jv ICpibzsKKwlzdHJ1Y3QgZHJtX2dlbV90dG1fb2JqZWN0ICpnYm87CiAKIAlpZiAoIXBsYW5lLT5z dGF0ZS0+ZmIpCiAJCXJldHVybjsKIAotCWJvID0gZ2VtX3RvX3Zib3hfYm8odG9fdmJveF9mcmFt ZWJ1ZmZlcihwbGFuZS0+c3RhdGUtPmZiKS0+b2JqKTsKLQl2Ym94X2JvX3VucGluKGJvKTsKKwln Ym8gPSBkcm1fZ2VtX3R0bV9vZl9nZW0odG9fdmJveF9mcmFtZWJ1ZmZlcihwbGFuZS0+c3RhdGUt PmZiKS0+b2JqKTsKKwlkcm1fZ2VtX3R0bV91bnBpbihnYm8pOwogfQogCiBzdGF0aWMgY29uc3Qg dTMyIHZib3hfY3Vyc29yX3BsYW5lX2Zvcm1hdHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92Ym94dmlkZW8vdmJveF90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8v dmJveF90dG0uYwppbmRleCA5ZDc4NDM4YzI4NzcuLmExZDY0ZTFlYTkwYyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS92Ym94dmlkZW8vdmJveF90dG0uYwpAQCAtMTYsMjQgKzE2LDYgQEAgc3RhdGljIGlubGluZSBz dHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94X2JkZXYoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkKQog CXJldHVybiBjb250YWluZXJfb2YoYmQsIHN0cnVjdCB2Ym94X3ByaXZhdGUsIHR0bS5iZGV2KTsK IH0KIAotc3RhdGljIHZvaWQgdmJveF9ib190dG1fZGVzdHJveShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKnRibykKLXsKLQlzdHJ1Y3QgdmJveF9ibyAqYm87Ci0KLQlibyA9IGNvbnRhaW5lcl9v Zih0Ym8sIHN0cnVjdCB2Ym94X2JvLCBibyk7Ci0KLQlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKCZi by0+Z2VtKTsKLQlrZnJlZShibyk7Ci19Ci0KLXN0YXRpYyBib29sIHZib3hfdHRtX2JvX2lzX3Zi b3hfYm8oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKLXsKLQlpZiAoYm8tPmRlc3Ryb3kg PT0gJnZib3hfYm9fdHRtX2Rlc3Ryb3kpCi0JCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNl OwotfQotCiBzdGF0aWMgaW50CiB2Ym94X2JvX2luaXRfbWVtX3R5cGUoc3RydWN0IHR0bV9ib19k ZXZpY2UgKmJkZXYsIHUzMiB0eXBlLAogCQkgICAgICBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFn ZXIgKm1hbikKQEAgLTU4LDI0ICs0MCw2IEBAIHZib3hfYm9faW5pdF9tZW1fdHlwZShzdHJ1Y3Qg dHRtX2JvX2RldmljZSAqYmRldiwgdTMyIHR5cGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2 b2lkCi12Ym94X2JvX2V2aWN0X2ZsYWdzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIHN0 cnVjdCB0dG1fcGxhY2VtZW50ICpwbCkKLXsKLQlzdHJ1Y3QgdmJveF9ibyAqdmJveGJvID0gdmJv eF9ibyhibyk7Ci0KLQlpZiAoIXZib3hfdHRtX2JvX2lzX3Zib3hfYm8oYm8pKQotCQlyZXR1cm47 Ci0KLQl2Ym94X3R0bV9wbGFjZW1lbnQodmJveGJvLCBUVE1fUExfRkxBR19TWVNURU0pOwotCSpw bCA9IHZib3hiby0+cGxhY2VtZW50OwotfQotCi1zdGF0aWMgaW50IHZib3hfYm9fdmVyaWZ5X2Fj Y2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAotCQkJCSBzdHJ1Y3QgZmlsZSAqZmls cCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2Ym94X3R0bV9pb19tZW1fcmVzZXJ2 ZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKIAkJCQkgICBzdHJ1Y3QgdHRtX21lbV9yZWcg Km1lbSkKIHsKQEAgLTE0MSw4ICsxMDUsOCBAQCBzdGF0aWMgc3RydWN0IHR0bV9ib19kcml2ZXIg dmJveF9ib19kcml2ZXIgPSB7CiAJLnR0bV90dF9jcmVhdGUgPSB2Ym94X3R0bV90dF9jcmVhdGUs CiAJLmluaXRfbWVtX3R5cGUgPSB2Ym94X2JvX2luaXRfbWVtX3R5cGUsCiAJLmV2aWN0aW9uX3Zh bHVhYmxlID0gdHRtX2JvX2V2aWN0aW9uX3ZhbHVhYmxlLAotCS5ldmljdF9mbGFncyA9IHZib3hf Ym9fZXZpY3RfZmxhZ3MsCi0JLnZlcmlmeV9hY2Nlc3MgPSB2Ym94X2JvX3ZlcmlmeV9hY2Nlc3Ms CisJLmV2aWN0X2ZsYWdzID0gZHJtX2dlbV90dG1fYm9fZHJpdmVyX2V2aWN0X2ZsYWdzLAorCS52 ZXJpZnlfYWNjZXNzID0gZHJtX2dlbV90dG1fYm9fZHJpdmVyX3ZlcmlmeV9hY2Nlc3MsCiAJLmlv X21lbV9yZXNlcnZlID0gJnZib3hfdHRtX2lvX21lbV9yZXNlcnZlLAogCS5pb19tZW1fZnJlZSA9 ICZ2Ym94X3R0bV9pb19tZW1fZnJlZSwKIH07CkBAIC0xOTYsMTY1ICsxNjAsNiBAQCB2b2lkIHZi b3hfbW1fZmluaShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94KQogCXR0bV9ib19kZXZpY2VfcmVs ZWFzZSgmdmJveC0+dHRtLmJkZXYpOwogfQogCi12b2lkIHZib3hfdHRtX3BsYWNlbWVudChzdHJ1 Y3QgdmJveF9ibyAqYm8sIGludCBkb21haW4pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGMg PSAwOwotCi0JYm8tPnBsYWNlbWVudC5wbGFjZW1lbnQgPSBiby0+cGxhY2VtZW50czsKLQliby0+ cGxhY2VtZW50LmJ1c3lfcGxhY2VtZW50ID0gYm8tPnBsYWNlbWVudHM7Ci0KLQlpZiAoZG9tYWlu ICYgVFRNX1BMX0ZMQUdfVlJBTSkKLQkJYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9Ci0JCSAg ICBUVE1fUExfRkxBR19XQyB8IFRUTV9QTF9GTEFHX1VOQ0FDSEVEIHwgVFRNX1BMX0ZMQUdfVlJB TTsKLQlpZiAoZG9tYWluICYgVFRNX1BMX0ZMQUdfU1lTVEVNKQotCQliby0+cGxhY2VtZW50c1tj KytdLmZsYWdzID0KLQkJICAgIFRUTV9QTF9NQVNLX0NBQ0hJTkcgfCBUVE1fUExfRkxBR19TWVNU RU07Ci0JaWYgKCFjKQotCQliby0+cGxhY2VtZW50c1tjKytdLmZsYWdzID0KLQkJICAgIFRUTV9Q TF9NQVNLX0NBQ0hJTkcgfCBUVE1fUExfRkxBR19TWVNURU07Ci0KLQliby0+cGxhY2VtZW50Lm51 bV9wbGFjZW1lbnQgPSBjOwotCWJvLT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gYzsK LQotCWZvciAoaSA9IDA7IGkgPCBjOyArK2kpIHsKLQkJYm8tPnBsYWNlbWVudHNbaV0uZnBmbiA9 IDA7Ci0JCWJvLT5wbGFjZW1lbnRzW2ldLmxwZm4gPSAwOwotCX0KLX0KLQotaW50IHZib3hfYm9f Y3JlYXRlKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gsIGludCBzaXplLCBpbnQgYWxpZ24sCi0J CSAgIHUzMiBmbGFncywgc3RydWN0IHZib3hfYm8gKipwdmJveGJvKQotewotCXN0cnVjdCB2Ym94 X2JvICp2Ym94Ym87Ci0Jc2l6ZV90IGFjY19zaXplOwotCWludCByZXQ7Ci0KLQl2Ym94Ym8gPSBr emFsbG9jKHNpemVvZigqdmJveGJvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2Ym94Ym8pCi0JCXJl dHVybiAtRU5PTUVNOwotCi0JcmV0ID0gZHJtX2dlbV9vYmplY3RfaW5pdCgmdmJveC0+ZGRldiwg JnZib3hiby0+Z2VtLCBzaXplKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9mcmVlX3Zib3hibzsK LQotCXZib3hiby0+Ym8uYmRldiA9ICZ2Ym94LT50dG0uYmRldjsKLQotCXZib3hfdHRtX3BsYWNl bWVudCh2Ym94Ym8sIFRUTV9QTF9GTEFHX1ZSQU0gfCBUVE1fUExfRkxBR19TWVNURU0pOwotCi0J YWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKCZ2Ym94LT50dG0uYmRldiwgc2l6ZSwKLQkJ CQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ym94X2JvKSk7Ci0KLQlyZXQgPSB0dG1fYm9faW5pdCgm dmJveC0+dHRtLmJkZXYsICZ2Ym94Ym8tPmJvLCBzaXplLAotCQkJICB0dG1fYm9fdHlwZV9kZXZp Y2UsICZ2Ym94Ym8tPnBsYWNlbWVudCwKLQkJCSAgYWxpZ24gPj4gUEFHRV9TSElGVCwgZmFsc2Us IGFjY19zaXplLAotCQkJICBOVUxMLCBOVUxMLCB2Ym94X2JvX3R0bV9kZXN0cm95KTsKLQlpZiAo cmV0KQotCQlnb3RvIGVycl9mcmVlX3Zib3hibzsKLQotCSpwdmJveGJvID0gdmJveGJvOwotCi0J cmV0dXJuIDA7Ci0KLWVycl9mcmVlX3Zib3hibzoKLQlrZnJlZSh2Ym94Ym8pOwotCXJldHVybiBy ZXQ7Ci19Ci0KLWludCB2Ym94X2JvX3BpbihzdHJ1Y3QgdmJveF9ibyAqYm8sIHUzMiBwbF9mbGFn KQotewotCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9Owot CWludCBpLCByZXQ7Ci0KLQlpZiAoYm8tPnBpbl9jb3VudCkgewotCQliby0+cGluX2NvdW50Kys7 Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IHZib3hfYm9fcmVzZXJ2ZShibywgZmFsc2UpOwot CWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQl2Ym94X3R0bV9wbGFjZW1lbnQoYm8sIHBsX2Zs YWcpOwotCi0JZm9yIChpID0gMDsgaSA8IGJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudDsgaSsr KQotCQliby0+cGxhY2VtZW50c1tpXS5mbGFncyB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKLQot CXJldCA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPmJvLCAmYm8tPnBsYWNlbWVudCwgJmN0eCk7Ci0J aWYgKHJldCA9PSAwKQotCQliby0+cGluX2NvdW50ID0gMTsKLQotCXZib3hfYm9fdW5yZXNlcnZl KGJvKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCB2Ym94X2JvX3VucGluKHN0cnVjdCB2Ym94 X2JvICpibykKLXsKLQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFs c2UgfTsKLQlpbnQgaSwgcmV0OwotCi0JaWYgKCFiby0+cGluX2NvdW50KSB7Ci0JCURSTV9FUlJP UigidW5waW4gYmFkICVwXG4iLCBibyk7Ci0JCXJldHVybiAwOwotCX0KLQliby0+cGluX2NvdW50 LS07Ci0JaWYgKGJvLT5waW5fY291bnQpCi0JCXJldHVybiAwOwotCi0JcmV0ID0gdmJveF9ib19y ZXNlcnZlKGJvLCBmYWxzZSk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkVycm9yICVkIHJl c2VydmluZyBibywgbGVhdmluZyBpdCBwaW5uZWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0J fQotCi0JZm9yIChpID0gMDsgaSA8IGJvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudDsgaSsrKQot CQliby0+cGxhY2VtZW50c1tpXS5mbGFncyAmPSB+VFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Ci0KLQly ZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmJvLT5ibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwotCi0J dmJveF9ib191bnJlc2VydmUoYm8pOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIE1vdmUg YSB2Ym94LW93bmVkIGJ1ZmZlciBvYmplY3QgdG8gc3lzdGVtIG1lbW9yeSBpZiBubyBvbmUgZWxz ZSBoYXMgaXQKLSAqIHBpbm5lZC4gIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBpdCBwcmV2 aW91c2x5LCBhbmQgdGhpcyBjYWxsIHdpbGwKLSAqIHJlbGVhc2UgdGhlIGNhbGxlcidzIHBpbi4K LSAqLwotaW50IHZib3hfYm9fcHVzaF9zeXNyYW0oc3RydWN0IHZib3hfYm8gKmJvKQotewotCXN0 cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9OwotCWludCBpLCBy ZXQ7Ci0KLQlpZiAoIWJvLT5waW5fY291bnQpIHsKLQkJRFJNX0VSUk9SKCJ1bnBpbiBiYWQgJXBc biIsIGJvKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWJvLT5waW5fY291bnQtLTsKLQlpZiAoYm8tPnBp bl9jb3VudCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYm8tPmttYXAudmlydHVhbCkgewotCQl0dG1f Ym9fa3VubWFwKCZiby0+a21hcCk7Ci0JCWJvLT5rbWFwLnZpcnR1YWwgPSBOVUxMOwotCX0KLQot CXZib3hfdHRtX3BsYWNlbWVudChibywgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKLQotCWZvciAoaSA9 IDA7IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQ7IGkrKykKLQkJYm8tPnBsYWNlbWVu dHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Ci0KLQlyZXQgPSB0dG1fYm9fdmFs aWRhdGUoJmJvLT5ibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwotCWlmIChyZXQpIHsKLQkJRFJN X0VSUk9SKCJwdXNoaW5nIHRvIFZSQU0gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0K LQlyZXR1cm4gMDsKLX0KLQogaW50IHZib3hfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYgPSBm aWxwLT5wcml2YXRlX2RhdGE7CkBAIC0zNjIsMjcgKzE2NywzIEBAIGludCB2Ym94X21tYXAoc3Ry dWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogCiAJcmV0dXJuIHR0 bV9ib19tbWFwKGZpbHAsIHZtYSwgJnZib3gtPnR0bS5iZGV2KTsKIH0KLQotdm9pZCAqdmJveF9i b19rbWFwKHN0cnVjdCB2Ym94X2JvICpibykKLXsKLQlpbnQgcmV0OwotCi0JaWYgKGJvLT5rbWFw LnZpcnR1YWwpCi0JCXJldHVybiBiby0+a21hcC52aXJ0dWFsOwotCi0JcmV0ID0gdHRtX2JvX2tt YXAoJmJvLT5ibywgMCwgYm8tPmJvLm51bV9wYWdlcywgJmJvLT5rbWFwKTsKLQlpZiAocmV0KSB7 Ci0JCURSTV9FUlJPUigiRXJyb3Iga21hcHBpbmcgYm86ICVkXG4iLCByZXQpOwotCQlyZXR1cm4g TlVMTDsKLQl9Ci0KLQlyZXR1cm4gYm8tPmttYXAudmlydHVhbDsKLX0KLQotdm9pZCB2Ym94X2Jv X2t1bm1hcChzdHJ1Y3QgdmJveF9ibyAqYm8pCi17Ci0JaWYgKGJvLT5rbWFwLnZpcnR1YWwpIHsK LQkJdHRtX2JvX2t1bm1hcCgmYm8tPmttYXApOwotCQliby0+a21hcC52aXJ0dWFsID0gTlVMTDsK LQl9Ci19Ci0tIAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbA==