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.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 037BFC28CBC for ; Sun, 3 May 2020 09:55:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C47532073E for ; Sun, 3 May 2020 09:55:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=tronnes.org header.i=@tronnes.org header.b="BDCR6JKs" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728224AbgECJzA (ORCPT ); Sun, 3 May 2020 05:55:00 -0400 Received: from smtp.domeneshop.no ([194.63.252.55]:39205 "EHLO smtp.domeneshop.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727971AbgECJzA (ORCPT ); Sun, 3 May 2020 05:55:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tronnes.org ; s=ds201912; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=X21p+jrDOFBDYsPp52/LLvj2Q5MLglkIB748DUPTo+M=; b=BDCR6JKsZWj2U2CNJtoUdncGI7 jpvT+k83/iwkiwV/TFVA2gIuAKGMrK01zC6unOiQOZ9ip+qlBk3xD0WbssdHtaNpjIau1C38sidqM I55pNa+yTDXqTbOjpIVUIILipSIcqvK8jB5eUTT0UnJS58MarDXndiCjACKBytrhRqX1chpXh5ixc moUPICcKqh1/u7cexG/3XYj+LNxcQdTcGXmLxpwQfc52v0V2G304XBuf+Pc5mDeLhkumZ4eW87vI4 1RDwiurcp0kZ/5BxvTggqtwtyF474tgdcW5iuE+cafPGCol/y3KuyWQ3QSpGuqOhmxBlpFoChlNEZ RWcxS7Kg==; Received: from 211.81-166-168.customer.lyse.net ([81.166.168.211]:54810 helo=[192.168.10.61]) by smtp.domeneshop.no with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jVBKr-0005Um-DC; Sun, 03 May 2020 11:54:57 +0200 Subject: Re: [PATCH 04/10] drm/client: Add drm_client_framebuffer_flush() To: Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-usb@vger.kernel.org References: <20200429124830.27475-1-noralf@tronnes.org> <20200429124830.27475-5-noralf@tronnes.org> <20200503074837.GB11582@ravnborg.org> From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Message-ID: <17a3a14e-c4ea-6da6-db4e-675825ff0a11@tronnes.org> Date: Sun, 3 May 2020 11:54:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200503074837.GB11582@ravnborg.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Den 03.05.2020 09.48, skrev Sam Ravnborg: > Hi Noralf. > > On Wed, Apr 29, 2020 at 02:48:24PM +0200, Noralf Trønnes wrote: >> Some drivers need explicit flushing of buffer changes, add a function >> that does that. > I trust you on this. All drivers in tiny/ and at least udl need to be told to flush changes. For userspace this happens either by calling DRM_IOCTL_MODE_DIRTYFB or doing a page/buffer flip DRM_IOCTL_MODE_PAGE_FLIP or do a DRM_IOCTL_MODE_ATOMIC (can contain damage report using plane property FB_DAMAGE_CLIPS). For drivers that use drm_gem_fb_create_with_dirty() and the drm_damage_helper (all of them now I think) this will result in an atomic commit. The driver can use drm_atomic_helper_damage_merged() to get the combined damage rectangle. Noralf. > >> >> Signed-off-by: Noralf Trønnes > Some bikeshedding below. Either way: > Reviewed-by: Sam Ravnborg > >> --- >> drivers/gpu/drm/drm_client.c | 31 +++++++++++++++++++++++++++++++ >> include/drm/drm_client.h | 1 + >> 2 files changed, 32 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_client.c b/drivers/gpu/drm/drm_client.c >> index cb5ee9f1ffaa..8dbc2ecdcaea 100644 >> --- a/drivers/gpu/drm/drm_client.c >> +++ b/drivers/gpu/drm/drm_client.c >> @@ -483,6 +483,37 @@ void drm_client_framebuffer_delete(struct drm_client_buffer *buffer) >> } >> EXPORT_SYMBOL(drm_client_framebuffer_delete); >> >> +/** >> + * drm_client_framebuffer_flush - Manually flush client framebuffer >> + * @buffer: DRM client buffer (can be NULL) >> + * @rect: Damage rectangle (if NULL flushes all) >> + * >> + * This calls &drm_framebuffer_funcs->dirty (if present) to flush buffer changes >> + * for drivers that need it. >> + * >> + * Returns: >> + * Zero on success or negative error code on failure. >> + */ > > Alternative proposal - that I think is simpler. > But both variants works for me. >> +int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect) >> +{ > struct drm_framebuffer_funcs *funcs; > struct drm_clip_rect clip; >> + >> + if (!buffer || !buffer->fb || !buffer->fb->funcs->dirty) >> + return 0; > funcs = buffer->fb->funcs; >> + >> + if (rect) { >> + clip.x1 = rect->x1; >> + clip.y1 = rect->y1; >> + clip.x2 = rect->x2; >> + clip.y2 = rect->y2; > return funcs->dirty(buffer->fb, buffer->client->file, > 0, 0, &clip, 1); >> + } else { > return funcs->dirty(buffer->fb, buffer->client->file, > 0, 0, NULL, 0); > } > >> + >> + return buffer->fb->funcs->dirty(buffer->fb, buffer->client->file, >> + 0, 0, clip, clip ? 1 : 0); >> +} >> +EXPORT_SYMBOL(drm_client_framebuffer_flush); >> + >> #ifdef CONFIG_DEBUG_FS >> static int drm_client_debugfs_internal_clients(struct seq_file *m, void *data) >> { >> diff --git a/include/drm/drm_client.h b/include/drm/drm_client.h >> index bbb5689fa9a8..6ef5364d6dfb 100644 >> --- a/include/drm/drm_client.h >> +++ b/include/drm/drm_client.h >> @@ -156,6 +156,7 @@ struct drm_client_buffer { >> struct drm_client_buffer * >> drm_client_framebuffer_create(struct drm_client_dev *client, u32 width, u32 height, u32 format); >> void drm_client_framebuffer_delete(struct drm_client_buffer *buffer); >> +int drm_client_framebuffer_flush(struct drm_client_buffer *buffer, struct drm_rect *rect); >> void *drm_client_buffer_vmap(struct drm_client_buffer *buffer); >> void drm_client_buffer_vunmap(struct drm_client_buffer *buffer); >> >> -- >> 2.23.0 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel 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.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 7FA16C47257 for ; Sun, 3 May 2020 09:55:02 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 533CA2073E for ; Sun, 3 May 2020 09:55:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=tronnes.org header.i=@tronnes.org header.b="BDCR6JKs" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 533CA2073E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=tronnes.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 21DF66E162; Sun, 3 May 2020 09:55:01 +0000 (UTC) Received: from smtp.domeneshop.no (smtp.domeneshop.no [194.63.252.55]) by gabe.freedesktop.org (Postfix) with ESMTPS id A79E36E162 for ; Sun, 3 May 2020 09:54:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tronnes.org ; s=ds201912; h=Content-Transfer-Encoding:Content-Type:In-Reply-To: MIME-Version:Date:Message-ID:From:References:Cc:To:Subject:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=X21p+jrDOFBDYsPp52/LLvj2Q5MLglkIB748DUPTo+M=; b=BDCR6JKsZWj2U2CNJtoUdncGI7 jpvT+k83/iwkiwV/TFVA2gIuAKGMrK01zC6unOiQOZ9ip+qlBk3xD0WbssdHtaNpjIau1C38sidqM I55pNa+yTDXqTbOjpIVUIILipSIcqvK8jB5eUTT0UnJS58MarDXndiCjACKBytrhRqX1chpXh5ixc moUPICcKqh1/u7cexG/3XYj+LNxcQdTcGXmLxpwQfc52v0V2G304XBuf+Pc5mDeLhkumZ4eW87vI4 1RDwiurcp0kZ/5BxvTggqtwtyF474tgdcW5iuE+cafPGCol/y3KuyWQ3QSpGuqOhmxBlpFoChlNEZ RWcxS7Kg==; Received: from 211.81-166-168.customer.lyse.net ([81.166.168.211]:54810 helo=[192.168.10.61]) by smtp.domeneshop.no with esmtpsa (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1jVBKr-0005Um-DC; Sun, 03 May 2020 11:54:57 +0200 Subject: Re: [PATCH 04/10] drm/client: Add drm_client_framebuffer_flush() To: Sam Ravnborg References: <20200429124830.27475-1-noralf@tronnes.org> <20200429124830.27475-5-noralf@tronnes.org> <20200503074837.GB11582@ravnborg.org> From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Message-ID: <17a3a14e-c4ea-6da6-db4e-675825ff0a11@tronnes.org> Date: Sun, 3 May 2020 11:54:56 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200503074837.GB11582@ravnborg.org> X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-usb@vger.kernel.org, dri-devel@lists.freedesktop.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" CgpEZW4gMDMuMDUuMjAyMCAwOS40OCwgc2tyZXYgU2FtIFJhdm5ib3JnOgo+IEhpIE5vcmFsZi4K PiAKPiBPbiBXZWQsIEFwciAyOSwgMjAyMCBhdCAwMjo0ODoyNFBNICswMjAwLCBOb3JhbGYgVHLD uG5uZXMgd3JvdGU6Cj4+IFNvbWUgZHJpdmVycyBuZWVkIGV4cGxpY2l0IGZsdXNoaW5nIG9mIGJ1 ZmZlciBjaGFuZ2VzLCBhZGQgYSBmdW5jdGlvbgo+PiB0aGF0IGRvZXMgdGhhdC4KPiBJIHRydXN0 IHlvdSBvbiB0aGlzLgoKQWxsIGRyaXZlcnMgaW4gdGlueS8gYW5kIGF0IGxlYXN0IHVkbCBuZWVk IHRvIGJlIHRvbGQgdG8gZmx1c2ggY2hhbmdlcy4KRm9yIHVzZXJzcGFjZSB0aGlzIGhhcHBlbnMg ZWl0aGVyIGJ5IGNhbGxpbmcgRFJNX0lPQ1RMX01PREVfRElSVFlGQiBvcgpkb2luZyBhIHBhZ2Uv YnVmZmVyIGZsaXAgRFJNX0lPQ1RMX01PREVfUEFHRV9GTElQIG9yIGRvIGEKRFJNX0lPQ1RMX01P REVfQVRPTUlDIChjYW4gY29udGFpbiBkYW1hZ2UgcmVwb3J0IHVzaW5nIHBsYW5lIHByb3BlcnR5 CkZCX0RBTUFHRV9DTElQUykuIEZvciBkcml2ZXJzIHRoYXQgdXNlIGRybV9nZW1fZmJfY3JlYXRl X3dpdGhfZGlydHkoKQphbmQgdGhlIGRybV9kYW1hZ2VfaGVscGVyIChhbGwgb2YgdGhlbSBub3cg SSB0aGluaykgdGhpcyB3aWxsIHJlc3VsdCBpbgphbiBhdG9taWMgY29tbWl0LiBUaGUgZHJpdmVy IGNhbiB1c2UgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX21lcmdlZCgpCnRvIGdldCB0aGUgY29t YmluZWQgZGFtYWdlIHJlY3RhbmdsZS4KCk5vcmFsZi4KCj4gCj4+Cj4+IFNpZ25lZC1vZmYtYnk6 IE5vcmFsZiBUcsO4bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+IFNvbWUgYmlrZXNoZWRkaW5n IGJlbG93LiBFaXRoZXIgd2F5Ogo+IFJldmlld2VkLWJ5OiBTYW0gUmF2bmJvcmcgPHNhbUByYXZu Ym9yZy5vcmc+Cj4gCj4+IC0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2RybV9jbGllbnQuYyB8IDMx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIGluY2x1ZGUvZHJtL2RybV9jbGll bnQuaCAgICAgfCAgMSArCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKPj4K Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY2xpZW50LmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2NsaWVudC5jCj4+IGluZGV4IGNiNWVlOWYxZmZhYS4uOGRiYzJlY2RjYWVhIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jCj4+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fY2xpZW50LmMKPj4gQEAgLTQ4Myw2ICs0ODMsMzcgQEAgdm9pZCBkcm1f Y2xpZW50X2ZyYW1lYnVmZmVyX2RlbGV0ZShzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZl cikKPj4gIH0KPj4gIEVYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9mcmFtZWJ1ZmZlcl9kZWxldGUp Owo+PiAgCj4+ICsvKioKPj4gKyAqIGRybV9jbGllbnRfZnJhbWVidWZmZXJfZmx1c2ggLSBNYW51 YWxseSBmbHVzaCBjbGllbnQgZnJhbWVidWZmZXIKPj4gKyAqIEBidWZmZXI6IERSTSBjbGllbnQg YnVmZmVyIChjYW4gYmUgTlVMTCkKPj4gKyAqIEByZWN0OiBEYW1hZ2UgcmVjdGFuZ2xlIChpZiBO VUxMIGZsdXNoZXMgYWxsKQo+PiArICoKPj4gKyAqIFRoaXMgY2FsbHMgJmRybV9mcmFtZWJ1ZmZl cl9mdW5jcy0+ZGlydHkgKGlmIHByZXNlbnQpIHRvIGZsdXNoIGJ1ZmZlciBjaGFuZ2VzCj4+ICsg KiBmb3IgZHJpdmVycyB0aGF0IG5lZWQgaXQuCj4+ICsgKgo+PiArICogUmV0dXJuczoKPj4gKyAq IFplcm8gb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4+ICsg Ki8KPiAKPiBBbHRlcm5hdGl2ZSBwcm9wb3NhbCAtIHRoYXQgSSB0aGluayBpcyBzaW1wbGVyLgo+ IEJ1dCBib3RoIHZhcmlhbnRzIHdvcmtzIGZvciBtZS4KPj4gK2ludCBkcm1fY2xpZW50X2ZyYW1l YnVmZmVyX2ZsdXNoKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZHJt X3JlY3QgKnJlY3QpCj4+ICt7Cj4gCXN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgKmZ1bmNz Owo+IAlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwOwo+PiArCj4+ICsJaWYgKCFidWZmZXIgfHwg IWJ1ZmZlci0+ZmIgfHwgIWJ1ZmZlci0+ZmItPmZ1bmNzLT5kaXJ0eSkKPj4gKwkJcmV0dXJuIDA7 Cj4gCWZ1bmNzID0gYnVmZmVyLT5mYi0+ZnVuY3M7Cj4+ICsKPj4gKwlpZiAocmVjdCkgewo+PiAr CQljbGlwLngxID0gcmVjdC0+eDE7Cj4+ICsJCWNsaXAueTEgPSByZWN0LT55MTsKPj4gKwkJY2xp cC54MiA9IHJlY3QtPngyOwo+PiArCQljbGlwLnkyID0gcmVjdC0+eTI7Cj4gCQlyZXR1cm4gZnVu Y3MtPmRpcnR5KGJ1ZmZlci0+ZmIsIGJ1ZmZlci0+Y2xpZW50LT5maWxlLAo+IAkJCQkgICAgMCwg MCwgJmNsaXAsIDEpOwo+PiArCX0gZWxzZSB7Cj4gCQlyZXR1cm4gZnVuY3MtPmRpcnR5KGJ1ZmZl ci0+ZmIsIGJ1ZmZlci0+Y2xpZW50LT5maWxlLAo+IAkJCQkgICAgMCwgMCwgTlVMTCwgMCk7Cj4g CX0KPiAKPj4gKwo+PiArCXJldHVybiBidWZmZXItPmZiLT5mdW5jcy0+ZGlydHkoYnVmZmVyLT5m YiwgYnVmZmVyLT5jbGllbnQtPmZpbGUsCj4+ICsJCQkJCTAsIDAsIGNsaXAsIGNsaXAgPyAxIDog MCk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfZnJhbWVidWZmZXJfZmx1c2gp Owo+PiArCj4+ICAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4+ICBzdGF0aWMgaW50IGRybV9jbGll bnRfZGVidWdmc19pbnRlcm5hbF9jbGllbnRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0 YSkKPj4gIHsKPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaCBiL2luY2x1 ZGUvZHJtL2RybV9jbGllbnQuaAo+PiBpbmRleCBiYmI1Njg5ZmE5YTguLjZlZjUzNjRkNmRmYiAx MDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9jbGllbnQuaAo+PiBAQCAtMTU2LDYgKzE1Niw3IEBAIHN0cnVjdCBkcm1fY2xpZW50 X2J1ZmZlciB7Cj4+ICBzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKgo+PiAgZHJtX2NsaWVudF9m cmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsIHUzMiB3aWR0 aCwgdTMyIGhlaWdodCwgdTMyIGZvcm1hdCk7Cj4+ICB2b2lkIGRybV9jbGllbnRfZnJhbWVidWZm ZXJfZGVsZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKTsKPj4gK2ludCBkcm1f Y2xpZW50X2ZyYW1lYnVmZmVyX2ZsdXNoKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVy LCBzdHJ1Y3QgZHJtX3JlY3QgKnJlY3QpOwo+PiAgdm9pZCAqZHJtX2NsaWVudF9idWZmZXJfdm1h cChzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcik7Cj4+ICB2b2lkIGRybV9jbGllbnRf YnVmZmVyX3Z1bm1hcChzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcik7Cj4+ICAKPj4g LS0gCj4+IDIuMjMuMAo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IGRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==