From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH 14/36] drm/tegra: rgb: Demidlayer Date: Tue, 20 Jan 2015 11:48:33 +0100 Message-ID: <1421750935-4023-15-git-send-email-thierry.reding@gmail.com> References: <1421750935-4023-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1421750935-4023-1-git-send-email-thierry.reding@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 Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: linux-tegra@vger.kernel.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KCkltcGxlbWVudCBlbmNv ZGVyIGFuZCBjb25uZWN0b3Igd2l0aGluIHRoZSBSR0IgZHJpdmVyIGl0c2VsZiB1c2luZyB0aGUK VGVncmEgb3V0cHV0IGhlbHBlcnMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIFRlZ3JhIG91dHB1dCBh cyBtaWRsYXllci4gQnkKZG9pbmcgc28gb25lIGxldmVsIG9mIGluZGlyZWN0aW9uIGlzIHJlbW92 ZWQgYW5kIG91dHB1dCBkcml2ZXJzIGJlY29tZQptb3JlIGZsZXhpYmxlIHdoaWxlIGtlZXBpbmcg dGhlIG1ham9yaXR5IG9mIHRoZSBhZHZhbnRhZ2VzIHByb3ZpZGVkIGJ5CnRoZSBjb21tb24gb3V0 cHV0IGhlbHBlcnMuCgpTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0Budmlk aWEuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jICAgICB8ICAyNCArKysrCiBk cml2ZXJzL2dwdS9kcm0vdGVncmEvZHJtLmggICAgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL3Rl Z3JhL291dHB1dC5jIHwgICA1IC0KIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9yZ2IuYyAgICB8IDI0 MyArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogNCBmaWxlcyBjaGFu Z2VkLCAxNjEgaW5zZXJ0aW9ucygrKSwgMTEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RjLmMKaW5k ZXggMzllMWIzYjM4NTM2Li5jNTFmYzRkYjczZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS90ZWdyYS9kYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kYy5jCkBAIC0xMDAxLDYg KzEwMDEsNyBAQCBzdGF0aWMgaW50IHRlZ3JhX2RjX3dhaXRfaWRsZShzdHJ1Y3QgdGVncmFfZGMg KmRjLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiBzdGF0aWMgdm9pZCB0ZWdyYV9jcnRjX2Rpc2Fi bGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCB0ZWdyYV9kYyAqZGMgPSB0b190 ZWdyYV9kYyhjcnRjKTsKKwl1MzIgdmFsdWU7CiAKIAlpZiAoIXRlZ3JhX2RjX2lkbGUoZGMpKSB7 CiAJCXRlZ3JhX2RjX3N0b3AoZGMpOwpAQCAtMTAxMiw2ICsxMDEzLDI5IEBAIHN0YXRpYyB2b2lk IHRlZ3JhX2NydGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCXRlZ3JhX2RjX3dh aXRfaWRsZShkYywgMTAwKTsKIAl9CiAKKwkvKgorCSAqIFRoaXMgc2hvdWxkIHJlYWxseSBiZSBw YXJ0IG9mIHRoZSBSR0IgZW5jb2RlciBkcml2ZXIsIGJ1dCBjbGVhcmluZworCSAqIHRoZXNlIGJp dHMgaGFzIHRoZSBzaWRlLWVmZmVjdCBvZiBzdG9wcGluZyB0aGUgZGlzcGxheSBjb250cm9sbGVy LgorCSAqIFdoZW4gdGhhdCBoYXBwZW5zIG5vIFZCTEFOSyBpbnRlcnJ1cHRzIHdpbGwgYmUgcmFp c2VkLiBBdCB0aGUgc2FtZQorCSAqIHRpbWUgdGhlIGVuY29kZXIgaXMgZGlzYWJsZWQgYmVmb3Jl IHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIsIHNvIHRoZQorCSAqIGFib3ZlIGNvZGUgaXMgYWx3YXlz IGdvaW5nIHRvIHRpbWVvdXQgd2FpdGluZyBmb3IgdGhlIGNvbnRyb2xsZXIKKwkgKiB0byBnbyBp ZGxlLgorCSAqCisJICogR2l2ZW4gdGhlIGNsb3NlIGNvdXBsaW5nIGJldHdlZW4gdGhlIFJHQiBl bmNvZGVyIGFuZCB0aGUgZGlzcGxheQorCSAqIGNvbnRyb2xsZXIgZG9pbmcgaXQgaGVyZSBpcyBz dGlsbCBraW5kIG9mIG9rYXkuIE5vbmUgb2YgdGhlIG90aGVyCisJICogZW5jb2RlciBkcml2ZXJz IHJlcXVpcmUgdGhlc2UgYml0cyB0byBiZSBjbGVhcmVkLgorCSAqCisJICogWFhYOiBQZXJoYXBz IGdpdmVuIHRoYXQgdGhlIGRpc3BsYXkgY29udHJvbGxlciBpcyBzd2l0Y2hlZCBvZmYgYXQKKwkg KiB0aGlzIHBvaW50IGFueXdheSBtYXliZSBjbGVhcmluZyB0aGVzZSBiaXRzIGlzbid0IGV2ZW4g dXNlZnVsIGZvcgorCSAqIHRoZSBSR0IgZW5jb2Rlcj8KKwkgKi8KKwlpZiAoZGMtPnJnYikgewor CQl2YWx1ZSA9IHRlZ3JhX2RjX3JlYWRsKGRjLCBEQ19DTURfRElTUExBWV9QT1dFUl9DT05UUk9M KTsKKwkJdmFsdWUgJj0gfihQVzBfRU5BQkxFIHwgUFcxX0VOQUJMRSB8IFBXMl9FTkFCTEUgfCBQ VzNfRU5BQkxFIHwKKwkJCSAgIFBXNF9FTkFCTEUgfCBQTTBfRU5BQkxFIHwgUE0xX0VOQUJMRSk7 CisJCXRlZ3JhX2RjX3dyaXRlbChkYywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX1BPV0VSX0NPTlRS T0wpOworCX0KKwogCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7CiAJdGVncmFfZGNfY29tbWl0 KGRjKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uaCBiL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9kcm0uaAppbmRleCBlMTM3NGVjMmI3NmUuLmRiYzFmODMzMjdlYSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RybS5oCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS90ZWdyYS9kcm0uaApAQCAtMTkzLDcgKzE5Myw2IEBAIHN0cnVjdCB0ZWdyYV9vdXRwdXRf b3BzIHsKIH07CiAKIGVudW0gdGVncmFfb3V0cHV0X3R5cGUgewotCVRFR1JBX09VVFBVVF9SR0Is CiAJVEVHUkFfT1VUUFVUX0hETUksCiAJVEVHUkFfT1VUUFVUX0RTSSwKIAlURUdSQV9PVVRQVVRf RURQLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL291dHB1dC5jIGIvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL291dHB1dC5jCmluZGV4IGJjODI3NDM5MDRjMS4uOWRkM2MzNGQ0N2Zl IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvb3V0cHV0LmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL291dHB1dC5jCkBAIC0yNzYsMTEgKzI3Niw2IEBAIGludCB0ZWdyYV9v dXRwdXRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgdGVncmFfb3V0cHV0ICpv dXRwdXQpCiAJaW50IGNvbm5lY3RvciwgZW5jb2RlcjsKIAogCXN3aXRjaCAob3V0cHV0LT50eXBl KSB7Ci0JY2FzZSBURUdSQV9PVVRQVVRfUkdCOgotCQljb25uZWN0b3IgPSBEUk1fTU9ERV9DT05O RUNUT1JfTFZEUzsKLQkJZW5jb2RlciA9IERSTV9NT0RFX0VOQ09ERVJfTFZEUzsKLQkJYnJlYWs7 Ci0KIAljYXNlIFRFR1JBX09VVFBVVF9IRE1JOgogCQljb25uZWN0b3IgPSBEUk1fTU9ERV9DT05O RUNUT1JfSERNSUE7CiAJCWVuY29kZXIgPSBEUk1fTU9ERV9FTkNPREVSX1RNRFM7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvcmdiLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEv cmdiLmMKaW5kZXggMzliOGQ1ZmUwNGIyLi4zMGQ3YWUwMmFjZTggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS90ZWdyYS9yZ2IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdGVncmEvcmdiLmMK QEAgLTksNiArOSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAorI2luY2x1ZGUgPGRy bS9kcm1fcGFuZWwuaD4KKwogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgImRjLmgiCiAKQEAg LTg1LDEzICs4Nyw5OSBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9kY193cml0ZV9yZWdzKHN0cnVjdCB0 ZWdyYV9kYyAqZGMsCiAJCXRlZ3JhX2RjX3dyaXRlbChkYywgdGFibGVbaV0udmFsdWUsIHRhYmxl W2ldLm9mZnNldCk7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfb3V0cHV0X3JnYl9lbmFibGUoc3Ry dWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQorc3RhdGljIHZvaWQgdGVncmFfcmdiX2Nvbm5lY3Rv cl9kcG1zKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJICAgICBpbnQgbW9k ZSkKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHRlZ3Jh X3JnYl9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSB0ZWdyYV9yZ2JfY29ubmVjdG9yX2Rw bXMsCisJLmRldGVjdCA9IHRlZ3JhX291dHB1dF9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21v ZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5kZXN0cm95 ID0gdGVncmFfb3V0cHV0X2Nvbm5lY3Rvcl9kZXN0cm95LAorfTsKKworc3RhdGljIGVudW0gZHJt X21vZGVfc3RhdHVzCit0ZWdyYV9yZ2JfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSkKK3sKKwkvKgorCSAqIEZJWE1FOiBGb3Igbm93LCBhbHdheXMgYXNzdW1lIHRoYXQgdGhl IG1vZGUgaXMgb2theS4gVGhlcmUgYXJlCisJICogdW5yZXNvbHZlZCBpc3N1ZXMgd2l0aCBjbGtf cm91bmRfcmF0ZSgpLCB3aGljaCBkb2Vzbid0IGFsd2F5cworCSAqIHJlbGlhYmx5IHJlcG9ydCB3 aGV0aGVyIGEgZnJlcXVlbmN5IGNhbiBiZSBzZXQgb3Igbm90LgorCSAqLworCXJldHVybiBNT0RF X09LOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNz IHRlZ3JhX3JnYl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSB0ZWdy YV9vdXRwdXRfY29ubmVjdG9yX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHRlZ3JhX3JnYl9j b25uZWN0b3JfbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVyID0gdGVncmFfb3V0cHV0X2Nvbm5l Y3Rvcl9iZXN0X2VuY29kZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVy X2Z1bmNzIHRlZ3JhX3JnYl9lbmNvZGVyX2Z1bmNzID0geworCS5kZXN0cm95ID0gdGVncmFfb3V0 cHV0X2VuY29kZXJfZGVzdHJveSwKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3JnYl9lbmNvZGVy X2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgbW9kZSkKK3sKK30KKworc3Rh dGljIGJvb2wgdGVncmFfcmdiX2VuY29kZXJfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIsCisJCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJ CQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKIHsKKwlzdHJ1Y3QgdGVncmFf b3V0cHV0ICpvdXRwdXQgPSBlbmNvZGVyX3RvX291dHB1dChlbmNvZGVyKTsKKwl1bnNpZ25lZCBs b25nIHBjbGsgPSBtb2RlLT5jbG9jayAqIDEwMDA7CiAJc3RydWN0IHRlZ3JhX3JnYiAqcmdiID0g dG9fcmdiKG91dHB1dCk7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgZGl2 OworCWludCBlcnI7CiAKLQlpZiAocmdiLT5lbmFibGVkKQotCQlyZXR1cm4gMDsKKwkvKgorCSAq IFdlIG1heSBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgcGFyZW50IGNs b2NrLCBzaW5jZQorCSAqIGl0IG1heSBiZSBhIHBhcmVudCBmb3Igb3RoZXIgcGVyaXBoZXJhbHMu IFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0CisJICogdGhhdCBvbiBUZWdyYTIwIHRoZXJlJ3Mgb25s eSBhIHNpbmdsZSBjbG9jayBkZWRpY2F0ZWQgdG8gZGlzcGxheQorCSAqIChwbGxfZF9vdXQwKSwg d2hlcmVhcyBsYXRlciBnZW5lcmF0aW9ucyBoYXZlIGEgc2Vjb25kIG9uZSB0aGF0IGNhbgorCSAq IGJlIHVzZWQgdG8gaW5kZXBlbmRlbnRseSBkcml2ZSBhIHNlY29uZCBvdXRwdXQgKHBsbF9kMl9v dXQwKS4KKwkgKgorCSAqIEFzIGEgd2F5IHRvIHN1cHBvcnQgbXVsdGlwbGUgb3V0cHV0cyBvbiBU ZWdyYTIwIGFzIHdlbGwsIHBsbF9wIGlzCisJICogdHlwaWNhbGx5IHVzZWQgYXMgdGhlIHBhcmVu dCBjbG9jayBmb3IgdGhlIGRpc3BsYXkgY29udHJvbGxlcnMuCisJICogQnV0IHRoaXMgY29tZXMg YXQgYSBjb3N0OiBwbGxfcCBpcyB0aGUgcGFyZW50IG9mIHNldmVyYWwgb3RoZXIKKwkgKiBwZXJp cGhlcmFscywgc28gaXRzIGZyZXF1ZW5jeSBzaG91bGRuJ3QgY2hhbmdlIG91dCBvZiB0aGUgYmx1 ZS4KKwkgKgorCSAqIFRoZSBiZXN0IHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50IGlzIHRvIHVzZSB0 aGUgc2hpZnQgY2xvY2sgZGl2aWRlcgorCSAqIGFuZCBob3BlIHRoYXQgdGhlIGRlc2lyZWQgZnJl cXVlbmN5IGNhbiBiZSBtYXRjaGVkIChvciBhdCBsZWFzdAorCSAqIG1hdGNoZWQgc3VmZmljaWVu dGx5IGNsb3NlIHRoYXQgdGhlIHBhbmVsIHdpbGwgc3RpbGwgd29yaykuCisJICovCisJZGl2ID0g KChjbGtfZ2V0X3JhdGUocmdiLT5jbGspICogMikgLyBwY2xrKSAtIDI7CisKKwllcnIgPSB0ZWdy YV9kY19zZXR1cF9jbG9jayhyZ2ItPmRjLCByZ2ItPmNsa19wYXJlbnQsIHBjbGssIGRpdik7CisJ aWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihvdXRwdXQtPmRldiwgImZhaWxlZCB0byBzZXR1cCBE QyBjbG9jazogJWRcbiIsIGVycik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfcmdiX2VuY29kZXJfcHJlcGFyZShzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRlZ3JhX3JnYl9lbmNvZGVy X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRpYyB2b2lk IHRlZ3JhX3JnYl9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwK KwkJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3QgdGVncmFfb3V0cHV0 ICpvdXRwdXQgPSBlbmNvZGVyX3RvX291dHB1dChlbmNvZGVyKTsKKwlzdHJ1Y3QgdGVncmFfcmdi ICpyZ2IgPSB0b19yZ2Iob3V0cHV0KTsKKwl1MzIgdmFsdWU7CisKKwlpZiAob3V0cHV0LT5wYW5l bCkKKwkJZHJtX3BhbmVsX3ByZXBhcmUob3V0cHV0LT5wYW5lbCk7CiAKIAl0ZWdyYV9kY193cml0 ZV9yZWdzKHJnYi0+ZGMsIHJnYl9lbmFibGUsIEFSUkFZX1NJWkUocmdiX2VuYWJsZSkpOwogCkBA IC0xMjUsODggKzIxMywzMSBAQCBzdGF0aWMgaW50IHRlZ3JhX291dHB1dF9yZ2JfZW5hYmxlKHN0 cnVjdCB0ZWdyYV9vdXRwdXQgKm91dHB1dCkKIAogCXRlZ3JhX2RjX2NvbW1pdChyZ2ItPmRjKTsK IAotCXJnYi0+ZW5hYmxlZCA9IHRydWU7Ci0KLQlyZXR1cm4gMDsKKwlpZiAob3V0cHV0LT5wYW5l bCkKKwkJZHJtX3BhbmVsX2VuYWJsZShvdXRwdXQtPnBhbmVsKTsKIH0KIAotc3RhdGljIGludCB0 ZWdyYV9vdXRwdXRfcmdiX2Rpc2FibGUoc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0KQorc3Rh dGljIHZvaWQgdGVncmFfcmdiX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVu Y29kZXIpCiB7CisJc3RydWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0gZW5jb2Rlcl90b19vdXRw dXQoZW5jb2Rlcik7CiAJc3RydWN0IHRlZ3JhX3JnYiAqcmdiID0gdG9fcmdiKG91dHB1dCk7Ci0J dW5zaWduZWQgbG9uZyB2YWx1ZTsKIAotCWlmICghcmdiLT5lbmFibGVkKQotCQlyZXR1cm4gMDsK LQotCXZhbHVlID0gdGVncmFfZGNfcmVhZGwocmdiLT5kYywgRENfQ01EX0RJU1BMQVlfUE9XRVJf Q09OVFJPTCk7Ci0JdmFsdWUgJj0gfihQVzBfRU5BQkxFIHwgUFcxX0VOQUJMRSB8IFBXMl9FTkFC TEUgfCBQVzNfRU5BQkxFIHwKLQkJICAgUFc0X0VOQUJMRSB8IFBNMF9FTkFCTEUgfCBQTTFfRU5B QkxFKTsKLQl0ZWdyYV9kY193cml0ZWwocmdiLT5kYywgdmFsdWUsIERDX0NNRF9ESVNQTEFZX1BP V0VSX0NPTlRST0wpOworCWlmIChvdXRwdXQtPnBhbmVsKQorCQlkcm1fcGFuZWxfZGlzYWJsZShv dXRwdXQtPnBhbmVsKTsKIAogCXRlZ3JhX2RjX3dyaXRlX3JlZ3MocmdiLT5kYywgcmdiX2Rpc2Fi bGUsIEFSUkFZX1NJWkUocmdiX2Rpc2FibGUpKTsKIAotCXRlZ3JhX2RjX2NvbW1pdChyZ2ItPmRj KTsKLQotCXJnYi0+ZW5hYmxlZCA9IGZhbHNlOwotCi0JcmV0dXJuIDA7CisJaWYgKG91dHB1dC0+ cGFuZWwpCisJCWRybV9wYW5lbF91bnByZXBhcmUob3V0cHV0LT5wYW5lbCk7CiB9CiAKLXN0YXRp YyBpbnQgdGVncmFfb3V0cHV0X3JnYl9zZXR1cF9jbG9jayhzdHJ1Y3QgdGVncmFfb3V0cHV0ICpv dXRwdXQsCi0JCQkJCXN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBwY2xrLAotCQkJCQl1 bnNpZ25lZCBpbnQgKmRpdikKLXsKLQlzdHJ1Y3QgdGVncmFfcmdiICpyZ2IgPSB0b19yZ2Iob3V0 cHV0KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gY2xrX3NldF9wYXJlbnQoY2xrLCByZ2ItPmNsa19w YXJlbnQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIob3V0cHV0LT5kZXYsICJmYWlsZWQg dG8gc2V0IHBhcmVudDogJWRcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyoKLQkg KiBXZSBtYXkgbm90IHdhbnQgdG8gY2hhbmdlIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHBhcmVudCBj bG9jaywgc2luY2UKLQkgKiBpdCBtYXkgYmUgYSBwYXJlbnQgZm9yIG90aGVyIHBlcmlwaGVyYWxz LiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdAotCSAqIHRoYXQgb24gVGVncmEyMCB0aGVyZSdzIG9u bHkgYSBzaW5nbGUgY2xvY2sgZGVkaWNhdGVkIHRvIGRpc3BsYXkKLQkgKiAocGxsX2Rfb3V0MCks IHdoZXJlYXMgbGF0ZXIgZ2VuZXJhdGlvbnMgaGF2ZSBhIHNlY29uZCBvbmUgdGhhdCBjYW4KLQkg KiBiZSB1c2VkIHRvIGluZGVwZW5kZW50bHkgZHJpdmUgYSBzZWNvbmQgb3V0cHV0IChwbGxfZDJf b3V0MCkuCi0JICoKLQkgKiBBcyBhIHdheSB0byBzdXBwb3J0IG11bHRpcGxlIG91dHB1dHMgb24g VGVncmEyMCBhcyB3ZWxsLCBwbGxfcCBpcwotCSAqIHR5cGljYWxseSB1c2VkIGFzIHRoZSBwYXJl bnQgY2xvY2sgZm9yIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXJzLgotCSAqIEJ1dCB0aGlzIGNvbWVz IGF0IGEgY29zdDogcGxsX3AgaXMgdGhlIHBhcmVudCBvZiBzZXZlcmFsIG90aGVyCi0JICogcGVy aXBoZXJhbHMsIHNvIGl0cyBmcmVxdWVuY3kgc2hvdWxkbid0IGNoYW5nZSBvdXQgb2YgdGhlIGJs dWUuCi0JICoKLQkgKiBUaGUgYmVzdCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCBpcyB0byB1c2Ug dGhlIHNoaWZ0IGNsb2NrIGRpdmlkZXIKLQkgKiBhbmQgaG9wZSB0aGF0IHRoZSBkZXNpcmVkIGZy ZXF1ZW5jeSBjYW4gYmUgbWF0Y2hlZCAob3IgYXQgbGVhc3QKLQkgKiBtYXRjaGVkIHN1ZmZpY2ll bnRseSBjbG9zZSB0aGF0IHRoZSBwYW5lbCB3aWxsIHN0aWxsIHdvcmspLgotCSAqLwotCi0JKmRp diA9ICgoY2xrX2dldF9yYXRlKGNsaykgKiAyKSAvIHBjbGspIC0gMjsKLQotCXJldHVybiAwOwot fQotCi1zdGF0aWMgaW50IHRlZ3JhX291dHB1dF9yZ2JfY2hlY2tfbW9kZShzdHJ1Y3QgdGVncmFf b3V0cHV0ICpvdXRwdXQsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAotCQkJCSAgICAgICBlbnVtIGRybV9tb2RlX3N0YXR1cyAqc3RhdHVzKQotewotCS8qCi0JICog RklYTUU6IEZvciBub3csIGFsd2F5cyBhc3N1bWUgdGhhdCB0aGUgbW9kZSBpcyBva2F5LiBUaGVy ZSBhcmUKLQkgKiB1bnJlc29sdmVkIGlzc3VlcyB3aXRoIGNsa19yb3VuZF9yYXRlKCksIHdoaWNo IGRvZXNuJ3QgYWx3YXlzCi0JICogcmVsaWFibHkgcmVwb3J0IHdoZXRoZXIgYSBmcmVxdWVuY3kg Y2FuIGJlIHNldCBvciBub3QuCi0JICovCi0KLQkqc3RhdHVzID0gTU9ERV9PSzsKLQotCXJldHVy biAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRlZ3JhX291dHB1dF9vcHMgcmdiX29wcyA9 IHsKLQkuZW5hYmxlID0gdGVncmFfb3V0cHV0X3JnYl9lbmFibGUsCi0JLmRpc2FibGUgPSB0ZWdy YV9vdXRwdXRfcmdiX2Rpc2FibGUsCi0JLnNldHVwX2Nsb2NrID0gdGVncmFfb3V0cHV0X3JnYl9z ZXR1cF9jbG9jaywKLQkuY2hlY2tfbW9kZSA9IHRlZ3JhX291dHB1dF9yZ2JfY2hlY2tfbW9kZSwK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIHRlZ3JhX3JnYl9l bmNvZGVyX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IHRlZ3JhX3JnYl9lbmNvZGVyX2RwbXMs CisJLm1vZGVfZml4dXAgPSB0ZWdyYV9yZ2JfZW5jb2Rlcl9tb2RlX2ZpeHVwLAorCS5wcmVwYXJl ID0gdGVncmFfcmdiX2VuY29kZXJfcHJlcGFyZSwKKwkuY29tbWl0ID0gdGVncmFfcmdiX2VuY29k ZXJfY29tbWl0LAorCS5tb2RlX3NldCA9IHRlZ3JhX3JnYl9lbmNvZGVyX21vZGVfc2V0LAorCS5k aXNhYmxlID0gdGVncmFfcmdiX2VuY29kZXJfZGlzYWJsZSwKIH07CiAKIGludCB0ZWdyYV9kY19y Z2JfcHJvYmUoc3RydWN0IHRlZ3JhX2RjICpkYykKQEAgLTI2NSw1NSArMjk2LDU1IEBAIGludCB0 ZWdyYV9kY19yZ2JfcmVtb3ZlKHN0cnVjdCB0ZWdyYV9kYyAqZGMpCiAJaWYgKGVyciA8IDApCiAJ CXJldHVybiBlcnI7CiAKKwlkYy0+cmdiID0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCiBpbnQg dGVncmFfZGNfcmdiX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHRlZ3JhX2Rj ICpkYykKIHsKLQlzdHJ1Y3QgdGVncmFfcmdiICpyZ2IgPSB0b19yZ2IoZGMtPnJnYik7CisJc3Ry dWN0IHRlZ3JhX291dHB1dCAqb3V0cHV0ID0gZGMtPnJnYjsKIAlpbnQgZXJyOwogCiAJaWYgKCFk Yy0+cmdiKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJnYi0+b3V0cHV0LnR5cGUgPSBURUdSQV9P VVRQVVRfUkdCOwotCXJnYi0+b3V0cHV0Lm9wcyA9ICZyZ2Jfb3BzOwotCi0JZXJyID0gdGVncmFf b3V0cHV0X2luaXQoZGMtPmJhc2UuZGV2LCAmcmdiLT5vdXRwdXQpOwotCWlmIChlcnIgPCAwKSB7 Ci0JCWRldl9lcnIoZGMtPmRldiwgIm91dHB1dCBzZXR1cCBmYWlsZWQ6ICVkXG4iLCBlcnIpOwot CQlyZXR1cm4gZXJyOworCWRybV9jb25uZWN0b3JfaW5pdChkcm0sICZvdXRwdXQtPmNvbm5lY3Rv ciwgJnRlZ3JhX3JnYl9jb25uZWN0b3JfZnVuY3MsCisJCQkgICBEUk1fTU9ERV9DT05ORUNUT1Jf TFZEUyk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZvdXRwdXQtPmNvbm5lY3RvciwKKwkJ CQkgJnRlZ3JhX3JnYl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlvdXRwdXQtPmNvbm5lY3Rv ci5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlpZiAob3V0cHV0LT5wYW5lbCkgeworCQll cnIgPSBkcm1fcGFuZWxfYXR0YWNoKG91dHB1dC0+cGFuZWwsICZvdXRwdXQtPmNvbm5lY3Rvcik7 CisJCWlmIChlcnIgPCAwKQorCQkJZGV2X2VycihvdXRwdXQtPmRldiwgImZhaWxlZCB0byBhdHRh Y2ggcGFuZWw6ICVkXG4iLAorCQkJCWVycik7CiAJfQogCisJZHJtX2VuY29kZXJfaW5pdChkcm0s ICZvdXRwdXQtPmVuY29kZXIsICZ0ZWdyYV9yZ2JfZW5jb2Rlcl9mdW5jcywKKwkJCSBEUk1fTU9E RV9FTkNPREVSX0xWRFMpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJm91dHB1dC0+ZW5jb2Rl ciwKKwkJCSAgICAgICAmdGVncmFfcmdiX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWRybV9t b2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcigmb3V0cHV0LT5jb25uZWN0b3IsCisJCQkJCSAg Jm91dHB1dC0+ZW5jb2Rlcik7CisJZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcigmb3V0cHV0LT5jb25u ZWN0b3IpOworCiAJLyoKLQkgKiBCeSBkZWZhdWx0LCBvdXRwdXRzIGNhbiBiZSBhc3NvY2lhdGVk IHdpdGggZWFjaCBkaXNwbGF5IGNvbnRyb2xsZXIuCi0JICogUkdCIG91dHB1dHMgYXJlIGFuIGV4 Y2VwdGlvbiwgc28gd2UgbWFrZSBzdXJlIHRoZXkgY2FuIGJlIGF0dGFjaGVkCi0JICogdG8gb25s eSB0aGVpciBwYXJlbnQgZGlzcGxheSBjb250cm9sbGVyLgorCSAqIE90aGVyIG91dHB1dHMgY2Fu IGJlIGF0dGFjaGVkIHRvIGVpdGhlciBkaXNwbGF5IGNvbnRyb2xsZXIuIFRoZSBSR0IKKwkgKiBv dXRwdXRzIGFyZSBhbiBleGNlcHRpb24gYW5kIHdvcmsgb25seSB3aXRoIHRoZWlyIHBhcmVudCBk aXNwbGF5CisJICogY29udHJvbGxlci4KIAkgKi8KLQlyZ2ItPm91dHB1dC5lbmNvZGVyLnBvc3Np YmxlX2NydGNzID0gZHJtX2NydGNfbWFzaygmZGMtPmJhc2UpOworCW91dHB1dC0+ZW5jb2Rlci5w b3NzaWJsZV9jcnRjcyA9IGRybV9jcnRjX21hc2soJmRjLT5iYXNlKTsKIAogCXJldHVybiAwOwog fQogCiBpbnQgdGVncmFfZGNfcmdiX2V4aXQoc3RydWN0IHRlZ3JhX2RjICpkYykKIHsKLQlpZiAo ZGMtPnJnYikgewotCQlpbnQgZXJyOwotCi0JCWVyciA9IHRlZ3JhX291dHB1dF9kaXNhYmxlKGRj LT5yZ2IpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJZGV2X2VycihkYy0+ZGV2LCAib3V0cHV0IGZh aWxlZCB0byBkaXNhYmxlOiAlZFxuIiwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQll cnIgPSB0ZWdyYV9vdXRwdXRfZXhpdChkYy0+cmdiKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRl dl9lcnIoZGMtPmRldiwgIm91dHB1dCBjbGVhbnVwIGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCQly ZXR1cm4gZXJyOwotCQl9Ci0KLQkJZGMtPnJnYiA9IE5VTEw7Ci0JfQorCWlmICghZGMtPnJnYikK KwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdGVncmFfb3V0cHV0X2V4aXQoZGMt PnJnYik7CiB9Ci0tIAoyLjEuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK