From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zach Reizner Subject: [PATCH] drm/vgem: implement virtual GEM Date: Thu, 20 Nov 2014 16:26:16 -0800 Message-ID: <1416529576-20471-1-git-send-email-zachr@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f201.google.com (mail-yk0-f201.google.com [209.85.160.201]) by gabe.freedesktop.org (Postfix) with ESMTP id BB67B6E86E for ; Thu, 20 Nov 2014 16:26:38 -0800 (PST) Received: by mail-yk0-f201.google.com with SMTP id 142so267948ykq.2 for ; Thu, 20 Nov 2014 16:26:38 -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 Cc: =?UTF-8?q?St=C3=A9phane=20Marchesin?= , Ben Widawsky , Zach Reizner List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBpbXBsZW1lbnRzIHRoZSB2aXJ0dWFsIEdFTSBkcml2ZXIgd2l0aCBQUklNRSBz aGFyaW5nIHdoaWNoCmFsbG93cyB2Z2VtIHRvIGltcG9ydCBhIGdlbSBvYmplY3QgZnJvbSBvdGhl ciBkcml2ZXJzIGZvciB0aGUgcHVycG9zZQpvZiBtbWFwLWluZyB0aGVtIHRvIHVzZXJzcGFjZS4K ClJldmlld2VkLWJ5OiBTdMOpcGhhbmUgTWFyY2hlc2luIDxtYXJjaGV1QGNocm9taXVtLm9yZz4K U2lnbmVkLW9mZi1ieTogQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+ClNpZ25lZC1vZmYt Ynk6IEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KU2lnbmVkLW9mZi1ieTogWmFjaCBS ZWl6bmVyIDx6YWNockBnb29nbGUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAg ICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS92Z2VtL01ha2VmaWxlICAgICAgIHwgICA0ICsKIGRyaXZl cnMvZ3B1L2RybS92Z2VtL3ZnZW1fZG1hX2J1Zi5jIHwgMTY5ICsrKysrKysrKysrKysrKwogZHJp dmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYyAgICAgfCA0MDcgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5oICAgICB8 ICA2MiArKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNjUyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZG1hX2J1Zi5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGUzYjRiMGYuLjM5OTA5 YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9LY29uZmlnCkBAIC0xNjUsNiArMTY1LDE1IEBAIGNvbmZpZyBEUk1fU0FWQUdFCiAJICBD aG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBTYXZhZ2UzRC80L1N1cGVyU2F2YWdlL1By by9Ud2lzdGVyCiAJICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQgc2F2YWdlLgogCitjb25maWcgRFJNX1ZHRU0KKwl0cmlzdGF0ZSAiVmlydHVhbCBH RU0gcHJvdmlkZXIiCisJZGVwZW5kcyBvbiBEUk0KKwloZWxwCisJICBDaG9vc2UgdGhpcyBvcHRp b24gdG8gZ2V0IGEgdmlydHVhbCBncmFwaGljcyBtZW1vcnkgbWFuYWdlciwKKwkgIGFzIHVzZWQg YnkgTWVzYSdzIHNvZnR3YXJlIHJlbmRlcmVyIGZvciBlbmhhbmNlZCBwZXJmb3JtYW5jZS4KKwkg IElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2Z2VtLgorCisKIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS92bXdnZngvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBjM2NmNjRjLi5jMWU0YTBlIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBAIG9iai0kKENPTkZJR19EUk1fU0lTKSAgICs9IHNp cy8KIG9iai0kKENPTkZJR19EUk1fU0FWQUdFKSs9IHNhdmFnZS8KIG9iai0kKENPTkZJR19EUk1f Vk1XR0ZYKSs9IHZtd2dmeC8KIG9iai0kKENPTkZJR19EUk1fVklBKQkrPXZpYS8KK29iai0kKENP TkZJR19EUk1fVkdFTSkJKz0gdmdlbS8KIG9iai0kKENPTkZJR19EUk1fTk9VVkVBVSkgKz1ub3V2 ZWF1Lwogb2JqLSQoQ09ORklHX0RSTV9FWFlOT1MpICs9ZXh5bm9zLwogb2JqLSQoQ09ORklHX0RS TV9HTUE1MDApICs9IGdtYTUwMC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92Z2VtL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMTA1NWNiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS92Z2VtL01ha2VmaWxlCkBAIC0wLDAgKzEsNCBAQAorY2NmbGFncy15IDo9IC1JaW5jbHVk ZS9kcm0KK3ZnZW0teSA6PSB2Z2VtX2Rydi5vIHZnZW1fZG1hX2J1Zi5vCisKK29iai0kKENPTkZJ R19EUk1fVkdFTSkJKz0gdmdlbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmdlbS92 Z2VtX2RtYV9idWYuYyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZG1hX2J1Zi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NTAxMjQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2RtYV9idWYuYwpAQCAtMCwwICsxLDE2OSBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDEyIEludGVsIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQg wqkgMjAxNCBUaGUgQ2hyb21pdW0gT1MgQXV0aG9ycworICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisg KiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCBy ZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1 YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05U UkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MK KyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQmVuIFdpZGF3c2t5 IDxiZW5AYndpZGF3c2submV0PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5o PgorI2luY2x1ZGUgInZnZW1fZHJ2LmgiCisKKyNkZWZpbmUgVkdFTV9GRF9QRVJNUyAwNjAwCisK K3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKnZnZW1fZ2VtX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFf YnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlv biBkaXIpCit7CisJc3RydWN0IGRybV92Z2VtX2dlbV9vYmplY3QgKm9iaiA9IGF0dGFjaC0+ZG1h YnVmLT5wcml2OworCXN0cnVjdCBzZ190YWJsZSAqc2c7CisJaW50IHJldDsKKworCXJldCA9IHZn ZW1fZ2VtX2dldF9wYWdlcyhvYmopOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7 CisKKwkvKiBWR0VNIGFzc3VtZXMgY2FjaGUgY29oZXJlbnQgYWNjZXNzLiBOb3JtYWxseSB3ZSBt aWdodCBoYXZlIHRvIGZsdXNoCisJICogY2FjaGVzIGhlcmUgKi8KKworCUJVR19PTihvYmotPnBh Z2VzID09IE5VTEwpOworCisJc2cgPSBkcm1fcHJpbWVfcGFnZXNfdG9fc2cob2JqLT5wYWdlcywg b2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkUpOworCWlmICghc2cpIHsKKwkJdmdlbV9nZW1fcHV0 X3BhZ2VzKG9iaik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBzZzsKK30KKworc3Rh dGljIHZvaWQgdmdlbV9nZW1fdW5tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50 ICphdHRhY2gsCisJCQkgICAgc3RydWN0IHNnX3RhYmxlICpzZywKKwkJCSAgICBlbnVtIGRtYV9k YXRhX2RpcmVjdGlvbiBkYXRhX2RpcmVjdGlvbikKK3sKKwlzZ19mcmVlX3RhYmxlKHNnKTsKKwlr ZnJlZShzZyk7Cit9CisKK3N0YXRpYyB2b2lkICp2Z2VtX2ttYXBfYXRvbWljX2RtYV9idWYoc3Ry dWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYWdlX251bSkK K3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgKnZnZW1fa21hcF9kbWFfYnVmKHN0 cnVjdCBkbWFfYnVmICpkbWFfYnVmLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0p Cit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdmdlbV9tbWFwX2RtYV9idWYoc3Ry dWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9idWZfb3BzIHZn ZW1fZG1hYnVmX29wcyA9IHsKKwkubWFwX2RtYV9idWYJPSB2Z2VtX2dlbV9tYXBfZG1hX2J1ZiwK KwkudW5tYXBfZG1hX2J1Zgk9IHZnZW1fZ2VtX3VubWFwX2RtYV9idWYsCisJLnJlbGVhc2UJPSBk cm1fZ2VtX2RtYWJ1Zl9yZWxlYXNlLAorCS5rbWFwX2F0b21pYwk9IHZnZW1fa21hcF9hdG9taWNf ZG1hX2J1ZiwKKwkua21hcAkJPSB2Z2VtX2ttYXBfZG1hX2J1ZiwKKwkubW1hcAkJPSB2Z2VtX21t YXBfZG1hX2J1ZiwKK307CisKK3N0cnVjdCBkbWFfYnVmICp2Z2VtX2dlbV9wcmltZV9leHBvcnQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg Km9iaiwKKwkJCQkgICAgICBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGRtYV9idWZfZXhwb3J0KG9i aiwgJnZnZW1fZG1hYnVmX29wcywgb2JqLT5zaXplLCBmbGFncywgTlVMTCk7Cit9CisKK3N0cnVj dCBkcm1fZ2VtX29iamVjdCAqdmdlbV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCit7CisJc3RydWN0IGRy bV92Z2VtX2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqYXR0YWNoID0gTlVMTDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNnID0gTlVMTDsKKwlpbnQgbnVt X3BhZ2VzOworCWludCByZXQ7CisKKwlhdHRhY2ggPSBkbWFfYnVmX2F0dGFjaChkbWFfYnVmLCBk ZXYtPmRldik7CisJaWYgKElTX0VSUihhdHRhY2gpKSB7CisJCXJldCA9IFBUUl9FUlIoYXR0YWNo KTsKKwkJZ290byBmYWlsOworCX0KKworCWdldF9kbWFfYnVmKGRtYV9idWYpOworCisJc2cgPSBk bWFfYnVmX21hcF9hdHRhY2htZW50KGF0dGFjaCwgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChJ U19FUlIoc2cpKSB7CisJCXJldCA9IFBUUl9FUlIoc2cpOworCQlnb3RvIGZhaWxfZGV0YWNoOwor CX0KKworCW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKTsKKwlpZiAob2Jq ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3VubWFwOworCX0KKwor CW9iai0+YmFzZS5pbXBvcnRfYXR0YWNoID0gYXR0YWNoOworCW9iai0+c2cgPSBzZzsKKworCS8q IEFzIGEgcmVzdWx0IG9mIHRoaXMgbW1hcCB3aWxsIG5vdCB3b3JrIC15ZXQtICovCisJcmV0ID0g ZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsICZvYmotPmJhc2UsIGRtYV9idWYtPnNpemUpOworCWlm IChyZXQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX2ZyZWU7CisJfQorCisJbnVt X3BhZ2VzID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7CisKKwlvYmotPnBhZ2VzID0gZHJt X21hbGxvY19hYihudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJaWYgKCFvYmot PnBhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9nZW1fcmVsZWFzZTsKKwl9 CisKKwlyZXQgPSBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cyhzZywgb2JqLT5wYWdl cywgTlVMTCwgbnVtX3BhZ2VzKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdv dG8gZmFpbF9mcmVlX3BhZ2VzOworCX0KKworCXJldHVybiAmb2JqLT5iYXNlOworCitmYWlsX2Zy ZWVfcGFnZXM6CisJZHJtX2ZyZWVfbGFyZ2Uob2JqLT5wYWdlcyk7CitmYWlsX2dlbV9yZWxlYXNl OgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+YmFzZSk7CitmYWlsX2ZyZWU6CisJa2Zy ZWUob2JqKTsKK2ZhaWxfdW5tYXA6CisJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KGF0dGFjaCwg c2csIERNQV9CSURJUkVDVElPTkFMKTsKK2ZhaWxfZGV0YWNoOgorCWRtYV9idWZfZGV0YWNoKGRt YV9idWYsIGF0dGFjaCk7CisJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CitmYWlsOgorCXJldHVybiBF UlJfUFRSKHJldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Ry di5jIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5iMDAzMmM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3ZnZW0vdmdlbV9kcnYuYwpAQCAtMCwwICsxLDQwNyBAQAorLyoKKyAqIENvcHlyaWdodCAy MDExIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDE0IFRoZSBDaHJvbWl1bSBPUyBB dXRob3JzCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIikKKyAqIHRv IGRlYWwgaW4gdGhlIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIG9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIKKyAqIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tCisgKiB0 aGVtIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo aXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBz aGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJ UyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJ QklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMsIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JULCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwg T1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKglB ZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KKyAqCUJlbiBXaWRhd3NreSA8YmVuQGJ3aWRh d3NrLm5ldD4KKyAqLworCisvKioKKyAqIFRoaXMgaXMgdmdlbSwgYSAobm9uLWhhcmR3YXJlLWJh Y2tlZCkgR0VNIHNlcnZpY2UuICBUaGlzIGlzIHVzZWQgYnkgTWVzYSdzCisgKiBzb2Z0d2FyZSBy ZW5kZXJlciBhbmQgdGhlIFggc2VydmVyIGZvciBlZmZpY2llbnQgYnVmZmVyIHNoYXJpbmcuCisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+ CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KKyNpbmNsdWRlICJ2Z2VtX2Rydi5oIgorCisj ZGVmaW5lIERSSVZFUl9OQU1FCSJ2Z2VtIgorI2RlZmluZSBEUklWRVJfREVTQwkiVmlydHVhbCBH RU0gcHJvdmlkZXIiCisjZGVmaW5lIERSSVZFUl9EQVRFCSIyMDEyMDExMiIKKyNkZWZpbmUgRFJJ VkVSX01BSk9SCTEKKyNkZWZpbmUgRFJJVkVSX01JTk9SCTAKKworc3RhdGljIGludCB2Z2VtX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlwbGF0 Zm9ybV9zZXRfZHJ2ZGF0YShkZXYtPnBsYXRmb3JtZGV2LCBkZXYpOworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50IHZnZW1fdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmdlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg dmdlbV9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpCit7Cit9CisKK3N0YXRpYyB2b2lkIHZnZW1fbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpCit7Cit9CisKK3ZvaWQgdmdlbV9nZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fdmdlbV9n ZW1fb2JqZWN0ICpvYmopCit7CisJaW50IG51bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplIC8gUEFH RV9TSVpFOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJ CWlmIChvYmotPnBhZ2VzW2ldID09IE5VTEwpCisJCQlicmVhazsKKwkJcGFnZV9jYWNoZV9yZWxl YXNlKG9iai0+cGFnZXNbaV0pOworCX0KKworCWRybV9mcmVlX2xhcmdlKG9iai0+cGFnZXMpOwor CW9iai0+cGFnZXMgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCB2Z2VtX2dlbV9mcmVlX29iamVj dChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29i amVjdCAqdmdlbV9vYmogPSB0b192Z2VtX2JvKG9iaik7CisKKwlkcm1fZ2VtX2ZyZWVfbW1hcF9v ZmZzZXQob2JqKTsKKworCWlmIChvYmotPmltcG9ydF9hdHRhY2gpIHsKKwkJZHJtX3ByaW1lX2dl bV9kZXN0cm95KG9iaiwgdmdlbV9vYmotPnNnKTsKKwkJdmdlbV9vYmotPnBhZ2VzID0gTlVMTDsK Kwl9CisKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlpZiAodmdlbV9vYmotPnBh Z2VzKQorCQl2Z2VtX2dlbV9wdXRfcGFnZXModmdlbV9vYmopOworCisJdmdlbV9vYmotPnBhZ2Vz ID0gTlVMTDsKKworCWtmcmVlKHZnZW1fb2JqKTsKK30KKworaW50IHZnZW1fZ2VtX2dldF9wYWdl cyhzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBhZGRyZXNzX3Nw YWNlICptYXBwaW5nOworCWdmcF90IGdmcG1hc2sgPSBHRlBfS0VSTkVMOworCWludCBudW1fcGFn ZXMsIGksIHJldCA9IDA7CisKKwludW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0la RTsKKworCWlmICghb2JqLT5wYWdlcykgeworCQlvYmotPnBhZ2VzID0gZHJtX21hbGxvY19hYihu dW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJCWlmIChvYmotPnBhZ2VzID09IE5V TEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwlt YXBwaW5nID0gb2JqLT5iYXNlLmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGlu ZzsKKwlnZnBtYXNrIHw9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7CisKKwlmb3IgKGkgPSAw OyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCW9iai0+cGFn ZXNbaV0gPSBOVUxMOworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3BhZ2VfZ2ZwKG1hcHBp bmcsIGksIGdmcG1hc2spOworCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCQlyZXQgPSBQVFJfRVJS KHBhZ2UpOworCQkJZ290byBlcnJfb3V0OworCQl9CisJCW9iai0+cGFnZXNbaV0gPSBwYWdlOwor CX0KKworCXJldHVybiByZXQ7CisKK2Vycl9vdXQ6CisJdmdlbV9nZW1fcHV0X3BhZ2VzKG9iaik7 CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2Z2VtX2dlbV9mYXVsdChzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IGRybV92 Z2VtX2dlbV9vYmplY3QgKm9iaiA9IHRvX3ZnZW1fYm8odm1hLT52bV9wcml2YXRlX2RhdGEpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OworCWxvZmZfdCBudW1fcGFn ZXM7CisJcGdvZmZfdCBwYWdlX29mZnNldDsKKwlpbnQgcmV0OworCisJLyogV2UgZG9uJ3QgdXNl IHZtZi0+cGdvZmYgc2luY2UgdGhhdCBoYXMgdGhlIGZha2Ugb2Zmc2V0ICovCisJcGFnZV9vZmZz ZXQgPSAoKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0 KSA+PgorCQlQQUdFX1NISUZUOworCisJbnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKG9iai0+YmFz ZS5zaXplLCBQQUdFX1NJWkUpOworCisJaWYgKHBhZ2Vfb2Zmc2V0ID4gbnVtX3BhZ2VzKQorCQly ZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OworCisJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1 YWxfYWRkcmVzcywKKwkJCSAgICAgb2JqLT5wYWdlc1twYWdlX29mZnNldF0pOworCisJbXV0ZXhf dW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6CisJ CXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CisJY2FzZSAtRU5PTUVNOgorCQlyZXR1cm4gVk1fRkFV TFRfT09NOworCWNhc2UgLUVCVVNZOgorCQlyZXR1cm4gVk1fRkFVTFRfUkVUUlk7CisJY2FzZSAt RUZBVUxUOgorCWNhc2UgLUVJTlZBTDoKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwlkZWZh dWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCX0KK30KKwor c3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2Z2VtX2dlbV92bV9vcHMgPSB7CisJ LmZhdWx0ID0gdmdlbV9nZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNs b3NlID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKKy8qIGlvY3RscyAqLworCitzdGF0aWMgc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICp2Z2VtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkgICAgICB1bnNpZ25l ZCBpbnQgKmhhbmRsZSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVj dCBkcm1fdmdlbV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1f b2JqZWN0OworCWludCBlcnI7CisKKwlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOwor CisJb2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCWlmICghb2JqKQor CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWdlbV9vYmplY3QgPSAmb2JqLT5iYXNlOwor CisJZXJyID0gZHJtX2dlbV9vYmplY3RfaW5pdChkZXYsIGdlbV9vYmplY3QsIHNpemUpOworCWlm IChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGUs IGdlbV9vYmplY3QsIGhhbmRsZSk7CisJaWYgKGVycikKKwkJZ290byBoYW5kbGVfb3V0OworCisJ ZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtX29iamVjdCk7CisKKwlyZXR1 cm4gZ2VtX29iamVjdDsKKworaGFuZGxlX291dDoKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKGdl bV9vYmplY3QpOworb3V0OgorCWtmcmVlKG9iaik7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30K Kworc3RhdGljIGludCB2Z2VtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUs IHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1i ICphcmdzKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iamVjdDsKKwl1aW50NjRf dCBzaXplOworCisJc2l6ZSA9IGFyZ3MtPmhlaWdodCAqIGFyZ3MtPndpZHRoICogRElWX1JPVU5E X1VQKGFyZ3MtPmJwcCwgOCk7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlnZW1fb2JqZWN0ID0gdmdlbV9nZW1fY3JlYXRlKGRldiwgZmlsZSwgJmFyZ3MtPmhhbmRsZSwg c2l6ZSk7CisKKwlpZiAoSVNfRVJSKGdlbV9vYmplY3QpKSB7CisJCURSTV9ERUJVR19EUklWRVIo Im9iamVjdCBjcmVhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihnZW1fb2JqZWN0 KTsKKwl9CisKKwlhcmdzLT5zaXplID0gZ2VtX29iamVjdC0+c2l6ZTsKKwlhcmdzLT5waXRjaCA9 IGFyZ3MtPndpZHRoOworCisJRFJNX0RFQlVHX0RSSVZFUigiQ3JlYXRlZCBvYmplY3Qgb2Ygc2l6 ZSAlbGxkXG4iLCBzaXplKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmdlbV9nZW1fZHVtYl9t YXAoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAg ICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpCit7CisJaW50IHJldCA9IDA7CisJ c3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9t dXRleCk7CisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZSwgaGFuZGxlKTsK KwlpZiAoIW9iaikgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlp ZiAoIWRybV92bWFfbm9kZV9oYXNfb2Zmc2V0KCZvYmotPnZtYV9ub2RlKSkgeworCQlyZXQgPSBk cm1fZ2VtX2NyZWF0ZV9tbWFwX29mZnNldChvYmopOworCQlpZiAocmV0KQorCQkJZ290byB1bnJl ZjsKKwl9CisKKwlCVUdfT04oIW9iai0+ZmlscCk7CisKKwlvYmotPmZpbHAtPnByaXZhdGVfZGF0 YSA9IG9iajsKKworCXJldCA9IHZnZW1fZ2VtX2dldF9wYWdlcyh0b192Z2VtX2JvKG9iaikpOwor CWlmIChyZXQpCisJCWdvdG8gZmFpbF9nZXRfcGFnZXM7CisKKwkqb2Zmc2V0ID0gZHJtX3ZtYV9u b2RlX29mZnNldF9hZGRyKCZvYmotPnZtYV9ub2RlKTsKKworCWdvdG8gdW5yZWY7CisKK2ZhaWxf Z2V0X3BhZ2VzOgorCWRybV9nZW1fZnJlZV9tbWFwX29mZnNldChvYmopOwordW5yZWY6CisJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmRl di0+c3RydWN0X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdmdlbV9kcm1fZ2VtX21t YXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlu dCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+dm1fZmxh Z3MgfD0gVk1fTUlYRURNQVA7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX2lvY3RsX2Rlc2MgdmdlbV9pb2N0bHNbXSA9IHsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZmlsZV9vcGVyYXRpb25zIHZnZW1fZHJpdmVyX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNf TU9EVUxFLAorCS5vcGVuCQk9IGRybV9vcGVuLAorCS5tbWFwCQk9IHZnZW1fZHJtX2dlbV9tbWFw LAorCS5wb2xsCQk9IGRybV9wb2xsLAorCS5yZWFkCQk9IGRybV9yZWFkLAorCS51bmxvY2tlZF9p b2N0bCA9IGRybV9pb2N0bCwKKwkucmVsZWFzZQk9IGRybV9yZWxlYXNlLAorfTsKKworc3RhdGlj IHN0cnVjdCBkcm1fZHJpdmVyIHZnZW1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMJPSBE UklWRVJfR0VNIHwgRFJJVkVSX1BSSU1FLAorCS5sb2FkCQkJPSB2Z2VtX2xvYWQsCisJLnVubG9h ZAkJCT0gdmdlbV91bmxvYWQsCisJLm9wZW4JCQk9IHZnZW1fb3BlbiwKKwkucHJlY2xvc2UJCT0g dmdlbV9wcmVjbG9zZSwKKwkubGFzdGNsb3NlCQk9IHZnZW1fbGFzdGNsb3NlLAorCS5nZW1fZnJl ZV9vYmplY3QJPSB2Z2VtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcwkJPSAmdmdlbV9n ZW1fdm1fb3BzLAorCS5pb2N0bHMJCQk9IHZnZW1faW9jdGxzLAorCS5mb3BzCQkJPSAmdmdlbV9k cml2ZXJfZm9wcywKKwkuZHVtYl9jcmVhdGUJCT0gdmdlbV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1 bWJfbWFwX29mZnNldAk9IHZnZW1fZ2VtX2R1bWJfbWFwLAorCS5wcmltZV9oYW5kbGVfdG9fZmQJ PSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJt X2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQJPSB2Z2VtX2dlbV9w cmltZV9leHBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnQJPSB2Z2VtX2dlbV9wcmltZV9pbXBvcnQs CisJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwkuZGVzYwk9IERSSVZFUl9ERVNDLAorCS5kYXRlCT0g RFJJVkVSX0RBVEUsCisJLm1ham9yCT0gRFJJVkVSX01BSk9SLAorCS5taW5vcgk9IERSSVZFUl9N SU5PUiwKK307CisKK3N0YXRpYyBpbnQgdmdlbV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQoreworCXZnZW1fZHJpdmVyLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpF KHZnZW1faW9jdGxzKTsKKworCXJldHVybiBkcm1fcGxhdGZvcm1faW5pdCgmdmdlbV9kcml2ZXIs IHBkZXYpOworfQorCitzdGF0aWMgaW50IHZnZW1fcGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZHJtX3B1dF9kZXYocGxhdGZvcm1fZ2V0X2RydmRhdGEo cGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2 Z2VtX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdmdlbV9wbGF0Zm9ybV9wcm9iZSwK KwkucmVtb3ZlCQk9IHZnZW1fcGxhdGZvcm1fcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3du ZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnZnZW1fZGV2aWNlOworCitzdGF0aWMgaW50IF9f aW5pdCB2Z2VtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJp dmVyX3JlZ2lzdGVyKCZ2Z2VtX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBv dXQ7CisKKwl2Z2VtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidmdlbSIsIC0xKTsK KwlpZiAoIXZnZW1fZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gdW5yZWdpc3Rl cl9vdXQ7CisJfQorCisJdmdlbV9kZXZpY2UtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IH4wVUxM OworCXZnZW1fZGV2aWNlLT5kZXYuZG1hX21hc2sgPSAmdmdlbV9kZXZpY2UtPmRldi5jb2hlcmVu dF9kbWFfbWFzazsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQodmdlbV9kZXZpY2UpOwor CWlmIChyZXQpCisJCWdvdG8gcHV0X291dDsKKworCXJldHVybiAwOworCitwdXRfb3V0OgorCXBs YXRmb3JtX2RldmljZV9wdXQodmdlbV9kZXZpY2UpOwordW5yZWdpc3Rlcl9vdXQ6CisJcGxhdGZv cm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZnZW1fcGxhdGZvcm1fZHJpdmVyKTsKK291dDoKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdmdlbV9leGl0KHZvaWQpCit7CisJcGxh dGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodmdlbV9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91 bnJlZ2lzdGVyKCZ2Z2VtX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHZnZW1f aW5pdCk7Cittb2R1bGVfZXhpdCh2Z2VtX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSZWQgSGF0 LCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92Z2VtL3ZnZW1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODg5YTIKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Rydi5oCkBAIC0wLDAgKzEsNjIgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IMKp IDIwMTQgVGhlIENocm9taXVtIE9TIEF1dGhvcnMKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEJlbiBXaWRhd3NreSA8 YmVuQGJ3aWRhd3NrLm5ldD4KKyAqCisgKi8KKworI2lmbmRlZiBfVkdFTV9EUlZfSF8KKyNkZWZp bmUgX1ZHRU1fRFJWX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9k cm1fZ2VtLmg+CisKKyNkZWZpbmUgdG9fdmdlbV9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IGRybV92Z2VtX2dlbV9vYmplY3QsIGJhc2UpCitzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCB7 CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlz dHJ1Y3Qgc2dfdGFibGUgKnNnOworfTsKKworLyogdmdlbV9kcnYuYyAqLworZXh0ZXJuIHZvaWQg dmdlbV9nZW1fcHV0X3BhZ2VzKHN0cnVjdCBkcm1fdmdlbV9nZW1fb2JqZWN0ICpvYmopOworZXh0 ZXJuIGludCB2Z2VtX2dlbV9nZXRfcGFnZXMoc3RydWN0IGRybV92Z2VtX2dlbV9vYmplY3QgKm9i aik7CisKKy8qIHZnZW1fZG1hX2J1Zi5jICovCitleHRlcm4gaW50IHZnZW1fcHJpbWVfdG9fZmQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKKwkJCSAgICB1aW50MzJfdCBoYW5kbGUsIGludCAqcHJpbWVfZmQpOworCitleHRlcm4gaW50 IHZnZW1fcHJpbWVfdG9faGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJaW50IHByaW1lX2ZkLCB1aW50MzJfdCAqaGFuZGxl KTsKKworZXh0ZXJuIHN0cnVjdCBkbWFfYnVmICp2Z2VtX2dlbV9wcmltZV9leHBvcnQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwK KwkJCQkJICAgICBpbnQgZmxhZ3MpOworCitleHRlcm4gc3RydWN0IGRybV9nZW1fb2JqZWN0ICp2 Z2VtX2dlbV9wcmltZV9pbXBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICBz dHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zik7CisKKyNlbmRpZgotLSAKMi4xLjAucmMyLjIwNi5nZWRi MDNlNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK