From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v2 8/9] xen/gntdev: Implement dma-buf import functionality Date: Fri, 1 Jun 2018 14:41:31 +0300 Message-ID: <20180601114132.22596-9-andr2000@gmail.com> References: <20180601114132.22596-1-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-lf0-x241.google.com (mail-lf0-x241.google.com [IPv6:2a00:1450:4010:c07::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id D95A86E687 for ; Fri, 1 Jun 2018 11:41:53 +0000 (UTC) Received: by mail-lf0-x241.google.com with SMTP id n18-v6so14357333lfh.10 for ; Fri, 01 Jun 2018 04:41:53 -0700 (PDT) In-Reply-To: <20180601114132.22596-1-andr2000@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, daniel.vetter@intel.com, dongwon.kim@intel.com, Oleksandr Andrushchenko List-Id: dri-devel@lists.freedesktop.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKMS4gSW1wb3J0IGEgZG1hLWJ1ZiB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgcHJv dmlkZWQgYW5kIGV4cG9ydAogICBncmFudGVkIHJlZmVyZW5jZXMgdG8gdGhlIHBhZ2VzIG9mIHRo YXQgZG1hLWJ1ZiBpbnRvIHRoZSBhcnJheQogICBvZiBncmFudCByZWZlcmVuY2VzLgoKMi4gQWRk IEFQSSB0byBjbG9zZSBhbGwgcmVmZXJlbmNlcyB0byBhbiBpbXBvcnRlZCBidWZmZXIsIHNvIGl0 IGNhbiBiZQogICByZWxlYXNlZCBieSB0aGUgb3duZXIuIFRoaXMgaXMgb25seSB2YWxpZCBmb3Ig YnVmZmVycyBjcmVhdGVkIHdpdGgKICAgSU9DVExfR05UREVWX0RNQUJVRl9JTVBfVE9fUkVGUy4K ClNpZ25lZC1vZmYtYnk6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVz aGNoZW5rb0BlcGFtLmNvbT4KLS0tCiBkcml2ZXJzL3hlbi9nbnRkZXYtZG1hYnVmLmMgfCAyNDMg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgMjQx IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4v Z250ZGV2LWRtYWJ1Zi5jIGIvZHJpdmVycy94ZW4vZ250ZGV2LWRtYWJ1Zi5jCmluZGV4IGY2MTI0 Njg4NzliNC4uYjU1NjlhMjIwZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRkZXYtZG1h YnVmLmMKKysrIGIvZHJpdmVycy94ZW4vZ250ZGV2LWRtYWJ1Zi5jCkBAIC0xMSw4ICsxMSwyMCBA QAogI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAK KyNpbmNsdWRlIDx4ZW4veGVuLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisKICNp bmNsdWRlICJnbnRkZXYtZG1hYnVmLmgiCiAKKyNpZm5kZWYgR1JBTlRfSU5WQUxJRF9SRUYKKy8q CisgKiBOb3RlIG9uIHVzYWdlIG9mIGdyYW50IHJlZmVyZW5jZSAwIGFzIGludmFsaWQgZ3JhbnQg cmVmZXJlbmNlOgorICogZ3JhbnQgcmVmZXJlbmNlIDAgaXMgdmFsaWQsIGJ1dCBuZXZlciBleHBv c2VkIHRvIGEgZHJpdmVyLAorICogYmVjYXVzZSBvZiB0aGUgZmFjdCBpdCBpcyBhbHJlYWR5IGlu IHVzZS9yZXNlcnZlZCBieSB0aGUgUFYgY29uc29sZS4KKyAqLworI2RlZmluZSBHUkFOVF9JTlZB TElEX1JFRgkwCisjZW5kaWYKKwogc3RydWN0IGdudGRldl9kbWFidWYgewogCXN0cnVjdCBnbnRk ZXZfZG1hYnVmX3ByaXYgKnByaXY7CiAJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKQEAgLTI5LDYg KzQxLDE0IEBAIHN0cnVjdCBnbnRkZXZfZG1hYnVmIHsKIAkJCXZvaWQgKCpyZWxlYXNlKShzdHJ1 Y3QgZ250ZGV2X3ByaXYgKnByaXYsCiAJCQkJCXN0cnVjdCBncmFudF9tYXAgKm1hcCk7CiAJCX0g ZXhwOworCQlzdHJ1Y3QgeworCQkJLyogR3JhbnRlZCByZWZlcmVuY2VzIG9mIHRoZSBpbXBvcnRl ZCBidWZmZXIuICovCisJCQlncmFudF9yZWZfdCAqcmVmczsKKwkJCS8qIFNjYXR0ZXItZ2F0aGVy IHRhYmxlIG9mIHRoZSBpbXBvcnRlZCBidWZmZXIuICovCisJCQlzdHJ1Y3Qgc2dfdGFibGUgKnNn dDsKKwkJCS8qIGRtYS1idWYgYXR0YWNobWVudCBvZiB0aGUgaW1wb3J0ZWQgYnVmZmVyLiAqLwor CQkJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOworCQl9IGltcDsKIAl9IHU7CiAK IAkvKiBOdW1iZXIgb2YgcGFnZXMgdGhpcyBidWZmZXIgaGFzLiAqLwpAQCAtNTMsNiArNzMsOCBA QCBzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV4cF9saXN0 OwogCS8qIExpc3Qgb2Ygd2FpdCBvYmplY3RzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXhwX3dh aXRfbGlzdDsKKwkvKiBMaXN0IG9mIGltcG9ydGVkIERNQSBidWZmZXJzLiAqLworCXN0cnVjdCBs aXN0X2hlYWQgaW1wX2xpc3Q7CiAJLyogVGhpcyBpcyB0aGUgbG9jayB3aGljaCBwcm90ZWN0cyBk bWFfYnVmX3h4eCBsaXN0cy4gKi8KIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CkBAIC00MjQsMjEg KzQ0NiwyMzcgQEAgaW50IGdudGRldl9kbWFidWZfZXhwX2Zyb21fcGFnZXMoc3RydWN0IGdudGRl dl9kbWFidWZfZXhwb3J0X2FyZ3MgKmFyZ3MpCiAvKiBETUEgYnVmZmVyIGltcG9ydCBzdXBwb3J0 LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLwogCitzdGF0aWMgaW50CitkbWFidWZfaW1wX2dyYW50X2ZvcmVpZ25fYWNjZXNzKHN0cnVj dCBwYWdlICoqcGFnZXMsIHUzMiAqcmVmcywKKwkJCQlpbnQgY291bnQsIGludCBkb21pZCkKK3sK KwlncmFudF9yZWZfdCBwcml2X2dyZWZfaGVhZDsKKwlpbnQgaSwgcmV0OworCisJcmV0ID0gZ250 dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoY291bnQsICZwcml2X2dyZWZfaGVhZCk7CisJaWYg KHJldCA8IDApIHsKKwkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgZ3JhbnQgcmVmZXJlbmNlcywg cmV0ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBj b3VudDsgaSsrKSB7CisJCWludCBjdXJfcmVmOworCisJCWN1cl9yZWYgPSBnbnR0YWJfY2xhaW1f Z3JhbnRfcmVmZXJlbmNlKCZwcml2X2dyZWZfaGVhZCk7CisJCWlmIChjdXJfcmVmIDwgMCkgewor CQkJcmV0ID0gY3VyX3JlZjsKKwkJCXByX2VycigiQ2Fubm90IGNsYWltIGdyYW50IHJlZmVyZW5j ZSwgcmV0ICVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlnbnR0YWJfZ3JhbnRf Zm9yZWlnbl9hY2Nlc3NfcmVmKGN1cl9yZWYsIGRvbWlkLAorCQkJCQkJeGVuX3BhZ2VfdG9fZ2Zu KHBhZ2VzW2ldKSwgMCk7CisJCXJlZnNbaV0gPSBjdXJfcmVmOworCX0KKworCXJldCA9IDA7CisK K291dDoKKwlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2VzKHByaXZfZ3JlZl9oZWFkKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfaW1wX2VuZF9mb3JlaWduX2FjY2Vz cyh1MzIgKnJlZnMsIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBj b3VudDsgaSsrKQorCQlpZiAocmVmc1tpXSAhPSBHUkFOVF9JTlZBTElEX1JFRikKKwkJCWdudHRh Yl9lbmRfZm9yZWlnbl9hY2Nlc3MocmVmc1tpXSwgMCwgMFVMKTsKK30KKworc3RhdGljIHZvaWQg ZG1hYnVmX2ltcF9mcmVlX3N0b3JhZ2Uoc3RydWN0IGdudGRldl9kbWFidWYgKmdudGRldl9kbWFi dWYpCit7CisJa2ZyZWUoZ250ZGV2X2RtYWJ1Zi0+cGFnZXMpOworCWtmcmVlKGdudGRldl9kbWFi dWYtPnUuaW1wLnJlZnMpOworCWtmcmVlKGdudGRldl9kbWFidWYpOworfQorCitzdGF0aWMgc3Ry dWN0IGdudGRldl9kbWFidWYgKmRtYWJ1Zl9pbXBfYWxsb2Nfc3RvcmFnZShpbnQgY291bnQpCit7 CisJc3RydWN0IGdudGRldl9kbWFidWYgKmdudGRldl9kbWFidWY7CisJaW50IGk7CisKKwlnbnRk ZXZfZG1hYnVmID0ga3phbGxvYyhzaXplb2YoKmdudGRldl9kbWFidWYpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIWdudGRldl9kbWFidWYpCisJCWdvdG8gZmFpbDsKKworCWdudGRldl9kbWFidWYtPnUu aW1wLnJlZnMgPSBrY2FsbG9jKGNvdW50LAorCQkJCQkgICAgc2l6ZW9mKGdudGRldl9kbWFidWYt PnUuaW1wLnJlZnNbMF0pLAorCQkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFnbnRkZXZfZG1h YnVmLT51LmltcC5yZWZzKQorCQlnb3RvIGZhaWw7CisKKwlnbnRkZXZfZG1hYnVmLT5wYWdlcyA9 IGtjYWxsb2MoY291bnQsCisJCQkJICAgICAgIHNpemVvZihnbnRkZXZfZG1hYnVmLT5wYWdlc1sw XSksCisJCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghZ250ZGV2X2RtYWJ1Zi0+cGFnZXMp CisJCWdvdG8gZmFpbDsKKworCWdudGRldl9kbWFidWYtPm5yX3BhZ2VzID0gY291bnQ7CisKKwlm b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJZ250ZGV2X2RtYWJ1Zi0+dS5pbXAucmVmc1tp XSA9IEdSQU5UX0lOVkFMSURfUkVGOworCisJcmV0dXJuIGdudGRldl9kbWFidWY7CisKK2ZhaWw6 CisJZG1hYnVmX2ltcF9mcmVlX3N0b3JhZ2UoZ250ZGV2X2RtYWJ1Zik7CisJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cit9CisKIHN0cnVjdCBnbnRkZXZfZG1hYnVmICoKIGdudGRldl9kbWFidWZf aW1wX3RvX3JlZnMoc3RydWN0IGdudGRldl9kbWFidWZfcHJpdiAqcHJpdiwgc3RydWN0IGRldmlj ZSAqZGV2LAogCQkJICBpbnQgZmQsIGludCBjb3VudCwgaW50IGRvbWlkKQogewotCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZfZG1hYnVmLCAq cmV0OworCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOworCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaDsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlzdHJ1Y3Qgc2dfcGFnZV9pdGVy IHNnX2l0ZXI7CisJaW50IGk7CisKKwlkbWFfYnVmID0gZG1hX2J1Zl9nZXQoZmQpOworCWlmIChJ U19FUlIoZG1hX2J1ZikpCisJCXJldHVybiBFUlJfQ0FTVChkbWFfYnVmKTsKKworCWdudGRldl9k bWFidWYgPSBkbWFidWZfaW1wX2FsbG9jX3N0b3JhZ2UoY291bnQpOworCWlmIChJU19FUlIoZ250 ZGV2X2RtYWJ1ZikpIHsKKwkJcmV0ID0gZ250ZGV2X2RtYWJ1ZjsKKwkJZ290byBmYWlsX3B1dDsK K30KKworCWdudGRldl9kbWFidWYtPnByaXYgPSBwcml2OworCWdudGRldl9kbWFidWYtPmZkID0g ZmQ7CisKKwlhdHRhY2ggPSBkbWFfYnVmX2F0dGFjaChkbWFfYnVmLCBkZXYpOworCWlmIChJU19F UlIoYXR0YWNoKSkgeworCQlyZXQgPSBFUlJfQ0FTVChhdHRhY2gpOworCQlnb3RvIGZhaWxfZnJl ZV9vYmo7CisJfQorCisJZ250ZGV2X2RtYWJ1Zi0+dS5pbXAuYXR0YWNoID0gYXR0YWNoOworCisJ c2d0ID0gZG1hX2J1Zl9tYXBfYXR0YWNobWVudChhdHRhY2gsIERNQV9CSURJUkVDVElPTkFMKTsK KwlpZiAoSVNfRVJSKHNndCkpIHsKKwkJcmV0ID0gRVJSX0NBU1Qoc2d0KTsKKwkJZ290byBmYWls X2RldGFjaDsKKwl9CisKKwkvKiBDaGVjayBudW1iZXIgb2YgcGFnZXMgdGhhdCBpbXBvcnRlZCBi dWZmZXIgaGFzLiAqLworCWlmIChhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSAhPSBnbnRkZXZfZG1hYnVm LT5ucl9wYWdlcyA8PCBQQUdFX1NISUZUKSB7CisJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CisJ CXByX2VycigiRE1BIGJ1ZmZlciBoYXMgJXp1IHBhZ2VzLCB1c2VyLXNwYWNlIGV4cGVjdHMgJWRc biIsCisJCSAgICAgICBhdHRhY2gtPmRtYWJ1Zi0+c2l6ZSwgZ250ZGV2X2RtYWJ1Zi0+bnJfcGFn ZXMpOworCQlnb3RvIGZhaWxfdW5tYXA7CisJfQorCisJZ250ZGV2X2RtYWJ1Zi0+dS5pbXAuc2d0 ID0gc2d0OworCisJLyogTm93IGNvbnZlcnQgc2d0IHRvIGFycmF5IG9mIHBhZ2VzIGFuZCBjaGVj ayBmb3IgcGFnZSB2YWxpZGl0eS4gKi8KKwlpID0gMDsKKwlmb3JfZWFjaF9zZ19wYWdlKHNndC0+ c2dsLCAmc2dfaXRlciwgc2d0LT5uZW50cywgMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNn X3BhZ2VfaXRlcl9wYWdlKCZzZ19pdGVyKTsKKwkJLyoKKwkJICogQ2hlY2sgaWYgcGFnZSBpcyB2 YWxpZDogdGhpcyBjYW4gaGFwcGVuIGlmIHdlIGFyZSBnaXZlbgorCQkgKiBhIHBhZ2UgZnJvbSBW UkFNIG9yIG90aGVyIHJlc291cmNlcyB3aGljaCBhcmUgbm90IGJhY2tlZAorCQkgKiBieSBhIHN0 cnVjdCBwYWdlLgorCQkgKi8KKwkJaWYgKCFwZm5fdmFsaWQocGFnZV90b19wZm4ocGFnZSkpKSB7 CisJCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOworCQkJZ290byBmYWlsX3VubWFwOworCQl9CisK KwkJZ250ZGV2X2RtYWJ1Zi0+cGFnZXNbaSsrXSA9IHBhZ2U7CisJfQorCisJcmV0ID0gRVJSX1BU UihkbWFidWZfaW1wX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGdudGRldl9kbWFidWYtPnBhZ2VzLAor CQkJCQkJICAgICAgZ250ZGV2X2RtYWJ1Zi0+dS5pbXAucmVmcywKKwkJCQkJCSAgICAgIGNvdW50 LCBkb21pZCkpOworCWlmIChJU19FUlIocmV0KSkKKwkJZ290byBmYWlsX2VuZF9hY2Nlc3M7CisK Kwlwcl9kZWJ1ZygiSW1wb3J0ZWQgRE1BIGJ1ZmZlciB3aXRoIGZkICVkXG4iLCBmZCk7CisKKwlt dXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlsaXN0X2FkZCgmZ250ZGV2X2RtYWJ1Zi0+bmV4dCwg JnByaXYtPmltcF9saXN0KTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOworCisJcmV0dXJu IGdudGRldl9kbWFidWY7CisKK2ZhaWxfZW5kX2FjY2VzczoKKwlkbWFidWZfaW1wX2VuZF9mb3Jl aWduX2FjY2VzcyhnbnRkZXZfZG1hYnVmLT51LmltcC5yZWZzLCBjb3VudCk7CitmYWlsX3VubWFw OgorCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChhdHRhY2gsIHNndCwgRE1BX0JJRElSRUNUSU9O QUwpOworZmFpbF9kZXRhY2g6CisJZG1hX2J1Zl9kZXRhY2goZG1hX2J1ZiwgYXR0YWNoKTsKK2Zh aWxfZnJlZV9vYmo6CisJZG1hYnVmX2ltcF9mcmVlX3N0b3JhZ2UoZ250ZGV2X2RtYWJ1Zik7Citm YWlsX3B1dDoKKwlkbWFfYnVmX3B1dChkbWFfYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiB1MzIg KmdudGRldl9kbWFidWZfaW1wX2dldF9yZWZzKHN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZf ZG1hYnVmKQogeworCWlmIChnbnRkZXZfZG1hYnVmKQorCQlyZXR1cm4gZ250ZGV2X2RtYWJ1Zi0+ dS5pbXAucmVmczsKKwogCXJldHVybiBOVUxMOwogfQogCisvKgorICogRmluZCB0aGUgaHlwZXIg ZG1hLWJ1ZiBieSBpdHMgZmlsZSBkZXNjcmlwdG9yIGFuZCByZW1vdmUKKyAqIGl0IGZyb20gdGhl IGJ1ZmZlcidzIGxpc3QuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqCitkbWFi dWZfaW1wX2ZpbmRfdW5saW5rKHN0cnVjdCBnbnRkZXZfZG1hYnVmX3ByaXYgKnByaXYsIGludCBm ZCkKK3sKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqcSwgKmdudGRldl9kbWFidWYsICpyZXQgPSBF UlJfUFRSKC1FTk9FTlQpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CisJbGlzdF9mb3Jf ZWFjaF9lbnRyeV9zYWZlKGdudGRldl9kbWFidWYsIHEsICZwcml2LT5pbXBfbGlzdCwgbmV4dCkg eworCQlpZiAoZ250ZGV2X2RtYWJ1Zi0+ZmQgPT0gZmQpIHsKKwkJCXByX2RlYnVnKCJGb3VuZCBn bnRkZXZfZG1hYnVmIGluIHRoZSBpbXBvcnQgbGlzdFxuIik7CisJCQlyZXQgPSBnbnRkZXZfZG1h YnVmOworCQkJbGlzdF9kZWwoJmdudGRldl9kbWFidWYtPm5leHQpOworCQkJYnJlYWs7CisJCX0K Kwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiBpbnQg Z250ZGV2X2RtYWJ1Zl9pbXBfcmVsZWFzZShzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2ICpwcml2 LCB1MzIgZmQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGdudGRldl9kbWFidWYgKmdu dGRldl9kbWFidWY7CisJc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOworCXN0cnVj dCBkbWFfYnVmICpkbWFfYnVmOworCisJZ250ZGV2X2RtYWJ1ZiA9IGRtYWJ1Zl9pbXBfZmluZF91 bmxpbmsocHJpdiwgZmQpOworCWlmIChJU19FUlIoZ250ZGV2X2RtYWJ1ZikpCisJCXJldHVybiBQ VFJfRVJSKGdudGRldl9kbWFidWYpOworCisJcHJfZGVidWcoIlJlbGVhc2luZyBETUEgYnVmZmVy IHdpdGggZmQgJWRcbiIsIGZkKTsKKworCWF0dGFjaCA9IGdudGRldl9kbWFidWYtPnUuaW1wLmF0 dGFjaDsKKworCWlmIChnbnRkZXZfZG1hYnVmLT51LmltcC5zZ3QpCisJCWRtYV9idWZfdW5tYXBf YXR0YWNobWVudChhdHRhY2gsIGdudGRldl9kbWFidWYtPnUuaW1wLnNndCwKKwkJCQkJIERNQV9C SURJUkVDVElPTkFMKTsKKwlkbWFfYnVmID0gYXR0YWNoLT5kbWFidWY7CisJZG1hX2J1Zl9kZXRh Y2goYXR0YWNoLT5kbWFidWYsIGF0dGFjaCk7CisJZG1hX2J1Zl9wdXQoZG1hX2J1Zik7CisKKwlk bWFidWZfaW1wX2VuZF9mb3JlaWduX2FjY2VzcyhnbnRkZXZfZG1hYnVmLT51LmltcC5yZWZzLAor CQkJCSAgICAgIGdudGRldl9kbWFidWYtPm5yX3BhZ2VzKTsKKwlkbWFidWZfaW1wX2ZyZWVfc3Rv cmFnZShnbnRkZXZfZG1hYnVmKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGdudGRldl9kbWFi dWZfcHJpdiAqZ250ZGV2X2RtYWJ1Zl9pbml0KHZvaWQpCkBAIC00NTIsNiArNjkwLDcgQEAgc3Ry dWN0IGdudGRldl9kbWFidWZfcHJpdiAqZ250ZGV2X2RtYWJ1Zl9pbml0KHZvaWQpCiAJbXV0ZXhf aW5pdCgmcHJpdi0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmV4cF9saXN0KTsKIAlJ TklUX0xJU1RfSEVBRCgmcHJpdi0+ZXhwX3dhaXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBy aXYtPmltcF9saXN0KTsKIAogCXJldHVybiBwcml2OwogfQotLSAKMi4xNy4wCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBs aXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK