From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Clark Subject: [PATCH 11/11] drm: Atomic modeset ioctl Date: Thu, 18 Dec 2014 16:01:56 -0500 Message-ID: <1418936516-10754-12-git-send-email-robdclark@gmail.com> References: <1418936516-10754-1-git-send-email-robdclark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qc0-f177.google.com (mail-qc0-f177.google.com [209.85.216.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 4D91B6EA8A for ; Thu, 18 Dec 2014 13:02:28 -0800 (PST) Received: by mail-qc0-f177.google.com with SMTP id x3so1515865qcv.22 for ; Thu, 18 Dec 2014 13:02:28 -0800 (PST) In-Reply-To: <1418936516-10754-1-git-send-email-robdclark@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 VGhlIGF0b21pYyBtb2Rlc2V0IGlvY3RsIGNhbiBiZSB1c2VkIHRvIHB1c2ggYW55IG51bWJlciBv ZiBuZXcgdmFsdWVzCmZvciBvYmplY3QgcHJvcGVydGllcy4gVGhlIGRyaXZlciBjYW4gdGhlbiBj aGVjayB0aGUgZnVsbCBkZXZpY2UKY29uZmlndXJhdGlvbiBhcyBzaW5nbGUgdW5pdCwgYW5kIHRy eSB0byBhcHBseSB0aGUgY2hhbmdlcyBhdG9taWNhbGx5LgoKVGhlIGlvY3RsIHNpbXBseSB0YWtl cyBhIGxpc3Qgb2Ygb2JqZWN0IElEcyBhbmQgcHJvcGVydHkgSURzIGFuZCB0aGVpcgp2YWx1ZXMu CgpPcmlnaW5hbGx5IGJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBWaWxsZSBTeXJqw6Rsw6QsIGFsdGhv dWdoIGl0IGhhcyBtdXRhdGVkCihtdXRpbGF0ZWQ/KSBlbm91Z2ggc2luY2UgdGhlbiB0aGF0IHlv dSBwcm9iYWJseSBzaG91bGRuJ3QgYmxhbWUgaXQgb24KaGltIDstKQoKVGhlIGF0b21pYyBzdXBw b3J0IGlzIGhpZGRlbiBiZWhpbmQgdGhlIERSTV9DTElFTlRfQ0FQX0FUT01JQyBjYXAgKHRvCnBy b3RlY3QgbGVnYWN5IHVzZXJzcGFjZSkgYW5kIGRybS5hdG9taWMgbW9kdWxlIHBhcmFtIChmb3Ig bm93KS4KClNpZ25lZC1vZmYtYnk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KUmV2 aWV3ZWQtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgpSZXZpZXdlZC1ieTog RGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pYy5jIHwgMzMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jICAgfCAgIDQgKy0KIGRyaXZlcnMv Z3B1L2RybS9kcm1faW9jdGwuYyAgfCAgIDEgKwogaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAg ICB8ICAxMCArLQogaW5jbHVkZS91YXBpL2RybS9kcm0uaCAgICAgICB8ICAgMSArCiBpbmNsdWRl L3VhcGkvZHJtL2RybV9tb2RlLmggIHwgIDIzICsrKwogNiBmaWxlcyBjaGFuZ2VkLCAzNjYgaW5z ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwppbmRleCA1N2NjNjgx Li42N2Y2NGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKQEAgLTU2LDYgKzU2LDExIEBAIGRybV9hdG9t aWNfc3RhdGVfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlpZiAoIXN0YXRlKQogCQly ZXR1cm4gTlVMTDsKIAorCS8qIFRPRE8gbGVnYWN5IHBhdGhzIHNob3VsZCBtYXliZSBkbyBhIGJl dHRlciBqb2IgYWJvdXQKKwkgKiBzZXR0aW5nIHRoaXMgYXBwcm9wcmlhdGVseT8KKwkgKi8KKwlz dGF0ZS0+YWxsb3dfbW9kZXNldCA9IHRydWU7CisKIAlzdGF0ZS0+bnVtX2Nvbm5lY3RvciA9IEFD Q0VTU19PTkNFKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7CiAKIAlzdGF0ZS0+Y3J0 Y3MgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMsCkBAIC0xMDAzLDYgKzEwMDgs MjIgQEAgaW50IGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCiAJaWYgKGNvbmZpZy0+ZnVuY3MtPmF0b21pY19jaGVjaykKIAkJcmV0ID0gY29uZmln LT5mdW5jcy0+YXRvbWljX2NoZWNrKHN0YXRlLT5kZXYsIHN0YXRlKTsKIAorCWlmICghc3RhdGUt PmFsbG93X21vZGVzZXQpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5jcnRjczsgaSsrKSB7CisJCQlz dHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBzdGF0ZS0+Y3J0Y3NbaV07CisJCQlzdHJ1Y3QgZHJtX2Ny dGNfc3RhdGUgKmNydGNfc3RhdGUgPSBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV07CisKKwkJCWlmICgh Y3J0YykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGNydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCkg eworCQkJCURSTV9ERUJVR19LTVMoIltDUlRDOiVkXSByZXF1aXJlcyBmdWxsIG1vZGVzZXRcbiIs CisJCQkJCSAgICAgIGNydGMtPmJhc2UuaWQpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQor CQl9CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jaGVj a19vbmx5KTsKQEAgLTEwNjgsMyArMTA4OSwzMTMgQEAgaW50IGRybV9hdG9taWNfYXN5bmNfY29t bWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIAlyZXR1cm4gY29uZmlnLT5mdW5j cy0+YXRvbWljX2NvbW1pdChzdGF0ZS0+ZGV2LCBzdGF0ZSwgdHJ1ZSk7CiB9CiBFWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfYXN5bmNfY29tbWl0KTsKKworLyoKKyAqIFRoZSBiaWcgbW9uc3RvciBp b2N0bAorICovCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpjcmVh dGVfdmJsYW5rX2V2ZW50KAorCQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdiwgdWludDY0X3QgdXNlcl9kYXRhKQoreworCXN0cnVjdCBkcm1fcGVuZGlu Z192YmxhbmtfZXZlbnQgKmUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGlu X2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJaWYgKGZpbGVfcHJpdi0+ ZXZlbnRfc3BhY2UgPCBzaXplb2YgZS0+ZXZlbnQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0OworCX0KKwlmaWxlX3ByaXYt PmV2ZW50X3NwYWNlIC09IHNpemVvZiBlLT5ldmVudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKworCWUgPSBremFsbG9jKHNpemVvZiAqZSwgR0ZQ X0tFUk5FTCk7CisJaWYgKGUgPT0gTlVMTCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5l dmVudF9sb2NrLCBmbGFncyk7CisJCWZpbGVfcHJpdi0+ZXZlbnRfc3BhY2UgKz0gc2l6ZW9mIGUt PmV2ZW50OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdz KTsKKwkJZ290byBvdXQ7CisJfQorCisJZS0+ZXZlbnQuYmFzZS50eXBlID0gRFJNX0VWRU5UX0ZM SVBfQ09NUExFVEU7CisJZS0+ZXZlbnQuYmFzZS5sZW5ndGggPSBzaXplb2YgZS0+ZXZlbnQ7CisJ ZS0+ZXZlbnQudXNlcl9kYXRhID0gdXNlcl9kYXRhOworCWUtPmJhc2UuZXZlbnQgPSAmZS0+ZXZl bnQuYmFzZTsKKwllLT5iYXNlLmZpbGVfcHJpdiA9IGZpbGVfcHJpdjsKKwllLT5iYXNlLmRlc3Ry b3kgPSAodm9pZCAoKikgKHN0cnVjdCBkcm1fcGVuZGluZ19ldmVudCAqKSkga2ZyZWU7CisKK291 dDoKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV92YmxhbmtfZXZlbnQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHN0cnVj dCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsK KworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlmaWxlX3By aXYtPmV2ZW50X3NwYWNlICs9IHNpemVvZiBlLT5ldmVudDsKKwlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwlrZnJlZShlKTsKK30KKworc3RhdGljIGlu dCBhdG9taWNfc2V0X3Byb3Aoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQlzdHJ1 Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3AsCisJCXVp bnQ2NF90IHByb3BfdmFsdWUpCit7CisJc3RydWN0IGRybV9tb2RlX29iamVjdCAqcmVmOworCWlu dCByZXQ7CisKKwlpZiAoIWRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfZ2V0KHByb3AsIHByb3Bf dmFsdWUsICZyZWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAob2JqLT50eXBlKSB7 CisJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOiB7CisJCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7CisJCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7CisKKwkJY29ubmVjdG9yX3N0YXRlID0gZHJt X2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0YXRlLCBjb25uZWN0b3IpOworCQlpZiAoSVNf RVJSKGNvbm5lY3Rvcl9zdGF0ZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoY29ubmVjdG9yX3N0YXRl KTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0ID0gZHJtX2F0b21pY19jb25uZWN0b3Jfc2V0X3By b3BlcnR5KGNvbm5lY3RvciwKKwkJCQljb25uZWN0b3Jfc3RhdGUsIHByb3AsIHByb3BfdmFsdWUp OworCQlicmVhazsKKwl9CisJY2FzZSBEUk1fTU9ERV9PQkpFQ1RfQ1JUQzogeworCQlzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMgPSBvYmpfdG9fY3J0YyhvYmopOworCQlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7CisKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3Rh dGUoc3RhdGUsIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKSB7CisJCQlyZXQgPSBQ VFJfRVJSKGNydGNfc3RhdGUpOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBkcm1fYXRvbWlj X2NydGNfc2V0X3Byb3BlcnR5KGNydGMsCisJCQkJY3J0Y19zdGF0ZSwgcHJvcCwgcHJvcF92YWx1 ZSk7CisJCWJyZWFrOworCX0KKwljYXNlIERSTV9NT0RFX09CSkVDVF9QTEFORTogeworCQlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSA9IG9ial90b19wbGFuZShvYmopOworCQlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCQlwbGFuZV9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X3BsYW5lX3N0YXRlKHN0YXRlLCBwbGFuZSk7CisJCWlmIChJU19FUlIocGxhbmVfc3RhdGUpKSB7 CisJCQlyZXQgPSBQVFJfRVJSKHBsYW5lX3N0YXRlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmV0 ID0gZHJtX2F0b21pY19wbGFuZV9zZXRfcHJvcGVydHkocGxhbmUsCisJCQkJcGxhbmVfc3RhdGUs IHByb3AsIHByb3BfdmFsdWUpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJ TlZBTDsKKwkJYnJlYWs7CisJfQorCisJZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9wdXQocHJv cCwgcmVmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZHJtX21vZGVfYXRvbWljX2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1fbW9kZV9hdG9taWMgKmFyZyA9IGRhdGE7CisJdWlu dDMyX3QgX191c2VyICpvYmpzX3B0ciA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWduZWQgbG9u ZykoYXJnLT5vYmpzX3B0cik7CisJdWludDMyX3QgX191c2VyICpjb3VudF9wcm9wc19wdHIgPSAo dWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKGFyZy0+Y291bnRfcHJvcHNfcHRyKTsK Kwl1aW50MzJfdCBfX3VzZXIgKnByb3BzX3B0ciA9ICh1aW50MzJfdCBfX3VzZXIgKikodW5zaWdu ZWQgbG9uZykoYXJnLT5wcm9wc19wdHIpOworCXVpbnQ2NF90IF9fdXNlciAqcHJvcF92YWx1ZXNf cHRyID0gKHVpbnQ2NF90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShhcmctPnByb3BfdmFsdWVz X3B0cik7CisJdW5zaWduZWQgaW50IGNvcGllZF9vYmpzLCBjb3BpZWRfcHJvcHM7CisJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0 eCBjdHg7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJdW5zaWduZWQgcGxhbmVfbWFzayA9 IDA7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwkvKiBkaXNhbGxvdyBm b3IgZHJpdmVycyBub3Qgc3VwcG9ydGluZyBhdG9taWM6ICovCisJaWYgKCFkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX0FUT01JQykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyog ZGlzYWxsb3cgZm9yIHVzZXJzcGFjZSB0aGF0IGhhcyBub3QgZW5hYmxlZCBhdG9taWMgY2FwIChl dmVuCisJICogdGhvdWdoIHRoaXMgbWF5IGJlIGEgYml0IG92ZXJraWxsLCBzaW5jZSBsZWdhY3kg dXNlcnNwYWNlCisJICogd291bGRuJ3Qga25vdyBob3cgdG8gY2FsbCB0aGlzIGlvY3RsKQorCSAq LworCWlmICghZmlsZV9wcml2LT5hdG9taWMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFy Zy0+ZmxhZ3MgJiB+RFJNX01PREVfQVRPTUlDX0ZMQUdTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlmIChhcmctPnJlc2VydmVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgoYXJnLT5mbGFn cyAmIERSTV9NT0RFX1BBR0VfRkxJUF9BU1lOQykgJiYKKwkJCSFkZXYtPm1vZGVfY29uZmlnLmFz eW5jX3BhZ2VfZmxpcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBjYW4ndCB0ZXN0IGFuZCBl eHBlY3QgYW4gZXZlbnQgYXQgdGhlIHNhbWUgdGltZS4gKi8KKwlpZiAoKGFyZy0+ZmxhZ3MgJiBE Uk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZKSAmJgorCQkJKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9Q QUdFX0ZMSVBfRVZFTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRybV9tb2Rlc2V0X2FjcXVp cmVfaW5pdCgmY3R4LCAwKTsKKworCXN0YXRlID0gZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhkZXYp OworCWlmICghc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3RhdGUtPmFjcXVpcmVfY3R4 ID0gJmN0eDsKKwlzdGF0ZS0+YWxsb3dfbW9kZXNldCA9ICEhKGFyZy0+ZmxhZ3MgJiBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCk7CisKK3JldHJ5OgorCWNvcGllZF9vYmpzID0gMDsKKwlj b3BpZWRfcHJvcHMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFyZy0+Y291bnRfb2JqczsgaSsr KSB7CisJCXVpbnQzMl90IG9ial9pZCwgY291bnRfcHJvcHM7CisJCXN0cnVjdCBkcm1fbW9kZV9v YmplY3QgKm9iajsKKworCQlpZiAoZ2V0X3VzZXIob2JqX2lkLCBvYmpzX3B0ciArIGNvcGllZF9v YmpzKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCW9iaiA9 IGRybV9tb2RlX29iamVjdF9maW5kKGRldiwgb2JqX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQU5ZKTsK KwkJaWYgKCFvYmogfHwgIW9iai0+cHJvcGVydGllcykgeworCQkJcmV0ID0gLUVOT0VOVDsKKwkJ CWdvdG8gZmFpbDsKKwkJfQorCisJCWlmIChvYmotPnR5cGUgPT0gRFJNX01PREVfT0JKRUNUX1BM QU5FKSB7CisJCQlwbGFuZSA9IG9ial90b19wbGFuZShvYmopOworCQkJcGxhbmVfbWFzayB8PSAo MSA8PCBkcm1fcGxhbmVfaW5kZXgocGxhbmUpKTsKKwkJCXBsYW5lLT5vbGRfZmIgPSBwbGFuZS0+ ZmI7CisJCX0KKworCQlpZiAoZ2V0X3VzZXIoY291bnRfcHJvcHMsIGNvdW50X3Byb3BzX3B0ciAr IGNvcGllZF9vYmpzKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZmFpbDsKKwkJfQor CisJCWNvcGllZF9vYmpzKys7CisKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50X3Byb3BzOyBqKysp IHsKKwkJCXVpbnQzMl90IHByb3BfaWQ7CisJCQl1aW50NjRfdCBwcm9wX3ZhbHVlOworCQkJc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKworCQkJaWYgKGdldF91c2VyKHByb3BfaWQsIHByb3Bz X3B0ciArIGNvcGllZF9wcm9wcykpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZmFp bDsKKwkJCX0KKworCQkJcHJvcCA9IGRybV9wcm9wZXJ0eV9maW5kKGRldiwgcHJvcF9pZCk7CisJ CQlpZiAoIXByb3ApIHsKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJCWdvdG8gZmFpbDsKKwkJCX0K KworCQkJaWYgKGdldF91c2VyKHByb3BfdmFsdWUsIHByb3BfdmFsdWVzX3B0ciArIGNvcGllZF9w cm9wcykpIHsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKworCQkJ cmV0ID0gYXRvbWljX3NldF9wcm9wKHN0YXRlLCBvYmosIHByb3AsIHByb3BfdmFsdWUpOworCQkJ aWYgKHJldCkKKwkJCQlnb3RvIGZhaWw7CisKKwkJCWNvcGllZF9wcm9wcysrOworCQl9CisJfQor CisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKKwkJaW50IG5j cnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7CisKKwkJZm9yIChpID0gMDsgaSA8IG5j cnRjczsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBzdGF0 ZS0+Y3J0Y19zdGF0ZXNbaV07CisJCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpl OworCisJCQlpZiAoIWNydGNfc3RhdGUpCisJCQkJY29udGludWU7CisKKwkJCWUgPSBjcmVhdGVf dmJsYW5rX2V2ZW50KGRldiwgZmlsZV9wcml2LCBhcmctPnVzZXJfZGF0YSk7CisJCQlpZiAoIWUp IHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKworCQkJY3J0Y19z dGF0ZS0+ZXZlbnQgPSBlOworCQl9CisJfQorCisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9B VE9NSUNfVEVTVF9PTkxZKSB7CisJCXJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7 CisJCS8qIF9jaGVja19vbmx5KCkgZG9lcyBub3QgZnJlZSBzdGF0ZSwgdW5saWtlIF9jb21taXQo KSAqLworCQlkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RhdGUpOworCX0gZWxzZSBpZiAoYXJnLT5m bGFncyAmIERSTV9NT0RFX0FUT01JQ19OT05CTE9DSykgeworCQlyZXQgPSBkcm1fYXRvbWljX2Fz eW5jX2NvbW1pdChzdGF0ZSk7CisJfSBlbHNlIHsKKwkJcmV0ID0gZHJtX2F0b21pY19jb21taXQo c3RhdGUpOworCX0KKworCS8qIGlmIHN1Y2NlZWRlZCwgZml4dXAgbGVnYWN5IHBsYW5lIGNydGMv ZmIgcHRycyBiZWZvcmUgZHJvcHBpbmcKKwkgKiBsb2NrcyAoaWUuIHdoaWxlIGl0IGlzIHN0aWxs IHNhZmUgdG8gZGVyZWYgcGxhbmUtPnN0YXRlKS4gIFdlCisJICogbmVlZCB0byBkbyB0aGlzIGhl cmUgYmVjYXVzZSB0aGUgZHJpdmVyIGVudHJ5IHBvaW50cyBjYW5ub3QKKwkgKiBkaXN0aW5ndWlz aCBiZXR3ZWVuIGxlZ2FjeSBhbmQgYXRvbWljIGlvY3Rscy4KKwkgKi8KKwlkcm1fZm9yX2VhY2hf cGxhbmVfbWFzayhwbGFuZSwgZGV2LCBwbGFuZV9tYXNrKSB7CisJCWlmIChyZXQgPT0gMCkgewor CQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqbmV3X2ZiID0gcGxhbmUtPnN0YXRlLT5mYjsKKwkJ CWlmIChuZXdfZmIpCisJCQkJZHJtX2ZyYW1lYnVmZmVyX3JlZmVyZW5jZShuZXdfZmIpOworCQkJ cGxhbmUtPmZiID0gbmV3X2ZiOworCQkJcGxhbmUtPmNydGMgPSBwbGFuZS0+c3RhdGUtPmNydGM7 CisJCX0gZWxzZSB7CisJCQlwbGFuZS0+b2xkX2ZiID0gTlVMTDsKKwkJfQorCQlpZiAocGxhbmUt Pm9sZF9mYikgeworCQkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKHBsYW5lLT5vbGRfZmIp OworCQkJcGxhbmUtPm9sZF9mYiA9IE5VTEw7CisJCX0KKwl9CisKKwlkcm1fbW9kZXNldF9kcm9w X2xvY2tzKCZjdHgpOworCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKKworCXJldHVy biByZXQ7CisKK2ZhaWw6CisJaWYgKHJldCA9PSAtRURFQURMSykKKwkJZ290byBiYWNrb2ZmOwor CisJaWYgKGFyZy0+ZmxhZ3MgJiBEUk1fTU9ERV9QQUdFX0ZMSVBfRVZFTlQpIHsKKwkJaW50IG5j cnRjcyA9IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7CisKKwkJZm9yIChpID0gMDsgaSA8IG5j cnRjczsgaSsrKSB7CisJCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBzdGF0 ZS0+Y3J0Y19zdGF0ZXNbaV07CisKKwkJCWlmICghY3J0Y19zdGF0ZSkKKwkJCQljb250aW51ZTsK KworCQkJZGVzdHJveV92YmxhbmtfZXZlbnQoZGV2LCBmaWxlX3ByaXYsIGNydGNfc3RhdGUtPmV2 ZW50KTsKKwkJCWNydGNfc3RhdGUtPmV2ZW50ID0gTlVMTDsKKwkJfQorCX0KKworCWRybV9hdG9t aWNfc3RhdGVfZnJlZShzdGF0ZSk7CisKKwlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwor CWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKKworCXJldHVybiByZXQ7CisKK2JhY2tv ZmY6CisJZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdGF0ZSk7CisJZHJtX21vZGVzZXRfYmFja29m ZigmY3R4KTsKKworCWdvdG8gcmV0cnk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCmluZGV4IGQwZDZmOWQuLjY4 NzczMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC00MzAzLDcgKzQzMDMsNyBAQCBFWFBPUlRfU1lNQk9M KGRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSk7CiAgKiBvYmplY3QgdG8g d2hpY2ggdGhlIHByb3BlcnR5IGlzIGF0dGFjaGVkIGhhcyBhIGNoYW5jZSB0byB0YWtlIGl0J3Mg b3duCiAgKiByZWZlcmVuY2UpLgogICovCi1zdGF0aWMgYm9vbCBkcm1fcHJvcGVydHlfY2hhbmdl X3ZhbGlkX2dldChzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKK2Jvb2wgZHJtX3Byb3Bl cnR5X2NoYW5nZV92YWxpZF9nZXQoc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCiAJCQkJ CSB1aW50NjRfdCB2YWx1ZSwgc3RydWN0IGRybV9tb2RlX29iamVjdCAqKnJlZikKIHsKIAlpbnQg aTsKQEAgLTQzNjUsNyArNDM2NSw3IEBAIHN0YXRpYyBib29sIGRybV9wcm9wZXJ0eV9jaGFuZ2Vf dmFsaWRfZ2V0KHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCXJldHVybiBmYWxzZTsK IH0KIAotc3RhdGljIHZvaWQgZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9wdXQoc3RydWN0IGRy bV9wcm9wZXJ0eSAqcHJvcGVydHksCit2b2lkIGRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRfcHV0 KHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCQlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0 ICpyZWYpCiB7CiAJaWYgKCFyZWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lv Y3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvY3RsLmMKaW5kZXggYWRjODIyMy4uYTI4YzBh YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2N0bC5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1faW9jdGwuYwpAQCAtNjMwLDYgKzYzMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2lvY3RsX2Rlc2MgZHJtX2lvY3Rsc1tdID0gewogCURSTV9JT0NUTF9ERUYoRFJNX0lP Q1RMX01PREVfT0JKX0dFVFBST1BFUlRJRVMsIGRybV9tb2RlX29ial9nZXRfcHJvcGVydGllc19p b2N0bCwgRFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKIAlEUk1fSU9DVExfREVGKERS TV9JT0NUTF9NT0RFX09CSl9TRVRQUk9QRVJUWSwgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eV9p b2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAogCURSTV9J T0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQ1VSU09SMiwgZHJtX21vZGVfY3Vyc29yMl9pb2N0bCwg RFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9E RUYoRFJNX0lPQ1RMX01PREVfQVRPTUlDLCBkcm1fbW9kZV9hdG9taWNfaW9jdGwsIERSTV9NQVNU RVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKIH07CiAKICNkZWZpbmUgRFJNX0NP UkVfSU9DVExfQ09VTlQJQVJSQVlfU0laRSggZHJtX2lvY3RscyApCmRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBmYzQ3Njdm Li4xZGNmYjY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNs dWRlL2RybS9kcm1fY3J0Yy5oCkBAIC05MDIsNyArOTAyLDcgQEAgc3RydWN0IGRybV9icmlkZ2Ug ewogLyoqCiAgKiBzdHJ1Y3Qgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgLSB0aGUgZ2xvYmFsIHN0 YXRlIG9iamVjdCBmb3IgYXRvbWljIHVwZGF0ZXMKICAqIEBkZXY6IHBhcmVudCBEUk0gZGV2aWNl Ci0gKiBAZmxhZ3M6IHN0YXRlIGZsYWdzIGxpa2UgYXN5bmMgdXBkYXRlCisgKiBAYWxsb3dfbW9k ZXNldDogYWxsb3cgZnVsbCBtb2Rlc2V0CiAgKiBAcGxhbmVzOiBwb2ludGVyIHRvIGFycmF5IG9m IHBsYW5lIHBvaW50ZXJzCiAgKiBAcGxhbmVfc3RhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHBs YW5lIHN0YXRlcyBwb2ludGVycwogICogQGNydGNzOiBwb2ludGVyIHRvIGFycmF5IG9mIENSVEMg cG9pbnRlcnMKQEAgLTkxNCw3ICs5MTQsNyBAQCBzdHJ1Y3QgZHJtX2JyaWRnZSB7CiAgKi8KIHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXVpbnQz Ml90IGZsYWdzOworCWJvb2wgYWxsb3dfbW9kZXNldCA6IDE7CiAJc3RydWN0IGRybV9wbGFuZSAq KnBsYW5lczsKIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICoqcGxhbmVfc3RhdGVzOwogCXN0cnVj dCBkcm1fY3J0YyAqKmNydGNzOwpAQCAtMTM0Niw2ICsxMzQ2LDEwIEBAIGV4dGVybiBpbnQgZHJt X21vZGVfY3JlYXRlX3NjYWxpbmdfbW9kZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKIGV4dGVybiBpbnQgZHJtX21vZGVfY3JlYXRlX2FzcGVjdF9yYXRpb19wcm9wZXJ0eShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX21vZGVfY3JlYXRlX2RpcnR5X2lu Zm9fcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9tb2Rl X2NyZWF0ZV9zdWdnZXN0ZWRfb2Zmc2V0X3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CitleHRlcm4gYm9vbCBkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlkX2dldChzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eSwKKwkJCQkJIHVpbnQ2NF90IHZhbHVlLCBzdHJ1Y3QgZHJtX21v ZGVfb2JqZWN0ICoqcmVmKTsKK2V4dGVybiB2b2lkIGRybV9wcm9wZXJ0eV9jaGFuZ2VfdmFsaWRf cHV0KHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQlzdHJ1Y3QgZHJtX21vZGVfb2Jq ZWN0ICpyZWYpOwogCiBleHRlcm4gaW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rl cihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCQkgICAgIHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2Rlcik7CkBAIC0xNDM3LDYgKzE0NDEsOCBAQCBleHRlcm4gaW50IGRybV9t b2RlX29ial9zZXRfcHJvcGVydHlfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwKIGV4dGVybiBpbnQgZHJtX21vZGVfcGxhbmVfc2V0X29ial9wcm9wKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAogCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwK IAkJCQkgICAgICAgdWludDY0X3QgdmFsdWUpOworZXh0ZXJuIGludCBkcm1fbW9kZV9hdG9taWNf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCBkcm1fZmJfZ2V0X2JwcF9kZXB0aCh1 aW50MzJfdCBmb3JtYXQsIHVuc2lnbmVkIGludCAqZGVwdGgsCiAJCQkJIGludCAqYnBwKTsKZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5o CmluZGV4IGY3YjJiYWY3Li4wMWIyZDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvZHJtL2Ry bS5oCisrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKQEAgLTc4NCw2ICs3ODQsNyBAQCBzdHJ1 Y3QgZHJtX3ByaW1lX2hhbmRsZSB7CiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX09CSl9HRVRQUk9Q RVJUSUVTCURSTV9JT1dSKDB4QjksIHN0cnVjdCBkcm1fbW9kZV9vYmpfZ2V0X3Byb3BlcnRpZXMp CiAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX09CSl9TRVRQUk9QRVJUWQlEUk1fSU9XUigweEJBLCBz dHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eSkKICNkZWZpbmUgRFJNX0lPQ1RMX01PREVf Q1VSU09SMgkJRFJNX0lPV1IoMHhCQiwgc3RydWN0IGRybV9tb2RlX2N1cnNvcjIpCisjZGVmaW5l IERSTV9JT0NUTF9NT0RFX0FUT01JQwkJRFJNX0lPV1IoMHhCQywgc3RydWN0IGRybV9tb2RlX2F0 b21pYykKIAogLyoqCiAgKiBEZXZpY2Ugc3BlY2lmaWMgaW9jdGxzIHNob3VsZCBvbmx5IGJlIGlu IHRoZWlyIHJlc3BlY3RpdmUgaGVhZGVycwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9k cm1fbW9kZS5oIGIvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCmluZGV4IGI4ZjljMGYuLmNh Nzg4ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vZHJtX21vZGUuaAorKysgYi9pbmNs dWRlL3VhcGkvZHJtL2RybV9tb2RlLmgKQEAgLTUyNiw0ICs1MjYsMjcgQEAgc3RydWN0IGRybV9t b2RlX2Rlc3Ryb3lfZHVtYiB7CiAJdWludDMyX3QgaGFuZGxlOwogfTsKIAorLyogcGFnZS1mbGlw IGZsYWdzIGFyZSB2YWxpZCwgcGx1czogKi8KKyNkZWZpbmUgRFJNX01PREVfQVRPTUlDX1RFU1Rf T05MWSAweDAxMDAKKyNkZWZpbmUgRFJNX01PREVfQVRPTUlDX05PTkJMT0NLICAweDAyMDAKKyNk ZWZpbmUgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQgMHgwNDAwCisKKyNkZWZpbmUgRFJN X01PREVfQVRPTUlDX0ZMQUdTIChcCisJCURSTV9NT0RFX1BBR0VfRkxJUF9FVkVOVCB8XAorCQlE Uk1fTU9ERV9QQUdFX0ZMSVBfQVNZTkMgfFwKKwkJRFJNX01PREVfQVRPTUlDX1RFU1RfT05MWSB8 XAorCQlEUk1fTU9ERV9BVE9NSUNfTk9OQkxPQ0sgfFwKKwkJRFJNX01PREVfQVRPTUlDX0FMTE9X X01PREVTRVQpCisKK3N0cnVjdCBkcm1fbW9kZV9hdG9taWMgeworCV9fdTMyIGZsYWdzOworCV9f dTMyIGNvdW50X29ianM7CisJX191NjQgb2Jqc19wdHI7CisJX191NjQgY291bnRfcHJvcHNfcHRy OworCV9fdTY0IHByb3BzX3B0cjsKKwlfX3U2NCBwcm9wX3ZhbHVlc19wdHI7CisJX191NjQgcmVz ZXJ2ZWQ7CisJX191NjQgdXNlcl9kYXRhOworfTsKKwogI2VuZGlmCi0tIAoyLjEuMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK