From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: [PATCH v8] drm: Add library for shmem backed GEM objects Date: Tue, 12 Mar 2019 19:43:44 -0500 Message-ID: <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 mail-oi1-f194.google.com (mail-oi1-f194.google.com [209.85.167.194]) by gabe.freedesktop.org (Postfix) with ESMTPS id 075566E03A for ; Wed, 13 Mar 2019 00:43:48 +0000 (UTC) Received: by mail-oi1-f194.google.com with SMTP id j10so42628oij.13 for ; Tue, 12 Mar 2019 17:43:47 -0700 (PDT) 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, Eric Anholt List-Id: dri-devel@lists.freedesktop.org RnJvbTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpUaGlzIGFkZHMgYSBs aWJyYXJ5IGZvciBzaG1lbSBiYWNrZWQgR0VNIG9iamVjdHMuCgp2ODoKLSBleHBvcnQgZHJtX2dl bV9zaG1lbV9jcmVhdGVfd2l0aF9oYW5kbGUKLSBjYWxsIG1hcHBpbmdfc2V0X2dmcF9tYXNrIHRv IHNldCBkZWZhdWx0IHpvbmUgdG8gR0ZQX0hJR0hVU0VSCi0gQWRkIGhlbHBlciBkcm1fZ2VtX3No bWVtX2dldF9wYWdlc19zZ3QoKQoKdjc6Ci0gVXNlIHdyaXRlLWNvbWJpbmUgZm9yIG1tYXAgaW5z dGVhZC4gVGhpcyBpcyB0aGUgbW9yZSBjb21tb24KICBjYXNlLiAocm9iaGVyKQoKdjY6Ci0gRml4 IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXNzdWUgaW4gYW4gZXJyb3IgcGF0aCAoYW5ob2x0KS4K LSBBZGQgYSBkcm1fZ2VtX3NobWVtX3ZtX29wZW4oKSB0byB0aGUgZm9wcyB0byBnZXQgcHJvcGVy IHJlZmNvdW50aW5nCiAgb2YgdGhlIHBhZ2VzIChhbmhvbHQpLgoKdjU6Ci0gRHJvcCBkcm1fZ2Vt X3NobWVtX3ByaW1lX21tYXAoKSAoRGFuaWVsIFZldHRlcikKLSBkcm1fZ2VtX3NobWVtX21tYXAo KTogU3VidHJhY3QgZHJtX3ZtYV9ub2RlX3N0YXJ0KCkgdG8gZ2V0IHRoZSByZWFsCiAgdm1hLT52 bV9wZ29mZgotIGRybV9nZW1fc2htZW1fZmF1bHQoKTogVXNlIHZtZi0+cGdvZmYgbm93IHRoYXQg dm1hLT52bV9wZ29mZiBpcyBjb3JyZWN0Cgp2NDoKLSBEcm9wIGNhY2hlIG1vZGVzIChUaG9tYXMg SGVsbHN0cm9tKQotIEFkZCBhIEdFTSBhdHRhY2hlZCB2dGFibGUKCnYzOgotIEdyYW1tYXIgKFNh bSBSYXZuYm9yZykKLSBzL2RybV9nZW1fc2htZW1fcHV0X3BhZ2VzX3VubG9ja2VkL2RybV9nZW1f c2htZW1fcHV0X3BhZ2VzX2xvY2tlZC8KICAoU2FtIFJhdm5ib3JnKQotIEFkZCBkZWJ1ZyBvdXRw dXQgaW4gZXJyb3IgcGF0aCAoU2FtIFJhdm5ib3JnKQoKU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRy w7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+ClNpZ25lZC1vZmYtYnk6IEVyaWMgQW5ob2x0IDxl cmljQGFuaG9sdC5uZXQ+ClNpZ25lZC1vZmYtYnk6IFJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5v cmc+Ci0tLQogRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCAgfCAgMTIgKwog ZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fc2htZW1faGVscGVyLmMgfCA2MjUgKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5j bHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaCAgICAgfCAxNTkgKysrKysrKwogNSBmaWxl cyBjaGFuZ2VkLCA4MDMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v Z3B1L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBl cnMucnN0CmluZGV4IDE3Y2E3ZjhiZjNkMy4uNThiMzc1ZTQ3NjE1IDEwMDY0NAotLS0gYS9Eb2N1 bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1 L2RybS1rbXMtaGVscGVycy5yc3QKQEAgLTM2OSwzICszNjksMTUgQEAgTGVnYWN5IENSVEMvTW9k ZXNldCBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQogCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVy cy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCiAgICA6ZXhwb3J0OgorCitTSE1FTSBHRU0gSGVs cGVyIFJlZmVyZW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCisgICA6ZG9jOiBvdmVy dmlldworCisuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIu aAorICAgOmludGVybmFsOgorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9n ZW1fc2htZW1faGVscGVyLmMKKyAgIDpleHBvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGJkOTQzYTcxNzU2Yy4u ZmViZGMxMDJiNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMTczLDYgKzE3MywxMiBAQCBjb25maWcgRFJNX0tN U19DTUFfSEVMUEVSCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhlIEtNUyBD TUEgaGVscGVyIGZ1bmN0aW9ucwogCitjb25maWcgRFJNX0dFTV9TSE1FTV9IRUxQRVIKKwlib29s CisJZGVwZW5kcyBvbiBEUk0KKwloZWxwCisJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUg R0VNIHNobWVtIGhlbHBlciBmdW5jdGlvbnMKKwogY29uZmlnIERSTV9WTQogCWJvb2wKIAlkZXBl bmRzIG9uIERSTSAmJiBNTVUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAxYWM1NWM2NWVhYzAuLjc0NzZlZDk0NWUz MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMjUsNiArMjUsNyBAQCBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5E T00pICs9IGxpYi9kcm1fcmFuZG9tLm8KIGRybS0kKENPTkZJR19EUk1fVk0pICs9IGRybV92bS5v CiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogZHJtLSQoQ09ORklHX0RSTV9H RU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KK2RybS0kKENPTkZJR19EUk1f R0VNX1NITUVNX0hFTFBFUikgKz0gZHJtX2dlbV9zaG1lbV9oZWxwZXIubwogZHJtLSQoQ09ORklH X1BDSSkgKz0gYXRpX3BjaWdhcnQubwogZHJtLSQoQ09ORklHX0RSTV9QQU5FTCkgKz0gZHJtX3Bh bmVsLm8KIGRybS0kKENPTkZJR19PRikgKz0gZHJtX29mLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1f c2htZW1faGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4z NzUwYTk4MmFhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9z aG1lbV9oZWxwZXIuYwpAQCAtMCwwICsxLDYyNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBOb3JhbGYgVHLDuG5uZXMKKyAqLwor CisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgor I2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5j bHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbWUu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisKKy8qKgorICogRE9DOiBvdmVydmlldwor ICoKKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBoZWxwZXJzIGZvciBHRU0gb2JqZWN0cyBiYWNr ZWQgYnkgc2htZW0gYnVmZmVycworICogYWxsb2NhdGVkIHVzaW5nIGFub255bW91cyBwYWdlYWJs ZSBtZW1vcnkuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdF9mdW5j cyBkcm1fZ2VtX3NobWVtX2Z1bmNzID0geworCS5mcmVlID0gZHJtX2dlbV9zaG1lbV9mcmVlX29i amVjdCwKKwkucHJpbnRfaW5mbyA9IGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbywKKwkucGluID0g ZHJtX2dlbV9zaG1lbV9waW4sCisJLnVucGluID0gZHJtX2dlbV9zaG1lbV91bnBpbiwKKwkuZ2V0 X3NnX3RhYmxlID0gZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUsCisJLnZtYXAgPSBkcm1fZ2Vt X3NobWVtX3ZtYXAsCisJLnZ1bm1hcCA9IGRybV9nZW1fc2htZW1fdnVubWFwLAorCS52bV9vcHMg PSAmZHJtX2dlbV9zaG1lbV92bV9vcHMsCit9OworCisvKioKKyAqIGRybV9nZW1fc2htZW1fY3Jl YXRlIC0gQWxsb2NhdGUgYW4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUKKyAqIEBkZXY6IERS TSBkZXZpY2UKKyAqIEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaG1lbSBHRU0gb2JqZWN0LgorICoKKyAqIFJldHVy bnM6CisgKiBBIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqIG9uIHN1Y2Nlc3Mgb3IgYW4g RVJSX1BUUigpLWVuY29kZWQgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAq Lworc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1l bV9vYmplY3QgKnNobWVtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7 CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCWlmIChkZXYtPmRyaXZlci0+Z2VtX2Ny ZWF0ZV9vYmplY3QpCisJCW9iaiA9IGRldi0+ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVjdChkZXYs IHNpemUpOworCWVsc2UKKwkJb2JqID0ga3phbGxvYyhzaXplb2YoKnNobWVtKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKCFvYmot PmZ1bmNzKQorCQlvYmotPmZ1bmNzID0gJmRybV9nZW1fc2htZW1fZnVuY3M7CisKKwlyZXQgPSBk cm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl9mcmVlOworCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycl9yZWxlYXNlOworCisJc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29i aihvYmopOworCW11dGV4X2luaXQoJnNobWVtLT5wYWdlc19sb2NrKTsKKwltdXRleF9pbml0KCZz aG1lbS0+dm1hcF9sb2NrKTsKKworCS8qCisJICogT3VyIGJ1ZmZlcnMgYXJlIGtlcHQgcGlubmVk LCBzbyBhbGxvY2F0aW5nIHRoZW0KKwkgKiBmcm9tIHRoZSBNT1ZBQkxFIHpvbmUgaXMgYSByZWFs bHkgYmFkIGlkZWEsIGFuZAorCSAqIGNvbmZsaWN0cyB3aXRoIENNQS4gU2VlIGNvbW1lbnRzIGFi b3ZlIG5ld19pbm9kZSgpCisJICogd2h5IHRoaXMgaXMgcmVxdWlyZWQgX2FuZF8gZXhwZWN0ZWQg aWYgeW91J3JlCisJICogZ29pbmcgdG8gcGluIHRoZXNlIHBhZ2VzLgorCSAqLworCW1hcHBpbmdf c2V0X2dmcF9tYXNrKG9iai0+ZmlscC0+Zl9tYXBwaW5nLCBHRlBfSElHSFVTRVIgfAorCQkJICAg ICBfX0dGUF9SRVRSWV9NQVlGQUlMIHwgX19HRlBfTk9XQVJOKTsKKworCXJldHVybiBzaG1lbTsK KworZXJyX3JlbGVhc2U6CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworZXJyX2ZyZWU6 CisJa2ZyZWUob2JqKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChkcm1fZ2VtX3NobWVtX2NyZWF0ZSk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9mcmVl X29iamVjdCAtIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmpl Y3QKKyAqIEBvYmo6IEdFTSBvYmplY3QgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xl YW5zIHVwIHRoZSBHRU0gb2JqZWN0IHN0YXRlIGFuZCBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgdG8K KyAqIHN0b3JlIHRoZSBvYmplY3QgaXRzZWxmLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fZnJl ZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1f c2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlXQVJO X09OKHNobWVtLT52bWFwX3VzZV9jb3VudCk7CisKKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKSB7 CisJCXNobWVtLT5wYWdlc191c2VfY291bnQtLTsKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9i aiwgc2htZW0tPnNndCk7CisJCWt2ZnJlZShzaG1lbS0+cGFnZXMpOworCX0gZWxzZSB7CisJCWlm IChzaG1lbS0+c2d0KSB7CisJCQlkbWFfdW5tYXBfc2cob2JqLT5kZXYtPmRldiwgc2htZW0tPnNn dC0+c2dsLAorCQkJCSAgICAgc2htZW0tPnNndC0+bmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsK KworCQkJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOworCQkJc2dfZnJlZV90YWJsZShz aG1lbS0+c2d0KTsKKwkJCWtmcmVlKHNobWVtLT5zZ3QpOworCQl9CisJfQorCisJV0FSTl9PTihz aG1lbS0+cGFnZXNfdXNlX2NvdW50KTsKKworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsK KwltdXRleF9kZXN0cm95KCZzaG1lbS0+cGFnZXNfbG9jayk7CisJbXV0ZXhfZGVzdHJveSgmc2ht ZW0tPnZtYXBfbG9jayk7CisJa2ZyZWUoc2htZW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2dlbV9zaG1lbV9mcmVlX29iamVjdCk7CisKK3N0YXRpYyBpbnQgZHJtX2dlbV9zaG1lbV9nZXRf cGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7CisJc3RydWN0IHBhZ2UgKipw YWdlczsKKworCWlmIChzaG1lbS0+cGFnZXNfdXNlX2NvdW50KysgPiAwKQorCQlyZXR1cm4gMDsK KworCXBhZ2VzID0gZHJtX2dlbV9nZXRfcGFnZXMob2JqKTsKKwlpZiAoSVNfRVJSKHBhZ2VzKSkg eworCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gZ2V0IHBhZ2VzICglbGQpXG4iLCBQVFJfRVJS KHBhZ2VzKSk7CisJCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAwOworCQlyZXR1cm4gUFRSX0VS UihwYWdlcyk7CisJfQorCisJc2htZW0tPnBhZ2VzID0gcGFnZXM7CisKKwlyZXR1cm4gMDsKK30K KworLyoKKyAqIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzIC0gQWxsb2NhdGUgYmFja2luZyBwYWdl cyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKKyAq CisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBiYWNraW5nIHBhZ2VzIGV4aXN0cyBm b3IgdGhlIHNobWVtIEdFTSBvYmplY3QKKyAqIGFuZCBpbmNyZWFzZXMgdGhlIHVzZSBjb3VudC4K KyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc3RydWN0IGRy bV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXV0ZXhf bG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+cGFnZXNfbG9jayk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdlc19sb2NrZWQoc2htZW0pOwor CW11dGV4X3VubG9jaygmc2htZW0tPnBhZ2VzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VY UE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMpOworCitzdGF0aWMgdm9pZCBkcm1f Z2VtX3NobWVtX3B1dF9wYWdlc19sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKKwor CWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291bnQpKQorCQlyZXR1cm47CisK KwlpZiAoLS1zaG1lbS0+cGFnZXNfdXNlX2NvdW50ID4gMCkKKwkJcmV0dXJuOworCisJZHJtX2dl bV9wdXRfcGFnZXMob2JqLCBzaG1lbS0+cGFnZXMsCisJCQkgIHNobWVtLT5wYWdlc19tYXJrX2Rp cnR5X29uX3B1dCwKKwkJCSAgc2htZW0tPnBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0KTsKKwlz aG1lbS0+cGFnZXMgPSBOVUxMOworfQorCisvKgorICogZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMg LSBEZWNyZWFzZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2htZW0gR0VN IG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlv biBkZWNyZWFzZXMgdGhlIHVzZSBjb3VudCBhbmQgcHV0cyB0aGUgYmFja2luZyBwYWdlcyB3aGVu IHVzZSBkcm9wcyB0byB6ZXJvLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJbXV0ZXhfbG9jaygmc2htZW0t PnBhZ2VzX2xvY2spOworCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzX2xvY2tlZChzaG1lbSk7CisJ bXV0ZXhfdW5sb2NrKCZzaG1lbS0+cGFnZXNfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9n ZW1fc2htZW1fcHV0X3BhZ2VzKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3BpbiAtIFBpbiBi YWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBvYmo6IEdFTSBvYmplY3QK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhlIGJhY2tpbmcgcGFnZXMgYXJlIHBp bm5lZCBpbiBtZW1vcnkgd2hpbGUgdGhlCisgKiBidWZmZXIgaXMgZXhwb3J0ZWQuCisgKgorICog UmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1fcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2Vt X3NobWVtX29iaihvYmopOworCisJcmV0dXJuIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVt KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9waW4pOworCisvKioKKyAqIGRybV9n ZW1fc2htZW1fdW5waW4gLSBVbnBpbiBiYWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmpl Y3QKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhl IHJlcXVpcmVtZW50IHRoYXQgdGhlIGJhY2tpbmcgcGFnZXMgYXJlIHBpbm5lZCBpbgorICogbWVt b3J5LgorICovCit2b2lkIGRybV9nZW1fc2htZW1fdW5waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9n ZW1fc2htZW1fb2JqKG9iaik7CisKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7Cit9 CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fdW5waW4pOworCitzdGF0aWMgdm9pZCAqZHJt X2dlbV9zaG1lbV92bWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOworCWludCBy ZXQ7CisKKwlpZiAoc2htZW0tPnZtYXBfdXNlX2NvdW50KysgPiAwKQorCQlyZXR1cm4gc2htZW0t PnZhZGRyOworCisJcmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOworCWlmIChy ZXQpCisJCWdvdG8gZXJyX3plcm9fdXNlOworCisJaWYgKG9iai0+aW1wb3J0X2F0dGFjaCkKKwkJ c2htZW0tPnZhZGRyID0gZG1hX2J1Zl92bWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmKTsK KwllbHNlCisJCXNobWVtLT52YWRkciA9IHZtYXAoc2htZW0tPnBhZ2VzLCBvYmotPnNpemUgPj4g UEFHRV9TSElGVCwgVk1fTUFQLCBQQUdFX0tFUk5FTCk7CisKKwlpZiAoIXNobWVtLT52YWRkcikg eworCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gdm1hcCBwYWdlc1xuIik7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gZXJyX3B1dF9wYWdlczsKKwl9CisKKwlyZXR1cm4gc2htZW0tPnZhZGRy OworCitlcnJfcHV0X3BhZ2VzOgorCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKK2Vy cl96ZXJvX3VzZToKKwlzaG1lbS0+dm1hcF91c2VfY291bnQgPSAwOworCisJcmV0dXJuIEVSUl9Q VFIocmV0KTsKK30KKworLyoKKyAqIGRybV9nZW1fc2htZW1fdm1hcCAtIENyZWF0ZSBhIHZpcnR1 YWwgbWFwcGluZyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAc2htZW06IHNobWVtIEdFTSBv YmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1ha2VzIHN1cmUgdGhhdCBhIHZpcnR1YWwgYWRk cmVzcyBleGlzdHMgZm9yIHRoZSBidWZmZXIgYmFja2luZworICogdGhlIHNobWVtIEdFTSBvYmpl Y3QuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9y IGNvZGUgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqZHJtX2dlbV9zaG1lbV92bWFwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCXZvaWQgKnZhZGRyOworCWludCByZXQ7 CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnNobWVtLT52bWFwX2xvY2spOwor CWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJdmFkZHIgPSBkcm1fZ2VtX3NobWVt X3ZtYXBfbG9ja2VkKHNobWVtKTsKKwltdXRleF91bmxvY2soJnNobWVtLT52bWFwX2xvY2spOwor CisJcmV0dXJuIHZhZGRyOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3ZtYXApOwor CitzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc3RydWN0IGRybV9nZW1f c2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZz aG1lbS0+YmFzZTsKKworCWlmIChXQVJOX09OX09OQ0UoIXNobWVtLT52bWFwX3VzZV9jb3VudCkp CisJCXJldHVybjsKKworCWlmICgtLXNobWVtLT52bWFwX3VzZV9jb3VudCA+IDApCisJCXJldHVy bjsKKworCWlmIChvYmotPmltcG9ydF9hdHRhY2gpCisJCWRtYV9idWZfdnVubWFwKG9iai0+aW1w b3J0X2F0dGFjaC0+ZG1hYnVmLCBzaG1lbS0+dmFkZHIpOworCWVsc2UKKwkJdnVubWFwKHNobWVt LT52YWRkcik7CisKKwlzaG1lbS0+dmFkZHIgPSBOVUxMOworCWRybV9nZW1fc2htZW1fcHV0X3Bh Z2VzKHNobWVtKTsKK30KKworLyoKKyAqIGRybV9nZW1fc2htZW1fdnVubWFwIC0gVW5tYXAgYSB2 aXJ0dWFsIG1hcHBpbmcgZm8gYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAc2htZW06IHNobWVtIEdF TSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHZpcnR1YWwgYWRkcmVz cyB3aGVuIHVzZSBjb3VudCBkcm9wcyB0byB6ZXJvLgorICovCit2b2lkIGRybV9nZW1fc2htZW1f dnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRkcikKK3sKKwlzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2Jq KTsKKworCW11dGV4X2xvY2soJnNobWVtLT52bWFwX2xvY2spOworCWRybV9nZW1fc2htZW1fdnVu bWFwX2xvY2tlZChzaG1lbSk7CisJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKK30K K0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92dW5tYXApOworCitzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKgorZHJtX2dlbV9zaG1lbV9jcmVhdGVfd2l0aF9oYW5kbGUoc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHNpemVfdCBz aXplLAorCQkJCSB1aW50MzJfdCAqaGFuZGxlKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW07CisJaW50IHJldDsKKworCXNobWVtID0gZHJtX2dlbV9zaG1lbV9jcmVhdGUo ZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKHNobWVtKSkKKwkJcmV0dXJuIHNobWVtOworCisJLyoK KwkgKiBBbGxvY2F0ZSBhbiBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBpcyByZWdpc3Rl cmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2VlLgorCSAqLwor CXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZzaG1lbS0+YmFzZSwgaGFu ZGxlKTsKKwkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0gaGFuZGxlIGhvbGRzIGl0 IG5vdy4gKi8KKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnNobWVtLT5iYXNlKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcmV0dXJuIHNobWVtOworfQorRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX2NyZWF0ZV93aXRoX2hhbmRsZSk7CisKKy8qKgorICog ZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZSAtIENyZWF0ZSBhIGR1bWIgc2htZW0gYnVmZmVyIG9i amVjdAorICogQGZpbGU6IERSTSBmaWxlIHN0cnVjdHVyZSB0byBjcmVhdGUgdGhlIGR1bWIgYnVm ZmVyIGZvcgorICogQGRldjogRFJNIGRldmljZQorICogQGFyZ3M6IElPQ1RMIGRhdGEKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRoZSBwaXRjaCBvZiB0aGUgZHVtYiBidWZmZXIgYW5k IHJvdW5kcyBpdCB1cCB0byBhbgorICogaW50ZWdlciBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVs LiBEcml2ZXJzIGZvciBoYXJkd2FyZSB0aGF0IGRvZXNuJ3QgaGF2ZQorICogYW55IGFkZGl0aW9u YWwgcmVzdHJpY3Rpb25zIG9uIHRoZSBwaXRjaCBjYW4gZGlyZWN0bHkgdXNlIHRoaXMgZnVuY3Rp b24gYXMKKyAqIHRoZWlyICZkcm1fZHJpdmVyLmR1bWJfY3JlYXRlIGNhbGxiYWNrLgorICoKKyAq IEZvciBoYXJkd2FyZSB3aXRoIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zLCBkcml2ZXJzIGNhbiBh ZGp1c3QgdGhlIGZpZWxkcworICogc2V0IHVwIGJ5IHVzZXJzcGFjZSBiZWZvcmUgY2FsbGluZyBp bnRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBh IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1f ZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJICAgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCXUzMiBt aW5fcGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOworCXN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07CisKKwlpZiAoIWFyZ3MtPnBpdGNoIHx8 ICFhcmdzLT5zaXplKSB7CisJCWFyZ3MtPnBpdGNoID0gbWluX3BpdGNoOworCQlhcmdzLT5zaXpl ID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisJfSBlbHNlIHsKKwkJLyogZW5zdXJlIHNh bmUgbWluaW11bSB2YWx1ZXMgKi8KKwkJaWYgKGFyZ3MtPnBpdGNoIDwgbWluX3BpdGNoKQorCQkJ YXJncy0+cGl0Y2ggPSBtaW5fcGl0Y2g7CisJCWlmIChhcmdzLT5zaXplIDwgYXJncy0+cGl0Y2gg KiBhcmdzLT5oZWlnaHQpCisJCQlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWln aHQ7CisJfQorCisJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZV93aXRoX2hhbmRsZShmaWxl LCBkZXYsIGFyZ3MtPnNpemUsICZhcmdzLT5oYW5kbGUpOworCisJcmV0dXJuIFBUUl9FUlJfT1Jf WkVSTyhzaG1lbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2R1bWJfY3Jl YXRlKTsKKworc3RhdGljIHZtX2ZhdWx0X3QgZHJtX2dlbV9zaG1lbV9mYXVsdChzdHJ1Y3Qgdm1f ZmF1bHQgKnZtZikKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOwor CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9i aik7CisJbG9mZl90IG51bV9wYWdlcyA9IG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVj dCBwYWdlICpwYWdlOworCisJaWYgKHZtZi0+cGdvZmYgPiBudW1fcGFnZXMgfHwgV0FSTl9PTl9P TkNFKCFzaG1lbS0+cGFnZXMpKQorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJcGFnZSA9 IHNobWVtLT5wYWdlc1t2bWYtPnBnb2ZmXTsKKworCXJldHVybiB2bWZfaW5zZXJ0X3BhZ2Uodm1h LCB2bWYtPmFkZHJlc3MsIHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Zt X29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGRybV9nZW1fb2Jq ZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9v YmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKKwlpbnQgcmV0OworCisJ cmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOworCVdBUk5fT05fT05DRShyZXQg IT0gMCk7CisKKwlkcm1fZ2VtX3ZtX29wZW4odm1hKTsKK30KKworc3RhdGljIHZvaWQgZHJtX2dl bV9zaG1lbV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCisJ ZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOworCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsK K30KKworY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV9nZW1fc2htZW1fdm1f b3BzID0geworCS5mYXVsdCA9IGRybV9nZW1fc2htZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2Vt X3NobWVtX3ZtX29wZW4sCisJLmNsb3NlID0gZHJtX2dlbV9zaG1lbV92bV9jbG9zZSwKK307CitF WFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX3ZtX29wcyk7CisKKy8qKgorICogZHJtX2dl bV9zaG1lbV9tbWFwIC0gTWVtb3J5LW1hcCBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBmaWxwOiBG aWxlIG9iamVjdAorICogQHZtYTogVk1BIGZvciB0aGUgYXJlYSB0byBiZSBtYXBwZWQKKyAqCisg KiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgYW4gYXVnbWVudGVkIHZlcnNpb24gb2YgdGhlIEdF TSBEUk0gZmlsZSBtbWFwCisgKiBvcGVyYXRpb24gZm9yIHNobWVtIG9iamVjdHMuIERyaXZlcnMg d2hpY2ggZW1wbG95IHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZAorICogdXNlIHRoaXMgZnVuY3Rp b24gYXMgdGhlaXIgJmZpbGVfb3BlcmF0aW9ucy5tbWFwIGhhbmRsZXIgaW4gdGhlIERSTSBkZXZp Y2UgZmlsZSdzCisgKiBmaWxlX29wZXJhdGlvbnMgc3RydWN0dXJlLgorICoKKyAqIEluc3RlYWQg b2YgZGlyZWN0bHkgcmVmZXJlbmNpbmcgdGhpcyBmdW5jdGlvbiwgZHJpdmVycyBzaG91bGQgdXNl IHRoZQorICogREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUygpIG1hY3JvLgorICoKKyAqIFJldHVy bnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu CisgKi8KK2ludCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW07CisJaW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKHZtYS0+ dm1fcHJpdmF0ZV9kYXRhKTsKKworCXJldCA9IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVt KTsKKwlpZiAocmV0KSB7CisJCWRybV9nZW1fdm1fY2xvc2Uodm1hKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwkvKiBWTV9QRk5NQVAgd2FzIHNldCBieSBkcm1fZ2VtX21tYXAoKSAqLworCXZtYS0+ dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX01JWEVETUFQOwor CisJLyogUmVtb3ZlIHRoZSBmYWtlIG9mZnNldCAqLworCXZtYS0+dm1fcGdvZmYgLT0gZHJtX3Zt YV9ub2RlX3N0YXJ0KCZzaG1lbS0+YmFzZS52bWFfbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fbW1hcCk7CisKKy8qKgorICogZHJtX2dlbV9z aG1lbV9wcmludF9pbmZvKCkgLSBQcmludCAmZHJtX2dlbV9zaG1lbV9vYmplY3QgaW5mbyBmb3Ig ZGVidWdmcworICogQHA6IERSTSBwcmludGVyCisgKiBAaW5kZW50OiBUYWIgaW5kZW50YXRpb24g bGV2ZWwKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3ByaW50 X2luZm8oc3RydWN0IGRybV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50LAorCQkJICAg ICAgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJY29uc3Qgc3RydWN0IGRy bV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisK Kwlkcm1fcHJpbnRmX2luZGVudChwLCBpbmRlbnQsICJwYWdlc191c2VfY291bnQ9JXVcbiIsIHNo bWVtLT5wYWdlc191c2VfY291bnQpOworCWRybV9wcmludGZfaW5kZW50KHAsIGluZGVudCwgInZt YXBfdXNlX2NvdW50PSV1XG4iLCBzaG1lbS0+dm1hcF91c2VfY291bnQpOworCWRybV9wcmludGZf aW5kZW50KHAsIGluZGVudCwgInZhZGRyPSVwXG4iLCBzaG1lbS0+dmFkZHIpOworfQorRVhQT1JU X1NZTUJPTChkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8pOworCisvKioKKyAqIGRybV9nZW1fc2ht ZW1fZ2V0X3NnX3RhYmxlIC0gUHJvdmlkZSBhIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBpbm5l ZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlcyBmb3IgYSBzaG1lbSBHRU0g b2JqZWN0CisgKiBAb2JqOiBHRU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBleHBvcnRz IGEgc2NhdHRlci9nYXRoZXIgdGFibGUgc3VpdGFibGUgZm9yIFBSSU1FIHVzYWdlIGJ5CisgKiBj YWxsaW5nIHRoZSBzdGFuZGFyZCBETUEgbWFwcGluZyBBUEkuCisgKgorICogUmV0dXJuczoKKyAq IEEgcG9pbnRlciB0byB0aGUgc2NhdHRlci9nYXRoZXIgdGFibGUgb2YgcGlubmVkIHBhZ2VzIG9y IE5VTEwgb24gZmFpbHVyZS4KKyAqLworc3RydWN0IHNnX3RhYmxlICpkcm1fZ2VtX3NobWVtX2dl dF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKKworCXJl dHVybiBkcm1fcHJpbWVfcGFnZXNfdG9fc2coc2htZW0tPnBhZ2VzLCBvYmotPnNpemUgPj4gUEFH RV9TSElGVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3NobWVtX2dldF9zZ190YWJs ZSk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfc2d0IC0gUGluIHBhZ2VzLCBk bWEgbWFwIHRoZW0sIGFuZCByZXR1cm4gYQorICoJCQkJIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZv ciBhIHNobWVtIEdFTSBvYmplY3QuCisgKiBAb2JqOiBHRU0gb2JqZWN0CisgKgorICogVGhpcyBm dW5jdGlvbiByZXR1cm5zIGEgc2NhdHRlci9nYXRoZXIgdGFibGUgc3VpdGFibGUgZm9yIGRyaXZl ciB1c2FnZS4gSWYKKyAqIHRoZSBzZyB0YWJsZSBkb2Vzbid0IGV4aXN0LCB0aGUgcGFnZXMgYXJl IHBpbm5lZCwgZG1hLW1hcHBlZCwgYW5kIGEgc2cKKyAqIHRhYmxlIGNyZWF0ZWQuCisgKgorICog UmV0dXJuczoKKyAqIEEgcG9pbnRlciB0byB0aGUgc2NhdHRlci9nYXRoZXIgdGFibGUgb2YgcGlu bmVkIHBhZ2VzIG9yIGVycm5vIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAqZHJt X2dlbV9zaG1lbV9nZXRfcGFnZXNfc2d0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQorewor CWludCByZXQ7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9n ZW1fc2htZW1fb2JqKG9iaik7CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisKKwlpZiAoc2htZW0t PnNndCkKKwkJcmV0dXJuIHNobWVtLT5zZ3Q7CisKKwlXQVJOX09OKG9iai0+aW1wb3J0X2F0dGFj aCk7CisKKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzaG1lbSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCXNndCA9IGRybV9nZW1fc2htZW1fZ2V0X3NnX3Rh YmxlKCZzaG1lbS0+YmFzZSk7CisJaWYgKElTX0VSUihzZ3QpKSB7CisJCXJldCA9IFBUUl9FUlIo c2d0KTsKKwkJZ290byBlcnJfcHV0X3BhZ2VzOworCX0KKwkvKiBNYXAgdGhlIHBhZ2VzIGZvciB1 c2UgYnkgdGhlIGgvdy4gKi8KKwlkbWFfbWFwX3NnKG9iai0+ZGV2LT5kZXYsIHNndC0+c2dsLCBz Z3QtPm5lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CisKKwlzaG1lbS0+c2d0ID0gc2d0OworCisJ cmV0dXJuIHNndDsKKworZXJyX3B1dF9wYWdlczoKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhz aG1lbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9n ZW1fc2htZW1fZ2V0X3BhZ2VzX3NndCk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9wcmltZV9p bXBvcnRfc2dfdGFibGUgLSBQcm9kdWNlIGEgc2htZW0gR0VNIG9iamVjdCBmcm9tCisgKiAgICAg ICAgICAgICAgICAgYW5vdGhlciBkcml2ZXIncyBzY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5u ZWQgcGFnZXMKKyAqIEBkZXY6IERldmljZSB0byBpbXBvcnQgaW50bworICogQGF0dGFjaDogRE1B LUJVRiBhdHRhY2htZW50CisgKiBAc2d0OiBTY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQg cGFnZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGltcG9ydHMgYSBzY2F0dGVyL2dhdGhlciB0YWJs ZSBleHBvcnRlZCB2aWEgRE1BLUJVRiBieQorICogYW5vdGhlciBkcml2ZXIuIERyaXZlcnMgdGhh dCB1c2UgdGhlIHNobWVtIGhlbHBlcnMgc2hvdWxkIHNldCB0aGlzIGFzIHRoZWlyCisgKiAmZHJt X2RyaXZlci5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlIGNhbGxiYWNrLgorICoKKyAqIFJldHVy bnM6CisgKiBBIHBvaW50ZXIgdG8gYSBuZXdseSBjcmVhdGVkIEdFTSBvYmplY3Qgb3IgYW4gRVJS X1BUUi1lbmNvZGVkIG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0 cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJs ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50ICphdHRhY2gsCisJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXNpemVfdCBz aXplID0gUEFHRV9BTElHTihhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSk7CisJc2l6ZV90IG5wYWdlcyA9 IHNpemUgPj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVt OworCWludCByZXQ7CisKKwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3JlYXRlKGRldiwgc2l6ZSk7 CisJaWYgKElTX0VSUihzaG1lbSkpCisJCXJldHVybiBFUlJfQ0FTVChzaG1lbSk7CisKKwlzaG1l bS0+cGFnZXMgPSBrdm1hbGxvY19hcnJheShucGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzaG1lbS0+cGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJ Z290byBlcnJfZnJlZV9nZW07CisJfQorCisJcmV0ID0gZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRk cl9hcnJheXMoc2d0LCBzaG1lbS0+cGFnZXMsIE5VTEwsIG5wYWdlcyk7CisJaWYgKHJldCA8IDAp CisJCWdvdG8gZXJyX2ZyZWVfYXJyYXk7CisKKwlzaG1lbS0+c2d0ID0gc2d0OworCXNobWVtLT5w YWdlc191c2VfY291bnQgPSAxOyAvKiBQZXJtYW5lbnRseSBwaW5uZWQgZnJvbSBvdXIgcG9pbnQg b2YgdmlldyAqLworCisJRFJNX0RFQlVHX1BSSU1FKCJzaXplID0gJXp1XG4iLCBzaXplKTsKKwor CXJldHVybiAmc2htZW0tPmJhc2U7CisKK2Vycl9mcmVlX2FycmF5OgorCWt2ZnJlZShzaG1lbS0+ cGFnZXMpOworZXJyX2ZyZWVfZ2VtOgorCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmc2ht ZW0tPmJhc2UpOworCisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KGRybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVt X2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDM4YjZk MzEzNDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxw ZXIuaApAQCAtMCwwICsxLDE1OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgKi8KKworI2lmbmRlZiBfX0RSTV9HRU1fU0hNRU1fSEVMUEVSX0hfXworI2RlZmluZSBfX0RS TV9HRU1fU0hNRU1fSEVMUEVSX0hfXworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRl IDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxkcm0v ZHJtX2ZpbGUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGRybS9kcm1f aW9jdGwuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+CisKK3N0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQ7CitzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWI7CitzdHJ1Y3QgZHJtX3ByaW50 ZXI7CitzdHJ1Y3Qgc2dfdGFibGU7CisKKy8qKgorICogc3RydWN0IGRybV9nZW1fc2htZW1fb2Jq ZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgc2htZW0KKyAqLworc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0IHsKKwkvKioKKwkgKiBAYmFzZTogQmFzZSBHRU0gb2JqZWN0CisJICovCisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisKKwkvKioKKwkgKiBAcGFnZXNfbG9jazogUHJvdGVj dHMgdGhlIHBhZ2UgdGFibGUgYW5kIHVzZSBjb3VudAorCSAqLworCXN0cnVjdCBtdXRleCBwYWdl c19sb2NrOworCisJLyoqCisJICogQHBhZ2VzOiBQYWdlIHRhYmxlCisJICovCisJc3RydWN0IHBh Z2UgKipwYWdlczsKKworCS8qKgorCSAqIEBwYWdlc191c2VfY291bnQ6CisJICoKKwkgKiBSZWZl cmVuY2UgY291bnQgb24gdGhlIHBhZ2VzIHRhYmxlLgorCSAqIFRoZSBwYWdlcyBhcmUgcHV0IHdo ZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfdXNl X2NvdW50OworCisJLyoqCisJICogQHBhZ2VzX21hcmtfZGlydHlfb25fcHV0OgorCSAqCisJICog TWFyayBwYWdlcyBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBp bnQgcGFnZXNfbWFya19kaXJ0eV9vbl9wdXQgICAgOiAxOworCisJLyoqCisJICogQHBhZ2VzX21h cmtfYWNjZXNzZWRfb25fcHV0OgorCSAqCisJICogTWFyayBwYWdlcyBhcyBhY2Nlc3NlZCB3aGVu IHRoZXkgYXJlIHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfbWFya19hY2Nlc3NlZF9v bl9wdXQgOiAxOworCisJLyoqCisJICogQHNndDogU2NhdHRlci9nYXRoZXIgdGFibGUgZm9yIGlt cG9ydGVkIFBSSU1FIGJ1ZmZlcnMKKwkgKi8KKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKworCS8q KgorCSAqIEB2bWFwX2xvY2s6IFByb3RlY3RzIHRoZSB2bWFwIGFkZHJlc3MgYW5kIHVzZSBjb3Vu dAorCSAqLworCXN0cnVjdCBtdXRleCB2bWFwX2xvY2s7CisKKwkvKioKKwkgKiBAdmFkZHI6IEtl cm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGJhY2tpbmcgbWVtb3J5CisJICovCisJdm9pZCAq dmFkZHI7CisKKwkvKioKKwkgKiBAdm1hcF91c2VfY291bnQ6CisJICoKKwkgKiBSZWZlcmVuY2Ug Y291bnQgb24gdGhlIHZpcnR1YWwgYWRkcmVzcy4KKwkgKiBUaGUgYWRkcmVzcyBhcmUgdW4tbWFw cGVkIHdoZW4gdGhlIGNvdW50IHJlYWNoZXMgemVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdm1h cF91c2VfY291bnQ7Cit9OworCisjZGVmaW5lIHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaikgXAor CWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCwgYmFzZSkKKwor LyoqCisgKiBERUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BTKCkgLSBNYWNybyB0byBnZW5lcmF0ZSBm aWxlIG9wZXJhdGlvbnMgZm9yIHNobWVtIGRyaXZlcnMKKyAqIEBuYW1lOiBuYW1lIGZvciB0aGUg Z2VuZXJhdGVkIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgbWFjcm8gYXV0b2dlbmVyYXRlcyBhIHN1 aXRhYmxlICZzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvciBzaG1lbSBiYXNlZAorICogZHJpdmVy cywgd2hpY2ggY2FuIGJlIGFzc2lnbmVkIHRvICZkcm1fZHJpdmVyLmZvcHMuIE5vdGUgdGhhdCB0 aGlzIHN0cnVjdHVyZQorICogY2Fubm90IGJlIHNoYXJlZCBiZXR3ZWVuIGRyaXZlcnMsIGJlY2F1 c2UgaXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlCisgKiBjdXJyZW50IG1vZHVsZSB1c2lu ZyBUSElTX01PRFVMRS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGFscmVh ZHkgbWFya2VkIGFzIHN0YXRpYyAtIGlmIHlvdSBuZWVkIGEKKyAqIG5vbi1zdGF0aWMgdmVyc2lv biBvZiB0aGlzIHlvdSdyZSBwcm9iYWJseSBkb2luZyBpdCB3cm9uZyBhbmQgd2lsbCBicmVhayB0 aGUKKyAqIFRISVNfTU9EVUxFIHJlZmVyZW5jZSBieSBhY2NpZGVudC4KKyAqLworI2RlZmluZSBE RUZJTkVfRFJNX0dFTV9TSE1FTV9GT1BTKG5hbWUpIFwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZp bGVfb3BlcmF0aW9ucyBuYW1lID0ge1wKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLFwKKwkJLm9w ZW4JCT0gZHJtX29wZW4sXAorCQkucmVsZWFzZQk9IGRybV9yZWxlYXNlLFwKKwkJLnVubG9ja2Vk X2lvY3RsCT0gZHJtX2lvY3RsLFwKKwkJLmNvbXBhdF9pb2N0bAk9IGRybV9jb21wYXRfaW9jdGws XAorCQkucG9sbAkJPSBkcm1fcG9sbCxcCisJCS5yZWFkCQk9IGRybV9yZWFkLFwKKwkJLmxsc2Vl awkJPSBub29wX2xsc2VlayxcCisJCS5tbWFwCQk9IGRybV9nZW1fc2htZW1fbW1hcCwgXAorCX0K Kworc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGRybV9nZW1fc2htZW1fZnJl ZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitpbnQgZHJtX2dlbV9zaG1l bV9nZXRfcGFnZXMoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cit2b2lkIGRy bV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0p OworaW50IGRybV9nZW1fc2htZW1fcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3Zv aWQgZHJtX2dlbV9zaG1lbV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lk ICpkcm1fZ2VtX3NobWVtX3ZtYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBk cm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFk ZHIpOworCitzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKgorZHJtX2dlbV9zaG1lbV9jcmVh dGVfd2l0aF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSB1aW50MzJfdCAqaGFuZGxlKTsKK2lu dCBkcm1fZ2VtX3NobWVtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiAq YXJncyk7CisKK2ludCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRp b25zX3N0cnVjdCBkcm1fZ2VtX3NobWVtX3ZtX29wczsKKwordm9pZCBkcm1fZ2VtX3NobWVtX3By aW50X2luZm8oc3RydWN0IGRybV9wcmludGVyICpwLCB1bnNpZ25lZCBpbnQgaW5kZW50LAorCQkJ ICAgICAgY29uc3Qgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworCitzdHJ1Y3Qgc2dfdGFi bGUgKmRybV9nZW1fc2htZW1fZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9z Z190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9h dHRhY2htZW50ICphdHRhY2gsCisJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKKworc3Ry dWN0IHNnX3RhYmxlICpkcm1fZ2VtX3NobWVtX2dldF9wYWdlc19zZ3Qoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmopOworCisvKioKKyAqIERSTV9HRU1fU0hNRU1fRFJJVkVSX09QUyAtIERlZmF1 bHQgc2htZW0gR0VNIG9wZXJhdGlvbnMKKyAqCisgKiBUaGlzIG1hY3JvIHByb3ZpZGVzIGEgc2hv cnRjdXQgZm9yIHNldHRpbmcgdGhlIHNobWVtIEdFTSBvcGVyYXRpb25zIGluCisgKiB0aGUgJmRy bV9kcml2ZXIgc3RydWN0dXJlLgorICovCisjZGVmaW5lIERSTV9HRU1fU0hNRU1fRFJJVkVSX09Q UyBcCisJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLCBc CisJLnByaW1lX2ZkX3RvX2hhbmRsZQk9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLCBcCisJ LmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9z Z190YWJsZSwgXAorCS5nZW1fcHJpbWVfbW1hcAkJPSBkcm1fZ2VtX3ByaW1lX21tYXAsIFwKKwku ZHVtYl9jcmVhdGUJCT0gZHJtX2dlbV9zaG1lbV9kdW1iX2NyZWF0ZQorCisjZW5kaWYgLyogX19E Uk1fR0VNX1NITUVNX0hFTFBFUl9IX18gKi8KLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs