From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RfC PATCH] Add udmabuf misc device Date: Tue, 13 Mar 2018 17:10:35 +0100 Message-ID: <20180313161035.GL4788@phenom.ffwll.local> References: <20180313154826.20436-1-kraxel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 09C2D6E5A2 for ; Tue, 13 Mar 2018 16:10:40 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id m4so388776wrb.7 for ; Tue, 13 Mar 2018 09:10:39 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180313154826.20436-1-kraxel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Gerd Hoffmann Cc: Tomeu Vizoso , David Airlie , qemu-devel@nongnu.org, dri-devel@lists.freedesktop.org, open list , "moderated list:DMA BUFFER SHARING FRAMEWORK" , "open list:DMA BUFFER SHARING FRAMEWORK" List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXIgMTMsIDIwMTggYXQgMDQ6NDg6MjZQTSArMDEwMCwgR2VyZCBIb2ZmbWFubiB3 cm90ZToKPiBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gaW92ZWNzIGludG8gZG1hLWJ1 ZnMuCj4gCj4gVXNlIGNhc2U6ICBBbGxvd3MgcWVtdSBwYXNzIGFyb3VuZCBkbWFidWZzIGZvciB0 aGUgZ3Vlc3QgZnJhbWVidWZmZXIuCj4gaHR0cHM6Ly93d3cua3JheGVsLm9yZy9jZ2l0L3FlbXUv bG9nLz9oPXNpcml1cy91ZG1hYnVmIGhhcyBhbgo+IGV4cGVyaW1lbnRhbCBwYXRjaC4KPiAKPiBB bHNvIGFsbG93cyBxZW11IHRvIGV4cG9ydCBndWVzdCB2aXJ0aW8tZ3B1IHJlc291cmNlcyBhcyBo b3N0IGRtYWJ1ZnMuCj4gU2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBpdCB0byBkaXNwbGF5IGd1 ZXN0IHdheWxhbmQgd2luZG93cyBvbiB0aGUKPiBob3N0IGRpc3BsYXkgc2VydmVyLiAgdmlydGlv LWdwdSByZXNzb3VyY2VzIGNhbiBiZSBjaHVua2VkIHNvIHdlIHdpbGwKPiBhY3R1YWxseSBuZWVk IG11bHRpcGxlIGlvdmVjIGVudHJpZXMuICBVTlRFU1RFRC4KPiAKPiBXYW50IGNvbGxlY3Qgc29t ZSBmZWVkYmFjayBvbiB0aGUgZ2VuZXJhbCBhcHByb2FjaCB3aXRoIHRoaXMgUmZDIHNlcmllcy4K PiBDYW4gdGhpcyB3b3JrPyAgSWYgbm90LCBiZXR0ZXIgaWRlYXM/Cj4gCj4gUXVlc3Rpb246ICBN dXN0IHRoaXMgYmUgaG9va2VkIGludG8gc29tZSBraW5kIG9mIG1sb2NrIGFjY291bnRpbmcsIHRv Cj4gbGltaXQgdGhlIGFtb3V0IG9mIG1lbW9yeSB1c2Vyc3BhY2UgaXMgYWxsb3dlZCB0byBwaW4g dGhpcyB3YXk/ICBPciB3aWxsCj4gZ2V0X3VzZXJfcGFnZXNfZmFzdCgpIGhhbmRsZSB0aGF0IGZv ciBtZT8KCkVpdGhlciBtbG9jayBhY2NvdW50IChiZWNhdXNlIGl0J3MgbWxvY2tlZCBkZWZhY3Rv KSwgYW5kIGdldF91c2VyX3BhZ2VzCndvbid0IGRvIHRoYXQgZm9yIHlvdS4KCk9yIHlvdSB3cml0 ZSB0aGUgZnVsbC1ibG93biB1c2VycHRyIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgbW11X25v dGlmaWVyCnN1cHBvcnQgKHNlZSBpOTE1IG9yIGFtZGdwdSksIGJ1dCB0aGF0IGFsc28gcmVxdWly ZXMgQ2hyaXN0aWFuIEvDtm5pZ3MKbGF0ZXN0IC0+aW52YWxpZGF0ZV9tYXBwaW5nIFJGQyBmb3Ig ZG1hLWJ1ZiAoc2luY2UgYXRtIGV4cG9ydGluZyB1c2VycHRyCmJ1ZmZlcnMgaXMgYSBuby1nbyku Cgo+IAo+IEtub3duIGlzc3VlOiAgRHJpdmVyIEFQSSBpc24ndCBjb21wbGV0ZSB5ZXQuICBOZWVk IGFkZCBzb21lIGZsYWdzLCBmb3IKPiBleGFtcGxlIHRvIHN1cHBvcnQgcmVhZC1vbmx5IGJ1ZmZl cnMuCgpkbWEtYnVmIGhhcyBubyBjb25jZXB0IG9mIHJlYWQtb25seS4gSSBkb24ndCB0aGluayB3 ZSBjYW4gZXZlbiBlbmZvcmNlCnRoYXQgKG5vdCBtYW55IGlvbW11cyBjYW4gZW5mb3JjZSB0aGlz IGlpcmMpLCBzbyBwcmV0dHkgbXVjaCBuZWVkIHRvCnJlcXVpcmUgci93IG1lbW9yeS4KCj4gQ2M6 IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiBDYzogVG9tZXUgVml6b3NvIDx0b21l dS52aXpvc29AY29sbGFib3JhLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBHZXJkIEhvZmZtYW5uIDxr cmF4ZWxAcmVkaGF0LmNvbT4KCmJ0dyB0aGVyZSdzIGFsc28gdGhlIGh5cGVyZG1hYnVmIHN0dWZm IGZyb20gdGhlIHhlbiBmb2xrcywgYnV0IGltbyB0aGVpcgpzb2x1dGlvbiBvZiBmb3J3YXJkaW5n IHRoZSBlbnRpcmUgZG1hLWJ1ZiBhcGkgaXMgb3ZlciB0aGUgdG9wLiBUaGlzIGhlcmUKbG9va3Mg X211Y2hfIGJldHRlciwgcGxzIGNjIGFsbCB0aGUgaHlwZXJkbWFidWYgcGVvcGxlIG9uIHlvdXIg bmV4dAp2ZXJzaW9uLgoKT3ZlcmFsbCBJIGxpa2UgdGhlIGlkZWEsIGJ1dCB0b28gbGF6eSB0byBy ZXZpZXcuIENhbiBtYXliZSBiZSBicmliZWQgOi0pCgpPaCwgc29tZSBrc2VsZnRlc3RzIGZvciB0 aGlzIHN0dWZmIHdvdWxkIGJlIGxvdmVseS4KLURhbmllbAo+IC0tLQo+ICBpbmNsdWRlL3VhcGkv bGludXgvdWRtYWJ1Zi5oIHwgIDIxICsrKysKPiAgZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYyAg ICB8IDI1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZG1hLWJ1Zi9LY29uZmlnICAgICAgfCAgIDcgKysKPiAgZHJpdmVycy9kbWEtYnVmL01h a2VmaWxlICAgICB8ICAgMSArCj4gIDQgZmlsZXMgY2hhbmdlZCwgMjc5IGluc2VydGlvbnMoKykK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC91ZG1hYnVmLmgKPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMKPiAKPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaCBiL2luY2x1ZGUvdWFwaS9saW51eC91ZG1h YnVmLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmZkMmZhNDQx ZmUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3VkbWFidWYuaAo+ IEBAIC0wLDAgKzEsMjEgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg V0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi8KPiArI2lmbmRlZiBfVUFQSV9MSU5VWF9VRE1BQlVG X0gKPiArI2RlZmluZSBfVUFQSV9MSU5VWF9VRE1BQlVGX0gKPiArCj4gKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KPiArCj4gK3N0cnVjdCB1ZG1h YnVmX2lvdmVjIHsKPiArCV9fdTY0IGJhc2U7Cj4gKwlfX3U2NCBsZW47Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgdWRtYWJ1Zl9jcmVhdGUgewo+ICsJX191MzIgZmxhZ3M7Cj4gKwlfX3UzMiBuaW92Owo+ ICsJc3RydWN0IHVkbWFidWZfaW92ZWMgaW92c1tdOwo+ICt9Owo+ICsKPiArI2RlZmluZSBVRE1B QlVGX0NSRUFURSBfSU9XKDB4NDIsIDB4MjMsIHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZSkKPiArCj4g KyNlbmRpZiAvKiBfVUFQSV9MSU5VWF9VRE1BQlVGX0ggKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9kbWEtYnVmL3VkbWFidWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi91ZG1hYnVmLmMKPiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAuLmVjMDEyZDdhYzcKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvZHJpdmVycy9kbWEtYnVmL3VkbWFidWYuYwo+IEBAIC0wLDAgKzEsMjUwIEBA Cj4gKy8qCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4 L2luaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgv ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2RtYS1idWYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KPiArCj4gKyNpbmNs dWRlIDx1YXBpL2xpbnV4L3VkbWFidWYuaD4KPiArCj4gK3N0cnVjdCB1ZG1hYnVmIHsKPiArCXUz MiBwYWdlY291bnQ7Cj4gKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB1ZG1hYnVmX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQo+ICt7Cj4gKwlzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0+dm1hOwo+ICsJc3RydWN0IHVkbWFidWYgKnVi dWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKPiArCj4gKwlpZiAoV0FSTl9PTih2bWYtPnBnb2Zm ID49IHVidWYtPnBhZ2Vjb3VudCkpCj4gKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKPiArCj4g Kwl2bWYtPnBhZ2UgPSB1YnVmLT5wYWdlc1t2bWYtPnBnb2ZmXTsKPiArCWdldF9wYWdlKHZtZi0+ cGFnZSk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9v cGVyYXRpb25zX3N0cnVjdCB1ZG1hYnVmX3ZtX29wcyA9IHsKPiArCS5mYXVsdCA9IHVkbWFidWZf dm1fZmF1bHQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IG1tYXBfdWRtYWJ1ZihzdHJ1Y3QgZG1h X2J1ZiAqYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKPiArewo+ICsJc3RydWN0IHVk bWFidWYgKnVidWYgPSBidWYtPnByaXY7Cj4gKwo+ICsJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1f U0hBUkVEKSA9PSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXZtYS0+dm1fb3BzID0g JnVkbWFidWZfdm1fb3BzOwo+ICsJdm1hLT52bV9wcml2YXRlX2RhdGEgPSB1YnVmOwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKm1hcF91ZG1hYnVmKHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0LAo+ICsJCQkJICAgIGVudW0gZG1hX2RhdGFfZGly ZWN0aW9uIGRpcmVjdGlvbikKPiArewo+ICsJc3RydWN0IHVkbWFidWYgKnVidWYgPSBhdC0+ZG1h YnVmLT5wcml2Owo+ICsJc3RydWN0IHNnX3RhYmxlICpzZzsKPiArCj4gKwlzZyA9IGt6YWxsb2Mo c2l6ZW9mKCpzZyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFzZykKPiArCQlnb3RvIGVycjE7Cj4g KwlpZiAoc2dfYWxsb2NfdGFibGVfZnJvbV9wYWdlcyhzZywgdWJ1Zi0+cGFnZXMsIHVidWYtPnBh Z2Vjb3VudCwKPiArCQkJCSAgICAgIDAsIHVidWYtPnBhZ2Vjb3VudCA8PCBQQUdFX1NISUZULAo+ ICsJCQkJICAgICAgR0ZQX0tFUk5FTCkgPCAwKQo+ICsJCWdvdG8gZXJyMjsKPiArCWlmICghZG1h X21hcF9zZyhhdC0+ZGV2LCBzZy0+c2dsLCBzZy0+bmVudHMsIGRpcmVjdGlvbikpCj4gKwkJZ290 byBlcnIzOwo+ICsKPiArCXJldHVybiBzZzsKPiArCj4gK2VycjM6Cj4gKwlzZ19mcmVlX3RhYmxl KHNnKTsKPiArZXJyMjoKPiArCWtmcmVlKHNnKTsKPiArZXJyMToKPiArCXJldHVybiBFUlJfUFRS KC1FTk9NRU0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB1bm1hcF91ZG1hYnVmKHN0cnVjdCBk bWFfYnVmX2F0dGFjaG1lbnQgKmF0LAo+ICsJCQkgIHN0cnVjdCBzZ190YWJsZSAqc2csCj4gKwkJ CSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQo+ICt7Cj4gKwlzZ19mcmVlX3Rh YmxlKHNnKTsKPiArCWtmcmVlKHNnKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVsZWFzZV91 ZG1hYnVmKHN0cnVjdCBkbWFfYnVmICpidWYpCj4gK3sKPiArCXN0cnVjdCB1ZG1hYnVmICp1YnVm ID0gYnVmLT5wcml2Owo+ICsJcGdvZmZfdCBwZzsKPiArCj4gKwlmb3IgKHBnID0gMDsgcGcgPCB1 YnVmLT5wYWdlY291bnQ7IHBnKyspCj4gKwkJcHV0X3BhZ2UodWJ1Zi0+cGFnZXNbcGddKTsKPiAr CWtmcmVlKHVidWYtPnBhZ2VzKTsKPiArCWtmcmVlKHVidWYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCAqa21hcF9hdG9taWNfdWRtYWJ1ZihzdHJ1Y3QgZG1hX2J1ZiAqYnVmLCB1bnNpZ25lZCBs b25nIG9mZnNldCkKPiArewo+ICsJc3RydWN0IHVkbWFidWYgKnVidWYgPSBidWYtPnByaXY7Cj4g KwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHVidWYtPnBhZ2VzW29mZnNldCA+PiBQQUdFX1NISUZUXTsK PiArCj4gKwlyZXR1cm4ga21hcF9hdG9taWMocGFnZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk ICprbWFwX3VkbWFidWYoc3RydWN0IGRtYV9idWYgKmJ1ZiwgdW5zaWduZWQgbG9uZyBvZmZzZXQp Cj4gK3sKPiArCXN0cnVjdCB1ZG1hYnVmICp1YnVmID0gYnVmLT5wcml2Owo+ICsJc3RydWN0IHBh Z2UgKnBhZ2UgPSB1YnVmLT5wYWdlc1tvZmZzZXQgPj4gUEFHRV9TSElGVF07Cj4gKwo+ICsJcmV0 dXJuIGttYXAocGFnZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdWRt YWJ1Zl9vcHMgPSB7Cj4gKwkubWFwX2RtYV9idWYJICA9IG1hcF91ZG1hYnVmLAo+ICsJLnVubWFw X2RtYV9idWYJICA9IHVubWFwX3VkbWFidWYsCj4gKwkucmVsZWFzZQkgID0gcmVsZWFzZV91ZG1h YnVmLAo+ICsJLm1hcF9hdG9taWMJICA9IGttYXBfYXRvbWljX3VkbWFidWYsCj4gKwkubWFwCQkg ID0ga21hcF91ZG1hYnVmLAo+ICsJLm1tYXAJCSAgPSBtbWFwX3VkbWFidWYsCj4gK307Cj4gKwo+ ICtzdGF0aWMgbG9uZyB1ZG1hYnVmX2lvY3RsX2NyZWF0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5z aWduZWQgbG9uZyBhcmcpCj4gK3sKPiArCXN0cnVjdCB1ZG1hYnVmX2NyZWF0ZSBjcmVhdGU7Cj4g KwlzdHJ1Y3QgdWRtYWJ1Zl9pb3ZlYyAqaW92czsKPiArCXN0cnVjdCB1ZG1hYnVmICp1YnVmOwo+ ICsJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwo+ICsJc3RydWN0IGRtYV9i dWYgKmJ1ZjsKPiArCXBnb2ZmX3QgcGdvZmYsIHBnY250Owo+ICsJdTMyIGlvdjsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZjcmVhdGUsICh2b2lkIF9fdXNlciAqKWFy ZywKPiArCQkJICAgc2l6ZW9mKHN0cnVjdCB1ZG1hYnVmX2NyZWF0ZSkpKQo+ICsJCXJldHVybiAt RUZBVUxUOwo+ICsKPiArCWlvdnMgPSBrbWFsbG9jX2FycmF5KGNyZWF0ZS5uaW92LCBzaXplb2Yo c3RydWN0IHVkbWFidWZfaW92ZWMpLAo+ICsJCQkgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFp b3ZzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWFyZyArPSBvZmZzZXRvZihzdHJ1Y3Qg dWRtYWJ1Zl9jcmVhdGUsIGlvdnMpOwo+ICsJcmV0ID0gLUVGQVVMVDsKPiArCWlmIChjb3B5X2Zy b21fdXNlcihpb3ZzLCAodm9pZCBfX3VzZXIgKilhcmcsCj4gKwkJCSAgIGNyZWF0ZS5uaW92ICog c2l6ZW9mKHN0cnVjdCB1ZG1hYnVmX2lvdmVjKSkpCj4gKwkJZ290byBlcnJfZnJlZV9pb3ZzOwo+ ICsKPiArCXVidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRtYWJ1ZiksIEdGUF9LRVJORUwp Owo+ICsJaWYgKCF1YnVmKQo+ICsJCWdvdG8gZXJyX2ZyZWVfaW92czsKPiArCj4gKwlyZXQgPSAt RUlOVkFMOwo+ICsJZm9yIChpb3YgPSAwOyBpb3YgPCBjcmVhdGUubmlvdjsgaW92KyspIHsKPiAr CQlpZiAoIUlTX0FMSUdORUQoaW92c1tpb3ZdLmJhc2UsIFBBR0VfU0laRSkpCj4gKwkJCWdvdG8g ZXJyX2ZyZWVfaW92czsKPiArCQlpZiAoIUlTX0FMSUdORUQoaW92c1tpb3ZdLmxlbiwgUEFHRV9T SVpFKSkKPiArCQkJZ290byBlcnJfZnJlZV9pb3ZzOwo+ICsJCXVidWYtPnBhZ2Vjb3VudCArPSBp b3ZzW2lvdl0ubGVuID4+IFBBR0VfU0hJRlQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gLUVOT01FTTsK PiArCXVidWYtPnBhZ2VzID0ga21hbGxvY19hcnJheSh1YnVmLT5wYWdlY291bnQsIHNpemVvZihz dHJ1Y3QgcGFnZSopLAo+ICsJCQkJICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCF1YnVmLT5wYWdl cykKPiArCQlnb3RvIGVycl9mcmVlX2J1ZjsKPiArCj4gKwlwZ29mZiA9IDA7Cj4gKwlmb3IgKGlv diA9IDA7IGlvdiA8IGNyZWF0ZS5uaW92OyBpb3YrKykgewo+ICsJCXBnY250ID0gaW92c1tpb3Zd LmxlbiA+PiBQQUdFX1NISUZUOwo+ICsJCXdoaWxlIChwZ2NudCA+IDApIHsKPiArCQkJcmV0ID0g Z2V0X3VzZXJfcGFnZXNfZmFzdChpb3ZzW2lvdl0uYmFzZSwgcGdjbnQsCj4gKwkJCQkJCSAgdHJ1 ZSwgLyogd3JpdGUgKi8KPiArCQkJCQkJICB1YnVmLT5wYWdlcyArIHBnb2ZmKTsKPiArCQkJaWYg KHJldCA8IDApCj4gKwkJCQlnb3RvIGVycl9wdXRfcGFnZXM7Cj4gKwkJCXBnb2ZmICs9IHJldDsK PiArCQkJcGdjbnQgLT0gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlleHBfaW5mby5vcHMgID0g JnVkbWFidWZfb3BzOwo+ICsJZXhwX2luZm8uc2l6ZSA9IHVidWYtPnBhZ2Vjb3VudCA8PCBQQUdF X1NISUZUOwo+ICsJZXhwX2luZm8ucHJpdiA9IHVidWY7Cj4gKwo+ICsJYnVmID0gZG1hX2J1Zl9l eHBvcnQoJmV4cF9pbmZvKTsKPiArCWlmIChJU19FUlIoYnVmKSkgewo+ICsJCXJldCA9IFBUUl9F UlIoYnVmKTsKPiArCQlnb3RvIGVycl9wdXRfcGFnZXM7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUoaW92 cyk7Cj4gKwlyZXR1cm4gZG1hX2J1Zl9mZChidWYsIDApOwo+ICsKPiArZXJyX3B1dF9wYWdlczoK PiArCXdoaWxlIChwZ29mZiA+IDApCj4gKwkJcHV0X3BhZ2UodWJ1Zi0+cGFnZXNbLS1wZ29mZl0p Owo+ICtlcnJfZnJlZV9idWY6Cj4gKwlrZnJlZSh1YnVmLT5wYWdlcyk7Cj4gKwlrZnJlZSh1YnVm KTsKPiArZXJyX2ZyZWVfaW92czoKPiArCWtmcmVlKGlvdnMpOwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIGxvbmcgdWRtYWJ1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5z aWduZWQgaW50IGlvY3RsLAo+ICsJCQkJICB1bnNpZ25lZCBsb25nIGFyZykKPiArewo+ICsJbG9u ZyByZXQ7Cj4gKwo+ICsJc3dpdGNoIChpb2N0bCkgewo+ICsJY2FzZSBVRE1BQlVGX0NSRUFURToK PiArCQlyZXQgPSB1ZG1hYnVmX2lvY3RsX2NyZWF0ZShmaWxwLCBhcmcpOwo+ICsJCWJyZWFrOwo+ ICsJZGVmYXVsdDoKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJcmV0 dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg dWRtYWJ1Zl9mb3BzID0gewo+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ICsJLnVubG9ja2Vk X2lvY3RsID0gdWRtYWJ1Zl9pb2N0bCwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlzY2Rl dmljZSB1ZG1hYnVmX21pc2MgPSB7Cj4gKwkubWlub3IgICAgICAgICAgPSBNSVNDX0RZTkFNSUNf TUlOT1IsCj4gKwkubmFtZSAgICAgICAgICAgPSAidWRtYWJ1ZiIsCj4gKwkuZm9wcyAgICAgICAg ICAgPSAmdWRtYWJ1Zl9mb3BzLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQgdWRtYWJ1 Zl9kZXZfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IG1pc2NfcmVn aXN0ZXIoJnVkbWFidWZfbWlzYyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCB1ZG1hYnVmX2Rldl9l eGl0KHZvaWQpCj4gK3sKPiArCW1pc2NfZGVyZWdpc3RlcigmdWRtYWJ1Zl9taXNjKTsKPiArfQo+ ICsKPiArbW9kdWxlX2luaXQodWRtYWJ1Zl9kZXZfaW5pdCkKPiArbW9kdWxlX2V4aXQodWRtYWJ1 Zl9kZXZfZXhpdCkKPiArCj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9kbWEtYnVmL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwo+IGlu ZGV4IGVkM2I3ODViYWUuLjU4NzZiNTI1NTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9kbWEtYnVm L0tjb25maWcKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwo+IEBAIC0zMCw0ICszMCwx MSBAQCBjb25maWcgU1dfU1lOQwo+ICAJICBXQVJOSU5HOiBpbXByb3BlciB1c2Ugb2YgdGhpcyBj YW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbAo+ICAJICBkcml2ZXJzIGZyb20gdXNlcnNw YWNlLiBJbnRlbmRlZCBmb3IgdGVzdCBhbmQgZGVidWcgb25seS4KPiAgCj4gK2NvbmZpZyBVRE1B QlVGCj4gKwl0cmlzdGF0ZSAidXNlcnNwYWNlIGRtYWJ1ZiBtaXNjIGRyaXZlciIKPiArCWRlZmF1 bHQgbgo+ICsJZGVwZW5kcyBvbiBETUFfU0hBUkVEX0JVRkZFUgo+ICsJLS0taGVscC0tLQo+ICsJ ICBBIGRyaXZlciB0byBsZXQgdXNlcnNwYWNlIHR1cm4gaW92cyBpbnRvIGRtYS1idWZzLgo+ICsK PiAgZW5kbWVudQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUgYi9kcml2 ZXJzL2RtYS1idWYvTWFrZWZpbGUKPiBpbmRleCBjMzNiZjg4NjMxLi4wOTEzYTZjY2FiIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1 Zi9NYWtlZmlsZQo+IEBAIC0xLDMgKzEsNCBAQAo+ICBvYmoteSA6PSBkbWEtYnVmLm8gZG1hLWZl bmNlLm8gZG1hLWZlbmNlLWFycmF5Lm8gcmVzZXJ2YXRpb24ubyBzZXFuby1mZW5jZS5vCj4gIG9i ai0kKENPTkZJR19TWU5DX0ZJTEUpCQkrPSBzeW5jX2ZpbGUubwo+ICBvYmotJChDT05GSUdfU1df U1lOQykJCSs9IHN3X3N5bmMubyBzeW5jX2RlYnVnLm8KPiArb2JqLSQoQ09ORklHX1VETUFCVUYp CQkrPSB1ZG1hYnVmLm8KPiAtLSAKPiAyLjkuMwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUg RW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=