From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Herrmann Subject: [PATCH v5 4/7] video: add generic framebuffer eviction Date: Fri, 2 Sep 2016 10:22:42 +0200 Message-ID: <20160902082245.7119-5-dh.herrmann@gmail.com> References: <20160902082245.7119-1-dh.herrmann@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 99FD46EA30 for ; Fri, 2 Sep 2016 08:23:22 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id w207so1850198wmw.0 for ; Fri, 02 Sep 2016 01:23:22 -0700 (PDT) In-Reply-To: <20160902082245.7119-1-dh.herrmann@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlcmUgYXJlIHNldmVyYWwgc2l0dWF0aW9ucyB3aGVyZSB3ZSB3YW50IGhhcmR3YXJlIGhhbmRv dmVyIGZyb20gYW4gZWFybHkKYm9vdCBHRlggZHJpdmVyIChlLmcuLCB2Z2Fjb24sIHZlc2FmYiwg ZWZpZmIsIHNpbXBsZWZiKSB0byBhIGZ1bGwgZmxldGNoZWQKR0ZYIGRyaXZlciAoZS5nLiwgbW9z dCBEUk0gZHJpdmVycykuIFNvIGZhciwgd2UgcmVsaWVkIG9uCnJlbW92ZV9jb25mbGljdGluZ19m cmFtZWJ1ZmZlcnMoKSB0byBkbyB0aGlzIGZvciB1cywgaG93ZXZlciwgdGhpcyBoYWQgYQpidW5j aCBvZiBkb3duc2lkZXM6CgogIG8gSXQgb25seSByZW1vdmVzIGNvbmZsaWN0aW5nIGZiZGV2IGRy aXZlcnMuIEl0IGRvZXMgbm90IGRyb3AgdmdhY29uLAogICAgZWFybHkgYm9vdCBjb25zb2xlIGRy aXZlcnMsIGNvbmZsaWN0aW5nIERSTSBkcml2ZXJzLCBldGMuCgogIG8gSXQgb25seSB1bmxvYWRz IHRoZSBmYmRldiBkcml2ZXIsIGl0IGRvZXMgbm90IG1vZGlmeSB0aGUgdW5kZXJseWluZwogICAg ZGV2aWNlIG9yIHJlc291cmNlcy4gSW4gY2FzZSBvZiAic2NyZWVuX2luZm8iIGRyaXZlcnMgKGUu Zy4sIGVmaWZiKQogICAgdGhpcyBpcyBmaW5lLCBzaW5jZSBubyByZXNvdXJjZXMgYXJlIHBpbm5l ZC4gSG93ZXZlciwgaWYgdGhlIGRyaXZlcgogICAgYmluZHMgdG8gYSBwbGF0Zm9ybS1kZXZpY2Ug bGlrZSAic2ltcGxlLWZyYW1lYnVmZmVyIiwgd2UgbXVzdCBtYWtlCiAgICBzdXJlIHRvIHVucmVn aXN0ZXIgdGhhdCBkZXZpY2UgYXMgd2VsbC4gT3RoZXJ3aXNlLCBwaW5uZWQgcmVzb3VyY2VzCiAg ICBsaWtlIElPUkVTT1VSQ0VfTUVNIHN0YXkgYXJvdW5kLCB0cmlnZ2VyaW5nIFdBUk5fT05zIGlm IHRoZSBmb2xsb3dpbmcKICAgIGRyaXZlciByZXF1ZXN0cyB0aG9zZSByZXNvdXJjZXMuCgogIG8g SXQgaXMgb25seSBhdmFpbGFibGUgaWYgQ09ORklHX0ZCIGlzIHNlbGVjdGVkLgoKVGhpcyBjb21t aXQgYWRkcyBhIG5ldyBpbmZyYXN0cnVjdHVyZSB0aGF0IG1hbmFnZXMgc3lzdGVtLWZyYW1lYnVm ZmVycwooc2hvcnQ6IHN5c2ZiKS4gVGhlIGluaXRpYWwgY29tbWl0IHByb3ZpZGVzIGNvbmZsaWN0 LXJlc29sdXRpb24gZm9yCnN5c3RlbS1mcmFtZWJ1ZmZlcnMuIEF0IGl0cyBjb3JlIGl0IHByb3Zp ZGVzIHN5c2ZiX2V2aWN0X2NvbmZsaWN0cygpLAp3aGljaCBpbXBsZW1lbnRzIGNvbmZsaWN0IGRl dGVjdGlvbiBhbmQgcmVtb3ZhbCBmb3IgYWxsIGtub3duIHR5cGVzIG9mCkdGWCBkcml2ZXIgaGFu ZC1vdmVycy4gU28gZmFyLCB0aGlzIGluY2x1ZGVzIHBsYXRmb3JtLWRldmljZSByZW1vdmFsLApm YmRldi1maXJtd2FyZS1kZXZpY2UgcmVtb3ZhbCwgdmdhY29uIHJlbW92YWwgYW5kIFZCRSBkZXRl Y3Rpb24uIFRvCmZ1cnRoZXIgc2ltcGxpZnkgdGhlIGNhbGxlcnMsIGl0IGFsc28gcHJvdmlkZXMg aGVscGVycyB0byBmaWd1cmUgb3V0IHdoYXQKaGFuZC1vdmVyIHRvIGRvLCBiYXNlZCBvbiB0aGUg ZGV2aWNlIHRoZSBuZXcgZHJpdmVycyBiaW5kcyB0bzoKCiAgbyBQQ0kgZHJpdmVycyBjYW4gdXNl IHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19wY2koKSwgd2hpY2ggd2lsbCBmaWd1cmUgb3V0CiAgICB0 aGUgYXBlcnR1cmVzIGF1dG9tYXRpY2FsbHksIGFuZCBkb2VzIFZHQS9WQkUgZGV0ZWN0aW9uLgoK ICBvIEdlbmVyaWMgZmlybXdhcmUgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIHNoYWRvd2VkIGF0IGFu eSBhZGRyZXNzIGluCiAgICBtZW1vcnkgY2FuIHVzZSBzeXNmYl9ldmljdF9jb25mbGljdHNfZmly bXdhcmUoKSwgYmFzaWNhbGx5IHJlbW92aW5nCiAgICAqYWxsKiBmaXJtd2FyZSBmcmFtZWJ1ZmZl cnMgaW4gZWZmZWN0LgoKVGhpcyBvbmx5IGFkZHMgdGhlIGdlbmVyaWMgc3lzZmIgaGVscGVycy4g Tm8gdXNlcnMgYXJlIGNvbnZlcnRlZCwgeWV0LgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgSGVycm1h bm4gPGRoLmhlcnJtYW5uQGdtYWlsLmNvbT4KLS0tCiBkcml2ZXJzL3ZpZGVvL0tjb25maWcgIHwg ICA0ICsKIGRyaXZlcnMvdmlkZW8vTWFrZWZpbGUgfCAgIDEgKwogZHJpdmVycy92aWRlby9zeXNm Yi5jICB8IDMyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBpbmNsdWRlL2xpbnV4L3N5c2ZiLmggIHwgIDM0ICsrKysrCiA0IGZpbGVzIGNoYW5nZWQs IDM2NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy92aWRlby9zeXNm Yi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9zeXNmYi5oCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDNj MjBhZjkuLjU2YTgyOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9k cml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTM2LDYgKzM2LDEwIEBAIGNvbmZpZyBWSURFT01PREVf SEVMUEVSUwogY29uZmlnIEhETUkKIAlib29sCiAKK2NvbmZpZyBTWVNGQgorCWJvb2wKKwlzZWxl Y3QgRFVNTVlfQ09OU09MRSBpZiBWVAorCiBpZiBWVAogCXNvdXJjZSAiZHJpdmVycy92aWRlby9j b25zb2xlL0tjb25maWciCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9NYWtlZmls ZSBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKaW5kZXggOWFkM2MxNy4uZGY3YmQ3NSAxMDA2NDQK LS0tIGEvZHJpdmVycy92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxl CkBAIC0xLDUgKzEsNiBAQAogb2JqLSQoQ09ORklHX1ZHQVNUQVRFKSAgICAgICAgICAgICs9IHZn YXN0YXRlLm8KIG9iai0kKENPTkZJR19IRE1JKSAgICAgICAgICAgICAgICArPSBoZG1pLm8KK29i ai0kKENPTkZJR19TWVNGQikJCSAgKz0gc3lzZmIubwogCiBvYmotJChDT05GSUdfVlQpCQkgICs9 IGNvbnNvbGUvCiBvYmotJChDT05GSUdfTE9HTykJCSAgKz0gbG9nby8KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdmlkZW8vc3lzZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3lzZmIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDU4NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy92aWRlby9zeXNmYi5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy MDEzLTIwMTYgUmVkIEhhdCwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KSAic3lzZmI6ICIgZm10CisjaW5jbHVk ZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4 L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5o PgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmYi5oPgor I2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CisKK3N0YXRpYyBib29sIHN5c2ZiX2V2aWN0X21hdGNoX3Jl c291cmNlKHN0cnVjdCBzeXNmYl9ldmljdF9jdHggKmN0eCwKKwkJCQkgICAgICAgc3RydWN0IHJl c291cmNlICptZW0pCit7CisJc3RydWN0IGFwZXJ0dXJlICpnOworCXVuc2lnbmVkIGludCBpOwor CisJZm9yIChpID0gMDsgaSA8IGN0eC0+YXAtPmNvdW50OyArK2kpIHsKKwkJZyA9ICZjdHgtPmFw LT5yYW5nZXNbaV07CisKKwkJaWYgKG1lbS0+c3RhcnQgPT0gZy0+YmFzZSkKKwkJCXJldHVybiB0 cnVlOworCQlpZiAobWVtLT5zdGFydCA+PSBnLT5iYXNlICYmIG1lbS0+ZW5kIDwgZy0+YmFzZSAr IGctPnNpemUpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJaWYgKChjdHgtPmZsYWdzICYgU1lTRkJfRVZJ Q1RfVkJFKSAmJiBtZW0tPnN0YXJ0ID09IDB4QTAwMDApCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisK KwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgc3lzZmJfZXZpY3RfcGxhdGZvcm1fZGV2 aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IHN5c2Zi X2V2aWN0X2N0eCAqY3R4ID0gdXNlcmRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCisJ aWYgKCFwZGV2LT5uYW1lKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKHBkZXYtPm5hbWUs ICJzaW1wbGUtZnJhbWVidWZmZXIiKSkgeworCQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2Uo cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCQlpZiAoIW1lbSkKKwkJCXJldHVybiAwOworCQlp ZiAoIXN5c2ZiX2V2aWN0X21hdGNoX3Jlc291cmNlKGN0eCwgbWVtKSkKKwkJCXJldHVybiAwOwor CisjaWZkZWYgQ09ORklHX09GX0FERFJFU1MKKwkJaWYgKGRldi0+b2Zfbm9kZSkKKwkJCW9mX3Bs YXRmb3JtX2RldmljZV9kZXN0cm95KGRldik7CisJCWVsc2UKKyNlbmRpZgorCQlpZiAoZGV2X2dl dF9wbGF0ZGF0YSgmcGRldi0+ZGV2KSkKKwkJCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzZmJfZXZpY3RfcGxhdGZvcm0oc3Ry dWN0IHN5c2ZiX2V2aWN0X2N0eCAqY3R4KQoreworCS8qCisJICogRWFybHktYm9vdCBhcmNoaXRl Y3R1cmUgc2V0dXAgYW5kIGJvb3QtbG9hcmRlcnMgc29tZXRpbWVzIGNyZWF0ZQorCSAqIHByZWxp bWluYXJ5IHBsYXRmb3JtIGRldmljZXMgd2l0aCBhIGdlbmVyaWMgZnJhbWVidWZmZXIgc2V0dXAu IFRoaXMKKwkgKiBhbGxvd3MgZ3JhcGhpY3MgYWNjZXNzIGR1cmluZyBib290LXVwLCB3aXRob3V0 IGEgcmVhbCBncmFwaGljcworCSAqIGRyaXZlciBsb2FkZWQuIEhvd2V2ZXIsIG9uY2UgYSByZWFs IGdyYXBoaWNzIGRyaXZlciB0YWtlcyBvdmVyLCB3ZQorCSAqIGhhdmUgdG8gZGVzdHJveSB0aG9z ZSBwbGF0Zm9ybSBkZXZpY2VzLiBJbiB0aGUgbGVnYWN5IGZiZGV2IGNhc2UsIHdlCisJICoganVz dCB1c2VkIHRvIHVubG9hZCB0aGUgZmJkZXYgZHJpdmVyLiBIb3dldmVyLCB0byBtYWtlIHN1cmUg YW55IGtpbmQKKwkgKiBvZiBkcml2ZXIgaXMgdW5sb2FkZWQsIHRoZSBwbGF0Zm9ybS1ldmljdGlv biBjb2RlIGhlcmUgc2ltcGx5CisJICogcmVtb3ZlcyBhbnkgY29uZmxpY3RpbmcgcGxhdGZvcm0g ZGV2aWNlIGRpcmVjdGx5LiBUaGlzIGNhdXNlcyBhbnkKKwkgKiBib3VuZCBkcml2ZXIgdG8gYmUg ZGV0YWNoZWQsIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGRldmljZSBlbnRpcmVseSBzbworCSAqIGl0 IGNhbm5vdCBiZSBib3VuZCB0byBsYXRlciBvbi4KKwkgKgorCSAqIFBsZWFzZSBub3RlIHRoYXQg YW55IHN1Y2ggcGxhdGZvcm0gZGV2aWNlIG11c3QgYmUgcmVnaXN0ZXJlZCBieQorCSAqIGVhcmx5 IGFyY2hpdGVjdHVyZSBzZXR1cCBjb2RlLiBJZiB0aGV5IGFyZSByZWdpc3RlcmVkIGFmdGVyIHJl Z3VsYXIKKwkgKiBHRlggZHJpdmVycywgdGhpcyB3aWxsIGZhaWwgaG9ycmlibHkuCisJICovCisK KwlzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOworCWludCByZXQ7CisKKwkvKgorCSAqIEluIGNh c2Ugb2Ygc3RhdGljIHBsYXRmb3JtLWRldmljZXMsIHdlIG11c3QgaXRlcmF0ZSB0aGUgYnVzIGFu ZAorCSAqIHJlbW92ZSB0aGVtIG1hbnVhbGx5LiBXZSBrbm93IHRoYXQgd2UncmUgdGhlIG9ubHkg Y29kZSB0aGF0IG1pZ2h0CisJICogcmVtb3ZlIHRoZW0sIHNvIGEgc2ltcGxlIHN0YXRpYyBsb2Nr IHNlcmlhbGl6ZXMgYWxsIGNhbGxzIGhlcmUuCisJICovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJ cmV0ID0gYnVzX2Zvcl9lYWNoX2RldigmcGxhdGZvcm1fYnVzX3R5cGUsIE5VTEwsIGN0eCwKKwkJ CSAgICAgICBzeXNmYl9ldmljdF9wbGF0Zm9ybV9kZXZpY2UpOworCW11dGV4X3VubG9jaygmbG9j ayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzeXNmYl9ldmljdF9mYmRldihzdHJ1 Y3Qgc3lzZmJfZXZpY3RfY3R4ICpjdHgpCit7CisJLyoKKwkgKiBVc3VhbGx5LCBldmljdGluZyBw bGF0Zm9ybSBkZXZpY2VzIHNob3VsZCBiZSBlbm91Z2ggdG8gYWxzbyB0cmlnZ2VyCisJICogZmJk ZXYgdW5sb2FkaW5nLiBIb3dldmVyLCBzb21lIGxlZ2FjeSBkZXZpY2VzIChlLmcuLCB1dmVzYWZi KSBoYXZlCisJICogbm8gcGxhdGZvcm0gZGV2aWNlcyB0aGF0IGNhbiBiZSBldmljdGVkLCBzbyB3 ZSBzdGlsbCBmYWxsIGJhY2sgdG8KKwkgKiB0aGUgbGVnYWN5IGZiZGV2IHJlbW92YWwgY29kZS4g Tm90ZSB0aGF0IHRoaXMgb25seSByZW1vdmVzIGZiZGV2CisJICogZGV2aWNlcyBtYXJrZWQgYXMg RkJJTkZPX01JU0NfRklSTVdBUkUuIEFueXRoaW5nIGVsc2UgaXMgbGVmdAorCSAqIHVudG91Y2hl ZC4KKwkgKgorCSAqIEFzIHVzdWFsLCB0aGlzIG9ubHkgd29ya3MgaWYgdGhlIGZiZGV2IGRldmlj ZSBpcyBwcm9iZWQgZWFybHksCisJICogYmVmb3JlIGFueSByZWFsIEdGWCBkcml2ZXIgd2FudHMg dG8gdGFrZSBvdmVyLgorCSAqLworCisJaW50IHJldCA9IDA7CisKKyNpZmRlZiBDT05GSUdfRkIK KwlyZXQgPSByZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGN0eC0+YXAsICJzeXNmYiIs CisJCQkJCSAgICAgIGN0eC0+ZmxhZ3MgJiBTWVNGQl9FVklDVF9WQkUpOworI2VuZGlmCisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHN5c2ZiX2V2aWN0X3ZnYWNvbihzdHJ1Y3Qgc3lz ZmJfZXZpY3RfY3R4ICpjdHgpCit7CisJLyoKKwkgKiBUaGUgVkdBQ09OIGNvbnNvbGUgZHJpdmVy IHBva2VzIGF0IFZHQSByZWdpc3RlcnMgcmFuZG9tbHkuIElmIGEgR0ZYCisJICogZHJpdmVyIGNh bm5vdCBrZWVwIHRoZSBWR0Egc3VwcG9ydCBhbGl2ZSwgaXQgYmV0dGVyIG1ha2VzIHN1cmUgdG8K KwkgKiB1bmxvYWQgVkdBQ09OIGJlZm9yZSBwcm9iaW5nLgorCSAqCisJICogVW5sb2FkaW5nIFZH QUNPTiByZXF1aXJlcyB1cyB0byBmaXJzdCBmb3JjZSBkdW1teWNvbiB0byB0YWtlIG92ZXIKKwkg KiBmcm9tIHZnYWNvbiAoYnV0IG9ubHkgaWYgdmdhY29uIGlzIHJlYWxseSBpbiB1c2UpLCBmb2xs b3dlZCBieSBhCisJICogZGVyZWdpc3RyYXRpb24gb2YgdmdhY29uLiBOb3RlIHRoYXQgdGhpcyBw cmV2ZW50cyB2Z2Fjb24gZnJvbSBiZWluZworCSAqIHVzZWQgYWdhaW4gYWZ0ZXIgdGhlIEdGWCBk cml2ZXIgaXMgdW5sb2FkZWQuIEJ1dCB0aGF0IGlzIHVzdWFsbHkKKwkgKiBmaW5lLCBzaW5jZSBW R0Egc3RhdGUgaXMgcmFyZWx5IHJlc3RvcmVkIG9uIGRyaXZlci11bmxvYWQsIGFueXdheS4KKwkg KgorCSAqIE5vdGUgdGhhdCB3ZSByZWx5IG9uIFZHQUNPTiB0byBiZSBwcm9iZWQgaW4gZWFybHkg Ym9vdCAoYWN0dWFsbHkKKwkgKiBkb25lIGJ5IEFSQ0ggc2V0dXAgY29kZSkuIElmIGl0IGlzIHBy b2JlZCBhZnRlciBHRlggZHJpdmVycywgdGhpcworCSAqIHdpbGwgZmFpbCBob3JyaWJseS4gWW91 IGJldHRlciBtYWtlIHN1cmUgVkdBQ09OIGlzIHByb2JlZCBlYXJseSBhbmQKKwkgKiBHRlggZHJp dmVycyBhcmUgcHJvYmVkIGFzIG5vcm1hbCBtb2R1bGVzLgorCSAqLworCisJaW50IHJldCA9IDA7 CisKKyNpZmRlZiBDT05GSUdfVkdBX0NPTlNPTEUKKwljb25zb2xlX2xvY2soKTsKKwlpZiAoY29u X2lzX2JvdW5kKCZ2Z2FfY29uKSkKKwkJcmV0ID0gZG9fdGFrZV9vdmVyX2NvbnNvbGUoJmR1bW15 X2NvbiwgMCwKKwkJCQkJICAgTUFYX05SX0NPTlNPTEVTIC0gMSwgMSk7CisJaWYgKHJldCA9PSAw KSB7CisJCXJldCA9IGRvX3VucmVnaXN0ZXJfY29uX2RyaXZlcigmdmdhX2Nvbik7CisJCWlmIChy ZXQgPT0gLUVOT0RFVikgLyogaWdub3JlICJhbHJlYWR5IHVucmVnaXN0ZXJlZCIgKi8KKwkJCXJl dCA9IDA7CisJfQorCWNvbnNvbGVfdW5sb2NrKCk7CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9 CisKKy8qKgorICogc3lzZmJfZXZpY3RfY29uZmxpY3RzIC0gcmVtb3ZlIGFueSBjb25mbGljdGlu ZyBzeXN0ZW0tZnJhbWVidWZmZXJzCisgKiBAY3R4OgkJZXZpY3Rpb24gY29udGV4dAorICoKKyAq IFRoaXMgZnVuY3Rpb24gZXZpY3RzIGFueSBjb25mbGljdGluZyBzeXN0ZW0tZnJhbWVidWZmZXJz IGFuZCB0aGVpciBib3VuZAorICogZHJpdmVycywgYWNjb3JkaW5nIHRvIHRoZSBkYXRhIGdpdmVu IGluIEBjdHguCisgKgorICogRGVwZW5kaW5nIG9uIEBjdHgtPmZsYWdzLCB0aGUgZm9sbG93aW5n IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZDoKKyAqCisgKiAgIFNZU0ZCX0VWSUNUX1BMQVRGT1JN OiBGaXJtd2FyZSBmcmFtZWJ1ZmZlciBwbGF0Zm9ybSBkZXZpY2VzIChlZy4sCisgKiAgICAgICAg ICAgICAgICAgICAgICAgICAnc2ltcGxlLWZyYW1lYnVmZmVyJykgdGhhdCBvdmVybGFwIEBjdHgg YXJlIHJlbW92ZWQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIHN5c3RlbSwg Y2F1c2luZyBkcml2ZXJzIHRvIGJlIHVuYm91bmQuCisgKiAgICAgICAgICAgICAgICAgICAgICAg ICBJZiBTWVNGQl9FVklDVF9WQkUgaXMgZ2l2ZW4sIHRoaXMgYWxzbyBhZmZlY3RzCisgKiAgICAg ICAgICAgICAgICAgICAgICAgICBkZXZpY2VzIHRoYXQgb3duIHRoZSBWR0EgcmVnaW9uLgorICoK KyAqICAgU1lTRkJfRVZJQ1RfRkJERVY6IEFueSBmaXJtd2FyZSBmYmRldiBkcml2ZXJzIHRoYXQg b3ZlcmxhcCBAY3R4IGFyZQorICogICAgICAgICAgICAgICAgICAgICAgdW5sb2FkZWQuCisgKiAg ICAgICAgICAgICAgICAgICAgICBGdXJ0aGVybW9yZSwgaWYgU1lTRkJfRVZJQ1RfVkJFIGlzIGdp dmVuIGFzIHdlbGwsIGFueQorICogICAgICAgICAgICAgICAgICAgICAgZmJkZXYgZHJpdmVyIHRo YXQgbWFwcyB0aGUgVkdBIHJlZ2lvbiBpcyB1bmxvYWRlZC4KKyAqCisgKiAgIFNZU0ZCX0VWSUNU X1ZHQUNPTjogVGhlIHZnYWNvbiBjb25zb2xlIGRyaXZlciBpcyB1bmJvdW5kIGFuZCB1bnJlZ2lz dGVyZWQuCisgKgorICogVGhpcyBtaWdodCBjYWxsIGludG8gZmJkZXYgZHJpdmVyIHVucmVnaXN0 cmF0aW9uLCBvciBldmVuIGRldmljZV9kZWwoKSBvbgorICogc29tZSBidXNlcy4gSGVuY2UsIG1h a2Ugc3VyZSB5b3UgY2FsbCB0aGlzIGZyb20geW91ciB0b3AtbGV2ZWwKKyAqIHByb2JlLWNhbGxi YWNrcywgcmF0aGVyIHRoYW4gd2l0aCBhbnkgZ2Z4LXN1YnN5c3RlbSBsb2NrcyBoZWxkLgorICoK KyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFp bHVyZS4KKyAqLworaW50IHN5c2ZiX2V2aWN0X2NvbmZsaWN0cyhzdHJ1Y3Qgc3lzZmJfZXZpY3Rf Y3R4ICpjdHgpCit7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKCFjdHggfHwgIWN0eC0+YXAp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2luZm8oInJlbW92aW5nIGNvbmZsaWN0cyAoc3lz ZmIlcyVzJXMlcylcbiIsCisJCShjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfUExBVEZPUk0pID8g IiwgcGxhdGZvcm0iIDogIiIsCisJCShjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfRkJERVYpID8g IiwgZmJkZXYiIDogIiIsCisJCShjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfVkdBQ09OKSA/ICIs IHZnYWNvbiIgOiAiIiwKKwkJKGN0eC0+ZmxhZ3MgJiBTWVNGQl9FVklDVF9WQkUpID8gIiwgdmJl IiA6ICIiKTsKKworCWlmIChjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfUExBVEZPUk0pIHsKKwkJ cmV0ID0gc3lzZmJfZXZpY3RfcGxhdGZvcm0oY3R4KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1 cm4gcmV0OworCX0KKworCWlmIChjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfRkJERVYpIHsKKwkJ cmV0ID0gc3lzZmJfZXZpY3RfZmJkZXYoY3R4KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g cmV0OworCX0KKworCWlmIChjdHgtPmZsYWdzICYgU1lTRkJfRVZJQ1RfVkdBQ09OKSB7CisJCXJl dCA9IHN5c2ZiX2V2aWN0X3ZnYWNvbihjdHgpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHN5c2ZiX2V2aWN0X2NvbmZs aWN0cyk7CisKKy8qKgorICogc3lzZmJfZXZpY3RfY29uZmxpY3RzX2Zpcm13YXJlKCkgLSByZW1v dmUgYWxsIGZpcm13YXJlIGZyYW1lYnVmZmVycworICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBz eXNmYl9ldmljdF9jb25mbGljdHMoKSBidXQgdXNlcyBhIGZha2UgYXBlcnR1cmUgc3Bhbm5pbmcK KyAqIHRoZSBlbnRpcmUgYWRkcmVzcy1zcGFjZS4gVGhpcyBpcyBzdWl0YWJsZSBmb3IgYW55IEdG WCBkcml2ZXIgdGhhdCBqdXN0CisgKiB3YW50cyB0byBnZXQgcmlkIG9mIGFsbCBhdmFpbGFibGUg ZmlybXdhcmUgZnJhbWVidWZmZXJzLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHN5c2ZiX2V2aWN0X2Nv bmZsaWN0c19maXJtd2FyZSh2b2lkKQoreworCXN0cnVjdCBzeXNmYl9ldmljdF9jdHggY3R4ID0g e307CisJaW50IHJldDsKKworCWN0eC5hcCA9IGFsbG9jX2FwZXJ0dXJlcygxKTsKKwlpZiAoIWN0 eC5hcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHguYXAtPnJhbmdlc1swXS5iYXNlID0gMDsK KwljdHguYXAtPnJhbmdlc1swXS5zaXplID0gfjA7CisKKwljdHguZmxhZ3MgfD0gU1lTRkJfRVZJ Q1RfRkJERVYgfCBTWVNGQl9FVklDVF9QTEFURk9STTsKKwlyZXQgPSBzeXNmYl9ldmljdF9jb25m bGljdHMoJmN0eCk7CisKKwlrZnJlZShjdHguYXApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRf U1lNQk9MKHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19maXJtd2FyZSk7CisKKyNpZmRlZiBDT05GSUdf UENJCisvKioKKyAqIHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19wY2koKSAtIHJlbW92ZSBhbGwgc3lz dGVtIGZyYW1lYnVmZmVycyBjb25mbGljdGluZworICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2l0aCB0aGUgZ2l2ZW4gcGNpIGRldmljZQorICogQHBkZXY6CQlwY2kgZGV2aWNlCisg KgorICogVGhpcyBpcyBzaW1pbGFyIHRvIHN5c2ZiX2V2aWN0X2NvbmZsaWN0cygpIGJ1dCBnZW5l cmF0ZXMgdGhlIGV2aWN0aW9uCisgKiBjb250ZXh0IGJhc2VkIG9uIHRoZSBnaXZlbiBwY2kgZGV2 aWNlIEBwZGV2LgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19wY2ko c3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IHN5c2ZiX2V2aWN0X2N0eCBjdHggPSB7 fTsKKwlzaXplX3QgaSwgbiwgb2Zmc2V0OworCWludCByZXQ7CisKKwkvKgorCSAqIElmIHRoaXMg ZGV2aWNlIGlzIHVzZWQgYXMgcHJpbWFyeSBWR0EgZGV2aWNlLCBpdCBpcyBzaGFkb3dlZCBhdCB0 aGUKKwkgKiBWQkUgYmFzZSBhZGRyZXNzLCBzbyBtYWtlIHN1cmUgdG8gaW5jbHVkZSBpdCBpbiB0 aGUgYXBlcnR1cmVzLgorCSAqLworCWlmIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNF XS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykKKwkJY3R4LmZsYWdzIHw9IFNZU0ZCX0VW SUNUX1ZCRTsKKworCS8qCisJICogSWYgYSBkZXZpY2UgaXMgYSBWR0EgZGV2aWNlLCBtYWtlIHN1 cmUgdG8ga2ljayBvdXQgdmdhY29uLiBXZSBjYW5ub3QKKwkgKiByZWx5IG9uIHRoZSBJT1JFU09V UkNFX1JPTV9TSEFET1csIHNpbmNlIHZnYWNvbiBjYW4gc3dpdGNoIGJldHdlZW4KKwkgKiB2Z2Eg ZGV2aWNlcyBhdCBydW50aW1lLiBTbyBraWNrIG91dCB2Z2Fjb24gYW55d2F5LgorCSAqLworCWlm ICgocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKQorCQljdHguZmxh Z3MgfD0gU1lTRkJfRVZJQ1RfVkdBQ09OOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhcGVydHVyZXMg Zm9yIGFsbCBzdGFuZGFyZCBQQ0kgcmVzb3VyY2VzLiBTa2lwIHRoZW0gaW4gY2FzZQorCSAqIHRo ZXkgYXJlIGVtcHR5LgorCSAqLworCWN0eC5hcCA9IGFsbG9jX2FwZXJ0dXJlcyhQQ0lfU1REX1JF U09VUkNFX0VORCAtIFBDSV9TVERfUkVTT1VSQ0VTICsgMSk7CisJaWYgKCFjdHguYXApCisJCXJl dHVybiAtRU5PTUVNOworCisJb2Zmc2V0ID0gUENJX1NURF9SRVNPVVJDRVM7CisJZm9yIChuID0g MCwgaSA9IDA7IGkgPCBjdHguYXAtPmNvdW50OyArK2kpIHsKKwkJaWYgKHBjaV9yZXNvdXJjZV9s ZW4ocGRldiwgb2Zmc2V0ICsgaSkgPCAxKQorCQkJY29udGludWU7CisKKwkJY3R4LmFwLT5yYW5n ZXNbbl0uYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBvZmZzZXQgKyBpKTsKKwkJY3R4 LmFwLT5yYW5nZXNbbl0uc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgb2Zmc2V0ICsgaSk7 CisJCSsrbjsKKwl9CisJY3R4LmFwLT5jb3VudCA9IG47CisKKwkvKgorCSAqIEV2aWN0IGFsbCBt YXRjaGluZyBmYmRldiBkZXZpY2VzLCBWQkUgZGV2aWNlcyBpZiB0aGV5IHNoYWRvdyB0aGlzCisJ ICogZGV2aWNlLCB2Z2Fjb24gaWYgdGhpcyBpcyBhIHZnYSBkZXZpY2UsIGFuZCBwbGF0Zm9ybSBk ZXZpY2VzIGlmIHRoZXkKKwkgKiBtYXRjaC4KKwkgKi8KKwljdHguZmxhZ3MgfD0gU1lTRkJfRVZJ Q1RfRkJERVYgfCBTWVNGQl9FVklDVF9QTEFURk9STTsKKwlyZXQgPSBzeXNmYl9ldmljdF9jb25m bGljdHMoJmN0eCk7CisKKwlrZnJlZShjdHguYXApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRf U1lNQk9MKHN5c2ZiX2V2aWN0X2NvbmZsaWN0c19wY2kpOworI2VuZGlmIC8qIENPTkZJR19QQ0kg Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzZmIuaCBiL2luY2x1ZGUvbGludXgvc3lz ZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjdjNzRhCi0tLSAvZGV2 L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeXNmYi5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5k ZWYgX19MSU5VWF9TWVNGQl9ICisjZGVmaW5lIF9fTElOVVhfU1lTRkJfSAorCisvKgorICogQ29w eXJpZ2h0IChDKSAyMDEzLTIwMTYgUmVkIEhhdCwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCitz dHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdDsKK3N0cnVjdCBwY2lfZGV2OworCitlbnVtIHsKKwlTWVNG Ql9FVklDVF9QTEFURk9STQkJCT0gKDFVIDw8ICAwKSwKKwlTWVNGQl9FVklDVF9GQkRFVgkJCT0g KDFVIDw8ICAxKSwKKwlTWVNGQl9FVklDVF9WR0FDT04JCQk9ICgxVSA8PCAgMiksCisJU1lTRkJf RVZJQ1RfVkJFCQkJCT0gKDFVIDw8ICAzKSwKK307CisKK3N0cnVjdCBzeXNmYl9ldmljdF9jdHgg eworCXN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphcDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9 OworCitpbnQgc3lzZmJfZXZpY3RfY29uZmxpY3RzKHN0cnVjdCBzeXNmYl9ldmljdF9jdHggKmN0 eCk7CitpbnQgc3lzZmJfZXZpY3RfY29uZmxpY3RzX2Zpcm13YXJlKHZvaWQpOworaW50IHN5c2Zi X2V2aWN0X2NvbmZsaWN0c19wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCisjZW5kaWYgLyog X19MSU5VWF9TWVNGQl9IICovCi0tIAoyLjkuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==