From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [PATCH 1/2] drm: Add library for shmem backed GEM objects Date: Tue, 28 Aug 2018 14:51:53 +0200 Message-ID: <20180828125154.12822-2-noralf@tronnes.org> References: <20180828125154.12822-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id DD8206E350 for ; Tue, 28 Aug 2018 12:52:06 +0000 (UTC) In-Reply-To: <20180828125154.12822-1-noralf@tronnes.org> 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 Cc: david@lechnology.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBhZGRzIGEgbGlicmFyeSBmb3Igc2htZW0gYmFja2VkIEdFTSBvYmplY3RzIHdpdGggdGhl IG5lY2Vzc2FyeQpkcm1fZHJpdmVyIGNhbGxiYWNrcy4KClNpZ25lZC1vZmYtYnk6IE5vcmFsZiBU csO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgotLS0KIERvY3VtZW50YXRpb24vZ3B1L2RybS1r bXMtaGVscGVycy5yc3QgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAg ICAgICAgIHwgICA2ICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jIHwgNjczICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaCAgICAgfCAxOTggKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA4OTAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVt X2hlbHBlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9o ZWxwZXIuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5y c3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0CmluZGV4IGY5Y2ZjZGNk ZjAyNC4uYmMyNGIxYjUyMTZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21z LWhlbHBlcnMucnN0CisrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QK QEAgLTMyNiwzICszMjYsMTUgQEAgTGVnYWN5IENSVEMvTW9kZXNldCBIZWxwZXIgRnVuY3Rpb25z IFJlZmVyZW5jZQogCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hl bHBlci5jCiAgICA6ZXhwb3J0OgorCitTSE1FTSBHRU0gSGVscGVyIFJlZmVyZW5jZQorPT09PT09 PT09PT09PT09PT09PT09PT09PT0KKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9k cm1fZ2VtX3NobWVtX2hlbHBlci5jCisgICA6ZG9jOiBvdmVydmlldworCisuLiBrZXJuZWwtZG9j OjogaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuaAorICAgOmludGVybmFsOgorCisu LiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKKyAg IDpleHBvcnQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9LY29uZmlnCmluZGV4IGNiODg1MjhlN2IxMC4uZGI1ODhhZTQ0YmNjIDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZwpAQCAtMTU3LDYgKzE1NywxMiBAQCBjb25maWcgRFJNX0tNU19DTUFfSEVMUEVSCiAJaGVscAog CSAgQ2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhlIEtNUyBDTUEgaGVscGVyIGZ1bmN0aW9ucwog Citjb25maWcgRFJNX0dFTV9TSE1FTV9IRUxQRVIKKwlib29sCisJZGVwZW5kcyBvbiBEUk0KKwlo ZWxwCisJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VNIHNobWVtIGhlbHBlciBmdW5j dGlvbnMKKwogY29uZmlnIERSTV9WTQogCWJvb2wKIAlkZXBlbmRzIG9uIERSTSAmJiBNTVUKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQppbmRleCBhNjc3MWNlZjg1ZTIuLmM2Nzk4NTkwNzk5ZiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMjQs NiArMjQsNyBAQCBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9kcm1fcmFuZG9t Lm8KIGRybS0kKENPTkZJR19EUk1fVk0pICs9IGRybV92bS5vCiBkcm0tJChDT05GSUdfQ09NUEFU KSArPSBkcm1faW9jMzIubwogZHJtLSQoQ09ORklHX0RSTV9HRU1fQ01BX0hFTFBFUikgKz0gZHJt X2dlbV9jbWFfaGVscGVyLm8KK2RybS0kKENPTkZJR19EUk1fR0VNX1NITUVNX0hFTFBFUikgKz0g ZHJtX2dlbV9zaG1lbV9oZWxwZXIubwogZHJtLSQoQ09ORklHX1BDSSkgKz0gYXRpX3BjaWdhcnQu bwogZHJtLSQoQ09ORklHX0RSTV9QQU5FTCkgKz0gZHJtX3BhbmVsLm8KIGRybS0kKENPTkZJR19P RikgKz0gZHJtX29mLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVt X2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MTIwM2RlZTJhZDEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIuYwpAQCAtMCww ICsxLDY3MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBD b3B5cmlnaHQgMjAxOCBOb3JhbGYgVHLDuG5uZXMKKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4 Lmg+CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtX3NobWVt X2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJpbWUuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X3ByaW50Lmg+CisKKy8qKgorICogRE9DOiBvdmVydmlldworICoKKyAqIFRoaXMgbGlicmFyeSBw cm92aWRlcyBoZWxwZXJzIGZvciBHRU0gb2JqZWN0cyBiYWNrZWQgYnkgc2htZW0gYnVmZmVycwor ICogYWxsb2NhdGVkIHVzaW5nIGFub255bW91cyBwYWdlYWJsZSBtZW1vcnkuCisgKi8KKworLyoq CisgKiBkcm1fZ2VtX3NobWVtX2NyZWF0ZSAtIEFsbG9jYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBn aXZlbiBzaXplCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgb2Jq ZWN0IHRvIGFsbG9jYXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc2htZW0gR0VN IG9iamVjdC4gVGhlIGRlZmF1bHQgY2FjaGUgbW9kZSBpcworICogRFJNX0dFTV9TSE1FTV9CT19D QUNIRUQuIFRoZSAmZHJtX2RyaXZlci0+Z2VtX2NyZWF0ZV9vYmplY3QgY2FsbGJhY2sgY2FuIGJl CisgKiB1c2VkIG92ZXJyaWRlIHRoaXMuCisgKgorICogUmV0dXJuczoKKyAqIEEgc3RydWN0IGRy bV9nZW1fc2htZW1fb2JqZWN0ICogb24gc3VjY2VzcyBvciBhbiBFUlJfUFRSKCktZW5jb2RlZCBu ZWdhdGl2ZQorICogZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgZHJtX2dlbV9z aG1lbV9vYmplY3QgKmRybV9nZW1fc2htZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07CisJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCXNpemUgPSBQQUdFX0FM SUdOKHNpemUpOworCisJaWYgKGRldi0+ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVjdCkKKwkJb2Jq ID0gZGV2LT5kcml2ZXItPmdlbV9jcmVhdGVfb2JqZWN0KGRldiwgc2l6ZSk7CisJZWxzZQorCQlv YmogPSBremFsbG9jKHNpemVvZigqc2htZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9iaikKKwkJ cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2Jq KG9iaik7CisKKwlpZiAoIWRldi0+ZHJpdmVyLT5nZW1fY3JlYXRlX29iamVjdCkKKwkJc2htZW0t PmNhY2hlX21vZGUgPSBEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRDsKKworCXJldCA9IGRybV9nZW1f b2JqZWN0X2luaXQoZGV2LCBvYmosIHNpemUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWU7 CisKKwlyZXQgPSBkcm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOworCWlmIChyZXQpCisJ CWdvdG8gZXJyX3JlbGVhc2U7CisKKwltdXRleF9pbml0KCZzaG1lbS0+cGFnZXNfbG9jayk7CisJ bXV0ZXhfaW5pdCgmc2htZW0tPnZtYXBfbG9jayk7CisKKwlyZXR1cm4gc2htZW07CisKK2Vycl9y ZWxlYXNlOgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uob2JqKTsKK2Vycl9mcmVlOgorCWtmcmVl KHNobWVtKTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChk cm1fZ2VtX3NobWVtX2NyZWF0ZSk7CisKKy8qKgorICogZHJtX2dlbV9zaG1lbV9mcmVlX29iamVj dCAtIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHNobWVtIEdFTSBvYmplY3QKKyAq IEBvYmo6IEdFTSBvYmplY3QgdG8gZnJlZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2xlYW5zIHVw IHRoZSBHRU0gb2JqZWN0IHN0YXRlIGFuZCBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgdG8KKyAqIHN0 b3JlIHRoZSBvYmplY3QgaXRzZWxmLiBEcml2ZXJzIHVzaW5nIHRoZSBzaG1lbSBoZWxwZXJzIHNo b3VsZCBzZXQgdGhpcyBhcworICogdGhlaXIgJmRybV9kcml2ZXIuZ2VtX2ZyZWVfb2JqZWN0X3Vu bG9ja2VkIGNhbGxiYWNrLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fZnJlZV9vYmplY3Qoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0 ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9iaik7CisKKwlXQVJOX09OKHNobWVtLT52 bWFwX3VzZV9jb3VudCk7CisKKwlpZiAob2JqLT5pbXBvcnRfYXR0YWNoKSB7CisJCXNobWVtLT5w YWdlc191c2VfY291bnQtLTsKKwkJZHJtX3ByaW1lX2dlbV9kZXN0cm95KG9iaiwgc2htZW0tPnNn dCk7CisJCWt2ZnJlZShzaG1lbS0+cGFnZXMpOworCX0KKworCVdBUk5fT04oc2htZW0tPnBhZ2Vz X3VzZV9jb3VudCk7CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJbXV0ZXhfZGVz dHJveSgmc2htZW0tPnBhZ2VzX2xvY2spOworCW11dGV4X2Rlc3Ryb3koJnNobWVtLT52bWFwX2xv Y2spOworCWtmcmVlKHNobWVtKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1f ZnJlZV9vYmplY3QpOworCitzdGF0aWMgaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzX2xvY2tl ZChzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKQoreworCXN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqID0gJnNobWVtLT5iYXNlOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisKKwlp ZiAoc2htZW0tPnBhZ2VzX3VzZV9jb3VudCsrID4gMCkKKwkJcmV0dXJuIDA7CisKKwlwYWdlcyA9 IGRybV9nZW1fZ2V0X3BhZ2VzKG9iaik7CisJaWYgKElTX0VSUihwYWdlcykpIHsKKwkJRFJNX0RF QlVHX0tNUygiRmFpbGVkIHRvIGdldCBwYWdlcyAoJWxkKVxuIiwgUFRSX0VSUihwYWdlcykpOwor CQlzaG1lbS0+cGFnZXNfdXNlX2NvdW50ID0gMDsKKwkJcmV0dXJuIFBUUl9FUlIocGFnZXMpOwor CX0KKworCXNobWVtLT5wYWdlcyA9IHBhZ2VzOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBk cm1fZ2VtX3NobWVtX2dldF9wYWdlcyAtIEFsbG9jYXRlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2ht ZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgorICogVGhpcyBm dW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYmFja2luZyBwYWdlcyBleGlzdHMgZm9yIHRoZSBzaG1l bSBHRU0gb2JqZWN0CisgKiBhbmQgaW5jcmVhc2VzIHRoZSB1c2UgY291bnQuCisgKgorICogUmV0 dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVy ZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX3NobWVt X29iamVjdCAqc2htZW0pCit7CisJaW50IHJldDsKKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJy dXB0aWJsZSgmc2htZW0tPnBhZ2VzX2xvY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJ cmV0ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXNfbG9ja2VkKHNobWVtKTsKKwltdXRleF91bmxv Y2soJnNobWVtLT5wYWdlc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKTsKKworc3RhdGljIHZvaWQgZHJtX2dlbV9zaG1lbV9w dXRfcGFnZXNfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sK KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKKworCWlmIChXQVJO X09OX09OQ0UoIXNobWVtLT5wYWdlc191c2VfY291bnQpKQorCQlyZXR1cm47CisKKwlpZiAoLS1z aG1lbS0+cGFnZXNfdXNlX2NvdW50ID4gMCkKKwkJcmV0dXJuOworCisJZHJtX2dlbV9wdXRfcGFn ZXMob2JqLCBzaG1lbS0+cGFnZXMsCisJCQkgIHNobWVtLT5wYWdlc19tYXJrX2RpcnR5X29uX3B1 dCwKKwkJCSAgc2htZW0tPnBhZ2VzX21hcmtfYWNjZXNzZWRfb25fcHV0KTsKKwlzaG1lbS0+cGFn ZXMgPSBOVUxMOworfQorCisvKgorICogZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMgLSBEZWNyZWFz ZSB1c2UgY291bnQgb24gdGhlIGJhY2tpbmcgcGFnZXMgZm9yIGEgc2htZW0gR0VNIG9iamVjdAor ICogQHNobWVtOiBzaG1lbSBHRU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBkZWNyZWFz ZXMgdGhlIHVzZSBjb3VudCBhbmQgcHV0cyB0aGUgYmFja2luZyBwYWdlcyB3aGVuIHVzZSBkcm9w cyB0byB6ZXJvLgorICovCit2b2lkIGRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1f Z2VtX3NobWVtX29iamVjdCAqc2htZW0pCit7CisJbXV0ZXhfbG9jaygmc2htZW0tPnBhZ2VzX2xv Y2spOworCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzX3VubG9ja2VkKHNobWVtKTsKKwltdXRleF91 bmxvY2soJnNobWVtLT5wYWdlc19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1l bV9wdXRfcGFnZXMpOworCitzdGF0aWMgaW50IGRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKKwlpbnQgcmV0OworCisJaWYgKHNobWVtLT52bWFwX3Vz ZV9jb3VudCsrID4gMCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBkcm1fZ2VtX3NobWVtX2dldF9w YWdlcyhzaG1lbSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfemVyb191c2U7CisKKwlpZiAob2Jq LT5pbXBvcnRfYXR0YWNoKSB7CisJCXNobWVtLT52YWRkciA9IGRtYV9idWZfdm1hcChvYmotPmlt cG9ydF9hdHRhY2gtPmRtYWJ1Zik7CisJfSBlbHNlIHsKKwkJcGdwcm90X3QgcHJvdDsKKworCQlz d2l0Y2ggKHNobWVtLT5jYWNoZV9tb2RlKSB7CisJCWNhc2UgRFJNX0dFTV9TSE1FTV9CT19VTktO T1dOOgorCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX3B1dF9wYWdlczsKKworCQljYXNl IERSTV9HRU1fU0hNRU1fQk9fV1JJVEVDT01CSU5FRDoKKwkJCXByb3QgPSBwZ3Byb3Rfd3JpdGVj b21iaW5lKFBBR0VfS0VSTkVMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRFJNX0dFTV9TSE1FTV9C T19VTkNBQ0hFRDoKKwkJCXByb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKFBBR0VfS0VSTkVMKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgRFJNX0dFTV9TSE1FTV9CT19DQUNIRUQ6CisJCQlwcm90ID0gUEFH RV9LRVJORUw7CisJCQlicmVhazsKKwkJfQorCisJCXNobWVtLT52YWRkciA9IHZtYXAoc2htZW0t PnBhZ2VzLCBvYmotPnNpemUgPj4gUEFHRV9TSElGVCwgVk1fTUFQLCBwcm90KTsKKwl9CisKKwlp ZiAoIXNobWVtLT52YWRkcikgeworCQlEUk1fREVCVUdfS01TKCJGYWlsZWQgdG8gdm1hcCBwYWdl c1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3B1dF9wYWdlczsKKwl9CisKKwly ZXR1cm4gMDsKKworZXJyX3B1dF9wYWdlczoKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1l bSk7CitlcnJfemVyb191c2U6CisJc2htZW0tPnZtYXBfdXNlX2NvdW50ID0gMDsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBkcm1fZ2VtX3NobWVtX3ZtYXAgLSBDcmVhdGUgYSB2aXJ0dWFs IG1hcHBpbmcgZm9yIGEgc2htZW0gR0VNIG9iamVjdAorICogQHNobWVtOiBzaG1lbSBHRU0gb2Jq ZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoYXQgYSB2aXJ0dWFsIGFkZHJl c3MgZXhpc3RzIGZvciB0aGUgYnVmZmVyIGJhY2tpbmcKKyAqIHRoZSBzaG1lbSBHRU0gb2JqZWN0 LgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBj b2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fZ2VtX3NobWVtX3ZtYXAoc3RydWN0IGRybV9n ZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXV0ZXhfbG9j a19pbnRlcnJ1cHRpYmxlKCZzaG1lbS0+dm1hcF9sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCXJldCA9IGRybV9nZW1fc2htZW1fdm1hcF9sb2NrZWQoc2htZW0pOworCW11dGV4X3Vu bG9jaygmc2htZW0tPnZtYXBfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJP TChkcm1fZ2VtX3NobWVtX3ZtYXApOworCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3NobWVtX3Z1bm1h cF9sb2NrZWQoc3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSkKK3sKKwlzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiA9ICZzaG1lbS0+YmFzZTsKKworCWlmIChXQVJOX09OX09OQ0Uo IXNobWVtLT52bWFwX3VzZV9jb3VudCkpCisJCXJldHVybjsKKworCWlmICgtLXNobWVtLT52bWFw X3VzZV9jb3VudCA+IDApCisJCXJldHVybjsKKworCWlmIChvYmotPmltcG9ydF9hdHRhY2gpCisJ CWRtYV9idWZfdnVubWFwKG9iai0+aW1wb3J0X2F0dGFjaC0+ZG1hYnVmLCBzaG1lbS0+dmFkZHIp OworCWVsc2UKKwkJdnVubWFwKHNobWVtLT52YWRkcik7CisKKwlzaG1lbS0+dmFkZHIgPSBOVUxM OworCWRybV9nZW1fc2htZW1fcHV0X3BhZ2VzKHNobWVtKTsKK30KKworLyoKKyAqIGRybV9nZW1f c2htZW1fdnVubWFwIC0gVW5tYXAgYSB2aXJ0dWFsIG1hcHBpbmcgZm8gYSBzaG1lbSBHRU0gb2Jq ZWN0CisgKiBAc2htZW06IHNobWVtIEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJl bW92ZXMgdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGVuIHVzZSBjb3VudCBkcm9wcyB0byB6ZXJvLgor ICovCit2b2lkIGRybV9nZW1fc2htZW1fdnVubWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVj dCAqc2htZW0pCit7CisJbXV0ZXhfbG9jaygmc2htZW0tPnZtYXBfbG9jayk7CisJZHJtX2dlbV9z aG1lbV92dW5tYXBfbG9ja2VkKHNobWVtKTsKKwltdXRleF91bmxvY2soJnNobWVtLT52bWFwX2xv Y2spOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3Z1bm1hcCk7CisKK3N0YXRpYyBz dHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKgorZHJtX2dlbV9zaG1lbV9jcmVhdGVfd2l0aF9o YW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJIHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSB1aW50MzJfdCAqaGFuZGxlKQoreworCXN0cnVjdCBk cm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07CisJaW50IHJldDsKKworCXNobWVtID0gZHJtX2dl bV9zaG1lbV9jcmVhdGUoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKHNobWVtKSkKKwkJcmV0dXJu IHNobWVtOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbiBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhl IG9iaiBpcyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBj YW4gc2VlLgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZz aG1lbS0+YmFzZSwgaGFuZGxlKTsKKwkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9jYXRlIC0g aGFuZGxlIGhvbGRzIGl0IG5vdy4gKi8KKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnNo bWVtLT5iYXNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcmV0dXJu IHNobWVtOworfQorCisvKioKKyAqIGRybV9nZW1fc2htZW1fZHVtYl9jcmVhdGUgLSBDcmVhdGUg YSBkdW1iIHNobWVtIGJ1ZmZlciBvYmplY3QKKyAqIEBmaWxlOiBEUk0gZmlsZSBzdHJ1Y3R1cmUg dG8gY3JlYXRlIHRoZSBkdW1iIGJ1ZmZlciBmb3IKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqIEBh cmdzOiBJT0NUTCBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aGUgcGl0Y2gg b2YgdGhlIGR1bWIgYnVmZmVyIGFuZCByb3VuZHMgaXQgdXAgdG8gYW4KKyAqIGludGVnZXIgbnVt YmVyIG9mIGJ5dGVzIHBlciBwaXhlbC4gRHJpdmVycyBmb3IgaGFyZHdhcmUgdGhhdCBkb2Vzbid0 IGhhdmUKKyAqIGFueSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBvbiB0aGUgcGl0Y2ggY2FuIGRp cmVjdGx5IHVzZSB0aGlzIGZ1bmN0aW9uIGFzCisgKiB0aGVpciAmZHJtX2RyaXZlci5kdW1iX2Ny ZWF0ZSBjYWxsYmFjay4KKyAqCisgKiBGb3IgaGFyZHdhcmUgd2l0aCBhZGRpdGlvbmFsIHJlc3Ry aWN0aW9ucywgZHJpdmVycyBjYW4gYWRqdXN0IHRoZSBmaWVsZHMKKyAqIHNldCB1cCBieSB1c2Vy c3BhY2UgYmVmb3JlIGNhbGxpbmcgaW50byB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnM6 CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisg Ki8KK2ludCBkcm1fZ2VtX3NobWVtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwg c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkcm1fbW9kZV9jcmVhdGVf ZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtOworCisJ aWYgKCFhcmdzLT5waXRjaCB8fCAhYXJncy0+c2l6ZSkgeworCQlhcmdzLT5waXRjaCA9IERJVl9S T1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCk7CisJCWFyZ3MtPnNpemUgPSBhcmdz LT5waXRjaCAqIGFyZ3MtPmhlaWdodDsKKwl9IGVsc2UgeworCQkvKiBlbnN1cmUgc2FuZSBtaW5p bXVtIHZhbHVlcyAqLworCQlhcmdzLT5waXRjaCA9IG1heChhcmdzLT5waXRjaCwKKwkJCQkgIERJ Vl9ST1VORF9VUChhcmdzLT53aWR0aCAqIGFyZ3MtPmJwcCwgOCkpOworCQlhcmdzLT5zaXplID0g bWF4X3QodHlwZW9mKGFyZ3MtPnNpemUpLCBhcmdzLT5zaXplLAorCQkJCSAgIGFyZ3MtPnBpdGNo ICogYXJncy0+aGVpZ2h0KTsKKwl9CisKKwlzaG1lbSA9IGRybV9nZW1fc2htZW1fY3JlYXRlX3dp dGhfaGFuZGxlKGZpbGUsIGRldiwgYXJncy0+c2l6ZSwgJmFyZ3MtPmhhbmRsZSk7CisKKwlyZXR1 cm4gUFRSX0VSUl9PUl9aRVJPKHNobWVtKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1f c2htZW1fZHVtYl9jcmVhdGUpOworCitzdGF0aWMgdm1fZmF1bHRfdCBkcm1fZ2VtX3NobWVtX2Zh dWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h ID0gdm1mLT52bWE7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPnZtX3ByaXZh dGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtID0gdG9fZHJtX2dl bV9zaG1lbV9vYmoob2JqKTsKKwkvKiBXZSBkb24ndCB1c2Ugdm1mLT5wZ29mZiBzaW5jZSB0aGF0 IGhhcyB0aGUgZmFrZSBvZmZzZXQ6ICovCisJcGdvZmZfdCBwZ29mZiA9ICh2bWYtPmFkZHJlc3Mg LSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCWxvZmZfdCBudW1fcGFnZXMgPSBvYmot PnNpemUgPj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmIChwZ29mZiA+ IG51bV9wYWdlcyB8fCBXQVJOX09OX09OQ0UoIXNobWVtLT5wYWdlcykpCisJCXJldHVybiBWTV9G QVVMVF9TSUdCVVM7CisKKwlwYWdlID0gc2htZW0tPnBhZ2VzW3Bnb2ZmXTsKKworCXJldHVybiB2 bWZfaW5zZXJ0X3BhZ2Uodm1hLCB2bWYtPmFkZHJlc3MsIHBhZ2UpOworfQorCitzdGF0aWMgdm9p ZCBkcm1fZ2VtX3NobWVtX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorewor CXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisJc3Ry dWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKG9i aik7CisKKwlkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzaG1lbSk7CisJZHJtX2dlbV92bV9jbG9z ZSh2bWEpOworfQorCitjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX2dlbV9z aG1lbV92bV9vcHMgPSB7CisJLmZhdWx0ID0gZHJtX2dlbV9zaG1lbV9mYXVsdCwKKwkub3BlbiA9 IGRybV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fZ2VtX3NobWVtX3ZtX2Nsb3NlLAorfTsK K0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fdm1fb3BzKTsKKworc3RhdGljIGludCBk cm1fZ2VtX3NobWVtX21tYXBfb2JqKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0s CisJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0OworCisJcmV0 ID0gZHJtX2dlbV9zaG1lbV9nZXRfcGFnZXMoc2htZW0pOworCWlmIChyZXQpCisJCWdvdG8gZXJy X2Nsb3NlOworCisJLyogVk1fUEZOTUFQIHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwKCkgKi8KKwl2 bWEtPnZtX2ZsYWdzICY9IH5WTV9QRk5NQVA7CisJdm1hLT52bV9mbGFncyB8PSBWTV9NSVhFRE1B UDsKKworCXN3aXRjaCAoc2htZW0tPmNhY2hlX21vZGUpIHsKKwljYXNlIERSTV9HRU1fU0hNRU1f Qk9fVU5LTk9XTjoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfcHV0X3BhZ2VzOworCisJ Y2FzZSBEUk1fR0VNX1NITUVNX0JPX1dSSVRFQ09NQklORUQ6CisJCXZtYS0+dm1fcGFnZV9wcm90 ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpKTsK KwkJYnJlYWs7CisKKwljYXNlIERSTV9HRU1fU0hNRU1fQk9fVU5DQUNIRUQ6CisJCXZtYS0+dm1f cGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxh Z3MpKTsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9HRU1fU0hNRU1fQk9fQ0FDSEVEOgorCQkvKgor CQkgKiBTaHVudCBvZmYgY2FjaGVkIG9ianMgdG8gc2htZW0gZmlsZSBzbyB0aGV5IGhhdmUgdGhl aXIgb3duCisJCSAqIGFkZHJlc3Nfc3BhY2UgKHNvIHVubWFwX21hcHBpbmdfcmFuZ2UgZG9lcyB3 aGF0IHdlIHdhbnQsCisJCSAqIGluIHBhcnRpY3VsYXIgaW4gdGhlIGNhc2Ugb2YgbW1hcCdkIGRt YWJ1ZnMpCisJCSAqLworCQlmcHV0KHZtYS0+dm1fZmlsZSk7CisJCWdldF9maWxlKHNobWVtLT5i YXNlLmZpbHApOworCQl2bWEtPnZtX3Bnb2ZmID0gMDsKKwkJdm1hLT52bV9maWxlICA9IHNobWVt LT5iYXNlLmZpbHA7CisJCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEt PnZtX2ZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9wdXRfcGFnZXM6 CisJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOworZXJyX2Nsb3NlOgorCWRybV9nZW1f dm1fY2xvc2Uodm1hKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZHJtX2dlbV9zaG1l bV9tbWFwIC0gTWVtb3J5LW1hcCBhIHNobWVtIEdFTSBvYmplY3QKKyAqIEBmaWxwOiBGaWxlIG9i amVjdAorICogQHZtYTogVk1BIGZvciB0aGUgYXJlYSB0byBiZSBtYXBwZWQKKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGltcGxlbWVudHMgYW4gYXVnbWVudGVkIHZlcnNpb24gb2YgdGhlIEdFTSBEUk0g ZmlsZSBtbWFwCisgKiBvcGVyYXRpb24gZm9yIHNobWVtIG9iamVjdHMuIERyaXZlcnMgd2hpY2gg ZW1wbG95IHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZAorICogdXNlIHRoaXMgZnVuY3Rpb24gYXMg dGhlaXIgJmZpbGVfb3BlcmF0aW9ucy5tbWFwIGhhbmRsZXIgaW4gdGhlIERSTSBkZXZpY2UgZmls ZSdzCisgKiBmaWxlX29wZXJhdGlvbnMgc3RydWN0dXJlLgorICoKKyAqIEluc3RlYWQgb2YgZGly ZWN0bHkgcmVmZXJlbmNpbmcgdGhpcyBmdW5jdGlvbiwgZHJpdmVycyBzaG91bGQgdXNlIHRoZQor ICogREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUygpIG1hY3JvLgorICoKKyAqIFJldHVybnM6Cisg KiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8K K2ludCBkcm1fZ2VtX3NobWVtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW07CisJ aW50IHJldDsKKworCXJldCA9IGRybV9nZW1fbW1hcChmaWxwLCB2bWEpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlzaG1lbSA9IHRvX2RybV9nZW1fc2htZW1fb2JqKHZtYS0+dm1fcHJp dmF0ZV9kYXRhKTsKKworCXJldHVybiBkcm1fZ2VtX3NobWVtX21tYXBfb2JqKHNobWVtLCB2bWEp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9tbWFwKTsKKworc3RhdGljIGNv bnN0IGNoYXIgKiBjb25zdCBjYWNoZV9tb2RlX3N0cltdID0geworCVtEUk1fR0VNX1NITUVNX0JP X1VOS05PV05dID0gInVua25vd24iLAorCVtEUk1fR0VNX1NITUVNX0JPX1VOQ0FDSEVEXSA9ICJ1 bmNhY2hlZCIsCisJW0RSTV9HRU1fU0hNRU1fQk9fQ0FDSEVEXSA9ICJjYWNoZWQiLAorCVtEUk1f R0VNX1NITUVNX0JPX1dSSVRFQ09NQklORURdID0gIndyaXRlY29tYmluZWQiLAorfTsKKworLyoq CisgKiBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8oKSAtIFByaW50ICZkcm1fZ2VtX2NtYV9vYmpl Y3QgaW5mbyBmb3IgZGVidWdmcworICogQHA6IERSTSBwcmludGVyCisgKiBAaW5kZW50OiBUYWIg aW5kZW50YXRpb24gbGV2ZWwKKyAqIEBvYmo6IEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uIGNhbiBiZSB1c2VkIGFzIHRoZSAmZHJtX2RyaXZlci0+Z2VtX3ByaW50X2luZm8gY2FsbGJh Y2suCisgKi8KK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmludF9pbmZvKHN0cnVjdCBkcm1fcHJpbnRl ciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKQoreworCWNvbnN0IHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2ht ZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCisJZHJtX3ByaW50Zl9pbmRlbnQocCwg aW5kZW50LCAiY2FjaGVtb2RlPSVzXG4iLCBjYWNoZV9tb2RlX3N0cltzaG1lbS0+Y2FjaGVfbW9k ZV0pOworCWRybV9wcmludGZfaW5kZW50KHAsIGluZGVudCwgInBhZ2VzX3VzZV9jb3VudD0ldVxu Iiwgc2htZW0tPnBhZ2VzX3VzZV9jb3VudCk7CisJZHJtX3ByaW50Zl9pbmRlbnQocCwgaW5kZW50 LCAidmFkZHI9JXBcbiIsIHNobWVtLT52YWRkcik7CisJZHJtX3ByaW50Zl9pbmRlbnQocCwgaW5k ZW50LCAidm1hcF91c2VfY291bnQ9JXVcbiIsIHNobWVtLT52bWFwX3VzZV9jb3VudCk7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9nZW1fc2htZW1fcHJpbnRfaW5mbyk7CisKKy8qKgorICogZHJtX2dl bV9zaG1lbV9wcmltZV9waW4gLSBQaW4gYmFja2luZyBwYWdlcyBmb3IgYSBzaG1lbSBHRU0gb2Jq ZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoZSBiYWNraW5nIHBhZ2VzIGFy ZSBwaW5uZWQgaW4gbWVtb3J5IHdoaWxlIHRoZQorICogYnVmZmVyIGlzIGV4cG9ydGVkLiBEcml2 ZXJzIHVzaW5nIHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcyB0aGVpcgorICog RFJNIGRyaXZlcidzICZkcm1fZHJpdmVyLmdlbV9wcmltZV9waW4gY2FsbGJhY2suCisgKgorICog UmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KKyAqLworaW50IGRybV9nZW1fc2htZW1fcHJpbWVfcGluKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19k cm1fZ2VtX3NobWVtX29iaihvYmopOworCisJcmV0dXJuIGRybV9nZW1fc2htZW1fZ2V0X3BhZ2Vz KHNobWVtKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV9zaG1lbV9wcmltZV9waW4pOworCisv KioKKyAqIGRybV9nZW1fc2htZW1fcHJpbWVfdW5waW4gLSBVbnBpbiBiYWNraW5nIHBhZ2VzIGZv ciBhIHNobWVtIEdFTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHJl cXVpcmVtZW50IHRoYXQgdGhlIGJhY2tpbmcgcGFnZXMgYXJlIHBpbm5lZCBpbgorICogbWVtb3J5 LiBEcml2ZXJzIHVzaW5nIHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZCBzZXQgdGhpcyBhcyB0aGVp ciBEUk0gZHJpdmVyJ3MKKyAqICZkcm1fZHJpdmVyLmdlbV9wcmltZV91bnBpbiBjYWxsYmFjay4K KyAqLwordm9pZCBkcm1fZ2VtX3NobWVtX3ByaW1lX3VucGluKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1f Z2VtX3NobWVtX29iaihvYmopOworCisJZHJtX2dlbV9zaG1lbV9wdXRfcGFnZXMoc2htZW0pOwor fQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3NobWVtX3ByaW1lX3VucGluKTsKKworLyoqCisgKiBk cm1fZ2VtX3NobWVtX3ByaW1lX2dldF9zZ190YWJsZSAtIFByb3ZpZGUgYSBzY2F0dGVyL2dhdGhl ciB0YWJsZSBvZiBwaW5uZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cGFnZXMgZm9yIGEgc2htZW0gR0VNIG9iamVjdAorICogQG9iajogR0VNIG9iamVjdAorICoKKyAq IFRoaXMgZnVuY3Rpb24gZXhwb3J0cyBhIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIHN1aXRhYmxlIGZv ciBQUklNRSB1c2FnZSBieQorICogY2FsbGluZyB0aGUgc3RhbmRhcmQgRE1BIG1hcHBpbmcgQVBJ LiBEcml2ZXJzIHVzaW5nIHRoZSBzaG1lbSBoZWxwZXJzIHNob3VsZAorICogc2V0IHRoaXMgYXMg dGhlaXIgJmRybV9kcml2ZXIuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSBjYWxsYmFjay4KKyAqCisg KiBSZXR1cm5zOgorICogQSBwb2ludGVyIHRvIHRoZSBzY2F0dGVyL2dhdGhlciB0YWJsZSBvZiBw aW5uZWQgcGFnZXMgb3IgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3Qgc2dfdGFibGUgKmRy bV9nZW1fc2htZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3No bWVtX29iaihvYmopOworCisJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhzaG1lbS0+cGFn ZXMsIG9iai0+c2l6ZSA+PiBQQUdFX1NISUZUKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9n ZW1fc2htZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3By aW1lX2ltcG9ydF9zZ190YWJsZSAtIFByb2R1Y2UgYSBzaG1lbSBHRU0gb2JqZWN0IGZyb20KKyAq ICAgICAgICAgICAgICAgICBhbm90aGVyIGRyaXZlcidzIHNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9m IHBpbm5lZCBwYWdlcworICogQGRldjogRGV2aWNlIHRvIGltcG9ydCBpbnRvCisgKiBAYXR0YWNo OiBETUEtQlVGIGF0dGFjaG1lbnQKKyAqIEBzZ3Q6IFNjYXR0ZXIvZ2F0aGVyIHRhYmxlIG9mIHBp bm5lZCBwYWdlcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wb3J0cyBhIHNjYXR0ZXIvZ2F0aGVy IHRhYmxlIGV4cG9ydGVkIHZpYSBETUEtQlVGIGJ5CisgKiBhbm90aGVyIGRyaXZlci4gRHJpdmVy cyB0aGF0IHVzZSB0aGUgc2htZW0gaGVscGVycyBzaG91bGQgc2V0IHRoaXMgYXMgdGhlaXIKKyAq ICZkcm1fZHJpdmVyLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgY2FsbGJhY2suCisgKgorICog UmV0dXJuczoKKyAqIEEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgR0VNIG9iamVjdCBvciBh biBFUlJfUFRSLWVuY29kZWQgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAq Lworc3RydWN0IGRybV9nZW1fb2JqZWN0ICoKK2RybV9nZW1fc2htZW1fcHJpbWVfaW1wb3J0X3Nn X3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZ3QpCit7CisJc2l6 ZV90IHNpemUgPSBQQUdFX0FMSUdOKGF0dGFjaC0+ZG1hYnVmLT5zaXplKTsKKwlzaXplX3QgbnBh Z2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAq c2htZW07CisJaW50IHJldDsKKworCXNobWVtID0gZHJtX2dlbV9zaG1lbV9jcmVhdGUoZGV2LCBz aXplKTsKKwlpZiAoSVNfRVJSKHNobWVtKSkKKwkJcmV0dXJuIEVSUl9DQVNUKHNobWVtKTsKKwor CXNobWVtLT5wYWdlcyA9IGt2bWFsbG9jX2FycmF5KG5wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdl ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNobWVtLT5wYWdlcykgeworCQlyZXQgPSAtRU5PTUVN OworCQlnb3RvIGVycl9mcmVlX2dlbTsKKwl9CisKKwlyZXQgPSBkcm1fcHJpbWVfc2dfdG9fcGFn ZV9hZGRyX2FycmF5cyhzZ3QsIHNobWVtLT5wYWdlcywgTlVMTCwgbnBhZ2VzKTsKKwlpZiAocmV0 IDwgMCkKKwkJZ290byBlcnJfZnJlZV9hcnJheTsKKworCXNobWVtLT5zZ3QgPSBzZ3Q7CisJc2ht ZW0tPmNhY2hlX21vZGUgPSBEUk1fR0VNX1NITUVNX0JPX1VOS05PV047CisJc2htZW0tPnBhZ2Vz X3VzZV9jb3VudCA9IDE7IC8qIFBlcm1hbmVudGx5IHBpbm5lZCBmcm9tIG91ciBwb2ludCBvZiB2 aWV3ICovCisKKwlEUk1fREVCVUdfUFJJTUUoInNpemUgPSAlenVcbiIsIHNpemUpOworCisJcmV0 dXJuICZzaG1lbS0+YmFzZTsKKworZXJyX2ZyZWVfYXJyYXk6CisJa3ZmcmVlKHNobWVtLT5wYWdl cyk7CitlcnJfZnJlZV9nZW06CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZzaG1lbS0+ YmFzZSk7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2dlbV9zaG1lbV9wcmltZV9pbXBvcnRfc2dfdGFibGUpOworCisvKioKKyAqIGRybV9nZW1fc2ht ZW1fcHJpbWVfbW1hcCAtIE1lbW9yeS1tYXAgYW4gZXhwb3J0ZWQgc2htZW0gR0VNIG9iamVjdAor ICogQG9iajogR0VNIG9iamVjdAorICogQHZtYTogVk1BIGZvciB0aGUgYXJlYSB0byBiZSBtYXBw ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgYSBidWZmZXIgaW1wb3J0ZWQgdmlhIERSTSBQ UklNRSBpbnRvIGEgdXNlcnNwYWNlCisgKiBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZS4gRHJpdmVy cyB0aGF0IHVzZSB0aGUgc2htZW0gaGVscGVycyBzaG91bGQgc2V0IHRoaXMKKyAqIGFzIHRoZWly ICZkcm1fZHJpdmVyLmdlbV9wcmltZV9tbWFwIGNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6Cisg KiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8K K2ludCBkcm1fZ2VtX3NobWVtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmos IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCWludCByZXQ7CisKKwly ZXQgPSBkcm1fZ2VtX21tYXBfb2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXR1cm4gZHJtX2dlbV9zaG1lbV9tbWFwX29iaihzaG1lbSwgdm1h KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcCk7CisKKy8q KgorICogZHJtX2dlbV9zaG1lbV9wcmltZV92bWFwIC0gTWFwIGEgc2htZW0gR0VNIG9iamVjdCBp bnRvIHRoZSBrZXJuZWwncyB2aXJ0dWFsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBh ZGRyZXNzIHNwYWNlCisgKiBAb2JqOiBHRU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBt YXBzIGEgYnVmZmVyIGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgaW50byB0aGUga2VybmVsJ3MKKyAq IHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gRHJpdmVycyB1c2luZyB0aGUgc2htZW0gaGVscGVycyBz aG91bGQgc2V0IHRoaXMgYXMKKyAqIHRoZWlyIERSTSBkcml2ZXIncyAmZHJtX2RyaXZlci5nZW1f cHJpbWVfdm1hcCBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOgorICogVGhlIGtlcm5lbCB2aXJ0 dWFsIGFkZHJlc3Mgb2YgdGhlIHNobWVtIEdFTSBvYmplY3QncyBiYWNraW5nIHN0b3JlIG9yIE5V TEwgb24gZXJyb3IuCisgKi8KK3ZvaWQgKmRybV9nZW1fc2htZW1fcHJpbWVfdm1hcChzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNo bWVtID0gdG9fZHJtX2dlbV9zaG1lbV9vYmoob2JqKTsKKworCWRybV9nZW1fc2htZW1fdm1hcChz aG1lbSk7CisKKwlyZXR1cm4gc2htZW0tPnZhZGRyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2dlbV9zaG1lbV9wcmltZV92bWFwKTsKKworLyoqCisgKiBkcm1fZ2VtX3NobWVtX3ByaW1lX3Z1 bm1hcCAtIFVubWFwIGEgc2htZW0gR0VNIG9iamVjdCBmcm9tIHRoZSBrZXJuZWwncworICogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UKKyAqIEBvYmo6 IEdFTSBvYmplY3QKKyAqIEB2YWRkcjoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyB3aGVyZSB0aGUg c2htZW0gR0VNIG9iamVjdCB3YXMgbWFwcGVkCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVz IGEgYnVmZmVyIGV4cG9ydGVkIHZpYSBEUk0gUFJJTUUgZnJvbSB0aGUga2VybmVsJ3MKKyAqIHZp cnR1YWwgYWRkcmVzcyBzcGFjZS4gRHJpdmVycyB1c2luZyB0aGUgc2htZW0gaGVscGVycyBzaG91 bGQgc2V0IHRoaXMgYXMKKyAqIHRoZWlyICZkcm1fZHJpdmVyLmdlbV9wcmltZV92dW5tYXAgY2Fs bGJhY2suCisgKi8KK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmltZV92dW5tYXAoc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKQoreworCXN0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqc2htZW0gPSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopOworCisJZHJtX2dlbV9zaG1l bV92dW5tYXAoc2htZW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2dlbV9zaG1lbV9wcmlt ZV92dW5tYXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2dlbV9zaG1lbV9oZWxwZXIu aCBiL2luY2x1ZGUvZHJtL2RybV9nZW1fc2htZW1faGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40NGU1ZTY5NWEzYzQKLS0tIC9kZXYvbnVsbAorKysgYi9p bmNsdWRlL2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5oCkBAIC0wLDAgKzEsMTk4IEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworCisjaWZuZGVmIF9fRFJNX0dFTV9T SE1FTV9IRUxQRVJfSF9fCisjZGVmaW5lIF9fRFJNX0dFTV9TSE1FTV9IRUxQRVJfSF9fCisKKyNp bmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGlu dXgvbXV0ZXguaD4KKworI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPgorI2luY2x1ZGUgPGRybS9k cm1fZ2VtLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgorI2luY2x1ZGUgPGRybS9kcm1f cHJpbWUuaD4KKworc3RydWN0IGRtYV9idWZfYXR0YWNobWVudDsKK3N0cnVjdCBkcm1fbW9kZV9j cmVhdGVfZHVtYjsKK3N0cnVjdCBkcm1fcHJpbnRlcjsKK3N0cnVjdCBzZ190YWJsZTsKKworLyoq CisgKiBlbnVtIGRybV9nZW1fc2htZW1fY2FjaGVfbW9kZSAtIHNobWVtIGJ1ZmZlciBjYWNoZSBt b2RlCisgKi8KK2VudW0gZHJtX2dlbV9zaG1lbV9jYWNoZV9tb2RlIHsKKwkvKioKKwkgKiBARFJN X0dFTV9TSE1FTV9CT19VTktOT1dOOgorCSAqCisJICogQ2FjaGUgbW9kZSBpcyBub3Qga25vd24u IFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpbXBvcnRpbmcgYSBidWZmZXIuCisJICovCisJRFJNX0dF TV9TSE1FTV9CT19VTktOT1dOID0gMCwKKworCS8qKgorCSAqIEBEUk1fR0VNX1NITUVNX0JPX1VO Q0FDSEVEOiBCdWZmZXIgaXMgdW5jYWNoZWQuCisJICovCisJRFJNX0dFTV9TSE1FTV9CT19VTkNB Q0hFRCwKKworCS8qKgorCSAqIEBEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRDogQnVmZmVyIGlzIGNh Y2hlZC4KKwkgKi8KKwlEUk1fR0VNX1NITUVNX0JPX0NBQ0hFRCwKKworCS8qKgorCSAqIEBEUk1f R0VNX1NITUVNX0JPX1dSSVRFQ09NQklORUQ6IEJ1ZmZlciBpcyB1bmNhY2hlZCB3aXRoIHdyaXRl cyBjb21iaW5lZC4KKwkgKi8KKwlEUk1fR0VNX1NITUVNX0JPX1dSSVRFQ09NQklORUQsCit9Owor CisvKioKKyAqIHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAtIEdFTSBvYmplY3QgYmFja2Vk IGJ5IHNobWVtCisgKi8KK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCB7CisJLyoqCisJICog QGJhc2U6IEJhc2UgR0VNIG9iamVjdAorCSAqLworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNl OworCisJLyoqCisJICogQGNhY2hlX21vZGU6IENhY2hlIG1vZGUKKwkgKi8KKwllbnVtIGRybV9n ZW1fc2htZW1fY2FjaGVfbW9kZSBjYWNoZV9tb2RlOworCisJLyoqCisJICogQGxvY2s6IFByb3Rl Y3RzIHRoZSBwYWdlIHRhYmxlIGFuZCB1c2UgY291bnQKKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggcGFn ZXNfbG9jazsKKworCS8qKgorCSAqIEBwYWdlczogUGFnZSB0YWJsZQorCSAqLworCXN0cnVjdCBw YWdlICoqcGFnZXM7CisKKwkvKioKKwkgKiBAcGFnZXNfdXNlX2NvdW50OgorCSAqCisJICogUmVm ZXJlbmNlIGNvdW50IG9uIHRoZSBwYWdlcyB0YWJsZS4KKwkgKiBUaGUgcGFnZXMgYXJlIHB1dCB3 aGVuIHRoZSBjb3VudCByZWFjaGVzIHplcm8uCisJICovCisJdW5zaWduZWQgaW50IHBhZ2VzX3Vz ZV9jb3VudDsKKworCS8qKgorCSAqIEBwYWdlc19tYXJrX2RpcnR5X29uX3B1dDoKKwkgKgorCSAq IE1hcmsgcGFnZXMgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSBwdXQuCisJICovCisJYm9vbCBwYWdl c19tYXJrX2RpcnR5X29uX3B1dDsKKworCS8qKgorCSAqIEBwYWdlc19tYXJrX2FjY2Vzc2VkX29u X3B1dDoKKwkgKgorCSAqIE1hcmsgcGFnZXMgYXMgYWNjZXNzZWQgd2hlbiB0aGV5IGFyZSBwdXQu CisJICovCisJYm9vbCBwYWdlc19tYXJrX2FjY2Vzc2VkX29uX3B1dDsKKworCS8qKgorCSAqIEBz Z3Q6IFNjYXR0ZXIvZ2F0aGVyIHRhYmxlIGZvciBpbXBvcnRlZCBQUklNRSBidWZmZXJzCisJICov CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisKKwkvKioKKwkgKiBAdm1hcF9sb2NrOiBQcm90ZWN0 cyB0aGUgdm1hcCBhZGRyZXNzIGFuZCB1c2UgY291bnQKKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggdm1h cF9sb2NrOworCisJLyoqCisJICogQHZhZGRyOiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRo ZSBiYWNraW5nIG1lbW9yeQorCSAqLworCXZvaWQgKnZhZGRyOworCisJLyoqCisJICogQHZtYXBf dXNlX2NvdW50OgorCSAqCisJICogUmVmZXJlbmNlIGNvdW50IG9uIHRoZSB2aXJ0dWFsIGFkZHJl c3MuCisJICogVGhlIGFkZHJlc3MgYXJlIHVuLW1hcHBlZCB3aGVuIHRoZSBjb3VudCByZWFjaGVz IHplcm8uCisJICovCisJdW5zaWduZWQgaW50IHZtYXBfdXNlX2NvdW50OworfTsKKworI2RlZmlu ZSB0b19kcm1fZ2VtX3NobWVtX29iaihvYmopIFwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3Qg ZHJtX2dlbV9zaG1lbV9vYmplY3QsIGJhc2UpCisKKy8qKgorICogREVGSU5FX0RSTV9HRU1fU0hN RU1fRk9QUygpIC0gTWFjcm8gdG8gZ2VuZXJhdGUgZmlsZSBvcGVyYXRpb25zIGZvciBzaG1lbSBk cml2ZXJzCisgKiBAbmFtZTogbmFtZSBmb3IgdGhlIGdlbmVyYXRlZCBzdHJ1Y3R1cmUKKyAqCisg KiBUaGlzIG1hY3JvIGF1dG9nZW5lcmF0ZXMgYSBzdWl0YWJsZSAmc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBmb3Igc2htZW0gYmFzZWQKKyAqIGRyaXZlcnMsIHdoaWNoIGNhbiBiZSBhc3NpZ25lZCB0 byAmZHJtX2RyaXZlci5mb3BzLiBOb3RlIHRoYXQgdGhpcyBzdHJ1Y3R1cmUKKyAqIGNhbm5vdCBi ZSBzaGFyZWQgYmV0d2VlbiBkcml2ZXJzLCBiZWNhdXNlIGl0IGNvbnRhaW5zIGEgcmVmZXJlbmNl IHRvIHRoZQorICogY3VycmVudCBtb2R1bGUgdXNpbmcgVEhJU19NT0RVTEUuCisgKgorICogTm90 ZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyBhbHJlYWR5IG1hcmtlZCBhcyBzdGF0aWMgLSBpZiB5 b3UgbmVlZCBhCisgKiBub24tc3RhdGljIHZlcnNpb24gb2YgdGhpcyB5b3UncmUgcHJvYmFibHkg ZG9pbmcgaXQgd3JvbmcgYW5kIHdpbGwgYnJlYWsgdGhlCisgKiBUSElTX01PRFVMRSByZWZlcmVu Y2UgYnkgYWNjaWRlbnQuCisgKi8KKyNkZWZpbmUgREVGSU5FX0RSTV9HRU1fU0hNRU1fRk9QUyhu YW1lKSBcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSA9IHtcCisJ CS5vd25lcgkJPSBUSElTX01PRFVMRSxcCisJCS5vcGVuCQk9IGRybV9vcGVuLFwKKwkJLnJlbGVh c2UJPSBkcm1fcmVsZWFzZSxcCisJCS51bmxvY2tlZF9pb2N0bAk9IGRybV9pb2N0bCxcCisJCS5j b21wYXRfaW9jdGwJPSBkcm1fY29tcGF0X2lvY3RsLFwKKwkJLnBvbGwJCT0gZHJtX3BvbGwsXAor CQkucmVhZAkJPSBkcm1fcmVhZCxcCisJCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssXAorCQkubW1h cAkJPSBkcm1fZ2VtX3NobWVtX21tYXAsIFwKKwl9CisKK3N0cnVjdCBkcm1fZ2VtX3NobWVtX29i amVjdCAqZHJtX2dlbV9zaG1lbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90 IHNpemUpOwordm9pZCBkcm1fZ2VtX3NobWVtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKTsKKworaW50IGRybV9nZW1fc2htZW1fZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2Vt X3NobWVtX29iamVjdCAqc2htZW0pOwordm9pZCBkcm1fZ2VtX3NobWVtX3B1dF9wYWdlcyhzdHJ1 Y3QgZHJtX2dlbV9zaG1lbV9vYmplY3QgKnNobWVtKTsKK2ludCBkcm1fZ2VtX3NobWVtX3ZtYXAo c3RydWN0IGRybV9nZW1fc2htZW1fb2JqZWN0ICpzaG1lbSk7Cit2b2lkIGRybV9nZW1fc2htZW1f dnVubWFwKHN0cnVjdCBkcm1fZ2VtX3NobWVtX29iamVjdCAqc2htZW0pOworCitpbnQgZHJtX2dl bV9zaG1lbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpOwor CitpbnQgZHJtX2dlbV9zaG1lbV9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSk7CisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1 Y3QgZHJtX2dlbV9zaG1lbV92bV9vcHM7CisKK3ZvaWQgZHJtX2dlbV9zaG1lbV9wcmludF9pbmZv KHN0cnVjdCBkcm1fcHJpbnRlciAqcCwgdW5zaWduZWQgaW50IGluZGVudCwKKwkJCSAgICAgIGNv bnN0IHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKKworaW50IGRybV9nZW1fc2htZW1fcHJp bWVfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgZHJtX2dlbV9zaG1lbV9w cmltZV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CitzdHJ1Y3Qgc2dfdGFibGUg KmRybV9nZW1fc2htZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKTsKK3N0cnVjdCBkcm1fZ2VtX29iamVjdCAqCitkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9y dF9zZ190YWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gsCisJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKK2lu dCBkcm1fZ2VtX3NobWVtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK3ZvaWQgKmRybV9nZW1fc2htZW1fcHJpbWVfdm1h cChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGRybV9nZW1fc2htZW1fcHJpbWVf dnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRkcik7CisKKy8qKgor ICogRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTIC0gRGVmYXVsdCBzaG1lbSBHRU0gb3BlcmF0aW9u cworICoKKyAqIFRoaXMgbWFjcm8gcHJvdmlkZXMgYSBzaG9ydGN1dCBmb3Igc2V0dGluZyB0aGUg c2htZW0gR0VNIG9wZXJhdGlvbnMgaW4KKyAqIHRoZSAmZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCisg Ki8KKyNkZWZpbmUgRFJNX0dFTV9TSE1FTV9EUklWRVJfT1BTIFwKKwkuZ2VtX2ZyZWVfb2JqZWN0 X3VubG9ja2VkID0gZHJtX2dlbV9zaG1lbV9mcmVlX29iamVjdCwgXAorCS5nZW1fcHJpbnRfaW5m bwkJPSBkcm1fZ2VtX3NobWVtX3ByaW50X2luZm8sIFwKKwkuZ2VtX3ZtX29wcwkJPSAmZHJtX2dl bV9zaG1lbV92bV9vcHMsIFwKKwkucHJpbWVfaGFuZGxlX3RvX2ZkCT0gZHJtX2dlbV9wcmltZV9o YW5kbGVfdG9fZmQsIFwKKwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90 b19oYW5kbGUsIFwKKwkuZ2VtX3ByaW1lX3BpbgkJPSBkcm1fZ2VtX3NobWVtX3ByaW1lX3Bpbiwg XAorCS5nZW1fcHJpbWVfdW5waW4JPSBkcm1fZ2VtX3NobWVtX3ByaW1lX3VucGluLCBcCisJLmdl bV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwgXAorCS5nZW1fcHJpbWVfZXhw b3J0CT0gZHJtX2dlbV9wcmltZV9leHBvcnQsIFwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZQk9 IGRybV9nZW1fc2htZW1fcHJpbWVfZ2V0X3NnX3RhYmxlLCBcCisJLmdlbV9wcmltZV9pbXBvcnRf c2dfdGFibGUgPSBkcm1fZ2VtX3NobWVtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwgXAorCS5nZW1f cHJpbWVfdm1hcAkJPSBkcm1fZ2VtX3NobWVtX3ByaW1lX3ZtYXAsIFwKKwkuZ2VtX3ByaW1lX3Z1 bm1hcAk9IGRybV9nZW1fc2htZW1fcHJpbWVfdnVubWFwLCBcCisJLmdlbV9wcmltZV9tbWFwCQk9 IGRybV9nZW1fc2htZW1fcHJpbWVfbW1hcCwgXAorCS5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX3No bWVtX2R1bWJfY3JlYXRlCisKKyNlbmRpZiAvKiBfX0RSTV9HRU1fU0hNRU1fSEVMUEVSX0hfXyAq LwotLSAKMi4xNS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK