From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH v2 6/9] hyper_dmabuf: hyper_DMABUF synchronization across VM Date: Tue, 13 Feb 2018 17:50:05 -0800 Message-ID: <20180214015008.9513-7-dongwon.kim__1111.83212507076$1518573044$gmane$org@intel.com> References: <20180214015008.9513-1-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1elmEP-00078C-Il for xen-devel@lists.xenproject.org; Wed, 14 Feb 2018 01:51:33 +0000 In-Reply-To: <20180214015008.9513-1-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org, linaro-mm-sig@lists.linaro.org, xen-devel@lists.xenproject.org Cc: sumit.semwal@linaro.org, dongwon.kim@intel.com, dri-devel@lists.freedesktop.org, mateuszx.potrola@intel.com List-Id: xen-devel@lists.xenproject.org QWxsIG9mIGh5cGVyX0RNQUJVRiBvcGVyYXRpb25zIG5vdyAoaHlwZXJfZG1hYnVmX29wcy5jKSBz ZW5kIGEgbWVzc2FnZQp0byB0aGUgZXhwb3J0aW5nIFZNIGZvciBzeW5jaHJvbml6YXRpb24gYmV0 d2VlbiB0d28gVk1zLiBGb3IgdGhpcywgZXZlcnkKbWFwcGluZyBkb25lIGJ5IGltcG9ydGVyIHdp bGwgbWFrZSBleHBvcnRlciBwZXJmb3JtIHNoYWRvdyBtYXBwaW5nIG9mCm9yaWdpbmFsIERNQS1C VUYuIFRoZW4gYWxsIGNvbnNlY3V0aXZlIERNQS1CVUYgb3BlcmF0aW9ucyAoYXR0YWNoLCBkZXRh Y2gsCm1hcC91bm1hcCBhbmQgc28gb24pIHdpbGwgYmUgbWltaWNrZWQgb24gdGhpcyBzaGFkb3dl ZCBETUEtQlVGIGZvciB0cmFja2luZwphbmQgc3luY2hyb25pemF0aW9uIHB1cnBvc2UgKGUuZy4g Ky1yZWZlcmVuY2UgY291bnQgdG8gY2hlY2sgdGhlIHN0YXR1cykuCgpTaWduZWQtb2ZmLWJ5OiBE b25nd29uIEtpbSA8ZG9uZ3dvbi5raW1AaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBNYXRldXN6 IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZG1hLWJ1 Zi9oeXBlcl9kbWFidWYvTWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZG1h LWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5jICAgIHwgIDUzICsrKy0KIGRyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5oICAgIHwgICAyICsKIGRy aXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX29wcy5jICAgIHwgMTU3ICsr KysrKysrKy0KIC4uLi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLmMgICAg ICAgIHwgMzI0ICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfcmVtb3RlX3N5bmMuaCAgICAgICAgfCAgMzIgKysKIDYgZmlsZXMgY2hhbmdlZCwgNTY1 IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3Jl bW90ZV9zeW5jLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL01h a2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQppbmRleCBiOWFi NGVlY2E2ZjIuLjcwMjY5NmYyOTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEtYnVmL2h5cGVy X2RtYWJ1Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL01ha2Vm aWxlCkBAIC05LDYgKzksNyBAQCBpZm5lcSAoJChLRVJORUxSRUxFQVNFKSwpCiAJCQkJIGh5cGVy X2RtYWJ1Zl9vcHMubyBcCiAJCQkJIGh5cGVyX2RtYWJ1Zl9tc2cubyBcCiAJCQkJIGh5cGVyX2Rt YWJ1Zl9pZC5vIFwKKwkJCQkgaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jLm8gXAogCiBpZmVxICgk KENPTkZJR19IWVBFUl9ETUFCVUZfWEVOKSwgeSkKIAkkKFRBUkdFVF9NT0RVTEUpLW9ianMgKz0g YmFja2VuZHMveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5jIGIvZHJpdmVycy9kbWEt YnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMKaW5kZXggNzE3NmZhOGZiMTM5Li4x NTkyZDVjZmFhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX21zZy5jCisrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX21zZy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVl Lmg+CiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1 Zl9tc2cuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuaCIKICNpbmNsdWRl ICJoeXBlcl9kbWFidWZfbGlzdC5oIgogCiBzdHJ1Y3QgY21kX3Byb2Nlc3MgewpAQCAtOTIsNiAr OTMsMjUgQEAgdm9pZCBoeXBlcl9kbWFidWZfY3JlYXRlX3JlcShzdHJ1Y3QgaHlwZXJfZG1hYnVm X3JlcSAqcmVxLAogCQkJcmVxLT5vcFtpXSA9IG9wW2ldOwogCQlicmVhazsKIAorCWNhc2UgSFlQ RVJfRE1BQlVGX09QU19UT19SRU1PVEU6CisJCS8qIG5vdGlmeWluZyBkbWFidWYgbWFwL3VubWFw IHRvIGltcG9ydGVyIChwcm9iYWJseSBub3QgbmVlZGVkKQorCQkgKiBmb3IgZG1hYnVmIHN5bmNo cm9uaXphdGlvbgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfVE9f U09VUkNFOgorCQkvKiBub3RpZnlpbmcgZG1hYnVmIG1hcC91bm1hcCB0byBleHBvcnRlciwgbWFw IHdpbGwgbWFrZQorCQkgKiB0aGUgZHJpdmVyIHRvIGRvIHNoYWRvdyBtYXBwaW5nIG9yIHVubWFw cGluZyBmb3IKKwkJICogc3luY2hyb25pemF0aW9uIHdpdGggb3JpZ2luYWwgZXhwb3J0ZXIgKGUu Zy4gaTkxNSkKKwkJICoKKwkJICogY29tbWFuZCA6IERNQUJVRl9PUFNfVE9fU09VUkNFLgorCQkg KiBvcDB+MyA6IGh5cGVyX2RtYWJ1Zl9pZAorCQkgKiBvcDQgOiBtYXAoPTEpL3VubWFwKD0yKS9h dHRhY2goPTMpL2RldGFjaCg9NCkKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJ CQlyZXEtPm9wW2ldID0gb3BbaV07CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJLyogbm8gY29t bWFuZCBmb3VuZCAqLwogCQlyZXR1cm47CkBAIC0yMDEsNiArMjIxLDEyIEBAIHN0YXRpYyB2b2lk IGNtZF9wcm9jZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJCWJyZWFrOwog CisJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1RPX1JFTU9URToKKwkJLyogbm90aWZ5aW5nIGRtYWJ1 ZiBtYXAvdW5tYXAgdG8gaW1wb3J0ZXIKKwkJICogKHByb2JhYmx5IG5vdCBuZWVkZWQpIGZvciBk bWFidWYgc3luY2hyb25pemF0aW9uCisJCSAqLworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCS8q IHNob3VsZG4ndCBnZXQgaGVyZSAqLwogCQlicmVhazsKQEAgLTIxNyw2ICsyNDMsNyBAQCBpbnQg aHlwZXJfZG1hYnVmX21zZ19wYXJzZShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVx ICpyZXEpCiAJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKIAlzdHJ1Y3QgZXhw b3J0ZWRfc2d0X2luZm8gKmV4cG9ydGVkOwogCWh5cGVyX2RtYWJ1Zl9pZF90IGhpZDsKKwlpbnQg cmV0OwogCiAJaWYgKCFyZXEpIHsKIAkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LCAicmVxdWVz dCBpcyBOVUxMXG4iKTsKQEAgLTIyOSw3ICsyNTYsNyBAQCBpbnQgaHlwZXJfZG1hYnVmX21zZ19w YXJzZShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEpCiAJaGlkLnJuZ19r ZXlbMl0gPSByZXEtPm9wWzNdOwogCiAJaWYgKChyZXEtPmNtZCA8IEhZUEVSX0RNQUJVRl9FWFBP UlQpIHx8Ci0JCShyZXEtPmNtZCA+IEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQpKSB7CisJ CShyZXEtPmNtZCA+IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNFKSkgewogCQlkZXZfZXJyKGh5 X2Rydl9wcml2LT5kZXYsICJpbnZhbGlkIGNvbW1hbmRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsK IAl9CkBAIC0yNzEsNiArMjk4LDMwIEBAIGludCBoeXBlcl9kbWFidWZfbXNnX3BhcnNlKGludCBk b21pZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSkKIAkJcmV0dXJuIHJlcS0+Y21kOwog CX0KIAorCS8qIGRtYSBidWYgcmVtb3RlIHN5bmNocm9uaXphdGlvbiAqLworCWlmIChyZXEtPmNt ZCA9PSBIWVBFUl9ETUFCVUZfT1BTX1RPX1NPVVJDRSkgeworCQkvKiBub3RpZnlpbmcgZG1hYnVm IG1hcC91bm1hcCB0byBleHBvcnRlciwgbWFwIHdpbGwKKwkJICogbWFrZSB0aGUgZHJpdmVyIHRv IGRvIHNoYWRvdyBtYXBwaW5nCisJCSAqIG9yIHVubWFwcGluZyBmb3Igc3luY2hyb25pemF0aW9u IHdpdGggb3JpZ2luYWwKKwkJICogZXhwb3J0ZXIgKGUuZy4gaTkxNSkKKwkJICoKKwkJICogY29t bWFuZCA6IERNQUJVRl9PUFNfVE9fU09VUkNFLgorCQkgKiBvcDB+MyA6IGh5cGVyX2RtYWJ1Zl9p ZAorCQkgKiBvcDEgOiBlbnVtIGh5cGVyX2RtYWJ1Zl9vcHMgey4uLi59CisJCSAqLworCQlkZXZf ZGJnKGh5X2Rydl9wcml2LT5kZXYsCisJCQkiJXM6IEhZUEVSX0RNQUJVRl9PUFNfVE9fU09VUkNF XG4iLCBfX2Z1bmNfXyk7CisKKwkJcmV0ID0gaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5jKGhpZCwg cmVxLT5vcFs0XSk7CisKKwkJaWYgKHJldCkKKwkJCXJlcS0+c3RhdCA9IEhZUEVSX0RNQUJVRl9S RVFfRVJST1I7CisJCWVsc2UKKwkJCXJlcS0+c3RhdCA9IEhZUEVSX0RNQUJVRl9SRVFfUFJPQ0VT U0VEOworCisJCXJldHVybiByZXEtPmNtZDsKKwl9CisKIAkvKiBzeW5jaHJvbm91cyBkbWFfYnVm X2ZkIGV4cG9ydCAqLwogCWlmIChyZXEtPmNtZCA9PSBIWVBFUl9ETUFCVUZfRVhQT1JUX0ZEKSB7 CiAJCS8qIGZpbmQgYSBjb3JyZXNwb25kaW5nIFNHVCBmb3IgdGhlIGlkICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaCBiL2RyaXZl cnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5oCmluZGV4IDYzYTM5ZDA2 OGQ2OS4uODJkMjkwMGQzMDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVm L2h5cGVyX2RtYWJ1Zl9tc2cuaApAQCAtNDgsNiArNDgsOCBAQCBlbnVtIGh5cGVyX2RtYWJ1Zl9j b21tYW5kIHsKIAlIWVBFUl9ETUFCVUZfRVhQT1JUX0ZELAogCUhZUEVSX0RNQUJVRl9FWFBPUlRf RkRfRkFJTEVELAogCUhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQsCisJSFlQRVJfRE1BQlVG X09QU19UT19SRU1PVEUsCisJSFlQRVJfRE1BQlVGX09QU19UT19TT1VSQ0UsCiB9OwogCiBlbnVt IGh5cGVyX2RtYWJ1Zl9vcHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2Rt YWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9vcHMuYwppbmRleCBiNGQzYzJjYWFkNzMuLjAyZDQyYzA5OWFkOSAxMDA2NDQK LS0tIGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMKKysr IGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfb3BzLmMKQEAgLTUx LDE2ICs1MSw3MSBAQCBzdGF0aWMgaW50IGRtYWJ1Zl9yZWZjb3VudChzdHJ1Y3QgZG1hX2J1ZiAq ZG1hX2J1ZikKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCBzeW5jX3JlcXVlc3Qo aHlwZXJfZG1hYnVmX2lkX3QgaGlkLCBpbnQgZG1hYnVmX29wcykKK3sKKwlzdHJ1Y3QgaHlwZXJf ZG1hYnVmX3JlcSAqcmVxOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmtuZF9vcHMgKmJrbmRfb3Bz ID0gaHlfZHJ2X3ByaXYtPmJrbmRfb3BzOworCWludCBvcFs1XTsKKwlpbnQgaTsKKwlpbnQgcmV0 OworCisJb3BbMF0gPSBoaWQuaWQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlvcFtp KzFdID0gaGlkLnJuZ19rZXlbaV07CisKKwlvcFs0XSA9IGRtYWJ1Zl9vcHM7CisKKwlyZXEgPSBr Y2FsbG9jKDEsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwloeXBlcl9kbWFidWZfY3JlYXRlX3JlcShyZXEsIEhZUEVSX0RNQUJV Rl9PUFNfVE9fU09VUkNFLCAmb3BbMF0pOworCisJLyogc2VuZCByZXF1ZXN0IGFuZCB3YWl0IGZv ciBhIHJlc3BvbnNlICovCisJcmV0ID0gYmtuZF9vcHMtPnNlbmRfcmVxKEhZUEVSX0RNQUJVRl9E T01fSUQoaGlkKSwgcmVxLAorCQkJCSBXQUlUX0FGVEVSX1NZTkNfUkVRKTsKKworCWlmIChyZXQg PCAwKSB7CisJCWRldl9kYmcoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSJkbWFidWYgc3luYyByZXF1 ZXN0IGZhaWxlZDolZFxuIiwgcmVxLT5vcFs0XSk7CisJfQorCisJa2ZyZWUocmVxKTsKKworCXJl dHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX29wc19hdHRhY2goc3RydWN0 IGRtYV9idWYgKmRtYWJ1ZiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQogewotCXJldHVybiAwOworCXN0cnVjdCBp bXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsKKworCWlmICghYXR0YWNoLT5k bWFidWYtPnByaXYpCisJCXJldHVybiAtRUlOVkFMOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGlt cG9ydGVkX3NndF9pbmZvICopYXR0YWNoLT5kbWFidWYtPnByaXY7CisKKwlyZXQgPSBzeW5jX3Jl cXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19BVFRBQ0gpOworCisJcmV0dXJu IHJldDsKIH0KIAogc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc19kZXRhY2goc3RydWN0IGRt YV9idWYgKmRtYWJ1ZiwKIAkJCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNo KQogeworCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0ZWQ7CisJaW50IHJldDsKKwor CWlmICghYXR0YWNoLT5kbWFidWYtPnByaXYpCisJCXJldHVybjsKKworCWltcG9ydGVkID0gKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWF0dGFjaC0+ZG1hYnVmLT5wcml2OworCisJcmV0ID0g c3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfREVUQUNIKTsKIH0K IAogc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqaHlwZXJfZG1hYnVmX29wc19tYXAoCkBAIC03MCw2 ICsxMjUsNyBAQCBzdGF0aWMgc3RydWN0IHNnX3RhYmxlICpoeXBlcl9kbWFidWZfb3BzX21hcCgK IAlzdHJ1Y3Qgc2dfdGFibGUgKnN0OwogCXN0cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqaW1wb3J0 ZWQ7CiAJc3RydWN0IHBhZ2VzX2luZm8gKnBnX2luZm87CisJaW50IHJldDsKIAogCWlmICghYXR0 YWNobWVudC0+ZG1hYnVmLT5wcml2KQogCQlyZXR1cm4gTlVMTDsKQEAgLTkxLDYgKzE0Nyw4IEBA IHN0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKmh5cGVyX2RtYWJ1Zl9vcHNfbWFwKAogCWlmICghZG1h X21hcF9zZyhhdHRhY2htZW50LT5kZXYsIHN0LT5zZ2wsIHN0LT5uZW50cywgZGlyKSkKIAkJZ290 byBlcnJfZnJlZV9zZzsKIAorCXJldCA9IHN5bmNfcmVxdWVzdChpbXBvcnRlZC0+aGlkLCBIWVBF Ul9ETUFCVUZfT1BTX01BUCk7CisKIAlrZnJlZShwZ19pbmZvLT5wZ3MpOwogCWtmcmVlKHBnX2lu Zm8pOwogCkBAIC0xMTMsNiArMTcxLDcgQEAgc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29wc191 bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCQkJCSAgIGVudW0g ZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmlt cG9ydGVkOworCWludCByZXQ7CiAKIAlpZiAoIWF0dGFjaG1lbnQtPmRtYWJ1Zi0+cHJpdikKIAkJ cmV0dXJuOwpAQCAtMTIzLDEyICsxODIsMTUgQEAgc3RhdGljIHZvaWQgaHlwZXJfZG1hYnVmX29w c191bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCiAJc2dfZnJl ZV90YWJsZShzZyk7CiAJa2ZyZWUoc2cpOworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVk LT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfVU5NQVApOwogfQogCiBzdGF0aWMgdm9pZCBoeXBlcl9k bWFidWZfb3BzX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCiB7CiAJc3RydWN0IGlt cG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKIAlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2JrbmRfb3Bz ICpia25kX29wcyA9IGh5X2Rydl9wcml2LT5ia25kX29wczsKKwlpbnQgcmV0OwogCWludCBmaW5p c2g7CiAKIAlpZiAoIWRtYV9idWYtPnByaXYpCkBAIC0xNTUsNiArMjE3LDggQEAgc3RhdGljIHZv aWQgaHlwZXJfZG1hYnVmX29wc19yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQogCWZp bmlzaCA9IGltcG9ydGVkICYmICFpbXBvcnRlZC0+dmFsaWQgJiYKIAkJICFpbXBvcnRlZC0+aW1w b3J0ZXJzOwogCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJV Rl9PUFNfUkVMRUFTRSk7CisKIAkvKgogCSAqIENoZWNrIGlmIGJ1ZmZlciBpcyBzdGlsbCB2YWxp ZCBhbmQgaWYgbm90IHJlbW92ZSBpdAogCSAqIGZyb20gaW1wb3J0ZWQgbGlzdC4gVGhhdCBoYXMg dG8gYmUgZG9uZSBhZnRlciBzZW5kaW5nCkBAIC0xNjksMTggKzIzMyw0OCBAQCBzdGF0aWMgdm9p ZCBoeXBlcl9kbWFidWZfb3BzX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYV9idWYpCiBzdGF0 aWMgaW50IGh5cGVyX2RtYWJ1Zl9vcHNfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAq ZG1hYnVmLAogCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlyZXR1 cm4gMDsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCWludCByZXQ7CisK KwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpbXBvcnRlZCA9IChz dHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7CisKKwlyZXQgPSBzeW5jX3Jl cXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19CRUdJTl9DUFVfQUNDRVNTKTsK KworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX29wc19lbmRfY3B1 X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkJCQkgICBlbnVtIGRtYV9kYXRhX2Rp cmVjdGlvbiBkaXIpCiB7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlp bnQgcmV0OworCisJaWYgKCFkbWFidWYtPnByaXYpCisJCXJldHVybiAtRUlOVkFMOworCisJaW1w b3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVmLT5wcml2OworCisJcmV0 ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfRU5EX0NQVV9B Q0NFU1MpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkICpoeXBlcl9kbWFidWZfb3Bz X2ttYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJCQkJCSAgdW5zaWduZWQgbG9u ZyBwZ251bSkKIHsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCWludCBy ZXQ7CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwlpbXBvcnRlZCA9 IChzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKilkbWFidWYtPnByaXY7CisKKwlyZXQgPSBzeW5j X3JlcXVlc3QoaW1wb3J0ZWQtPmhpZCwgSFlQRVJfRE1BQlVGX09QU19LTUFQX0FUT01JQyk7CisK IAkvKiBUT0RPOiBOVUxMIGZvciBub3cuIE5lZWQgdG8gcmV0dXJuIHRoZSBhZGRyIG9mIG1hcHBl ZCByZWdpb24gKi8KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE4OCwxMCArMjgyLDI5IEBAIHN0YXRp YyB2b2lkICpoeXBlcl9kbWFidWZfb3BzX2ttYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFi dWYsCiBzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3BzX2t1bm1hcF9hdG9taWMoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZiwKIAkJCQkJICAgdW5zaWduZWQgbG9uZyBwZ251bSwgdm9pZCAqdmFkZHIp CiB7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlpbnQgcmV0OworCisJ aWYgKCFkbWFidWYtPnByaXYpCisJCXJldHVybjsKKworCWltcG9ydGVkID0gKHN0cnVjdCBpbXBv cnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKKworCXJldCA9IHN5bmNfcmVxdWVzdChpbXBv cnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX0tVTk1BUF9BVE9NSUMpOwogfQogCiBzdGF0aWMg dm9pZCAqaHlwZXJfZG1hYnVmX29wc19rbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVuc2ln bmVkIGxvbmcgcGdudW0pCiB7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsK KwlpbnQgcmV0OworCisJaWYgKCFkbWFidWYtPnByaXYpCisJCXJldHVybiBOVUxMOworCisJaW1w b3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVmLT5wcml2OworCisJcmV0 ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfS01BUCk7CisK IAkvKiBmb3Igbm93IE5VTEwuLiBuZWVkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiBtYXBwZWQg cmVnaW9uICovCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xOTksMjEgKzMxMiw1OSBAQCBzdGF0aWMg dm9pZCAqaHlwZXJfZG1hYnVmX29wc19rbWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIHVuc2ln bmVkIGxvbmcgcGdudW0pCiBzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3BzX2t1bm1hcChzdHJ1 Y3QgZG1hX2J1ZiAqZG1hYnVmLCB1bnNpZ25lZCBsb25nIHBnbnVtLAogCQkJCSAgICB2b2lkICp2 YWRkcikKIHsKKwlzdHJ1Y3QgaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkOworCWludCByZXQ7 CisKKwlpZiAoIWRtYWJ1Zi0+cHJpdikKKwkJcmV0dXJuOworCisJaW1wb3J0ZWQgPSAoc3RydWN0 IGltcG9ydGVkX3NndF9pbmZvICopZG1hYnVmLT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0 KGltcG9ydGVkLT5oaWQsIEhZUEVSX0RNQUJVRl9PUFNfS1VOTUFQKTsKIH0KIAogc3RhdGljIGlu dCBoeXBlcl9kbWFidWZfb3BzX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKIAkJCQkgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IGltcG9ydGVk X3NndF9pbmZvICppbXBvcnRlZDsKKwlpbnQgcmV0OworCisJaWYgKCFkbWFidWYtPnByaXYpCisJ CXJldHVybiAtRUlOVkFMOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3NndF9pbmZv ICopZG1hYnVmLT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5oaWQsIEhZ UEVSX0RNQUJVRl9PUFNfTU1BUCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCAq aHlwZXJfZG1hYnVmX29wc192bWFwKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiB7CisJc3RydWN0 IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlpbnQgcmV0OworCisJaWYgKCFkbWFidWYt PnByaXYpCisJCXJldHVybiBOVUxMOworCisJaW1wb3J0ZWQgPSAoc3RydWN0IGltcG9ydGVkX3Nn dF9pbmZvICopZG1hYnVmLT5wcml2OworCisJcmV0ID0gc3luY19yZXF1ZXN0KGltcG9ydGVkLT5o aWQsIEhZUEVSX0RNQUJVRl9PUFNfVk1BUCk7CisKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGlj IHZvaWQgaHlwZXJfZG1hYnVmX29wc192dW5tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgdm9p ZCAqdmFkZHIpCiB7CisJc3RydWN0IGltcG9ydGVkX3NndF9pbmZvICppbXBvcnRlZDsKKwlpbnQg cmV0OworCisJaWYgKCFkbWFidWYtPnByaXYpCisJCXJldHVybjsKKworCWltcG9ydGVkID0gKHN0 cnVjdCBpbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYWJ1Zi0+cHJpdjsKKworCXJldCA9IHN5bmNfcmVx dWVzdChpbXBvcnRlZC0+aGlkLCBIWVBFUl9ETUFCVUZfT1BTX1ZVTk1BUCk7CiB9CiAKIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgaHlwZXJfZG1hYnVmX29wcyA9IHsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5j LmMgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3lu Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVjMmMxODI4ODU5 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9k bWFidWZfcmVtb3RlX3N5bmMuYwpAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cisg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoTUlUIE9SIEdQ TC0yLjApCisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBp bnRlbC5jb20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3p4LnBvdHJvbGFAaW50ZWwu Y29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1h LWJ1Zi5oPgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9k bWFidWZfc3RydWN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2xpc3QuaCIKKyNpbmNsdWRl ICJoeXBlcl9kbWFidWZfbXNnLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2lkLmgiCisjaW5j bHVkZSAiaHlwZXJfZG1hYnVmX3NnbF9wcm9jLmgiCisKKy8qIFdoZW5ldmVyIGltcG9ydGVyIGRv ZXMgZG1hIG9wZXJhdGlvbnMgZnJvbSByZW1vdGUgZG9tYWluLAorICogYSBub3RpZmljYXRpb24g aXMgc2VudCB0byB0aGUgZXhwb3J0ZXIgc28gdGhhdCBleHBvcnRlcgorICogaXNzdWVzIGVxdWl2 YWxlbnQgZG1hIG9wZXJhdGlvbiBvbiB0aGUgb3JpZ2luYWwgZG1hIGJ1ZgorICogZm9yIGluZGly ZWN0IHN5bmNocm9uaXphdGlvbiB2aWEgc2hhZG93IG9wZXJhdGlvbnMuCisgKgorICogQWxsIHB0 cnMgYW5kIHJlZmVyZW5jZXMgKGUuZyBzdHJ1Y3Qgc2dfdGFibGUqLAorICogc3RydWN0IGRtYV9i dWZfYXR0YWNobWVudCkgY3JlYXRlZCB2aWEgdGhlc2Ugb3BlcmF0aW9ucyBvbgorICogZXhwb3J0 ZXIncyBzaWRlIGFyZSBrZXB0IGluIHN0YWNrIChpbXBsZW1lbnRlZCBhcyBjaXJjdWxhcgorICog bGlua2VkLWxpc3RzKSBzZXBhcmF0ZWx5IHNvIHRoYXQgdGhvc2UgY2FuIGJlIHJlLXJlZmVyZW5j ZWQKKyAqIGxhdGVyIHdoZW4gdW5tYXBwaW5nIG9wZXJhdGlvbnMgYXJlIGludm9rZWQgdG8gZnJl ZSB0aG9zZS4KKyAqCisgKiBUaGUgdmVyeSBmaXJzdCBlbGVtZW50IG9uIHRoZSBib3R0b20gb2Yg ZWFjaCBzdGFjayBob2xkcworICogaXMgd2hhdCBpcyBjcmVhdGVkIHdoZW4gaW5pdGlhbCBleHBv cnRpbmcgaXMgaXNzdWVkIHNvIGl0CisgKiBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIHJlbGVh c2VkIGJ5IHRoaXMgZnVjdGlvbi4KKyAqLworaW50IGh5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYyho eXBlcl9kbWFidWZfaWRfdCBoaWQsIGludCBvcHMpCit7CisJc3RydWN0IGV4cG9ydGVkX3NndF9p bmZvICpleHBvcnRlZDsKKwlzdHJ1Y3Qgc2d0X2xpc3QgKnNndGw7CisJc3RydWN0IGF0dGFjaG1l bnRfbGlzdCAqYXR0YWNobDsKKwlzdHJ1Y3Qga21hcF92YWRkcl9saXN0ICp2YV9rbWFwbDsKKwlz dHJ1Y3Qgdm1hcF92YWRkcl9saXN0ICp2YV92bWFwbDsKKwlpbnQgcmV0OworCisJLyogZmluZCBh IGNvcmVzcG9uZGluZyBTR1QgZm9yIHRoZSBpZCAqLworCWV4cG9ydGVkID0gaHlwZXJfZG1hYnVm X2ZpbmRfZXhwb3J0ZWQoaGlkKTsKKworCWlmICghZXhwb3J0ZWQpIHsKKwkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LAorCQkJImRtYWJ1ZiByZW1vdGUgc3luYzo6Y2FuJ3QgZmluZCBleHBvcnRl ZCBsaXN0XG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJc3dpdGNoIChvcHMpIHsKKwlj YXNlIEhZUEVSX0RNQUJVRl9PUFNfQVRUQUNIOgorCQlhdHRhY2hsID0ga2NhbGxvYygxLCBzaXpl b2YoKmF0dGFjaGwpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWF0dGFjaGwpCisJCQlyZXR1cm4g LUVOT01FTTsKKworCQlhdHRhY2hsLT5hdHRhY2ggPSBkbWFfYnVmX2F0dGFjaChleHBvcnRlZC0+ ZG1hX2J1ZiwKKwkJCQkJCSBoeV9kcnZfcHJpdi0+ZGV2KTsKKworCQlpZiAoIWF0dGFjaGwtPmF0 dGFjaCkgeworCQkJa2ZyZWUoYXR0YWNobCk7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYs CisJCQkJInJlbW90ZSBzeW5jOjpIWVBFUl9ETUFCVUZfT1BTX0FUVEFDSFxuIik7CisJCQlyZXR1 cm4gLUVOT01FTTsKKwkJfQorCisJCWxpc3RfYWRkKCZhdHRhY2hsLT5saXN0LCAmZXhwb3J0ZWQt PmFjdGl2ZV9hdHRhY2hlZC0+bGlzdCk7CisJCWJyZWFrOworCisJY2FzZSBIWVBFUl9ETUFCVUZf T1BTX0RFVEFDSDoKKwkJaWYgKGxpc3RfZW1wdHkoJmV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQt Pmxpc3QpKSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJInJlbW90ZSBzeW5j OjpIWVBFUl9ETUFCVUZfT1BTX0RFVEFDSFxuIik7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5k ZXYsCisJCQkJIm5vIG1vcmUgZG1hYnVmIGF0dGFjaG1lbnQgbGVmdCB0byBiZSBkZXRhY2hlZFxu Iik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCWF0dGFjaGwgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZleHBvcnRlZC0+YWN0aXZlX2F0dGFjaGVkLT5saXN0LAorCQkJCQkgICBzdHJ1Y3QgYXR0 YWNobWVudF9saXN0LCBsaXN0KTsKKworCQlkbWFfYnVmX2RldGFjaChleHBvcnRlZC0+ZG1hX2J1 ZiwgYXR0YWNobC0+YXR0YWNoKTsKKwkJbGlzdF9kZWwoJmF0dGFjaGwtPmxpc3QpOworCQlrZnJl ZShhdHRhY2hsKTsKKwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfTUFQOgorCQlp ZiAobGlzdF9lbXB0eSgmZXhwb3J0ZWQtPmFjdGl2ZV9hdHRhY2hlZC0+bGlzdCkpIHsKKwkJCWRl dl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkicmVtb3RlIHN5bmM6OkhZUEVSX0RNQUJVRl9P UFNfTUFQXG4iKTsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkibm8gbW9yZSBk bWFidWYgYXR0YWNobWVudCBsZWZ0IHRvIGJlIG1hcHBlZFxuIik7CisJCQlyZXR1cm4gLUVGQVVM VDsKKwkJfQorCisJCWF0dGFjaGwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZleHBvcnRlZC0+YWN0aXZl X2F0dGFjaGVkLT5saXN0LAorCQkJCQkgICBzdHJ1Y3QgYXR0YWNobWVudF9saXN0LCBsaXN0KTsK KworCQlzZ3RsID0ga2NhbGxvYygxLCBzaXplb2YoKnNndGwpLCBHRlBfS0VSTkVMKTsKKworCQlp ZiAoIXNndGwpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzZ3RsLT5zZ3QgPSBkbWFfYnVmX21h cF9hdHRhY2htZW50KGF0dGFjaGwtPmF0dGFjaCwKKwkJCQkJCSAgIERNQV9CSURJUkVDVElPTkFM KTsKKwkJaWYgKCFzZ3RsLT5zZ3QpIHsKKwkJCWtmcmVlKHNndGwpOworCQkJZGV2X2VycihoeV9k cnZfcHJpdi0+ZGV2LAorCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19NQVBcbiIp OworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbGlzdF9hZGQoJnNndGwtPmxpc3QsICZleHBv cnRlZC0+YWN0aXZlX3NndHMtPmxpc3QpOworCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVG X09QU19VTk1BUDoKKwkJaWYgKGxpc3RfZW1wdHkoJmV4cG9ydGVkLT5hY3RpdmVfc2d0cy0+bGlz dCkgfHwKKwkJICAgIGxpc3RfZW1wdHkoJmV4cG9ydGVkLT5hY3RpdmVfYXR0YWNoZWQtPmxpc3Qp KSB7CisJCQlkZXZfZXJyKGh5X2Rydl9wcml2LT5kZXYsCisJCQkJInJlbW90ZSBzeW5jOjpIWVBF Ul9ETUFCVUZfT1BTX1VOTUFQXG4iKTsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJ CQkibm8gU0dUIG9yIGF0dGFjaCBsZWZ0IHRvIGJlIHVubWFwcGVkXG4iKTsKKwkJCXJldHVybiAt RUZBVUxUOworCQl9CisKKwkJYXR0YWNobCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9ydGVkLT5h Y3RpdmVfYXR0YWNoZWQtPmxpc3QsCisJCQkJCSAgIHN0cnVjdCBhdHRhY2htZW50X2xpc3QsIGxp c3QpOworCQlzZ3RsID0gbGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPmFjdGl2ZV9zZ3RzLT5s aXN0LAorCQkJCQlzdHJ1Y3Qgc2d0X2xpc3QsIGxpc3QpOworCisJCWRtYV9idWZfdW5tYXBfYXR0 YWNobWVudChhdHRhY2hsLT5hdHRhY2gsIHNndGwtPnNndCwKKwkJCQkJIERNQV9CSURJUkVDVElP TkFMKTsKKwkJbGlzdF9kZWwoJnNndGwtPmxpc3QpOworCQlrZnJlZShzZ3RsKTsKKwkJYnJlYWs7 CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfUkVMRUFTRToKKwkJZGV2X2RiZyhoeV9kcnZfcHJp di0+ZGV2LAorCQkJImlkOiVkIGtleTolZCAlZCAlZH0gcmVsZWFzZWQsIHJlZiBsZWZ0OiAlZFxu IiwKKwkJCSBleHBvcnRlZC0+aGlkLmlkLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMF0sCisJCQkg ZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzFdLCBleHBvcnRlZC0+aGlkLnJuZ19rZXlbMl0sCisJCQkg ZXhwb3J0ZWQtPmFjdGl2ZSAtIDEpOworCisJCWV4cG9ydGVkLT5hY3RpdmUtLTsKKworCQkvKiBJ ZiB0aGVyZSBhcmUgc3RpbGwgaW1wb3J0ZXJzIGp1c3QgYnJlYWssIGlmIG5vIHRoZW4KKwkJICog Y29udGludWUgd2l0aCBmaW5hbCBjbGVhbnVwCisJCSAqLworCQlpZiAoZXhwb3J0ZWQtPmFjdGl2 ZSkKKwkJCWJyZWFrOworCisJCS8qIEltcG9ydGVyIGp1c3QgcmVsZWFzZWQgYnVmZmVyIGZkLCBj aGVjayBpZiB0aGVyZSBpcworCQkgKiBhbnkgb3RoZXIgaW1wb3J0ZXIgc3RpbGwgdXNpbmcgaXQu CisJCSAqIElmIG5vdCBhbmQgYnVmZmVyIHdhcyB1bmV4cG9ydGVkLCBjbGVhbiB1cCBzaGFyZWQK KwkJICogZGF0YSBhbmQgcmVtb3ZlIHRoYXQgYnVmZmVyLgorCQkgKi8KKwkJZGV2X2RiZyhoeV9k cnZfcHJpdi0+ZGV2LAorCQkJIkJ1ZmZlciB7aWQ6JWQga2V5OiVkICVkICVkfSBmaW5hbCByZWxl YXNlZFxuIiwKKwkJCWV4cG9ydGVkLT5oaWQuaWQsIGV4cG9ydGVkLT5oaWQucm5nX2tleVswXSwK KwkJCWV4cG9ydGVkLT5oaWQucm5nX2tleVsxXSwgZXhwb3J0ZWQtPmhpZC5ybmdfa2V5WzJdKTsK KworCQlpZiAoIWV4cG9ydGVkLT52YWxpZCAmJiAhZXhwb3J0ZWQtPmFjdGl2ZSAmJgorCQkgICAg IWV4cG9ydGVkLT51bmV4cG9ydF9zY2hlZCkgeworCQkJaHlwZXJfZG1hYnVmX2NsZWFudXBfc2d0 X2luZm8oZXhwb3J0ZWQsIGZhbHNlKTsKKwkJCWh5cGVyX2RtYWJ1Zl9yZW1vdmVfZXhwb3J0ZWQo aGlkKTsKKwkJCWtmcmVlKGV4cG9ydGVkKTsKKwkJCS8qIHN0b3JlIGh5cGVyX2RtYWJ1Zl9pZCBp biB0aGUgbGlzdCBmb3IgcmV1c2UgKi8KKwkJCWh5cGVyX2RtYWJ1Zl9zdG9yZV9oaWQoaGlkKTsK KwkJfQorCisJCWJyZWFrOworCisJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX0JFR0lOX0NQVV9BQ0NF U1M6CisJCXJldCA9IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyhleHBvcnRlZC0+ZG1hX2J1ZiwK KwkJCQkJICAgICAgIERNQV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2Vy cihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJIWVBFUl9ETUFCVUZfT1BTX0JFR0lOX0NQVV9BQ0NF U1NcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1B QlVGX09QU19FTkRfQ1BVX0FDQ0VTUzoKKwkJcmV0ID0gZG1hX2J1Zl9lbmRfY3B1X2FjY2Vzcyhl eHBvcnRlZC0+ZG1hX2J1ZiwKKwkJCQkJICAgICBETUFfQklESVJFQ1RJT05BTCk7CisJCWlmIChy ZXQpIHsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiSFlQRVJfRE1BQlVGX09Q U19FTkRfQ1BVX0FDQ0VTU1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWJyZWFrOworCisJ Y2FzZSBIWVBFUl9ETUFCVUZfT1BTX0tNQVBfQVRPTUlDOgorCWNhc2UgSFlQRVJfRE1BQlVGX09Q U19LTUFQOgorCQl2YV9rbWFwbCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp2YV9rbWFwbCksIEdGUF9L RVJORUwpOworCQlpZiAoIXZhX2ttYXBsKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogZHVt bXkga21hcHBpbmcgb2YgMSBwYWdlICovCisJCWlmIChvcHMgPT0gSFlQRVJfRE1BQlVGX09QU19L TUFQX0FUT01JQykKKwkJCXZhX2ttYXBsLT52YWRkciA9IGRtYV9idWZfa21hcF9hdG9taWMoCisJ CQkJCQlleHBvcnRlZC0+ZG1hX2J1ZiwgMSk7CisJCWVsc2UKKwkJCXZhX2ttYXBsLT52YWRkciA9 IGRtYV9idWZfa21hcCgKKwkJCQkJCWV4cG9ydGVkLT5kbWFfYnVmLCAxKTsKKworCQlpZiAoIXZh X2ttYXBsLT52YWRkcikgeworCQkJa2ZyZWUodmFfa21hcGwpOworCQkJZGV2X2VycihoeV9kcnZf cHJpdi0+ZGV2LAorCQkJCSJIWVBFUl9ETUFCVUZfT1BTX0tNQVAoX0FUT01JQylcbiIpOworCQkJ cmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbGlzdF9hZGQoJnZhX2ttYXBsLT5saXN0LCAmZXhwb3J0 ZWQtPnZhX2ttYXBwZWQtPmxpc3QpOworCQlicmVhazsKKworCWNhc2UgSFlQRVJfRE1BQlVGX09Q U19LVU5NQVBfQVRPTUlDOgorCWNhc2UgSFlQRVJfRE1BQlVGX09QU19LVU5NQVA6CisJCWlmIChs aXN0X2VtcHR5KCZleHBvcnRlZC0+dmFfa21hcHBlZC0+bGlzdCkpIHsKKwkJCWRldl9lcnIoaHlf ZHJ2X3ByaXYtPmRldiwKKwkJCQkiSFlQRVJfRE1BQlVGX09QU19LVU5NQVAoX0FUT01JQylcbiIp OworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJubyBtb3JlIGRtYWJ1ZiBWQSB0 byBiZSBmcmVlZFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCisJCXZhX2ttYXBsID0g bGlzdF9maXJzdF9lbnRyeSgmZXhwb3J0ZWQtPnZhX2ttYXBwZWQtPmxpc3QsCisJCQkJCSAgICBz dHJ1Y3Qga21hcF92YWRkcl9saXN0LCBsaXN0KTsKKwkJaWYgKCF2YV9rbWFwbC0+dmFkZHIpIHsK KwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwKKwkJCQkiSFlQRVJfRE1BQlVGX09QU19LVU5N QVAoX0FUT01JQylcbiIpOworCQkJcmV0dXJuIFBUUl9FUlIodmFfa21hcGwtPnZhZGRyKTsKKwkJ fQorCisJCS8qIHVubWFwcGluZyAxIHBhZ2UgKi8KKwkJaWYgKG9wcyA9PSBIWVBFUl9ETUFCVUZf T1BTX0tVTk1BUF9BVE9NSUMpCisJCQlkbWFfYnVmX2t1bm1hcF9hdG9taWMoZXhwb3J0ZWQtPmRt YV9idWYsCisJCQkJCSAgICAgIDEsIHZhX2ttYXBsLT52YWRkcik7CisJCWVsc2UKKwkJCWRtYV9i dWZfa3VubWFwKGV4cG9ydGVkLT5kbWFfYnVmLAorCQkJCSAgICAgICAxLCB2YV9rbWFwbC0+dmFk ZHIpOworCisJCWxpc3RfZGVsKCZ2YV9rbWFwbC0+bGlzdCk7CisJCWtmcmVlKHZhX2ttYXBsKTsK KwkJYnJlYWs7CisKKwljYXNlIEhZUEVSX0RNQUJVRl9PUFNfTU1BUDoKKwkJLyogY3VycmVudGx5 IG5vdCBzdXBwb3J0ZWQ6IGxvb2tpbmcgZm9yIGEgd2F5IHRvIGNyZWF0ZQorCQkgKiBhIGR1bW15 IHZtYQorCQkgKi8KKwkJZGV2X3dhcm4oaHlfZHJ2X3ByaXYtPmRldiwKKwkJCSAicmVtb3RlIHN5 bmM6OnN5Y2hyb25pemVkIG1tYXAgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCWJyZWFrOworCisJ Y2FzZSBIWVBFUl9ETUFCVUZfT1BTX1ZNQVA6CisJCXZhX3ZtYXBsID0ga2NhbGxvYygxLCBzaXpl b2YoKnZhX3ZtYXBsKSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCF2YV92bWFwbCkKKwkJCXJldHVy biAtRU5PTUVNOworCisJCS8qIGR1bW15IHZtYXBwaW5nICovCisJCXZhX3ZtYXBsLT52YWRkciA9 IGRtYV9idWZfdm1hcChleHBvcnRlZC0+ZG1hX2J1Zik7CisKKwkJaWYgKCF2YV92bWFwbC0+dmFk ZHIpIHsKKwkJCWtmcmVlKHZhX3ZtYXBsKTsKKwkJCWRldl9lcnIoaHlfZHJ2X3ByaXYtPmRldiwK KwkJCQkicmVtb3RlIHN5bmM6OkhZUEVSX0RNQUJVRl9PUFNfVk1BUFxuIik7CisJCQlyZXR1cm4g LUVOT01FTTsKKwkJfQorCQlsaXN0X2FkZCgmdmFfdm1hcGwtPmxpc3QsICZleHBvcnRlZC0+dmFf dm1hcHBlZC0+bGlzdCk7CisJCWJyZWFrOworCisJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1ZVTk1B UDoKKwkJaWYgKGxpc3RfZW1wdHkoJmV4cG9ydGVkLT52YV92bWFwcGVkLT5saXN0KSkgeworCQkJ ZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVG X09QU19WVU5NQVBcbiIpOworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2LAorCQkJCSJubyBt b3JlIGRtYWJ1ZiBWQSB0byBiZSBmcmVlZFxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQor CQl2YV92bWFwbCA9IGxpc3RfZmlyc3RfZW50cnkoJmV4cG9ydGVkLT52YV92bWFwcGVkLT5saXN0 LAorCQkJCQlzdHJ1Y3Qgdm1hcF92YWRkcl9saXN0LCBsaXN0KTsKKwkJaWYgKCF2YV92bWFwbCB8 fCB2YV92bWFwbC0+dmFkZHIgPT0gTlVMTCkgeworCQkJZGV2X2VycihoeV9kcnZfcHJpdi0+ZGV2 LAorCQkJCSJyZW1vdGUgc3luYzo6SFlQRVJfRE1BQlVGX09QU19WVU5NQVBcbiIpOworCQkJcmV0 dXJuIC1FRkFVTFQ7CisJCX0KKworCQlkbWFfYnVmX3Z1bm1hcChleHBvcnRlZC0+ZG1hX2J1Ziwg dmFfdm1hcGwtPnZhZGRyKTsKKworCQlsaXN0X2RlbCgmdmFfdm1hcGwtPmxpc3QpOworCQlrZnJl ZSh2YV92bWFwbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogcHJvZ3JhbSBzaG91bGQg bm90IGdldCBoZXJlICovCisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9kbWEtYnVmL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMu aCBiL2RyaXZlcnMvZG1hLWJ1Zi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90ZV9zeW5j LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hNjU5YzgzYzhmMjcK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RtYS1idWYvaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9yZW1vdGVfc3luYy5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg MjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNv cHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICog cGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFs IHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBS T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug QU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBP UiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwt Mi4wKQorICoKKyAqLworCisjaWZuZGVmIF9fSFlQRVJfRE1BQlVGX1JFTU9URV9TWU5DX0hfXwor I2RlZmluZSBfX0hZUEVSX0RNQUJVRl9SRU1PVEVfU1lOQ19IX18KKworaW50IGh5cGVyX2RtYWJ1 Zl9yZW1vdGVfc3luYyhoeXBlcl9kbWFidWZfaWRfdCBoaWQsIGludCBvcHMpOworCisjZW5kaWYg Ly8gX19IWVBFUl9ETUFCVUZfUkVNT1RFX1NZTkNfSF9fCi0tIAoyLjE2LjEKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl Y3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs