From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 08/10] drm: Extract drm_color_mgmt.[hc] Date: Wed, 31 Aug 2016 18:09:11 +0200 Message-ID: <20160831160913.12991-9-daniel.vetter@ffwll.ch> References: <20160831160913.12991-1-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id DBD276E7BE for ; Wed, 31 Aug 2016 16:09:31 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id d196so4221087wmd.1 for ; Wed, 31 Aug 2016 09:09:31 -0700 (PDT) In-Reply-To: <20160831160913.12991-1-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: DRI Development Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org Rm9yIGJvdGggdGhlIG5ldyBkZWdhbW0vbHV0L2dhbW1hIGF0b21pYyBjb21ibywgYW5kIHRoZSBv bGQgbGVnYWN5CmdhbW1hIHRhYmxlcy4KClNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRh bmllbC52ZXR0ZXJAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAg ICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NvbG9yX21nbXQuYyAgICB8IDI0 OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9k cm1fY3J0Yy5jICAgICAgICAgIHwgMjIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaCB8ICAgNCArCiBpbmNsdWRlL2Ry bS9kcm1fY29sb3JfbWdtdC5oICAgICAgICB8ICA1NiArKysrKysrKwogaW5jbHVkZS9kcm0vZHJt X2NydGMuaCAgICAgICAgICAgICAgfCAgMjggKy0tLQogNiBmaWxlcyBjaGFuZ2VkLCAzMTAgaW5z ZXJ0aW9ucygrKSwgMjQ4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9kcm1fY29sb3JfbWdtdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0v ZHJtX2NvbG9yX21nbXQuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBi L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA4ZWViMDdhMzU3OTguLjI1YzcyMDQ1NDAx NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQCBkcm0teSAgICAgICA6PQlkcm1fYXV0aC5v IGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAogCQlkcm1fbW9kZXNldF9sb2NrLm8gZHJtX2F0b21p Yy5vIGRybV9icmlkZ2UubyBcCiAJCWRybV9mcmFtZWJ1ZmZlci5vIGRybV9jb25uZWN0b3IubyBk cm1fYmxlbmQubyBcCiAJCWRybV9lbmNvZGVyLm8gZHJtX21vZGVfb2JqZWN0Lm8gZHJtX3Byb3Bl cnR5Lm8gXAotCQlkcm1fcGxhbmUubworCQlkcm1fcGxhbmUubyBkcm1fY29sb3JfbWdtdC5vCiAK IGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCiBkcm0tJChDT05GSUdfRFJNX0dF TV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9jb2xvcl9tZ210LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbG9yX21n bXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFjYTFiN2E2Mzk3 YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29sb3JfbWdtdC5jCkBA IC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE2IEludGVsIENvcnBvcmF0 aW9uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwg YW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgKiBkb2N1bWVudGF0aW9uIGZvciBhbnkg cHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorICog dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQg Ym90aCB0aGF0IGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAorICogdGhhdCB0aGUgbmFt ZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IK KyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUg d2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRoZSBjb3B5 cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucworICogYWJvdXQgdGhlIHN1aXRh YmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQg ImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisgKgorICog VEhFIENPUFlSSUdIVCBIT0xERVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJE IFRPIFRISVMgU09GVFdBUkUsCisgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCisgKiBFVkVOVCBTSEFMTCBUSEUg Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IK KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VM VElORyBGUk9NIExPU1MgT0YgVVNFLAorICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgorICogVE9SVElPVVMgQUNU SU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJG T1JNQU5DRQorICogT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NvbG9yX21n bXQuaD4KKworI2luY2x1ZGUgImRybV9jcnRjX2ludGVybmFsLmgiCisKKworLyoqCisgKiBkcm1f Y3J0Y19lbmFibGVfY29sb3JfbWdtdCAtIGVuYWJsZSBjb2xvciBtYW5hZ2VtZW50IHByb3BlcnRp ZXMKKyAqIEBjcnRjOiBEUk0gQ1JUQworICogQGRlZ2FtbWFfbHV0X3NpemU6IHRoZSBzaXplIG9m IHRoZSBkZWdhbW1hIGx1dCAoYmVmb3JlIENTQykKKyAqIEBoYXNfY3RtOiB3aGV0aGVyIHRvIGF0 dGFjaCBjdG1fcHJvcGVydHkgZm9yIENTQyBtYXRyaXgKKyAqIEBnYW1tYV9sdXRfc2l6ZTogdGhl IHNpemUgb2YgdGhlIGdhbW1hIGx1dCAoYWZ0ZXIgQ1NDKQorICoKKyAqIFRoaXMgZnVuY3Rpb24g bGV0cyB0aGUgZHJpdmVyIGVuYWJsZSB0aGUgY29sb3IgY29ycmVjdGlvbgorICogcHJvcGVydGll cyBvbiBhIENSVEMuIFRoaXMgaW5jbHVkZXMgMyBkZWdhbW1hLCBjc2MgYW5kIGdhbW1hCisgKiBw cm9wZXJ0aWVzIHRoYXQgdXNlcnNwYWNlIGNhbiBzZXQgYW5kIDIgc2l6ZSBwcm9wZXJ0aWVzIHRv IGluZm9ybQorICogdGhlIHVzZXJzcGFjZSBvZiB0aGUgbHV0IHNpemVzLiBFYWNoIG9mIHRoZSBw cm9wZXJ0aWVzIGFyZQorICogb3B0aW9uYWwuIFRoZSBnYW1tYSBhbmQgZGVnYW1tYSBwcm9wZXJ0 aWVzIGFyZSBvbmx5IGF0dGFjaGVkIGlmCisgKiB0aGVpciBzaXplIGlzIG5vdCAwIGFuZCBjdG1f cHJvcGVydHkgaXMgb25seSBhdHRhY2hlZCBpZiBoYXNfY3RtIGlzCisgKiB0cnVlLgorICovCit2 b2lkIGRybV9jcnRjX2VuYWJsZV9jb2xvcl9tZ210KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJ CQl1aW50IGRlZ2FtbWFfbHV0X3NpemUsCisJCQkJYm9vbCBoYXNfY3RtLAorCQkJCXVpbnQgZ2Ft bWFfbHV0X3NpemUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlz dHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKKworCWlm IChkZWdhbW1hX2x1dF9zaXplKSB7CisJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjcnRj LT5iYXNlLAorCQkJCQkgICBjb25maWctPmRlZ2FtbWFfbHV0X3Byb3BlcnR5LCAwKTsKKwkJZHJt X29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNydGMtPmJhc2UsCisJCQkJCSAgIGNvbmZpZy0+ZGVn YW1tYV9sdXRfc2l6ZV9wcm9wZXJ0eSwKKwkJCQkJICAgZGVnYW1tYV9sdXRfc2l6ZSk7CisJfQor CisJaWYgKGhhc19jdG0pCisJCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjcnRjLT5iYXNl LAorCQkJCQkgICBjb25maWctPmN0bV9wcm9wZXJ0eSwgMCk7CisKKwlpZiAoZ2FtbWFfbHV0X3Np emUpIHsKKwkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNydGMtPmJhc2UsCisJCQkJCSAg IGNvbmZpZy0+Z2FtbWFfbHV0X3Byb3BlcnR5LCAwKTsKKwkJZHJtX29iamVjdF9hdHRhY2hfcHJv cGVydHkoJmNydGMtPmJhc2UsCisJCQkJCSAgIGNvbmZpZy0+Z2FtbWFfbHV0X3NpemVfcHJvcGVy dHksCisJCQkJCSAgIGdhbW1hX2x1dF9zaXplKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9j cnRjX2VuYWJsZV9jb2xvcl9tZ210KTsKKworLyoqCisgKiBkcm1fbW9kZV9jcnRjX3NldF9nYW1t YV9zaXplIC0gc2V0IHRoZSBnYW1tYSB0YWJsZSBzaXplCisgKiBAY3J0YzogQ1JUQyB0byBzZXQg dGhlIGdhbW1hIHRhYmxlIHNpemUgZm9yCisgKiBAZ2FtbWFfc2l6ZTogc2l6ZSBvZiB0aGUgZ2Ft bWEgdGFibGUKKyAqCisgKiBEcml2ZXJzIHdoaWNoIHN1cHBvcnQgZ2FtbWEgdGFibGVzIHNob3Vs ZCBzZXQgdGhpcyB0byB0aGUgc3VwcG9ydGVkIGdhbW1hCisgKiB0YWJsZSBzaXplIHdoZW4gaW5p dGlhbGl6aW5nIHRoZSBDUlRDLiBDdXJyZW50bHkgdGhlIGRybSBjb3JlIG9ubHkgc3VwcG9ydHMg YQorICogZml4ZWQgZ2FtbWEgdGFibGUgc2l6ZS4KKyAqCisgKiBSZXR1cm5zOgorICogWmVybyBv biBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX21vZGVf Y3J0Y19zZXRfZ2FtbWFfc2l6ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIGludCBnYW1t YV9zaXplKQoreworCXVpbnQxNl90ICpyX2Jhc2UsICpnX2Jhc2UsICpiX2Jhc2U7CisJaW50IGk7 CisKKwljcnRjLT5nYW1tYV9zaXplID0gZ2FtbWFfc2l6ZTsKKworCWNydGMtPmdhbW1hX3N0b3Jl ID0ga2NhbGxvYyhnYW1tYV9zaXplLCBzaXplb2YodWludDE2X3QpICogMywKKwkJCQkgICAgR0ZQ X0tFUk5FTCk7CisJaWYgKCFjcnRjLT5nYW1tYV9zdG9yZSkgeworCQljcnRjLT5nYW1tYV9zaXpl ID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcl9iYXNlID0gY3J0Yy0+Z2FtbWFfc3Rv cmU7CisJZ19iYXNlID0gcl9iYXNlICsgZ2FtbWFfc2l6ZTsKKwliX2Jhc2UgPSBnX2Jhc2UgKyBn YW1tYV9zaXplOworCWZvciAoaSA9IDA7IGkgPCBnYW1tYV9zaXplOyBpKyspIHsKKwkJcl9iYXNl W2ldID0gaSA8PCA4OworCQlnX2Jhc2VbaV0gPSBpIDw8IDg7CisJCWJfYmFzZVtpXSA9IGkgPDwg ODsKKwl9CisKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcnRjX3Nl dF9nYW1tYV9zaXplKTsKKworLyoqCisgKiBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwgLSBzZXQg dGhlIGdhbW1hIHRhYmxlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKiBAZGF0YTogaW9jdGwgZGF0 YQorICogQGZpbGVfcHJpdjogRFJNIGZpbGUgaW5mbworICoKKyAqIFNldCB0aGUgZ2FtbWEgdGFi bGUgb2YgYSBDUlRDIHRvIHRoZSBvbmUgcGFzc2VkIGluIGJ5IHRoZSB1c2VyLiBVc2Vyc3BhY2Ug Y2FuCisgKiBpbnF1aXJlIHRoZSByZXF1aXJlZCBnYW1tYSB0YWJsZSBzaXplIHRocm91Z2ggZHJt X21vZGVfZ2FtbWFfZ2V0X2lvY3RsLgorICoKKyAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9j dGwuCisgKgorICogUmV0dXJuczoKKyAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8g b24gZmFpbHVyZS4KKyAqLworaW50IGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVf cHJpdikKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgKmNydGNfbHV0ID0gZGF0YTsKKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJdm9pZCAqcl9iYXNlLCAqZ19iYXNlLCAqYl9iYXNlOwor CWludCBzaXplOworCWludCByZXQgPSAwOworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJl KGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRybV9tb2Rlc2V0 X2xvY2tfYWxsKGRldik7CisJY3J0YyA9IGRybV9jcnRjX2ZpbmQoZGV2LCBjcnRjX2x1dC0+Y3J0 Y19pZCk7CisJaWYgKCFjcnRjKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0K KworCWlmIChjcnRjLT5mdW5jcy0+Z2FtbWFfc2V0ID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT1NZ UzsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWVtY3B5IGludG8gZ2FtbWEgc3RvcmUgKi8KKwlp ZiAoY3J0Y19sdXQtPmdhbW1hX3NpemUgIT0gY3J0Yy0+Z2FtbWFfc2l6ZSkgeworCQlyZXQgPSAt RUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzaXplID0gY3J0Y19sdXQtPmdhbW1hX3NpemUg KiAoc2l6ZW9mKHVpbnQxNl90KSk7CisJcl9iYXNlID0gY3J0Yy0+Z2FtbWFfc3RvcmU7CisJaWYg KGNvcHlfZnJvbV91c2VyKHJfYmFzZSwgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0 Y19sdXQtPnJlZCwgc2l6ZSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQor CisJZ19iYXNlID0gcl9iYXNlICsgc2l6ZTsKKwlpZiAoY29weV9mcm9tX3VzZXIoZ19iYXNlLCAo dm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljcnRjX2x1dC0+Z3JlZW4sIHNpemUpKSB7CisJ CXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWJfYmFzZSA9IGdfYmFzZSArIHNp emU7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJfYmFzZSwgKHZvaWQgX191c2VyICopKHVuc2lnbmVk IGxvbmcpY3J0Y19sdXQtPmJsdWUsIHNpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8g b3V0OworCX0KKworCXJldCA9IGNydGMtPmZ1bmNzLT5nYW1tYV9zZXQoY3J0Yywgcl9iYXNlLCBn X2Jhc2UsIGJfYmFzZSwgY3J0Yy0+Z2FtbWFfc2l6ZSk7CisKK291dDoKKwlkcm1fbW9kZXNldF91 bmxvY2tfYWxsKGRldik7CisJcmV0dXJuIHJldDsKKworfQorCisvKioKKyAqIGRybV9tb2RlX2dh bW1hX2dldF9pb2N0bCAtIGdldCB0aGUgZ2FtbWEgdGFibGUKKyAqIEBkZXY6IERSTSBkZXZpY2UK KyAqIEBkYXRhOiBpb2N0bCBkYXRhCisgKiBAZmlsZV9wcml2OiBEUk0gZmlsZSBpbmZvCisgKgor ICogQ29weSB0aGUgY3VycmVudCBnYW1tYSB0YWJsZSBpbnRvIHRoZSBzdG9yYWdlIHByb3ZpZGVk LiBUaGlzIGFsc28gcHJvdmlkZXMKKyAqIHRoZSBnYW1tYSB0YWJsZSBzaXplIHRoZSBkcml2ZXIg ZXhwZWN0cywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc2l6ZSB0aGUKKyAqIGFsbG9jYXRlZCBzdG9y YWdlLgorICoKKyAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCisgKgorICogUmV0dXJu czoKKyAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KKyAqLwor aW50IGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ ICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qg ZHJtX21vZGVfY3J0Y19sdXQgKmNydGNfbHV0ID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7CisJdm9pZCAqcl9iYXNlLCAqZ19iYXNlLCAqYl9iYXNlOworCWludCBzaXplOworCWludCBy ZXQgPSAwOworCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVT RVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7CisJ Y3J0YyA9IGRybV9jcnRjX2ZpbmQoZGV2LCBjcnRjX2x1dC0+Y3J0Y19pZCk7CisJaWYgKCFjcnRj KSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIG1lbWNweSBpbnRv IGdhbW1hIHN0b3JlICovCisJaWYgKGNydGNfbHV0LT5nYW1tYV9zaXplICE9IGNydGMtPmdhbW1h X3NpemUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJc2l6ZSA9IGNy dGNfbHV0LT5nYW1tYV9zaXplICogKHNpemVvZih1aW50MTZfdCkpOworCXJfYmFzZSA9IGNydGMt PmdhbW1hX3N0b3JlOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVk IGxvbmcpY3J0Y19sdXQtPnJlZCwgcl9iYXNlLCBzaXplKSkgeworCQlyZXQgPSAtRUZBVUxUOwor CQlnb3RvIG91dDsKKwl9CisKKwlnX2Jhc2UgPSByX2Jhc2UgKyBzaXplOworCWlmIChjb3B5X3Rv X3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPmdyZWVuLCBnX2Jh c2UsIHNpemUpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCWJfYmFz ZSA9IGdfYmFzZSArIHNpemU7CisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5z aWduZWQgbG9uZyljcnRjX2x1dC0+Ymx1ZSwgYl9iYXNlLCBzaXplKSkgeworCQlyZXQgPSAtRUZB VUxUOworCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYp OworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMu YyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IGU1MjI5YjQ4ZDVkNS4uYjk3MTVl NWIzYTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtODk5LDE4MSArODk5LDYgQEAgaW50IGRybV9tb2Rl X2NydGNfc2V0X29ial9wcm9wKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKIH0KIAogLyoq Ci0gKiBkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplIC0gc2V0IHRoZSBnYW1tYSB0YWJsZSBz aXplCi0gKiBAY3J0YzogQ1JUQyB0byBzZXQgdGhlIGdhbW1hIHRhYmxlIHNpemUgZm9yCi0gKiBA Z2FtbWFfc2l6ZTogc2l6ZSBvZiB0aGUgZ2FtbWEgdGFibGUKLSAqCi0gKiBEcml2ZXJzIHdoaWNo IHN1cHBvcnQgZ2FtbWEgdGFibGVzIHNob3VsZCBzZXQgdGhpcyB0byB0aGUgc3VwcG9ydGVkIGdh bW1hCi0gKiB0YWJsZSBzaXplIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBDUlRDLiBDdXJyZW50bHkg dGhlIGRybSBjb3JlIG9ubHkgc3VwcG9ydHMgYQotICogZml4ZWQgZ2FtbWEgdGFibGUgc2l6ZS4K LSAqCi0gKiBSZXR1cm5zOgotICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBm YWlsdXJlLgotICovCi1pbnQgZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCi0JCQkJIGludCBnYW1tYV9zaXplKQotewotCXVpbnQxNl90ICpyX2Jhc2Us ICpnX2Jhc2UsICpiX2Jhc2U7Ci0JaW50IGk7Ci0KLQljcnRjLT5nYW1tYV9zaXplID0gZ2FtbWFf c2l6ZTsKLQotCWNydGMtPmdhbW1hX3N0b3JlID0ga2NhbGxvYyhnYW1tYV9zaXplLCBzaXplb2Yo dWludDE2X3QpICogMywKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcnRjLT5nYW1tYV9z dG9yZSkgewotCQljcnRjLT5nYW1tYV9zaXplID0gMDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQot Ci0Jcl9iYXNlID0gY3J0Yy0+Z2FtbWFfc3RvcmU7Ci0JZ19iYXNlID0gcl9iYXNlICsgZ2FtbWFf c2l6ZTsKLQliX2Jhc2UgPSBnX2Jhc2UgKyBnYW1tYV9zaXplOwotCWZvciAoaSA9IDA7IGkgPCBn YW1tYV9zaXplOyBpKyspIHsKLQkJcl9iYXNlW2ldID0gaSA8PCA4OwotCQlnX2Jhc2VbaV0gPSBp IDw8IDg7Ci0JCWJfYmFzZVtpXSA9IGkgPDwgODsKLQl9Ci0KLQotCXJldHVybiAwOwotfQotRVhQ T1JUX1NZTUJPTChkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKTsKLQotLyoqCi0gKiBkcm1f bW9kZV9nYW1tYV9zZXRfaW9jdGwgLSBzZXQgdGhlIGdhbW1hIHRhYmxlCi0gKiBAZGV2OiBEUk0g ZGV2aWNlCi0gKiBAZGF0YTogaW9jdGwgZGF0YQotICogQGZpbGVfcHJpdjogRFJNIGZpbGUgaW5m bwotICoKLSAqIFNldCB0aGUgZ2FtbWEgdGFibGUgb2YgYSBDUlRDIHRvIHRoZSBvbmUgcGFzc2Vk IGluIGJ5IHRoZSB1c2VyLiBVc2Vyc3BhY2UgY2FuCi0gKiBpbnF1aXJlIHRoZSByZXF1aXJlZCBn YW1tYSB0YWJsZSBzaXplIHRocm91Z2ggZHJtX21vZGVfZ2FtbWFfZ2V0X2lvY3RsLgotICoKLSAq IENhbGxlZCBieSB0aGUgdXNlciB2aWEgaW9jdGwuCi0gKgotICogUmV0dXJuczoKLSAqIFplcm8g b24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KLSAqLwotaW50IGRybV9tb2Rl X2dhbW1hX3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX21vZGVfY3J0 Y19sdXQgKmNydGNfbHV0ID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jdm9pZCAq cl9iYXNlLCAqZ19iYXNlLCAqYl9iYXNlOwotCWludCBzaXplOwotCWludCByZXQgPSAwOwotCi0J aWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlyZXR1 cm4gLUVJTlZBTDsKLQotCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7Ci0JY3J0YyA9IGRybV9j cnRjX2ZpbmQoZGV2LCBjcnRjX2x1dC0+Y3J0Y19pZCk7Ci0JaWYgKCFjcnRjKSB7Ci0JCXJldCA9 IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChjcnRjLT5mdW5jcy0+Z2FtbWFfc2V0 ID09IE5VTEwpIHsKLQkJcmV0ID0gLUVOT1NZUzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogbWVt Y3B5IGludG8gZ2FtbWEgc3RvcmUgKi8KLQlpZiAoY3J0Y19sdXQtPmdhbW1hX3NpemUgIT0gY3J0 Yy0+Z2FtbWFfc2l6ZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlz aXplID0gY3J0Y19sdXQtPmdhbW1hX3NpemUgKiAoc2l6ZW9mKHVpbnQxNl90KSk7Ci0Jcl9iYXNl ID0gY3J0Yy0+Z2FtbWFfc3RvcmU7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHJfYmFzZSwgKHZvaWQg X191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPnJlZCwgc2l6ZSkpIHsKLQkJcmV0ID0g LUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZ19iYXNlID0gcl9iYXNlICsgc2l6ZTsKLQlp ZiAoY29weV9mcm9tX3VzZXIoZ19iYXNlLCAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylj cnRjX2x1dC0+Z3JlZW4sIHNpemUpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0Owot CX0KLQotCWJfYmFzZSA9IGdfYmFzZSArIHNpemU7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJfYmFz ZSwgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPmJsdWUsIHNpemUpKSB7 Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGNydGMtPmZ1bmNz LT5nYW1tYV9zZXQoY3J0Yywgcl9iYXNlLCBnX2Jhc2UsIGJfYmFzZSwgY3J0Yy0+Z2FtbWFfc2l6 ZSk7Ci0KLW91dDoKLQlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7Ci0JcmV0dXJuIHJldDsK LQotfQotCi0vKioKLSAqIGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bCAtIGdldCB0aGUgZ2FtbWEg dGFibGUKLSAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBkYXRhOiBpb2N0bCBkYXRhCi0gKiBAZmls ZV9wcml2OiBEUk0gZmlsZSBpbmZvCi0gKgotICogQ29weSB0aGUgY3VycmVudCBnYW1tYSB0YWJs ZSBpbnRvIHRoZSBzdG9yYWdlIHByb3ZpZGVkLiBUaGlzIGFsc28gcHJvdmlkZXMKLSAqIHRoZSBn YW1tYSB0YWJsZSBzaXplIHRoZSBkcml2ZXIgZXhwZWN0cywgd2hpY2ggY2FuIGJlIHVzZWQgdG8g c2l6ZSB0aGUKLSAqIGFsbG9jYXRlZCBzdG9yYWdlLgotICoKLSAqIENhbGxlZCBieSB0aGUgdXNl ciB2aWEgaW9jdGwuCi0gKgotICogUmV0dXJuczoKLSAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRp dmUgZXJybm8gb24gZmFpbHVyZS4KLSAqLwotaW50IGRybV9tb2RlX2dhbW1hX2dldF9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX21vZGVfY3J0Y19sdXQgKmNydGNfbHV0ID0g ZGF0YTsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jdm9pZCAqcl9iYXNlLCAqZ19iYXNlLCAq Yl9iYXNlOwotCWludCBzaXplOwotCWludCByZXQgPSAwOwotCi0JaWYgKCFkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRy bV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7Ci0JY3J0YyA9IGRybV9jcnRjX2ZpbmQoZGV2LCBjcnRj X2x1dC0+Y3J0Y19pZCk7Ci0JaWYgKCFjcnRjKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8g b3V0OwotCX0KLQotCS8qIG1lbWNweSBpbnRvIGdhbW1hIHN0b3JlICovCi0JaWYgKGNydGNfbHV0 LT5nYW1tYV9zaXplICE9IGNydGMtPmdhbW1hX3NpemUpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJ Z290byBvdXQ7Ci0JfQotCi0Jc2l6ZSA9IGNydGNfbHV0LT5nYW1tYV9zaXplICogKHNpemVvZih1 aW50MTZfdCkpOwotCXJfYmFzZSA9IGNydGMtPmdhbW1hX3N0b3JlOwotCWlmIChjb3B5X3RvX3Vz ZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpY3J0Y19sdXQtPnJlZCwgcl9iYXNlLCBz aXplKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlnX2Jhc2UgPSBy X2Jhc2UgKyBzaXplOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopKHVuc2lnbmVk IGxvbmcpY3J0Y19sdXQtPmdyZWVuLCBnX2Jhc2UsIHNpemUpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7 Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJfYmFzZSA9IGdfYmFzZSArIHNpemU7Ci0JaWYgKGNvcHlf dG9fdXNlcigodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyljcnRjX2x1dC0+Ymx1ZSwgYl9i YXNlLCBzaXplKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci1vdXQ6Ci0J ZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgogICog ZHJtX21vZGVfY29uZmlnX3Jlc2V0IC0gY2FsbCAtPnJlc2V0IGNhbGxiYWNrcwogICogQGRldjog ZHJtIGRldmljZQogICoKQEAgLTE0MzEsNDggKzEyNTYsMyBAQCBzdHJ1Y3QgZHJtX3RpbGVfZ3Jv dXAgKmRybV9tb2RlX2NyZWF0ZV90aWxlX2dyb3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ cmV0dXJuIHRnOwogfQogRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcmVhdGVfdGlsZV9ncm91cCk7 Ci0KLS8qKgotICogZHJtX2NydGNfZW5hYmxlX2NvbG9yX21nbXQgLSBlbmFibGUgY29sb3IgbWFu YWdlbWVudCBwcm9wZXJ0aWVzCi0gKiBAY3J0YzogRFJNIENSVEMKLSAqIEBkZWdhbW1hX2x1dF9z aXplOiB0aGUgc2l6ZSBvZiB0aGUgZGVnYW1tYSBsdXQgKGJlZm9yZSBDU0MpCi0gKiBAaGFzX2N0 bTogd2hldGhlciB0byBhdHRhY2ggY3RtX3Byb3BlcnR5IGZvciBDU0MgbWF0cml4Ci0gKiBAZ2Ft bWFfbHV0X3NpemU6IHRoZSBzaXplIG9mIHRoZSBnYW1tYSBsdXQgKGFmdGVyIENTQykKLSAqCi0g KiBUaGlzIGZ1bmN0aW9uIGxldHMgdGhlIGRyaXZlciBlbmFibGUgdGhlIGNvbG9yIGNvcnJlY3Rp b24KLSAqIHByb3BlcnRpZXMgb24gYSBDUlRDLiBUaGlzIGluY2x1ZGVzIDMgZGVnYW1tYSwgY3Nj IGFuZCBnYW1tYQotICogcHJvcGVydGllcyB0aGF0IHVzZXJzcGFjZSBjYW4gc2V0IGFuZCAyIHNp emUgcHJvcGVydGllcyB0byBpbmZvcm0KLSAqIHRoZSB1c2Vyc3BhY2Ugb2YgdGhlIGx1dCBzaXpl cy4gRWFjaCBvZiB0aGUgcHJvcGVydGllcyBhcmUKLSAqIG9wdGlvbmFsLiBUaGUgZ2FtbWEgYW5k IGRlZ2FtbWEgcHJvcGVydGllcyBhcmUgb25seSBhdHRhY2hlZCBpZgotICogdGhlaXIgc2l6ZSBp cyBub3QgMCBhbmQgY3RtX3Byb3BlcnR5IGlzIG9ubHkgYXR0YWNoZWQgaWYgaGFzX2N0bSBpcwot ICogdHJ1ZS4KLSAqLwotdm9pZCBkcm1fY3J0Y19lbmFibGVfY29sb3JfbWdtdChzdHJ1Y3QgZHJt X2NydGMgKmNydGMsCi0JCQkJdWludCBkZWdhbW1hX2x1dF9zaXplLAotCQkJCWJvb2wgaGFzX2N0 bSwKLQkJCQl1aW50IGdhbW1hX2x1dF9zaXplKQotewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7Ci0Jc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9k ZV9jb25maWc7Ci0KLQlpZiAoZGVnYW1tYV9sdXRfc2l6ZSkgewotCQlkcm1fb2JqZWN0X2F0dGFj aF9wcm9wZXJ0eSgmY3J0Yy0+YmFzZSwKLQkJCQkJICAgY29uZmlnLT5kZWdhbW1hX2x1dF9wcm9w ZXJ0eSwgMCk7Ci0JCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjcnRjLT5iYXNlLAotCQkJ CQkgICBjb25maWctPmRlZ2FtbWFfbHV0X3NpemVfcHJvcGVydHksCi0JCQkJCSAgIGRlZ2FtbWFf bHV0X3NpemUpOwotCX0KLQotCWlmIChoYXNfY3RtKQotCQlkcm1fb2JqZWN0X2F0dGFjaF9wcm9w ZXJ0eSgmY3J0Yy0+YmFzZSwKLQkJCQkJICAgY29uZmlnLT5jdG1fcHJvcGVydHksIDApOwotCi0J aWYgKGdhbW1hX2x1dF9zaXplKSB7Ci0JCWRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjcnRj LT5iYXNlLAotCQkJCQkgICBjb25maWctPmdhbW1hX2x1dF9wcm9wZXJ0eSwgMCk7Ci0JCWRybV9v YmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjcnRjLT5iYXNlLAotCQkJCQkgICBjb25maWctPmdhbW1h X2x1dF9zaXplX3Byb3BlcnR5LAotCQkJCQkgICBnYW1tYV9sdXRfc2l6ZSk7Ci0JfQotfQotRVhQ T1JUX1NZTUJPTChkcm1fY3J0Y19lbmFibGVfY29sb3JfbWdtdCk7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaCBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Y19pbnRlcm5hbC5oCmluZGV4IDhjYWEwODhkYWEyZC4uMGI5ZDMyN2M0NThlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX2NydGNfaW50ZXJuYWwuaApAQCAtNTgsNiArNTgsMTAgQEAgaW50IGRybV9tb2RlX2dl dGNydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgICB2b2lkICpkYXRhLCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBpbnQgZHJtX21vZGVfc2V0Y3J0YyhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAogCQkgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 KTsKKworLyogZHJtX2NvbG9yX21nbXQuYyAqLworCisvKiBJT0NUTHMgKi8KIGludCBkcm1fbW9k ZV9nYW1tYV9nZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IGRybV9tb2RlX2dhbW1hX3Nl dF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0v ZHJtX2NvbG9yX21nbXQuaCBiL2luY2x1ZGUvZHJtL2RybV9jb2xvcl9tZ210LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZTAxYzU4YmJlODEKLS0tIC9kZXYvbnVs bAorKysgYi9pbmNsdWRlL2RybS9kcm1fY29sb3JfbWdtdC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3 YXJlIGFuZCBpdHMKKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBn cmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisgKiB0aGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0 CisgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRp bmcgZG9jdW1lbnRhdGlvbiwgYW5kCisgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQg aG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRh aW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAor ICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJzIG1ha2Ug bm8gcmVwcmVzZW50YXRpb25zCisgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0 d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0 IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwK KyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUywgSU4gTk8KKyAqIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorICogQ09OU0VRVUVOVElBTCBE QU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBV U0UsCisgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSCisgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgKiBPRiBUSElT IFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX19EUk1fQ09MT1JfTUdNVF9IX18KKyNkZWZpbmUg X19EUk1fQ09MT1JfTUdNVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKK3ZvaWQg ZHJtX2NydGNfZW5hYmxlX2NvbG9yX21nbXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCXVp bnQgZGVnYW1tYV9sdXRfc2l6ZSwKKwkJCQlib29sIGhhc19jdG0sCisJCQkJdWludCBnYW1tYV9s dXRfc2l6ZSk7CisKK2ludCBkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCQkgaW50IGdhbW1hX3NpemUpOworCisvKgorICogRXh0cmFjdCBhIGRl Z2FtbWEvZ2FtbWEgTFVUIHZhbHVlIHByb3ZpZGVkIGJ5IHVzZXIgYW5kIHJvdW5kIGl0IHRvIHRo ZQorICogcHJlY2lzaW9uIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBp bmxpbmUgdWludDMyX3QgZHJtX2NvbG9yX2x1dF9leHRyYWN0KHVpbnQzMl90IHVzZXJfaW5wdXQs CisJCQkJCSAgICAgdWludDMyX3QgYml0X3ByZWNpc2lvbikKK3sKKwl1aW50MzJfdCB2YWwgPSB1 c2VyX2lucHV0OworCXVpbnQzMl90IG1heCA9IDB4ZmZmZiA+PiAoMTYgLSBiaXRfcHJlY2lzaW9u KTsKKworCS8qIFJvdW5kIG9ubHkgaWYgd2UncmUgbm90IHVzaW5nIGZ1bGwgcHJlY2lzaW9uLiAq LworCWlmIChiaXRfcHJlY2lzaW9uIDwgMTYpIHsKKwkJdmFsICs9IDFVTCA8PCAoMTYgLSBiaXRf cHJlY2lzaW9uIC0gMSk7CisJCXZhbCA+Pj0gMTYgLSBiaXRfcHJlY2lzaW9uOworCX0KKworCXJl dHVybiBjbGFtcF92YWwodmFsLCAwLCBtYXgpOworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggMWZh Y2ZlZWIwMTM4Li40M2IyMzVmYzQ3ZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRj LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1 ZGUgPGRybS9kcm1fZWRpZC5oPgogI2luY2x1ZGUgPGRybS9kcm1fcGxhbmUuaD4KICNpbmNsdWRl IDxkcm0vZHJtX2JsZW5kLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jb2xvcl9tZ210Lmg+CiAKIHN0 cnVjdCBkcm1fZGV2aWNlOwogc3RydWN0IGRybV9tb2RlX3NldDsKQEAgLTEzMjUsOSArMTMyNiw2 IEBAIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CiAKLWV4dGVybiBpbnQgZHJtX21vZGVfY3J0Y19zZXRfZ2FtbWFfc2l6ZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCi0JCQkJCSBpbnQgZ2FtbWFfc2l6ZSk7Ci0KIGV4dGVybiBp bnQgZHJtX21vZGVfc2V0X2NvbmZpZ19pbnRlcm5hbChzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQp OwogCiBleHRlcm4gc3RydWN0IGRybV90aWxlX2dyb3VwICpkcm1fbW9kZV9jcmVhdGVfdGlsZV9n cm91cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LApAQCAtMTMzNywxMSArMTMzNSw2IEBAIGV4dGVy biBzdHJ1Y3QgZHJtX3RpbGVfZ3JvdXAgKmRybV9tb2RlX2dldF90aWxlX2dyb3VwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiBleHRlcm4gdm9pZCBkcm1fbW9kZV9wdXRfdGlsZV9ncm91cChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkcm1fdGlsZV9ncm91cCAqdGcpOwog Ci1leHRlcm4gdm9pZCBkcm1fY3J0Y19lbmFibGVfY29sb3JfbWdtdChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCi0JCQkJICAgICAgIHVpbnQgZGVnYW1tYV9sdXRfc2l6ZSwKLQkJCQkgICAgICAgYm9v bCBoYXNfY3RtLAotCQkJCSAgICAgICB1aW50IGdhbW1hX2x1dF9zaXplKTsKLQogLyogSGVscGVy cyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2NydGMgKmRybV9jcnRjX2ZpbmQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKIAl1aW50MzJfdCBpZCkKQEAgLTEzNTEsMjUgKzEzNDQsNiBAQCBz dGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fY3J0YyAqZHJtX2NydGNfZmluZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAogCXJldHVybiBtbyA/IG9ial90b19jcnRjKG1vKSA6IE5VTEw7CiB9CiAKLS8q Ci0gKiBFeHRyYWN0IGEgZGVnYW1tYS9nYW1tYSBMVVQgdmFsdWUgcHJvdmlkZWQgYnkgdXNlciBh bmQgcm91bmQgaXQgdG8gdGhlCi0gKiBwcmVjaXNpb24gc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2Fy ZS4KLSAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBkcm1fY29sb3JfbHV0X2V4dHJhY3QodWlu dDMyX3QgdXNlcl9pbnB1dCwKLQkJCQkJICAgICB1aW50MzJfdCBiaXRfcHJlY2lzaW9uKQotewot CXVpbnQzMl90IHZhbCA9IHVzZXJfaW5wdXQ7Ci0JdWludDMyX3QgbWF4ID0gMHhmZmZmID4+ICgx NiAtIGJpdF9wcmVjaXNpb24pOwotCi0JLyogUm91bmQgb25seSBpZiB3ZSdyZSBub3QgdXNpbmcg ZnVsbCBwcmVjaXNpb24uICovCi0JaWYgKGJpdF9wcmVjaXNpb24gPCAxNikgewotCQl2YWwgKz0g MVVMIDw8ICgxNiAtIGJpdF9wcmVjaXNpb24gLSAxKTsKLQkJdmFsID4+PSAxNiAtIGJpdF9wcmVj aXNpb247Ci0JfQotCi0JcmV0dXJuIGNsYW1wX3ZhbCh2YWwsIDAsIG1heCk7Ci19Ci0KICNkZWZp bmUgZHJtX2Zvcl9lYWNoX2NydGMoY3J0YywgZGV2KSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShj cnRjLCAmKGRldiktPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKIAotLSAKMi45LjMKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=