From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v5 7/8] xen/gntdev: Implement dma-buf export functionality Date: Fri, 20 Jul 2018 12:01:49 +0300 Message-ID: <20180720090150.24560-8-andr2000__31614.3551063307$1532077257$gmane$org@gmail.com> References: <20180720090150.24560-1-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fgRIi-0001hF-OQ for xen-devel@lists.xenproject.org; Fri, 20 Jul 2018 09:02:12 +0000 Received: by mail-lf1-x144.google.com with SMTP id a4-v6so1290937lff.5 for ; Fri, 20 Jul 2018 02:02:10 -0700 (PDT) In-Reply-To: <20180720090150.24560-1-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-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, matthew.d.roper@intel.com, dongwon.kim@intel.com, Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKMS4gQ3JlYXRlIGEgZG1hLWJ1ZiBmcm9tIGdyYW50IHJlZmVyZW5jZXMgcHJvdmlk ZWQgYnkgdGhlIGZvcmVpZ24KICAgZG9tYWluLiBCeSBkZWZhdWx0IGRtYS1idWYgaXMgYmFja2Vk IGJ5IHN5c3RlbSBtZW1vcnkgcGFnZXMsIGJ1dAogICBieSBwcm92aWRpbmcgR05UREVWX0RNQV9G TEFHX1hYWCBmbGFncyBpdCBjYW4gYWxzbyBiZSBjcmVhdGVkCiAgIGFzIGEgRE1BIHdyaXRlLWNv bWJpbmUvY29oZXJlbnQgYnVmZmVyLCBlLmcuIGFsbG9jYXRlZCB3aXRoCiAgIGNvcnJlc3BvbmRp bmcgZG1hX2FsbG9jX3h4eCBBUEkuCiAgIEV4cG9ydCB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBhcyBh IG5ldyBkbWEtYnVmLgoKMi4gSW1wbGVtZW50IHdhaXRpbmcgZm9yIHRoZSBkbWEtYnVmIHRvIGJl IHJlbGVhc2VkOiBibG9jayB1bnRpbCB0aGUKICAgZG1hLWJ1ZiB3aXRoIHRoZSBmaWxlIGRlc2Ny aXB0b3IgcHJvdmlkZWQgaXMgcmVsZWFzZWQuCiAgIElmIHdpdGhpbiB0aGUgdGltZS1vdXQgcHJv dmlkZWQgdGhlIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQgdGhlbgogICAtRVRJTUVET1VUIGVycm9y IGlzIHJldHVybmVkLiBJZiB0aGUgYnVmZmVyIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvcgogICBk b2VzIG5vdCBleGlzdCBvciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLCB0aGVuIC1FTk9FTlQg aXMKICAgcmV0dXJuZWQuIEZvciB2YWxpZCBmaWxlIGRlc2NyaXB0b3JzIHRoaXMgbXVzdCBub3Qg YmUgdHJlYXRlZCBhcwogICBlcnJvci4KCjMuIE1ha2UgZ250ZGV2J3MgY29tbW9uIGNvZGUgYW5k IHN0cnVjdHVyZXMgYXZhaWxhYmxlIHRvIGRtYS1idWYuCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+ClJldmll d2VkLWJ5OiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29tPgotLS0K IGRyaXZlcnMveGVuL2dudGRldi1kbWFidWYuYyB8IDQ1NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA0NTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9nbnRkZXYtZG1hYnVmLmMgYi9kcml2 ZXJzL3hlbi9nbnRkZXYtZG1hYnVmLmMKaW5kZXggYWY3ODJjMGE4YTE5Li5jYzRmMTZjODE5MTkg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2dudGRldi1kbWFidWYuYworKysgYi9kcml2ZXJzL3hl bi9nbnRkZXYtZG1hYnVmLmMKQEAgLTMsMTEgKzMsMTQgQEAKIC8qCiAgKiBYZW4gZG1hLWJ1ZiBm dW5jdGlvbmFsaXR5IGZvciBnbnRkZXYuCiAgKgorICogRE1BIGJ1ZmZlciBpbXBsZW1lbnRhdGlv biBpcyBiYXNlZCBvbiBkcml2ZXJzL2dwdS9kcm0vZHJtX3ByaW1lLmMuCisgKgogICogQ29weXJp Z2h0IChjKSAyMDE4IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvLCBFUEFNIFN5c3RlbXMgSW5jLgog ICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5o PgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC0x OCw2ICsyMSwzOSBAQAogI2luY2x1ZGUgImdudGRldi1jb21tb24uaCIKICNpbmNsdWRlICJnbnRk ZXYtZG1hYnVmLmgiCiAKK3N0cnVjdCBnbnRkZXZfZG1hYnVmIHsKKwlzdHJ1Y3QgZ250ZGV2X2Rt YWJ1Zl9wcml2ICpwcml2OworCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisJc3RydWN0IGxpc3Rf aGVhZCBuZXh0OworCWludCBmZDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCS8qIEV4cG9y dGVkIGJ1ZmZlcnMgYXJlIHJlZmVyZW5jZSBjb3VudGVkLiAqLworCQkJc3RydWN0IGtyZWYgcmVm Y291bnQ7CisKKwkJCXN0cnVjdCBnbnRkZXZfcHJpdiAqcHJpdjsKKwkJCXN0cnVjdCBnbnRkZXZf Z3JhbnRfbWFwICptYXA7CisJCX0gZXhwOworCX0gdTsKKworCS8qIE51bWJlciBvZiBwYWdlcyB0 aGlzIGJ1ZmZlciBoYXMuICovCisJaW50IG5yX3BhZ2VzOworCS8qIFBhZ2VzIG9mIHRoaXMgYnVm ZmVyLiAqLworCXN0cnVjdCBwYWdlICoqcGFnZXM7Cit9OworCitzdHJ1Y3QgZ250ZGV2X2RtYWJ1 Zl93YWl0X29iaiB7CisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworCXN0cnVjdCBnbnRkZXZfZG1h YnVmICpnbnRkZXZfZG1hYnVmOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Cit9Owor CitzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9hdHRhY2htZW50IHsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNn dDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7Cit9OworCiBzdHJ1Y3QgZ250ZGV2X2Rt YWJ1Zl9wcml2IHsKIAkvKiBMaXN0IG9mIGV4cG9ydGVkIERNQSBidWZmZXJzLiAqLwogCXN0cnVj dCBsaXN0X2hlYWQgZXhwX2xpc3Q7CkBAIC0zMSwxNyArNjcsNDI2IEBAIHN0cnVjdCBnbnRkZXZf ZG1hYnVmX3ByaXYgewogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiB3YWl0IGZvciBleHBvcnRlZCBE TUEgYnVmZmVyIHRvIGJlIHJlbGVhc2VkLiAqLwogCitzdGF0aWMgdm9pZCBkbWFidWZfZXhwX3Jl bGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpOworCitzdGF0aWMgc3RydWN0IGdudGRldl9kbWFidWZf d2FpdF9vYmogKgorZG1hYnVmX2V4cF93YWl0X29ial9uZXcoc3RydWN0IGdudGRldl9kbWFidWZf cHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZfZG1hYnVmKQorewor CXN0cnVjdCBnbnRkZXZfZG1hYnVmX3dhaXRfb2JqICpvYmo7CisKKwlvYmogPSBremFsbG9jKHNp emVvZigqb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1F Tk9NRU0pOworCisJaW5pdF9jb21wbGV0aW9uKCZvYmotPmNvbXBsZXRpb24pOworCW9iai0+Z250 ZGV2X2RtYWJ1ZiA9IGdudGRldl9kbWFidWY7CisKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsK KwlsaXN0X2FkZCgmb2JqLT5uZXh0LCAmcHJpdi0+ZXhwX3dhaXRfbGlzdCk7CisJLyogUHV0IG91 ciByZWZlcmVuY2UgYW5kIHdhaXQgZm9yIGdudGRldl9kbWFidWYncyByZWxlYXNlIHRvIGZpcmUu ICovCisJa3JlZl9wdXQoJmdudGRldl9kbWFidWYtPnUuZXhwLnJlZmNvdW50LCBkbWFidWZfZXhw X3JlbGVhc2UpOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIG9iajsKK30K Kworc3RhdGljIHZvaWQgZG1hYnVmX2V4cF93YWl0X29ial9mcmVlKHN0cnVjdCBnbnRkZXZfZG1h YnVmX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl93YWl0X29iaiAq b2JqKQoreworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOworCWxpc3RfZGVsKCZvYmotPm5leHQp OworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJa2ZyZWUob2JqKTsKK30KKworc3RhdGlj IGludCBkbWFidWZfZXhwX3dhaXRfb2JqX3dhaXQoc3RydWN0IGdudGRldl9kbWFidWZfd2FpdF9v YmogKm9iaiwKKwkJCQkgICAgdTMyIHdhaXRfdG9fbXMpCit7CisJaWYgKHdhaXRfZm9yX2NvbXBs ZXRpb25fdGltZW91dCgmb2JqLT5jb21wbGV0aW9uLAorCQkJbXNlY3NfdG9famlmZmllcyh3YWl0 X3RvX21zKSkgPD0gMCkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgZG1hYnVmX2V4cF93YWl0X29ial9zaWduYWwoc3RydWN0IGdudGRldl9kbWFi dWZfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgc3RydWN0IGdudGRldl9kbWFidWYgKmdudGRldl9k bWFidWYpCit7CisJc3RydWN0IGdudGRldl9kbWFidWZfd2FpdF9vYmogKm9iajsKKworCWxpc3Rf Zm9yX2VhY2hfZW50cnkob2JqLCAmcHJpdi0+ZXhwX3dhaXRfbGlzdCwgbmV4dCkKKwkJaWYgKG9i ai0+Z250ZGV2X2RtYWJ1ZiA9PSBnbnRkZXZfZG1hYnVmKSB7CisJCQlwcl9kZWJ1ZygiRm91bmQg Z250ZGV2X2RtYWJ1ZiBpbiB0aGUgd2FpdCBsaXN0LCB3YWtlXG4iKTsKKwkJCWNvbXBsZXRlX2Fs bCgmb2JqLT5jb21wbGV0aW9uKTsKKwkJCWJyZWFrOworCQl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg Z250ZGV2X2RtYWJ1ZiAqCitkbWFidWZfZXhwX3dhaXRfb2JqX2dldF9kbWFidWYoc3RydWN0IGdu dGRldl9kbWFidWZfcHJpdiAqcHJpdiwgaW50IGZkKQoreworCXN0cnVjdCBnbnRkZXZfZG1hYnVm ICpnbnRkZXZfZG1hYnVmLCAqcmV0ID0gRVJSX1BUUigtRU5PRU5UKTsKKworCW11dGV4X2xvY2so JnByaXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ250ZGV2X2RtYWJ1ZiwgJnByaXYt PmV4cF9saXN0LCBuZXh0KQorCQlpZiAoZ250ZGV2X2RtYWJ1Zi0+ZmQgPT0gZmQpIHsKKwkJCXBy X2RlYnVnKCJGb3VuZCBnbnRkZXZfZG1hYnVmIGluIHRoZSB3YWl0IGxpc3RcbiIpOworCQkJa3Jl Zl9nZXQoJmdudGRldl9kbWFidWYtPnUuZXhwLnJlZmNvdW50KTsKKwkJCXJldCA9IGdudGRldl9k bWFidWY7CisJCQlicmVhazsKKwkJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0 dXJuIHJldDsKK30KKwogc3RhdGljIGludCBkbWFidWZfZXhwX3dhaXRfcmVsZWFzZWQoc3RydWN0 IGdudGRldl9kbWFidWZfcHJpdiAqcHJpdiwgaW50IGZkLAogCQkJCSAgICBpbnQgd2FpdF90b19t cykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqZ250ZGV2X2Rt YWJ1ZjsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl93YWl0X29iaiAqb2JqOworCWludCByZXQ7CisK Kwlwcl9kZWJ1ZygiV2lsbCB3YWl0IGZvciBkbWEtYnVmIHdpdGggZmQgJWRcbiIsIGZkKTsKKwkv KgorCSAqIFRyeSB0byBmaW5kIHRoZSBETUEgYnVmZmVyOiBpZiBub3QgZm91bmQgbWVhbnMgdGhh dAorCSAqIGVpdGhlciB0aGUgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQgb3IgZmls ZSBkZXNjcmlwdG9yCisJICogcHJvdmlkZWQgaXMgd3JvbmcuCisJICovCisJZ250ZGV2X2RtYWJ1 ZiA9IGRtYWJ1Zl9leHBfd2FpdF9vYmpfZ2V0X2RtYWJ1Zihwcml2LCBmZCk7CisJaWYgKElTX0VS UihnbnRkZXZfZG1hYnVmKSkKKwkJcmV0dXJuIFBUUl9FUlIoZ250ZGV2X2RtYWJ1Zik7CisKKwkv KgorCSAqIGdudGRldl9kbWFidWYgc3RpbGwgZXhpc3RzIGFuZCBpcyByZWZlcmVuY2UgY291bnQg bG9ja2VkIGJ5IHVzIG5vdywKKwkgKiBzbyBwcmVwYXJlIHRvIHdhaXQ6IGFsbG9jYXRlIHdhaXQg b2JqZWN0IGFuZCBhZGQgaXQgdG8gdGhlIHdhaXQgbGlzdCwKKwkgKiBzbyB3ZSBjYW4gZmluZCBp dCBvbiByZWxlYXNlLgorCSAqLworCW9iaiA9IGRtYWJ1Zl9leHBfd2FpdF9vYmpfbmV3KHByaXYs IGdudGRldl9kbWFidWYpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2Jq KTsKKworCXJldCA9IGRtYWJ1Zl9leHBfd2FpdF9vYmpfd2FpdChvYmosIHdhaXRfdG9fbXMpOwor CWRtYWJ1Zl9leHBfd2FpdF9vYmpfZnJlZShwcml2LCBvYmopOworCXJldHVybiByZXQ7Cit9CisK Ky8qIERNQSBidWZmZXIgZXhwb3J0IHN1cHBvcnQuICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFi bGUgKgorZG1hYnVmX3BhZ2VzX3RvX3NndChzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBp bnQgbnJfcGFnZXMpCit7CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisJaW50IHJldDsKKworCXNn dCA9IGttYWxsb2Moc2l6ZW9mKCpzZ3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNndCkgeworCQly ZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzZ19hbGxvY190YWJsZV9m cm9tX3BhZ2VzKHNndCwgcGFnZXMsIG5yX3BhZ2VzLCAwLAorCQkJCQlucl9wYWdlcyA8PCBQQUdF X1NISUZULAorCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJl dHVybiBzZ3Q7CisKK291dDoKKwlrZnJlZShzZ3QpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9 CisKK3N0YXRpYyBpbnQgZG1hYnVmX2V4cF9vcHNfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFf YnVmLAorCQkJCSBzdHJ1Y3QgZGV2aWNlICp0YXJnZXRfZGV2LAorCQkJCSBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gpCit7CisJc3RydWN0IGdudGRldl9kbWFidWZfYXR0YWNobWVu dCAqZ250ZGV2X2RtYWJ1Zl9hdHRhY2g7CisKKwlnbnRkZXZfZG1hYnVmX2F0dGFjaCA9IGt6YWxs b2Moc2l6ZW9mKCpnbnRkZXZfZG1hYnVmX2F0dGFjaCksCisJCQkJICAgICAgIEdGUF9LRVJORUwp OworCWlmICghZ250ZGV2X2RtYWJ1Zl9hdHRhY2gpCisJCXJldHVybiAtRU5PTUVNOworCisJZ250 ZGV2X2RtYWJ1Zl9hdHRhY2gtPmRpciA9IERNQV9OT05FOworCWF0dGFjaC0+cHJpdiA9IGdudGRl dl9kbWFidWZfYXR0YWNoOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfZXhw X29wc19kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkJICBzdHJ1Y3QgZG1hX2J1 Zl9hdHRhY2htZW50ICphdHRhY2gpCit7CisJc3RydWN0IGdudGRldl9kbWFidWZfYXR0YWNobWVu dCAqZ250ZGV2X2RtYWJ1Zl9hdHRhY2ggPSBhdHRhY2gtPnByaXY7CisKKwlpZiAoZ250ZGV2X2Rt YWJ1Zl9hdHRhY2gpIHsKKwkJc3RydWN0IHNnX3RhYmxlICpzZ3QgPSBnbnRkZXZfZG1hYnVmX2F0 dGFjaC0+c2d0OworCisJCWlmIChzZ3QpIHsKKwkJCWlmIChnbnRkZXZfZG1hYnVmX2F0dGFjaC0+ ZGlyICE9IERNQV9OT05FKQorCQkJCWRtYV91bm1hcF9zZ19hdHRycyhhdHRhY2gtPmRldiwgc2d0 LT5zZ2wsCisJCQkJCQkgICBzZ3QtPm5lbnRzLAorCQkJCQkJICAgZ250ZGV2X2RtYWJ1Zl9hdHRh Y2gtPmRpciwKKwkJCQkJCSAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpOworCQkJc2dfZnJlZV90 YWJsZShzZ3QpOworCQl9CisKKwkJa2ZyZWUoc2d0KTsKKwkJa2ZyZWUoZ250ZGV2X2RtYWJ1Zl9h dHRhY2gpOworCQlhdHRhY2gtPnByaXYgPSBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCBz Z190YWJsZSAqCitkbWFidWZfZXhwX29wc19tYXBfZG1hX2J1ZihzdHJ1Y3QgZG1hX2J1Zl9hdHRh Y2htZW50ICphdHRhY2gsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJ c3RydWN0IGdudGRldl9kbWFidWZfYXR0YWNobWVudCAqZ250ZGV2X2RtYWJ1Zl9hdHRhY2ggPSBh dHRhY2gtPnByaXY7CisJc3RydWN0IGdudGRldl9kbWFidWYgKmdudGRldl9kbWFidWYgPSBhdHRh Y2gtPmRtYWJ1Zi0+cHJpdjsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKworCXByX2RlYnVnKCJN YXBwaW5nICVkIHBhZ2VzIGZvciBkZXYgJXBcbiIsIGdudGRldl9kbWFidWYtPm5yX3BhZ2VzLAor CQkgYXR0YWNoLT5kZXYpOworCisJaWYgKGRpciA9PSBETUFfTk9ORSB8fCAhZ250ZGV2X2RtYWJ1 Zl9hdHRhY2gpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogUmV0dXJuIHRoZSBj YWNoZWQgbWFwcGluZyB3aGVuIHBvc3NpYmxlLiAqLworCWlmIChnbnRkZXZfZG1hYnVmX2F0dGFj aC0+ZGlyID09IGRpcikKKwkJcmV0dXJuIGdudGRldl9kbWFidWZfYXR0YWNoLT5zZ3Q7CisKKwkv KgorCSAqIFR3byBtYXBwaW5ncyB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb25zIGZvciB0aGUgc2Ft ZSBhdHRhY2htZW50IGFyZQorCSAqIG5vdCBhbGxvd2VkLgorCSAqLworCWlmIChnbnRkZXZfZG1h YnVmX2F0dGFjaC0+ZGlyICE9IERNQV9OT05FKQorCQlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOwor CisJc2d0ID0gZG1hYnVmX3BhZ2VzX3RvX3NndChnbnRkZXZfZG1hYnVmLT5wYWdlcywKKwkJCQkg IGdudGRldl9kbWFidWYtPm5yX3BhZ2VzKTsKKwlpZiAoIUlTX0VSUihzZ3QpKSB7CisJCWlmICgh ZG1hX21hcF9zZ19hdHRycyhhdHRhY2gtPmRldiwgc2d0LT5zZ2wsIHNndC0+bmVudHMsIGRpciwK KwkJCQkgICAgICBETUFfQVRUUl9TS0lQX0NQVV9TWU5DKSkgeworCQkJc2dfZnJlZV90YWJsZShz Z3QpOworCQkJa2ZyZWUoc2d0KTsKKwkJCXNndCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCX0gZWxz ZSB7CisJCQlnbnRkZXZfZG1hYnVmX2F0dGFjaC0+c2d0ID0gc2d0OworCQkJZ250ZGV2X2RtYWJ1 Zl9hdHRhY2gtPmRpciA9IGRpcjsKKwkJfQorCX0KKwlpZiAoSVNfRVJSKHNndCkpCisJCXByX2Rl YnVnKCJGYWlsZWQgdG8gbWFwIHNnIHRhYmxlIGZvciBkZXYgJXBcbiIsIGF0dGFjaC0+ZGV2KTsK KwlyZXR1cm4gc2d0OworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfZXhwX29wc191bm1hcF9kbWFf YnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwkJCQkJIHN0cnVjdCBzZ190 YWJsZSAqc2d0LAorCQkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCS8qIE5v dCBpbXBsZW1lbnRlZC4gVGhlIHVubWFwIGlzIGRvbmUgYXQgZG1hYnVmX2V4cF9vcHNfZGV0YWNo KCkuICovCit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBfcmVsZWFzZShzdHJ1Y3Qga3JlZiAq a3JlZikKK3sKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqZ250ZGV2X2RtYWJ1ZiA9CisJCWNvbnRh aW5lcl9vZihrcmVmLCBzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiwgdS5leHAucmVmY291bnQpOworCisJ ZG1hYnVmX2V4cF93YWl0X29ial9zaWduYWwoZ250ZGV2X2RtYWJ1Zi0+cHJpdiwgZ250ZGV2X2Rt YWJ1Zik7CisJbGlzdF9kZWwoJmdudGRldl9kbWFidWYtPm5leHQpOworCWtmcmVlKGdudGRldl9k bWFidWYpOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfZXhwX3JlbW92ZV9tYXAoc3RydWN0IGdu dGRldl9wcml2ICpwcml2LAorCQkJCSAgc3RydWN0IGdudGRldl9ncmFudF9tYXAgKm1hcCkKK3sK KwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlsaXN0X2RlbCgmbWFwLT5uZXh0KTsKKwlnbnRk ZXZfcHV0X21hcChOVUxMIC8qIGFscmVhZHkgcmVtb3ZlZCAqLywgbWFwKTsKKwltdXRleF91bmxv Y2soJnByaXYtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZfZXhwX29wc19yZWxlYXNl KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQoreworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRk ZXZfZG1hYnVmID0gZG1hX2J1Zi0+cHJpdjsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2ICpw cml2ID0gZ250ZGV2X2RtYWJ1Zi0+cHJpdjsKKworCWRtYWJ1Zl9leHBfcmVtb3ZlX21hcChnbnRk ZXZfZG1hYnVmLT51LmV4cC5wcml2LAorCQkJICAgICAgZ250ZGV2X2RtYWJ1Zi0+dS5leHAubWFw KTsKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlrcmVmX3B1dCgmZ250ZGV2X2RtYWJ1Zi0+ dS5leHAucmVmY291bnQsIGRtYWJ1Zl9leHBfcmVsZWFzZSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2 LT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgKmRtYWJ1Zl9leHBfb3BzX2ttYXAoc3RydWN0IGRt YV9idWYgKmRtYV9idWYsCisJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0pCit7CisJLyogTm90 IGltcGxlbWVudGVkLiAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkbWFidWZf ZXhwX29wc19rdW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkJICB1bnNpZ25lZCBs b25nIHBhZ2VfbnVtLCB2b2lkICphZGRyKQoreworCS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8KK30K Kworc3RhdGljIGludCBkbWFidWZfZXhwX29wc19tbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVm LAorCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCS8qIE5vdCBpbXBs ZW1lbnRlZC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVm X29wcyBkbWFidWZfZXhwX29wcyA9ICB7CisJLmF0dGFjaCA9IGRtYWJ1Zl9leHBfb3BzX2F0dGFj aCwKKwkuZGV0YWNoID0gZG1hYnVmX2V4cF9vcHNfZGV0YWNoLAorCS5tYXBfZG1hX2J1ZiA9IGRt YWJ1Zl9leHBfb3BzX21hcF9kbWFfYnVmLAorCS51bm1hcF9kbWFfYnVmID0gZG1hYnVmX2V4cF9v cHNfdW5tYXBfZG1hX2J1ZiwKKwkucmVsZWFzZSA9IGRtYWJ1Zl9leHBfb3BzX3JlbGVhc2UsCisJ Lm1hcCA9IGRtYWJ1Zl9leHBfb3BzX2ttYXAsCisJLnVubWFwID0gZG1hYnVmX2V4cF9vcHNfa3Vu bWFwLAorCS5tbWFwID0gZG1hYnVmX2V4cF9vcHNfbW1hcCwKK307CisKK3N0cnVjdCBnbnRkZXZf ZG1hYnVmX2V4cG9ydF9hcmdzIHsKKwlzdHJ1Y3QgZ250ZGV2X3ByaXYgKnByaXY7CisJc3RydWN0 IGdudGRldl9ncmFudF9tYXAgKm1hcDsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2ICpkbWFi dWZfcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IGNvdW50OworCXN0cnVjdCBwYWdl ICoqcGFnZXM7CisJdTMyIGZkOworfTsKKworc3RhdGljIGludCBkbWFidWZfZXhwX2Zyb21fcGFn ZXMoc3RydWN0IGdudGRldl9kbWFidWZfZXhwb3J0X2FyZ3MgKmFyZ3MpCit7CisJREVGSU5FX0RN QV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRk ZXZfZG1hYnVmOworCWludCByZXQ7CisKKwlnbnRkZXZfZG1hYnVmID0ga3phbGxvYyhzaXplb2Yo KmdudGRldl9kbWFidWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdudGRldl9kbWFidWYpCisJCXJl dHVybiAtRU5PTUVNOworCisJa3JlZl9pbml0KCZnbnRkZXZfZG1hYnVmLT51LmV4cC5yZWZjb3Vu dCk7CisKKwlnbnRkZXZfZG1hYnVmLT5wcml2ID0gYXJncy0+ZG1hYnVmX3ByaXY7CisJZ250ZGV2 X2RtYWJ1Zi0+bnJfcGFnZXMgPSBhcmdzLT5jb3VudDsKKwlnbnRkZXZfZG1hYnVmLT5wYWdlcyA9 IGFyZ3MtPnBhZ2VzOworCWdudGRldl9kbWFidWYtPnUuZXhwLnByaXYgPSBhcmdzLT5wcml2Owor CWdudGRldl9kbWFidWYtPnUuZXhwLm1hcCA9IGFyZ3MtPm1hcDsKKworCWV4cF9pbmZvLmV4cF9u YW1lID0gS0JVSUxEX01PRE5BTUU7CisJaWYgKGFyZ3MtPmRldi0+ZHJpdmVyICYmIGFyZ3MtPmRl di0+ZHJpdmVyLT5vd25lcikKKwkJZXhwX2luZm8ub3duZXIgPSBhcmdzLT5kZXYtPmRyaXZlci0+ b3duZXI7CisJZWxzZQorCQlleHBfaW5mby5vd25lciA9IFRISVNfTU9EVUxFOworCWV4cF9pbmZv Lm9wcyA9ICZkbWFidWZfZXhwX29wczsKKwlleHBfaW5mby5zaXplID0gYXJncy0+Y291bnQgPDwg UEFHRV9TSElGVDsKKwlleHBfaW5mby5mbGFncyA9IE9fUkRXUjsKKwlleHBfaW5mby5wcml2ID0g Z250ZGV2X2RtYWJ1ZjsKKworCWdudGRldl9kbWFidWYtPmRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0 KCZleHBfaW5mbyk7CisJaWYgKElTX0VSUihnbnRkZXZfZG1hYnVmLT5kbWFidWYpKSB7CisJCXJl dCA9IFBUUl9FUlIoZ250ZGV2X2RtYWJ1Zi0+ZG1hYnVmKTsKKwkJZ250ZGV2X2RtYWJ1Zi0+ZG1h YnVmID0gTlVMTDsKKwkJZ290byBmYWlsOworCX0KKworCXJldCA9IGRtYV9idWZfZmQoZ250ZGV2 X2RtYWJ1Zi0+ZG1hYnVmLCBPX0NMT0VYRUMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWw7 CisKKwlnbnRkZXZfZG1hYnVmLT5mZCA9IHJldDsKKwlhcmdzLT5mZCA9IHJldDsKKworCXByX2Rl YnVnKCJFeHBvcnRpbmcgRE1BIGJ1ZmZlciB3aXRoIGZkICVkXG4iLCByZXQpOworCisJbXV0ZXhf bG9jaygmYXJncy0+ZG1hYnVmX3ByaXYtPmxvY2spOworCWxpc3RfYWRkKCZnbnRkZXZfZG1hYnVm LT5uZXh0LCAmYXJncy0+ZG1hYnVmX3ByaXYtPmV4cF9saXN0KTsKKwltdXRleF91bmxvY2soJmFy Z3MtPmRtYWJ1Zl9wcml2LT5sb2NrKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoZ250ZGV2 X2RtYWJ1Zi0+ZG1hYnVmKQorCQlkbWFfYnVmX3B1dChnbnRkZXZfZG1hYnVmLT5kbWFidWYpOwor CWtmcmVlKGdudGRldl9kbWFidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg Z250ZGV2X2dyYW50X21hcCAqCitkbWFidWZfZXhwX2FsbG9jX2JhY2tpbmdfc3RvcmFnZShzdHJ1 Y3QgZ250ZGV2X3ByaXYgKnByaXYsIGludCBkbWFidWZfZmxhZ3MsCisJCQkJIGludCBjb3VudCkK K3sKKwlzdHJ1Y3QgZ250ZGV2X2dyYW50X21hcCAqbWFwOworCisJaWYgKHVubGlrZWx5KGNvdW50 IDw9IDApKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWlmICgoZG1hYnVmX2ZsYWdz ICYgR05UREVWX0RNQV9GTEFHX1dDKSAmJgorCSAgICAoZG1hYnVmX2ZsYWdzICYgR05UREVWX0RN QV9GTEFHX0NPSEVSRU5UKSkgeworCQlwcl9kZWJ1ZygiV3JvbmcgZG1hLWJ1ZiBmbGFnczogMHgl eFxuIiwgZG1hYnVmX2ZsYWdzKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJ bWFwID0gZ250ZGV2X2FsbG9jX21hcChwcml2LCBjb3VudCwgZG1hYnVmX2ZsYWdzKTsKKwlpZiAo IW1hcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAodW5saWtlbHkoZ250ZGV2 X2FjY291bnRfbWFwcGVkX3BhZ2VzKGNvdW50KSkpIHsKKwkJcHJfZGVidWcoImNhbid0IG1hcCAl ZCBwYWdlczogb3ZlciBsaW1pdFxuIiwgY291bnQpOworCQlnbnRkZXZfcHV0X21hcChOVUxMLCBt YXApOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisJcmV0dXJuIG1hcDsKIH0KIAog c3RhdGljIGludCBkbWFidWZfZXhwX2Zyb21fcmVmcyhzdHJ1Y3QgZ250ZGV2X3ByaXYgKnByaXYs IGludCBmbGFncywKIAkJCQlpbnQgY291bnQsIHUzMiBkb21pZCwgdTMyICpyZWZzLCB1MzIgKmZk KQogewotCSpmZCA9IC0xOwotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBnbnRkZXZfZ3JhbnRf bWFwICptYXA7CisJc3RydWN0IGdudGRldl9kbWFidWZfZXhwb3J0X2FyZ3MgYXJnczsKKwlpbnQg aSwgcmV0OworCisJbWFwID0gZG1hYnVmX2V4cF9hbGxvY19iYWNraW5nX3N0b3JhZ2UocHJpdiwg ZmxhZ3MsIGNvdW50KTsKKwlpZiAoSVNfRVJSKG1hcCkpCisJCXJldHVybiBQVFJfRVJSKG1hcCk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQltYXAtPmdyYW50c1tpXS5kb21p ZCA9IGRvbWlkOworCQltYXAtPmdyYW50c1tpXS5yZWYgPSByZWZzW2ldOworCX0KKworCW11dGV4 X2xvY2soJnByaXYtPmxvY2spOworCWdudGRldl9hZGRfbWFwKHByaXYsIG1hcCk7CisJbXV0ZXhf dW5sb2NrKCZwcml2LT5sb2NrKTsKKworCW1hcC0+ZmxhZ3MgfD0gR05UTUFQX2hvc3RfbWFwOwor I2lmIGRlZmluZWQoQ09ORklHX1g4NikKKwltYXAtPmZsYWdzIHw9IEdOVE1BUF9kZXZpY2VfbWFw OworI2VuZGlmCisKKwlyZXQgPSBnbnRkZXZfbWFwX2dyYW50X3BhZ2VzKG1hcCk7CisJaWYgKHJl dCA8IDApCisJCWdvdG8gb3V0OworCisJYXJncy5wcml2ID0gcHJpdjsKKwlhcmdzLm1hcCA9IG1h cDsKKwlhcmdzLmRldiA9IHByaXYtPmRtYV9kZXY7CisJYXJncy5kbWFidWZfcHJpdiA9IHByaXYt PmRtYWJ1Zl9wcml2OworCWFyZ3MuY291bnQgPSBtYXAtPmNvdW50OworCWFyZ3MucGFnZXMgPSBt YXAtPnBhZ2VzOworCisJcmV0ID0gZG1hYnVmX2V4cF9mcm9tX3BhZ2VzKCZhcmdzKTsKKwlpZiAo cmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkqZmQgPSBhcmdzLmZkOworCXJldHVybiAwOworCitv dXQ6CisJZG1hYnVmX2V4cF9yZW1vdmVfbWFwKHByaXYsIG1hcCk7CisJcmV0dXJuIHJldDsKIH0K IAogLyogRE1BIGJ1ZmZlciBpbXBvcnQgc3VwcG9ydC4gKi8KQEAgLTE2OCw2ICs2MTMsMTAgQEAg c3RydWN0IGdudGRldl9kbWFidWZfcHJpdiAqZ250ZGV2X2RtYWJ1Zl9pbml0KHZvaWQpCiAJaWYg KCFwcml2KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCW11dGV4X2luaXQoJnByaXYt PmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5leHBfbGlzdCk7CisJSU5JVF9MSVNUX0hF QUQoJnByaXYtPmV4cF93YWl0X2xpc3QpOworCiAJcmV0dXJuIHByaXY7CiB9CiAKLS0gCjIuMTgu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=