From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maarten Lankhorst Subject: Re: [PATCH] drm/core: Do not preserve framebuffer on rmfb. Date: Tue, 22 Mar 2016 11:53:53 +0100 Message-ID: <56F12441.3000803@linux.intel.com> References: <1458569477-13364-1-git-send-email-maarten.lankhorst@linux.intel.com> <56F11130.5020506@linux.intel.com> <20160322105047.GU28483@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160322105047.GU28483@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Daniel Vetter Cc: stable , intel-gfx , Thomas Hellstrom , dri-devel List-Id: dri-devel@lists.freedesktop.org T3AgMjItMDMtMTYgb20gMTE6NTAgc2NocmVlZiBEYW5pZWwgVmV0dGVyOgo+IE9uIFR1ZSwgTWFy IDIyLCAyMDE2IGF0IDEwOjMyOjMyQU0gKzAxMDAsIE1hYXJ0ZW4gTGFua2hvcnN0IHdyb3RlOgo+ PiBPcCAyMS0wMy0xNiBvbSAxODozNyBzY2hyZWVmIERhbmllbCBWZXR0ZXI6Cj4+PiBPbiBNb24s IE1hciAyMSwgMjAxNiBhdCAwMzoxMToxN1BNICswMTAwLCBNYWFydGVuIExhbmtob3JzdCB3cm90 ZToKPj4+PiBJdCB0dXJucyBvdXQgdGhhdCBwcmVzZXJ2aW5nIGZyYW1lYnVmZmVycyBhZnRlciB0 aGUgcm1mYiBjYWxsIGJyZWFrcwo+Pj4+IHZtd2dmeCB1c2Vyc3BhY2UuIFRoaXMgd2FzIG9yaWdp bmFsbHkgaW50cm9kdWNlZCBiZWNhdXNlIGl0IHdhcyB0aG91Z2h0Cj4+Pj4gbm9ib2R5IHJlbGll ZCBvbiB0aGUgYmVoYXZpb3IsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IHNlZW1zIHRoZXJlIGFyZQo+ Pj4+IGV4Y2VwdGlvbnMuCj4+Pj4KPj4+PiBkcm1fZnJhbWVidWZmZXJfcmVtb3ZlIG1heSBmYWls IHdpdGggLUVJTlRSIG5vdywgc28gYSBzdHJhaWdodCByZXZlcnQKPj4+PiBpcyBpbXBvc3NpYmxl LiBUaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIHRoZSBmcmFtZWJ1ZmZlciBmcm9tIHRoZSBsaXN0 cwo+Pj4+IGFuZCBhY3RpdmUgcGxhbmVzIHdpdGhvdXQgaW50cm9kdWNpbmcgYSByYWNlIGJlY2F1 c2Ugb2YgdGhlIGRpZmZlcmVudAo+Pj4+IGxvY2tpbmcgcmVxdWlyZW1lbnRzLiBJbnN0ZWFkIGNh bGwgZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSBmcm9tIGEKPj4+PiB3b3JrcXVldWUsIHdoaWNoIGlz IHVuYWZmZWN0ZWQgYnkgc2lnbmFscy4KPj4+Pgo+Pj4+IENjOiBzdGFibGVAdmdlci5rZXJuZWwu b3JnICN2NC40Kwo+Pj4+IEZpeGVzOiAxMzgwMzEzMjgxOGMgKCJkcm0vY29yZTogUHJlc2VydmUg dGhlIGZyYW1lYnVmZmVyIGFmdGVyIHJlbW92aW5nIGl0LiIpCj4+Pj4gVGVzdGNhc2U6IGttc19m bGlwLmZsaXAtdnMtcm1mYi1pbnRlcnJ1cHRpYmxlCj4+Pj4gUmVmZXJlbmNlczogaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvZHJpLWRldmVsLzIwMTYtTWFyY2gvMTAyODc2 Lmh0bWwKPj4+PiBDYzogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgo+ Pj4+IENjOiBEYXZpZCBIZXJybWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPgo+Pj4+IC0tLQo+ Pj4+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyB8IDIwICsrKysrKysrKysrKysrKysrKyst Cj4+Pj4gIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ Pj4KPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX2NydGMuYwo+Pj4+IGluZGV4IGUwOGY5NjIyODhkOS4uYjdkMGI5NTlmMDg4 IDEwMDY0NAo+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCj4+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPj4+PiBAQCAtMzQzNCw2ICszNDM0LDE4IEBAIGlu dCBkcm1fbW9kZV9hZGRmYjIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPj4+PiAgIHJldHVybiAw Owo+Pj4+ICB9Cj4+Pj4KPj4+PiArc3RydWN0IGRybV9tb2RlX3JtZmJfd29yayB7Cj4+Pj4gKyBz dHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKPj4+PiArIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi Owo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgZHJtX21vZGVfcm1mYl93b3JrX2Zu KHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKPj4+PiArewo+Pj4+ICsgc3RydWN0IGRybV9tb2RlX3Jt ZmJfd29yayAqYXJnID0gY29udGFpbmVyX29mKHcsIHR5cGVvZigqYXJnKSwgd29yayk7Cj4+Pj4g Kwo+Pj4+ICsgZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZShhcmctPmZiKTsKPj4+IGRybV9mcmFtZWJ1 ZmZlcl9yZW1vdmUgc3RpbGwgaGFzIHRoZSBwcm9ibGVtIG9mIG5vdCB3b3JraW5nIGNvcnJlY3Rs eSB3aXRoCj4+PiBhdG9taWMgc2luY2UgYXRvbWljIGNvbW1pdCB3aWxsIGNvbXBsYWluIGlmIHdl IHRyeSB0byBkbyBtb3JlIHRoYW4gMQo+Pj4gY29tbWl0IHBlciB3d19hY3F1aXJlX2N0eC4gSSB0 aGluayB3ZSBzdGlsbCBuZWVkIGFuIGF0b21pYyB2ZXJzaW9uIG9mCj4+PiB0aGlzLiBBbHNvIHBy b2JhYmx5IGEgbW9yZSBuYXN0eSBpZ3QgdGVzdGNhc2Ugd2hpY2ggdXNlcyB0aGUgc2FtZSBmYiBv bgo+Pj4gbW9yZSB0aGFuIG9uZSBwbGFuZSB0byBiZSBhYmxlIHRvIGhpdCB0aGlzIGNhc2UuCj4+ IFRoYXQncyB0cnVlLCBidXQgYSBzZXBhcmF0ZSBidWcuIDopCj4gQXRtIHdlIG9ubHkgdXNlIGRy bV9mcmFtZWJ1ZmZlcl9yZW1vdmUgaW4gYXRvbWljIGRyaXZlcnMgdG8gbnVrZSB0aGUgZmJkZXYK PiBvbmUgYXQgdW5sb2FkLiBXaXRoIHlvdXIgcGF0Y2ggdXNlcnNwYWNlIGNhbid0IGdldCB0aGVy ZSBlYXNpbHksIGFuZCBoZW5jZQo+IGl0IG11c3QgYmUgZml4ZWQuIE1heWJlIHNlcGFyYXRlIHBy ZXAgcGF0Y2ggKGFsc28gY2M6IHN0YWJsZSkgdXBmcm9udD8KPgpTb21ldGhpbmcgbGlrZSB0aGlz PwoKVW5mb3J0dW5hdGVseSBJIG5lZWQgdG8gY29sbGVjdCBhY2tzIGZpcnN0LgoKY29tbWl0IGVk MjQyZjkyYzJlNzU3MWE2YTVmNjQ5YzJhNjcwMzFkZWJjNzNlNDQKQXV0aG9yOiBNYWFydGVuIExh bmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpEYXRlOiAgIFRodSBN YXIgMTcgMTM6NDI6MDggMjAxNiArMDEwMAoKICAgIGRybS9hdG9taWM6IEFkZCByZW1vdmVfZmIg ZnVuY3Rpb24gcG9pbnRlci4KICAgIAogICAgVXNlIHRoaXMgaW4gZHJtX2ZyYW1lYnVmZmVyX3Jl bW92ZSwgdGhpcyBpcyB0byByZW1vdmUgdGhlIGZiIGluIGFuIGF0b21pYyB3YXkuCiAgICAKICAg IFNpZ25lZC1vZmYtYnk6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMKaW5kZXggNTZiODI5Zjk3Njk5Li41 MGJhNmFkYjc0ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vaGRsY2RfZHJ2LmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9oZGxjZF9kcnYuYwpAQCAtMzI0LDYgKzMyNCw3IEBA IHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBoZGxjZF9kcml2ZXIgPSB7CiAJLmR1bWJfY3JlYXRl ID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1f Y21hX2R1bWJfbWFwX29mZnNldCwKIAkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ry b3ksCisJLnJlbW92ZV9mYiA9IGRybV9hdG9taWNfaGVscGVyX3JlbW92ZV9mYiwKIAkucHJpbWVf aGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCiAJLnByaW1lX2ZkX3Rv X2hhbmRsZSA9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAogCS5nZW1fcHJpbWVfZXhwb3J0 ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXRt ZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hdG1lbC1obGNkYy9h dG1lbF9obGNkY19kYy5jCmluZGV4IDNkOGQxNjQwMmQwNy4uNWQzNTdmNzI5MTE0IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuYworKysgYi9k cml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfZGMuYwpAQCAtNzExLDYgKzcx MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBhdG1lbF9obGNkY19kY19kcml2ZXIgPSB7 CiAJLmR1bWJfY3JlYXRlID0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFwX29m ZnNldCA9IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKIAkuZHVtYl9kZXN0cm95ID0gZHJt X2dlbV9kdW1iX2Rlc3Ryb3ksCisJLnJlbW92ZV9mYiA9IGRybV9hdG9taWNfaGVscGVyX3JlbW92 ZV9mYiwKIAkuZm9wcyA9ICZmb3BzLAogCS5uYW1lID0gImF0bWVsLWhsY2RjIiwKIAkuZGVzYyA9 ICJBdG1lbCBITENEIENvbnRyb2xsZXIgRFJNIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVy LmMKaW5kZXggNGJlZmUyNWM4MWM3Li5lYjNiNDEzNTYwZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljX2hlbHBlci5jCkBAIC0xOTYwLDYgKzE5NjAsNzIgQEAgY29tbWl0OgogCXJldHVybiAwOwog fQogCitpbnQgZHJtX2F0b21pY19oZWxwZXJfcmVtb3ZlX2ZiKHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZiKQoreworCXN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eCBjdHg7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGZiLT5kZXY7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlOworCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCWludCByZXQgPSAwOworCXVuc2lnbmVk IHBsYW5lX21hc2s7CisKKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsKKwlp ZiAoIXN0YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRybV9tb2Rlc2V0X2FjcXVpcmVfaW5p dCgmY3R4LCAwKTsKKworcmV0cnk6CisJcGxhbmVfbWFzayA9IDA7CisJcmV0ID0gZHJtX21vZGVz ZXRfbG9ja19hbGxfY3R4KGRldiwgJmN0eCk7CisJaWYgKHJldCkKKwkJZ290byB1bmxvY2s7CisK Kwlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgeworCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0 YXRlICpwbGFuZV9zdGF0ZTsKKworCQlpZiAocGxhbmUtPnN0YXRlLT5mYiAhPSBmYikKKwkJCWNv bnRpbnVlOworCisJCXBsYW5lX3N0YXRlID0gZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3Rh dGUsIHBsYW5lKTsKKwkJaWYgKElTX0VSUihwbGFuZV9zdGF0ZSkpIHsKKwkJCXJldCA9IFBUUl9F UlIocGxhbmVfc3RhdGUpOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQlkcm1fYXRvbWljX3Nl dF9mYl9mb3JfcGxhbmUocGxhbmVfc3RhdGUsIE5VTEwpOworCQlyZXQgPSBkcm1fYXRvbWljX3Nl dF9jcnRjX2Zvcl9wbGFuZShwbGFuZV9zdGF0ZSwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlnb3Rv IHVubG9jazsKKworCQlwbGFuZV9tYXNrIHw9IEJJVChkcm1fcGxhbmVfaW5kZXgocGxhbmUpKTsK KworCQlwbGFuZS0+b2xkX2ZiID0gcGxhbmUtPmZiOworCQlwbGFuZS0+ZmIgPSBOVUxMOworCX0K KworCWlmIChwbGFuZV9tYXNrKQorCQlyZXQgPSBkcm1fYXRvbWljX2NvbW1pdChzdGF0ZSk7CisK K3VubG9jazoKKwlpZiAocGxhbmVfbWFzaykKKwkJZHJtX2F0b21pY19jbGVhbl9vbGRfZmIoZGV2 LCBwbGFuZV9tYXNrLCByZXQpOworCisJaWYgKHJldCA9PSAtRURFQURMSykgeworCQlkcm1fbW9k ZXNldF9iYWNrb2ZmKCZjdHgpOworCQlnb3RvIHJldHJ5OworCX0KKworCWlmIChyZXQgfHwgIXBs YW5lX21hc2spCisJCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7CisKKwlkcm1fbW9kZXNl dF9kcm9wX2xvY2tzKCZjdHgpOworCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKKwor CXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3JlbW92ZV9m Yik7CisKIC8qKgogICogZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9hbGwgLSBkaXNhYmxlIGFs bCBjdXJyZW50bHkgYWN0aXZlIG91dHB1dHMKICAqIEBkZXY6IERSTSBkZXZpY2UKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRj LmMKaW5kZXggYWFmNmFiNDJmMmMxLi41MWM1YTAwZmZkZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9kcm1fY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCkBAIC01 NzcsNiArNTc3LDQyIEBAIHZvaWQgZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIpCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVw KTsKIAorc3RhdGljIGludAorbGVnYWN5X3JlbW92ZV9mYihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmItPmRldjsKKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGM7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9tb2Rl X3NldCBzZXQ7CisJaW50IHJldCA9IDA7CisKKwkvKiBhdG9taWMgZHJpdmVycyBtdXN0IHVzZSBk cm1fYXRvbWljX2hlbHBlcl9yZW1vdmVfZmIgKi8KKwlXQVJOX09OKGRybV9jb3JlX2NoZWNrX2Zl YXR1cmUoZGV2LCBEUklWRVJfQVRPTUlDKSk7CisKKwlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYp OworCS8qIHJlbW92ZSBmcm9tIGFueSBDUlRDICovCisJZHJtX2Zvcl9lYWNoX2NydGMoY3J0Yywg ZGV2KSB7CisJCWlmIChjcnRjLT5wcmltYXJ5LT5mYiA9PSBmYikgeworCQkJLyogc2hvdWxkIHR1 cm4gb2ZmIHRoZSBjcnRjICovCisJCQltZW1zZXQoJnNldCwgMCwgc2l6ZW9mKHN0cnVjdCBkcm1f bW9kZV9zZXQpKTsKKwkJCXNldC5jcnRjID0gY3J0YzsKKwkJCXNldC5mYiA9IE5VTEw7CisJCQly ZXQgPSBkcm1fbW9kZV9zZXRfY29uZmlnX2ludGVybmFsKCZzZXQpOworCQkJaWYgKHJldCkKKwkJ CQlnb3RvIG91dDsKKwkJfQorCX0KKworCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZGV2KSB7 CisJCWlmIChwbGFuZS0+ZmIgPT0gZmIpCisJCQlkcm1fcGxhbmVfZm9yY2VfZGlzYWJsZShwbGFu ZSk7CisJfQorCitvdXQ6CisJZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOworCXJldHVybiBy ZXQ7Cit9CisKIC8qKgogICogZHJtX2ZyYW1lYnVmZmVyX3JlbW92ZSAtIHJlbW92ZSBhbmQgdW5y ZWZlcmVuY2UgYSBmcmFtZWJ1ZmZlciBvYmplY3QKICAqIEBmYjogZnJhbWVidWZmZXIgdG8gcmVt b3ZlCkBAIC01OTIsOSArNjI4LDYgQEAgRVhQT1JUX1NZTUJPTChkcm1fZnJhbWVidWZmZXJfY2xl YW51cCk7CiB2b2lkIGRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKLQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGM7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7Ci0Jc3RydWN0IGRybV9tb2RlX3NldCBzZXQ7 CiAJaW50IHJldDsKIAogCWlmICghZmIpCkBAIC02MjAsMjUgKzY1MywxMyBAQCB2b2lkIGRybV9m cmFtZWJ1ZmZlcl9yZW1vdmUoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiAJICogaW4gdGhp cyBtYW5uZXIuCiAJICovCiAJaWYgKGF0b21pY19yZWFkKCZmYi0+cmVmY291bnQucmVmY291bnQp ID4gMSkgewotCQlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYpOwotCQkvKiByZW1vdmUgZnJvbSBh bnkgQ1JUQyAqLwotCQlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCBkZXYpIHsKLQkJCWlmIChjcnRj LT5wcmltYXJ5LT5mYiA9PSBmYikgewotCQkJCS8qIHNob3VsZCB0dXJuIG9mZiB0aGUgY3J0YyAq LwotCQkJCW1lbXNldCgmc2V0LCAwLCBzaXplb2Yoc3RydWN0IGRybV9tb2RlX3NldCkpOwotCQkJ CXNldC5jcnRjID0gY3J0YzsKLQkJCQlzZXQuZmIgPSBOVUxMOwotCQkJCXJldCA9IGRybV9tb2Rl X3NldF9jb25maWdfaW50ZXJuYWwoJnNldCk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJRFJNX0VSUk9S KCJmYWlsZWQgdG8gcmVzZXQgY3J0YyAlcCB3aGVuIGZiIHdhcyBkZWxldGVkXG4iLCBjcnRjKTsK LQkJCX0KLQkJfQorCQlpZiAoZGV2LT5kcml2ZXItPnJlbW92ZV9mYikKKwkJCXJldCA9IGRldi0+ ZHJpdmVyLT5yZW1vdmVfZmIoZmIpOworCQllbHNlCisJCQlyZXQgPSBsZWdhY3lfcmVtb3ZlX2Zi KGZiKTsKIAotCQlkcm1fZm9yX2VhY2hfcGxhbmUocGxhbmUsIGRldikgewotCQkJaWYgKHBsYW5l LT5mYiA9PSBmYikKLQkJCQlkcm1fcGxhbmVfZm9yY2VfZGlzYWJsZShwbGFuZSk7Ci0JCX0KLQkJ ZHJtX21vZGVzZXRfdW5sb2NrX2FsbChkZXYpOworCQlpZiAocmV0KQorCQkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gcmVtb3ZlIGZiICVpLyVwIHdpdGggJWlcbiIsIGZiLT5iYXNlLmlkLCBmYiwgcmV0 KTsKIAl9CiAKIAlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UoZmIpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCmluZGV4IDUzNDQ5NDBjOGEwNy4uMjcwNWEzMTVmMWVj IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCkBAIC00MjMsNiArNDIz LDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIGV4eW5vc19kcm1fZHJpdmVyID0gewogCS5k dW1iX2NyZWF0ZQkJPSBleHlub3NfZHJtX2dlbV9kdW1iX2NyZWF0ZSwKIAkuZHVtYl9tYXBfb2Zm c2V0CT0gZXh5bm9zX2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0LAogCS5kdW1iX2Rlc3Ryb3kJCT0g ZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisJLnJlbW92ZV9mYgkJPSBkcm1fYXRvbWljX2hlbHBlcl9y ZW1vdmVfZmIsCiAJLnByaW1lX2hhbmRsZV90b19mZAk9IGRybV9nZW1fcHJpbWVfaGFuZGxlX3Rv X2ZkLAogCS5wcmltZV9mZF90b19oYW5kbGUJPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwK IAkuZ2VtX3ByaW1lX2V4cG9ydAk9IGRybV9nZW1fcHJpbWVfZXhwb3J0LApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vZnNsLWRjdS9mc2xfZGN1X2RybV9kcnYuYwppbmRleCBlOGQ5MzM3YTY2ZDguLmY3NTYyYjE3 ODgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fZHJ2 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2ZzbC1kY3UvZnNsX2RjdV9kcm1fZHJ2LmMKQEAgLTI0 LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0 Y19oZWxwZXIuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CiAKICNpbmNsdWRlICJmc2xfZGN1X2RybV9jcnRj LmgiCiAjaW5jbHVkZSAiZnNsX2RjdV9kcm1fZHJ2LmgiCkBAIC0xOTQsNiArMTk1LDcgQEAgc3Rh dGljIHN0cnVjdCBkcm1fZHJpdmVyIGZzbF9kY3VfZHJtX2RyaXZlciA9IHsKIAkuZHVtYl9jcmVh dGUJCT0gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFwX29mZnNldAk9IGRybV9n ZW1fY21hX2R1bWJfbWFwX29mZnNldCwKIAkuZHVtYl9kZXN0cm95CQk9IGRybV9nZW1fZHVtYl9k ZXN0cm95LAorCS5yZW1vdmVfZmIJCT0gZHJtX2F0b21pY19oZWxwZXJfcmVtb3ZlX2ZiLAogCS5m b3BzCQkJPSAmZnNsX2RjdV9kcm1fZm9wcywKIAkubmFtZQkJCT0gImZzbC1kY3UtZHJtIiwKIAku ZGVzYwkJCT0gIkZyZWVzY2FsZSBEQ1UgRFJNIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4 IDJhMDc2YjAwNWFmOS4uOWNiZjg4YWRmMjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAg LTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KICNpbmNsdWRlIDxsaW51 eC92Z2Ffc3dpdGNoZXJvby5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KIAogc3RhdGljIHN0cnVjdCBkcm1fZHJp dmVyIGRyaXZlcjsKIApAQCAtMTcxMiw2ICsxNzEzLDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJp dmVyIGRyaXZlciA9IHsKIAkuZHVtYl9jcmVhdGUgPSBpOTE1X2dlbV9kdW1iX2NyZWF0ZSwKIAku ZHVtYl9tYXBfb2Zmc2V0ID0gaTkxNV9nZW1fbW1hcF9ndHQsCiAJLmR1bWJfZGVzdHJveSA9IGRy bV9nZW1fZHVtYl9kZXN0cm95LAorCS5yZW1vdmVfZmIgPSBkcm1fYXRvbWljX2hlbHBlcl9yZW1v dmVfZmIsCiAJLmlvY3RscyA9IGk5MTVfaW9jdGxzLAogCS5mb3BzID0gJmk5MTVfZHJpdmVyX2Zv cHMsCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t c20vbXNtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZHJ2LmMKaW5kZXggZDUyOTEw ZTJjMjZjLi5mYWIzZDdmMDM2YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNt X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2Rydi5jCkBAIC05NzMsNiArOTcz LDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG1zbV9kcml2ZXIgPSB7CiAJLmR1bWJfY3Jl YXRlICAgICAgICA9IG1zbV9nZW1fZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFwX29mZnNldCAgICA9 IG1zbV9nZW1fZHVtYl9tYXBfb2Zmc2V0LAogCS5kdW1iX2Rlc3Ryb3kgICAgICAgPSBkcm1fZ2Vt X2R1bWJfZGVzdHJveSwKKwkucmVtb3ZlX2ZiICAgICAgICAgID0gZHJtX2F0b21pY19oZWxwZXJf cmVtb3ZlX2ZiLAogCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90 b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUs CiAJLmdlbV9wcmltZV9leHBvcnQgICA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9v bWFwZHJtL29tYXBfZHJ2LmMKaW5kZXggODAzOThhNjg0Y2FlLi45ZjNiYWNiYWQxMTggMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL29tYXBkcm0vb21hcF9kcnYuYwpAQCAtODE3LDYgKzgxNyw3IEBAIHN0YXRpYyBzdHJ1 Y3QgZHJtX2RyaXZlciBvbWFwX2RybV9kcml2ZXIgPSB7CiAJLmR1bWJfY3JlYXRlID0gb21hcF9n ZW1fZHVtYl9jcmVhdGUsCiAJLmR1bWJfbWFwX29mZnNldCA9IG9tYXBfZ2VtX2R1bWJfbWFwX29m ZnNldCwKIAkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisJLnJlbW92ZV9m YiA9IGRybV9hdG9taWNfaGVscGVyX3JlbW92ZV9mYiwKIAkuaW9jdGxzID0gaW9jdGxzLAogCS5u dW1faW9jdGxzID0gRFJNX09NQVBfTlVNX0lPQ1RMUywKIAkuZm9wcyA9ICZvbWFwZHJpdmVyX2Zv cHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5jIGIv ZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9kcnYuYwppbmRleCBlZDYwMDZiZjZiZDgu LjNiNzM4OGQ4NzgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9k dV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2Rydi5jCkBAIC0y NSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgogI2luY2x1ZGUg PGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxw ZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KIAogI2luY2x1ZGUgInJj YXJfZHVfY3J0Yy5oIgogI2luY2x1ZGUgInJjYXJfZHVfZHJ2LmgiCkBAIC0yMzEsNiArMjMyLDcg QEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHJjYXJfZHVfZHJpdmVyID0gewogCS5kdW1iX2Ny ZWF0ZQkJPSByY2FyX2R1X2R1bWJfY3JlYXRlLAogCS5kdW1iX21hcF9vZmZzZXQJPSBkcm1fZ2Vt X2NtYV9kdW1iX21hcF9vZmZzZXQsCiAJLmR1bWJfZGVzdHJveQkJPSBkcm1fZ2VtX2R1bWJfZGVz dHJveSwKKwkucmVtb3ZlX2ZiCQk9IGRybV9hdG9taWNfaGVscGVyX3JlbW92ZV9mYiwKIAkuZm9w cwkJCT0gJnJjYXJfZHVfZm9wcywKIAkubmFtZQkJCT0gInJjYXItZHUiLAogCS5kZXNjCQkJPSAi UmVuZXNhcyBSLUNhciBEaXNwbGF5IFVuaXQiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fZHJ2LmMKaW5kZXggODk2ZGEwOWU0OWVlLi5iZjIxNjJlNGIxMzEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYwpAQCAtMTksNiArMTks NyBAQAogI2luY2x1ZGUgPGRybS9kcm1QLmg+CiAjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgogI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWNfaGVscGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yOTAs NiArMjkxLDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIHJvY2tjaGlwX2RybV9kcml2ZXIg PSB7CiAJLmR1bWJfY3JlYXRlCQk9IHJvY2tjaGlwX2dlbV9kdW1iX2NyZWF0ZSwKIAkuZHVtYl9t YXBfb2Zmc2V0CT0gcm9ja2NoaXBfZ2VtX2R1bWJfbWFwX29mZnNldCwKIAkuZHVtYl9kZXN0cm95 CQk9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5yZW1vdmVfZmIJCT0gZHJtX2F0b21pY19oZWxw ZXJfcmVtb3ZlX2ZiLAogCS5wcmltZV9oYW5kbGVfdG9fZmQJPSBkcm1fZ2VtX3ByaW1lX2hhbmRs ZV90b19mZCwKIAkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5k bGUsCiAJLmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9k cm0uYwppbmRleCA4ZTZiMThjYWE3MDYuLmM2MGY4NmM4ZjczZCAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL2RybS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcm0uYwpA QCAtOTQ0LDYgKzk0NCw4IEBAIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciB0ZWdyYV9kcm1fZHJp dmVyID0gewogCS5kdW1iX21hcF9vZmZzZXQgPSB0ZWdyYV9ib19kdW1iX21hcF9vZmZzZXQsCiAJ LmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAogCisJLnJlbW92ZV9mYiA9IGRy bV9hdG9taWNfaGVscGVyX3JlbW92ZV9mYiwKKwogCS5pb2N0bHMgPSB0ZWdyYV9kcm1faW9jdGxz LAogCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh0ZWdyYV9kcm1faW9jdGxzKSwKIAkuZm9wcyA9 ICZ0ZWdyYV9kcm1fZm9wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Ry di5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKaW5kZXggYjdkMmZmMGU2ZTFmLi40 ZGRlNWQ5MjRkNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5j bHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KICNpbmNsdWRlICJkcm1fZmJfY21hX2hlbHBlci5oIgorI2luY2x1ZGUgImRybS9kcm1f YXRvbWljX2hlbHBlci5oIgogCiAjaW5jbHVkZSAidWFwaS9kcm0vdmM0X2RybS5oIgogI2luY2x1 ZGUgInZjNF9kcnYuaCIKQEAgLTExNSw2ICsxMTYsOCBAQCBzdGF0aWMgc3RydWN0IGRybV9kcml2 ZXIgdmM0X2RybV9kcml2ZXIgPSB7CiAJLmR1bWJfbWFwX29mZnNldCA9IGRybV9nZW1fY21hX2R1 bWJfbWFwX29mZnNldCwKIAkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCiAK KwkucmVtb3ZlX2ZiID0gZHJtX2F0b21pY19oZWxwZXJfcmVtb3ZlX2ZiLAorCiAJLmlvY3RscyA9 IHZjNF9kcm1faW9jdGxzLAogCS5udW1faW9jdGxzID0gQVJSQVlfU0laRSh2YzRfZHJtX2lvY3Rs cyksCiAJLmZvcHMgPSAmdmM0X2RybV9mb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby92aXJ0Z3B1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2Ry di5jCmluZGV4IDdmODk4Y2ZkYzc0Ni4uNTY5MTI5NDFlYWY4IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRp by92aXJ0Z3B1X2Rydi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+ CiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybS9kcm0uaCIKKyNpbmNsdWRlICJkcm0v ZHJtX2F0b21pY19oZWxwZXIuaCIKIAogI2luY2x1ZGUgInZpcnRncHVfZHJ2LmgiCiBzdGF0aWMg c3RydWN0IGRybV9kcml2ZXIgZHJpdmVyOwpAQCAtMTI5LDYgKzEzMCw4IEBAIHN0YXRpYyBzdHJ1 Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmR1bWJfbWFwX29mZnNldCA9IHZpcnRpb19ncHVf bW9kZV9kdW1iX21tYXAsCiAJLmR1bWJfZGVzdHJveSA9IHZpcnRpb19ncHVfbW9kZV9kdW1iX2Rl c3Ryb3ksCiAKKwkucmVtb3ZlX2ZiID0gZHJtX2F0b21pY19oZWxwZXJfcmVtb3ZlX2ZiLAorCiAj aWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJLmRlYnVnZnNfaW5pdCA9IHZpcnRpb19ncHVf ZGVidWdmc19pbml0LAogCS5kZWJ1Z2ZzX2NsZWFudXAgPSB2aXJ0aW9fZ3B1X2RlYnVnZnNfdGFr ZWRvd24sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1Q LmgKaW5kZXggM2M4NDIyYzY5NTcyLi4zMTQ4M2MyZmVmNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUv ZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTYzOCw2ICs2MzgsOSBAQCBz dHJ1Y3QgZHJtX2RyaXZlciB7CiAJCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAg ICB1aW50MzJfdCBoYW5kbGUpOwogCisJLyogcm1mYiBhbmQgZHJtX2ZyYW1lYnVmZmVyX3JlbW92 ZSBob29rICovCisJaW50ICgqcmVtb3ZlX2ZiKShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7 CisKIAkvKiBEcml2ZXIgcHJpdmF0ZSBvcHMgZm9yIHRoaXMgb2JqZWN0ICovCiAJY29uc3Qgc3Ry dWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICpnZW1fdm1fb3BzOwogCmRpZmYgLS1naXQgYS9pbmNs dWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxw ZXIuaAppbmRleCA5MDU0NTk4YzlhN2EuLjJkNWZmNWM4MGM3NiAxMDA2NDQKLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hl bHBlci5oCkBAIC04Nyw2ICs4Nyw4IEBAIGludCBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmln KHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCk7CiBpbnQgX19kcm1fYXRvbWljX2hlbHBlcl9zZXRf Y29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCwKIAkJc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKTsKIAoraW50IGRybV9hdG9taWNfaGVscGVyX3JlbW92ZV9mYihzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICpmYik7CisKIGludCBkcm1fYXRvbWljX2hlbHBlcl9kaXNhYmxlX2FsbChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVf Y3R4ICpjdHgpOwogc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKmRybV9hdG9taWNfaGVscGVyX3N1 c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com ([192.55.52.88]:14945 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758885AbcCVKyA (ORCPT ); Tue, 22 Mar 2016 06:54:00 -0400 Subject: Re: [PATCH] drm/core: Do not preserve framebuffer on rmfb. To: Daniel Vetter References: <1458569477-13364-1-git-send-email-maarten.lankhorst@linux.intel.com> <56F11130.5020506@linux.intel.com> <20160322105047.GU28483@phenom.ffwll.local> Cc: dri-devel , intel-gfx , Thomas Hellstrom , stable From: Maarten Lankhorst Message-ID: <56F12441.3000803@linux.intel.com> Date: Tue, 22 Mar 2016 11:53:53 +0100 MIME-Version: 1.0 In-Reply-To: <20160322105047.GU28483@phenom.ffwll.local> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: stable-owner@vger.kernel.org List-ID: Op 22-03-16 om 11:50 schreef Daniel Vetter: > On Tue, Mar 22, 2016 at 10:32:32AM +0100, Maarten Lankhorst wrote: >> Op 21-03-16 om 18:37 schreef Daniel Vetter: >>> On Mon, Mar 21, 2016 at 03:11:17PM +0100, Maarten Lankhorst wrote: >>>> It turns out that preserving framebuffers after the rmfb call breaks >>>> vmwgfx userspace. This was originally introduced because it was thought >>>> nobody relied on the behavior, but unfortunately it seems there are >>>> exceptions. >>>> >>>> drm_framebuffer_remove may fail with -EINTR now, so a straight revert >>>> is impossible. There is no way to remove the framebuffer from the lists >>>> and active planes without introducing a race because of the different >>>> locking requirements. Instead call drm_framebuffer_remove from a >>>> workqueue, which is unaffected by signals. >>>> >>>> Cc: stable@vger.kernel.org #v4.4+ >>>> Fixes: 13803132818c ("drm/core: Preserve the framebuffer after removing it.") >>>> Testcase: kms_flip.flip-vs-rmfb-interruptible >>>> References: https://lists.freedesktop.org/archives/dri-devel/2016-March/102876.html >>>> Cc: Thomas Hellstrom >>>> Cc: David Herrmann >>>> --- >>>> drivers/gpu/drm/drm_crtc.c | 20 +++++++++++++++++++- >>>> 1 file changed, 19 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c >>>> index e08f962288d9..b7d0b959f088 100644 >>>> --- a/drivers/gpu/drm/drm_crtc.c >>>> +++ b/drivers/gpu/drm/drm_crtc.c >>>> @@ -3434,6 +3434,18 @@ int drm_mode_addfb2(struct drm_device *dev, >>>> return 0; >>>> } >>>> >>>> +struct drm_mode_rmfb_work { >>>> + struct work_struct work; >>>> + struct drm_framebuffer *fb; >>>> +}; >>>> + >>>> +static void drm_mode_rmfb_work_fn(struct work_struct *w) >>>> +{ >>>> + struct drm_mode_rmfb_work *arg = container_of(w, typeof(*arg), work); >>>> + >>>> + drm_framebuffer_remove(arg->fb); >>> drm_framebuffer_remove still has the problem of not working correctly with >>> atomic since atomic commit will complain if we try to do more than 1 >>> commit per ww_acquire_ctx. I think we still need an atomic version of >>> this. Also probably a more nasty igt testcase which uses the same fb on >>> more than one plane to be able to hit this case. >> That's true, but a separate bug. :) > Atm we only use drm_framebuffer_remove in atomic drivers to nuke the fbdev > one at unload. With your patch userspace can't get there easily, and hence > it must be fixed. Maybe separate prep patch (also cc: stable) upfront? > Something like this? Unfortunately I need to collect acks first. commit ed242f92c2e7571a6a5f649c2a67031debc73e44 Author: Maarten Lankhorst Date: Thu Mar 17 13:42:08 2016 +0100 drm/atomic: Add remove_fb function pointer. Use this in drm_framebuffer_remove, this is to remove the fb in an atomic way. Signed-off-by: Maarten Lankhorst diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c index 56b829f97699..50ba6adb74e8 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c @@ -324,6 +324,7 @@ static struct drm_driver hdlcd_driver = { .dumb_create = drm_gem_cma_dumb_create, .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_export = drm_gem_prime_export, diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c index 3d8d16402d07..5d357f729114 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c @@ -711,6 +711,7 @@ static struct drm_driver atmel_hlcdc_dc_driver = { .dumb_create = drm_gem_cma_dumb_create, .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .fops = &fops, .name = "atmel-hlcdc", .desc = "Atmel HLCD Controller DRM", diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 4befe25c81c7..eb3b413560df 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -1960,6 +1960,72 @@ commit: return 0; } +int drm_atomic_helper_remove_fb(struct drm_framebuffer *fb) +{ + struct drm_modeset_acquire_ctx ctx; + struct drm_device *dev = fb->dev; + struct drm_atomic_state *state; + struct drm_plane *plane; + int ret = 0; + unsigned plane_mask; + + state = drm_atomic_state_alloc(dev); + if (!state) + return -ENOMEM; + + drm_modeset_acquire_init(&ctx, 0); + +retry: + plane_mask = 0; + ret = drm_modeset_lock_all_ctx(dev, &ctx); + if (ret) + goto unlock; + + drm_for_each_plane(plane, dev) { + struct drm_plane_state *plane_state; + + if (plane->state->fb != fb) + continue; + + plane_state = drm_atomic_get_plane_state(state, plane); + if (IS_ERR(plane_state)) { + ret = PTR_ERR(plane_state); + goto unlock; + } + + drm_atomic_set_fb_for_plane(plane_state, NULL); + ret = drm_atomic_set_crtc_for_plane(plane_state, NULL); + if (ret) + goto unlock; + + plane_mask |= BIT(drm_plane_index(plane)); + + plane->old_fb = plane->fb; + plane->fb = NULL; + } + + if (plane_mask) + ret = drm_atomic_commit(state); + +unlock: + if (plane_mask) + drm_atomic_clean_old_fb(dev, plane_mask, ret); + + if (ret == -EDEADLK) { + drm_modeset_backoff(&ctx); + goto retry; + } + + if (ret || !plane_mask) + drm_atomic_state_free(state); + + drm_modeset_drop_locks(&ctx); + drm_modeset_acquire_fini(&ctx); + + return ret; +} +EXPORT_SYMBOL(drm_atomic_helper_remove_fb); + /** * drm_atomic_helper_disable_all - disable all currently active outputs * @dev: DRM device diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index aaf6ab42f2c1..51c5a00ffdff 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -577,6 +577,42 @@ void drm_framebuffer_cleanup(struct drm_framebuffer *fb) } EXPORT_SYMBOL(drm_framebuffer_cleanup); +static int +legacy_remove_fb(struct drm_framebuffer *fb) +{ + struct drm_device *dev = fb->dev; + struct drm_crtc *crtc; + struct drm_plane *plane; + struct drm_mode_set set; + int ret = 0; + + /* atomic drivers must use drm_atomic_helper_remove_fb */ + WARN_ON(drm_core_check_feature(dev, DRIVER_ATOMIC)); + + drm_modeset_lock_all(dev); + /* remove from any CRTC */ + drm_for_each_crtc(crtc, dev) { + if (crtc->primary->fb == fb) { + /* should turn off the crtc */ + memset(&set, 0, sizeof(struct drm_mode_set)); + set.crtc = crtc; + set.fb = NULL; + ret = drm_mode_set_config_internal(&set); + if (ret) + goto out; + } + } + + drm_for_each_plane(plane, dev) { + if (plane->fb == fb) + drm_plane_force_disable(plane); + } + +out: + drm_modeset_unlock_all(dev); + return ret; +} + /** * drm_framebuffer_remove - remove and unreference a framebuffer object * @fb: framebuffer to remove @@ -592,9 +628,6 @@ EXPORT_SYMBOL(drm_framebuffer_cleanup); void drm_framebuffer_remove(struct drm_framebuffer *fb) { struct drm_device *dev; - struct drm_crtc *crtc; - struct drm_plane *plane; - struct drm_mode_set set; int ret; if (!fb) @@ -620,25 +653,13 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb) * in this manner. */ if (atomic_read(&fb->refcount.refcount) > 1) { - drm_modeset_lock_all(dev); - /* remove from any CRTC */ - drm_for_each_crtc(crtc, dev) { - if (crtc->primary->fb == fb) { - /* should turn off the crtc */ - memset(&set, 0, sizeof(struct drm_mode_set)); - set.crtc = crtc; - set.fb = NULL; - ret = drm_mode_set_config_internal(&set); - if (ret) - DRM_ERROR("failed to reset crtc %p when fb was deleted\n", crtc); - } - } + if (dev->driver->remove_fb) + ret = dev->driver->remove_fb(fb); + else + ret = legacy_remove_fb(fb); - drm_for_each_plane(plane, dev) { - if (plane->fb == fb) - drm_plane_force_disable(plane); - } - drm_modeset_unlock_all(dev); + if (ret) + DRM_ERROR("failed to remove fb %i/%p with %i\n", fb->base.id, fb, ret); } drm_framebuffer_unreference(fb); diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 5344940c8a07..2705a315f1ec 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -423,6 +423,7 @@ static struct drm_driver exynos_drm_driver = { .dumb_create = exynos_drm_gem_dumb_create, .dumb_map_offset = exynos_drm_gem_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_export = drm_gem_prime_export, diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c index e8d9337a66d8..f7562b178819 100644 --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_drv.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "fsl_dcu_drm_crtc.h" #include "fsl_dcu_drm_drv.h" @@ -194,6 +195,7 @@ static struct drm_driver fsl_dcu_drm_driver = { .dumb_create = drm_gem_cma_dumb_create, .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .fops = &fsl_dcu_drm_fops, .name = "fsl-dcu-drm", .desc = "Freescale DCU DRM", diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 2a076b005af9..9cbf88adf280 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -42,6 +42,7 @@ #include #include #include +#include static struct drm_driver driver; @@ -1712,6 +1713,7 @@ static struct drm_driver driver = { .dumb_create = i915_gem_dumb_create, .dumb_map_offset = i915_gem_mmap_gtt, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .ioctls = i915_ioctls, .fops = &i915_driver_fops, .name = DRIVER_NAME, diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index d52910e2c26c..fab3d7f036ae 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c @@ -973,6 +973,7 @@ static struct drm_driver msm_driver = { .dumb_create = msm_gem_dumb_create, .dumb_map_offset = msm_gem_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_export = drm_gem_prime_export, diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index 80398a684cae..9f3bacbad118 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c @@ -817,6 +817,7 @@ static struct drm_driver omap_drm_driver = { .dumb_create = omap_gem_dumb_create, .dumb_map_offset = omap_gem_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .ioctls = ioctls, .num_ioctls = DRM_OMAP_NUM_IOCTLS, .fops = &omapdriver_fops, diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c b/drivers/gpu/drm/rcar-du/rcar_du_drv.c index ed6006bf6bd8..3b7388d87815 100644 --- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c +++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "rcar_du_crtc.h" #include "rcar_du_drv.h" @@ -231,6 +232,7 @@ static struct drm_driver rcar_du_driver = { .dumb_create = rcar_du_dumb_create, .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .fops = &rcar_du_fops, .name = "rcar-du", .desc = "Renesas R-Car Display Unit", diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 896da09e49ee..bf2162e4b131 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -290,6 +291,7 @@ static struct drm_driver rockchip_drm_driver = { .dumb_create = rockchip_gem_dumb_create, .dumb_map_offset = rockchip_gem_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, .prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_fd_to_handle = drm_gem_prime_fd_to_handle, .gem_prime_import = drm_gem_prime_import, diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 8e6b18caa706..c60f86c8f73d 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -944,6 +944,8 @@ static struct drm_driver tegra_drm_driver = { .dumb_map_offset = tegra_bo_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, + .ioctls = tegra_drm_ioctls, .num_ioctls = ARRAY_SIZE(tegra_drm_ioctls), .fops = &tegra_drm_fops, diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c index b7d2ff0e6e1f..4dde5d924d51 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c @@ -15,6 +15,7 @@ #include #include #include "drm_fb_cma_helper.h" +#include "drm/drm_atomic_helper.h" #include "uapi/drm/vc4_drm.h" #include "vc4_drv.h" @@ -115,6 +116,8 @@ static struct drm_driver vc4_drm_driver = { .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, + .ioctls = vc4_drm_ioctls, .num_ioctls = ARRAY_SIZE(vc4_drm_ioctls), .fops = &vc4_drm_fops, diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c index 7f898cfdc746..56912941eaf8 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.c +++ b/drivers/gpu/drm/virtio/virtgpu_drv.c @@ -31,6 +31,7 @@ #include #include "drmP.h" #include "drm/drm.h" +#include "drm/drm_atomic_helper.h" #include "virtgpu_drv.h" static struct drm_driver driver; @@ -129,6 +130,8 @@ static struct drm_driver driver = { .dumb_map_offset = virtio_gpu_mode_dumb_mmap, .dumb_destroy = virtio_gpu_mode_dumb_destroy, + .remove_fb = drm_atomic_helper_remove_fb, + #if defined(CONFIG_DEBUG_FS) .debugfs_init = virtio_gpu_debugfs_init, .debugfs_cleanup = virtio_gpu_debugfs_takedown, diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 3c8422c69572..31483c2fef51 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -638,6 +638,9 @@ struct drm_driver { struct drm_device *dev, uint32_t handle); + /* rmfb and drm_framebuffer_remove hook */ + int (*remove_fb)(struct drm_framebuffer *fb); + /* Driver private ops for this object */ const struct vm_operations_struct *gem_vm_ops; diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h index 9054598c9a7a..2d5ff5c80c76 100644 --- a/include/drm/drm_atomic_helper.h +++ b/include/drm/drm_atomic_helper.h @@ -87,6 +87,8 @@ int drm_atomic_helper_set_config(struct drm_mode_set *set); int __drm_atomic_helper_set_config(struct drm_mode_set *set, struct drm_atomic_state *state); +int drm_atomic_helper_remove_fb(struct drm_framebuffer *fb); + int drm_atomic_helper_disable_all(struct drm_device *dev, struct drm_modeset_acquire_ctx *ctx); struct drm_atomic_state *drm_atomic_helper_suspend(struct drm_device *dev);