From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhi Wang Subject: [RFCv5 2/2] drm/i915: Introduce private PAT management Date: Tue, 29 Aug 2017 16:00:51 +0800 Message-ID: <1503993651-25665-2-git-send-email-zhi.a.wang@intel.com> References: <1503993651-25665-1-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1503993651-25665-1-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org Cc: Rodrigo Vivi , Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org VGhlIHByaXZhdGUgUEFUIG1hbmFnZW1lbnQgaXMgdG8gc3VwcG9ydCBQUEFUIGVudHJ5IG1hbmlw dWxhdGlvbi4gVHdvCkFQSXMgYXJlIGludHJvZHVjZWQgZm9yIGR5bmFtaWNhbGx5IG1hbmFnaW5n IFBQQVQgZW50cmllczogaW50ZWxfcHBhdF9nZXQKYW5kIGludGVsX3BwYXRfcHV0LgoKaW50ZWxf cHBhdF9nZXQgd2lsbCBzZWFyY2ggZm9yIGFuIGV4aXN0aW5nIFBQQVQgZW50cnkgd2hpY2ggcGVy ZmVjdGx5Cm1hdGNoZXMgdGhlIHJlcXVpcmVkIFBQQVQgdmFsdWUuIElmIG5vdCwgaXQgd2lsbCB0 cnkgdG8gYWxsb2NhdGUgb3IKcmV0dXJuIGEgcGFydGlhbGx5IG1hdGNoZWQgUFBBVCBlbnRyeSBp ZiB0aGVyZSBpcyBhbnkgYXZhaWxhYmxlIFBQQVQKaW5kZXhlcyBvciBub3QuCgppbnRlbF9wcGF0 X3B1dCB3aWxsIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IHdoaWNoIGNvbWVzIGZyb20KaW50ZWxf cHBhdF9nZXQuIElmIGl0J3MgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCB0aGUgcmVmZXJlbmNlIGNv dW50IHdpbGwKYmUgZGVjcmVhc2VkLiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IHR1cm5zIGludG8g emVybywgdGhlIFBQQVQgaW5kZXggaXMKZnJlZWQgYWdhaW4uCgpCZXNpZGVzLCBhbm90aGVyIHR3 byBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgdG8gc3VwcG9ydCB0aGUgcHJpdmF0ZSBQQVQKbWFu YWdlbWVudCBmcmFtZXdvcmsuIE9uZSBpcyBwcGF0LT51cGRhdGUoKSwgd2hpY2ggd3JpdGVzIHRo ZSBQUEFUCmNvbmZpZ3VyYXRpb25zIGluIHBwYXQtPmVudHJpZXMgaW50byBIVy4gQW5vdGhlciBv bmUgaXMgcHBhdC0+bWF0Y2gsIHdoaWNoCndpbGwgcmV0dXJuIGEgc2NvcmUgdG8gc2hvdyBob3cg dHdvIFBQQVQgdmFsdWVzIG1hdGNoIHdpdGggZWFjaCBvdGhlci4KCnY1OgoKLSBBZGQgY2hlY2sg YW5kIHdhcm5uaW5ncyBmb3IgdGhvc2UgcGxhdGZvcm1zIHdoaWNoIGRvbid0IGhhdmUgUFBBVC4K CnYzOgoKLSBJbnRyb2R1Y2UgZGlydHkgYml0bWFwIGZvciBQUEFUIHJlZ2lzdGVycy4gKENocmlz KQotIENoYW5nZSB0aGUgbmFtZSBvZiB0aGUgcG9pbnRlciAiZGV2X3ByaXYiIHRvICJpOTE1Ii4g KENocmlzKQotIGludGVsX3BwYXRfe2dldCwgcHV0fSByZXR1cm5zL3Rha2VzIGEgY29uc3QgaW50 ZWxfcHBhdF9lbnRyeSAqLiAoQ2hyaXMpCgp2MjoKCi0gQVBJIHJlLWRlc2lnbi4gKENocmlzKQoK Q2M6IEJlbiBXaWRhd3NreSA8YmVuamFtaW4ud2lkYXdza3lAaW50ZWwuY29tPgpDYzogUm9kcmln byBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwuY29tPgpDYzogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+CkNjOiBKb29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBs aW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVs LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICB8ICAgMiArCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyB8IDI4OSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5o IHwgIDM0ICsrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI3NiBpbnNlcnRpb25zKCspLCA0OSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCA3NTg3ZWY1Li41ZmZkZTEwIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTIzMTIsNiArMjMxMiw4IEBAIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsKIAlERUNMQVJFX0hBU0hUQUJMRShtbV9zdHJ1Y3RzLCA3KTsKIAlzdHJ1 Y3QgbXV0ZXggbW1fbG9jazsKIAorCXN0cnVjdCBpbnRlbF9wcGF0IHBwYXQ7CisKIAkvKiBLZXJu ZWwgTW9kZXNldHRpbmcgKi8KIAogCXN0cnVjdCBpbnRlbF9jcnRjICpwbGFuZV90b19jcnRjX21h cHBpbmdbSTkxNV9NQVhfUElQRVNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwppbmRl eCBiNzRmYTlkLi5iOTliNmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAt MjgxNiw0MSArMjgxNiwyMTUgQEAgc3RhdGljIGludCBnZ3R0X3Byb2JlX2NvbW1vbihzdHJ1Y3Qg aTkxNV9nZ3R0ICpnZ3R0LCB1NjQgc2l6ZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQg Y25sX3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CitzdGF0aWMgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmFsbG9jX3BwYXRfZW50cnkoc3RydWN0 IGludGVsX3BwYXQgKnBwYXQsCisJCQkJCQkgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCQkJIHU4 IHZhbHVlKQogeworCXN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSA9ICZwcGF0LT5lbnRy aWVzW2luZGV4XTsKKworCWVudHJ5LT5wcGF0ID0gcHBhdDsKKwllbnRyeS0+dmFsdWUgPSB2YWx1 ZTsKKwlrcmVmX2luaXQoJmVudHJ5LT5yZWZfY291bnQpOworCXNldF9iaXQoaW5kZXgsIHBwYXQt PnVzZWQpOworCXNldF9iaXQoaW5kZXgsIHBwYXQtPmRpcnR5KTsKKworCXJldHVybiBlbnRyeTsK K30KKworc3RhdGljIHZvaWQgZnJlZV9wcGF0X2VudHJ5KHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5 ICplbnRyeSkKK3sKKwlzdHJ1Y3QgaW50ZWxfcHBhdCAqcHBhdCA9IGVudHJ5LT5wcGF0OworCWlu dCBpbmRleCA9IGVudHJ5IC0gcHBhdC0+ZW50cmllczsKKworCWVudHJ5LT52YWx1ZSA9IHBwYXQt PmR1bW15X3ZhbHVlOworCWNsZWFyX2JpdChpbmRleCwgcHBhdC0+dXNlZCk7CisJc2V0X2JpdChp bmRleCwgcHBhdC0+ZGlydHkpOworfQorCisvKioKKyAqIGludGVsX3BwYXRfZ2V0IC0gZ2V0IGEg dXNhYmxlIFBQQVQgZW50cnkKKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICogQHZh bHVlOiB0aGUgUFBBVCB2YWx1ZSByZXF1aXJlZCBieSB0aGUgY2FsbGVyCisgKgorICogVGhlIGZ1 bmN0aW9uIHRyaWVzIHRvIHNlYXJjaCBpZiB0aGVyZSBpcyBhbiBleGlzdGluZyBQUEFUIGVudHJ5 IHdoaWNoCisgKiBtYXRjaGVzIHdpdGggdGhlIHJlcXVpcmVkIHZhbHVlLiBJZiBwZXJmZWN0bHkg bWF0Y2hlZCwgdGhlIGV4aXN0aW5nIFBQQVQKKyAqIGVudHJ5IHdpbGwgYmUgdXNlZC4gSWYgb25s eSBwYXJ0aWFsbHkgbWF0Y2hlZCwgaXQgd2lsbCB0cnkgdG8gY2hlY2sgaWYKKyAqIHRoZXJlIGlz IGFueSBhdmFpbGFibGUgUFBBVCBpbmRleC4gSWYgeWVzLCBpdCB3aWxsIGFsbG9jYXRlIGEgbmV3 IFBQQVQKKyAqIGluZGV4IGZvciB0aGUgcmVxdWlyZWQgZW50cnkgYW5kIHVwZGF0ZSB0aGUgSFcu IElmIG5vdCwgdGhlIHBhcnRpYWxseQorICogbWF0Y2hlZCBlbnRyeSB3aWxsIGJlIHVzZWQuCisg Ki8KK2NvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICppbnRlbF9wcGF0X2dldChzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKKwkJCQkJICAgICAgdTggdmFsdWUpCit7CisJc3RydWN0 IGludGVsX3BwYXQgKnBwYXQgPSAmaTkxNS0+cHBhdDsKKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRy eSAqZW50cnk7CisJaW50IGksIHVzZWQ7CisJdW5zaWduZWQgaW50IHNjb3JlLCBiZXN0X3Njb3Jl OworCisJaWYgKFdBUk5fT04oIXBwYXQtPm1heF9lbnRyaWVzKSkKKwkJcmV0dXJuIEVSUl9QVFIo LUVOT0RFVik7CisKKwlzY29yZSA9IGJlc3Rfc2NvcmUgPSAwOworCXVzZWQgPSAwOworCisJLyog Rmlyc3QsIGZpbmQgYSBzdWl0YWJsZSB2YWx1ZSBmcm9tIGF2YWlsYWJsZSBlbnRyaWVzICovCisJ Zm9yX2VhY2hfc2V0X2JpdChpLCBwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcykgeworCQlz Y29yZSA9IHBwYXQtPm1hdGNoKHBwYXQtPmVudHJpZXNbaV0udmFsdWUsIHZhbHVlKTsKKwkJLyog UGVyZmVjdCBtYXRjaCAqLworCQlpZiAoc2NvcmUgPT0gSU5URUxfUFBBVF9QRVJGRUNUX01BVENI KSB7CisJCQllbnRyeSA9ICZwcGF0LT5lbnRyaWVzW2ldOworCQkJa3JlZl9nZXQoJmVudHJ5LT5y ZWZfY291bnQpOworCQkJcmV0dXJuIGVudHJ5OworCQl9CisKKwkJaWYgKHNjb3JlID4gYmVzdF9z Y29yZSkgeworCQkJZW50cnkgPSAmcHBhdC0+ZW50cmllc1tpXTsKKwkJCWJlc3Rfc2NvcmUgPSBz Y29yZTsKKwkJfQorCQl1c2VkKys7CisJfQorCisJLyogTm8gbWF0Y2hlZCBlbnRyeSBhbmQgd2Ug Y2FuJ3QgYWxsb2NhdGUgYSBuZXcgZW50cnkuICovCisJaWYgKCFiZXN0X3Njb3JlICYmIHVzZWQg PT0gcHBhdC0+bWF4X2VudHJpZXMpIHsKKwkJRFJNX0VSUk9SKCJGYWlsIHRvIGdldCBQUEFUIGVu dHJ5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CisJfQorCisJLyoKKwkgKiBGb3Vu ZCBhIG1hdGNoZWQgZW50cnkgd2hpY2ggaXMgbm90IHBlcmZlY3QsCisJICogYW5kIHdlIGNhbid0 IGFsbG9jYXRlIGEgbmV3IGVudHJ5LgorCSAqLworCWlmIChiZXN0X3Njb3JlICYmIHVzZWQgPT0g cHBhdC0+bWF4X2VudHJpZXMpIHsKKwkJa3JlZl9nZXQoJmVudHJ5LT5yZWZfY291bnQpOworCQly ZXR1cm4gZW50cnk7CisJfQorCisJLyogQWxsb2NhdGUgYSBuZXcgZW50cnkgKi8KKwlpID0gZmlu ZF9maXJzdF96ZXJvX2JpdChwcGF0LT51c2VkLCBwcGF0LT5tYXhfZW50cmllcyk7CisJZW50cnkg PSBhbGxvY19wcGF0X2VudHJ5KHBwYXQsIGksIHZhbHVlKTsKKwlwcGF0LT51cGRhdGUoaTkxNSk7 CisJcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgdm9pZCBwdXRfcHBhdChzdHJ1Y3Qga3JlZiAq a3JlZikKK3sKKwlzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSAqZW50cnkgPQorCQljb250YWluZXJf b2Yoa3JlZiwgc3RydWN0IGludGVsX3BwYXRfZW50cnksIHJlZl9jb3VudCk7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBlbnRyeS0+cHBhdC0+aTkxNTsKKworCWZyZWVfcHBhdF9l bnRyeShlbnRyeSk7CisJZW50cnktPnBwYXQtPnVwZGF0ZShpOTE1KTsKK30KKworLyoqCisgKiBp bnRlbF9wcGF0X3B1dCAtIHB1dCBiYWNrIHRoZSBQUEFUIGVudHJ5IGdvdCBmcm9tIGludGVsX3Bw YXRfZ2V0KCkKKyAqIEBlbnRyeTogYW4gaW50ZWwgUFBBVCBlbnRyeQorICoKKyAqIFB1dCBiYWNr IHRoZSBQUEFUIGVudHJ5IGdvdCBmcm9tIGludGVsX3BwYXRfZ2V0KCkuIElmIHRoZSBQUEFUIGlu ZGV4IG9mIHRoZQorICogZW50cnkgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBpdHMgcmVmZXJl bmNlIGNvdW50IHdpbGwgYmUgZGVjcmVhc2VkLiBPbmNlCisgKiB0aGUgcmVmZXJlbmNlIGNvdW50 IGJlY29tZXMgaW50byB6ZXJvLCB0aGUgUFBBVCBpbmRleCBiZWNvbWVzIGZyZWUgYWdhaW4uCisg Ki8KK3ZvaWQgaW50ZWxfcHBhdF9wdXQoY29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmVu dHJ5KQoreworCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gZW50cnktPnBwYXQ7CisJaW50IGlu ZGV4ID0gZW50cnkgLSBwcGF0LT5lbnRyaWVzOworCisJaWYgKFdBUk5fT04oIXBwYXQtPm1heF9l bnRyaWVzKSkKKwkJcmV0dXJuOworCisJa3JlZl9wdXQoJnBwYXQtPmVudHJpZXNbaW5kZXhdLnJl Zl9jb3VudCwgcHV0X3BwYXQpOworfQorCitzdGF0aWMgdm9pZCBjbmxfcHJpdmF0ZV9wYXRfdXBk YXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaW50ZWxf cHBhdCAqcHBhdCA9ICZkZXZfcHJpdi0+cHBhdDsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3NldF9i aXQoaSwgcHBhdC0+ZGlydHksIHBwYXQtPm1heF9lbnRyaWVzKSB7CisJCWNsZWFyX2JpdChpLCBw cGF0LT5kaXJ0eSk7CisJCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKGkpLCBwcGF0LT5lbnRy aWVzW2ldLnZhbHVlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJkd19wcml2YXRlX3BhdF91cGRh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQoreworCXN0cnVjdCBpbnRlbF9w cGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0OworCXU2NCBwYXQgPSAwOworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IHBwYXQtPm1heF9lbnRyaWVzOyBpKyspCisJCXBhdCB8PSBHRU44X1BQ QVQoaSwgcHBhdC0+ZW50cmllc1tpXS52YWx1ZSk7CisKKwliaXRtYXBfY2xlYXIocHBhdC0+ZGly dHksIDAsIHBwYXQtPm1heF9lbnRyaWVzKTsKKworCUk5MTVfV1JJVEUoR0VOOF9QUklWQVRFX1BB VF9MTywgcGF0KTsKKwlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHBhdCA+PiAzMik7 Cit9CisKKyNkZWZpbmUgZ2VuOF9wYXRfY2EodikgKCh2KSAmIDB4MykKKyNkZWZpbmUgZ2VuOF9w YXRfdGModikgKCgodikgPj4gMikgJiAweDMpCisjZGVmaW5lIGdlbjhfcGF0X2FnZSh2KSAoKCh2 KSA+PiA0KSAmIDB4MykKKworc3RhdGljIHVuc2lnbmVkIGludCBiZHdfcHJpdmF0ZV9wYXRfbWF0 Y2godTggc3JjLCB1OCBkc3QpCit7CisJdW5zaWduZWQgaW50IHNjb3JlID0gMDsKKworCS8qIENh Y2hlIGF0dHJpYnV0ZSBoYXMgdG8gYmUgbWF0Y2hlZC4gKi8KKwlpZiAoZ2VuOF9wYXRfY2Eoc3Jj KSAhPSBnZW44X3BhdF9jYShkc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChnZW44X3BhdF9hZ2Uo c3JjKSA9PSBnZW44X3BhdF9hZ2UoZHN0KSkKKwkJc2NvcmUgKz0gMTsKKworCWlmIChnZW44X3Bh dF90YyhzcmMpID09IGdlbjhfcGF0X3RjKGRzdCkpCisJCXNjb3JlICs9IDI7CisKKwlpZiAoc2Nv cmUgPT0gMykKKwkJcmV0dXJuIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSDsKKworCXJldHVybiBz Y29yZTsKK30KKworI2RlZmluZSBjaHZfZ2V0X3Nub29wKHYpICgoKHYpID4+IDYpICYgMHgxKQor CitzdGF0aWMgdW5zaWduZWQgaW50IGNodl9wcml2YXRlX3BhdF9tYXRjaCh1OCBzcmMsIHU4IGRz dCkKK3sKKwlpZiAoY2h2X2dldF9zbm9vcChzcmMpID09IGNodl9nZXRfc25vb3AoZHN0KSkKKwkJ cmV0dXJuIElOVEVMX1BQQVRfUEVSRkVDVF9NQVRDSDsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCBjbmxfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQor eworCXBwYXQtPm1heF9lbnRyaWVzID0gODsKKwlwcGF0LT51cGRhdGUgPSBjbmxfcHJpdmF0ZV9w YXRfdXBkYXRlOworCXBwYXQtPm1hdGNoID0gYmR3X3ByaXZhdGVfcGF0X21hdGNoOworCXBwYXQt PmR1bW15X3ZhbHVlID0gR0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDMpOworCiAJ LyogWFhYOiBzcGVjIGlzIHVuY2xlYXIgaWYgdGhpcyBpcyBzdGlsbCBuZWVkZWQgZm9yIENOTCsg Ki8KLQlpZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKSB7Ci0JCUk5MTVfV1JJVEUoR0VOMTBfUEFU X0lOREVYKDApLCBHRU44X1BQQVRfVUMpOworCWlmICghVVNFU19QUEdUVChwcGF0LT5pOTE1KSkg eworCQlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDAsIEdFTjhfUFBBVF9VQyk7CiAJCXJldHVybjsK IAl9CiAKLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgwKSwgR0VOOF9QUEFUX1dCIHwgR0VO OF9QUEFUX0xMQyk7Ci0JSTkxNV9XUklURShHRU4xMF9QQVRfSU5ERVgoMSksIEdFTjhfUFBBVF9X QyB8IEdFTjhfUFBBVF9MTENFTExDKTsKLQlJOTE1X1dSSVRFKEdFTjEwX1BBVF9JTkRFWCgyKSwg R0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOwotCUk5MTVfV1JJVEUoR0VOMTBfUEFU X0lOREVYKDMpLCBHRU44X1BQQVRfVUMpOwotCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDQp LCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMCkpOwotCUk5MTVfV1JJVEUoR0VO MTBfUEFUX0lOREVYKDUpLCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMSkpOwot CUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDYpLCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhf UFBBVF9BR0UoMikpOwotCUk5MTVfV1JJVEUoR0VOMTBfUEFUX0lOREVYKDcpLCBHRU44X1BQQVRf TExDRUxMQyB8IEdFTjhfUFBBVF9BR0UoMykpOworCWFsbG9jX3BwYXRfZW50cnkocHBhdCwgMCwg R0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFUX0xMQyk7CisJYWxsb2NfcHBhdF9lbnRyeShwcGF0LCAy LCBHRU44X1BQQVRfV1QgfCBHRU44X1BQQVRfTExDRUxMQyk7CisJYWxsb2NfcHBhdF9lbnRyeShw cGF0LCAzLCBHRU44X1BQQVRfVUMpOworCWFsbG9jX3BwYXRfZW50cnkocHBhdCwgNCwgR0VOOF9Q UEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDApKTsKIH0KIAogLyogVGhlIEdHVFQgYW5kIFBQ R1RUIG5lZWQgYSBwcml2YXRlIFBQQVQgc2V0dXAgaW4gb3JkZXIgdG8gaGFuZGxlIGNhY2hlYWJp bGl0eQogICogYml0cy4gV2hlbiB1c2luZyBhZHZhbmNlZCBjb250ZXh0cyBlYWNoIGNvbnRleHQg c3RvcmVzIGl0cyBvd24gUEFULCBidXQKICAqIHdyaXRpbmcgdGhpcyBkYXRhIHNob3VsZG4ndCBi ZSBoYXJtZnVsIGV2ZW4gaW4gdGhvc2UgY2FzZXMuICovCi1zdGF0aWMgdm9pZCBiZHdfc2V0dXBf cHJpdmF0ZV9wcGF0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3N0YXRpYyB2 b2lkIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGludGVsX3BwYXQgKnBwYXQpCiB7Ci0J dTY0IHBhdDsKLQotCXBhdCA9IEdFTjhfUFBBVCgwLCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRf TExDKSAgICAgfCAvKiBmb3Igbm9ybWFsIG9iamVjdHMsIG5vIGVMTEMgKi8KLQkgICAgICBHRU44 X1BQQVQoMSwgR0VOOF9QUEFUX1dDIHwgR0VOOF9QUEFUX0xMQ0VMTEMpIHwgLyogZm9yIHNvbWV0 aGluZyBwb2ludGluZyB0byBwdGVzPyAqLwotCSAgICAgIEdFTjhfUFBBVCgyLCBHRU44X1BQQVRf V1QgfCBHRU44X1BQQVRfTExDRUxMQykgfCAvKiBmb3Igc2Nhbm91dCB3aXRoIGVMTEMgKi8KLQkg ICAgICBHRU44X1BQQVQoMywgR0VOOF9QUEFUX1VDKSAgICAgICAgICAgICAgICAgICAgIHwgLyog VW5jYWNoZWQgb2JqZWN0cywgbW9zdGx5IGZvciBzY2Fub3V0ICovCi0JICAgICAgR0VOOF9QUEFU KDQsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgwKSkg fAotCSAgICAgIEdFTjhfUFBBVCg1LCBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8 IEdFTjhfUFBBVF9BR0UoMSkpIHwKLQkgICAgICBHRU44X1BQQVQoNiwgR0VOOF9QUEFUX1dCIHwg R0VOOF9QUEFUX0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDIpKSB8Ci0JICAgICAgR0VOOF9QUEFU KDcsIEdFTjhfUFBBVF9XQiB8IEdFTjhfUFBBVF9MTENFTExDIHwgR0VOOF9QUEFUX0FHRSgzKSk7 CisJcHBhdC0+bWF4X2VudHJpZXMgPSA4OworCXBwYXQtPnVwZGF0ZSA9IGJkd19wcml2YXRlX3Bh dF91cGRhdGU7CisJcHBhdC0+bWF0Y2ggPSBiZHdfcHJpdmF0ZV9wYXRfbWF0Y2g7CisJcHBhdC0+ ZHVtbXlfdmFsdWUgPSBHRU44X1BQQVRfV0IgfCBHRU44X1BQQVRfTExDRUxMQyB8IEdFTjhfUFBB VF9BR0UoMyk7CiAKLQlpZiAoIVVTRVNfUFBHVFQoZGV2X3ByaXYpKQorCWlmICghVVNFU19QUEdU VChkZXZfcHJpdikpIHsKIAkJLyogU3BlYzogIkZvciBHR1RULCB0aGVyZSBpcyBOTyBwYXRfc2Vs WzI6MF0gZnJvbSB0aGUgZW50cnksCiAJCSAqIHNvIFJUTCB3aWxsIGFsd2F5cyB1c2UgdGhlIHZh bHVlIGNvcnJlc3BvbmRpbmcgdG8KIAkJICogcGF0X3NlbCA9IDAwMCIuCkBAIC0yODY0LDE3ICsz MDM4LDIyIEBAIHN0YXRpYyB2b2lkIGJkd19zZXR1cF9wcml2YXRlX3BwYXQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQkgKiBTbyB3ZSBjYW4gc3RpbGwgaG9sZCBvbnRvIGFs bCBvdXIgYXNzdW1wdGlvbnMgd3J0IGNwdQogCQkgKiBjbGZsdXNoaW5nIG9uIExMQyBtYWNoaW5l cy4KIAkJICovCi0JCXBhdCA9IEdFTjhfUFBBVCgwLCBHRU44X1BQQVRfVUMpOworCQlhbGxvY19w cGF0X2VudHJ5KHBwYXQsIDAsIEdFTjhfUFBBVF9VQyk7CisJCXJldHVybjsKKwl9CiAKLQkvKiBY WFg6IHNwZWMgZGVmaW5lcyB0aGlzIGFzIDIgZGlzdGluY3QgcmVnaXN0ZXJzLiBJdCdzIHVuY2xl YXIgaWYgYSA2NGIKLQkgKiB3cml0ZSB3b3VsZCB3b3JrLiAqLwotCUk5MTVfV1JJVEUoR0VOOF9Q UklWQVRFX1BBVF9MTywgcGF0KTsKLQlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfSEksIHBh dCA+PiAzMik7CisJYWxsb2NfcHBhdF9lbnRyeShwcGF0LCAwLCBHRU44X1BQQVRfV0IgfCBHRU44 X1BQQVRfTExDKTsgICAgIC8qIGZvciBub3JtYWwgb2JqZWN0cywgbm8gZUxMQyAqLworCWFsbG9j X3BwYXRfZW50cnkocHBhdCwgMiwgR0VOOF9QUEFUX1dUIHwgR0VOOF9QUEFUX0xMQ0VMTEMpOyAv KiBmb3Igc2Nhbm91dCB3aXRoIGVMTEMgKi8KKwlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDMsIEdF TjhfUFBBVF9VQyk7CQkgICAgIC8qIFVuY2FjaGVkIG9iamVjdHMsIG1vc3RseSBmb3Igc2Nhbm91 dCAqLworCWFsbG9jX3BwYXRfZW50cnkocHBhdCwgNCwgR0VOOF9QUEFUX1dCIHwgR0VOOF9QUEFU X0xMQ0VMTEMgfCBHRU44X1BQQVRfQUdFKDApKTsKIH0KIAotc3RhdGljIHZvaWQgY2h2X3NldHVw X3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitzdGF0aWMg dm9pZCBjaHZfc2V0dXBfcHJpdmF0ZV9wcGF0KHN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0KQogewot CXU2NCBwYXQ7CisJcHBhdC0+bWF4X2VudHJpZXMgPSA4OworCXBwYXQtPnVwZGF0ZSA9IGJkd19w cml2YXRlX3BhdF91cGRhdGU7CisJcHBhdC0+bWF0Y2ggPSBjaHZfcHJpdmF0ZV9wYXRfbWF0Y2g7 CisJcHBhdC0+ZHVtbXlfdmFsdWUgPSBDSFZfUFBBVF9TTk9PUDsKIAogCS8qCiAJICogTWFwIFdC IG9uIEJEVyB0byBzbm9vcGVkIG9uIENIVi4KQEAgLTI4OTQsMTcgKzMwNzMsMTEgQEAgc3RhdGlj IHZvaWQgY2h2X3NldHVwX3ByaXZhdGVfcHBhdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpCiAJICogV2hpY2ggbWVhbnMgd2UgbXVzdCBzZXQgdGhlIHNub29wIGJpdCBpbiBQQVQg ZW50cnkgMAogCSAqIGluIG9yZGVyIHRvIGtlZXAgdGhlIGdsb2JhbCBzdGF0dXMgcGFnZSB3b3Jr aW5nLgogCSAqLwotCXBhdCA9IEdFTjhfUFBBVCgwLCBDSFZfUFBBVF9TTk9PUCkgfAotCSAgICAg IEdFTjhfUFBBVCgxLCAwKSB8Ci0JICAgICAgR0VOOF9QUEFUKDIsIDApIHwKLQkgICAgICBHRU44 X1BQQVQoMywgMCkgfAotCSAgICAgIEdFTjhfUFBBVCg0LCBDSFZfUFBBVF9TTk9PUCkgfAotCSAg ICAgIEdFTjhfUFBBVCg1LCBDSFZfUFBBVF9TTk9PUCkgfAotCSAgICAgIEdFTjhfUFBBVCg2LCBD SFZfUFBBVF9TTk9PUCkgfAotCSAgICAgIEdFTjhfUFBBVCg3LCBDSFZfUFBBVF9TTk9PUCk7CiAK LQlJOTE1X1dSSVRFKEdFTjhfUFJJVkFURV9QQVRfTE8sIHBhdCk7Ci0JSTkxNV9XUklURShHRU44 X1BSSVZBVEVfUEFUX0hJLCBwYXQgPj4gMzIpOworCWFsbG9jX3BwYXRfZW50cnkocHBhdCwgMCwg Q0hWX1BQQVRfU05PT1ApOworCWFsbG9jX3BwYXRfZW50cnkocHBhdCwgMiwgMCk7CisJYWxsb2Nf cHBhdF9lbnRyeShwcGF0LCAzLCAwKTsKKwlhbGxvY19wcGF0X2VudHJ5KHBwYXQsIDQsIENIVl9Q UEFUX1NOT09QKTsKIH0KIAogc3RhdGljIHZvaWQgZ2VuNl9nbWNoX3JlbW92ZShzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSkKQEAgLTI5MTcsMTIgKzMwOTAsMzMgQEAgc3RhdGljIHZvaWQg Z2VuNl9nbWNoX3JlbW92ZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSkKIAogc3RhdGlj IHZvaWQgc2V0dXBfcHJpdmF0ZV9wYXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQogeworCXN0cnVjdCBpbnRlbF9wcGF0ICpwcGF0ID0gJmRldl9wcml2LT5wcGF0OworCWludCBp OworCisJcHBhdC0+aTkxNSA9IGRldl9wcml2OworCisJLyogTG9hZCBwZXItcGxhdGZvcm0gUFBB VCBjb25maWd1cmF0aW9ucyAqLwogCWlmIChJTlRFTF9HRU4oZGV2X3ByaXYpID49IDEwKQotCQlj bmxfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsKKwkJY25sX3NldHVwX3ByaXZhdGVfcHBh dChwcGF0KTsKIAllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2KSB8fCBJU19HRU45X0xQ KGRldl9wcml2KSkKLQkJY2h2X3NldHVwX3ByaXZhdGVfcHBhdChkZXZfcHJpdik7CisJCWNodl9z ZXR1cF9wcml2YXRlX3BwYXQocHBhdCk7CiAJZWxzZQotCQliZHdfc2V0dXBfcHJpdmF0ZV9wcGF0 KGRldl9wcml2KTsKKwkJYmR3X3NldHVwX3ByaXZhdGVfcHBhdChwcGF0KTsKKworCUdFTV9CVUdf T04ocHBhdC0+bWF4X2VudHJpZXMgPiBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTKTsKKworCWlmICgh cHBhdC0+bWF4X2VudHJpZXMpCisJCXJldHVybjsKKworCS8qIEZpbGwgdW51c2VkIFBQQVQgZW50 cmllcyB3aXRoIGR1bW15IFBQQVQgdmFsdWUgKi8KKwlmb3JfZWFjaF9jbGVhcl9iaXQoaSwgcHBh dC0+dXNlZCwgcHBhdC0+bWF4X2VudHJpZXMpIHsKKwkJcHBhdC0+ZW50cmllc1tpXS52YWx1ZSA9 IHBwYXQtPmR1bW15X3ZhbHVlOworCQlwcGF0LT5lbnRyaWVzW2ldLnBwYXQgPSBwcGF0OworCQlz ZXRfYml0KGksIHBwYXQtPmRpcnR5KTsKKwl9CisKKwkvKiBXcml0ZSB0aGUgSFcgKi8KKwlwcGF0 LT51cGRhdGUoZGV2X3ByaXYpOwogfQogCiBzdGF0aWMgaW50IGdlbjhfZ21jaF9wcm9iZShzdHJ1 Y3QgaTkxNV9nZ3R0ICpnZ3R0KQpAQCAtMzIzNiwxMyArMzQzMCwxMCBAQCB2b2lkIGk5MTVfZ2Vt X3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAlnZ3R0LT5iYXNlLmNsb3NlZCA9IGZhbHNlOwogCiAJaWYgKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gOCkgewotCQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMCkKLQkJCWNubF9zZXR1cF9w cml2YXRlX3BwYXQoZGV2X3ByaXYpOwotCQllbHNlIGlmIChJU19DSEVSUllWSUVXKGRldl9wcml2 KSB8fCBJU19HRU45X0xQKGRldl9wcml2KSkKLQkJCWNodl9zZXR1cF9wcml2YXRlX3BwYXQoZGV2 X3ByaXYpOwotCQllbHNlCi0JCQliZHdfc2V0dXBfcHJpdmF0ZV9wcGF0KGRldl9wcml2KTsKKwkJ c3RydWN0IGludGVsX3BwYXQgKnBwYXQgPSAmZGV2X3ByaXYtPnBwYXQ7CiAKKwkJYml0bWFwX3Nl dChwcGF0LT5kaXJ0eSwgMCwgcHBhdC0+bWF4X2VudHJpZXMpOworCQlkZXZfcHJpdi0+cHBhdC51 cGRhdGUoZGV2X3ByaXYpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oCmluZGV4IGI0ZTNhYTcuLjZiZjU1MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oCkBAIC01MzYsNiArNTM2LDQwIEBAIGk5MTVfdm1fdG9fZ2d0dChzdHJ1Y3QgaTkxNV9h ZGRyZXNzX3NwYWNlICp2bSkKIAlyZXR1cm4gY29udGFpbmVyX29mKHZtLCBzdHJ1Y3QgaTkxNV9n Z3R0LCBiYXNlKTsKIH0KIAorI2RlZmluZSBJTlRFTF9NQVhfUFBBVF9FTlRSSUVTIDgKKyNkZWZp bmUgSU5URUxfUFBBVF9QRVJGRUNUX01BVENIICh+MFUpCisKK3N0cnVjdCBpbnRlbF9wcGF0Owor CitzdHJ1Y3QgaW50ZWxfcHBhdF9lbnRyeSB7CisJc3RydWN0IGludGVsX3BwYXQgKnBwYXQ7CisJ c3RydWN0IGtyZWYgcmVmX2NvdW50OworCXU4IHZhbHVlOworfTsKKworc3RydWN0IGludGVsX3Bw YXQgeworCXN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5IGVudHJpZXNbSU5URUxfTUFYX1BQQVRfRU5U UklFU107CisJREVDTEFSRV9CSVRNQVAodXNlZCwgSU5URUxfTUFYX1BQQVRfRU5UUklFUyk7CisJ REVDTEFSRV9CSVRNQVAoZGlydHksIElOVEVMX01BWF9QUEFUX0VOVFJJRVMpOworCisJdW5zaWdu ZWQgaW50IG1heF9lbnRyaWVzOworCisJdTggZHVtbXlfdmFsdWU7CisJLyoKKwkgKiBSZXR1cm4g YSBzY29yZSB0byBzaG93IGhvdyB0d28gUFBBVCB2YWx1ZXMgbWF0Y2gsCisJICogYSBJTlRFTF9Q UEFUX1BFUkZFQ1RfTUFUQ0ggaW5kaWNhdGVzIGEgcGVyZmVjdCBtYXRjaAorCSAqLworCXVuc2ln bmVkIGludCAoKm1hdGNoKSh1OCBzcmMsIHU4IGRzdCk7CisJLyogV3JpdGUgdGhlIFBQQVQgY29u ZmlndXJhdGlvbiBpbnRvIEhXLiAqLworCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1KTsKKworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1OworfTsKKwor Y29uc3Qgc3RydWN0IGludGVsX3BwYXRfZW50cnkgKmludGVsX3BwYXRfZ2V0KHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1LAorCQkJCQkgICAgICB1OCB2YWx1ZSk7Cit2b2lkIGludGVsX3Bw YXRfcHV0KGNvbnN0IHN0cnVjdCBpbnRlbF9wcGF0X2VudHJ5ICplbnRyeSk7CisKIGludCBpOTE1 X2dlbV9pbml0X2FsaWFzaW5nX3BwZ3R0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsK IHZvaWQgaTkxNV9nZW1fZmluaV9hbGlhc2luZ19wcGd0dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSk7CiAKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK