From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v3 16/19] drm/vboxvideo: Convert vboxvideo driver to |struct drm_gem_vram_object| Date: Mon, 29 Apr 2019 16:43:38 +0200 Message-ID: <20190429144341.12615-17-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 1EE728926B for ; Mon, 29 Apr 2019 14:43:54 +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 VGhpcyBwYXRjaCByZXBsYWNlcyB8c3RydWN0IHZib3hfYm98IGFuZCBpdHMgaGVscGVycyB3aXRo IHRoZSBnZW5lcmljCmltcGxlbWVudGF0aW9uIG9mIHxzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVj dHwuIFRoZSBvbmx5IGNoYW5nZSBpbgpzZW1hbnRpY3MgaXMgdGhhdCAmdHRtX2JvX2RyaXZlci52 ZXJpZnlfYWNjZXNzKCkgbm93IGRvZXMgdGhlIGFjdHVhbAp2ZXJpZmljYXRpb24uCgp2MzoKCSog cmVtb3ZlIGZvcndhcmQgZGVjbGFyYXRpb24gb2Ygc3RydWN0IHZib3hfZ2VtX29iamVjdAp2MjoK CW5vdGhpbmcKClNpZ25lZC1vZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBz dXNlLmRlPgpSZXZpZXdlZC1ieTogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL0tjb25maWcgICAgIHwgICAxICsKIGRyaXZl cnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuYyAgfCAgIDUgKy0KIGRyaXZlcnMvZ3B1L2Ry bS92Ym94dmlkZW8vdmJveF9kcnYuaCAgfCAgNjAgKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL3Zi b3h2aWRlby92Ym94X2ZiLmMgICB8ICAyMiArLS0KIGRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8v dmJveF9tYWluLmMgfCAgNzAgKy0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJv eF9tb2RlLmMgfCAgMzYgKysrLS0KIGRyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF90dG0u YyAgfCAyMjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgNDUg aW5zZXJ0aW9ucygrKSwgMzcyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92Ym94dmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vS2NvbmZp ZwppbmRleCAxZjQxODJlMmU5ODAuLjk2Yzc5NGEzOWM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3Zib3h2aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8v S2NvbmZpZwpAQCAtMyw2ICszLDcgQEAgY29uZmlnIERSTV9WQk9YVklERU8KIAlkZXBlbmRzIG9u IERSTSAmJiBYODYgJiYgUENJCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IERSTV9U VE0KKwlzZWxlY3QgRFJNX0dFTV9WUkFNX0hFTFBFUgogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRP UgogCWhlbHAKIAkgIFRoaXMgaXMgYSBLTVMgZHJpdmVyIGZvciB0aGUgdmlydHVhbCBHcmFwaGlj cyBDYXJkIHVzZWQgaW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJv eF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYuYwppbmRleCBmYjZh MGYwYjgxNjcuLjMzNmE4ZTAzZTE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2 aWRlby92Ym94X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9kcnYu YwpAQCAtMjE1LDkgKzIxNSwxMCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0g ewogCS5taW5vciA9IERSSVZFUl9NSU5PUiwKIAkucGF0Y2hsZXZlbCA9IERSSVZFUl9QQVRDSExF VkVMLAogCi0JLmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCA9IHZib3hfZ2VtX2ZyZWVfb2JqZWN0 LAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQgPQorCQlkcm1fZ2VtX3ZyYW1fZHJpdmVyX2dl bV9mcmVlX29iamVjdF91bmxvY2tlZCwKIAkuZHVtYl9jcmVhdGUgPSB2Ym94X2R1bWJfY3JlYXRl LAotCS5kdW1iX21hcF9vZmZzZXQgPSB2Ym94X2R1bWJfbW1hcF9vZmZzZXQsCisJLmR1bWJfbWFw X29mZnNldCA9IGRybV9nZW1fdnJhbV9kcml2ZXJfZHVtYl9tbWFwX29mZnNldCwKIAkucHJpbWVf aGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCiAJLnByaW1lX2ZkX3Rv X2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAogCS5nZW1fcHJpbWVfZXhwb3J0 ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmJv eHZpZGVvL3Zib3hfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZHJ2LmgK aW5kZXggZWNlMzFmMzk1NTQwLi4xMmU0NzM5MmIyZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92Ym94dmlkZW8vdmJveF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVv L3Zib3hfZHJ2LmgKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2VuY29kZXIu aD4KICNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2Vt Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaD4KIAogI2luY2x1ZGUgPGRy bS90dG0vdHRtX2JvX2FwaS5oPgogI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2RyaXZlci5oPgpA QCAtOTYsOCArOTcsNiBAQCBzdHJ1Y3QgdmJveF9wcml2YXRlIHsKICN1bmRlZiBDVVJTT1JfUElY RUxfQ09VTlQKICN1bmRlZiBDVVJTT1JfREFUQV9TSVpFCiAKLXN0cnVjdCB2Ym94X2dlbV9vYmpl Y3Q7Ci0KIHN0cnVjdCB2Ym94X2Nvbm5lY3RvciB7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgYmFz ZTsKIAljaGFyIG5hbWVbMzJdOwpAQCAtMTcwLDczICsxNjksMTYgQEAgaW50IHZib3hmYl9jcmVh dGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAkJICBzdHJ1Y3QgZHJtX2ZiX2hlbHBl cl9zdXJmYWNlX3NpemUgKnNpemVzKTsKIHZvaWQgdmJveF9mYmRldl9maW5pKHN0cnVjdCB2Ym94 X3ByaXZhdGUgKnZib3gpOwogCi1zdHJ1Y3QgdmJveF9ibyB7Ci0Jc3RydWN0IHR0bV9idWZmZXJf b2JqZWN0IGJvOwotCXN0cnVjdCB0dG1fcGxhY2VtZW50IHBsYWNlbWVudDsKLQlzdHJ1Y3QgdHRt X2JvX2ttYXBfb2JqIGttYXA7Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0IGdlbTsKLQlzdHJ1Y3Qg dHRtX3BsYWNlIHBsYWNlbWVudHNbM107Ci0JaW50IHBpbl9jb3VudDsKLX07Ci0KLSNkZWZpbmUg Z2VtX3RvX3Zib3hfYm8oZ29iaikgY29udGFpbmVyX29mKChnb2JqKSwgc3RydWN0IHZib3hfYm8s IGdlbSkKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdmJveF9ibyAqdmJveF9ibyhzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKmJvKQotewotCXJldHVybiBjb250YWluZXJfb2YoYm8sIHN0cnVjdCB2 Ym94X2JvLCBibyk7Ci19Ci0KLSNkZWZpbmUgdG9fdmJveF9vYmooeCkgY29udGFpbmVyX29mKHgs IHN0cnVjdCB2Ym94X2dlbV9vYmplY3QsIGJhc2UpCi0KLXN0YXRpYyBpbmxpbmUgdTY0IHZib3hf Ym9fZ3B1X29mZnNldChzdHJ1Y3QgdmJveF9ibyAqYm8pCi17Ci0JcmV0dXJuIGJvLT5iby5vZmZz ZXQ7Ci19Ci0KIGludCB2Ym94X2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJ ICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVh dGVfZHVtYiAqYXJncyk7CiAKLXZvaWQgdmJveF9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOwotaW50IHZib3hfZHVtYl9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsCi0JCQkgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgIHUzMiBoYW5kbGUs IHU2NCAqb2Zmc2V0KTsKLQogaW50IHZib3hfbW1faW5pdChzdHJ1Y3QgdmJveF9wcml2YXRlICp2 Ym94KTsKIHZvaWQgdmJveF9tbV9maW5pKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gpOwogCi1p bnQgdmJveF9ib19jcmVhdGUoc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCwgaW50IHNpemUsIGlu dCBhbGlnbiwKLQkJICAgdTMyIGZsYWdzLCBzdHJ1Y3QgdmJveF9ibyAqKnB2Ym94Ym8pOwotCiBp bnQgdmJveF9nZW1fY3JlYXRlKHN0cnVjdCB2Ym94X3ByaXZhdGUgKnZib3gsCiAJCSAgICB1MzIg c2l6ZSwgYm9vbCBpc2tlcm5lbCwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICoqb2JqKTsKLQotaW50 IHZib3hfYm9fcGluKHN0cnVjdCB2Ym94X2JvICpibywgdTMyIHBsX2ZsYWcpOwotaW50IHZib3hf Ym9fdW5waW4oc3RydWN0IHZib3hfYm8gKmJvKTsKLQotc3RhdGljIGlubGluZSBpbnQgdmJveF9i b19yZXNlcnZlKHN0cnVjdCB2Ym94X2JvICpibywgYm9vbCBub193YWl0KQotewotCWludCByZXQ7 Ci0KLQlyZXQgPSB0dG1fYm9fcmVzZXJ2ZSgmYm8tPmJvLCB0cnVlLCBub193YWl0LCBOVUxMKTsK LQlpZiAocmV0KSB7Ci0JCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUJVU1kp Ci0JCQlEUk1fRVJST1IoInJlc2VydmUgZmFpbGVkICVwXG4iLCBibyk7Ci0JCXJldHVybiByZXQ7 Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmJveF9ib191bnJlc2Vy dmUoc3RydWN0IHZib3hfYm8gKmJvKQotewotCXR0bV9ib191bnJlc2VydmUoJmJvLT5ibyk7Ci19 Ci0KLXZvaWQgdmJveF90dG1fcGxhY2VtZW50KHN0cnVjdCB2Ym94X2JvICpibywgaW50IGRvbWFp bik7Ci1pbnQgdmJveF9ib19wdXNoX3N5c3JhbShzdHJ1Y3QgdmJveF9ibyAqYm8pOwogaW50IHZi b3hfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwot dm9pZCAqdmJveF9ib19rbWFwKHN0cnVjdCB2Ym94X2JvICpibyk7Ci12b2lkIHZib3hfYm9fa3Vu bWFwKHN0cnVjdCB2Ym94X2JvICpibyk7CiAKIC8qIHZib3hfcHJpbWUuYyAqLwogaW50IHZib3hf Z2VtX3ByaW1lX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94 dmlkZW8vdmJveF9mYi5jCmluZGV4IGI3MjRmZTdjMGMzMC4uOGY3NGJjZmZjMDM0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfZmIuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vdmJveHZpZGVvL3Zib3hfZmIuYwpAQCAtNTEsOSArNTEsOSBAQCBpbnQgdmJveGZiX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAogCXN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAq Z29iajsKLQlzdHJ1Y3QgdmJveF9ibyAqYm87CisJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qg KmdibzsKIAlpbnQgc2l6ZSwgcmV0OwotCXU2NCBncHVfYWRkcjsKKwlzNjQgZ3B1X2FkZHI7CiAJ dTMyIHBpdGNoOwogCiAJbW9kZV9jbWQud2lkdGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKQEAg LTc1LDkgKzc1LDkgQEAgaW50IHZib3hmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhl bHBlciwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JYm8gPSBnZW1fdG9fdmJveF9ibyhn b2JqKTsKKwlnYm8gPSBkcm1fZ2VtX3ZyYW1fb2ZfZ2VtKGdvYmopOwogCi0JcmV0ID0gdmJveF9i b19waW4oYm8sIFRUTV9QTF9GTEFHX1ZSQU0pOworCXJldCA9IGRybV9nZW1fdnJhbV9waW4oZ2Jv LCBEUk1fR0VNX1ZSQU1fUExfRkxBR19WUkFNKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0Owog CkBAIC04Niw3ICs4Niw3IEBAIGludCB2Ym94ZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVy ICpoZWxwZXIsCiAJCXJldHVybiBQVFJfRVJSKGluZm8pOwogCiAJaW5mby0+c2NyZWVuX3NpemUg PSBzaXplOwotCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgX19pb21lbSAqKXZib3hfYm9fa21h cChibyk7CisJaW5mby0+c2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVtICopZHJtX2dlbV92cmFt X2ttYXAoZ2JvLCB0cnVlLCBOVUxMKTsKIAlpZiAoSVNfRVJSKGluZm8tPnNjcmVlbl9iYXNlKSkK IAkJcmV0dXJuIFBUUl9FUlIoaW5mby0+c2NyZWVuX2Jhc2UpOwogCkBAIC0xMDQsNyArMTA0LDkg QEAgaW50IHZib3hmYl9jcmVhdGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKIAogCWRy bV9mYl9oZWxwZXJfZmlsbF9pbmZvKGluZm8sIGhlbHBlciwgc2l6ZXMpOwogCi0JZ3B1X2FkZHIg PSB2Ym94X2JvX2dwdV9vZmZzZXQoYm8pOworCWdwdV9hZGRyID0gZHJtX2dlbV92cmFtX29mZnNl dChnYm8pOworCWlmIChncHVfYWRkciA8IDApCisJCXJldHVybiAoaW50KWdwdV9hZGRyOwogCWlu Zm8tPmZpeC5zbWVtX3N0YXJ0ID0gaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSArIGdw dV9hZGRyOwogCWluZm8tPmZpeC5zbWVtX2xlbiA9IHZib3gtPmF2YWlsYWJsZV92cmFtX3NpemUg LSBncHVfYWRkcjsKIApAQCAtMTMyLDEyICsxMzQsMTAgQEAgdm9pZCB2Ym94X2ZiZGV2X2Zpbmko c3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCkKIAlkcm1fZmJfaGVscGVyX3VucmVnaXN0ZXJfZmJp KCZ2Ym94LT5mYl9oZWxwZXIpOwogCiAJaWYgKGFmYi0+b2JqKSB7Ci0JCXN0cnVjdCB2Ym94X2Jv ICpibyA9IGdlbV90b192Ym94X2JvKGFmYi0+b2JqKTsKKwkJc3RydWN0IGRybV9nZW1fdnJhbV9v YmplY3QgKmdibyA9IGRybV9nZW1fdnJhbV9vZl9nZW0oYWZiLT5vYmopOwogCi0JCXZib3hfYm9f a3VubWFwKGJvKTsKLQotCQlpZiAoYm8tPnBpbl9jb3VudCkKLQkJCXZib3hfYm9fdW5waW4oYm8p OworCQlkcm1fZ2VtX3ZyYW1fa3VubWFwKGdibyk7CisJCWRybV9nZW1fdnJhbV91bnBpbihnYm8p OwogCiAJCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChhZmItPm9iaik7CiAJCWFmYi0+b2Jq ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWlu LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVvL3Zib3hfbWFpbi5jCmluZGV4IGY0ZDAyZGU1 NTE4YS4uNTI1ZTlmZDYzZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJveHZpZGVv L3Zib3hfbWFpbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tYWluLmMK QEAgLTI3NCw3ICsyNzQsNyBAQCB2b2lkIHZib3hfaHdfZmluaShzdHJ1Y3QgdmJveF9wcml2YXRl ICp2Ym94KQogaW50IHZib3hfZ2VtX2NyZWF0ZShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94LAog CQkgICAgdTMyIHNpemUsIGJvb2wgaXNrZXJuZWwsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKm9i aikKIHsKLQlzdHJ1Y3QgdmJveF9ibyAqdmJveGJvOworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2Jq ZWN0ICpnYm87CiAJaW50IHJldDsKIAogCSpvYmogPSBOVUxMOwpAQCAtMjgzLDE0ICsyODMsMTUg QEAgaW50IHZib3hfZ2VtX2NyZWF0ZShzdHJ1Y3QgdmJveF9wcml2YXRlICp2Ym94LAogCWlmIChz aXplID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gdmJveF9ib19jcmVhdGUodmJv eCwgc2l6ZSwgMCwgMCwgJnZib3hibyk7Ci0JaWYgKHJldCkgeworCWdibyA9IGRybV9nZW1fdnJh bV9jcmVhdGUoJnZib3gtPmRkZXYsICZ2Ym94LT50dG0uYmRldiwgc2l6ZSwgMCwgZmFsc2UpOwor CWlmIChJU19FUlIoZ2JvKSkgeworCQlyZXQgPSBQVFJfRVJSKGdibyk7CiAJCWlmIChyZXQgIT0g LUVSRVNUQVJUU1lTKQogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWxsb2NhdGUgR0VNIG9iamVj dFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JKm9iaiA9ICZ2Ym94Ym8tPmdlbTsKKwkqb2Jq ID0gJmdiby0+Z2VtOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yOTgsNjQgKzI5OSw5IEBAIGludCB2 Ym94X2dlbV9jcmVhdGUoc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCwKIGludCB2Ym94X2R1bWJf Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKIAkJICAgICBzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCiB7Ci0Jc3RydWN0IHZib3hf cHJpdmF0ZSAqdmJveCA9Ci0JCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB2Ym94X3ByaXZhdGUs IGRkZXYpOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iajsKLQl1MzIgaGFuZGxlOwotCWlu dCByZXQ7Ci0KLQlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogKChhcmdzLT5icHAgKyA3KSAv IDgpOwotCWFyZ3MtPnNpemUgPSBhcmdzLT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKLQotCXJldCA9 IHZib3hfZ2VtX2NyZWF0ZSh2Ym94LCBhcmdzLT5zaXplLCBmYWxzZSwgJmdvYmopOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZSwg Z29iaiwgJmhhbmRsZSk7Ci0JZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKGdvYmopOwotCWlm IChyZXQpCi0JCXJldHVybiByZXQ7CisJc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCA9IGRldi0+ ZGV2X3ByaXZhdGU7CiAKLQlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7Ci0KLQlyZXR1cm4gMDsKLX0K LQotdm9pZCB2Ym94X2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikK LXsKLQlzdHJ1Y3QgdmJveF9ibyAqdmJveF9ibyA9IGdlbV90b192Ym94X2JvKG9iaik7CisJcmV0 dXJuIGRybV9nZW1fdnJhbV9maWxsX2NyZWF0ZV9kdW1iKGZpbGUsIGRldiwgJnZib3gtPnR0bS5i ZGV2LCAwLAorCQkJCQkgICAgZmFsc2UsIGFyZ3MpOwogCi0JdHRtX2JvX3B1dCgmdmJveF9iby0+ Ym8pOwotfQotCi1zdGF0aWMgaW5saW5lIHU2NCB2Ym94X2JvX21tYXBfb2Zmc2V0KHN0cnVjdCB2 Ym94X2JvICpibykKLXsKLQlyZXR1cm4gZHJtX3ZtYV9ub2RlX29mZnNldF9hZGRyKCZiby0+Ym8u dm1hX25vZGUpOwotfQotCi1pbnQKLXZib3hfZHVtYl9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGUsCi0JCSAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCSAgICAgIHUzMiBo YW5kbGUsIHU2NCAqb2Zmc2V0KQotewotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwotCWlu dCByZXQ7Ci0Jc3RydWN0IHZib3hfYm8gKmJvOwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3Rf bXV0ZXgpOwotCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBoYW5kbGUpOwotCWlm ICghb2JqKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQli byA9IGdlbV90b192Ym94X2JvKG9iaik7Ci0JKm9mZnNldCA9IHZib3hfYm9fbW1hcF9vZmZzZXQo Ym8pOwotCi0JZHJtX2dlbV9vYmplY3RfcHV0KG9iaik7Ci0JcmV0ID0gMDsKLQotb3V0X3VubG9j azoKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwogfQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYyBiL2RyaXZl cnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2RlLmMKaW5kZXggNjIwYTZlMzhmNzFmLi45NDMy YzNjZWVjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92Ym94dmlkZW8vdmJveF9tb2Rl LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X21vZGUuYwpAQCAtMTczLDcg KzE3Myw4IEBAIHN0YXRpYyB2b2lkIHZib3hfY3J0Y19zZXRfYmFzZV9hbmRfbW9kZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCiAJCQkJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAogCQkJCQlp bnQgeCwgaW50IHkpCiB7Ci0Jc3RydWN0IHZib3hfYm8gKmJvID0gZ2VtX3RvX3Zib3hfYm8odG9f dmJveF9mcmFtZWJ1ZmZlcihmYiktPm9iaik7CisJc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qg KmdibyA9CisJCWRybV9nZW1fdnJhbV9vZl9nZW0odG9fdmJveF9mcmFtZWJ1ZmZlcihmYiktPm9i aik7CiAJc3RydWN0IHZib3hfcHJpdmF0ZSAqdmJveCA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7 CiAJc3RydWN0IHZib3hfY3J0YyAqdmJveF9jcnRjID0gdG9fdmJveF9jcnRjKGNydGMpOwogCWJv b2wgbmVlZHNfbW9kZXNldCA9IGRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGMtPnN0 YXRlKTsKQEAgLTE4Nyw3ICsxODgsNyBAQCBzdGF0aWMgdm9pZCB2Ym94X2NydGNfc2V0X2Jhc2Vf YW5kX21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJdmJveF9jcnRjLT54ID0geDsKIAl2 Ym94X2NydGMtPnkgPSB5OwotCXZib3hfY3J0Yy0+ZmJfb2Zmc2V0ID0gdmJveF9ib19ncHVfb2Zm c2V0KGJvKTsKKwl2Ym94X2NydGMtPmZiX29mZnNldCA9IGRybV9nZW1fdnJhbV9vZmZzZXQoZ2Jv KTsKIAogCS8qIHZib3hfZG9fbW9kZXNldCgpIGNoZWNrcyB2Ym94LT5zaW5nbGVfZnJhbWVidWZm ZXIgc28gdXBkYXRlIGl0IG5vdyAqLwogCWlmIChuZWVkc19tb2Rlc2V0ICYmIHZib3hfc2V0X3Vw X2lucHV0X21hcHBpbmcodmJveCkpIHsKQEAgLTMwMywxNCArMzA0LDE0IEBAIHN0YXRpYyB2b2lk IHZib3hfcHJpbWFyeV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIHN0 YXRpYyBpbnQgdmJveF9wcmltYXJ5X3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUs CiAJCQkJICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQogewotCXN0cnVjdCB2 Ym94X2JvICpibzsKKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvOwogCWludCByZXQ7 CiAKIAlpZiAoIW5ld19zdGF0ZS0+ZmIpCiAJCXJldHVybiAwOwogCi0JYm8gPSBnZW1fdG9fdmJv eF9ibyh0b192Ym94X2ZyYW1lYnVmZmVyKG5ld19zdGF0ZS0+ZmIpLT5vYmopOwotCXJldCA9IHZi b3hfYm9fcGluKGJvLCBUVE1fUExfRkxBR19WUkFNKTsKKwlnYm8gPSBkcm1fZ2VtX3ZyYW1fb2Zf Z2VtKHRvX3Zib3hfZnJhbWVidWZmZXIobmV3X3N0YXRlLT5mYiktPm9iaik7CisJcmV0ID0gZHJt X2dlbV92cmFtX3BpbihnYm8sIERSTV9HRU1fVlJBTV9QTF9GTEFHX1ZSQU0pOwogCWlmIChyZXQp CiAJCURSTV9XQVJOKCJFcnJvciAlZCBwaW5uaW5nIG5ldyBmYiwgb3V0IG9mIHZpZGVvIG1lbT9c biIsIHJldCk7CiAKQEAgLTMyMCwxMyArMzIxLDEzIEBAIHN0YXRpYyBpbnQgdmJveF9wcmltYXJ5 X3ByZXBhcmVfZmIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiBzdGF0aWMgdm9pZCB2Ym94X3By aW1hcnlfY2xlYW51cF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgICAgc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQogewotCXN0cnVjdCB2Ym94X2JvICpibzsKKwlz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvOwogCiAJaWYgKCFvbGRfc3RhdGUtPmZiKQog CQlyZXR1cm47CiAKLQlibyA9IGdlbV90b192Ym94X2JvKHRvX3Zib3hfZnJhbWVidWZmZXIob2xk X3N0YXRlLT5mYiktPm9iaik7Ci0JdmJveF9ib191bnBpbihibyk7CisJZ2JvID0gZHJtX2dlbV92 cmFtX29mX2dlbSh0b192Ym94X2ZyYW1lYnVmZmVyKG9sZF9zdGF0ZS0+ZmIpLT5vYmopOworCWRy bV9nZW1fdnJhbV91bnBpbihnYm8pOwogfQogCiBzdGF0aWMgaW50IHZib3hfY3Vyc29yX2F0b21p Y19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKQEAgLTM4Niw3ICszODcsOCBAQCBzdGF0 aWMgdm9pZCB2Ym94X2N1cnNvcl9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LAogCQljb250YWluZXJfb2YocGxhbmUtPmRldiwgc3RydWN0IHZib3hfcHJpdmF0ZSwgZGRldik7 CiAJc3RydWN0IHZib3hfY3J0YyAqdmJveF9jcnRjID0gdG9fdmJveF9jcnRjKHBsYW5lLT5zdGF0 ZS0+Y3J0Yyk7CiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZS0+c3RhdGUtPmZi OwotCXN0cnVjdCB2Ym94X2JvICpibyA9IGdlbV90b192Ym94X2JvKHRvX3Zib3hfZnJhbWVidWZm ZXIoZmIpLT5vYmopOworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8gPQorCQlkcm1f Z2VtX3ZyYW1fb2ZfZ2VtKHRvX3Zib3hfZnJhbWVidWZmZXIoZmIpLT5vYmopOwogCXUzMiB3aWR0 aCA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y193OwogCXUzMiBoZWlnaHQgPSBwbGFuZS0+c3RhdGUtPmNy dGNfaDsKIAlzaXplX3QgZGF0YV9zaXplLCBtYXNrX3NpemU7CkBAIC00MDUsNyArNDA3LDcgQEAg c3RhdGljIHZvaWQgdmJveF9jdXJzb3JfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKIAl2Ym94X2NydGMtPmN1cnNvcl9lbmFibGVkID0gdHJ1ZTsKIAogCS8qIHBpbm5pbmcg aXMgZG9uZSBpbiBwcmVwYXJlL2NsZWFudXAgZnJhbWVidWZmZXIgKi8KLQlzcmMgPSB2Ym94X2Jv X2ttYXAoYm8pOworCXNyYyA9IGRybV9nZW1fdnJhbV9rbWFwKGdibywgdHJ1ZSwgTlVMTCk7CiAJ aWYgKElTX0VSUihzcmMpKSB7CiAJCW11dGV4X3VubG9jaygmdmJveC0+aHdfbXV0ZXgpOwogCQlE Uk1fV0FSTigiQ291bGQgbm90IGttYXAgY3Vyc29yIGJvLCBza2lwcGluZyB1cGRhdGVcbiIpOwpA QCAtNDIxLDcgKzQyMyw3IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21pY191cGRhdGUo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJZGF0YV9zaXplID0gd2lkdGggKiBoZWlnaHQgKiA0 ICsgbWFza19zaXplOwogCiAJY29weV9jdXJzb3JfaW1hZ2Uoc3JjLCB2Ym94LT5jdXJzb3JfZGF0 YSwgd2lkdGgsIGhlaWdodCwgbWFza19zaXplKTsKLQl2Ym94X2JvX2t1bm1hcChibyk7CisJZHJt X2dlbV92cmFtX2t1bm1hcChnYm8pOwogCiAJZmxhZ3MgPSBWQk9YX01PVVNFX1BPSU5URVJfVklT SUJMRSB8IFZCT1hfTU9VU0VfUE9JTlRFUl9TSEFQRSB8CiAJCVZCT1hfTU9VU0VfUE9JTlRFUl9B TFBIQTsKQEAgLTQ2MSwyNSArNDYzLDI1IEBAIHN0YXRpYyB2b2lkIHZib3hfY3Vyc29yX2F0b21p Y19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogc3RhdGljIGludCB2Ym94X2N1cnNv cl9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJCSAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQogewotCXN0cnVjdCB2Ym94X2JvICpibzsKKwlzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvOwogCiAJaWYgKCFuZXdfc3RhdGUtPmZiKQogCQlyZXR1 cm4gMDsKIAotCWJvID0gZ2VtX3RvX3Zib3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihuZXdfc3Rh dGUtPmZiKS0+b2JqKTsKLQlyZXR1cm4gdmJveF9ib19waW4oYm8sIFRUTV9QTF9GTEFHX1NZU1RF TSk7CisJZ2JvID0gZHJtX2dlbV92cmFtX29mX2dlbSh0b192Ym94X2ZyYW1lYnVmZmVyKG5ld19z dGF0ZS0+ZmIpLT5vYmopOworCXJldHVybiBkcm1fZ2VtX3ZyYW1fcGluKGdibywgRFJNX0dFTV9W UkFNX1BMX0ZMQUdfU1lTVEVNKTsKIH0KIAogc3RhdGljIHZvaWQgdmJveF9jdXJzb3JfY2xlYW51 cF9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpvbGRfc3RhdGUpCiB7Ci0Jc3RydWN0IHZib3hfYm8gKmJvOworCXN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm87CiAKIAlpZiAoIXBsYW5lLT5zdGF0ZS0+ZmIpCiAJCXJldHVybjsK IAotCWJvID0gZ2VtX3RvX3Zib3hfYm8odG9fdmJveF9mcmFtZWJ1ZmZlcihwbGFuZS0+c3RhdGUt PmZiKS0+b2JqKTsKLQl2Ym94X2JvX3VucGluKGJvKTsKKwlnYm8gPSBkcm1fZ2VtX3ZyYW1fb2Zf Z2VtKHRvX3Zib3hfZnJhbWVidWZmZXIocGxhbmUtPnN0YXRlLT5mYiktPm9iaik7CisJZHJtX2dl bV92cmFtX3VucGluKGdibyk7CiB9CiAKIHN0YXRpYyBjb25zdCB1MzIgdmJveF9jdXJzb3JfcGxh bmVfZm9ybWF0c1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92 Ym94X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X3R0bS5jCmluZGV4IDlk Nzg0MzhjMjg3Ny4uMDk4OWQ2NTZlZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmJv eHZpZGVvL3Zib3hfdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Zib3h2aWRlby92Ym94X3R0 bS5jCkBAIC0xNiwyNCArMTYsNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB2Ym94X3ByaXZhdGUg KnZib3hfYmRldihzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmQpCiAJcmV0dXJuIGNvbnRhaW5lcl9v ZihiZCwgc3RydWN0IHZib3hfcHJpdmF0ZSwgdHRtLmJkZXYpOwogfQogCi1zdGF0aWMgdm9pZCB2 Ym94X2JvX3R0bV9kZXN0cm95KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKQotewotCXN0 cnVjdCB2Ym94X2JvICpibzsKLQotCWJvID0gY29udGFpbmVyX29mKHRibywgc3RydWN0IHZib3hf Ym8sIGJvKTsKLQotCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmJvLT5nZW0pOwotCWtmcmVlKGJv KTsKLX0KLQotc3RhdGljIGJvb2wgdmJveF90dG1fYm9faXNfdmJveF9ibyhzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvKQotewotCWlmIChiby0+ZGVzdHJveSA9PSAmdmJveF9ib190dG1fZGVz dHJveSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQK IHZib3hfYm9faW5pdF9tZW1fdHlwZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgdTMyIHR5 cGUsCiAJCSAgICAgIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuKQpAQCAtNTgsMjQg KzQwLDYgQEAgdmJveF9ib19pbml0X21lbV90eXBlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2 LCB1MzIgdHlwZSwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXZib3hfYm9fZXZpY3Rf ZmxhZ3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IHR0bV9wbGFjZW1lbnQg KnBsKQotewotCXN0cnVjdCB2Ym94X2JvICp2Ym94Ym8gPSB2Ym94X2JvKGJvKTsKLQotCWlmICgh dmJveF90dG1fYm9faXNfdmJveF9ibyhibykpCi0JCXJldHVybjsKLQotCXZib3hfdHRtX3BsYWNl bWVudCh2Ym94Ym8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7Ci0JKnBsID0gdmJveGJvLT5wbGFjZW1l bnQ7Ci19Ci0KLXN0YXRpYyBpbnQgdmJveF9ib192ZXJpZnlfYWNjZXNzKHN0cnVjdCB0dG1fYnVm ZmVyX29iamVjdCAqYm8sCi0JCQkJIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiAwOwot fQotCiBzdGF0aWMgaW50IHZib3hfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9fZGV2 aWNlICpiZGV2LAogCQkJCSAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQogewpAQCAtMTQxLDgg KzEwNSw4IEBAIHN0YXRpYyBzdHJ1Y3QgdHRtX2JvX2RyaXZlciB2Ym94X2JvX2RyaXZlciA9IHsK IAkudHRtX3R0X2NyZWF0ZSA9IHZib3hfdHRtX3R0X2NyZWF0ZSwKIAkuaW5pdF9tZW1fdHlwZSA9 IHZib3hfYm9faW5pdF9tZW1fdHlwZSwKIAkuZXZpY3Rpb25fdmFsdWFibGUgPSB0dG1fYm9fZXZp Y3Rpb25fdmFsdWFibGUsCi0JLmV2aWN0X2ZsYWdzID0gdmJveF9ib19ldmljdF9mbGFncywKLQku dmVyaWZ5X2FjY2VzcyA9IHZib3hfYm9fdmVyaWZ5X2FjY2VzcywKKwkuZXZpY3RfZmxhZ3MgPSBk cm1fZ2VtX3ZyYW1fYm9fZHJpdmVyX2V2aWN0X2ZsYWdzLAorCS52ZXJpZnlfYWNjZXNzID0gZHJt X2dlbV92cmFtX2JvX2RyaXZlcl92ZXJpZnlfYWNjZXNzLAogCS5pb19tZW1fcmVzZXJ2ZSA9ICZ2 Ym94X3R0bV9pb19tZW1fcmVzZXJ2ZSwKIAkuaW9fbWVtX2ZyZWUgPSAmdmJveF90dG1faW9fbWVt X2ZyZWUsCiB9OwpAQCAtMTk2LDE2NSArMTYwLDYgQEAgdm9pZCB2Ym94X21tX2Zpbmkoc3RydWN0 IHZib3hfcHJpdmF0ZSAqdmJveCkKIAl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJnZib3gtPnR0bS5i ZGV2KTsKIH0KIAotdm9pZCB2Ym94X3R0bV9wbGFjZW1lbnQoc3RydWN0IHZib3hfYm8gKmJvLCBp bnQgZG9tYWluKQotewotCXVuc2lnbmVkIGludCBpOwotCXUzMiBjID0gMDsKLQotCWJvLT5wbGFj ZW1lbnQucGxhY2VtZW50ID0gYm8tPnBsYWNlbWVudHM7Ci0JYm8tPnBsYWNlbWVudC5idXN5X3Bs YWNlbWVudCA9IGJvLT5wbGFjZW1lbnRzOwotCi0JaWYgKGRvbWFpbiAmIFRUTV9QTF9GTEFHX1ZS QU0pCi0JCWJvLT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPQotCQkgICAgVFRNX1BMX0ZMQUdfV0Mg fCBUVE1fUExfRkxBR19VTkNBQ0hFRCB8IFRUTV9QTF9GTEFHX1ZSQU07Ci0JaWYgKGRvbWFpbiAm IFRUTV9QTF9GTEFHX1NZU1RFTSkKLQkJYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9Ci0JCSAg ICBUVE1fUExfTUFTS19DQUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNOwotCWlmICghYykKLQkJ Ym8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9Ci0JCSAgICBUVE1fUExfTUFTS19DQUNISU5HIHwg VFRNX1BMX0ZMQUdfU1lTVEVNOwotCi0JYm8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gYzsK LQliby0+cGxhY2VtZW50Lm51bV9idXN5X3BsYWNlbWVudCA9IGM7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgYzsgKytpKSB7Ci0JCWJvLT5wbGFjZW1lbnRzW2ldLmZwZm4gPSAwOwotCQliby0+cGxhY2Vt ZW50c1tpXS5scGZuID0gMDsKLQl9Ci19Ci0KLWludCB2Ym94X2JvX2NyZWF0ZShzdHJ1Y3QgdmJv eF9wcml2YXRlICp2Ym94LCBpbnQgc2l6ZSwgaW50IGFsaWduLAotCQkgICB1MzIgZmxhZ3MsIHN0 cnVjdCB2Ym94X2JvICoqcHZib3hibykKLXsKLQlzdHJ1Y3QgdmJveF9ibyAqdmJveGJvOwotCXNp emVfdCBhY2Nfc2l6ZTsKLQlpbnQgcmV0OwotCi0JdmJveGJvID0ga3phbGxvYyhzaXplb2YoKnZi b3hibyksIEdGUF9LRVJORUwpOwotCWlmICghdmJveGJvKQotCQlyZXR1cm4gLUVOT01FTTsKLQot CXJldCA9IGRybV9nZW1fb2JqZWN0X2luaXQoJnZib3gtPmRkZXYsICZ2Ym94Ym8tPmdlbSwgc2l6 ZSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZnJlZV92Ym94Ym87Ci0KLQl2Ym94Ym8tPmJvLmJk ZXYgPSAmdmJveC0+dHRtLmJkZXY7Ci0KLQl2Ym94X3R0bV9wbGFjZW1lbnQodmJveGJvLCBUVE1f UExfRkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKLQotCWFjY19zaXplID0gdHRtX2Jv X2RtYV9hY2Nfc2l6ZSgmdmJveC0+dHRtLmJkZXYsIHNpemUsCi0JCQkJICAgICAgIHNpemVvZihz dHJ1Y3QgdmJveF9ibykpOwotCi0JcmV0ID0gdHRtX2JvX2luaXQoJnZib3gtPnR0bS5iZGV2LCAm dmJveGJvLT5ibywgc2l6ZSwKLQkJCSAgdHRtX2JvX3R5cGVfZGV2aWNlLCAmdmJveGJvLT5wbGFj ZW1lbnQsCi0JCQkgIGFsaWduID4+IFBBR0VfU0hJRlQsIGZhbHNlLCBhY2Nfc2l6ZSwKLQkJCSAg TlVMTCwgTlVMTCwgdmJveF9ib190dG1fZGVzdHJveSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJf ZnJlZV92Ym94Ym87Ci0KLQkqcHZib3hibyA9IHZib3hibzsKLQotCXJldHVybiAwOwotCi1lcnJf ZnJlZV92Ym94Ym86Ci0Ja2ZyZWUodmJveGJvKTsKLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdmJv eF9ib19waW4oc3RydWN0IHZib3hfYm8gKmJvLCB1MzIgcGxfZmxhZykKLXsKLQlzdHJ1Y3QgdHRt X29wZXJhdGlvbl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKLQlpbnQgaSwgcmV0OwotCi0J aWYgKGJvLT5waW5fY291bnQpIHsKLQkJYm8tPnBpbl9jb3VudCsrOwotCQlyZXR1cm4gMDsKLQl9 Ci0KLQlyZXQgPSB2Ym94X2JvX3Jlc2VydmUoYm8sIGZhbHNlKTsKLQlpZiAocmV0KQotCQlyZXR1 cm4gcmV0OwotCi0JdmJveF90dG1fcGxhY2VtZW50KGJvLCBwbF9mbGFnKTsKLQotCWZvciAoaSA9 IDA7IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQ7IGkrKykKLQkJYm8tPnBsYWNlbWVu dHNbaV0uZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7Ci0KLQlyZXQgPSB0dG1fYm9fdmFs aWRhdGUoJmJvLT5ibywgJmJvLT5wbGFjZW1lbnQsICZjdHgpOwotCWlmIChyZXQgPT0gMCkKLQkJ Ym8tPnBpbl9jb3VudCA9IDE7Ci0KLQl2Ym94X2JvX3VucmVzZXJ2ZShibyk7Ci0KLQlyZXR1cm4g cmV0OwotfQotCi1pbnQgdmJveF9ib191bnBpbihzdHJ1Y3QgdmJveF9ibyAqYm8pCi17Ci0Jc3Ry dWN0IHR0bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07Ci0JaW50IGksIHJl dDsKLQotCWlmICghYm8tPnBpbl9jb3VudCkgewotCQlEUk1fRVJST1IoInVucGluIGJhZCAlcFxu IiwgYm8pOwotCQlyZXR1cm4gMDsKLQl9Ci0JYm8tPnBpbl9jb3VudC0tOwotCWlmIChiby0+cGlu X2NvdW50KQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHZib3hfYm9fcmVzZXJ2ZShibywgZmFsc2Up OwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJFcnJvciAlZCByZXNlcnZpbmcgYm8sIGxlYXZp bmcgaXQgcGlubmVkXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQ7IGkrKykKLQkJYm8tPnBsYWNlbWVudHNb aV0uZmxhZ3MgJj0gflRUTV9QTF9GTEFHX05PX0VWSUNUOwotCi0JcmV0ID0gdHRtX2JvX3ZhbGlk YXRlKCZiby0+Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsKLQotCXZib3hfYm9fdW5yZXNlcnZl KGJvKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBNb3ZlIGEgdmJveC1vd25lZCBidWZm ZXIgb2JqZWN0IHRvIHN5c3RlbSBtZW1vcnkgaWYgbm8gb25lIGVsc2UgaGFzIGl0Ci0gKiBwaW5u ZWQuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQgaXQgcHJldmlvdXNseSwgYW5kIHRoaXMg Y2FsbCB3aWxsCi0gKiByZWxlYXNlIHRoZSBjYWxsZXIncyBwaW4uCi0gKi8KLWludCB2Ym94X2Jv X3B1c2hfc3lzcmFtKHN0cnVjdCB2Ym94X2JvICpibykKLXsKLQlzdHJ1Y3QgdHRtX29wZXJhdGlv bl9jdHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKLQlpbnQgaSwgcmV0OwotCi0JaWYgKCFiby0+ cGluX2NvdW50KSB7Ci0JCURSTV9FUlJPUigidW5waW4gYmFkICVwXG4iLCBibyk7Ci0JCXJldHVy biAwOwotCX0KLQliby0+cGluX2NvdW50LS07Ci0JaWYgKGJvLT5waW5fY291bnQpCi0JCXJldHVy biAwOwotCi0JaWYgKGJvLT5rbWFwLnZpcnR1YWwpIHsKLQkJdHRtX2JvX2t1bm1hcCgmYm8tPmtt YXApOwotCQliby0+a21hcC52aXJ0dWFsID0gTlVMTDsKLQl9Ci0KLQl2Ym94X3R0bV9wbGFjZW1l bnQoYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYm8tPnBsYWNl bWVudC5udW1fcGxhY2VtZW50OyBpKyspCi0JCWJvLT5wbGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRU TV9QTF9GTEFHX05PX0VWSUNUOwotCi0JcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZiby0+Ym8sICZi by0+cGxhY2VtZW50LCAmY3R4KTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigicHVzaGluZyB0 byBWUkFNIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0K IGludCB2Ym94X21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hKQogewogCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRh OwpAQCAtMzYyLDI3ICsxNjcsMyBAQCBpbnQgdmJveF9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAogCXJldHVybiB0dG1fYm9fbW1hcChmaWxwLCB2 bWEsICZ2Ym94LT50dG0uYmRldik7CiB9Ci0KLXZvaWQgKnZib3hfYm9fa21hcChzdHJ1Y3QgdmJv eF9ibyAqYm8pCi17Ci0JaW50IHJldDsKLQotCWlmIChiby0+a21hcC52aXJ0dWFsKQotCQlyZXR1 cm4gYm8tPmttYXAudmlydHVhbDsKLQotCXJldCA9IHR0bV9ib19rbWFwKCZiby0+Ym8sIDAsIGJv LT5iby5udW1fcGFnZXMsICZiby0+a21hcCk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoIkVy cm9yIGttYXBwaW5nIGJvOiAlZFxuIiwgcmV0KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0 dXJuIGJvLT5rbWFwLnZpcnR1YWw7Ci19Ci0KLXZvaWQgdmJveF9ib19rdW5tYXAoc3RydWN0IHZi b3hfYm8gKmJvKQotewotCWlmIChiby0+a21hcC52aXJ0dWFsKSB7Ci0JCXR0bV9ib19rdW5tYXAo JmJvLT5rbWFwKTsKLQkJYm8tPmttYXAudmlydHVhbCA9IE5VTEw7Ci0JfQotfQotLSAKMi4yMS4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=