From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [RFC 1/2] drm/vc4: Handle async page flips in the atomic_commit() path Date: Fri, 30 Mar 2018 17:20:13 +0200 Message-ID: <20180330172013.175d3d29@bbrezillon> References: <20180330150904.30458-1-boris.brezillon@bootlin.com> <20180330150904.30458-2-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 52A566E8ED for ; Fri, 30 Mar 2018 15:20:26 +0000 (UTC) In-Reply-To: <20180330150904.30458-2-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, Eric Anholt , Gustavo Padovan List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCAzMCBNYXIgMjAxOCAxNzowOTowMyArMDIwMApCb3JpcyBCcmV6aWxsb24gPGJvcmlz LmJyZXppbGxvbkBib290bGluLmNvbT4gd3JvdGU6Cgo+IFJld29yayB0aGUgYXRvbWljIGNvbW1p dCBsb2dpYyB0byBoYW5kbGUgYXN5bmMgcGFnZSBmbGlwIHJlcXVlc3RzIGluCj4gdGhlIGF0b21p YyB1cGRhdGUgcGF0aC4KPiAKPiBBc3luYyBwYWdlIGZsaXBzIGFyZSBhIGJpdCBtb3JlIGNvbXBs aWNhdGVkIHRoYW4gYXN5bmMgY3Vyc29yIHVwZGF0ZXMKPiAoYWxyZWFkeSBoYW5kbGVkIGluIHRo ZSB2YzRfYXRvbWljX2NvbW1pdCgpIGZ1bmN0aW9uKSBpbiB0aGF0IHlvdSBuZWVkCj4gdG8gd2Fp dCBmb3IgZmVuY2VzIG9uIHRoZSBuZXcgZnJhbWVidWZmZXJzIHRvIGJlIHNpZ25hbGVkIGJlZm9y ZSBkb2luZwo+IHRoZSBmbGlwLiBJbiBvcmRlciB0byBlbnN1cmUgdGhhdCwgd2Ugc2NoZWR1bGUg YSBjb21taXRfd29yayB3b3JrIHRvIGRvCj4gdGhlIGFzeW5jIHVwZGF0ZSAobm90ZSB0aGF0IHRo ZSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5IHVzZXMgYQo+IHdvcmsgdG8gd2FpdCBm b3IgZmVuY2VzIHRvIGJlIHNpZ25hbGVkLCBzbywgdGhlIGxhdGVuY3kgc2hvdWxkbid0Cj4gY2hh bmdlIHRoYXQgbXVjaCkuCj4gCj4gT2YgY291cnNlLCB3ZSBoYXZlIHRvIG1vZGlmeSBhIGJpdCB0 aGUgYXRvbWljX2NvbXBsZXRlX2NvbW1pdCgpCj4gaW1wbGVtZW50YXRpb24gdG8gYXZvaWQgd2Fp dGluZyBmb3IgdGhpbmdzIHdlIGRvbid0IGNhcmUgYWJvdXQgd2hlbgo+IGRvaW5nIGFuIGFzeW5j IHBhZ2UgZmxpcDoKPiAKPiAqIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2ll cygpIHdhaXRzIGZvciBmbGlwX2RvbmUgd2hpY2gKPiAgIHdlIGRvbid0IGNhcmUgYWJvdXQgd2hl biBkb2luZyBhc3luYyBwYWdlIGZsaXBzLiBJbnN0ZWFkIHdlIHJlcGxhY2UKPiAgIHRoYXQgY2Fs bCBieSBhIGxvb3AgdGhhdCB3YWl0cyBmb3IgaHdfZG9uZSBvbmx5Cj4gKiBkcm1fYXRvbWljX2hl bHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcygpIGFuZAo+ICAgZHJtX2F0b21pY19oZWxwZXJf Y29tbWl0X21vZGVzZXRfZW5hYmxlcygpIGFyZSBub3QgbmVlZGVkIGJlY2F1c2UKPiAgIG5vdGhp bmcgZXhjZXB0IHRoZSBwbGFuZXMnIEZCcyBhcmUgdXBkYXRlZCBpbiBhc3luYyBwYWdlIGZsaXBz Cj4gKiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKCkgaXMgcmVwbGFjZWQgYnkKPiAg IHZjNF9wbGFuZV9hc3luY19zZXRfZmIoKSB3aGljaCBpcyBkb2luZyBvbmx5IHRoZSBGQiB1cGRh dGUgYW5kIGlzCj4gICB0aHVzIG11Y2ggc2ltcGxlcgo+ICogZHJtX2F0b21pY19oZWxwZXJfd2Fp dF9mb3JfdmJsYW5rcygpIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB3ZSBkb24ndAo+ICAgd2FpdCBm b3IgdGhlIG5leHQgVkJMQU5LIHBlcmlvZCB0byBhcHBseSB0aGUgbmV3IHN0YXRlLCBhbmQgZmxp cAo+ICAgZXZlbnRzIGFyZSBzaWduYWxlZCBtYW51YWxseSBqdXN0IGFmdGVyIHRoZSBIVyBoYXMg YmVlbiB1cGRhdGVkCj4gCj4gVGhhbmtzIHRvIHRoaXMgcmV3b3JrLCB3ZSBjYW4gZ2V0IHJpZCBv ZiB0aGUgY3VzdG9tIHZjNF9wYWdlX2ZsaXAoKQo+IGltcGxlbWVudGF0aW9uIGFuZCBpdHMgZGVw ZW5kZW5jaWVzIGFuZCB1c2UKPiBkcm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAoKSBpbnN0ZWFk LgoKQW5vdGhlciBnb29kIHJlYXNvbiBmb3IgbW92aW5nIGFzeW5jIHBhZ2UgZmxpcCB0byB0aGUg YXRvbWljIGNvbW1pdApwYXRoIGlzIHRoYXQgaXMgZml4ZXMgYSBidWcgd2UgaGFkOgpkcm1fYXRv bWljX2hlbHBlcl9wcmVwYXJlL2NsZWFudXBfcGxhbmVzKCkgd2VyZSBub3QgY2FsbGVkIGluIHRo ZSBhc3luYwpwYWdlIGZsaXAgcGF0aCwgd2hpY2ggY2FuIGxlYWQgdG8gdW5iYWxhbmNlZCB2YzRf aW5jL2RlY191c2VjbnQoKQppbiBzb21lIHNpdHVhdGlvbnMgKHdoZW4gdGhlIHBsYW5lIGlzIHVw ZGF0ZWQgb25jZSB3aXRoIGFuIGFzeW5jIHBhZ2UKZmxpcCBhbmQgdGhlbiB3aXRoIGEgcmVndWxh ciB1cGRhdGUpIG9yIHRyaWdnZXIgYSB1c2UgYWZ0ZXIgZnJlZSBpZiB0aGUKQk8gcGFzc2VkIHRv IHRoZSBwbGFuZSBpcyBtYXJrZWQgcHVyZ2VhYmxlIGFuZCB0aGUga2VybmVsIGRlY2lkZXMgdG8K cHVyZ2UgaXRzIGNhY2hlLgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBCb3JpcyBCcmV6aWxsb24gPGJv cmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfY3J0Yy5jIHwgMTAzICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jICB8IDEwMSArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLS0tLS0tCj4gIDIgZmlsZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9u cygrKSwgMTE4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiBpbmRleCBi ZjQ2Njc0ODE5MzUuLjM4NDNjMzlkY2U2MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9jcnRjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9jcnRjLmMKPiBA QCAtNzU3LDEwNyArNzU3LDYgQEAgc3RhdGljIGlycXJldHVybl90IHZjNF9jcnRjX2lycV9oYW5k bGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdHJ1 Y3QgdmM0X2FzeW5jX2ZsaXBfc3RhdGUgewo+IC0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwo+IC0J c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4gLQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5r X2V2ZW50ICpldmVudDsKPiAtCj4gLQlzdHJ1Y3QgdmM0X3NlcW5vX2NiIGNiOwo+IC19Owo+IC0K PiAtLyogQ2FsbGVkIHdoZW4gdGhlIFYzRCBleGVjdXRpb24gZm9yIHRoZSBCTyBiZWluZyBmbGlw cGVkIHRvIGlzIGRvbmUsIHNvIHRoYXQKPiAtICogd2UgY2FuIGFjdHVhbGx5IHVwZGF0ZSB0aGUg cGxhbmUncyBhZGRyZXNzIHRvIHBvaW50IHRvIGl0Lgo+IC0gKi8KPiAtc3RhdGljIHZvaWQKPiAt dmM0X2FzeW5jX3BhZ2VfZmxpcF9jb21wbGV0ZShzdHJ1Y3QgdmM0X3NlcW5vX2NiICpjYikKPiAt ewo+IC0Jc3RydWN0IHZjNF9hc3luY19mbGlwX3N0YXRlICpmbGlwX3N0YXRlID0KPiAtCQljb250 YWluZXJfb2YoY2IsIHN0cnVjdCB2YzRfYXN5bmNfZmxpcF9zdGF0ZSwgY2IpOwo+IC0Jc3RydWN0 IGRybV9jcnRjICpjcnRjID0gZmxpcF9zdGF0ZS0+Y3J0YzsKPiAtCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2Rldihk ZXYpOwo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBjcnRjLT5wcmltYXJ5Owo+IC0KPiAt CXZjNF9wbGFuZV9hc3luY19zZXRfZmIocGxhbmUsIGZsaXBfc3RhdGUtPmZiKTsKPiAtCWlmIChm bGlwX3N0YXRlLT5ldmVudCkgewo+IC0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gLQo+IC0JCXNw aW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiAtCQlkcm1fY3J0Y19z ZW5kX3ZibGFua19ldmVudChjcnRjLCBmbGlwX3N0YXRlLT5ldmVudCk7Cj4gLQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7Cj4gLQl9Cj4gLQo+IC0JZHJt X2NydGNfdmJsYW5rX3B1dChjcnRjKTsKPiAtCWRybV9mcmFtZWJ1ZmZlcl9wdXQoZmxpcF9zdGF0 ZS0+ZmIpOwo+IC0Ja2ZyZWUoZmxpcF9zdGF0ZSk7Cj4gLQo+IC0JdXAoJnZjNC0+YXN5bmNfbW9k ZXNldCk7Cj4gLX0KPiAtCj4gLS8qIEltcGxlbWVudHMgYXN5bmMgKG5vbi12Ymxhbmstc3luY2Vk KSBwYWdlIGZsaXBzLgo+IC0gKgo+IC0gKiBUaGUgcGFnZSBmbGlwIGlvY3RsIG5lZWRzIHRvIHJl dHVybiBpbW1lZGlhdGVseSwgc28gd2UgZ3JhYiB0aGUKPiAtICogbW9kZXNldCBzZW1hcGhvcmUg b24gdGhlIHBpcGUsIGFuZCBxdWV1ZSB0aGUgYWRkcmVzcyB1cGRhdGUgZm9yCj4gLSAqIHdoZW4g VjNEIGlzIGRvbmUgd2l0aCB0aGUgQk8gYmVpbmcgZmxpcHBlZCB0by4KPiAtICovCj4gLXN0YXRp YyBpbnQgdmM0X2FzeW5jX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gLQkJCSAg ICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPiAtCQkJICAgICAgIHN0cnVjdCBkcm1f cGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50LAo+IC0JCQkgICAgICAgdWludDMyX3QgZmxhZ3Mp Cj4gLXsKPiAtCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Cj4gLQlzdHJ1Y3Qg dmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwo+IC0Jc3RydWN0IGRybV9wbGFuZSAqcGxh bmUgPSBjcnRjLT5wcmltYXJ5Owo+IC0JaW50IHJldCA9IDA7Cj4gLQlzdHJ1Y3QgdmM0X2FzeW5j X2ZsaXBfc3RhdGUgKmZsaXBfc3RhdGU7Cj4gLQlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpj bWFfYm8gPSBkcm1fZmJfY21hX2dldF9nZW1fb2JqKGZiLCAwKTsKPiAtCXN0cnVjdCB2YzRfYm8g KmJvID0gdG9fdmM0X2JvKCZjbWFfYm8tPmJhc2UpOwo+IC0KPiAtCWZsaXBfc3RhdGUgPSBremFs bG9jKHNpemVvZigqZmxpcF9zdGF0ZSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFmbGlwX3N0YXRl KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCWRybV9mcmFtZWJ1ZmZlcl9nZXQoZmIpOwo+ IC0JZmxpcF9zdGF0ZS0+ZmIgPSBmYjsKPiAtCWZsaXBfc3RhdGUtPmNydGMgPSBjcnRjOwo+IC0J ZmxpcF9zdGF0ZS0+ZXZlbnQgPSBldmVudDsKPiAtCj4gLQkvKiBNYWtlIHN1cmUgYWxsIG90aGVy IGFzeW5jIG1vZGVzZXRlcyBoYXZlIGxhbmRlZC4gKi8KPiAtCXJldCA9IGRvd25faW50ZXJydXB0 aWJsZSgmdmM0LT5hc3luY19tb2Rlc2V0KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlkcm1fZnJhbWVi dWZmZXJfcHV0KGZiKTsKPiAtCQlrZnJlZShmbGlwX3N0YXRlKTsKPiAtCQlyZXR1cm4gcmV0Owo+ IC0JfQo+IC0KPiAtCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKPiAt Cj4gLQkvKiBJbW1lZGlhdGVseSB1cGRhdGUgdGhlIHBsYW5lJ3MgbGVnYWN5IGZiIHBvaW50ZXIs IHNvIHRoYXQgbGF0ZXIKPiAtCSAqIG1vZGVzZXQgcHJlcCBzZWVzIHRoZSBzdGF0ZSB0aGF0IHdp bGwgYmUgcHJlc2VudCB3aGVuIHRoZSBzZW1hcGhvcmUKPiAtCSAqIGlzIHJlbGVhc2VkLgo+IC0J ICovCj4gLQlkcm1fYXRvbWljX3NldF9mYl9mb3JfcGxhbmUocGxhbmUtPnN0YXRlLCBmYik7Cj4g LQlwbGFuZS0+ZmIgPSBmYjsKPiAtCj4gLQl2YzRfcXVldWVfc2Vxbm9fY2IoZGV2LCAmZmxpcF9z dGF0ZS0+Y2IsIGJvLT5zZXFubywKPiAtCQkJICAgdmM0X2FzeW5jX3BhZ2VfZmxpcF9jb21wbGV0 ZSk7Cj4gLQo+IC0JLyogRHJpdmVyIHRha2VzIG93bmVyc2hpcCBvZiBzdGF0ZSBvbiBzdWNjZXNz ZnVsIGFzeW5jIGNvbW1pdC4gKi8KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50 IHZjNF9wYWdlX2ZsaXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+IC0JCQkgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmIsCj4gLQkJCSBzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpl dmVudCwKPiAtCQkJIHVpbnQzMl90IGZsYWdzLAo+IC0JCQkgc3RydWN0IGRybV9tb2Rlc2V0X2Fj cXVpcmVfY3R4ICpjdHgpCj4gLXsKPiAtCWlmIChmbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9B U1lOQykKPiAtCQlyZXR1cm4gdmM0X2FzeW5jX3BhZ2VfZmxpcChjcnRjLCBmYiwgZXZlbnQsIGZs YWdzKTsKPiAtCWVsc2UKPiAtCQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwKGNy dGMsIGZiLCBldmVudCwgZmxhZ3MsIGN0eCk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKnZjNF9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gIHsKPiAgCXN0cnVjdCB2YzRfY3J0Y19zdGF0ZSAqdmM0X3N0YXRlOwo+IEBAIC05MDIs NyArODAxLDcgQEAgdmM0X2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICBzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIHZjNF9jcnRjX2Z1bmNzID0gewo+ICAJLnNl dF9jb25maWcgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXRfY29uZmlnLAo+ICAJLmRlc3Ryb3kgPSB2 YzRfY3J0Y19kZXN0cm95LAo+IC0JLnBhZ2VfZmxpcCA9IHZjNF9wYWdlX2ZsaXAsCj4gKwkucGFn ZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICAJLnNldF9wcm9wZXJ0eSA9 IE5VTEwsCj4gIAkuY3Vyc29yX3NldCA9IE5VTEwsIC8qIGhhbmRsZWQgYnkgZHJtX21vZGVfY3Vy c29yX3VuaXZlcnNhbCAqLwo+ICAJLmN1cnNvcl9tb3ZlID0gTlVMTCwgLyogaGFuZGxlZCBieSBk cm1fbW9kZV9jdXJzb3JfdW5pdmVyc2FsICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKPiBpbmRleCBl NzkxZTQ5OGEzZGQuLmZhYTJjMjZmMTIzNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9rbXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCj4gQEAg LTI1LDMzICsyNSw4OSBAQAo+ICAjaW5jbHVkZSAidmM0X2Rydi5oIgo+ICAKPiAgc3RhdGljIHZv aWQKPiAtdmM0X2F0b21pY19jb21wbGV0ZV9jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQo+ICt2YzRfYXRvbWljX2NvbXBsZXRlX2NvbW1pdChzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUsIGJvb2wgYXN5bmMpCj4gIHsKPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBzdGF0ZS0+ZGV2Owo+ICAJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsK PiAgCj4gIAlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9mZW5jZXMoZGV2LCBzdGF0ZSwgZmFs c2UpOwo+ICAKPiAtCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdGF0 ZSk7Cj4gKwlpZiAoYXN5bmMpIHsKPiArCQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZTsKPiArCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm5ld19jcnRjX3N0YXRlOwo+ICsJCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKPiArCQlp bnQgaTsKPiArCj4gKwkJLyogV2UgbmVlZCB0byB3YWl0IGZvciBIVyBkb25lIGJlZm9yZSBhcHBs eWluZyB0aGUgbmV3IEZCcwo+ICsJCSAqIG90aGVyd2lzZSBvdXIgdXBkYXRlIG1pZ2h0IGJlIG92 ZXJ3cml0dGVuIGJ5IHRoZSBwcmV2aW91cwo+ICsJCSAqIGNvbW1pdC4KPiArCQkgKi8KPiArCQlm b3JfZWFjaF9vbGRfcGxhbmVfaW5fc3RhdGUoc3RhdGUsIHBsYW5lLCBwbGFuZV9zdGF0ZSwgaSkg ewo+ICsJCQlzdHJ1Y3QgZHJtX2NydGNfY29tbWl0ICpjb21taXQgPSBwbGFuZV9zdGF0ZS0+Y29t bWl0Owo+ICsJCQlpbnQgcmV0Owo+ICsKPiArCQkJaWYgKCFjb21taXQpCj4gKwkJCQljb250aW51 ZTsKPiArCj4gKwkJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY29tbWl0LT5o d19kb25lLAo+ICsJCQkJCQkJICAxMCAqIEhaKTsKPiArCQkJaWYgKCFyZXQpCj4gKwkJCQlEUk1f RVJST1IoIltQTEFORTolZDolc10gaHdfZG9uZSB0aW1lZCBvdXRcbiIsCj4gKwkJCQkJICBwbGFu ZS0+YmFzZS5pZCwgcGxhbmUtPm5hbWUpOwo+ICsJCX0KPiAgCj4gLQlkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZXYsIHN0YXRlKTsKPiArCQkvKiBGSVhNRToKPiAr CQkgKiBXZSBjb3VsZCB1c2UgZHJtX2F0b21pY19oZWxwZXJfYXN5bmNfY29tbWl0KCkgaGVyZSwg YnV0Cj4gKwkJICogVkM0J3MgLT5hdG9taWNfYXN5bmNfdXBkYXRlKCkgaW1wbGVtZW50YXRpb24g ZXhwZWN0cwo+ICsJCSAqIHBsYW5lLT5zdGF0ZSB0byBwb2ludCB0byB0aGUgb2xkX3N0YXRlIGFu ZCBvbGQvbmV3IHN0YXRlcwo+ICsJCSAqIGhhdmUgYWxyZWFkeSBiZWVuIHN3YXBwZWQuCj4gKwkJ ICogTGV0J3MganVzdCBjYWxsIG91ciBjdXN0b20gZnVuY3Rpb24gZm9yIG5vdyBhbmQgc2VlIGhv dyB3ZQo+ICsJCSAqIGNhbiBtYWtlIHRoYXQgbW9yZSBnZW5lcmljIGFmdGVyd2FyZHMuCj4gKwkJ ICovCj4gKwkJZm9yX2VhY2hfbmV3X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgcGxhbmVf c3RhdGUsIGkpCj4gKwkJCXZjNF9wbGFuZV9hc3luY19zZXRfZmIocGxhbmUsIHBsYW5lX3N0YXRl LT5mYik7Cj4gKwo+ICsJCS8qIE5vdywgc2VuZCAnZmFrZScgVkJMQU5LIGV2ZW50cyB0byBsZXQg dGhlIHVzZXIgbm93IGl0cwo+ICsJCSAqIHBhZ2VmbGlwIGlzIGRvbmUuIEJ5IGZha2UgSSBtZWFu IHRoZXkgYXJlIHJlYWxseSBWQkxBTksKPiArCQkgKiBzeW5jaHJvbml6ZWQgYnV0IGl0IHNlZW1z IHRvIGJlIGV4cGVjdGVkIGJ5IHRoZSBjb3JlLgo+ICsJCSAqLwo+ICsJCWZvcl9lYWNoX25ld19j cnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBuZXdfY3J0Y19zdGF0ZSwgaSkgewo+ICsJCQl1bnNp Z25lZCBsb25nIGZsYWdzOwo+ICsKPiArCQkJaWYgKCFuZXdfY3J0Y19zdGF0ZS0+ZXZlbnQpCj4g KwkJCQljb250aW51ZTsKPiArCj4gKwkJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRj KSk7Cj4gKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKPiAr CQkJZHJtX2NydGNfc2VuZF92YmxhbmtfZXZlbnQoY3J0YywgbmV3X2NydGNfc3RhdGUtPmV2ZW50 KTsKPiArCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7 Cj4gKwkJCWRybV9jcnRjX3ZibGFua19wdXQoY3J0Yyk7Cj4gKwkJfQo+ICsJfSBlbHNlIHsKPiAr CQlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMoc3RhdGUpOwo+ICAKPiAt CWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9wbGFuZXMoZGV2LCBzdGF0ZSwgMCk7Cj4gKwkJZHJt X2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZGV2LCBzdGF0ZSk7Cj4gIAo+ IC0JZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhkZXYsIHN0YXRlKTsK PiArCQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfcGxhbmVzKGRldiwgc3RhdGUsIDApOwo+ICAK PiAtCS8qIE1ha2Ugc3VyZSB0aGF0IGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3Mo KQo+IC0JICogYWN0dWFsbHkgd2FpdHMgZm9yIHZibGFuay4gIElmIHdlJ3JlIGRvaW5nIGEgZnVs bCBhdG9taWMKPiAtCSAqIG1vZGVzZXQgKGFzIG9wcG9zZWQgdG8gYSB2YzRfdXBkYXRlX3BsYW5l KCkgc2hvcnQgY2lyY3VpdCksCj4gLQkgKiB0aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3Igc2Nhbm91 dCB0byBiZSBkb25lIHdpdGggb3VyCj4gLQkgKiBkaXNwbGF5IGxpc3RzIGJlZm9yZSB3ZSBmcmVl IGl0IGFuZCBwb3RlbnRpYWxseSByZWFsbG9jYXRlCj4gLQkgKiBhbmQgb3ZlcndyaXRlIHRoZSBk bGlzdCBtZW1vcnkgd2l0aCBhIG5ldyBtb2Rlc2V0Lgo+IC0JICovCj4gLQlzdGF0ZS0+bGVnYWN5 X2N1cnNvcl91cGRhdGUgPSBmYWxzZTsKPiArCQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9k ZXNldF9lbmFibGVzKGRldiwgc3RhdGUpOwo+ICsJfQo+ICAKPiAgCWRybV9hdG9taWNfaGVscGVy X2NvbW1pdF9od19kb25lKHN0YXRlKTsKPiAgCj4gLQlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zv cl92YmxhbmtzKGRldiwgc3RhdGUpOwo+ICsJaWYgKCFhc3luYykgewo+ICsJCS8qIE1ha2Ugc3Vy ZSB0aGF0IGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3MoKQo+ICsJCSAqIGFjdHVh bGx5IHdhaXRzIGZvciB2YmxhbmsuICBJZiB3ZSdyZSBkb2luZyBhIGZ1bGwgYXRvbWljCj4gKwkJ ICogbW9kZXNldCAoYXMgb3Bwb3NlZCB0byBhIHZjNF91cGRhdGVfcGxhbmUoKSBzaG9ydCBjaXJj dWl0KSwKPiArCQkgKiB0aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3Igc2Nhbm91dCB0byBiZSBkb25l IHdpdGggb3VyCj4gKwkJICogZGlzcGxheSBsaXN0cyBiZWZvcmUgd2UgZnJlZSBpdCBhbmQgcG90 ZW50aWFsbHkgcmVhbGxvY2F0ZQo+ICsJCSAqIGFuZCBvdmVyd3JpdGUgdGhlIGRsaXN0IG1lbW9y eSB3aXRoIGEgbmV3IG1vZGVzZXQuCj4gKwkJICovCj4gKwkJc3RhdGUtPmxlZ2FjeV9jdXJzb3Jf dXBkYXRlID0gZmFsc2U7Cj4gKwo+ICsJCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFu a3MoZGV2LCBzdGF0ZSk7Cj4gKwl9Cj4gIAo+ICAJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9w bGFuZXMoZGV2LCBzdGF0ZSk7Cj4gIAo+IEBAIC02Nyw3ICsxMjMsMjAgQEAgc3RhdGljIHZvaWQg Y29tbWl0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKHdvcmssCj4gIAkJCQkJCSAgICAgIHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlLAo+ICAJCQkJCQkgICAgICBjb21taXRfd29yayk7Cj4gLQl2YzRf YXRvbWljX2NvbXBsZXRlX2NvbW1pdChzdGF0ZSk7Cj4gKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg Km5ld19jcnRjX3N0YXRlOwo+ICsJYm9vbCBhc3luY19jb21taXQgPSB0cnVlOwo+ICsJc3RydWN0 IGRybV9jcnRjICpjcnRjOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yX2VhY2hfbmV3X2NydGNfaW5f c3RhdGUoc3RhdGUsIGNydGMsIG5ld19jcnRjX3N0YXRlLCBpKSB7Cj4gKwkJaWYgKG5ld19jcnRj X3N0YXRlLT5wYWdlZmxpcF9mbGFncyAmIERSTV9NT0RFX1BBR0VfRkxJUF9BU1lOQykKPiArCQkJ Y29udGludWU7Cj4gKwo+ICsJCWFzeW5jX2NvbW1pdCA9IGZhbHNlOwo+ICsJCWJyZWFrOwo+ICsJ fQo+ICsKPiArCXZjNF9hdG9taWNfY29tcGxldGVfY29tbWl0KHN0YXRlLCBhc3luY19jb21taXQp Owo+ICB9Cj4gIAo+ICAvKioKPiBAQCAtMTYzLDcgKzIzMiw3IEBAIHN0YXRpYyBpbnQgdmM0X2F0 b21pY19jb21taXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCWlmIChub25ibG9jaykKPiAg CQlxdWV1ZV93b3JrKHN5c3RlbV91bmJvdW5kX3dxLCAmc3RhdGUtPmNvbW1pdF93b3JrKTsKPiAg CWVsc2UKPiAtCQl2YzRfYXRvbWljX2NvbXBsZXRlX2NvbW1pdChzdGF0ZSk7Cj4gKwkJdmM0X2F0 b21pY19jb21wbGV0ZV9jb21taXQoc3RhdGUsIGZhbHNlKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAg fQoKCgotLSAKQm9yaXMgQnJlemlsbG9uLCBCb290bGluIChmb3JtZXJseSBGcmVlIEVsZWN0cm9u cykKRW1iZWRkZWQgTGludXggYW5kIEtlcm5lbCBlbmdpbmVlcmluZwpodHRwczovL2Jvb3RsaW4u Y29tCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=