From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7A6DFEA6 for ; Thu, 28 Apr 2022 08:11:21 +0000 (UTC) Received: by mail-ed1-f50.google.com with SMTP id a1so4603674edt.3 for ; Thu, 28 Apr 2022 01:11:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QbyW2w5H9Ka2dhH/td4Wv+BKvF3xkANmkzFDgDmtue8=; b=HQd0kA1m+C0QmxadGWI0aCnyBHVFA1iHFAk7jfMw/UasZhv5pwI0KjaJMVRZkCZJrN 3RJnGXNm690WuQIt8pfRrbTLKQ1Nms+m2XDpJ9LNekWnCm2K8Ui8JKrkDzneuxOGmTiX QNn7/8dMRKWKcyqLeUTKIwgoM4yOr5HtUeyLv/HyxOQ/r5tPZemUURmEtvDGsd/zVffS lvdQFqxKBjTVBj1/erDk9ys6Uz5S++FRcWrPetzXefU3bETPA57Z6WNmtlydmNewV0gF wI7HlColpG+y6428UPuUPlM6j25PgnSdNT/44LXg/9cRXjQZK6rhAKz/qgOj+fhkb4Vl d9UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QbyW2w5H9Ka2dhH/td4Wv+BKvF3xkANmkzFDgDmtue8=; b=L0SKAsSIjeuTuC+0LyV5TiDBKJiuXf4O/1RMAOPYpeLx/7uqiF/2nd0mfMq17ixJdK ONwMgc03hfZQqwmqZ+UJOfrGXakm+I+cM6daO70IeD0bjZyj0NXs1pzJtwyJNp+NET3F 2y0QwDFHB/PatsRehDGrkTOpdvyBy0SqrzrpZLWJRrTnbP5mAXNw3pWbNWVsMZvkBrMx YZW89U0WR2swVuF6ZZUyxwPReY1Z5CVcr1kpbJ+UWtg0+ukYIjmoNSrUOxE3EKlOa9jq aSiF1jYunpREgmT7Dgy1QPjEoNIx4QW1nfurVKIBFIbj8YpmtbkDz9qj43LHS3hLKD7d ROug== X-Gm-Message-State: AOAM533n0sauoEH/GJJ7F7tD1zrPe/2uwpUvsdj1tUWXkB9vqhEvOb9f vcSk7eZUSM5IjVBcXrj42jU= X-Google-Smtp-Source: ABdhPJwFw2pOZnyh9oRygVJ7qZsJlbB+WneoIlqrRr1h8lnQhxkv3D6qguqu3L0NrWtNcrca2PY/tQ== X-Received: by 2002:a05:6402:2995:b0:425:d3a1:28aa with SMTP id eq21-20020a056402299500b00425d3a128aamr27611771edb.247.1651133479617; Thu, 28 Apr 2022 01:11:19 -0700 (PDT) Received: from jernej-laptop.localnet (89-212-118-115.static.t-2.net. [89.212.118.115]) by smtp.gmail.com with ESMTPSA id e26-20020aa7d7da000000b0042617ba63ccsm1106214eds.86.2022.04.28.01.11.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Apr 2022 01:11:19 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Paul Kocialkowski Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Yong Deng , Mauro Carvalho Chehab , Chen-Yu Tsai , Samuel Holland , Laurent Pinchart , Maxime Ripard , Thomas Petazzoni Subject: Re: [PATCH v4 13/45] media: sun6i-csi: Introduce and use video helper functions Date: Thu, 28 Apr 2022 10:11:18 +0200 Message-ID: <1701259.X513TT2pbd@jernej-laptop> In-Reply-To: References: <20220415152811.636419-1-paul.kocialkowski@bootlin.com> <13001485.uLZWGnKmhe@jernej-laptop> Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="UTF-8" Dne =C4=8Detrtek, 28. april 2022 ob 10:04:37 CEST je Paul Kocialkowski napi= sal(a): > Hi Jernej, >=20 > On Wed 27 Apr 22, 20:50, Jernej =C5=A0krabec wrote: > > Dne petek, 15. april 2022 ob 17:27:39 CEST je Paul Kocialkowski=20 napisal(a): > > > Introduce some helpers for buffer and general video configuration. > > >=20 > > > Signed-off-by: Paul Kocialkowski > > > --- > > >=20 > > > .../platform/sunxi/sun6i-csi/sun6i_video.c | 46 +++++++++++------= =2D- > > > 1 file changed, 28 insertions(+), 18 deletions(-) > > >=20 > > > diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c > > > b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c index > > > e6c85fcc65bb..e47eeb27dc4e 100644 > > > --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c > > > +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c > > > @@ -92,6 +92,29 @@ static bool sun6i_video_format_check(u32 format) > > >=20 > > > return false; > > > =20 > > > } > > >=20 > > > +/* Video */ > > > + > > > +static void sun6i_video_buffer_configure(struct sun6i_csi_device > > > *csi_dev, > > > + struct=20 sun6i_csi_buffer > >=20 > > *csi_buffer) > >=20 > > > +{ > > > + csi_buffer->queued_to_csi =3D true; > > > + sun6i_csi_update_buf_addr(csi_dev, csi_buffer->dma_addr); > > > +} > > > + > > > +static void sun6i_video_configure(struct sun6i_csi_device *csi_dev) > > > +{ > > > + struct sun6i_video *video =3D &csi_dev->video; > > > + struct sun6i_csi_config config =3D { 0 }; > > > + > > > + config.pixelformat =3D video->format.fmt.pix.pixelformat; > > > + config.code =3D video->mbus_code; > > > + config.field =3D video->format.fmt.pix.field; > > > + config.width =3D video->format.fmt.pix.width; > > > + config.height =3D video->format.fmt.pix.height; > > > + > > > + sun6i_csi_update_config(csi_dev, &config); > > > +} > > > + > > >=20 > > > /* Queue */ > > > =20 > > > static int sun6i_video_queue_setup(struct vb2_queue *queue, > > >=20 > > > @@ -160,7 +183,6 @@ static int sun6i_video_start_streaming(struct > > > vb2_queue > > > *queue, struct video_device *video_dev =3D &video->video_dev; > > >=20 > > > struct sun6i_csi_buffer *buf; > > > struct sun6i_csi_buffer *next_buf; > > >=20 > > > - struct sun6i_csi_config config; > > >=20 > > > struct v4l2_subdev *subdev; > > > unsigned long flags; > > > int ret; > > >=20 > > > @@ -182,22 +204,13 @@ static int sun6i_video_start_streaming(struct > > > vb2_queue *queue, goto error_media_pipeline; > > >=20 > > > } > > >=20 > > > - config.pixelformat =3D video->format.fmt.pix.pixelformat; > > > - config.code =3D video->mbus_code; > > > - config.field =3D video->format.fmt.pix.field; > > > - config.width =3D video->format.fmt.pix.width; > > > - config.height =3D video->format.fmt.pix.height; > > > - > > > - ret =3D sun6i_csi_update_config(csi_dev, &config); > > > - if (ret < 0) > > > - goto error_media_pipeline; > > > + sun6i_video_configure(csi_dev); > >=20 > > What happened to that error handling? New helper function ignores return > > value of sun6i_csi_update_config(). Why? >=20 > Ah that's a good point, the error value is still being returned by > sun6i_csi_update_config so it should be kept around at this stage. >=20 > Note that this is a transitional commit and sun6i_video_configure > (which gets renamed to sun6i_csi_capture_configure) is eventually > reworked to only configure registers (no checks) and returns void. >=20 > If you think it's important to keep it in the meantime I can do that. If it's only transitional, then it's fine. Reviewed-by: Jernej Skrabec Best regards, Jernej >=20 > Paul >=20 > > Best regards, > > Jernej > >=20 > > > spin_lock_irqsave(&video->dma_queue_lock, flags); > > > =09 > > > buf =3D list_first_entry(&video->dma_queue, > > > =09 > > > struct sun6i_csi_buffer, list); > > >=20 > > > - buf->queued_to_csi =3D true; > > > - sun6i_csi_update_buf_addr(csi_dev, buf->dma_addr); > > > + sun6i_video_buffer_configure(csi_dev, buf); > > >=20 > > > sun6i_csi_set_stream(csi_dev, true); > > >=20 > > > @@ -219,8 +232,7 @@ static int sun6i_video_start_streaming(struct > > > vb2_queue > > > *queue, * would also drop frame when lacking of queued buffer. > > >=20 > > > */ > > > =09 > > > next_buf =3D list_next_entry(buf, list); > > >=20 > > > - next_buf->queued_to_csi =3D true; > > > - sun6i_csi_update_buf_addr(csi_dev, next_buf->dma_addr); > > > + sun6i_video_buffer_configure(csi_dev, next_buf); > > >=20 > > > spin_unlock_irqrestore(&video->dma_queue_lock, flags); > > >=20 > > > @@ -294,8 +306,7 @@ void sun6i_video_frame_done(struct sun6i_csi_devi= ce > > > *csi_dev) * for next ISR call. > > >=20 > > > */ > > > =09 > > > if (!next_buf->queued_to_csi) { > > >=20 > > > - next_buf->queued_to_csi =3D true; > > > - sun6i_csi_update_buf_addr(csi_dev, next_buf- >dma_addr); > > > + sun6i_video_buffer_configure(csi_dev, next_buf); > > >=20 > > > dev_dbg(csi_dev->dev, "Frame dropped!\n"); > > > goto complete; > > > =09 > > > } > > >=20 > > > @@ -309,8 +320,7 @@ void sun6i_video_frame_done(struct sun6i_csi_devi= ce > > > *csi_dev) /* Prepare buffer for next frame but one. */ > > >=20 > > > if (!list_is_last(&next_buf->list, &video->dma_queue)) { > > > =09 > > > next_buf =3D list_next_entry(next_buf, list); > > >=20 > > > - next_buf->queued_to_csi =3D true; > > > - sun6i_csi_update_buf_addr(csi_dev, next_buf- >dma_addr); > > > + sun6i_video_buffer_configure(csi_dev, next_buf); > > >=20 > > > } else { > > > =09 > > > dev_dbg(csi_dev->dev, "Next frame will be dropped! \n"); > > > =09 > > > } 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 2079CC433EF for ; Thu, 28 Apr 2022 08:12:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=S9DHSSnYVkRhsUzN1+EPzVRAd7LffO35ChF5pE7MGLQ=; b=yzvi3iDF2DdfCX BcIPPITJWaQL4bTt83b6f+/nObMbTXpPoxdgnzSPQlzyNngPjxrGsgOKHgcXeQrOGJQ7J4fLKe747 XE4KUiSH7RjO1tRTgxZwGknzrgHM71WkD4AW0c5IEcaJ2So0mKalTP/jrUw0DaJAlq6jirXvGG5tH HFMcBWzYR8KulRMZpYcyba8LpaLuhXgYtIEsdM8B6FpGLYoUkIx9WLJaLpcejtSwUlFUhCXEOhOqM gEliW23TK8dZ1alDAk1Ewh4kmjgLMBybOG/IwT3TsUL5Y8iVyOGomQwFpSgO+TJgTGd4tXpWsmdhY O7QHq2IE+A5KzBnSdUWw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1njzFF-005QVE-DN; Thu, 28 Apr 2022 08:11:25 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1njzFB-005QTP-7l for linux-arm-kernel@lists.infradead.org; Thu, 28 Apr 2022 08:11:23 +0000 Received: by mail-ed1-x530.google.com with SMTP id b24so4577822edu.10 for ; Thu, 28 Apr 2022 01:11:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QbyW2w5H9Ka2dhH/td4Wv+BKvF3xkANmkzFDgDmtue8=; b=HQd0kA1m+C0QmxadGWI0aCnyBHVFA1iHFAk7jfMw/UasZhv5pwI0KjaJMVRZkCZJrN 3RJnGXNm690WuQIt8pfRrbTLKQ1Nms+m2XDpJ9LNekWnCm2K8Ui8JKrkDzneuxOGmTiX QNn7/8dMRKWKcyqLeUTKIwgoM4yOr5HtUeyLv/HyxOQ/r5tPZemUURmEtvDGsd/zVffS lvdQFqxKBjTVBj1/erDk9ys6Uz5S++FRcWrPetzXefU3bETPA57Z6WNmtlydmNewV0gF wI7HlColpG+y6428UPuUPlM6j25PgnSdNT/44LXg/9cRXjQZK6rhAKz/qgOj+fhkb4Vl d9UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QbyW2w5H9Ka2dhH/td4Wv+BKvF3xkANmkzFDgDmtue8=; b=b53qEZbV4CUWD4X0/Y4rk5NJwUiO8twlvgRnB89rDri7D2rFtI1E3NMit1OFK1uIbV 9CKM4xfjHowSJjmgbz1dAXfCVgoIaKvcbTBs2bbEtGzLnpgtArZfWaehIbJ9HYjPWekL Zoq9GSX+WHdIlAp0PIucfe4+qYrFn0GC/ow50KXFU8armDL76/UH6OmC4zkaZeiFaw4v 54cPvKInRiEo8Db78s8kVNPDJxm0K/CD3iE3hxoNY+F/zaT+i3Etkq+OHNXXsAB9+vGM azZnY5UrkgjVOIs1+/g//mDV661wMLerVJSkDADpkBp1fhLkRWr9r/061q3/nL3Ky9gV kI7Q== X-Gm-Message-State: AOAM531rBM3zds16F1dwZPOBvi/vlLODMQc3+eUCDMfEMg+OJhqYA4kP 6zyrln+AVwlFntZIzdfpNVk= X-Google-Smtp-Source: ABdhPJwFw2pOZnyh9oRygVJ7qZsJlbB+WneoIlqrRr1h8lnQhxkv3D6qguqu3L0NrWtNcrca2PY/tQ== X-Received: by 2002:a05:6402:2995:b0:425:d3a1:28aa with SMTP id eq21-20020a056402299500b00425d3a128aamr27611771edb.247.1651133479617; Thu, 28 Apr 2022 01:11:19 -0700 (PDT) Received: from jernej-laptop.localnet (89-212-118-115.static.t-2.net. [89.212.118.115]) by smtp.gmail.com with ESMTPSA id e26-20020aa7d7da000000b0042617ba63ccsm1106214eds.86.2022.04.28.01.11.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Apr 2022 01:11:19 -0700 (PDT) From: Jernej =?utf-8?B?xaBrcmFiZWM=?= To: Paul Kocialkowski Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Yong Deng , Mauro Carvalho Chehab , Chen-Yu Tsai , Samuel Holland , Laurent Pinchart , Maxime Ripard , Thomas Petazzoni Subject: Re: [PATCH v4 13/45] media: sun6i-csi: Introduce and use video helper functions Date: Thu, 28 Apr 2022 10:11:18 +0200 Message-ID: <1701259.X513TT2pbd@jernej-laptop> In-Reply-To: References: <20220415152811.636419-1-paul.kocialkowski@bootlin.com> <13001485.uLZWGnKmhe@jernej-laptop> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220428_011121_330129_07CCC338 X-CRM114-Status: GOOD ( 28.73 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RG5lIMSNZXRydGVrLCAyOC4gYXByaWwgMjAyMiBvYiAxMDowNDozNyBDRVNUIGplIFBhdWwgS29j aWFsa293c2tpIG5hcGlzYWwoYSk6Cj4gSGkgSmVybmVqLAo+IAo+IE9uIFdlZCAyNyBBcHIgMjIs IDIwOjUwLCBKZXJuZWogxaBrcmFiZWMgd3JvdGU6Cj4gPiBEbmUgcGV0ZWssIDE1LiBhcHJpbCAy MDIyIG9iIDE3OjI3OjM5IENFU1QgamUgUGF1bCBLb2NpYWxrb3dza2kgCm5hcGlzYWwoYSk6Cj4g PiA+IEludHJvZHVjZSBzb21lIGhlbHBlcnMgZm9yIGJ1ZmZlciBhbmQgZ2VuZXJhbCB2aWRlbyBj b25maWd1cmF0aW9uLgo+ID4gPiAKPiA+ID4gU2lnbmVkLW9mZi1ieTogUGF1bCBLb2NpYWxrb3dz a2kgPHBhdWwua29jaWFsa293c2tpQGJvb3RsaW4uY29tPgo+ID4gPiAtLS0KPiA+ID4gCj4gPiA+ ICAuLi4vcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMgICAgfCA0NiArKysr KysrKysrKy0tLS0tLS0tCj4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwg MTggZGVsZXRpb25zKC0pCj4gPiA+IAo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfdmlkZW8uYwo+ID4gPiBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMgaW5kZXgKPiA+ID4gZTZj ODVmY2M2NWJiLi5lNDdlZWIyN2RjNGUgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMKPiA+ID4gKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfdmlkZW8uYwo+ID4gPiBAQCAt OTIsNiArOTIsMjkgQEAgc3RhdGljIGJvb2wgc3VuNmlfdmlkZW9fZm9ybWF0X2NoZWNrKHUzMiBm b3JtYXQpCj4gPiA+IAo+ID4gPiAgCXJldHVybiBmYWxzZTsKPiA+ID4gIAo+ID4gPiAgfQo+ID4g PiAKPiA+ID4gKy8qIFZpZGVvICovCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIHN1bjZpX3Zp ZGVvX2J1ZmZlcl9jb25maWd1cmUoc3RydWN0IHN1bjZpX2NzaV9kZXZpY2UKPiA+ID4gKmNzaV9k ZXYsCj4gPiA+ICsJCQkJCSBzdHJ1Y3QgCnN1bjZpX2NzaV9idWZmZXIKPiA+IAo+ID4gKmNzaV9i dWZmZXIpCj4gPiAKPiA+ID4gK3sKPiA+ID4gKwljc2lfYnVmZmVyLT5xdWV1ZWRfdG9fY3NpID0g dHJ1ZTsKPiA+ID4gKwlzdW42aV9jc2lfdXBkYXRlX2J1Zl9hZGRyKGNzaV9kZXYsIGNzaV9idWZm ZXItPmRtYV9hZGRyKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgc3VuNmlf dmlkZW9fY29uZmlndXJlKHN0cnVjdCBzdW42aV9jc2lfZGV2aWNlICpjc2lfZGV2KQo+ID4gPiAr ewo+ID4gPiArCXN0cnVjdCBzdW42aV92aWRlbyAqdmlkZW8gPSAmY3NpX2Rldi0+dmlkZW87Cj4g PiA+ICsJc3RydWN0IHN1bjZpX2NzaV9jb25maWcgY29uZmlnID0geyAwIH07Cj4gPiA+ICsKPiA+ ID4gKwljb25maWcucGl4ZWxmb3JtYXQgPSB2aWRlby0+Zm9ybWF0LmZtdC5waXgucGl4ZWxmb3Jt YXQ7Cj4gPiA+ICsJY29uZmlnLmNvZGUgPSB2aWRlby0+bWJ1c19jb2RlOwo+ID4gPiArCWNvbmZp Zy5maWVsZCA9IHZpZGVvLT5mb3JtYXQuZm10LnBpeC5maWVsZDsKPiA+ID4gKwljb25maWcud2lk dGggPSB2aWRlby0+Zm9ybWF0LmZtdC5waXgud2lkdGg7Cj4gPiA+ICsJY29uZmlnLmhlaWdodCA9 IHZpZGVvLT5mb3JtYXQuZm10LnBpeC5oZWlnaHQ7Cj4gPiA+ICsKPiA+ID4gKwlzdW42aV9jc2lf dXBkYXRlX2NvbmZpZyhjc2lfZGV2LCAmY29uZmlnKTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiAK PiA+ID4gIC8qIFF1ZXVlICovCj4gPiA+ICAKPiA+ID4gIHN0YXRpYyBpbnQgc3VuNmlfdmlkZW9f cXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqcXVldWUsCj4gPiA+IAo+ID4gPiBAQCAtMTYw LDcgKzE4Myw2IEBAIHN0YXRpYyBpbnQgc3VuNmlfdmlkZW9fc3RhcnRfc3RyZWFtaW5nKHN0cnVj dAo+ID4gPiB2YjJfcXVldWUKPiA+ID4gKnF1ZXVlLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRl b19kZXYgPSAmdmlkZW8tPnZpZGVvX2RldjsKPiA+ID4gCj4gPiA+ICAJc3RydWN0IHN1bjZpX2Nz aV9idWZmZXIgKmJ1ZjsKPiA+ID4gIAlzdHJ1Y3Qgc3VuNmlfY3NpX2J1ZmZlciAqbmV4dF9idWY7 Cj4gPiA+IAo+ID4gPiAtCXN0cnVjdCBzdW42aV9jc2lfY29uZmlnIGNvbmZpZzsKPiA+ID4gCj4g PiA+ICAJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7Cj4gPiA+ICAJdW5zaWduZWQgbG9uZyBm bGFnczsKPiA+ID4gIAlpbnQgcmV0Owo+ID4gPiAKPiA+ID4gQEAgLTE4MiwyMiArMjA0LDEzIEBA IHN0YXRpYyBpbnQgc3VuNmlfdmlkZW9fc3RhcnRfc3RyZWFtaW5nKHN0cnVjdAo+ID4gPiB2YjJf cXVldWUgKnF1ZXVlLCBnb3RvIGVycm9yX21lZGlhX3BpcGVsaW5lOwo+ID4gPiAKPiA+ID4gIAl9 Cj4gPiA+IAo+ID4gPiAtCWNvbmZpZy5waXhlbGZvcm1hdCA9IHZpZGVvLT5mb3JtYXQuZm10LnBp eC5waXhlbGZvcm1hdDsKPiA+ID4gLQljb25maWcuY29kZSA9IHZpZGVvLT5tYnVzX2NvZGU7Cj4g PiA+IC0JY29uZmlnLmZpZWxkID0gdmlkZW8tPmZvcm1hdC5mbXQucGl4LmZpZWxkOwo+ID4gPiAt CWNvbmZpZy53aWR0aCA9IHZpZGVvLT5mb3JtYXQuZm10LnBpeC53aWR0aDsKPiA+ID4gLQljb25m aWcuaGVpZ2h0ID0gdmlkZW8tPmZvcm1hdC5mbXQucGl4LmhlaWdodDsKPiA+ID4gLQo+ID4gPiAt CXJldCA9IHN1bjZpX2NzaV91cGRhdGVfY29uZmlnKGNzaV9kZXYsICZjb25maWcpOwo+ID4gPiAt CWlmIChyZXQgPCAwKQo+ID4gPiAtCQlnb3RvIGVycm9yX21lZGlhX3BpcGVsaW5lOwo+ID4gPiAr CXN1bjZpX3ZpZGVvX2NvbmZpZ3VyZShjc2lfZGV2KTsKPiA+IAo+ID4gV2hhdCBoYXBwZW5lZCB0 byB0aGF0IGVycm9yIGhhbmRsaW5nPyBOZXcgaGVscGVyIGZ1bmN0aW9uIGlnbm9yZXMgcmV0dXJu Cj4gPiB2YWx1ZSBvZiBzdW42aV9jc2lfdXBkYXRlX2NvbmZpZygpLiBXaHk/Cj4gCj4gQWggdGhh dCdzIGEgZ29vZCBwb2ludCwgdGhlIGVycm9yIHZhbHVlIGlzIHN0aWxsIGJlaW5nIHJldHVybmVk IGJ5Cj4gc3VuNmlfY3NpX3VwZGF0ZV9jb25maWcgc28gaXQgc2hvdWxkIGJlIGtlcHQgYXJvdW5k IGF0IHRoaXMgc3RhZ2UuCj4gCj4gTm90ZSB0aGF0IHRoaXMgaXMgYSB0cmFuc2l0aW9uYWwgY29t bWl0IGFuZCBzdW42aV92aWRlb19jb25maWd1cmUKPiAod2hpY2ggZ2V0cyByZW5hbWVkIHRvIHN1 bjZpX2NzaV9jYXB0dXJlX2NvbmZpZ3VyZSkgaXMgZXZlbnR1YWxseQo+IHJld29ya2VkIHRvIG9u bHkgY29uZmlndXJlIHJlZ2lzdGVycyAobm8gY2hlY2tzKSBhbmQgcmV0dXJucyB2b2lkLgo+IAo+ IElmIHlvdSB0aGluayBpdCdzIGltcG9ydGFudCB0byBrZWVwIGl0IGluIHRoZSBtZWFudGltZSBJ IGNhbiBkbyB0aGF0LgoKSWYgaXQncyBvbmx5IHRyYW5zaXRpb25hbCwgdGhlbiBpdCdzIGZpbmUu CgpSZXZpZXdlZC1ieTogSmVybmVqIFNrcmFiZWMgPGplcm5lai5za3JhYmVjQGdtYWlsLmNvbT4K CkJlc3QgcmVnYXJkcywKSmVybmVqCgo+IAo+IFBhdWwKPiAKPiA+IEJlc3QgcmVnYXJkcywKPiA+ IEplcm5lago+ID4gCj4gPiA+ICAJc3Bpbl9sb2NrX2lycXNhdmUoJnZpZGVvLT5kbWFfcXVldWVf bG9jaywgZmxhZ3MpOwo+ID4gPiAgCQo+ID4gPiAgCWJ1ZiA9IGxpc3RfZmlyc3RfZW50cnkoJnZp ZGVvLT5kbWFfcXVldWUsCj4gPiA+ICAJCj4gPiA+ICAJCQkgICAgICAgc3RydWN0IHN1bjZpX2Nz aV9idWZmZXIsIGxpc3QpOwo+ID4gPiAKPiA+ID4gLQlidWYtPnF1ZXVlZF90b19jc2kgPSB0cnVl Owo+ID4gPiAtCXN1bjZpX2NzaV91cGRhdGVfYnVmX2FkZHIoY3NpX2RldiwgYnVmLT5kbWFfYWRk cik7Cj4gPiA+ICsJc3VuNmlfdmlkZW9fYnVmZmVyX2NvbmZpZ3VyZShjc2lfZGV2LCBidWYpOwo+ ID4gPiAKPiA+ID4gIAlzdW42aV9jc2lfc2V0X3N0cmVhbShjc2lfZGV2LCB0cnVlKTsKPiA+ID4g Cj4gPiA+IEBAIC0yMTksOCArMjMyLDcgQEAgc3RhdGljIGludCBzdW42aV92aWRlb19zdGFydF9z dHJlYW1pbmcoc3RydWN0Cj4gPiA+IHZiMl9xdWV1ZQo+ID4gPiAqcXVldWUsICogd291bGQgYWxz byBkcm9wIGZyYW1lIHdoZW4gbGFja2luZyBvZiBxdWV1ZWQgYnVmZmVyLgo+ID4gPiAKPiA+ID4g IAkgKi8KPiA+ID4gIAkKPiA+ID4gIAluZXh0X2J1ZiA9IGxpc3RfbmV4dF9lbnRyeShidWYsIGxp c3QpOwo+ID4gPiAKPiA+ID4gLQluZXh0X2J1Zi0+cXVldWVkX3RvX2NzaSA9IHRydWU7Cj4gPiA+ IC0Jc3VuNmlfY3NpX3VwZGF0ZV9idWZfYWRkcihjc2lfZGV2LCBuZXh0X2J1Zi0+ZG1hX2FkZHIp Owo+ID4gPiArCXN1bjZpX3ZpZGVvX2J1ZmZlcl9jb25maWd1cmUoY3NpX2RldiwgbmV4dF9idWYp Owo+ID4gPiAKPiA+ID4gIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aWRlby0+ZG1hX3F1ZXVl X2xvY2ssIGZsYWdzKTsKPiA+ID4gCj4gPiA+IEBAIC0yOTQsOCArMzA2LDcgQEAgdm9pZCBzdW42 aV92aWRlb19mcmFtZV9kb25lKHN0cnVjdCBzdW42aV9jc2lfZGV2aWNlCj4gPiA+ICpjc2lfZGV2 KSAqIGZvciBuZXh0IElTUiBjYWxsLgo+ID4gPiAKPiA+ID4gIAkgKi8KPiA+ID4gIAkKPiA+ID4g IAlpZiAoIW5leHRfYnVmLT5xdWV1ZWRfdG9fY3NpKSB7Cj4gPiA+IAo+ID4gPiAtCQluZXh0X2J1 Zi0+cXVldWVkX3RvX2NzaSA9IHRydWU7Cj4gPiA+IC0JCXN1bjZpX2NzaV91cGRhdGVfYnVmX2Fk ZHIoY3NpX2RldiwgbmV4dF9idWYtCj5kbWFfYWRkcik7Cj4gPiA+ICsJCXN1bjZpX3ZpZGVvX2J1 ZmZlcl9jb25maWd1cmUoY3NpX2RldiwgbmV4dF9idWYpOwo+ID4gPiAKPiA+ID4gIAkJZGV2X2Ri Zyhjc2lfZGV2LT5kZXYsICJGcmFtZSBkcm9wcGVkIVxuIik7Cj4gPiA+ICAJCWdvdG8gY29tcGxl dGU7Cj4gPiA+ICAJCj4gPiA+ICAJfQo+ID4gPiAKPiA+ID4gQEAgLTMwOSw4ICszMjAsNyBAQCB2 b2lkIHN1bjZpX3ZpZGVvX2ZyYW1lX2RvbmUoc3RydWN0IHN1bjZpX2NzaV9kZXZpY2UKPiA+ID4g KmNzaV9kZXYpIC8qIFByZXBhcmUgYnVmZmVyIGZvciBuZXh0IGZyYW1lIGJ1dCBvbmUuICAqLwo+ ID4gPiAKPiA+ID4gIAlpZiAoIWxpc3RfaXNfbGFzdCgmbmV4dF9idWYtPmxpc3QsICZ2aWRlby0+ ZG1hX3F1ZXVlKSkgewo+ID4gPiAgCQo+ID4gPiAgCQluZXh0X2J1ZiA9IGxpc3RfbmV4dF9lbnRy eShuZXh0X2J1ZiwgbGlzdCk7Cj4gPiA+IAo+ID4gPiAtCQluZXh0X2J1Zi0+cXVldWVkX3RvX2Nz aSA9IHRydWU7Cj4gPiA+IC0JCXN1bjZpX2NzaV91cGRhdGVfYnVmX2FkZHIoY3NpX2RldiwgbmV4 dF9idWYtCj5kbWFfYWRkcik7Cj4gPiA+ICsJCXN1bjZpX3ZpZGVvX2J1ZmZlcl9jb25maWd1cmUo Y3NpX2RldiwgbmV4dF9idWYpOwo+ID4gPiAKPiA+ID4gIAl9IGVsc2Ugewo+ID4gPiAgCQo+ID4g PiAgCQlkZXZfZGJnKGNzaV9kZXYtPmRldiwgIk5leHQgZnJhbWUgd2lsbCBiZSBkcm9wcGVkIQpc biIpOwo+ID4gPiAgCQo+ID4gPiAgCX0KCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1h cm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==