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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 BD525C432C3 for ; Mon, 2 Dec 2019 09:52:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7558E2073C for ; Mon, 2 Dec 2019 09:52:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="fKz+uUWs" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727356AbfLBJwE (ORCPT ); Mon, 2 Dec 2019 04:52:04 -0500 Received: from mailgw02.mediatek.com ([210.61.82.184]:40927 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726087AbfLBJwE (ORCPT ); Mon, 2 Dec 2019 04:52:04 -0500 X-UUID: 91d653f0e2f1494d8d57a05a08e14123-20191202 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=A3ws5GGEKRqOLU1wWYe6/80BETyiRzq/ioApqkBTwMQ=; b=fKz+uUWsCOHubUK9lTVtj1V2zlUFFikeTk8Qc8JTkfCREj+t1xy57G2HlCF7fhe1r2GylP62S8/ru+Xc0qTGGhUtCOug1OfMI6nqoHlpbdKWbWq8wSexQVkM6hyZqN5vstNEk1QYWXFNDS0rcOfwlQ4rWgPQBlmRtGscUhseIck=; X-UUID: 91d653f0e2f1494d8d57a05a08e14123-20191202 Received: from mtkcas09.mediatek.inc [(172.21.101.178)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 841850476; Mon, 02 Dec 2019 17:51:55 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Dec 2019 17:51:49 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 2 Dec 2019 17:51:37 +0800 Message-ID: <1575280313.19176.1.camel@mtksdaap41> Subject: Re: [PATCH v1 4/6] drm/mediatek: update cursors by using async atomic update From: CK Hu To: Bibby Hsieh CC: David Airlie , Matthias Brugger , Daniel Vetter , , , Philipp Zabel , YT Shen , Thierry Reding , , , , , Date: Mon, 2 Dec 2019 17:51:53 +0800 In-Reply-To: <20191128024238.9399-5-bibby.hsieh@mediatek.com> References: <20191128024238.9399-1-bibby.hsieh@mediatek.com> <20191128024238.9399-5-bibby.hsieh@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQpIaSwgQmliYnk6DQoNCk9uIFRodSwgMjAxOS0xMS0yOCBhdCAxMDo0MiArMDgwMCwgQmliYnkg SHNpZWggd3JvdGU6DQo+IFN1cHBvcnQgdG8gYXN5bmMgdXBkYXRlcyBvZiBjdXJzb3JzIGJ5IHVz aW5nIHRoZSBuZXcgYXRvbWljDQo+IGludGVyZmFjZSBmb3IgdGhhdC4NCj4gDQo+IFNpZ25lZC1v ZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5oc2llaEBtZWRpYXRlay5jb20+DQo+IC0tLQ0KPiAg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICB8IDM1ICsrKysrKysrKysr KysrKysrDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggIHwgIDIg Kw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgICB8IDIyICsrKysr KysrKystDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgIHwgIDIg Kw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyB8IDUwICsrKysr KysrKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f cGxhbmUuaCB8ICAyICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMN Cj4gaW5kZXggY2I4N2E1MzhiOGZmLi5iMjZiN2E5ODU4N2IgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMNCj4gQEAgLTQyMiw2ICs0MjIsNDEgQEAgaW50IG10 a19kcm1fY3J0Y19wbGFuZV9jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ICt2b2lkIG10a19kcm1f Y3J0Y19jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsDQo+ICsJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQ0KDQpJ IGRvIG5vdCBsaWtlIHRvIHVzZSAnY3Vyc29yJyBmb3IgbmFtaW5nLiBUaGUgYXN5bmMgZnVuY3Rp b24gbWF5IGJlIG5vdA0KanVzdCB1c2VkIGZvciBjdXJzb3IuIFRoZSBuYW1lICdhc3luYycgaXMg bW9yZSBnZW5lcmFsLg0KDQo+ICt7DQo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9 IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7DQo+ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny dGMgPSB0b19tdGtfY3J0YyhjcnRjKTsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBl cl9mdW5jcyAqcGxhbmVfaGVscGVyX2Z1bmNzID0NCj4gKwkJCXBsYW5lLT5oZWxwZXJfcHJpdmF0 ZTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmICghbXRrX2NydGMtPmVuYWJsZWQpDQo+ICsJCXJl dHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2soJnByaXYtPmh3X2xvY2spOw0KDQpQbGVhc2UgbWFr ZSBzdXJlIHdoYXQgdmFyaWFibGUgeW91IHdhbnQgdG8gcHJvdGVjdCwgYW5kIG1ha2UgY3JpdGlj YWwNCnNlY3Rpb24gc21hbGxlci4NCg0KPiArCXBsYW5lX2hlbHBlcl9mdW5jcy0+YXRvbWljX3Vw ZGF0ZShwbGFuZSwgbmV3X3N0YXRlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+bGF5ZXJfbnI7IGkrKykgew0KPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtf Y3J0Yy0+cGxhbmVzW2ldOw0KPiArCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsNCj4gKw0KPiArCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOw0KPiArCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY3Vyc29yX2RpcnR5KSB7DQo+ICsJ CQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOw0KPiArCQkJcGxhbmVfc3RhdGUt PnBlbmRpbmcuY3Vyc29yX3VwZGF0ZSA9IGZhbHNlOw0KPiArCQkJcGxhbmVfc3RhdGUtPnBlbmRp bmcuY3Vyc29yX2RpcnR5ID0gZmFsc2U7DQo+ICsJCX0NCj4gKwl9DQo+ICsJbXRrX2NydGMtPnBl bmRpbmdfcGxhbmVzID0gdHJ1ZTsNCj4gKwlpZiAocHJpdi0+ZGF0YS0+c2hhZG93X3JlZ2lzdGVy KSB7DQo+ICsJCW10a19kaXNwX211dGV4X2FjcXVpcmUobXRrX2NydGMtPm11dGV4KTsNCj4gKwkJ bXRrX2NydGNfZGRwX2NvbmZpZyhjcnRjKTsNCj4gKwkJbXRrX2Rpc3BfbXV0ZXhfcmVsZWFzZSht dGtfY3J0Yy0+bXV0ZXgpOw0KPiArCX0NCj4gKwltdXRleF91bmxvY2soJnByaXYtPmh3X2xvY2sp Ow0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+ICAJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqb2xkX3N0YXRlKQ0KPiAgew0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0 Yy5oDQo+IGluZGV4IDZhZmUxYzE5NTU3YS4uZDU3OTU4ZjBiN2I1IDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgNCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oDQo+IEBAIC0yMSw1ICsyMSw3IEBAIGludCBt dGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LA0KPiAgCQkJdW5z aWduZWQgaW50IHBhdGhfbGVuKTsNCj4gIGludCBtdGtfZHJtX2NydGNfcGxhbmVfY2hlY2soc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwNCj4gIAkJCSAgICAg c3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpOw0KPiArdm9pZCBtdGtfZHJtX2NydGNfY3Vy c29yX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LA0KPiArCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsNCj4gIA0KPiAg I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5jDQo+IGluZGV4IDE2ZTU3NzFkMTgyZS4uMGY3ZmJiNjgyOTVkIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYw0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYw0KPiBAQCAtMzYsOCArMzYsMjcgQEAN Cj4gICNkZWZpbmUgRFJJVkVSX01BSk9SIDENCj4gICNkZWZpbmUgRFJJVkVSX01JTk9SIDANCj4g IA0KPiArc3RhdGljIHZvaWQNCj4gK210a19kcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbF9y cG0oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gb2xkX3N0YXRlLT5kZXY7DQo+ICsJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdmF0ZSA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+ICsNCj4gKwlkcm1fYXRvbWljX2hl bHBlcl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBvbGRfc3RhdGUsIGZhbHNlKTsNCj4gKwltdXRleF9s b2NrKCZwcml2YXRlLT5od19sb2NrKTsNCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9k ZXNldF9kaXNhYmxlcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29t bWl0X21vZGVzZXRfZW5hYmxlcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lcyhkZXYsIG9sZF9zdGF0ZSwNCj4gKwkJCQkJRFJNX1BMQU5FX0NPTU1J VF9BQ1RJVkVfT05MWSk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5od19sb2NrKTsNCg0K WW91IGltcGxlbWVudCBtdGsgdmVyc2lvbiBqdXN0IHdhbnQgdG8gYWRkIG11dGV4IHByb3RlY3Qu IEJ1dCBJIHRoaW5rDQp5b3Ugc2hvdWxkIG5vdCBwcm90ZWN0IGhlcmUgYmVjYXVzZSB3aGF0IHlv dSBzaG91bGQgcHJvdGVjdCBpcyB0aGUNCmNvbW1vbiB2YXJpYWJsZSB0b3VjaGVkIGJ5IHN5bmMg cGxhbmUgYW5kIGFzeW5jIHBsYW5lLiBJbg0KbXRrX2RybV9jcnRjX2N1cnNvcl91cGRhdGUoKSwg eW91IGFscmVhZHkga25vdyB3aGF0IGlzIHRoZSB2YXJpYWJsZSB5b3UNCm5lZWQgdG8gcHJvdGVj dCwgYW5kIHRoZXNlIHZhcmlhYmxlIGlzIHRvdWNoZWQgaW4NCm10a19kcm1fY3J0Y19hdG9taWNf Zmx1c2goKSBvciBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSgpLCBzbyBJIHRoaW5rIHlvdQ0Kc2hv dWxkIGp1c3QgcHJvdGVjdCBpbnNpZGUgdGhlc2UgZnVuY3Rpb24gYW5kIG5lZWQgbm90IHRvIGlt cGxlbWVudCB0aGlzDQpmdW5jdGlvbi4NCg0KUmVnYXJkcywNCkNLDQoNCj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9mYWtlX3ZibGFuayhvbGRfc3RhdGUpOw0KPiArCWRybV9hdG9taWNfaGVscGVyX2Nv bW1pdF9od19kb25lKG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3Jf dmJsYW5rcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9w bGFuZXMoZGV2LCBvbGRfc3RhdGUpOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19oZWxwZXJz ID0gew0KPiAtCS5hdG9taWNfY29tbWl0X3RhaWwgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRf dGFpbF9ycG0sDQo+ICsJLmF0b21pY19jb21taXRfdGFpbCA9IG10a19kcm1fYXRvbWljX2hlbHBl cl9jb21taXRfdGFpbF9ycG0sDQo+ICB9Ow0KPiAgDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0gew0KPiBAQCAt MjYyLDYgKzI4MSw3IEBAIHN0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQ0KPiAgDQo+ICAJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7DQo+ICAJ ZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7DQo+ICsJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+aHdf bG9jayk7DQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaA0KPiBpbmRleCA5ZjRjZTYwMTc0ZjYuLmM2MWFkYWE5MjYyNiAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgNCj4gQEAgLTQ4LDYgKzQ4LDgg QEAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7DQo+ICAJY29uc3Qgc3RydWN0IG10a19tbXN5c19k cml2ZXJfZGF0YSAqZGF0YTsNCj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9z dGF0ZTsNCj4gIA0KPiArCS8qIGxvY2sgZm9yIGRpc3BsYXkgaHcgYWNjZXNzICovDQo+ICsJc3Ry dWN0IG11dGV4IGh3X2xvY2s7DQo+ICAJYm9vbCBkbWFfcGFybXNfYWxsb2NhdGVkOw0KPiAgfTsN Cj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxh bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMNCj4gaW5kZXgg Y2Q3Yzk3ZWI3ZWU2Li5kN2E4ODUzZDk0YTEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fcGxhbmUuYw0KPiBAQCAtNyw2ICs3LDcgQEANCj4gICNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPg0KPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf dWFwaS5oPg0KPiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+DQo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+DQo+ICANCj4gQEAgLTcwLDYgKzcx LDUwIEBAIHN0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwNCj4gIAlrZnJlZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsNCj4g IH0NCj4gIA0KPiArc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2FzeW5jX2NoZWNrKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLA0KPiArCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7DQo+ICsNCj4g KwlpZiAocGxhbmUgIT0gc3RhdGUtPmNydGMtPmN1cnNvcikNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsNCj4gKwlpZiAoIXBsYW5lLT5zdGF0ZSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsN Cj4gKwlpZiAoIXBsYW5lLT5zdGF0ZS0+ZmIpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICsJaWYgKHN0YXRlLT5zdGF0ZSkNCj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4 aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLA0KPiArCQkJCQkJCQlzdGF0ZS0+Y3J0Yyk7 DQo+ICsJZWxzZSAvKiBTcGVjaWFsIGNhc2UgZm9yIGFzeW5jaHJvbm91cyBjdXJzb3IgdXBkYXRl cy4gKi8NCj4gKwkJY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjLT5zdGF0ZTsNCj4gKw0KPiArCXJl dHVybiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUsIGNy dGNfc3RhdGUsDQo+ICsJCQkJCQkgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsDQo+ICsJ CQkJCQkgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsDQo+ICsJCQkJCQkgICB0cnVlLCB0 cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19hc3luY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+ICsJCQkJCSAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqbmV3X3N0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0 YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7DQo+ICsNCj4gKwlwbGFuZS0+ c3RhdGUtPmNydGNfeCA9IG5ld19zdGF0ZS0+Y3J0Y194Ow0KPiArCXBsYW5lLT5zdGF0ZS0+Y3J0 Y195ID0gbmV3X3N0YXRlLT5jcnRjX3k7DQo+ICsJcGxhbmUtPnN0YXRlLT5jcnRjX2ggPSBuZXdf c3RhdGUtPmNydGNfaDsNCj4gKwlwbGFuZS0+c3RhdGUtPmNydGNfdyA9IG5ld19zdGF0ZS0+Y3J0 Y193Ow0KPiArCXBsYW5lLT5zdGF0ZS0+c3JjX3ggPSBuZXdfc3RhdGUtPnNyY194Ow0KPiArCXBs YW5lLT5zdGF0ZS0+c3JjX3kgPSBuZXdfc3RhdGUtPnNyY195Ow0KPiArCXBsYW5lLT5zdGF0ZS0+ c3JjX2ggPSBuZXdfc3RhdGUtPnNyY19oOw0KPiArCXBsYW5lLT5zdGF0ZS0+c3JjX3cgPSBuZXdf c3RhdGUtPnNyY193Ow0KPiArCXN0YXRlLT5wZW5kaW5nLmN1cnNvcl91cGRhdGUgPSB0cnVlOw0K PiArDQo+ICsJbXRrX2RybV9jcnRjX2N1cnNvcl91cGRhdGUobmV3X3N0YXRlLT5jcnRjLCBwbGFu ZSwgbmV3X3N0YXRlKTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgbXRrX3BsYW5lX2Z1bmNzID0gew0KPiAgCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl91cGRhdGVfcGxhbmUsDQo+ICAJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl9kaXNhYmxlX3BsYW5lLA0KPiBAQCAtMTQxLDYgKzE4Niw5IEBAIHN0YXRpYyB2b2lk IG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLA0KPiAgCXN0 YXRlLT5wZW5kaW5nLnJvdGF0aW9uID0gcGxhbmUtPnN0YXRlLT5yb3RhdGlvbjsNCj4gIAl3bWIo KTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0 ZSAqLw0KPiAgCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsNCj4gKw0KPiArCWlmIChzdGF0 ZS0+cGVuZGluZy5jdXJzb3JfdXBkYXRlKQ0KPiArCQlzdGF0ZS0+cGVuZGluZy5jdXJzb3JfZGly dHkgPSB0cnVlOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rp c2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+IEBAIC0xNTgsNiArMjA2LDggQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJf ZnVuY3MgPSB7DQo+ICAJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssDQo+ ICAJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwNCj4gIAkuYXRvbWlj X2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsDQo+ICsJLmF0b21pY19hc3luY191 cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX2FzeW5jX3VwZGF0ZSwNCj4gKwkuYXRvbWljX2FzeW5j X2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19hc3luY19jaGVjaywNCj4gIH07DQo+ICANCj4gIGlu dCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oDQo+IGlu ZGV4IDc2MDg4NWUzNWIyNy4uMTEzYTEwMzQ0ODA1IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgNCj4gQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IG10a19w bGFuZV9wZW5kaW5nX3N0YXRlIHsNCj4gIAl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7DQo+ICAJdW5z aWduZWQgaW50CQkJcm90YXRpb247DQo+ICAJYm9vbAkJCQlkaXJ0eTsNCj4gKwlib29sCQkJCWN1 cnNvcl9kaXJ0eTsNCj4gKwlib29sCQkJCWN1cnNvcl91cGRhdGU7DQo+ICB9Ow0KPiAgDQo+ICBz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlIHsNCg0KDQo= 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 autolearn=unavailable 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 A74F2C432C0 for ; Mon, 2 Dec 2019 09:52:11 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 71A092073C for ; Mon, 2 Dec 2019 09:52:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="o1LYqxGF"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="fKz+uUWs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 71A092073C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=eS64fnh7GbiFgLEd+0XU65ZrR7e7q7r5PfZW00yfLdQ=; b=o1LYqxGFSAlDiD KjsmIKPH+c/XQZk197oMfCfTaHn/n274z6mRhCurwc8t46LV6RDtezIOZwz6jUvBGrTT5q8zA1SV6 uo+IOYz093F0Fz8zmwHw31GAYxc+iX7fzqChjxB33/DNGpn4qTVodIlWHiUXHEc9r6dPW3lvqstIk NkAvbrQZquVkVAQD6C9Bs+aydvuIN3p2C68LMzuPdH3XglTuqPNYcyN5ftaj3ATunVEjueyPcV1Yc ZnwdnR/u7sVQAfUljSO3nB24GwmIumcWJZ83NwHgaBimb+w+95eyP5nnNHCV8vaKkX6fA6KrW53Aq mtxJ8IWHEDEaEK1m4Xtg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ibiNG-0007WK-VH; Mon, 02 Dec 2019 09:52:10 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ibiN8-0007O4-DC; Mon, 02 Dec 2019 09:52:04 +0000 X-UUID: 1098bc5e2c274cadbb54ebe95c02bdba-20191202 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=A3ws5GGEKRqOLU1wWYe6/80BETyiRzq/ioApqkBTwMQ=; b=fKz+uUWsCOHubUK9lTVtj1V2zlUFFikeTk8Qc8JTkfCREj+t1xy57G2HlCF7fhe1r2GylP62S8/ru+Xc0qTGGhUtCOug1OfMI6nqoHlpbdKWbWq8wSexQVkM6hyZqN5vstNEk1QYWXFNDS0rcOfwlQ4rWgPQBlmRtGscUhseIck=; X-UUID: 1098bc5e2c274cadbb54ebe95c02bdba-20191202 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 85731809; Mon, 02 Dec 2019 01:51:56 -0800 Received: from mtkmbs07n1.mediatek.inc (172.21.101.16) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Dec 2019 01:52:06 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Dec 2019 17:51:49 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 2 Dec 2019 17:51:37 +0800 Message-ID: <1575280313.19176.1.camel@mtksdaap41> Subject: Re: [PATCH v1 4/6] drm/mediatek: update cursors by using async atomic update From: CK Hu To: Bibby Hsieh Date: Mon, 2 Dec 2019 17:51:53 +0800 In-Reply-To: <20191128024238.9399-5-bibby.hsieh@mediatek.com> References: <20191128024238.9399-1-bibby.hsieh@mediatek.com> <20191128024238.9399-5-bibby.hsieh@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191202_015202_465123_2559AD79 X-CRM114-Status: GOOD ( 18.02 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: drinkcat@chromium.org, srv_heupstream@mediatek.com, David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tfiga@chromium.org, Thierry Reding , linux-mediatek@lists.infradead.org, Philipp Zabel , Matthias Brugger , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi, Bibby: On Thu, 2019-11-28 at 10:42 +0800, Bibby Hsieh wrote: > Support to async updates of cursors by using the new atomic > interface for that. > > Signed-off-by: Bibby Hsieh > --- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 35 +++++++++++++++++ > drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 2 + > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 22 ++++++++++- > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 + > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 50 ++++++++++++++++++++++++ > drivers/gpu/drm/mediatek/mtk_drm_plane.h | 2 + > 6 files changed, 112 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index cb87a538b8ff..b26b7a98587b 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -422,6 +422,41 @@ int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, > return 0; > } > > +void mtk_drm_crtc_cursor_update(struct drm_crtc *crtc, struct drm_plane *plane, > + struct drm_plane_state *new_state) I do not like to use 'cursor' for naming. The async function may be not just used for cursor. The name 'async' is more general. > +{ > + struct mtk_drm_private *priv = crtc->dev->dev_private; > + struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); > + const struct drm_plane_helper_funcs *plane_helper_funcs = > + plane->helper_private; > + int i; > + > + if (!mtk_crtc->enabled) > + return; > + > + mutex_lock(&priv->hw_lock); Please make sure what variable you want to protect, and make critical section smaller. > + plane_helper_funcs->atomic_update(plane, new_state); > + > + for (i = 0; i < mtk_crtc->layer_nr; i++) { > + struct drm_plane *plane = &mtk_crtc->planes[i]; > + struct mtk_plane_state *plane_state; > + > + plane_state = to_mtk_plane_state(plane->state); > + if (plane_state->pending.cursor_dirty) { > + plane_state->pending.config = true; > + plane_state->pending.cursor_update = false; > + plane_state->pending.cursor_dirty = false; > + } > + } > + mtk_crtc->pending_planes = true; > + if (priv->data->shadow_register) { > + mtk_disp_mutex_acquire(mtk_crtc->mutex); > + mtk_crtc_ddp_config(crtc); > + mtk_disp_mutex_release(mtk_crtc->mutex); > + } > + mutex_unlock(&priv->hw_lock); > +} > + > static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc, > struct drm_crtc_state *old_state) > { > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > index 6afe1c19557a..d57958f0b7b5 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > @@ -21,5 +21,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, > unsigned int path_len); > int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, > struct mtk_plane_state *state); > +void mtk_drm_crtc_cursor_update(struct drm_crtc *crtc, struct drm_plane *plane, > + struct drm_plane_state *plane_state); > > #endif /* MTK_DRM_CRTC_H */ > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > index 16e5771d182e..0f7fbb68295d 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > @@ -36,8 +36,27 @@ > #define DRIVER_MAJOR 1 > #define DRIVER_MINOR 0 > > +static void > +mtk_drm_atomic_helper_commit_tail_rpm(struct drm_atomic_state *old_state) > +{ > + struct drm_device *dev = old_state->dev; > + struct mtk_drm_private *private = dev->dev_private; > + > + drm_atomic_helper_wait_for_fences(dev, old_state, false); > + mutex_lock(&private->hw_lock); > + drm_atomic_helper_commit_modeset_disables(dev, old_state); > + drm_atomic_helper_commit_modeset_enables(dev, old_state); > + drm_atomic_helper_commit_planes(dev, old_state, > + DRM_PLANE_COMMIT_ACTIVE_ONLY); > + mutex_unlock(&private->hw_lock); You implement mtk version just want to add mutex protect. But I think you should not protect here because what you should protect is the common variable touched by sync plane and async plane. In mtk_drm_crtc_cursor_update(), you already know what is the variable you need to protect, and these variable is touched in mtk_drm_crtc_atomic_flush() or mtk_plane_atomic_update(), so I think you should just protect inside these function and need not to implement this function. Regards, CK > + drm_atomic_helper_fake_vblank(old_state); > + drm_atomic_helper_commit_hw_done(old_state); > + drm_atomic_helper_wait_for_vblanks(dev, old_state); > + drm_atomic_helper_cleanup_planes(dev, old_state); > +} > + > static const struct drm_mode_config_helper_funcs mtk_drm_mode_config_helpers = { > - .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, > + .atomic_commit_tail = mtk_drm_atomic_helper_commit_tail_rpm, > }; > > static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = { > @@ -262,6 +281,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) > > drm_kms_helper_poll_init(drm); > drm_mode_config_reset(drm); > + mutex_init(&private->hw_lock); > > return 0; > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > index 9f4ce60174f6..c61adaa92626 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > @@ -48,6 +48,8 @@ struct mtk_drm_private { > const struct mtk_mmsys_driver_data *data; > struct drm_atomic_state *suspend_state; > > + /* lock for display hw access */ > + struct mutex hw_lock; > bool dma_parms_allocated; > }; > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > index cd7c97eb7ee6..d7a8853d94a1 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -70,6 +71,50 @@ static void mtk_drm_plane_destroy_state(struct drm_plane *plane, > kfree(to_mtk_plane_state(state)); > } > > +static int mtk_plane_atomic_async_check(struct drm_plane *plane, > + struct drm_plane_state *state) > +{ > + struct drm_crtc_state *crtc_state; > + > + if (plane != state->crtc->cursor) > + return -EINVAL; > + > + if (!plane->state) > + return -EINVAL; > + > + if (!plane->state->fb) > + return -EINVAL; > + > + if (state->state) > + crtc_state = drm_atomic_get_existing_crtc_state(state->state, > + state->crtc); > + else /* Special case for asynchronous cursor updates. */ > + crtc_state = state->crtc->state; > + > + return drm_atomic_helper_check_plane_state(plane->state, crtc_state, > + DRM_PLANE_HELPER_NO_SCALING, > + DRM_PLANE_HELPER_NO_SCALING, > + true, true); > +} > + > +static void mtk_plane_atomic_async_update(struct drm_plane *plane, > + struct drm_plane_state *new_state) > +{ > + struct mtk_plane_state *state = to_mtk_plane_state(plane->state); > + > + plane->state->crtc_x = new_state->crtc_x; > + plane->state->crtc_y = new_state->crtc_y; > + plane->state->crtc_h = new_state->crtc_h; > + plane->state->crtc_w = new_state->crtc_w; > + plane->state->src_x = new_state->src_x; > + plane->state->src_y = new_state->src_y; > + plane->state->src_h = new_state->src_h; > + plane->state->src_w = new_state->src_w; > + state->pending.cursor_update = true; > + > + mtk_drm_crtc_cursor_update(new_state->crtc, plane, new_state); > +} > + > static const struct drm_plane_funcs mtk_plane_funcs = { > .update_plane = drm_atomic_helper_update_plane, > .disable_plane = drm_atomic_helper_disable_plane, > @@ -141,6 +186,9 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, > state->pending.rotation = plane->state->rotation; > wmb(); /* Make sure the above parameters are set before update */ > state->pending.dirty = true; > + > + if (state->pending.cursor_update) > + state->pending.cursor_dirty = true; > } > > static void mtk_plane_atomic_disable(struct drm_plane *plane, > @@ -158,6 +206,8 @@ static const struct drm_plane_helper_funcs mtk_plane_helper_funcs = { > .atomic_check = mtk_plane_atomic_check, > .atomic_update = mtk_plane_atomic_update, > .atomic_disable = mtk_plane_atomic_disable, > + .atomic_async_update = mtk_plane_atomic_async_update, > + .atomic_async_check = mtk_plane_atomic_async_check, > }; > > int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane, > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.h b/drivers/gpu/drm/mediatek/mtk_drm_plane.h > index 760885e35b27..113a10344805 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.h > @@ -22,6 +22,8 @@ struct mtk_plane_pending_state { > unsigned int height; > unsigned int rotation; > bool dirty; > + bool cursor_dirty; > + bool cursor_update; > }; > > struct mtk_plane_state { _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek 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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_2 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 C1707C432C0 for ; Mon, 2 Dec 2019 09:52:06 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9376620833 for ; Mon, 2 Dec 2019 09:52:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="jQsS1WgG"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="fKz+uUWs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9376620833 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=T3XJru3i3U1oOZz9P8IOzDoi29TQJADmFbXsVaHTe38=; b=jQsS1WgG4Sgo0K x1hUxqSVdxxqr3D6FE+xcsdQy9+Tpms36zjSzu0yWtfmBwEzlI3hQNS/ENMY01CSNQi8NbCWnip3V AUnetoS4+JeHFq2C4WHhBcld21boUSZGzJaT9fFOIvK0ST9pxa2anIZ+O14zOr0vli0uIUhaNdRtt 5VBaN7qJG5nxNE/Rri/tXti9N/Hjp53y5zWGy7HpxIFDIVuSJGyM2IMggyqX9nAmF7DTcACKkzsr2 JOjK5IC8Q+xxDJSi++eFHsZqy+mjiEoO+uCNxUzd2tAJxLEPMhQCsklSOK4yu24fhIpDdjBpb8OOr Hw5gRcz7RK1mKThqAxbQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ibiNB-0007Ok-QJ; Mon, 02 Dec 2019 09:52:05 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ibiN8-0007O4-DC; Mon, 02 Dec 2019 09:52:04 +0000 X-UUID: 1098bc5e2c274cadbb54ebe95c02bdba-20191202 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=A3ws5GGEKRqOLU1wWYe6/80BETyiRzq/ioApqkBTwMQ=; b=fKz+uUWsCOHubUK9lTVtj1V2zlUFFikeTk8Qc8JTkfCREj+t1xy57G2HlCF7fhe1r2GylP62S8/ru+Xc0qTGGhUtCOug1OfMI6nqoHlpbdKWbWq8wSexQVkM6hyZqN5vstNEk1QYWXFNDS0rcOfwlQ4rWgPQBlmRtGscUhseIck=; X-UUID: 1098bc5e2c274cadbb54ebe95c02bdba-20191202 Received: from mtkcas67.mediatek.inc [(172.29.193.45)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 85731809; Mon, 02 Dec 2019 01:51:56 -0800 Received: from mtkmbs07n1.mediatek.inc (172.21.101.16) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Dec 2019 01:52:06 -0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs07n1.mediatek.inc (172.21.101.16) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Mon, 2 Dec 2019 17:51:49 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Mon, 2 Dec 2019 17:51:37 +0800 Message-ID: <1575280313.19176.1.camel@mtksdaap41> Subject: Re: [PATCH v1 4/6] drm/mediatek: update cursors by using async atomic update From: CK Hu To: Bibby Hsieh Date: Mon, 2 Dec 2019 17:51:53 +0800 In-Reply-To: <20191128024238.9399-5-bibby.hsieh@mediatek.com> References: <20191128024238.9399-1-bibby.hsieh@mediatek.com> <20191128024238.9399-5-bibby.hsieh@mediatek.com> X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191202_015202_465123_2559AD79 X-CRM114-Status: GOOD ( 18.02 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: drinkcat@chromium.org, srv_heupstream@mediatek.com, David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tfiga@chromium.org, YT Shen , Thierry Reding , linux-mediatek@lists.infradead.org, Philipp Zabel , Matthias Brugger , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, Bibby: On Thu, 2019-11-28 at 10:42 +0800, Bibby Hsieh wrote: > Support to async updates of cursors by using the new atomic > interface for that. > > Signed-off-by: Bibby Hsieh > --- > drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 35 +++++++++++++++++ > drivers/gpu/drm/mediatek/mtk_drm_crtc.h | 2 + > drivers/gpu/drm/mediatek/mtk_drm_drv.c | 22 ++++++++++- > drivers/gpu/drm/mediatek/mtk_drm_drv.h | 2 + > drivers/gpu/drm/mediatek/mtk_drm_plane.c | 50 ++++++++++++++++++++++++ > drivers/gpu/drm/mediatek/mtk_drm_plane.h | 2 + > 6 files changed, 112 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > index cb87a538b8ff..b26b7a98587b 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c > @@ -422,6 +422,41 @@ int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, > return 0; > } > > +void mtk_drm_crtc_cursor_update(struct drm_crtc *crtc, struct drm_plane *plane, > + struct drm_plane_state *new_state) I do not like to use 'cursor' for naming. The async function may be not just used for cursor. The name 'async' is more general. > +{ > + struct mtk_drm_private *priv = crtc->dev->dev_private; > + struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); > + const struct drm_plane_helper_funcs *plane_helper_funcs = > + plane->helper_private; > + int i; > + > + if (!mtk_crtc->enabled) > + return; > + > + mutex_lock(&priv->hw_lock); Please make sure what variable you want to protect, and make critical section smaller. > + plane_helper_funcs->atomic_update(plane, new_state); > + > + for (i = 0; i < mtk_crtc->layer_nr; i++) { > + struct drm_plane *plane = &mtk_crtc->planes[i]; > + struct mtk_plane_state *plane_state; > + > + plane_state = to_mtk_plane_state(plane->state); > + if (plane_state->pending.cursor_dirty) { > + plane_state->pending.config = true; > + plane_state->pending.cursor_update = false; > + plane_state->pending.cursor_dirty = false; > + } > + } > + mtk_crtc->pending_planes = true; > + if (priv->data->shadow_register) { > + mtk_disp_mutex_acquire(mtk_crtc->mutex); > + mtk_crtc_ddp_config(crtc); > + mtk_disp_mutex_release(mtk_crtc->mutex); > + } > + mutex_unlock(&priv->hw_lock); > +} > + > static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc, > struct drm_crtc_state *old_state) > { > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > index 6afe1c19557a..d57958f0b7b5 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.h > @@ -21,5 +21,7 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, > unsigned int path_len); > int mtk_drm_crtc_plane_check(struct drm_crtc *crtc, struct drm_plane *plane, > struct mtk_plane_state *state); > +void mtk_drm_crtc_cursor_update(struct drm_crtc *crtc, struct drm_plane *plane, > + struct drm_plane_state *plane_state); > > #endif /* MTK_DRM_CRTC_H */ > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > index 16e5771d182e..0f7fbb68295d 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c > @@ -36,8 +36,27 @@ > #define DRIVER_MAJOR 1 > #define DRIVER_MINOR 0 > > +static void > +mtk_drm_atomic_helper_commit_tail_rpm(struct drm_atomic_state *old_state) > +{ > + struct drm_device *dev = old_state->dev; > + struct mtk_drm_private *private = dev->dev_private; > + > + drm_atomic_helper_wait_for_fences(dev, old_state, false); > + mutex_lock(&private->hw_lock); > + drm_atomic_helper_commit_modeset_disables(dev, old_state); > + drm_atomic_helper_commit_modeset_enables(dev, old_state); > + drm_atomic_helper_commit_planes(dev, old_state, > + DRM_PLANE_COMMIT_ACTIVE_ONLY); > + mutex_unlock(&private->hw_lock); You implement mtk version just want to add mutex protect. But I think you should not protect here because what you should protect is the common variable touched by sync plane and async plane. In mtk_drm_crtc_cursor_update(), you already know what is the variable you need to protect, and these variable is touched in mtk_drm_crtc_atomic_flush() or mtk_plane_atomic_update(), so I think you should just protect inside these function and need not to implement this function. Regards, CK > + drm_atomic_helper_fake_vblank(old_state); > + drm_atomic_helper_commit_hw_done(old_state); > + drm_atomic_helper_wait_for_vblanks(dev, old_state); > + drm_atomic_helper_cleanup_planes(dev, old_state); > +} > + > static const struct drm_mode_config_helper_funcs mtk_drm_mode_config_helpers = { > - .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm, > + .atomic_commit_tail = mtk_drm_atomic_helper_commit_tail_rpm, > }; > > static const struct drm_mode_config_funcs mtk_drm_mode_config_funcs = { > @@ -262,6 +281,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) > > drm_kms_helper_poll_init(drm); > drm_mode_config_reset(drm); > + mutex_init(&private->hw_lock); > > return 0; > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.h b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > index 9f4ce60174f6..c61adaa92626 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.h > @@ -48,6 +48,8 @@ struct mtk_drm_private { > const struct mtk_mmsys_driver_data *data; > struct drm_atomic_state *suspend_state; > > + /* lock for display hw access */ > + struct mutex hw_lock; > bool dma_parms_allocated; > }; > > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.c b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > index cd7c97eb7ee6..d7a8853d94a1 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.c > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.c > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -70,6 +71,50 @@ static void mtk_drm_plane_destroy_state(struct drm_plane *plane, > kfree(to_mtk_plane_state(state)); > } > > +static int mtk_plane_atomic_async_check(struct drm_plane *plane, > + struct drm_plane_state *state) > +{ > + struct drm_crtc_state *crtc_state; > + > + if (plane != state->crtc->cursor) > + return -EINVAL; > + > + if (!plane->state) > + return -EINVAL; > + > + if (!plane->state->fb) > + return -EINVAL; > + > + if (state->state) > + crtc_state = drm_atomic_get_existing_crtc_state(state->state, > + state->crtc); > + else /* Special case for asynchronous cursor updates. */ > + crtc_state = state->crtc->state; > + > + return drm_atomic_helper_check_plane_state(plane->state, crtc_state, > + DRM_PLANE_HELPER_NO_SCALING, > + DRM_PLANE_HELPER_NO_SCALING, > + true, true); > +} > + > +static void mtk_plane_atomic_async_update(struct drm_plane *plane, > + struct drm_plane_state *new_state) > +{ > + struct mtk_plane_state *state = to_mtk_plane_state(plane->state); > + > + plane->state->crtc_x = new_state->crtc_x; > + plane->state->crtc_y = new_state->crtc_y; > + plane->state->crtc_h = new_state->crtc_h; > + plane->state->crtc_w = new_state->crtc_w; > + plane->state->src_x = new_state->src_x; > + plane->state->src_y = new_state->src_y; > + plane->state->src_h = new_state->src_h; > + plane->state->src_w = new_state->src_w; > + state->pending.cursor_update = true; > + > + mtk_drm_crtc_cursor_update(new_state->crtc, plane, new_state); > +} > + > static const struct drm_plane_funcs mtk_plane_funcs = { > .update_plane = drm_atomic_helper_update_plane, > .disable_plane = drm_atomic_helper_disable_plane, > @@ -141,6 +186,9 @@ static void mtk_plane_atomic_update(struct drm_plane *plane, > state->pending.rotation = plane->state->rotation; > wmb(); /* Make sure the above parameters are set before update */ > state->pending.dirty = true; > + > + if (state->pending.cursor_update) > + state->pending.cursor_dirty = true; > } > > static void mtk_plane_atomic_disable(struct drm_plane *plane, > @@ -158,6 +206,8 @@ static const struct drm_plane_helper_funcs mtk_plane_helper_funcs = { > .atomic_check = mtk_plane_atomic_check, > .atomic_update = mtk_plane_atomic_update, > .atomic_disable = mtk_plane_atomic_disable, > + .atomic_async_update = mtk_plane_atomic_async_update, > + .atomic_async_check = mtk_plane_atomic_async_check, > }; > > int mtk_plane_init(struct drm_device *dev, struct drm_plane *plane, > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_plane.h b/drivers/gpu/drm/mediatek/mtk_drm_plane.h > index 760885e35b27..113a10344805 100644 > --- a/drivers/gpu/drm/mediatek/mtk_drm_plane.h > +++ b/drivers/gpu/drm/mediatek/mtk_drm_plane.h > @@ -22,6 +22,8 @@ struct mtk_plane_pending_state { > unsigned int height; > unsigned int rotation; > bool dirty; > + bool cursor_dirty; > + bool cursor_update; > }; > > struct mtk_plane_state { _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v1 4/6] drm/mediatek: update cursors by using async atomic update Date: Mon, 2 Dec 2019 17:51:53 +0800 Message-ID: <1575280313.19176.1.camel@mtksdaap41> References: <20191128024238.9399-1-bibby.hsieh@mediatek.com> <20191128024238.9399-5-bibby.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailgw02.mediatek.com (unknown [210.61.82.184]) by gabe.freedesktop.org (Postfix) with ESMTP id 74BE389A60 for ; Mon, 2 Dec 2019 09:51:59 +0000 (UTC) In-Reply-To: <20191128024238.9399-5-bibby.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bibby Hsieh Cc: drinkcat@chromium.org, srv_heupstream@mediatek.com, David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tfiga@chromium.org, Thierry Reding , linux-mediatek@lists.infradead.org, Matthias Brugger , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org DQpIaSwgQmliYnk6DQoNCk9uIFRodSwgMjAxOS0xMS0yOCBhdCAxMDo0MiArMDgwMCwgQmliYnkg SHNpZWggd3JvdGU6DQo+IFN1cHBvcnQgdG8gYXN5bmMgdXBkYXRlcyBvZiBjdXJzb3JzIGJ5IHVz aW5nIHRoZSBuZXcgYXRvbWljDQo+IGludGVyZmFjZSBmb3IgdGhhdC4NCj4gDQo+IFNpZ25lZC1v ZmYtYnk6IEJpYmJ5IEhzaWVoIDxiaWJieS5oc2llaEBtZWRpYXRlay5jb20+DQo+IC0tLQ0KPiAg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5jICB8IDM1ICsrKysrKysrKysr KysrKysrDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmggIHwgIDIg Kw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgICB8IDIyICsrKysr KysrKystDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCAgIHwgIDIg Kw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYyB8IDUwICsrKysr KysrKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1f cGxhbmUuaCB8ICAyICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb24oLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMN Cj4gaW5kZXggY2I4N2E1MzhiOGZmLi5iMjZiN2E5ODU4N2IgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMNCj4gQEAgLTQyMiw2ICs0MjIsNDEgQEAgaW50IG10 a19kcm1fY3J0Y19wbGFuZV9jaGVjayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ICt2b2lkIG10a19kcm1f Y3J0Y19jdXJzb3JfdXBkYXRlKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsDQo+ICsJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbmV3X3N0YXRlKQ0KDQpJ IGRvIG5vdCBsaWtlIHRvIHVzZSAnY3Vyc29yJyBmb3IgbmFtaW5nLiBUaGUgYXN5bmMgZnVuY3Rp b24gbWF5IGJlIG5vdA0KanVzdCB1c2VkIGZvciBjdXJzb3IuIFRoZSBuYW1lICdhc3luYycgaXMg bW9yZSBnZW5lcmFsLg0KDQo+ICt7DQo+ICsJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJpdiA9 IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7DQo+ICsJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny dGMgPSB0b19tdGtfY3J0YyhjcnRjKTsNCj4gKwljb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBl cl9mdW5jcyAqcGxhbmVfaGVscGVyX2Z1bmNzID0NCj4gKwkJCXBsYW5lLT5oZWxwZXJfcHJpdmF0 ZTsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWlmICghbXRrX2NydGMtPmVuYWJsZWQpDQo+ICsJCXJl dHVybjsNCj4gKw0KPiArCW11dGV4X2xvY2soJnByaXYtPmh3X2xvY2spOw0KDQpQbGVhc2UgbWFr ZSBzdXJlIHdoYXQgdmFyaWFibGUgeW91IHdhbnQgdG8gcHJvdGVjdCwgYW5kIG1ha2UgY3JpdGlj YWwNCnNlY3Rpb24gc21hbGxlci4NCg0KPiArCXBsYW5lX2hlbHBlcl9mdW5jcy0+YXRvbWljX3Vw ZGF0ZShwbGFuZSwgbmV3X3N0YXRlKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0 Yy0+bGF5ZXJfbnI7IGkrKykgew0KPiArCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9ICZtdGtf Y3J0Yy0+cGxhbmVzW2ldOw0KPiArCQlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsNCj4gKw0KPiArCQlwbGFuZV9zdGF0ZSA9IHRvX210a19wbGFuZV9zdGF0ZShwbGFuZS0+c3Rh dGUpOw0KPiArCQlpZiAocGxhbmVfc3RhdGUtPnBlbmRpbmcuY3Vyc29yX2RpcnR5KSB7DQo+ICsJ CQlwbGFuZV9zdGF0ZS0+cGVuZGluZy5jb25maWcgPSB0cnVlOw0KPiArCQkJcGxhbmVfc3RhdGUt PnBlbmRpbmcuY3Vyc29yX3VwZGF0ZSA9IGZhbHNlOw0KPiArCQkJcGxhbmVfc3RhdGUtPnBlbmRp bmcuY3Vyc29yX2RpcnR5ID0gZmFsc2U7DQo+ICsJCX0NCj4gKwl9DQo+ICsJbXRrX2NydGMtPnBl bmRpbmdfcGxhbmVzID0gdHJ1ZTsNCj4gKwlpZiAocHJpdi0+ZGF0YS0+c2hhZG93X3JlZ2lzdGVy KSB7DQo+ICsJCW10a19kaXNwX211dGV4X2FjcXVpcmUobXRrX2NydGMtPm11dGV4KTsNCj4gKwkJ bXRrX2NydGNfZGRwX2NvbmZpZyhjcnRjKTsNCj4gKwkJbXRrX2Rpc3BfbXV0ZXhfcmVsZWFzZSht dGtfY3J0Yy0+bXV0ZXgpOw0KPiArCX0NCj4gKwltdXRleF91bmxvY2soJnByaXYtPmh3X2xvY2sp Ow0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfYXRvbWljX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMsDQo+ICAJCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqb2xkX3N0YXRlKQ0KPiAgew0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fY3J0Yy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0 Yy5oDQo+IGluZGV4IDZhZmUxYzE5NTU3YS4uZDU3OTU4ZjBiN2I1IDEwMDY0NA0KPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmgNCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fY3J0Yy5oDQo+IEBAIC0yMSw1ICsyMSw3IEBAIGludCBt dGtfZHJtX2NydGNfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2LA0KPiAgCQkJdW5z aWduZWQgaW50IHBhdGhfbGVuKTsNCj4gIGludCBtdGtfZHJtX2NydGNfcGxhbmVfY2hlY2soc3Ry dWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwNCj4gIAkJCSAgICAg c3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3RhdGUpOw0KPiArdm9pZCBtdGtfZHJtX2NydGNfY3Vy c29yX3VwZGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5l LA0KPiArCQkJCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlKTsNCj4gIA0KPiAg I2VuZGlmIC8qIE1US19EUk1fQ1JUQ19IICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5jDQo+IGluZGV4IDE2ZTU3NzFkMTgyZS4uMGY3ZmJiNjgyOTVkIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYw0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYw0KPiBAQCAtMzYsOCArMzYsMjcgQEAN Cj4gICNkZWZpbmUgRFJJVkVSX01BSk9SIDENCj4gICNkZWZpbmUgRFJJVkVSX01JTk9SIDANCj4g IA0KPiArc3RhdGljIHZvaWQNCj4gK210a19kcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbF9y cG0oc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2ID0gb2xkX3N0YXRlLT5kZXY7DQo+ICsJc3RydWN0IG10a19kcm1fcHJp dmF0ZSAqcHJpdmF0ZSA9IGRldi0+ZGV2X3ByaXZhdGU7DQo+ICsNCj4gKwlkcm1fYXRvbWljX2hl bHBlcl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBvbGRfc3RhdGUsIGZhbHNlKTsNCj4gKwltdXRleF9s b2NrKCZwcml2YXRlLT5od19sb2NrKTsNCj4gKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9k ZXNldF9kaXNhYmxlcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29t bWl0X21vZGVzZXRfZW5hYmxlcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxw ZXJfY29tbWl0X3BsYW5lcyhkZXYsIG9sZF9zdGF0ZSwNCj4gKwkJCQkJRFJNX1BMQU5FX0NPTU1J VF9BQ1RJVkVfT05MWSk7DQo+ICsJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5od19sb2NrKTsNCg0K WW91IGltcGxlbWVudCBtdGsgdmVyc2lvbiBqdXN0IHdhbnQgdG8gYWRkIG11dGV4IHByb3RlY3Qu IEJ1dCBJIHRoaW5rDQp5b3Ugc2hvdWxkIG5vdCBwcm90ZWN0IGhlcmUgYmVjYXVzZSB3aGF0IHlv dSBzaG91bGQgcHJvdGVjdCBpcyB0aGUNCmNvbW1vbiB2YXJpYWJsZSB0b3VjaGVkIGJ5IHN5bmMg cGxhbmUgYW5kIGFzeW5jIHBsYW5lLiBJbg0KbXRrX2RybV9jcnRjX2N1cnNvcl91cGRhdGUoKSwg eW91IGFscmVhZHkga25vdyB3aGF0IGlzIHRoZSB2YXJpYWJsZSB5b3UNCm5lZWQgdG8gcHJvdGVj dCwgYW5kIHRoZXNlIHZhcmlhYmxlIGlzIHRvdWNoZWQgaW4NCm10a19kcm1fY3J0Y19hdG9taWNf Zmx1c2goKSBvciBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSgpLCBzbyBJIHRoaW5rIHlvdQ0Kc2hv dWxkIGp1c3QgcHJvdGVjdCBpbnNpZGUgdGhlc2UgZnVuY3Rpb24gYW5kIG5lZWQgbm90IHRvIGlt cGxlbWVudCB0aGlzDQpmdW5jdGlvbi4NCg0KUmVnYXJkcywNCkNLDQoNCj4gKwlkcm1fYXRvbWlj X2hlbHBlcl9mYWtlX3ZibGFuayhvbGRfc3RhdGUpOw0KPiArCWRybV9hdG9taWNfaGVscGVyX2Nv bW1pdF9od19kb25lKG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3Jf dmJsYW5rcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ICsJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9w bGFuZXMoZGV2LCBvbGRfc3RhdGUpOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3MgbXRrX2RybV9tb2RlX2NvbmZpZ19oZWxwZXJz ID0gew0KPiAtCS5hdG9taWNfY29tbWl0X3RhaWwgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRf dGFpbF9ycG0sDQo+ICsJLmF0b21pY19jb21taXRfdGFpbCA9IG10a19kcm1fYXRvbWljX2hlbHBl cl9jb21taXRfdGFpbF9ycG0sDQo+ICB9Ow0KPiAgDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19mdW5jcyBtdGtfZHJtX21vZGVfY29uZmlnX2Z1bmNzID0gew0KPiBAQCAt MjYyLDYgKzI4MSw3IEBAIHN0YXRpYyBpbnQgbXRrX2RybV9rbXNfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtKQ0KPiAgDQo+ICAJZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRybSk7DQo+ICAJ ZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRybSk7DQo+ICsJbXV0ZXhfaW5pdCgmcHJpdmF0ZS0+aHdf bG9jayk7DQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9kcnYuaA0KPiBpbmRleCA5ZjRjZTYwMTc0ZjYuLmM2MWFkYWE5MjYyNiAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgNCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmgNCj4gQEAgLTQ4LDYgKzQ4LDgg QEAgc3RydWN0IG10a19kcm1fcHJpdmF0ZSB7DQo+ICAJY29uc3Qgc3RydWN0IG10a19tbXN5c19k cml2ZXJfZGF0YSAqZGF0YTsNCj4gIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9z dGF0ZTsNCj4gIA0KPiArCS8qIGxvY2sgZm9yIGRpc3BsYXkgaHcgYWNjZXNzICovDQo+ICsJc3Ry dWN0IG11dGV4IGh3X2xvY2s7DQo+ICAJYm9vbCBkbWFfcGFybXNfYWxsb2NhdGVkOw0KPiAgfTsN Cj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxh bmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMNCj4gaW5kZXgg Y2Q3Yzk3ZWI3ZWU2Li5kN2E4ODUzZDk0YTEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19kcm1fcGxhbmUuYw0KPiBAQCAtNyw2ICs3LDcgQEANCj4gICNpbmNsdWRlIDxkcm0v ZHJtX2F0b21pYy5oPg0KPiAgI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiAg I2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNf dWFwaS5oPg0KPiAgI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+DQo+ICAjaW5jbHVk ZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+DQo+ICANCj4gQEAgLTcwLDYgKzcx LDUwIEBAIHN0YXRpYyB2b2lkIG10a19kcm1fcGxhbmVfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwNCj4gIAlrZnJlZSh0b19tdGtfcGxhbmVfc3RhdGUoc3RhdGUpKTsNCj4g IH0NCj4gIA0KPiArc3RhdGljIGludCBtdGtfcGxhbmVfYXRvbWljX2FzeW5jX2NoZWNrKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLA0KPiArCQkJCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0 ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7DQo+ICsNCj4g KwlpZiAocGxhbmUgIT0gc3RhdGUtPmNydGMtPmN1cnNvcikNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsNCj4gKwlpZiAoIXBsYW5lLT5zdGF0ZSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsN Cj4gKwlpZiAoIXBsYW5lLT5zdGF0ZS0+ZmIpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ ICsJaWYgKHN0YXRlLT5zdGF0ZSkNCj4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4 aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLA0KPiArCQkJCQkJCQlzdGF0ZS0+Y3J0Yyk7 DQo+ICsJZWxzZSAvKiBTcGVjaWFsIGNhc2UgZm9yIGFzeW5jaHJvbm91cyBjdXJzb3IgdXBkYXRl cy4gKi8NCj4gKwkJY3J0Y19zdGF0ZSA9IHN0YXRlLT5jcnRjLT5zdGF0ZTsNCj4gKw0KPiArCXJl dHVybiBkcm1fYXRvbWljX2hlbHBlcl9jaGVja19wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUsIGNy dGNfc3RhdGUsDQo+ICsJCQkJCQkgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsDQo+ICsJ CQkJCQkgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsDQo+ICsJCQkJCQkgICB0cnVlLCB0 cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19hc3luY191 cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+ICsJCQkJCSAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqbmV3X3N0YXRlKQ0KPiArew0KPiArCXN0cnVjdCBtdGtfcGxhbmVfc3RhdGUgKnN0 YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7DQo+ICsNCj4gKwlwbGFuZS0+ c3RhdGUtPmNydGNfeCA9IG5ld19zdGF0ZS0+Y3J0Y194Ow0KPiArCXBsYW5lLT5zdGF0ZS0+Y3J0 Y195ID0gbmV3X3N0YXRlLT5jcnRjX3k7DQo+ICsJcGxhbmUtPnN0YXRlLT5jcnRjX2ggPSBuZXdf c3RhdGUtPmNydGNfaDsNCj4gKwlwbGFuZS0+c3RhdGUtPmNydGNfdyA9IG5ld19zdGF0ZS0+Y3J0 Y193Ow0KPiArCXBsYW5lLT5zdGF0ZS0+c3JjX3ggPSBuZXdfc3RhdGUtPnNyY194Ow0KPiArCXBs YW5lLT5zdGF0ZS0+c3JjX3kgPSBuZXdfc3RhdGUtPnNyY195Ow0KPiArCXBsYW5lLT5zdGF0ZS0+ c3JjX2ggPSBuZXdfc3RhdGUtPnNyY19oOw0KPiArCXBsYW5lLT5zdGF0ZS0+c3JjX3cgPSBuZXdf c3RhdGUtPnNyY193Ow0KPiArCXN0YXRlLT5wZW5kaW5nLmN1cnNvcl91cGRhdGUgPSB0cnVlOw0K PiArDQo+ICsJbXRrX2RybV9jcnRjX2N1cnNvcl91cGRhdGUobmV3X3N0YXRlLT5jcnRjLCBwbGFu ZSwgbmV3X3N0YXRlKTsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfZnVuY3MgbXRrX3BsYW5lX2Z1bmNzID0gew0KPiAgCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRv bWljX2hlbHBlcl91cGRhdGVfcGxhbmUsDQo+ICAJLmRpc2FibGVfcGxhbmUgPSBkcm1fYXRvbWlj X2hlbHBlcl9kaXNhYmxlX3BsYW5lLA0KPiBAQCAtMTQxLDYgKzE4Niw5IEBAIHN0YXRpYyB2b2lk IG10a19wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLA0KPiAgCXN0 YXRlLT5wZW5kaW5nLnJvdGF0aW9uID0gcGxhbmUtPnN0YXRlLT5yb3RhdGlvbjsNCj4gIAl3bWIo KTsgLyogTWFrZSBzdXJlIHRoZSBhYm92ZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYmVmb3JlIHVwZGF0 ZSAqLw0KPiAgCXN0YXRlLT5wZW5kaW5nLmRpcnR5ID0gdHJ1ZTsNCj4gKw0KPiArCWlmIChzdGF0 ZS0+cGVuZGluZy5jdXJzb3JfdXBkYXRlKQ0KPiArCQlzdGF0ZS0+cGVuZGluZy5jdXJzb3JfZGly dHkgPSB0cnVlOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBtdGtfcGxhbmVfYXRvbWljX2Rp c2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsDQo+IEBAIC0xNTgsNiArMjA2LDggQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzIG10a19wbGFuZV9oZWxwZXJf ZnVuY3MgPSB7DQo+ICAJLmF0b21pY19jaGVjayA9IG10a19wbGFuZV9hdG9taWNfY2hlY2ssDQo+ ICAJLmF0b21pY191cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX3VwZGF0ZSwNCj4gIAkuYXRvbWlj X2Rpc2FibGUgPSBtdGtfcGxhbmVfYXRvbWljX2Rpc2FibGUsDQo+ICsJLmF0b21pY19hc3luY191 cGRhdGUgPSBtdGtfcGxhbmVfYXRvbWljX2FzeW5jX3VwZGF0ZSwNCj4gKwkuYXRvbWljX2FzeW5j X2NoZWNrID0gbXRrX3BsYW5lX2F0b21pY19hc3luY19jaGVjaywNCj4gIH07DQo+ICANCj4gIGlu dCBtdGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX3BsYW5l ICpwbGFuZSwNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X3BsYW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oDQo+IGlu ZGV4IDc2MDg4NWUzNWIyNy4uMTEzYTEwMzQ0ODA1IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgNCj4gQEAgLTIyLDYgKzIyLDggQEAgc3RydWN0IG10a19w bGFuZV9wZW5kaW5nX3N0YXRlIHsNCj4gIAl1bnNpZ25lZCBpbnQJCQloZWlnaHQ7DQo+ICAJdW5z aWduZWQgaW50CQkJcm90YXRpb247DQo+ICAJYm9vbAkJCQlkaXJ0eTsNCj4gKwlib29sCQkJCWN1 cnNvcl9kaXJ0eTsNCj4gKwlib29sCQkJCWN1cnNvcl91cGRhdGU7DQo+ICB9Ow0KPiAgDQo+ICBz dHJ1Y3QgbXRrX3BsYW5lX3N0YXRlIHsNCg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw=