From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: =?UTF-8?q?=5BPATCH=203/7=5D=20drm/vgem=3A=20virtual=20GEM=20provider?= Date: Wed, 22 Feb 2012 20:29:16 +0100 Message-ID: <1329938960-4903-5-git-send-email-ben@bwidawsk.net> References: <1329938960-4903-1-git-send-email-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from cloud01.chad-versace.us (184-106-247-128.static.cloud-ips.com [184.106.247.128]) by gabe.freedesktop.org (Postfix) with ESMTP id 8F1A6A0F3A for ; Wed, 22 Feb 2012 11:30:43 -0800 (PST) In-Reply-To: <1329938960-4903-1-git-send-email-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org Cc: linaro-mm-sig@lists.linaro.org, Ben Widawsky List-Id: dri-devel@lists.freedesktop.org RnJvbTogQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+CgpJbiBhZGRpdGlvbidzIHRvIEFk YW0ncyByZXF1aXJlbWVudHMgYmVsb3csIEkgd291bGQgbGlrZSB0byB1c2UgVkdFTSB0bwpoZWxw IHN1cHBvcnQgZG1hLWJ1ZiBkZXZlbG9wbWVudC4gVkdFTSBpcyB3aXRob3V0IHF1aXJrcyBhbmQg bWFrZXMgYm90aApkZXZlbG9wbWVudCBhbmQgZGVidWcgb2Ygb3RoZXIgaW1wb3J0ZXJzIGFuZCBl eHBvcnRlcnMgc3Vic3RhbnRpYWxseQplYXNpZXIuCgp2MjoKVXNlIGZhdWx0IGJhc2VkIG1tYXAg aW5zdGVhZCBvZiBkb19tbWFwCgp2MzoKRHJvcCB0aGUgZ2V0cGFyYW0KdXNlIHRoZSBkdW1iIGJv IGludGVyZmFjZQoKW0Zyb20gQWRhbSBKYWNrc29uLCBSRkN2MV0KVGhpcyBpcyBhYm91dCBhcyBt aW5pbWFsIG9mIGEgdmlydHVhbCBHRU0gc2VydmljZSBhcyBwb3NzaWJsZS4gIE15IHBsYW4KaXMg dG8gdXNlIHRoaXMgd2l0aCBub24tbmF0aXZlLTNEIGhhcmR3YXJlIGZvciBidWZmZXIgc2hhcmlu ZyBiZXR3ZWVuIFgKYW5kIERSSS4KClRoZSBjdXJyZW50IGRyaXN3IHdpbnN5cyBhc3N1bWVzIGFu IHVubW9kaWZpZWQgWCBzZXJ2ZXIsIHdoaWNoIG1lYW5zCml0J3MgaG9wZWxlc3NseSBpbmVmZmlj aWVudCBmb3IgYm90aCB0aGUgcHVzaCBkaXJlY3Rpb24gb2YgU3dhcEJ1ZmZlcnMvCkRyYXdQaXhl bHMgYW5kIHRoZSBwdWxsIGRpcmVjdGlvbiBvZiBHTFhfRVhUX3RleHR1cmVfZnJvbV9waXhtYXAu ICBJJ20Kc3RpbGwgd29ya2luZyB0aHJvdWdoIHRoZSBkZXRhaWxzIG9mIHdoYXQgdGhlIHhzZXJ2 ZXIgc3VwcG9ydCB3aWxsIGxvb2sKbGlrZSwgYnV0IGluIGJyb2FkIHN0cm9rZXMgaXQncyAidXNl IHZnZW0gZm9yIENyZWF0ZVBpeG1hcCBhbmQKb3B0aW9uYWxseSB0aGUgc2hhZG93ZmIiLgoKT2J2 aW91c2x5IGFscGhhIHF1YWxpdHksIG1vc3RseSBsb29raW5nIGZvciBmZWVkYmFjayBvbiB0aGUg YXBwcm9hY2ggb3IKYW55IGdsYXJpbmcgYnVncy4gIEV2ZW50dWFsbHkgSSdkIGxpa2UgdG8gc2Vl IHNvbHV0aW9ucyBmb3Igc2hhcmluZyBnZW0Kb2JqZWN0cyBiZXR3ZWVuIGRybSBkZXZpY2VzIGFu ZC9vciB0aGUgZG1hX2J1ZiBBUEksIGJ1dCB0aGF0J3MgYSB3YXlzCmRvd24gdGhlIHJvYWQuCgpb UkZDdjFdClNpZ25lZC1vZmYtYnk6IEFkYW0gSmFja3NvbiA8YWpheEByZWRoYXQuY29tPgpbUkZD djJdClJldmlld2VkLWJ5OiBBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KU2lnbmVkLW9m Zi1ieTogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0PgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnICAgICAgICAgfCAgICA4ICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAg ICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS92Z2VtL01ha2VmaWxlICAgfCAgICA0ICsKIGRy aXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMgfCAgMzgyICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuaCB8ICAg NTQgKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDQ0OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92Z2VtL01ha2VmaWxlCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmgKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4 IDI0MTg0MjkuLjU2NmM0NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0xNTksNiArMTU5LDE0IEBAIGNvbmZpZyBE Uk1fU0FWQUdFCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBTYXZhZ2UzRC80 L1N1cGVyU2F2YWdlL1Byby9Ud2lzdGVyCiAJICBjaGlwc2V0LiBJZiBNIGlzIHNlbGVjdGVkIHRo ZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2F2YWdlLgogCitjb25maWcgRFJNX1ZHRU0KKwl0cmlz dGF0ZSAiVmlydHVhbCBHRU0gcHJvdmlkZXIiCisJZGVwZW5kcyBvbiBEUk0KKwloZWxwCisJICBD aG9vc2UgdGhpcyBvcHRpb24gdG8gZ2V0IGEgdmlydHVhbCBncmFwaGljcyBtZW1vcnkgbWFuYWdl ciwKKwkgIGFzIHVzZWQgYnkgTWVzYSdzIHNvZnR3YXJlIHJlbmRlcmVyIGZvciBlbmhhbmNlZCBw ZXJmb3JtYW5jZS4KKwkgIElmIE0gaXMgc2VsZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxl ZCB2Z2VtLgorCiBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyIKIAogc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggMjAyZjY1 MC4uZDAyNWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQCBvYmotJChDT05GSUdfRFJN X1NJUykgICArPSBzaXMvCiBvYmotJChDT05GSUdfRFJNX1NBVkFHRSkrPSBzYXZhZ2UvCiBvYmot JChDT05GSUdfRFJNX1ZNV0dGWCkrPSB2bXdnZngvCiBvYmotJChDT05GSUdfRFJNX1ZJQSkJKz12 aWEvCitvYmotJChDT05GSUdfRFJNX1ZHRU0pCSs9IHZnZW0vCiBvYmotJChDT05GSUdfRFJNX05P VVZFQVUpICs9bm91dmVhdS8KIG9iai0kKENPTkZJR19EUk1fRVhZTk9TKSArPWV4eW5vcy8KIG9i ai0kKENPTkZJR19EUk1fR01BNTAwKSArPSBnbWE1MDAvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmdlbS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL01ha2VmaWxlCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGM3YjgKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdmdlbS9NYWtlZmlsZQpAQCAtMCwwICsxLDQgQEAKK2NjZmxhZ3Mt eSA6PSAtSWluY2x1ZGUvZHJtCit2Z2VtLXkgOj0gdmdlbV9kcnYubworCitvYmotJChDT05GSUdf RFJNX1ZHRU0pCSs9IHZnZW0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdl bV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2YWI0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmMKQEAgLTAsMCArMSwzODIgQEAKKy8qCisgKiBDb3B5cmln aHQgMjAxMSBSZWQgSGF0LCBJbmMuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIikKKyAqIHRvIGRlYWwgaW4gdGhlIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIG9uIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIKKyAqIGxpY2Vuc2Us IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tCisgKiB0aGVtIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRJQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMsIE9SIE9USEVSIExJQUJJTElUWSwg V0hFVEhFUgorICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JULCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAq IEF1dGhvcnM6CisgKglBZGFtIEphY2tzb24gPGFqYXhAcmVkaGF0LmNvbT4KKyAqCUJlbiBXaWRh d3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KKyAqLworCisvKioKKyAqIFRoaXMgaXMgdmdlbSwgYSAo bm9uLWhhcmR3YXJlLWJhY2tlZCkgR0VNIHNlcnZpY2UuICBUaGlzIGlzIHVzZWQgYnkgTWVzYSdz CisgKiBzb2Z0d2FyZSByZW5kZXJlciBhbmQgdGhlIFggc2VydmVyIGZvciBlZmZpY2llbnQgYnVm ZmVyIHNoYXJpbmcuCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIK KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW1mcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+CisjaW5jbHVkZSAidmdlbV9kcnYuaCIKKworI2RlZmlu ZSBEUklWRVJfTkFNRQkidmdlbSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MJIlZpcnR1YWwgR0VNIHBy b3ZpZGVyIgorI2RlZmluZSBEUklWRVJfREFURQkiMjAxMjAxMTIiCisjZGVmaW5lIERSSVZFUl9N QUpPUgkxCisjZGVmaW5lIERSSVZFUl9NSU5PUgkwCisKK3N0YXRpYyBpbnQgdmdlbV9sb2FkKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGRy bV92Z2VtX3ByaXZhdGUgKmRldl9wcml2OworCisJZGV2X3ByaXYgPSBremFsbG9jKHNpemVvZigq ZGV2X3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9wcml2KQorCQlyZXR1cm4gLUVOT01F TTsKKworCWRldi0+ZGV2X3ByaXZhdGUgPSBkZXZfcHJpdjsKKwlkZXZfcHJpdi0+ZGV2ID0gZGV2 OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmdlbV91bmxvYWQoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Z2VtX29wZW4oc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBk cm1fdmdlbV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdjsKKworCWZpbGVfcHJpdiA9IGt6YWxsb2Mo c2l6ZW9mKCpmaWxlX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpbGVfcHJpdikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9IGZpbGVfcHJpdjsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCB2Z2VtX3ByZWNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX3ZnZW1fZmlsZV9wcml2 YXRlICpmaWxlX3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKKwlrZnJlZShmaWxlX3ByaXYpOwor fQorCitzdGF0aWMgdm9pZCB2Z2VtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworfQorCitzdGF0aWMgaW50IHZnZW1fZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqKQoreworCXJldHVybiAwOworfQorCit2b2lkIHZnZW1fZ2VtX3B1dF9wYWdlcyhz dHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAqb2JqKQoreworCWludCBudW1fcGFnZXMgPSBvYmot PmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1f cGFnZXM7IGkrKykgeworCQlpZiAob2JqLT5wYWdlc1tpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJ CXBhZ2VfY2FjaGVfcmVsZWFzZShvYmotPnBhZ2VzW2ldKTsKKwl9CisKKwlkcm1fZnJlZV9sYXJn ZShvYmotPnBhZ2VzKTsKKwlvYmotPnBhZ2VzID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgdmdl bV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0 IGRybV92Z2VtX2dlbV9vYmplY3QgKnZnZW1fb2JqID0gdG9fdmdlbV9ibyhvYmopOworCisJaWYg KG9iaikKKwkJZHJtX2dlbV9mcmVlX21tYXBfb2Zmc2V0KG9iaik7CisKKwlkcm1fZ2VtX29iamVj dF9yZWxlYXNlKG9iaik7CisKKwlpZiAodmdlbV9vYmotPnBhZ2VzKQorCQl2Z2VtX2dlbV9wdXRf cGFnZXModmdlbV9vYmopOworCisJdmdlbV9vYmotPnBhZ2VzID0gTlVMTDsKKworCWtmcmVlKHZn ZW1fb2JqKTsKK30KKworaW50IHZnZW1fZ2VtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX3ZnZW1fZ2Vt X29iamVjdCAqb2JqKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCWdmcF90 IGdmcG1hc2sgPSBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJOOworCWludCBudW1fcGFnZXMs IGksIHJldCA9IDA7CisKKwludW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsK KworCWlmICghb2JqLT5wYWdlcykgeworCQlvYmotPnBhZ2VzID0gZHJtX21hbGxvY19hYihudW1f cGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJCWlmIChvYmotPnBhZ2VzID09IE5VTEwp CisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwltYXBwaW5nID0g b2JqLT5iYXNlLmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlnZnBt YXNrIHw9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVt X3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCXBhZ2UgPSBzaG1lbV9yZWFk X21hcHBpbmdfcGFnZV9nZnAobWFwcGluZywgaSwgZ2ZwbWFzayk7CisJCWlmIChJU19FUlIocGFn ZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIocGFnZSk7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKwkJ b2JqLT5wYWdlc1tpXSA9IHBhZ2U7CisJfQorCisJcmV0dXJuIHJldDsKKworZXJyX291dDoKKwl2 Z2VtX2dlbV9wdXRfcGFnZXMob2JqKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZn ZW1fZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQg KnZtZikKK3sKKwlzdHJ1Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAqb2JqID0gdG9fdmdlbV9ibyh2 bWEtPnZtX3ByaXZhdGVfZGF0YSk7CisJbG9mZl90IG51bV9wYWdlczsKKwlwZ29mZl90IHBhZ2Vf b2Zmc2V0OworCWludCByZXQ7CisKKwkvKiBXZSBkb24ndCB1c2Ugdm1mLT5wZ29mZiBzaW5jZSB0 aGF0IGhhcyB0aGUgZmFrZSBvZmZzZXQgKi8KKwlwYWdlX29mZnNldCA9ICgodW5zaWduZWQgbG9u Zyl2bWYtPnZpcnR1YWxfYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+CisJCVBBR0VfU0hJRlQ7 CisKKwludW1fcGFnZXMgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKworCWlmIChXQVJO X09OKHBhZ2Vfb2Zmc2V0ID4gbnVtX3BhZ2VzKSkKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsK KworCXJldCA9IHZnZW1fZ2VtX2dldF9wYWdlcyhvYmopOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsICh1bnNpZ25lZCBsb25nKXZtZi0+dmly dHVhbF9hZGRyZXNzLAorCQkJICAgICBvYmotPnBhZ2VzW3BhZ2Vfb2Zmc2V0XSk7CisKKwkvKiBQ cmV0dHkgZHVtYiBoYW5kbGVyIGZvciBub3cgKi8KKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDoK KwljYXNlIC1FUkVTVEFSVFNZUzoKKwljYXNlIC1FSU5UUjoKKwkJcmV0dXJuIFZNX0ZBVUxUX05P UEFHRTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCX0KK30KKworc3Rh dGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2Z2VtX2dlbV92bV9vcHMgPSB7CisJLmZh dWx0ID0gdmdlbV9nZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3Nl ID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKKy8qIGlvY3RscyAqLworCitzdGF0aWMgc3RydWN0 IGRybV9nZW1fb2JqZWN0ICp2Z2VtX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlLAorCQkJCQkgICAgICB1bnNpZ25lZCBp bnQgKmhhbmRsZSwKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBk cm1fdmdlbV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2Jq ZWN0OworCWludCBlcnI7CisKKwlzaXplID0gcm91bmR1cChzaXplLCBQQUdFX1NJWkUpOworCisJ b2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOworCWlmICghb2JqKQorCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWdlbV9vYmplY3QgPSAmb2JqLT5iYXNlOworCisJ aWYgKChlcnIgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRldiwgZ2VtX29iamVjdCwgc2l6ZSkpKQor CQlnb3RvIG91dDsKKworCWlmICgoZXJyID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZzZXQoZ2Vt X29iamVjdCkpKQorCQlnb3RvIG1tYXBfb3V0OworCisJaWYgKChlcnIgPSBkcm1fZ2VtX2hhbmRs ZV9jcmVhdGUoZmlsZSwgZ2VtX29iamVjdCwgaGFuZGxlKSkpCisJCWdvdG8gaGFuZGxlX291dDsK KworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbV9vYmplY3QpOworCisJ cmV0dXJuIGdlbV9vYmplY3Q7CisKK2hhbmRsZV9vdXQ6CisJZHJtX2dlbV9mcmVlX21tYXBfb2Zm c2V0KGdlbV9vYmplY3QpOworCittbWFwX291dDoKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKGdl bV9vYmplY3QpOworCitvdXQ6CisJa2ZyZWUoZ2VtX29iamVjdCk7CisKKwlyZXR1cm4gRVJSX1BU UihlcnIpOworfQorCitzdGF0aWMgaW50IHZnZW1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX21vZGVf Y3JlYXRlX2R1bWIgKmFyZ3MpCit7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqZWN0 OworCXVpbnQ2NF90IHNpemU7CisKKwlzaXplID0gYXJncy0+aGVpZ2h0ICogYXJncy0+d2lkdGgg KiBhcmdzLT5icHA7CisKKwlnZW1fb2JqZWN0ID0gdmdlbV9nZW1fY3JlYXRlKGRldiwgZmlsZSwg JmFyZ3MtPmhhbmRsZSwgc2l6ZSk7CisKKwlpZiAoSVNfRVJSKGdlbV9vYmplY3QpKSB7CisJCURS TV9ERUJVR19EUklWRVIoIm9iamVjdCBjcmVhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRS X0VSUihnZW1fb2JqZWN0KTsKKwl9CisKKwlhcmdzLT5zaXplID0gc2l6ZTsKKwlhcmdzLT5waXRj aCA9IGFyZ3MtPndpZHRoOworCisJRFJNX0RFQlVHX0RSSVZFUigiQ3JlYXRlZCBvYmplY3Qgb2Yg c2l6ZSAlbGxkXG4iLCBzaXplKTsKKworCXJldHVybiAwOworfQorCitpbnQgdmdlbV9nZW1fZHVt Yl9tYXAoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkg ICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90ICpvZmZzZXQpCit7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0ICpvYmo7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxl LCBoYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW9iai0+ZmlscC0+ cHJpdmF0ZV9kYXRhID0gb2JqOworCisJQlVHX09OKCFvYmotPm1hcF9saXN0Lm1hcCk7CisKKwkq b2Zmc2V0ID0gKHVpbnQ2NF90KW9iai0+bWFwX2xpc3QuaGFzaC5rZXkgPDwgUEFHRV9TSElGVDsK KworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB2Z2VtX2lvY3Rsc1tdID0gewor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmdlbV9kcml2ZXJfZm9w cyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZHJtX29wZW4sCisJLm1t YXAJCT0gZHJtX2dlbV9tbWFwLAorCS5wb2xsCQk9IGRybV9wb2xsLAorCS5yZWFkCQk9IGRybV9y ZWFkLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKwkucmVsZWFzZQk9IGRybV9yZWxl YXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHZnZW1fZHJpdmVyID0geworCS5k cml2ZXJfZmVhdHVyZXMJPSBEUklWRVJfQlVTX1BMQVRGT1JNIHwgRFJJVkVSX0dFTSwKKwkubG9h ZAkJCT0gdmdlbV9sb2FkLAorCS51bmxvYWQJCQk9IHZnZW1fdW5sb2FkLAorCS5vcGVuCQkJPSB2 Z2VtX29wZW4sCisJLnByZWNsb3NlCQk9IHZnZW1fcHJlY2xvc2UsCisJLmxhc3RjbG9zZQkJPSB2 Z2VtX2xhc3RjbG9zZSwKKwkuZ2VtX2luaXRfb2JqZWN0CT0gdmdlbV9nZW1faW5pdF9vYmplY3Qs CisJLmdlbV9mcmVlX29iamVjdAk9IHZnZW1fZ2VtX2ZyZWVfb2JqZWN0LAorCS5nZW1fdm1fb3Bz CQk9ICZ2Z2VtX2dlbV92bV9vcHMsCisJLmlvY3RscwkJCT0gdmdlbV9pb2N0bHMsCisJLmZvcHMJ CQk9ICZ2Z2VtX2RyaXZlcl9mb3BzLAorCisJLmR1bWJfY3JlYXRlCQk9IHZnZW1fZ2VtX2R1bWJf Y3JlYXRlLAorCS5kdW1iX21hcF9vZmZzZXQJPSB2Z2VtX2dlbV9kdW1iX21hcCwKKworCS5uYW1l CT0gRFJJVkVSX05BTUUsCisJLmRlc2MJPSBEUklWRVJfREVTQywKKwkuZGF0ZQk9IERSSVZFUl9E QVRFLAorCS5tYWpvcgk9IERSSVZFUl9NQUpPUiwKKwkubWlub3IJPSBEUklWRVJfTUlOT1IsCit9 OworCitzdGF0aWMgaW50IHZnZW1fcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKK3sKKwl2Z2VtX2RyaXZlci5udW1faW9jdGxzID0gRFJNX0FSUkFZX1NJWkUodmdl bV9pb2N0bHMpOworCisJcmV0dXJuIGRybV9wbGF0Zm9ybV9pbml0KCZ2Z2VtX2RyaXZlciwgcGRl dik7Cit9CisKK3N0YXRpYyBpbnQgdmdlbV9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKK3sKKwlkcm1fcGxhdGZvcm1fZXhpdCgmdmdlbV9kcml2ZXIsIHBkZXYp OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZnZW1f cGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZQkJPSB2Z2VtX3BsYXRmb3JtX3Byb2JlLAorCS5y ZW1vdmUJCT0gX19kZXZleGl0X3AodmdlbV9wbGF0Zm9ybV9yZW1vdmUpLAorCS5kcml2ZXIJCT0g eworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAor fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnZnZW1fZGV2aWNlOworCitzdGF0 aWMgaW50IF9faW5pdCB2Z2VtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKChyZXQg PSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZnZW1fcGxhdGZvcm1fZHJpdmVyKSkpCisJCXJl dHVybiByZXQ7CisKKwl2Z2VtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygidmdlbSIs IC0xKTsKKwlpZiAoIXZnZW1fZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0 OworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQodmdlbV9kZXZpY2UpOworCWlmICgh cmV0KQorCQlyZXR1cm4gMDsKKworb3V0OgorCXBsYXRmb3JtX2RldmljZV9wdXQodmdlbV9kZXZp Y2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2Z2VtX3BsYXRmb3JtX2RyaXZlcik7 CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdmdlbV9leGl0KHZvaWQp Cit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodmdlbV9kZXZpY2UpOworCXBsYXRmb3Jt X2RyaXZlcl91bnJlZ2lzdGVyKCZ2Z2VtX3BsYXRmb3JtX2RyaXZlcik7Cit9CisKK21vZHVsZV9p bml0KHZnZW1faW5pdCk7Cittb2R1bGVfZXhpdCh2Z2VtX2V4aXQpOworCitNT0RVTEVfQVVUSE9S KCJSZWQgSGF0LCBJbmMuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMiKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2Vt X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNjNmYTBiCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9kcnYuaApAQCAtMCwwICsx LDU0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoK KyAqICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KKyAqCisgKi8KKworI2lmbmRl ZiBfVkdFTV9EUlZfSF8KKyNkZWZpbmUgX1ZHRU1fRFJWX0hfCisKKyNpbmNsdWRlICJkcm1QLmgi CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGRybV92Z2VtX3ByaXZhdGUgewor CXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIHRvX3ZnZW1fYm8oeCkgY29u dGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fdmdlbV9nZW1fb2JqZWN0LCBiYXNlKQorc3RydWN0IGRy bV92Z2VtX2dlbV9vYmplY3QgeworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOworCXN0cnVj dCBwYWdlICoqcGFnZXM7Cit9OworCitzdHJ1Y3QgZHJtX3ZnZW1fZmlsZV9wcml2YXRlIHsKK307 CisKKy8qIHZnZW1fZHJ2LmMgKi8KK2V4dGVybiB2b2lkIHZnZW1fZ2VtX3B1dF9wYWdlcyhzdHJ1 Y3QgZHJtX3ZnZW1fZ2VtX29iamVjdCAqb2JqKTsKK2V4dGVybiBpbnQgdmdlbV9nZW1fZ2V0X3Bh Z2VzKHN0cnVjdCBkcm1fdmdlbV9nZW1fb2JqZWN0ICpvYmopOworCisvKiB2Z2VtX2RtYV9idWYu YyAqLworCisKKyNlbmRpZgotLSAKMS43LjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwK