From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH 1/5] drm: don't block fb changes for async plane updates Date: Mon, 11 Mar 2019 10:39:50 +0100 Message-ID: <20190311103950.4465ea8c@collabora.com> References: <20190304144909.6267-1-helen.koike@collabora.com> <20190304144909.6267-2-helen.koike@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D67F894EB for ; Mon, 11 Mar 2019 09:39:55 +0000 (UTC) In-Reply-To: <20190304144909.6267-2-helen.koike@collabora.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Helen Koike Cc: =?UTF-8?B?U3TDqXBoYW5l?= Marchesin , Sean Paul , David Airlie , daniel.vetter@ffwll.ch, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Tomasz Figa , kernel@collabora.com, nicholas.kazlauskas@amd.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCAgNCBNYXIgMjAxOSAxMTo0OTowNSAtMDMwMApIZWxlbiBLb2lrZSA8aGVsZW4ua29p a2VAY29sbGFib3JhLmNvbT4gd3JvdGU6Cgo+IEluIHRoZSBjYXNlIG9mIGEgbm9ybWFsIHN5bmMg dXBkYXRlLCB0aGUgcHJlcGFyYXRpb24gb2YgZnJhbWVidWZmZXJzIChiZQo+IGl0IGNhbGxpbmcg ZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoKSBvciBkb2luZyBzZXR1cHMgd2l0aAo+ IGRybV9mcmFtZWJ1ZmZlcl9nZXQoKSkgYXJlIHBlcmZvcm1lZCBpbiB0aGUgbmV3X3N0YXRlIGFu ZCB0aGUgcmVzcGVjdGl2ZQo+IGNsZWFudXBzIGFyZSBwZXJmb3JtZWQgaW4gdGhlIG9sZF9zdGF0 ZS4KPiAKPiBJbiB0aGUgY2FzZSBvZiBhc3luYyB1cGRhdGVzLCB0aGUgcHJlcGFyYXRpb24gaXMg YWxzbyBkb25lIGluIHRoZQo+IG5ld19zdGF0ZSBidXQgdGhlIGNsZWFudXBzIGFyZSBkb25lIGlu IHRoZSBuZXdfc3RhdGUgKGJlY2F1c2UgdXBkYXRlcwo+IGFyZSBwZXJmb3JtZWQgaW4gcGxhY2Us IGkuZS4gaW4gdGhlIGN1cnJlbnQgc3RhdGUpLgo+IAo+IFRoZSBjdXJyZW50IGNvZGUgYmxvY2tz IGFzeW5jIHVkcGF0ZXMgd2hlbiB0aGUgZmIgaXMgY2hhbmdlZCwgdHVybmluZwo+IGFzeW5jIHVw ZGF0ZXMgaW50byBzeW5jIHVwZGF0ZXMsIHNsb3dpbmcgZG93biBjdXJzb3IgdXBkYXRlcyBhbmQK PiBpbnRyb2R1Y2luZyByZWdyZXNzaW9ucyBpbiBpZ3QgdGVzdHMgd2l0aCBlcnJvcnMgb2YgdHlw ZToKPiAKPiAiQ1JJVElDQUw6IGNvbXBsZXRlZCA5NyBjdXJzb3IgdXBkYXRlZCBpbiBhIHBlcmlv ZCBvZiAzMCBmbGlwcywgd2UKPiBleHBlY3QgdG8gY29tcGxldGUgYXBwcm94aW1hdGVseSAxNTM2 MCB1cGRhdGVzLCB3aXRoIHRoZSB0aHJlc2hvbGQgc2V0Cj4gYXQgNzY4MCIKPiAKPiBGYiBjaGFu Z2VzIGluIGFzeW5jIHVwZGF0ZXMgd2VyZSBwcmV2ZW50ZWQgdG8gYXZvaWQgdGhlIGZvbGxvd2lu ZyBzY2VuYXJpbzoKPiAKPiAtIEFzeW5jIHVwZGF0ZSwgb2xkZmIgPSBOVUxMLCBuZXdmYiA9IGZi MSwgcHJlcGFyZSBmYjEsIGNsZWFudXAgZmIxCj4gLSBBc3luYyB1cGRhdGUsIG9sZGZiID0gZmIx LCBuZXdmYiA9IGZiMiwgcHJlcGFyZSBmYjIsIGNsZWFudXAgZmIyCj4gLSBOb24tYXN5bmMgY29t bWl0LCBvbGRmYiA9IGZiMiwgbmV3ZmIgPSBmYjEsIHByZXBhcmUgZmIxLCBjbGVhbnVwIGZiMiAo d3JvbmcpCj4gV2hlcmUgd2UgaGF2ZSBhIHNpbmdsZSBjYWxsIHRvIHByZXBhcmUgZmIyIGJ1dCBk b3VibGUgY2xlYW51cCBjYWxsIHRvIGZiMi4KPiAKPiBUbyBzb2x2ZSB0aGUgYWJvdmUgcHJvYmxl bXMsIGluc3RlYWQgb2YgYmxvY2tpbmcgYXN5bmMgZmIgY2hhbmdlcywgd2UKPiBwbGFjZSB0aGUg b2xkIGZyYW1lYnVmZmVyIGluIHRoZSBuZXdfc3RhdGUgb2JqZWN0LCBzbyB3aGVuIHRoZSBjb2Rl Cj4gcGVyZm9ybXMgY2xlYW51cHMgaW4gdGhlIG5ld19zdGF0ZSBpdCB3aWxsIGNsZWFudXAgdGhl IG9sZF9mYiBhbmQgd2UKPiB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBzY2VuYXJpbyBpbnN0ZWFk Ogo+IAo+IC0gQXN5bmMgdXBkYXRlLCBvbGRmYiA9IE5VTEwsIG5ld2ZiID0gZmIxLCBwcmVwYXJl IGZiMSwgbm8gY2xlYW51cAo+IC0gQXN5bmMgdXBkYXRlLCBvbGRmYiA9IGZiMSwgbmV3ZmIgPSBm YjIsIHByZXBhcmUgZmIyLCBjbGVhbnVwIGZiMQo+IC0gTm9uLWFzeW5jIGNvbW1pdCwgb2xkZmIg PSBmYjIsIG5ld2ZiID0gZmIxLCBwcmVwYXJlIGZiMSwgY2xlYW51cCBmYjIKPiAKPiBXaGVyZSBj YWxscyB0byBwcmVwYXJlL2NsZWFudXAgYXJlIGJhbGxhbmNlZC4KPiAKPiBDYzogPHN0YWJsZUB2 Z2VyLmtlcm5lbC5vcmc+ICMgdjQuMTQrOiAyNWRjMTk0YjM0ZGQ6IGRybTogQmxvY2sgZmIgY2hh bmdlcyBmb3IgYXN5bmMgcGxhbmUgdXBkYXRlcwo+IEZpeGVzOiAyNWRjMTk0YjM0ZGQgKCJkcm06 IEJsb2NrIGZiIGNoYW5nZXMgZm9yIGFzeW5jIHBsYW5lIHVwZGF0ZXMiKQo+IFN1Z2dlc3RlZC1i eTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AY29sbGFib3JhLmNvbT4KPiBTaWdu ZWQtb2ZmLWJ5OiBIZWxlbiBLb2lrZSA8aGVsZW4ua29pa2VAY29sbGFib3JhLmNvbT4KPiAKPiAt LS0KPiBIZWxsbywKPiAKPiBBcyBtZW50aW9uZWQgaW4gdGhlIGNvdmVyIGxldHRlciwKPiBJIHRl c3RlZCBvbiB0aGUgcm9ja2NoaXAgYW5kIG9uIGk5MTUgKHdpdGggYSBwYXRjaCBJIGFtIHN0aWxs IHdvcmtpbmcgb24gZm9yCj4gcmVwbGFjaW5nIGN1cnNvcnMgYnkgYXN5bmMgdXBkYXRlKSwgd2l0 aCBpZ3QgcGxhbmVfY3Vyc29yX2xlZ2FjeSBhbmQKPiBrbXNfY3Vyc29yX2xlZ2FjeSBhbmQgSSBk aWRuJ3Qgc2VlIGFueSByZWdyZXNzaW9ucy4KPiBJIGNvdWxkbid0IHRlc3Qgb24gTVNNIGFuZCBB TUQgYmVjYXVzZSBJIGRvbid0IGhhdmUgdGhlIGhhcmR3YXJlIChhbmQgSSBhbQo+IGhhdmluZyBz b21lIGlzc3VlcyB0ZXN0aW5nIG9uIHZjNCkgYW5kIEkgd291bGQgYXBwcmVjaWF0ZSBpZiBhbnlv bmUgY291bGQgaGVscAo+IG1lIHRlc3RpbmcgdGhvc2UuCj4gCj4gSSBhbHNvIHRoaW5rIGl0IHdv dWxkIGJlIGEgYmV0dGVyIHNvbHV0aW9uIGlmLCBpbnN0ZWFkIG9mIGhhdmluZyBhc3luYwo+IHRv IGRvIGluLXBsYWNlIHVwZGF0ZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGUsIHRoZSBhc3luYyBwYXRo IHNob3VsZCBiZQo+IGVxdWl2YWxlbnQgdG8gYSBzeW5jcm9ub3VzIHVwZGF0ZSwgaS5lLiwgbW9k aWZ5aW5nIG5ld19zdGF0ZSBhbmQKPiBwZXJmb3JtaW5nIGEgZmxpcAo+IElNSE8sIHRoZSBvbmx5 IGRpZmZlcmVuY2UgYmV0d2VlbiBzeW5jIGFuZCBhc3luYyBzaG91bGQgYmUgdGhhdCBhc3luYyB1 cGRhdGUKPiBkb2Vzbid0IHdhaXQgZm9yIHZibGFuayBhbmQgYXBwbGllcyB0aGUgY2hhbmdlcyBp bW1lZGl0YWxseSB0byB0aGUgaHcsCj4gYnV0IHRoZSBjb2RlIHBhdGggY291bGQgYmUgYWxtb3N0 IHRoZSBzYW1lLgo+IEJ1dCBmb3Igbm93IEkgdGhpbmsgdGhpcyBzb2x1dGlvbiBpcyBvayAoc3dh cGluZyBuZXdfZmIvb2xkX2ZiKSwgYW5kCj4gdGhlbiB3ZSBjYW4gYWRqdXN0IHRoaW5ncyBsaXR0 bGUgYnkgbGl0dGxlLCB3aGF0IGRvIHlvdSB0aGluaz8KPiAKPiBUaGFua3MhCj4gSGVsZW4KPiAK PiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgfCAyMCArKysrKysrKysrLS0t LS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25z KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBpbmRleCA1NDBhNzdhMmFk ZTkuLmU3ZWI5NmYxZWZjMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21p Y19oZWxwZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4g QEAgLTE2MDgsMTUgKzE2MDgsNiBAQCBpbnQgZHJtX2F0b21pY19oZWxwZXJfYXN5bmNfY2hlY2so c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCSAgICBvbGRfcGxhbmVfc3RhdGUtPmNydGMgIT0g bmV3X3BsYW5lX3N0YXRlLT5jcnRjKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAtCS8qCj4g LQkgKiBGSVhNRTogU2luY2UgcHJlcGFyZV9mYiBhbmQgY2xlYW51cF9mYiBhcmUgYWx3YXlzIGNh bGxlZCBvbgo+IC0JICogdGhlIG5ld19wbGFuZV9zdGF0ZSBmb3IgYXN5bmMgdXBkYXRlcyB3ZSBu ZWVkIHRvIGJsb2NrIGZyYW1lYnVmZmVyCj4gLQkgKiBjaGFuZ2VzLiBUaGlzIHByZXZlbnRzIHVz ZSBvZiBhIGZiIHRoYXQncyBiZWVuIGNsZWFuZWQgdXAgYW5kCj4gLQkgKiBkb3VibGUgY2xlYW51 cHMgZnJvbSBvY2N1cmluZy4KPiAtCSAqLwo+IC0JaWYgKG9sZF9wbGFuZV9zdGF0ZS0+ZmIgIT0g bmV3X3BsYW5lX3N0YXRlLT5mYikKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gIAlmdW5jcyA9 IHBsYW5lLT5oZWxwZXJfcHJpdmF0ZTsKPiAgCWlmICghZnVuY3MtPmF0b21pY19hc3luY191cGRh dGUpCj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gQEAgLTE2NTcsNiArMTY0OCw5IEBAIHZvaWQgZHJt X2F0b21pY19oZWxwZXJfYXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gIAlp bnQgaTsKPiAgCj4gIAlmb3JfZWFjaF9uZXdfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBw bGFuZV9zdGF0ZSwgaSkgewo+ICsJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm5ld19mYiA9IHBs YW5lX3N0YXRlLT5mYjsKPiArCQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIgPSBwbGFu ZS0+c3RhdGUtPmZiOwo+ICsKPiAgCQlmdW5jcyA9IHBsYW5lLT5oZWxwZXJfcHJpdmF0ZTsKPiAg CQlmdW5jcy0+YXRvbWljX2FzeW5jX3VwZGF0ZShwbGFuZSwgcGxhbmVfc3RhdGUpOwo+ICAKPiBA QCAtMTY2NSwxMSArMTY1OSwxNyBAQCB2b2lkIGRybV9hdG9taWNfaGVscGVyX2FzeW5jX2NvbW1p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJCSAqIHBsYW5lLT5zdGF0ZSBpbi1wbGFjZSwg bWFrZSBzdXJlIGF0IGxlYXN0IGNvbW1vbgo+ICAJCSAqIHByb3BlcnRpZXMgaGF2ZSBiZWVuIHBy b3Blcmx5IHVwZGF0ZWQuCj4gIAkJICovCj4gLQkJV0FSTl9PTl9PTkNFKHBsYW5lLT5zdGF0ZS0+ ZmIgIT0gcGxhbmVfc3RhdGUtPmZiKTsKPiArCQlXQVJOX09OX09OQ0UocGxhbmUtPnN0YXRlLT5m YiAhPSBuZXdfZmIpOwo+ICAJCVdBUk5fT05fT05DRShwbGFuZS0+c3RhdGUtPmNydGNfeCAhPSBw bGFuZV9zdGF0ZS0+Y3J0Y194KTsKPiAgCQlXQVJOX09OX09OQ0UocGxhbmUtPnN0YXRlLT5jcnRj X3kgIT0gcGxhbmVfc3RhdGUtPmNydGNfeSk7Cj4gIAkJV0FSTl9PTl9PTkNFKHBsYW5lLT5zdGF0 ZS0+c3JjX3ggIT0gcGxhbmVfc3RhdGUtPnNyY194KTsKPiAgCQlXQVJOX09OX09OQ0UocGxhbmUt PnN0YXRlLT5zcmNfeSAhPSBwbGFuZV9zdGF0ZS0+c3JjX3kpOwo+ICsKPiArCQkvKgo+ICsJCSAq IE1ha2Ugc3VyZSB0aGUgRkJzIGhhdmUgYmVlbiBzd2FwcGVkIHNvIHRoYXQgY2xlYW51cHMgaW4g dGhlCj4gKwkJICogbmV3X3N0YXRlIHBlcmZvcm1zIGEgY2xlYW51cCBpbiB0aGUgb2xkIEZCLgo+ ICsJCSAqLwo+ICsJCVdBUk5fT05fT05DRShwbGFuZV9zdGF0ZS0+ZmIgIT0gb2xkX2ZiKTsKCkxv b2tzIGxpa2UgdGhpcyBwYXRjaCBzaG91bGQgZ28gbGFzdCBpbiB0aGUgc2VyaWVzIGlmIHlvdSB3 YW50IHRvIGtlZXAKdGhpbmdzIGJpc2VjdGFibGUsIG90aGVyd2lzZSB5b3UnbGwgaGF2ZSBhIFdB Uk5fT04oKSBiYWNrdHJhY2UgaW4gdGhlCmRyaXZlcnMgeW91ciBmaXhpbmcgaW4gdGhlIGZvbGxv d2luZyBwYXRjaGVzLgoKPiAgCX0KPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVs cGVyX2FzeW5jX2NvbW1pdCk7CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWw= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DDAF1C43381 for ; Mon, 11 Mar 2019 09:40:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AA10720880 for ; Mon, 11 Mar 2019 09:40:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727384AbfCKJj7 (ORCPT ); Mon, 11 Mar 2019 05:39:59 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:53588 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727143AbfCKJj5 (ORCPT ); Mon, 11 Mar 2019 05:39:57 -0400 Received: from localhost (unknown [IPv6:2a01:e0a:2c:6930:5cf4:84a1:2763:fe0d]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: bbrezillon) by bhuna.collabora.co.uk (Postfix) with ESMTPSA id 806F426048B; Mon, 11 Mar 2019 09:39:53 +0000 (GMT) Date: Mon, 11 Mar 2019 10:39:50 +0100 From: Boris Brezillon To: Helen Koike Cc: dri-devel@lists.freedesktop.org, nicholas.kazlauskas@amd.com, andrey.grodzovsky@amd.com, daniel.vetter@ffwll.ch, linux-kernel@vger.kernel.org, Tomasz Figa , David Airlie , Sean Paul , kernel@collabora.com, harry.wentland@amd.com, =?UTF-8?B?U3TDqXBoYW5l?= Marchesin Subject: Re: [PATCH 1/5] drm: don't block fb changes for async plane updates Message-ID: <20190311103950.4465ea8c@collabora.com> In-Reply-To: <20190304144909.6267-2-helen.koike@collabora.com> References: <20190304144909.6267-1-helen.koike@collabora.com> <20190304144909.6267-2-helen.koike@collabora.com> Organization: Collabora X-Mailer: Claws Mail 3.17.3 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 4 Mar 2019 11:49:05 -0300 Helen Koike wrote: > In the case of a normal sync update, the preparation of framebuffers (be > it calling drm_atomic_helper_prepare_planes() or doing setups with > drm_framebuffer_get()) are performed in the new_state and the respective > cleanups are performed in the old_state. > > In the case of async updates, the preparation is also done in the > new_state but the cleanups are done in the new_state (because updates > are performed in place, i.e. in the current state). > > The current code blocks async udpates when the fb is changed, turning > async updates into sync updates, slowing down cursor updates and > introducing regressions in igt tests with errors of type: > > "CRITICAL: completed 97 cursor updated in a period of 30 flips, we > expect to complete approximately 15360 updates, with the threshold set > at 7680" > > Fb changes in async updates were prevented to avoid the following scenario: > > - Async update, oldfb = NULL, newfb = fb1, prepare fb1, cleanup fb1 > - Async update, oldfb = fb1, newfb = fb2, prepare fb2, cleanup fb2 > - Non-async commit, oldfb = fb2, newfb = fb1, prepare fb1, cleanup fb2 (wrong) > Where we have a single call to prepare fb2 but double cleanup call to fb2. > > To solve the above problems, instead of blocking async fb changes, we > place the old framebuffer in the new_state object, so when the code > performs cleanups in the new_state it will cleanup the old_fb and we > will have the following scenario instead: > > - Async update, oldfb = NULL, newfb = fb1, prepare fb1, no cleanup > - Async update, oldfb = fb1, newfb = fb2, prepare fb2, cleanup fb1 > - Non-async commit, oldfb = fb2, newfb = fb1, prepare fb1, cleanup fb2 > > Where calls to prepare/cleanup are ballanced. > > Cc: # v4.14+: 25dc194b34dd: drm: Block fb changes for async plane updates > Fixes: 25dc194b34dd ("drm: Block fb changes for async plane updates") > Suggested-by: Boris Brezillon > Signed-off-by: Helen Koike > > --- > Hello, > > As mentioned in the cover letter, > I tested on the rockchip and on i915 (with a patch I am still working on for > replacing cursors by async update), with igt plane_cursor_legacy and > kms_cursor_legacy and I didn't see any regressions. > I couldn't test on MSM and AMD because I don't have the hardware (and I am > having some issues testing on vc4) and I would appreciate if anyone could help > me testing those. > > I also think it would be a better solution if, instead of having async > to do in-place updates in the current state, the async path should be > equivalent to a syncronous update, i.e., modifying new_state and > performing a flip > IMHO, the only difference between sync and async should be that async update > doesn't wait for vblank and applies the changes immeditally to the hw, > but the code path could be almost the same. > But for now I think this solution is ok (swaping new_fb/old_fb), and > then we can adjust things little by little, what do you think? > > Thanks! > Helen > > drivers/gpu/drm/drm_atomic_helper.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 540a77a2ade9..e7eb96f1efc2 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -1608,15 +1608,6 @@ int drm_atomic_helper_async_check(struct drm_device *dev, > old_plane_state->crtc != new_plane_state->crtc) > return -EINVAL; > > - /* > - * FIXME: Since prepare_fb and cleanup_fb are always called on > - * the new_plane_state for async updates we need to block framebuffer > - * changes. This prevents use of a fb that's been cleaned up and > - * double cleanups from occuring. > - */ > - if (old_plane_state->fb != new_plane_state->fb) > - return -EINVAL; > - > funcs = plane->helper_private; > if (!funcs->atomic_async_update) > return -EINVAL; > @@ -1657,6 +1648,9 @@ void drm_atomic_helper_async_commit(struct drm_device *dev, > int i; > > for_each_new_plane_in_state(state, plane, plane_state, i) { > + struct drm_framebuffer *new_fb = plane_state->fb; > + struct drm_framebuffer *old_fb = plane->state->fb; > + > funcs = plane->helper_private; > funcs->atomic_async_update(plane, plane_state); > > @@ -1665,11 +1659,17 @@ void drm_atomic_helper_async_commit(struct drm_device *dev, > * plane->state in-place, make sure at least common > * properties have been properly updated. > */ > - WARN_ON_ONCE(plane->state->fb != plane_state->fb); > + WARN_ON_ONCE(plane->state->fb != new_fb); > WARN_ON_ONCE(plane->state->crtc_x != plane_state->crtc_x); > WARN_ON_ONCE(plane->state->crtc_y != plane_state->crtc_y); > WARN_ON_ONCE(plane->state->src_x != plane_state->src_x); > WARN_ON_ONCE(plane->state->src_y != plane_state->src_y); > + > + /* > + * Make sure the FBs have been swapped so that cleanups in the > + * new_state performs a cleanup in the old FB. > + */ > + WARN_ON_ONCE(plane_state->fb != old_fb); Looks like this patch should go last in the series if you want to keep things bisectable, otherwise you'll have a WARN_ON() backtrace in the drivers your fixing in the following patches. > } > } > EXPORT_SYMBOL(drm_atomic_helper_async_commit);