From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= Subject: [RFC v4 09/25] drm/fb-helper: Move modeset commit code to drm_client Date: Fri, 13 Apr 2018 18:53:38 +0200 Message-ID: <20180413165354.8331-10-noralf@tronnes.org> References: <20180413165354.8331-1-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180413165354.8331-1-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= , laurent.pinchart@ideasonboard.com, mstaudt@suse.de, dh.herrmann@gmail.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBtb3ZlcyB0aGUgY29tbWl0dGluZyBwYXJ0IG9mIHRoZSBtb2Rlc2V0dGluZyBjb2RlIHRv IGRybV9jbGllbnQuCgpTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9u bmVzLm9yZz4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jICAgIHwgMjQyICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1f ZmJfaGVscGVyLmMgfCAyMTYgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlu Y2x1ZGUvZHJtL2RybV9jbGllbnQuaCAgICAgICAgfCAgIDggKysKIDMgZmlsZXMgY2hhbmdlZCwg MjUyIGluc2VydGlvbnMoKyksIDIxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vZHJtX2NsaWVudC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYwppbmRl eCA3YzMxYTZlZmIyZjQuLmM4NWMxMzU2OGNmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2RybV9jbGllbnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCkBAIC0xMCw2 ICsxMCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgogI2luY2x1ZGUg PGRybS9kcm1fY2xpZW50Lmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KICNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KQEAgLTExNywzICsxMTksMjQzIEBAIGRybV9jbGllbnRfZGlz cGxheV9maW5kX21vZGVzZXQoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgc3Ry dWN0IGRybV9jCiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfZGlz cGxheV9maW5kX21vZGVzZXQpOworCisvKioKKyAqIGRybV9jbGllbnRfZGlzcGxheV9wYW5lbF9y b3RhdGlvbigpIC0gQ2hlY2sgcGFuZWwgb3JpZW50YXRpb24KKyAqIEBjb25uZWN0b3I6IERSTSBj b25uZWN0b3IKKyAqIEBwbGFuZTogRFJNIHBsYW5lCisgKiBAcm90YXRpb246IFJldHVybmVkIHJv dGF0aW9uIHZhbHVlCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgQHBsYW5lIGNhbiBo dyByb3RhdGUgdG8gbWF0Y2ggdGhlIHBhbmVsIG9yaWVudGF0aW9uCisgKiBvbiBAY29ubmVjdG9y LgorICoKKyAqIFJldHVybjoKKyAqIFRydWUgaWYgdGhlIHBsYW5lIGNhbiBkbyB0aGUgcm90YXRp b24sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCBkcm1fY2xpZW50X2Rpc3BsYXlfcGFuZWxf cm90YXRpb24oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgICAgICAgc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcm90YXRpb24p Cit7CisJdWludDY0X3QgdmFsaWRfbWFzayA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAo IWNvbm5lY3RvcikKKwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChjb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5wYW5lbF9vcmllbnRhdGlvbikgeworCWNhc2UgRFJNX01PREVfUEFORUxfT1JJRU5U QVRJT05fQk9UVE9NX1VQOgorCQkqcm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMTgwOworCQli cmVhazsKKwljYXNlIERSTV9NT0RFX1BBTkVMX09SSUVOVEFUSU9OX0xFRlRfVVA6CisJCSpyb3Rh dGlvbiA9IERSTV9NT0RFX1JPVEFURV85MDsKKwkJYnJlYWs7CisJY2FzZSBEUk1fTU9ERV9QQU5F TF9PUklFTlRBVElPTl9SSUdIVF9VUDoKKwkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzI3 MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnJvdGF0aW9uID0gRFJNX01PREVfUk9UQVRFXzA7 CisJfQorCisJLyoKKwkgKiBUT0RPOiBzdXBwb3J0IDkwIC8gMjcwIGRlZ3JlZSBoYXJkd2FyZSBy b3RhdGlvbiwKKwkgKiBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIHRoaXMgbWF5IHJlcXVpcmUg dGhlIGZyYW1lYnVmZmVyCisJICogdG8gYmUgaW4gYSBzcGVjaWZpYyB0aWxpbmcgZm9ybWF0Lgor CSAqLworCWlmICgqcm90YXRpb24gIT0gRFJNX01PREVfUk9UQVRFXzE4MCB8fCAhcGxhbmUtPnJv dGF0aW9uX3Byb3BlcnR5KQorCQlyZXR1cm4gZmFsc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGxh bmUtPnJvdGF0aW9uX3Byb3BlcnR5LT5udW1fdmFsdWVzOyBpKyspCisJCXZhbGlkX21hc2sgfD0g KDFVTEwgPDwgcGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5LT52YWx1ZXNbaV0pOworCisJaWYgKCEo KnJvdGF0aW9uICYgdmFsaWRfbWFzaykpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl OworfQorRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfcGFuZWxfcm90YXRpb24pOwor CitzdGF0aWMgaW50IGRybV9jbGllbnRfZGlzcGxheV9yZXN0b3JlX2F0b21pYyhzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCBib29sIGFjdGl2ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gZGlzcGxheS0+ZGV2OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlOworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0OworCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZTsKKwlpbnQgcmV0Owor CXVuc2lnbmVkIGludCBwbGFuZV9tYXNrOworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0 eCBjdHg7CisKKwlkcm1fbW9kZXNldF9hY3F1aXJlX2luaXQoJmN0eCwgMCk7CisKKwlzdGF0ZSA9 IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKKwlpZiAoIXN0YXRlKSB7CisJCXJldCA9IC1F Tk9NRU07CisJCWdvdG8gb3V0X2N0eDsKKwl9CisKKwlzdGF0ZS0+YWNxdWlyZV9jdHggPSAmY3R4 OworcmV0cnk6CisJcGxhbmVfbWFzayA9IDA7CisJZHJtX2Zvcl9lYWNoX3BsYW5lKHBsYW5lLCBk ZXYpIHsKKwkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZSwg cGxhbmUpOworCQlpZiAoSVNfRVJSKHBsYW5lX3N0YXRlKSkgeworCQkJcmV0ID0gUFRSX0VSUihw bGFuZV9zdGF0ZSk7CisJCQlnb3RvIG91dF9zdGF0ZTsKKwkJfQorCisJCXBsYW5lX3N0YXRlLT5y b3RhdGlvbiA9IERSTV9NT0RFX1JPVEFURV8wOworCisJCXBsYW5lLT5vbGRfZmIgPSBwbGFuZS0+ ZmI7CisJCXBsYW5lX21hc2sgfD0gMSA8PCBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOworCisJCS8q IGRpc2FibGUgbm9uLXByaW1hcnk6ICovCisJCWlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVf VFlQRV9QUklNQVJZKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZHJtX2F0b21pY19kaXNhYmxl X3BsYW5lKHBsYW5lLCBwbGFuZV9zdGF0ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gb3V0 X3N0YXRlOworCX0KKworCWRybV9jbGllbnRfZGlzcGxheV9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVf c2V0LCBkaXNwbGF5KSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnkgPSBtb2RlX3NldC0+ Y3J0Yy0+cHJpbWFyeTsKKwkJdW5zaWduZWQgaW50IHJvdGF0aW9uOworCisJCWlmIChkcm1fY2xp ZW50X2Rpc3BsYXlfcGFuZWxfcm90YXRpb24obW9kZV9zZXQtPmNvbm5lY3RvcnNbMF0sIHByaW1h cnksICZyb3RhdGlvbikpIHsKKwkJCS8qIENhbm5vdCBmYWlsIGFzIHdlJ3ZlIGFscmVhZHkgZ290 dGVuIHRoZSBwbGFuZSBzdGF0ZSBhYm92ZSAqLworCQkJcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9uZXdfcGxhbmVfc3RhdGUoc3RhdGUsIHByaW1hcnkpOworCQkJcGxhbmVfc3RhdGUtPnJv dGF0aW9uID0gcm90YXRpb247CisJCX0KKworCQlyZXQgPSBkcm1fYXRvbWljX3NldF9jb25maWco bW9kZV9zZXQsIHN0YXRlKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXRfc3RhdGU7CisK KwkJLyoKKwkJICogZHJtX2F0b21pY19zZXRfY29uZmlnKCkgc2V0cyBhY3RpdmUgd2hlbiBhCisJ CSAqIG1vZGUgaXMgc2V0LCB1bmNvbmRpdGlvbmFsbHkgY2xlYXIgaXQgaWYgd2UgZm9yY2UgRFBN UyBvZmYKKwkJICovCisJCWlmICghYWN0aXZlKSB7CisJCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGMg PSBtb2RlX3NldC0+Y3J0YzsKKwkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSA9 IGRybV9hdG9taWNfZ2V0X25ld19jcnRjX3N0YXRlKHN0YXRlLCBjcnRjKTsKKworCQkJY3J0Y19z dGF0ZS0+YWN0aXZlID0gZmFsc2U7CisJCX0KKwl9CisKKwlyZXQgPSBkcm1fYXRvbWljX2NvbW1p dChzdGF0ZSk7CisKK291dF9zdGF0ZToKKwlkcm1fYXRvbWljX2NsZWFuX29sZF9mYihkZXYsIHBs YW5lX21hc2ssIHJldCk7CisKKwlpZiAocmV0ID09IC1FREVBRExLKQorCQlnb3RvIGJhY2tvZmY7 CisKKwlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7CitvdXRfY3R4OgorCWRybV9tb2Rlc2V0 X2Ryb3BfbG9ja3MoJmN0eCk7CisJZHJtX21vZGVzZXRfYWNxdWlyZV9maW5pKCZjdHgpOworCisJ cmV0dXJuIHJldDsKKworYmFja29mZjoKKwlkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsK Kwlkcm1fbW9kZXNldF9iYWNrb2ZmKCZjdHgpOworCisJZ290byByZXRyeTsKK30KKworc3RhdGlj IGludCBkcm1fY2xpZW50X2Rpc3BsYXlfcmVzdG9yZV9sZWdhY3koc3RydWN0IGRybV9jbGllbnRf ZGlzcGxheSAqZGlzcGxheSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGlzcGxheS0+ ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9zZXQgKm1vZGVfc2V0OworCXN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lOworCWludCByZXQgPSAwOworCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKKwlk cm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgeworCQlpZiAocGxhbmUtPnR5cGUgIT0gRFJN X1BMQU5FX1RZUEVfUFJJTUFSWSkKKwkJCWRybV9wbGFuZV9mb3JjZV9kaXNhYmxlKHBsYW5lKTsK KworCQlpZiAocGxhbmUtPnJvdGF0aW9uX3Byb3BlcnR5KQorCQkJZHJtX21vZGVfcGxhbmVfc2V0 X29ial9wcm9wKHBsYW5lLAorCQkJCQkJICAgIHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eSwKKwkJ CQkJCSAgICBEUk1fTU9ERV9ST1RBVEVfMCk7CisJfQorCisJZHJtX2NsaWVudF9kaXNwbGF5X2Zv cl9lYWNoX21vZGVzZXQobW9kZV9zZXQsIGRpc3BsYXkpIHsKKwkJc3RydWN0IGRybV9jcnRjICpj cnRjID0gbW9kZV9zZXQtPmNydGM7CisKKwkJaWYgKGNydGMtPmZ1bmNzLT5jdXJzb3Jfc2V0Mikg eworCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9zZXQyKGNydGMsIE5VTEwsIDAsIDAsIDAs IDAsIDApOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChjcnRjLT5m dW5jcy0+Y3Vyc29yX3NldCkgeworCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPmN1cnNvcl9zZXQoY3J0 YywgTlVMTCwgMCwgMCwgMCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJ cmV0ID0gZHJtX21vZGVfc2V0X2NvbmZpZ19pbnRlcm5hbChtb2RlX3NldCk7CisJCWlmIChyZXQp CisJCQlnb3RvIG91dDsKKwl9CitvdXQ6CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOwor CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkcm1fY2xpZW50X2Rpc3BsYXlfcmVzdG9yZSgp IC0gUmVzdG9yZSBjbGllbnQgZGlzcGxheQorICogQGRpc3BsYXk6IENsaWVudCBkaXNwbGF5Cisg KgorICogUmVzdG9yZSBjbGllbnQgZGlzcGxheSB1c2luZyB0aGUgY3VycmVudCBtb2Rlc2V0IGNv bmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJuOgorICogWmVybyBvbiBzdWNjZXMgb3IgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3Jl c3RvcmUoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKK3sKKwlpZiAoZHJtX2Ry dl91c2VzX2F0b21pY19tb2Rlc2V0KGRpc3BsYXktPmRldikpCisJCXJldHVybiBkcm1fY2xpZW50 X2Rpc3BsYXlfcmVzdG9yZV9hdG9taWMoZGlzcGxheSwgdHJ1ZSk7CisJZWxzZQorCQlyZXR1cm4g ZHJtX2NsaWVudF9kaXNwbGF5X3Jlc3RvcmVfbGVnYWN5KGRpc3BsYXkpOworfQorRVhQT1JUX1NZ TUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfcmVzdG9yZSk7CisKK3N0YXRpYyB2b2lkIGRybV9jbGll bnRfZGlzcGxheV9kcG1zX2xlZ2FjeShzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5 LCBpbnQgZHBtc19tb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkaXNwbGF5LT5k ZXY7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX21vZGVf c2V0ICptb2Rlc2V0OworCWludCBpOworCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZGV2KTsKKwlk cm1fY2xpZW50X2Rpc3BsYXlfZm9yX2VhY2hfbW9kZXNldChtb2Rlc2V0LCBkaXNwbGF5KSB7CisJ CWlmICghbW9kZXNldC0+Y3J0Yy0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9 IDA7IGkgPCBtb2Rlc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCQljb25uZWN0b3IgPSBt b2Rlc2V0LT5jb25uZWN0b3JzW2ldOworCQkJY29ubmVjdG9yLT5mdW5jcy0+ZHBtcyhjb25uZWN0 b3IsIGRwbXNfbW9kZSk7CisJCQlkcm1fb2JqZWN0X3Byb3BlcnR5X3NldF92YWx1ZSgmY29ubmVj dG9yLT5iYXNlLAorCQkJCWRldi0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eSwgZHBtc19tb2Rl KTsKKwkJfQorCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRldik7Cit9CisKKy8qKgorICog ZHJtX2NsaWVudF9kaXNwbGF5X2RwbXMoKSAtIFNldCBkaXNwbGF5IERQTVMgbW9kZQorICogQGRp c3BsYXk6IENsaWVudCBkaXNwbGF5CisgKiBAbW9kZTogRFBNUyBtb2RlCisgKi8KK3ZvaWQgZHJt X2NsaWVudF9kaXNwbGF5X2RwbXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwg aW50IG1vZGUpCit7CisJaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkaXNwbGF5LT5k ZXYpKQorCQlkcm1fY2xpZW50X2Rpc3BsYXlfcmVzdG9yZV9hdG9taWMoZGlzcGxheSwgbW9kZSA9 PSBEUk1fTU9ERV9EUE1TX09OKTsKKwllbHNlCisJCWRybV9jbGllbnRfZGlzcGxheV9kcG1zX2xl Z2FjeShkaXNwbGF5LCBtb2RlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5 X2RwbXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggYmRiNGI1N2QyYzEyLi43ODVhMmY1 ZDI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMjgwLDE4OCArMjgwLDYgQEAgaW50 IGRybV9mYl9oZWxwZXJfZGVidWdfbGVhdmUoc3RydWN0IGZiX2luZm8gKmluZm8pCiB9CiBFWFBP UlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfZGVidWdfbGVhdmUpOwogCi0vKiBDaGVjayBpZiB0aGUg cGxhbmUgY2FuIGh3IHJvdGF0ZSB0byBtYXRjaCBwYW5lbCBvcmllbnRhdGlvbiAqLwotc3RhdGlj IGJvb2wgZHJtX2ZiX2hlbHBlcl9wYW5lbF9yb3RhdGlvbihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAotCQkJCQkgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJCSB1bnNpZ25l ZCBpbnQgKnJvdGF0aW9uKQotewotCXVpbnQ2NF90IHZhbGlkX21hc2sgPSAwOwotCXVuc2lnbmVk IGludCBpOwotCi0JaWYgKCFjb25uZWN0b3IpCi0JCXJldHVybiBmYWxzZTsKLQotCXN3aXRjaCAo Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucGFuZWxfb3JpZW50YXRpb24pIHsKLQljYXNlIERSTV9N T0RFX1BBTkVMX09SSUVOVEFUSU9OX0JPVFRPTV9VUDoKLQkJKnJvdGF0aW9uID0gRFJNX01PREVf Uk9UQVRFXzE4MDsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9QQU5FTF9PUklFTlRBVElPTl9M RUZUX1VQOgotCQkqcm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfOTA7Ci0JCWJyZWFrOwotCWNh c2UgRFJNX01PREVfUEFORUxfT1JJRU5UQVRJT05fUklHSFRfVVA6Ci0JCSpyb3RhdGlvbiA9IERS TV9NT0RFX1JPVEFURV8yNzA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSpyb3RhdGlvbiA9IERS TV9NT0RFX1JPVEFURV8wOwotCX0KLQotCS8qCi0JICogVE9ETzogc3VwcG9ydCA5MCAvIDI3MCBk ZWdyZWUgaGFyZHdhcmUgcm90YXRpb24sCi0JICogZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSB0 aGlzIG1heSByZXF1aXJlIHRoZSBmcmFtZWJ1ZmZlcgotCSAqIHRvIGJlIGluIGEgc3BlY2lmaWMg dGlsaW5nIGZvcm1hdC4KLQkgKi8KLQlpZiAoKnJvdGF0aW9uICE9IERSTV9NT0RFX1JPVEFURV8x ODAgfHwgIXBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JZm9y IChpID0gMDsgaSA8IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eS0+bnVtX3ZhbHVlczsgaSsrKQot CQl2YWxpZF9tYXNrIHw9ICgxVUxMIDw8IHBsYW5lLT5yb3RhdGlvbl9wcm9wZXJ0eS0+dmFsdWVz W2ldKTsKLQotCWlmICghKCpyb3RhdGlvbiAmIHZhbGlkX21hc2spKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGludCBkcm1fY2xpZW50X2Rpc3BsYXlfcmVz dG9yZV9hdG9taWMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgYm9vbCBhY3Rp dmUpCi17Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRpc3BsYXktPmRldjsKLQlzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKLQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2Rl X3NldDsKLQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZTsKLQlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGU7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgcGxhbmVfbWFzazsKLQlzdHJ1Y3Qg ZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggY3R4OwotCi0JZHJtX21vZGVzZXRfYWNxdWlyZV9pbml0 KCZjdHgsIDApOwotCi0Jc3RhdGUgPSBkcm1fYXRvbWljX3N0YXRlX2FsbG9jKGRldik7Ci0JaWYg KCFzdGF0ZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9jdHg7Ci0JfQotCi0Jc3Rh dGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKLXJldHJ5OgotCXBsYW5lX21hc2sgPSAwOwotCWRybV9m b3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2KSB7Ci0JCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19n ZXRfcGxhbmVfc3RhdGUoc3RhdGUsIHBsYW5lKTsKLQkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkp IHsKLQkJCXJldCA9IFBUUl9FUlIocGxhbmVfc3RhdGUpOwotCQkJZ290byBvdXRfc3RhdGU7Ci0J CX0KLQotCQlwbGFuZV9zdGF0ZS0+cm90YXRpb24gPSBEUk1fTU9ERV9ST1RBVEVfMDsKLQotCQlw bGFuZS0+b2xkX2ZiID0gcGxhbmUtPmZiOwotCQlwbGFuZV9tYXNrIHw9IDEgPDwgZHJtX3BsYW5l X2luZGV4KHBsYW5lKTsKLQotCQkvKiBkaXNhYmxlIG5vbi1wcmltYXJ5OiAqLwotCQlpZiAocGxh bmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSkKLQkJCWNvbnRpbnVlOwotCi0JCXJl dCA9IGRybV9hdG9taWNfZGlzYWJsZV9wbGFuZShwbGFuZSwgcGxhbmVfc3RhdGUpOwotCQlpZiAo cmV0ICE9IDApCi0JCQlnb3RvIG91dF9zdGF0ZTsKLQl9Ci0KLQlkcm1fY2xpZW50X2Rpc3BsYXlf Zm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgZGlzcGxheSkgewotCQlzdHJ1Y3QgZHJtX3BsYW5l ICpwcmltYXJ5ID0gbW9kZV9zZXQtPmNydGMtPnByaW1hcnk7Ci0JCXVuc2lnbmVkIGludCByb3Rh dGlvbjsKLQotCQlpZiAoZHJtX2ZiX2hlbHBlcl9wYW5lbF9yb3RhdGlvbihtb2RlX3NldC0+Y29u bmVjdG9yc1swXSwgcHJpbWFyeSwgJnJvdGF0aW9uKSkgewotCQkJLyogQ2Fubm90IGZhaWwgYXMg d2UndmUgYWxyZWFkeSBnb3R0ZW4gdGhlIHBsYW5lIHN0YXRlIGFib3ZlICovCi0JCQlwbGFuZV9z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X25ld19wbGFuZV9zdGF0ZShzdGF0ZSwgcHJpbWFyeSk7Ci0J CQlwbGFuZV9zdGF0ZS0+cm90YXRpb24gPSByb3RhdGlvbjsKLQkJfQotCi0JCXJldCA9IGRybV9h dG9taWNfc2V0X2NvbmZpZyhtb2RlX3NldCwgc3RhdGUpOwotCQlpZiAocmV0ICE9IDApCi0JCQln b3RvIG91dF9zdGF0ZTsKLQotCQkvKgotCQkgKiBkcm1fYXRvbWljX3NldF9jb25maWcoKSBzZXRz IGFjdGl2ZSB3aGVuIGEgbW9kZSBpcyBzZXQsCi0JCSAqIHVuY29uZGl0aW9uYWxseSBjbGVhciBp dCBpZiB3ZSBmb3JjZSBEUE1TIG9mZgotCQkgKi8KLQkJaWYgKCFhY3RpdmUpIHsKLQkJCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9IG1vZGVfc2V0LT5jcnRjOwotCQkJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUsIGNy dGMpOwotCi0JCQljcnRjX3N0YXRlLT5hY3RpdmUgPSBmYWxzZTsKLQkJfQotCX0KLQotCXJldCA9 IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKLQotb3V0X3N0YXRlOgotCWRybV9hdG9taWNfY2xl YW5fb2xkX2ZiKGRldiwgcGxhbmVfbWFzaywgcmV0KTsKLQotCWlmIChyZXQgPT0gLUVERUFETEsp Ci0JCWdvdG8gYmFja29mZjsKLQotCWRybV9hdG9taWNfc3RhdGVfcHV0KHN0YXRlKTsKLW91dF9j dHg6Ci0JZHJtX21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKLQlkcm1fbW9kZXNldF9hY3F1aXJl X2ZpbmkoJmN0eCk7Ci0KLQlyZXR1cm4gcmV0OwotCi1iYWNrb2ZmOgotCWRybV9hdG9taWNfc3Rh dGVfY2xlYXIoc3RhdGUpOwotCWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Ci0KLQlnb3RvIHJl dHJ5OwotfQotCi1zdGF0aWMgaW50IGRybV9jbGllbnRfZGlzcGxheV9yZXN0b3JlX2xlZ2FjeShz dHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KQotewotCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBkaXNwbGF5LT5kZXY7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Ci0J c3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcm1fbW9kZXNldF9s b2NrX2FsbChkZXYpOwotCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2KSB7Ci0JCWlmIChw bGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQotCQkJZHJtX3BsYW5lX2ZvcmNl X2Rpc2FibGUocGxhbmUpOwotCi0JCWlmIChwbGFuZS0+cm90YXRpb25fcHJvcGVydHkpCi0JCQlk cm1fbW9kZV9wbGFuZV9zZXRfb2JqX3Byb3AocGxhbmUsCi0JCQkJCQkgICAgcGxhbmUtPnJvdGF0 aW9uX3Byb3BlcnR5LAotCQkJCQkJICAgIERSTV9NT0RFX1JPVEFURV8wKTsKLQl9Ci0KLQlkcm1f Y2xpZW50X2Rpc3BsYXlfZm9yX2VhY2hfbW9kZXNldChtb2RlX3NldCwgZGlzcGxheSkgewotCQlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBtb2RlX3NldC0+Y3J0YzsKLQotCQlpZiAoY3J0Yy0+ZnVu Y3MtPmN1cnNvcl9zZXQyKSB7Ci0JCQlyZXQgPSBjcnRjLT5mdW5jcy0+Y3Vyc29yX3NldDIoY3J0 YywgTlVMTCwgMCwgMCwgMCwgMCwgMCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0OwotCQl9 IGVsc2UgaWYgKGNydGMtPmZ1bmNzLT5jdXJzb3Jfc2V0KSB7Ci0JCQlyZXQgPSBjcnRjLT5mdW5j cy0+Y3Vyc29yX3NldChjcnRjLCBOVUxMLCAwLCAwLCAwKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290 byBvdXQ7Ci0JCX0KLQotCQlyZXQgPSBkcm1fbW9kZV9zZXRfY29uZmlnX2ludGVybmFsKG1vZGVf c2V0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCX0KLW91dDoKLQlkcm1fbW9kZXNldF91 bmxvY2tfYWxsKGRldik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGRybV9jbGll bnRfZGlzcGxheV9yZXN0b3JlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCi17 Ci0JaWYgKGRybV9kcnZfdXNlc19hdG9taWNfbW9kZXNldChkaXNwbGF5LT5kZXYpKQotCQlyZXR1 cm4gZHJtX2NsaWVudF9kaXNwbGF5X3Jlc3RvcmVfYXRvbWljKGRpc3BsYXksIHRydWUpOwotCWVs c2UKLQkJcmV0dXJuIGRybV9jbGllbnRfZGlzcGxheV9yZXN0b3JlX2xlZ2FjeShkaXNwbGF5KTsK LX0KLQogLyoqCiAgKiBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZV91bmxvY2tlZCAt IHJlc3RvcmUgZmJkZXYgY29uZmlndXJhdGlvbgogICogQGZiX2hlbHBlcjogZHJpdmVyLWFsbG9j YXRlZCBmYmRldiBoZWxwZXIsIGNhbiBiZSBOVUxMCkBAIC01NzksMzYgKzM5Nyw2IEBAIHN0YXRp YyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9yZV9vcCA9IHsK IHN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX2RybV9mYl9oZWxwZXJfcmVzdG9yZV9v cCA9IHsgfTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkcm1fY2xpZW50X2Rpc3BsYXlfZHBtc19s ZWdhY3koc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgaW50IGRwbXNfbW9kZSkK LXsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGlzcGxheS0+ZGV2OwotCXN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldDsKLQlp bnQgaTsKLQotCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7Ci0JZHJtX2NsaWVudF9kaXNwbGF5 X2Zvcl9lYWNoX21vZGVzZXQobW9kZXNldCwgZGlzcGxheSkgewotCQlpZiAoIW1vZGVzZXQtPmNy dGMtPmVuYWJsZWQpCi0JCQljb250aW51ZTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbW9kZXNldC0+ bnVtX2Nvbm5lY3RvcnM7IGkrKykgewotCQkJY29ubmVjdG9yID0gbW9kZXNldC0+Y29ubmVjdG9y c1tpXTsKLQkJCWNvbm5lY3Rvci0+ZnVuY3MtPmRwbXMoY29ubmVjdG9yLCBkcG1zX21vZGUpOwot CQkJZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoJmNvbm5lY3Rvci0+YmFzZSwKLQkJCQlk ZXYtPm1vZGVfY29uZmlnLmRwbXNfcHJvcGVydHksIGRwbXNfbW9kZSk7Ci0JCX0KLQl9Ci0JZHJt X21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBkcm1fY2xpZW50X2Rp c3BsYXlfZHBtcyhzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCBpbnQgbW9kZSkK LXsKLQlpZiAoZHJtX2Rydl91c2VzX2F0b21pY19tb2Rlc2V0KGRpc3BsYXktPmRldikpCi0JCWRy bV9jbGllbnRfZGlzcGxheV9yZXN0b3JlX2F0b21pYyhkaXNwbGF5LCBtb2RlID09IERSTV9NT0RF X0RQTVNfT04pOwotCWVsc2UKLQkJZHJtX2NsaWVudF9kaXNwbGF5X2RwbXNfbGVnYWN5KGRpc3Bs YXksIG1vZGUpOwotfQotCiBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX2RwbXMoc3RydWN0IGZi X2luZm8gKmluZm8sIGludCBkcG1zX21vZGUpCiB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZi X2hlbHBlciA9IGluZm8tPnBhcjsKQEAgLTI0ODcsOCArMjI3NSw4IEBAIHN0YXRpYyB2b2lkIGRy bV9zZXR1cF9jcnRjc19mYihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogCiAJCW1v ZGVzZXQtPmZiID0gZmJfaGVscGVyLT5mYjsKIAotCQlpZiAoZHJtX2ZiX2hlbHBlcl9wYW5lbF9y b3RhdGlvbihtb2Rlc2V0LT5jb25uZWN0b3JzWzBdLAotCQkJCQkJIG1vZGVzZXQtPmNydGMtPnBy aW1hcnksICZyb3RhdGlvbikpCisJCWlmIChkcm1fY2xpZW50X2Rpc3BsYXlfcGFuZWxfcm90YXRp b24obW9kZXNldC0+Y29ubmVjdG9yc1swXSwKKwkJCQkJCSAgICAgIG1vZGVzZXQtPmNydGMtPnBy aW1hcnksICZyb3RhdGlvbikpCiAJCQkvKiBSb3RhdGluZyBpbiBoYXJkd2FyZSwgZmJjb24gc2hv dWxkIG5vdCByb3RhdGUgKi8KIAkJCXN3X3JvdGF0aW9ucyB8PSBEUk1fTU9ERV9ST1RBVEVfMDsK IAkJZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oIGIvaW5jbHVkZS9k cm0vZHJtX2NsaWVudC5oCmluZGV4IGI2YTA1NzgwMjc2OS4uZWQwMjhmNTg3N2QwIDEwMDY0NAot LS0gYS9pbmNsdWRlL2RybS9kcm1fY2xpZW50LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVu dC5oCkBAIC0zLDkgKzMsMTEgQEAKICNpZm5kZWYgX0RSTV9DTElFTlRfSF8KICNkZWZpbmUgX0RS TV9DTElFTlRfSF8KIAorc3RydWN0IGRybV9jb25uZWN0b3I7CiBzdHJ1Y3QgZHJtX2NydGM7CiBz dHJ1Y3QgZHJtX2RldmljZTsKIHN0cnVjdCBkcm1fbW9kZV9zZXQ7CitzdHJ1Y3QgZHJtX3BsYW5l OwogCiAvKioKICAqIHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgLSBEUk0gY2xpZW50IGRpc3Bs YXkKQEAgLTQxLDQgKzQzLDEwIEBAIGRybV9jbGllbnRfZGlzcGxheV9maW5kX21vZGVzZXQoc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwgc3RydWN0IGRybV9jCiAjZGVmaW5lIGRy bV9jbGllbnRfZGlzcGxheV9mb3JfZWFjaF9tb2Rlc2V0KG1vZGVzZXQsIGRpc3BsYXkpIFwKIAlm b3IgKG1vZGVzZXQgPSBkaXNwbGF5LT5tb2Rlc2V0czsgbW9kZXNldC0+Y3J0YzsgbW9kZXNldCsr KQogCitib29sIGRybV9jbGllbnRfZGlzcGxheV9wYW5lbF9yb3RhdGlvbihzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK KwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpyb3RhdGlvbik7CitpbnQgZHJtX2NsaWVudF9kaXNw bGF5X3Jlc3RvcmUoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSk7Cit2b2lkIGRy bV9jbGllbnRfZGlzcGxheV9kcG1zKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXks IGludCBtb2RlKTsKKwogI2VuZGlmCi0tIAoyLjE1LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=