From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: [PATCH v7] drm: Add library for shmem backed GEM objects Date: Wed, 6 Mar 2019 17:01:44 -0600 Message-ID: <20190306230144.18135-1-robh@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ot1-f66.google.com (mail-ot1-f66.google.com [209.85.210.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id 94F0B6E1CF for ; Wed, 6 Mar 2019 23:01:47 +0000 (UTC) Received: by mail-ot1-f66.google.com with SMTP id g1so12355305otj.11 for ; Wed, 06 Mar 2019 15:01:47 -0800 (PST) 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 List-Id: dri-devel@lists.freedesktop.org RnJvbTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+CgpUaGlzIGFkZHMgYSBs aWJyYXJ5IGZvciBzaG1lbSBiYWNrZWQgR0VNIG9iamVjdHMuCgp2NzoKLSBVc2Ugd3JpdGUtY29t YmluZSBmb3IgbW1hcCBpbnN0ZWFkLiBUaGlzIGlzIHRoZSBtb3JlIGNvbW1vbgogIGNhc2UuIChy b2JoZXIpCgp2NjoKLSBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpc3N1ZSBpbiBhbiBlcnJv ciBwYXRoIChhbmhvbHQpLgotIEFkZCBhIGRybV9nZW1fc2htZW1fdm1fb3BlbigpIHRvIHRoZSBm b3BzIHRvIGdldCBwcm9wZXIgcmVmY291bnRpbmcKICBvZiB0aGUgcGFnZXMgKGFuaG9sdCkuCgp2 NToKLSBEcm9wIGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcCgpIChEYW5pZWwgVmV0dGVyKQotIGRy bV9nZW1fc2htZW1fbW1hcCgpOiBTdWJ0cmFjdCBkcm1fdm1hX25vZGVfc3RhcnQoKSB0byBnZXQg dGhlIHJlYWwKICB2bWEtPnZtX3Bnb2ZmCi0gZHJtX2dlbV9zaG1lbV9mYXVsdCgpOiBVc2Ugdm1m LT5wZ29mZiBub3cgdGhhdCB2bWEtPnZtX3Bnb2ZmIGlzIGNvcnJlY3QKCnY0OgotIERyb3AgY2Fj aGUgbW9kZXMgKFRob21hcyBIZWxsc3Ryb20pCi0gQWRkIGEgR0VNIGF0dGFjaGVkIHZ0YWJsZQoK djM6Ci0gR3JhbW1hciAoU2FtIFJhdm5ib3JnKQotIHMvZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXNf dW5sb2NrZWQvZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXNfbG9ja2VkLwogIChTYW0gUmF2bmJvcmcp Ci0gQWRkIGRlYnVnIG91dHB1dCBpbiBlcnJvciBwYXRoIChTYW0gUmF2bmJvcmcpCgpTaWduZWQt b2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KU2lnbmVkLW9mZi1i eTogRXJpYyBBbmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KU2lnbmVkLW9mZi1ieTogUm9iIEhlcnJp bmcgPHJvYmhAa2VybmVsLm9yZz4KLS0tCkkgZG9uJ3QgaGF2ZSBhIHVzZXIgdG8gc3VibWl0IGp1 c3QgeWV0LCBidXQgd2UgYXJlIHVzaW5nIHRoaXMgZm9yIApwYW5mcm9zdCB3aGljaCBjYW4gYmUg c2VlbiBoZXJlWzFdLiBJIGV4cGVjdCB3ZSdsbCBiZSByZWFkeSB0byBtZXJnZSAKcGFuZnJvc3Qg Zm9yIDUuMi4KClJvYgoKWzFdIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9wYW5mcm9z dC9saW51eC9ibG9iL3BhbmZyb3N0LTUuMC1yYzQvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3Bh bmZyb3N0X2dlbS5jCgogRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCAgfCAg MTIgKwogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgfCAgIDYgKwogZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMgfCA1NjAgKysrKysrKysrKysrKysrKysrKysrKysr KwogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaCAgICAgfCAxNTMgKysrKysrKwog NSBmaWxlcyBjaGFuZ2VkLCA3MzIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21z LWhlbHBlcnMucnN0CmluZGV4IGI0MjJlYjhlZGYxNi4uNDRlNDdkZGMyMWQ2IDEwMDY0NAotLS0g YS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRp b24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QKQEAgLTM0NywzICszNDcsMTUgQEAgTGVnYWN5IENS VEMvTW9kZXNldCBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQogCiAuLiBrZXJuZWwtZG9jOjog ZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCiAgICA6ZXhwb3J0OgorCitTSE1FTSBH RU0gSGVscGVyIFJlZmVyZW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4ga2Vy bmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCisgICA6ZG9j OiBvdmVydmlldworCisuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAorICAgOmludGVybmFsOgorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fc2htZW1faGVscGVyLmMKKyAgIDpleHBvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDQzODVmMDBl MWQwNS4uMGRlZGJjMDQwYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwor KysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMTc3LDYgKzE3NywxMiBAQCBjb25maWcg RFJNX0tNU19DTUFfSEVMUEVSCiAJaGVscAogCSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhl IEtNUyBDTUEgaGVscGVyIGZ1bmN0aW9ucwogCitjb25maWcgRFJNX0dFTV9TSE1FTV9IRUxQRVIK Kwlib29sCisJZGVwZW5kcyBvbiBEUk0KKwloZWxwCisJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVl ZCB0aGUgR0VNIHNobWVtIGhlbHBlciBmdW5jdGlvbnMKKwogY29uZmlnIERSTV9WTQogCWJvb2wK IAlkZXBlbmRzIG9uIERSTSAmJiBNTVUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBjZThkMWQzODQzMTkuLjIwM2Iz MTFmMTJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMjUsNiArMjUsNyBAQCBkcm0tJChDT05GSUdfRFJNX0xJ Ql9SQU5ET00pICs9IGxpYi9kcm1fcmFuZG9tLm8KIGRybS0kKENPTkZJR19EUk1fVk0pICs9IGRy bV92bS5vCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogZHJtLSQoQ09ORklH X0RSTV9HRU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KK2RybS0kKENPTkZJ R19EUk1fR0VNX1NITUVNX0hFTFBFUikgKz0gZHJtX2dlbV9zaG1lbV9oZWxwZXIubwogZHJtLSQo Q09ORklHX1BDSSkgKz0gYXRpX3BjaWdhcnQubwogZHJtLSQoQ09ORklHX0RSTV9QQU5FTCkgKz0g ZHJtX3BhbmVsLm8KIGRybS0kKENPTkZJR19PRikgKz0gZHJtX29mLm8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fc2htZW1faGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi4zMzk0NzY4ZTA2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV9zaG1lbV9oZWxwZXIuYwpAQCAtMCwwICsxLDU2MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgMjAxOCBOb3JhbGYgVHLDuG5uZXMK KyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9y dC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgor CisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgor I2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1f cHJpbWUuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+CisKKy8qKgorICogRE9DOiBvdmVy dmlldworICoKKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBoZWxwZXJzIGZvciBHRU0gb2JqZWN0 cyBiYWNrZWQgYnkgc2htZW0gYnVmZmVycworICogYWxsb2NhdGVkIHVzaW5nIGFub255bW91cyBw YWdlYWJsZSBtZW1vcnkuCisgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZ2VtX29iamVj dF9mdW5jcyBkcm1fZ2VtX3NobWVtX2Z1bmNzID0geworCS5mcmVlID0gZHJtX2dlbV9zaG1lbV9m cmVlX29iamVjdCwKKwkucHJpbnRfaW5mbyA9IGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbywKKwku cGluID0gZHJtX2dlbV9zaG1lbV9waW4sCisJLnVucGluID0gZHJtX2dlbV9zaG1lbV91bnBpbiwK KwkuZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9zaG1lbV9nZXRfc2dfdGFibGUsCisJLnZtYXAgPSBk cm1fZ2VtX3NobWVtX3ZtYXAsCisJLnZ1bm1hcCA9IGRybV9nZW1fc2htZW1fdnVubWFwLAorCS52 bV9vcHMgPSAmZHJtX2dlbV9zaG1lbV92bV9vcHMsCit9OworCisvKioKKyAqIGRybV9nZW1fc2ht ZW1fY3JlYXRlIC0gQWxsb2NhdGUgYW4gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHNpemUKKyAqIEBk ZXY6IERSTSBkZXZpY2UKKyAqIEBzaXplOiBTaXplIG9mIHRoZSBvYmplY3QgdG8gYWxsb2NhdGUK KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzaG1lbSBHRU0gb2JqZWN0LgorICoKKyAq IFJldHVybnM6CisgKiBBIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqIG9uIHN1Y2Nlc3Mg b3IgYW4gRVJSX1BUUigpLWVuY29kZWQgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KKyAqLworc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dl bV9zaG1lbV9vYmplY3QgKnNobWVtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWlu dCByZXQ7CisKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCWlmIChkZXYtPmRyaXZlci0+ Z2VtX2NyZWF0ZV9vYmplY3QpCisJCW9iaiA9IGRldi0+ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVj dChkZXYsIHNpemUpOworCWVsc2UKKwkJb2JqID0ga3phbGxvYyhzaXplb2YoKnNobWVtKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYg KCFvYmotPmZ1bmNzKQorCQlvYmotPmZ1bmNzID0gJmRybV9nZW1fc2htZW1fZnVuY3M7CisKKwly ZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgb2JqLCBzaXplKTsKKwlpZiAocmV0KQorCQln b3RvIGVycl9mcmVlOworCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQob2JqKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWxlYXNlOworCisJc2htZW0gPSB0b19kcm1fZ2VtX3No bWVtX29iaihvYmopOworCW11dGV4X2luaXQoJnNobWVtLT5wYWdlc19sb2NrKTsKKwltdXRleF9p bml0KCZzaG1lbS0+dm1hcF9sb2NrKTsKKworCXJldHVybiBzaG1lbTsKKworZXJyX3JlbGVhc2U6 CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZShvYmopOworZXJyX2ZyZWU6CisJa2ZyZWUob2JqKTsK KworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkcm1fZ2VtX3No bWVtX2NyZWF0ZSk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdCAtIEZyZWUg cmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBvYmo6IEdF TSBvYmplY3QgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVwIHRoZSBHRU0g b2JqZWN0IHN0YXRlIGFuZCBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgdG8KKyAqIHN0b3JlIHRoZSBv YmplY3QgaXRzZWxmLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3Qoc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlXQVJOX09OKHNobWVtLT52bWFw X3VzZV9jb3VudCk7CisKKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKSB7CisJCXNobWVtLT5wYWdl c191c2VfY291bnQtLTsKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgc2htZW0tPnNndCk7 CisJCWt2ZnJlZShzaG1lbS0+cGFnZXMpOworCX0KKworCVdBUk5fT04oc2htZW0tPnBhZ2VzX3Vz ZV9jb3VudCk7CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJbXV0ZXhfZGVzdHJv eSgmc2htZW0tPnBhZ2VzX2xvY2spOworCW11dGV4X2Rlc3Ryb3koJnNobWVtLT52bWFwX2xvY2sp OworCWtmcmVlKHNobWVtKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fZnJl ZV9vYmplY3QpOworCitzdGF0aWMgaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzX2xvY2tlZChz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQoreworCXN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqID0gJnNobWVtLT5iYXNlOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisKKwlpZiAo c2htZW0tPnBhZ2VzX3VzZV9jb3VudCsrID4gMCkKKwkJcmV0dXJuIDA7CisKKwlwYWdlcyA9IGRy bV9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJaWYgKElTX0VSUihwYWdlcykpIHsKKwkJRFJNX0RFQlVH X0tNUygiRmFpbGVkIHRvIGdldCBwYWdlcyAoJWxkKVxuIiwgUFRSX0VSUihwYWdlcykpOworCQlz aG1lbS0+cGFnZXNfdXNlX2NvdW50ID0gMDsKKwkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOworCX0K KworCXNobWVtLT5wYWdlcyA9IHBhZ2VzOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkcm1f Z2VtX3NobWVtX2dldF9wYWdlcyAtIEFsbG9jYXRlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2htZW0g R0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5j dGlvbiBtYWtlcyBzdXJlIHRoYXQgYmFja2luZyBwYWdlcyBleGlzdHMgZm9yIHRoZSBzaG1lbSBH RU0gb2JqZWN0CisgKiBhbmQgaW5jcmVhc2VzIHRoZSB1c2UgY291bnQuCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4K KyAqLworaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0pCit7CisJaW50IHJldDsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0 aWJsZSgmc2htZW0tPnBhZ2VzX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0 ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHNobWVtKTsKKwltdXRleF91bmxvY2so JnNobWVtLT5wYWdlc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRy bV9nZW1fc2htZW1fZ2V0X3BhZ2VzKTsKKworc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9wdXRf cGFnZXNfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7CisKKwlpZiAoV0FSTl9PTl9P TkNFKCFzaG1lbS0+cGFnZXNfdXNlX2NvdW50KSkKKwkJcmV0dXJuOworCisJaWYgKC0tc2htZW0t PnBhZ2VzX3VzZV9jb3VudCA+IDApCisJCXJldHVybjsKKworCWRybV9nZW1fcHV0X3BhZ2VzKG9i aiwgc2htZW0tPnBhZ2VzLAorCQkJICBzaG1lbS0+cGFnZXNfbWFya19kaXJ0eV9vbl9wdXQsCisJ CQkgIHNobWVtLT5wYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dCk7CisJc2htZW0tPnBhZ2VzID0g TlVMTDsKK30KKworLyoKKyAqIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzIC0gRGVjcmVhc2UgdXNl IGNvdW50IG9uIHRoZSBiYWNraW5nIHBhZ2VzIGZvciBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBz aG1lbTogc2htZW0gR0VNIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVjcmVhc2VzIHRo ZSB1c2UgY291bnQgYW5kIHB1dHMgdGhlIGJhY2tpbmcgcGFnZXMgd2hlbiB1c2UgZHJvcHMgdG8g emVyby4KKyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKnNobWVtKQoreworCW11dGV4X2xvY2soJnNobWVtLT5wYWdlc19sb2NrKTsK Kwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlc19sb2NrZWQoc2htZW0pOworCW11dGV4X3VubG9jaygm c2htZW0tPnBhZ2VzX2xvY2spOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3B1dF9w YWdlcyk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9waW4gLSBQaW4gYmFja2luZyBwYWdlcyBm b3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAb2JqOiBHRU0gb2JqZWN0CisgKgorICogVGhpcyBm dW5jdGlvbiBtYWtlcyBzdXJlIHRoZSBiYWNraW5nIHBhZ2VzIGFyZSBwaW5uZWQgaW4gbWVtb3J5 IHdoaWxlIHRoZQorICogYnVmZmVyIGlzIGV4cG9ydGVkLgorICoKKyAqIFJldHVybnM6CisgKiAw IG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2lu dCBkcm1fZ2VtX3NobWVtX3BpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2Jq KTsKKworCXJldHVybiBkcm1fZ2VtX3NobWVtX2dldF9wYWdlcyhzaG1lbSk7Cit9CitFWFBPUlRf U1lNQk9MKGRybV9nZW1fc2htZW1fcGluKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3VucGlu IC0gVW5waW4gYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2JqZWN0CisgKiBAb2JqOiBH RU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSByZXF1aXJlbWVudCB0 aGF0IHRoZSBiYWNraW5nIHBhZ2VzIGFyZSBwaW5uZWQgaW4KKyAqIG1lbW9yeS4KKyAqLwordm9p ZCBkcm1fZ2VtX3NobWVtX3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihv YmopOworCisJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOworfQorRVhQT1JUX1NZTUJP TChkcm1fZ2VtX3NobWVtX3VucGluKTsKKworc3RhdGljIHZvaWQgKmRybV9nZW1fc2htZW1fdm1h cF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKKwlpbnQgcmV0OworCisJaWYgKHNo bWVtLT52bWFwX3VzZV9jb3VudCsrID4gMCkKKwkJcmV0dXJuIHNobWVtLT52YWRkcjsKKworCXJl dCA9IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHNobWVtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVy cl96ZXJvX3VzZTsKKworCWlmIChvYmotPmltcG9ydF9hdHRhY2gpCisJCXNobWVtLT52YWRkciA9 IGRtYV9idWZfdm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRtYWJ1Zik7CisJZWxzZQorCQlzaG1l bS0+dmFkZHIgPSB2bWFwKHNobWVtLT5wYWdlcywgb2JqLT5zaXplID4+IFBBR0VfU0hJRlQsIFZN X01BUCwgUEFHRV9LRVJORUwpOworCisJaWYgKCFzaG1lbS0+dmFkZHIpIHsKKwkJRFJNX0RFQlVH X0tNUygiRmFpbGVkIHRvIHZtYXAgcGFnZXNcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3Rv IGVycl9wdXRfcGFnZXM7CisJfQorCisJcmV0dXJuIHNobWVtLT52YWRkcjsKKworZXJyX3B1dF9w YWdlczoKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7CitlcnJfemVyb191c2U6CisJ c2htZW0tPnZtYXBfdXNlX2NvdW50ID0gMDsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisK Ky8qCisgKiBkcm1fZ2VtX3NobWVtX3ZtYXAgLSBDcmVhdGUgYSB2aXJ0dWFsIG1hcHBpbmcgZm9y IGEgc2htZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgorICog VGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSB2aXJ0dWFsIGFkZHJlc3MgZXhpc3RzIGZv ciB0aGUgYnVmZmVyIGJhY2tpbmcKKyAqIHRoZSBzaG1lbSBHRU0gb2JqZWN0LgorICoKKyAqIFJl dHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUuCisgKi8KK3ZvaWQgKmRybV9nZW1fc2htZW1fdm1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dl bV9zaG1lbV9vYmoob2JqKTsKKwl2b2lkICp2YWRkcjsKKwlpbnQgcmV0OworCisJcmV0ID0gbXV0 ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gRVJSX1BUUihyZXQpOworCXZhZGRyID0gZHJtX2dlbV9zaG1lbV92bWFwX2xvY2tlZChz aG1lbSk7CisJbXV0ZXhfdW5sb2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKKworCXJldHVybiB2YWRk cjsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV92bWFwKTsKKworc3RhdGljIHZvaWQg ZHJtX2dlbV9zaG1lbV92dW5tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW0pCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSAmc2htZW0tPmJhc2U7CisK KwlpZiAoV0FSTl9PTl9PTkNFKCFzaG1lbS0+dm1hcF91c2VfY291bnQpKQorCQlyZXR1cm47CisK KwlpZiAoLS1zaG1lbS0+dm1hcF91c2VfY291bnQgPiAwKQorCQlyZXR1cm47CisKKwlpZiAob2Jq LT5pbXBvcnRfYXR0YWNoKQorCQlkbWFfYnVmX3Z1bm1hcChvYmotPmltcG9ydF9hdHRhY2gtPmRt YWJ1Ziwgc2htZW0tPnZhZGRyKTsKKwllbHNlCisJCXZ1bm1hcChzaG1lbS0+dmFkZHIpOworCisJ c2htZW0tPnZhZGRyID0gTlVMTDsKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7Cit9 CisKKy8qCisgKiBkcm1fZ2VtX3NobWVtX3Z1bm1hcCAtIFVubWFwIGEgdmlydHVhbCBtYXBwaW5n IGZvIGEgc2htZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgor ICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgd2hlbiB1c2UgY291 bnQgZHJvcHMgdG8gemVyby4KKyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpCit7CisJc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwltdXRleF9s b2NrKCZzaG1lbS0+dm1hcF9sb2NrKTsKKwlkcm1fZ2VtX3NobWVtX3Z1bm1hcF9sb2NrZWQoc2ht ZW0pOworCW11dGV4X3VubG9jaygmc2htZW0tPnZtYXBfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9nZW1fc2htZW1fdnVubWFwKTsKKworc3RhdGljIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqCitkcm1fZ2VtX3NobWVtX2NyZWF0ZV93aXRoX2hhbmRsZShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwKKwkJCQkgc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJ CQkJIHVpbnQzMl90ICpoYW5kbGUpCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpz aG1lbTsKKwlpbnQgcmV0OworCisJc2htZW0gPSBkcm1fZ2VtX3NobWVtX2NyZWF0ZShkZXYsIHNp emUpOworCWlmIChJU19FUlIoc2htZW0pKQorCQlyZXR1cm4gc2htZW07CisKKwkvKgorCSAqIEFs bG9jYXRlIGFuIGlkIG9mIGlkciB0YWJsZSB3aGVyZSB0aGUgb2JqIGlzIHJlZ2lzdGVyZWQKKwkg KiBhbmQgaGFuZGxlIGhhcyB0aGUgaWQgd2hhdCB1c2VyIGNhbiBzZWUuCisJICovCisJcmV0ID0g ZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgJnNobWVtLT5iYXNlLCBoYW5kbGUpOwor CS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93LiAq LworCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmc2htZW0tPmJhc2UpOworCWlmIChyZXQp CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlyZXR1cm4gc2htZW07Cit9CisKKy8qKgorICog 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 ZSk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgLSBQcm9k dWNlIGEgc2htZW0gR0VNIG9iamVjdCBmcm9tCisgKiAgICAgICAgICAgICAgICAgYW5vdGhlciBk cml2ZXIncyBzY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQgcGFnZXMKKyAqIEBkZXY6IERl dmljZSB0byBpbXBvcnQgaW50bworICogQGF0dGFjaDogRE1BLUJVRiBhdHRhY2htZW50CisgKiBA c2d0OiBTY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBwaW5uZWQgcGFnZXMKKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIGltcG9ydHMgYSBzY2F0dGVyL2dhdGhlciB0YWJsZSBleHBvcnRlZCB2aWEgRE1BLUJV RiBieQorICogYW5vdGhlciBkcml2ZXIuIERyaXZlcnMgdGhhdCB1c2UgdGhlIHNobWVtIGhlbHBl cnMgc2hvdWxkIHNldCB0aGlzIGFzIHRoZWlyCisgKiAmZHJtX2RyaXZlci5nZW1fcHJpbWVfaW1w b3J0X3NnX3RhYmxlIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6CisgKiBBIHBvaW50ZXIgdG8g YSBuZXdseSBjcmVhdGVkIEdFTSBvYmplY3Qgb3IgYW4gRVJSX1BUUi1lbmNvZGVkIG5lZ2F0aXZl CisgKiBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAq Citkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJCQkJICAg IHN0cnVjdCBzZ190YWJsZSAqc2d0KQoreworCXNpemVfdCBzaXplID0gUEFHRV9BTElHTihhdHRh Y2gtPmRtYWJ1Zi0+c2l6ZSk7CisJc2l6ZV90IG5wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsK KwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOworCWludCByZXQ7CisKKwlzaG1l bSA9IGRybV9nZW1fc2htZW1fY3JlYXRlKGRldiwgc2l6ZSk7CisJaWYgKElTX0VSUihzaG1lbSkp CisJCXJldHVybiBFUlJfQ0FTVChzaG1lbSk7CisKKwlzaG1lbS0+cGFnZXMgPSBrdm1hbGxvY19h cnJheShucGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFz aG1lbS0+cGFnZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9nZW07CisJ fQorCisJcmV0ID0gZHJtX3ByaW1lX3NnX3RvX3BhZ2VfYWRkcl9hcnJheXMoc2d0LCBzaG1lbS0+ cGFnZXMsIE5VTEwsIG5wYWdlcyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWVfYXJy YXk7CisKKwlzaG1lbS0+c2d0ID0gc2d0OworCXNobWVtLT5wYWdlc191c2VfY291bnQgPSAxOyAv KiBQZXJtYW5lbnRseSBwaW5uZWQgZnJvbSBvdXIgcG9pbnQgb2YgdmlldyAqLworCisJRFJNX0RF QlVHX1BSSU1FKCJzaXplID0gJXp1XG4iLCBzaXplKTsKKworCXJldHVybiAmc2htZW0tPmJhc2U7 CisKK2Vycl9mcmVlX2FycmF5OgorCWt2ZnJlZShzaG1lbS0+cGFnZXMpOworZXJyX2ZyZWVfZ2Vt OgorCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZCgmc2htZW0tPmJhc2UpOworCisJcmV0dXJu IEVSUl9QVFIocmV0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fcHJpbWVf aW1wb3J0X3NnX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1f aGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjZiMDVlMDY0MDdkCi0tLSAvZGV2L251bGwK KysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaApAQCAtMCwwICsxLDE1MyBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKworI2lmbmRlZiBfX0RS TV9HRU1fU0hNRU1fSEVMUEVSX0hfXworI2RlZmluZSBfX0RSTV9HRU1fU0hNRU1fSEVMUEVSX0hf XworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1 ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGRybS9kcm1faW9jdGwuaD4KKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW1lLmg+CisKK3N0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQ7CitzdHJ1Y3QgZHJt X21vZGVfY3JlYXRlX2R1bWI7CitzdHJ1Y3QgZHJtX3ByaW50ZXI7CitzdHJ1Y3Qgc2dfdGFibGU7 CisKKy8qKgorICogc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNr ZWQgYnkgc2htZW0KKyAqLworc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0IHsKKwkvKioKKwkg KiBAYmFzZTogQmFzZSBHRU0gb2JqZWN0CisJICovCisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJh c2U7CisKKwkvKioKKwkgKiBAcGFnZXNfbG9jazogUHJvdGVjdHMgdGhlIHBhZ2UgdGFibGUgYW5k IHVzZSBjb3VudAorCSAqLworCXN0cnVjdCBtdXRleCBwYWdlc19sb2NrOworCisJLyoqCisJICog QHBhZ2VzOiBQYWdlIHRhYmxlCisJICovCisJc3RydWN0IHBhZ2UgKipwYWdlczsKKworCS8qKgor CSAqIEBwYWdlc191c2VfY291bnQ6CisJICoKKwkgKiBSZWZlcmVuY2UgY291bnQgb24gdGhlIHBh Z2VzIHRhYmxlLgorCSAqIFRoZSBwYWdlcyBhcmUgcHV0IHdoZW4gdGhlIGNvdW50IHJlYWNoZXMg emVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfdXNlX2NvdW50OworCisJLyoqCisJICog QHBhZ2VzX21hcmtfZGlydHlfb25fcHV0OgorCSAqCisJICogTWFyayBwYWdlcyBhcyBkaXJ0eSB3 aGVuIHRoZXkgYXJlIHB1dC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNfbWFya19kaXJ0eV9v bl9wdXQgICAgOiAxOworCisJLyoqCisJICogQHBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0Ogor CSAqCisJICogTWFyayBwYWdlcyBhcyBhY2Nlc3NlZCB3aGVuIHRoZXkgYXJlIHB1dC4KKwkgKi8K Kwl1bnNpZ25lZCBpbnQgcGFnZXNfbWFya19hY2Nlc3NlZF9vbl9wdXQgOiAxOworCisJLyoqCisJ ICogQHNndDogU2NhdHRlci9nYXRoZXIgdGFibGUgZm9yIGltcG9ydGVkIFBSSU1FIGJ1ZmZlcnMK KwkgKi8KKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKworCS8qKgorCSAqIEB2bWFwX2xvY2s6IFBy b3RlY3RzIHRoZSB2bWFwIGFkZHJlc3MgYW5kIHVzZSBjb3VudAorCSAqLworCXN0cnVjdCBtdXRl eCB2bWFwX2xvY2s7CisKKwkvKioKKwkgKiBAdmFkZHI6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mg b2YgdGhlIGJhY2tpbmcgbWVtb3J5CisJICovCisJdm9pZCAqdmFkZHI7CisKKwkvKioKKwkgKiBA dm1hcF91c2VfY291bnQ6CisJICoKKwkgKiBSZWZlcmVuY2UgY291bnQgb24gdGhlIHZpcnR1YWwg YWRkcmVzcy4KKwkgKiBUaGUgYWRkcmVzcyBhcmUgdW4tbWFwcGVkIHdoZW4gdGhlIGNvdW50IHJl YWNoZXMgemVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdm1hcF91c2VfY291bnQ7Cit9OworCisj ZGVmaW5lIHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaikgXAorCWNvbnRhaW5lcl9vZihvYmosIHN0 cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCwgYmFzZSkKKworLyoqCisgKiBERUZJTkVfRFJNX0dF TV9TSE1FTV9GT1BTKCkgLSBNYWNybyB0byBnZW5lcmF0ZSBmaWxlIG9wZXJhdGlvbnMgZm9yIHNo bWVtIGRyaXZlcnMKKyAqIEBuYW1lOiBuYW1lIGZvciB0aGUgZ2VuZXJhdGVkIHN0cnVjdHVyZQor ICoKKyAqIFRoaXMgbWFjcm8gYXV0b2dlbmVyYXRlcyBhIHN1aXRhYmxlICZzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIGZvciBzaG1lbSBiYXNlZAorICogZHJpdmVycywgd2hpY2ggY2FuIGJlIGFzc2ln bmVkIHRvICZkcm1fZHJpdmVyLmZvcHMuIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZQorICogY2Fu bm90IGJlIHNoYXJlZCBiZXR3ZWVuIGRyaXZlcnMsIGJlY2F1c2UgaXQgY29udGFpbnMgYSByZWZl cmVuY2UgdG8gdGhlCisgKiBjdXJyZW50IG1vZHVsZSB1c2luZyBUSElTX01PRFVMRS4KKyAqCisg KiBOb3RlIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGFscmVhZHkgbWFya2VkIGFzIHN0YXRpYyAt IGlmIHlvdSBuZWVkIGEKKyAqIG5vbi1zdGF0aWMgdmVyc2lvbiBvZiB0aGlzIHlvdSdyZSBwcm9i YWJseSBkb2luZyBpdCB3cm9uZyBhbmQgd2lsbCBicmVhayB0aGUKKyAqIFRISVNfTU9EVUxFIHJl ZmVyZW5jZSBieSBhY2NpZGVudC4KKyAqLworI2RlZmluZSBERUZJTkVfRFJNX0dFTV9TSE1FTV9G T1BTKG5hbWUpIFwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuYW1lID0g e1wKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLFwKKwkJLm9wZW4JCT0gZHJtX29wZW4sXAorCQku cmVsZWFzZQk9IGRybV9yZWxlYXNlLFwKKwkJLnVubG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLFwK KwkJLmNvbXBhdF9pb2N0bAk9IGRybV9jb21wYXRfaW9jdGwsXAorCQkucG9sbAkJPSBkcm1fcG9s bCxcCisJCS5yZWFkCQk9IGRybV9yZWFkLFwKKwkJLmxsc2VlawkJPSBub29wX2xsc2VlayxcCisJ CS5tbWFwCQk9IGRybV9nZW1fc2htZW1fbW1hcCwgXAorCX0KKworc3RydWN0IGRybV9nZW1fc2ht ZW1fb2JqZWN0ICpkcm1fZ2VtX3NobWVtX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBz aXplX3Qgc2l6ZSk7Cit2b2lkIGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmopOworCitpbnQgZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc3RydWN0IGRy bV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cit2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2Vz KHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOworaW50IGRybV9nZW1fc2htZW1f cGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgZHJtX2dlbV9zaG1lbV91bnBp bihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkICpkcm1fZ2VtX3NobWVtX3ZtYXAo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1hcChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgdm9pZCAqdmFkZHIpOworCitpbnQgZHJtX2dlbV9z aG1lbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOworCitp bnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV92bV9vcHM7CisKK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvKHN0 cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKKwkJCSAgICAgIGNvbnN0 IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKworc3RydWN0IHNnX3RhYmxlICpkcm1fZ2Vt X3NobWVtX2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKgorZHJtX2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq YXR0YWNoLAorCQkJCSAgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCk7CisKKy8qKgorICogRFJNX0dF TV9TSE1FTV9EUklWRVJfT1BTIC0gRGVmYXVsdCBzaG1lbSBHRU0gb3BlcmF0aW9ucworICoKKyAq IFRoaXMgbWFjcm8gcHJvdmlkZXMgYSBzaG9ydGN1dCBmb3Igc2V0dGluZyB0aGUgc2htZW0gR0VN IG9wZXJhdGlvbnMgaW4KKyAqIHRoZSAmZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZp bmUgRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTIFwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkCT0gZHJt X2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsIFwKKwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dl bV9wcmltZV9mZF90b19oYW5kbGUsIFwKKwkuZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRy bV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlLCBcCisJLmdlbV9wcmltZV9tbWFwCQk9 IGRybV9nZW1fcHJpbWVfbW1hcCwgXAorCS5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX3NobWVtX2R1 bWJfY3JlYXRlCisKKyNlbmRpZiAvKiBfX0RSTV9HRU1fU0hNRU1fSEVMUEVSX0hfXyAqLwotLSAK Mi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=