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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A67DC6FD1F for ; Mon, 13 Mar 2023 16:52:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229765AbjCMQwQ (ORCPT ); Mon, 13 Mar 2023 12:52:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42778 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229612AbjCMQwP (ORCPT ); Mon, 13 Mar 2023 12:52:15 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35B7B2471B; Mon, 13 Mar 2023 09:51:42 -0700 (PDT) Received: from [192.168.0.192] (unknown [194.146.248.75]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: andrzej.p) by madras.collabora.co.uk (Postfix) with ESMTPSA id D9D0D6602135; Mon, 13 Mar 2023 16:51:29 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1678726291; bh=dmX8aSMDGdnKVVwb34Im4TzUC75nbAE+WEfMhqfpkKY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=UzL8AXuaUfv8YamQyQpf+4UGagM+ztPxrsuzVbGEdaf1Y+T4NBTJ8Pg0QAFFx1oqs sMnyl5XgTqO3yLpMi1Cd2XdGZAgkL7fh/x6W4LMmG0luQQlc5MEByNEGuLoVEXm2Bo Fb8FEYL3T6igcenf+H2Rxn7ZDNQGLKXIznqHvUA+6P0JuyiUnorhjEJTtS6gNjNp4I QrLealFvtUXSxaXGGVa7SutlClsrJBZBqcb69gOZGFJs4YQU16avJP3cW+XT/KzYqg bJQqipi4yi+A4JQ89cfMve9uUAl2yN7ec78aOyZOFNLUMc8ZiAlavE/BIP20sZBYMi txqySeN+zOhGw== Message-ID: <60c05cfb-9afb-3b25-7f91-71cf56ed6bfc@collabora.com> Date: Mon, 13 Mar 2023 17:51:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [RFC 1/4] media: videobuf2: Use vb2_get_buffer() as helper everywhere Content-Language: en-US To: Benjamin Gaignard , tfiga@chromium.org, m.szyprowski@samsung.com, mchehab@kernel.org, ming.qian@nxp.com, shijie.qin@nxp.com, eagle.zhou@nxp.com, bin.liu@mediatek.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, tiffany.lin@mediatek.com, andrew-ct.chen@mediatek.com, yunfei.dong@mediatek.com, stanimir.k.varbanov@gmail.com, quic_vgarodia@quicinc.com, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, daniel.almeida@collabora.com, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, jerbel@kernel.org Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-rockchip@lists.infradead.org, kernel@collabora.com References: <20230313135916.862852-1-benjamin.gaignard@collabora.com> <20230313135916.862852-2-benjamin.gaignard@collabora.com> From: Andrzej Pietrasiewicz In-Reply-To: <20230313135916.862852-2-benjamin.gaignard@collabora.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org Hi Benjamin, W dniu 13.03.2023 o 14:59, Benjamin Gaignard pisze: > The first step before changing how vb2 buffers are stored into queue > is to avoid direct call to bufs arrays. > This patch add 2 helpers functions to set and delete vb2 buffers > from a queue. With these 2 and vb2_get_buffer(), bufs field of > struct vb2_queue becomes like a private member of the structure. > > Signed-off-by: Benjamin Gaignard > --- > .../media/common/videobuf2/videobuf2-core.c | 69 ++++++++++--------- > .../media/common/videobuf2/videobuf2-v4l2.c | 17 +++-- > drivers/media/platform/amphion/vpu_dbg.c | 4 +- > .../platform/mediatek/jpeg/mtk_jpeg_core.c | 2 +- > .../vcodec/vdec/vdec_vp9_req_lat_if.c | 2 +- > drivers/media/test-drivers/visl/visl-dec.c | 16 +++-- > include/media/videobuf2-core.h | 20 ++++++ > 7 files changed, 81 insertions(+), 49 deletions(-) > > diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c > index cf6727d9c81f..b51152ace763 100644 > --- a/drivers/media/common/videobuf2/videobuf2-core.c > +++ b/drivers/media/common/videobuf2/videobuf2-core.c > @@ -359,7 +359,7 @@ static void __setup_offsets(struct vb2_buffer *vb) > unsigned long off = 0; > > if (vb->index) { > - struct vb2_buffer *prev = q->bufs[vb->index - 1]; > + struct vb2_buffer *prev = vb2_get_buffer(q, vb->index - 1); internally vb2_get_buffer() verifies the index is within allowed range, but... > struct vb2_plane *p = &prev->planes[prev->num_planes - 1]; > > off = PAGE_ALIGN(p->m.offset + p->length); > @@ -437,7 +437,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory, > } > call_void_bufop(q, init_buffer, vb); > > - q->bufs[vb->index] = vb; > + vb2_set_buffer(q, vb); > > /* Allocate video buffer memory for the MMAP type */ > if (memory == VB2_MEMORY_MMAP) { > @@ -445,7 +445,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory, > if (ret) { > dprintk(q, 1, "failed allocating memory for buffer %d\n", > buffer); > - q->bufs[vb->index] = NULL; > + vb2_del_buffer(q, vb); > kfree(vb); > break; > } > @@ -460,7 +460,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory, > dprintk(q, 1, "buffer %d %p initialization failed\n", > buffer, vb); > __vb2_buf_mem_free(vb); > - q->bufs[vb->index] = NULL; > + vb2_del_buffer(q, vb); > kfree(vb); > break; > } > @@ -483,7 +483,7 @@ static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) > > for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; > ++buffer) { > - vb = q->bufs[buffer]; > + vb = vb2_get_buffer(q, buffer); > if (!vb) > continue; > > @@ -511,7 +511,7 @@ static void __vb2_queue_free(struct vb2_queue *q, unsigned int buffers) > /* Call driver-provided cleanup function for each buffer, if provided */ > for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; > ++buffer) { > - struct vb2_buffer *vb = q->bufs[buffer]; > + struct vb2_buffer *vb = vb2_get_buffer(q, buffer); > > if (vb && vb->planes[0].mem_priv) > call_void_vb_qop(vb, buf_cleanup, vb); > @@ -591,8 +591,10 @@ static void __vb2_queue_free(struct vb2_queue *q, unsigned int buffers) > /* Free vb2 buffers */ > for (buffer = q->num_buffers - buffers; buffer < q->num_buffers; > ++buffer) { > - kfree(q->bufs[buffer]); > - q->bufs[buffer] = NULL; > + struct vb2_buffer *vb2 = vb2_get_buffer(q, buffer); > + > + vb2_del_buffer(q, vb2); > + kfree(vb2); > } > > q->num_buffers -= buffers; > @@ -628,7 +630,7 @@ static bool __buffers_in_use(struct vb2_queue *q) > { > unsigned int buffer; > for (buffer = 0; buffer < q->num_buffers; ++buffer) { > - if (vb2_buffer_in_use(q, q->bufs[buffer])) > + if (vb2_buffer_in_use(q, vb2_get_buffer(q, buffer))) > return true; > } > return false; > @@ -636,7 +638,7 @@ static bool __buffers_in_use(struct vb2_queue *q) > > void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb) > { > - call_void_bufop(q, fill_user_buffer, q->bufs[index], pb); > + call_void_bufop(q, fill_user_buffer, vb2_get_buffer(q, index), pb); > } > EXPORT_SYMBOL_GPL(vb2_core_querybuf); > > @@ -1547,7 +1549,7 @@ int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb) > struct vb2_buffer *vb; > int ret; > > - vb = q->bufs[index]; > + vb = vb2_get_buffer(q, index); > if (vb->state != VB2_BUF_STATE_DEQUEUED) { > dprintk(q, 1, "invalid buffer state %s\n", > vb2_state_name(vb->state)); > @@ -1618,7 +1620,7 @@ static int vb2_start_streaming(struct vb2_queue *q) > * correctly return them to vb2. > */ > for (i = 0; i < q->num_buffers; ++i) { > - vb = q->bufs[i]; > + vb = vb2_get_buffer(q, i); > if (vb->state == VB2_BUF_STATE_ACTIVE) > vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED); > } > @@ -1646,7 +1648,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb, > return -EIO; > } > > - vb = q->bufs[index]; > + vb = vb2_get_buffer(q, index); > > if (!req && vb->state != VB2_BUF_STATE_IN_REQUEST && > q->requires_requests) { > @@ -2022,12 +2024,15 @@ static void __vb2_queue_cancel(struct vb2_queue *q) > * to vb2 in stop_streaming(). > */ > if (WARN_ON(atomic_read(&q->owned_by_drv_count))) { > - for (i = 0; i < q->num_buffers; ++i) > - if (q->bufs[i]->state == VB2_BUF_STATE_ACTIVE) { > + for (i = 0; i < q->num_buffers; ++i) { > + struct vb2_buffer *vb2 = vb2_get_buffer(q, i); > + > + if (vb2->state == VB2_BUF_STATE_ACTIVE) { > pr_warn("driver bug: stop_streaming operation is leaving buf %p in active state\n", > - q->bufs[i]); > - vb2_buffer_done(q->bufs[i], VB2_BUF_STATE_ERROR); > + vb2); > + vb2_buffer_done(vb2, VB2_BUF_STATE_ERROR); > } > + } > /* Must be zero now */ > WARN_ON(atomic_read(&q->owned_by_drv_count)); > } > @@ -2061,7 +2066,7 @@ static void __vb2_queue_cancel(struct vb2_queue *q) > * be changed, so we can't move the buf_finish() to __vb2_dqbuf(). > */ > for (i = 0; i < q->num_buffers; ++i) { > - struct vb2_buffer *vb = q->bufs[i]; > + struct vb2_buffer *vb = vb2_get_buffer(q, i); > struct media_request *req = vb->req_obj.req; > > /* > @@ -2215,7 +2220,7 @@ static int __find_plane_by_offset(struct vb2_queue *q, unsigned long off, > * return its buffer and plane numbers. > */ > for (buffer = 0; buffer < q->num_buffers; ++buffer) { > - vb = q->bufs[buffer]; > + vb = vb2_get_buffer(q, buffer); > > for (plane = 0; plane < vb->num_planes; ++plane) { > if (vb->planes[plane].m.offset == off) { > @@ -2262,7 +2267,7 @@ int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type, > return -EINVAL; > } > > - vb = q->bufs[index]; > + vb = vb2_get_buffer(q, index); > > if (plane >= vb->num_planes) { > dprintk(q, 1, "buffer plane out of range\n"); > @@ -2339,7 +2344,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma) > if (ret) > goto unlock; > > - vb = q->bufs[buffer]; > + vb = vb2_get_buffer(q, buffer); > > /* > * MMAP requires page_aligned buffers. > @@ -2679,7 +2684,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read) > * Check if plane_count is correct > * (multiplane buffers are not supported). > */ > - if (q->bufs[0]->num_planes != 1) { > + if (vb2_get_buffer(q, 0)->num_planes != 1) { > ret = -EBUSY; > goto err_reqbufs; > } > @@ -2688,12 +2693,14 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read) > * Get kernel address of each buffer. > */ > for (i = 0; i < q->num_buffers; i++) { > - fileio->bufs[i].vaddr = vb2_plane_vaddr(q->bufs[i], 0); > + struct vb2_buffer *vb2 = vb2_get_buffer(q, i); > + > + fileio->bufs[i].vaddr = vb2_plane_vaddr(vb2, 0); > if (fileio->bufs[i].vaddr == NULL) { > ret = -EINVAL; > goto err_reqbufs; > } > - fileio->bufs[i].size = vb2_plane_size(q->bufs[i], 0); > + fileio->bufs[i].size = vb2_plane_size(vb2, 0); > } > > /* > @@ -2821,15 +2828,15 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_ > > fileio->cur_index = index; > buf = &fileio->bufs[index]; > - b = q->bufs[index]; > + b = vb2_get_buffer(q, index); > > /* > * Get number of bytes filled by the driver > */ > buf->pos = 0; > buf->queued = 0; > - buf->size = read ? vb2_get_plane_payload(q->bufs[index], 0) > - : vb2_plane_size(q->bufs[index], 0); > + buf->size = read ? vb2_get_plane_payload(b, 0) > + : vb2_plane_size(b, 0); > /* Compensate for data_offset on read in the multiplanar case. */ > if (is_multiplanar && read && > b->planes[0].data_offset < buf->size) { > @@ -2872,7 +2879,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_ > * Queue next buffer if required. > */ > if (buf->pos == buf->size || (!read && fileio->write_immediately)) { > - struct vb2_buffer *b = q->bufs[index]; > + struct vb2_buffer *b = vb2_get_buffer(q, index); > > /* > * Check if this is the last buffer to read. > @@ -2899,7 +2906,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_ > */ > buf->pos = 0; > buf->queued = 1; > - buf->size = vb2_plane_size(q->bufs[index], 0); > + buf->size = vb2_plane_size(vb2_get_buffer(q, index), 0); > fileio->q_count += 1; > /* > * If we are queuing up buffers for the first time, then > @@ -2970,7 +2977,7 @@ static int vb2_thread(void *data) > * Call vb2_dqbuf to get buffer back. > */ > if (prequeue) { > - vb = q->bufs[index++]; > + vb = vb2_get_buffer(q, index++); > prequeue--; > } else { > call_void_qop(q, wait_finish, q); > @@ -2979,7 +2986,7 @@ static int vb2_thread(void *data) > call_void_qop(q, wait_prepare, q); > dprintk(q, 5, "file io: vb2_dqbuf result: %d\n", ret); > if (!ret) > - vb = q->bufs[index]; > + vb = vb2_get_buffer(q, index); > } > if (ret || threadio->stop) > break; > diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c > index 1f5d235a8441..01b2bb957239 100644 > --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c > +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c > @@ -383,7 +383,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct media_device *md > return -EINVAL; > } > > - if (q->bufs[b->index] == NULL) { > + if (!vb2_get_buffer(q, b->index)) { > /* Should never happen */ > dprintk(q, 1, "%s: buffer is NULL\n", opname); > return -EINVAL; > @@ -394,7 +394,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q, struct media_device *md > return -EINVAL; > } > > - vb = q->bufs[b->index]; > + vb = vb2_get_buffer(q, b->index); > vbuf = to_vb2_v4l2_buffer(vb); > ret = __verify_planes_array(vb, b); > if (ret) > @@ -628,11 +628,14 @@ static const struct vb2_buf_ops v4l2_buf_ops = { > struct vb2_buffer *vb2_find_buffer(struct vb2_queue *q, u64 timestamp) > { > unsigned int i; > + struct vb2_buffer *vb2; > > - for (i = 0; i < q->num_buffers; i++) > - if (q->bufs[i]->copied_timestamp && > - q->bufs[i]->timestamp == timestamp) > - return vb2_get_buffer(q, i); > + for (i = 0; i < q->num_buffers; i++) { > + vb2 = vb2_get_buffer(q, i); > + if (vb2->copied_timestamp && > + vb2->timestamp == timestamp) > + return vb2; > + } > return NULL; > } > EXPORT_SYMBOL_GPL(vb2_find_buffer); > @@ -664,7 +667,7 @@ int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b) > dprintk(q, 1, "buffer index out of range\n"); > return -EINVAL; > } > - vb = q->bufs[b->index]; > + vb = vb2_get_buffer(q, b->index); > ret = __verify_planes_array(vb, b); > if (!ret) > vb2_core_querybuf(q, b->index, b); > diff --git a/drivers/media/platform/amphion/vpu_dbg.c b/drivers/media/platform/amphion/vpu_dbg.c > index 44b830ae01d8..8a423c1f6b55 100644 > --- a/drivers/media/platform/amphion/vpu_dbg.c > +++ b/drivers/media/platform/amphion/vpu_dbg.c > @@ -133,7 +133,7 @@ static int vpu_dbg_instance(struct seq_file *s, void *data) > > vq = v4l2_m2m_get_src_vq(inst->fh.m2m_ctx); > for (i = 0; i < vq->num_buffers; i++) { > - struct vb2_buffer *vb = vq->bufs[i]; > + struct vb2_buffer *vb = vb2_get_buffer(vq, i); > struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); > > if (vb->state == VB2_BUF_STATE_DEQUEUED) > @@ -148,7 +148,7 @@ static int vpu_dbg_instance(struct seq_file *s, void *data) > > vq = v4l2_m2m_get_dst_vq(inst->fh.m2m_ctx); > for (i = 0; i < vq->num_buffers; i++) { > - struct vb2_buffer *vb = vq->bufs[i]; > + struct vb2_buffer *vb = vb2_get_buffer(vq, i); > struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); > > if (vb->state == VB2_BUF_STATE_DEQUEUED) > diff --git a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c > index 969516a940ba..0be07f691d9a 100644 > --- a/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c > +++ b/drivers/media/platform/mediatek/jpeg/mtk_jpeg_core.c > @@ -603,7 +603,7 @@ static int mtk_jpeg_qbuf(struct file *file, void *priv, struct v4l2_buffer *buf) > return -EINVAL; > } > > - vb = vq->bufs[buf->index]; > + vb = vb2_get_buffer(vq, buf->index); > jpeg_src_buf = mtk_jpeg_vb2_to_srcbuf(vb); > jpeg_src_buf->bs_size = buf->m.planes[0].bytesused; > > diff --git a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c > index cbb6728b8a40..f5958b6d834a 100644 > --- a/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c > +++ b/drivers/media/platform/mediatek/vcodec/vdec/vdec_vp9_req_lat_if.c > @@ -1701,7 +1701,7 @@ static int vdec_vp9_slice_setup_core_buffer(struct vdec_vp9_slice_instance *inst > > /* update internal buffer's width/height */ > for (i = 0; i < vq->num_buffers; i++) { > - if (vb == vq->bufs[i]) { > + if (vb == vb2_get_buffer(vq, i)) { > instance->dpb[i].width = w; > instance->dpb[i].height = h; > break; > diff --git a/drivers/media/test-drivers/visl/visl-dec.c b/drivers/media/test-drivers/visl/visl-dec.c > index 318d675e5668..328016b456ba 100644 > --- a/drivers/media/test-drivers/visl/visl-dec.c > +++ b/drivers/media/test-drivers/visl/visl-dec.c > @@ -290,13 +290,14 @@ static void visl_tpg_fill(struct visl_ctx *ctx, struct visl_run *run) > for (i = 0; i < out_q->num_buffers; i++) { > char entry[] = "index: %u, state: %s, request_fd: %d, "; > u32 old_len = len; > - char *q_status = visl_get_vb2_state(out_q->bufs[i]->state); > + struct vb2_buffer *vb2 = vb2_get_buffer(out_q, i); > + char *q_status = visl_get_vb2_state(vb2->state); > > len += scnprintf(&buf[len], TPG_STR_BUF_SZ - len, > entry, i, q_status, > - to_vb2_v4l2_buffer(out_q->bufs[i])->request_fd); > + to_vb2_v4l2_buffer(vb2)->request_fd); > > - len += visl_fill_bytesused(to_vb2_v4l2_buffer(out_q->bufs[i]), > + len += visl_fill_bytesused(to_vb2_v4l2_buffer(vb2), > &buf[len], > TPG_STR_BUF_SZ - len); > > @@ -342,13 +343,14 @@ static void visl_tpg_fill(struct visl_ctx *ctx, struct visl_run *run) > len = 0; > for (i = 0; i < cap_q->num_buffers; i++) { > u32 old_len = len; > - char *q_status = visl_get_vb2_state(cap_q->bufs[i]->state); > + struct vb2_buffer *vb2 = vb2_get_buffer(cap_q, i); > + char *q_status = visl_get_vb2_state(vb2->state); > > len += scnprintf(&buf[len], TPG_STR_BUF_SZ - len, > "index: %u, status: %s, timestamp: %llu, is_held: %d", > - cap_q->bufs[i]->index, q_status, > - cap_q->bufs[i]->timestamp, > - to_vb2_v4l2_buffer(cap_q->bufs[i])->is_held); > + vb2->index, q_status, > + vb2->timestamp, > + to_vb2_v4l2_buffer(vb2)->is_held); > > tpg_gen_text(&ctx->tpg, basep, line++ * line_height, 16, &buf[old_len]); > frame_dprintk(ctx->dev, run->dst->sequence, "%s", &buf[old_len]); > diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h > index 4b6a9d2ea372..d18c57e7aef0 100644 > --- a/include/media/videobuf2-core.h > +++ b/include/media/videobuf2-core.h > @@ -1244,6 +1244,26 @@ static inline struct vb2_buffer *vb2_get_buffer(struct vb2_queue *q, > return NULL; > } > > +/** > + * vb2_set_buffer() - set a buffer to a queue > + * @q: pointer to &struct vb2_queue with videobuf2 queue. > + * @vb: pointer to &struct vb2_buffer to be added to the queue. > + */ > +static inline void vb2_set_buffer(struct vb2_queue *q, struct vb2_buffer *vb) > +{ > + q->bufs[vb->index] = vb; neither this... > +} > + > +/** > + * vb2_del_buffer() - remove a buffer from a queue > + * @q: pointer to &struct vb2_queue with videobuf2 queue. > + * @vb: pointer to &struct vb2_buffer to be removed from the queue. > + */ > +static inline void vb2_del_buffer(struct vb2_queue *q, struct vb2_buffer *vb) > +{ > + q->bufs[vb->index] = NULL; nor this does so. Is it intentional? > +} > + > /* > * The following functions are not part of the vb2 core API, but are useful > * functions for videobuf2-*. 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 BEEBBC61DA4 for ; Mon, 13 Mar 2023 17:02:20 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+ylB+CKNHQjXimHFT2YvFAmKSZWESrrP6SdS1dn44BA=; b=Qcp00pW6SMuWJe p4Juv7sAXgL8S/EyVNaaOzV/luStZ1cCIbf2o9RMoRQZBWc+jTof6IzWsSDBzuU+EU05IQv6C8D1U xx8bGLe/oOBd8UwPQYYDRX0ZUe4x1YGgi4fB5yVEKJ7DIpMxthw3I28TrNUYMt/6rMQ+sBU6mHmTK FDZdelTFWx+TYyj2eLlA/Da0e9PTOS7/cIvklvFx5fT/aOdxXlhTJCWvoOr020+Sv/bou1tcXXsfp 6ELJU0+JtapI0obu4udJtefTB24jpFiMof9/3g5EerVfDCprjpKOfwJzd4ygDBEkeg6gjHdqExuKG M3F743fopZdR6OTrRqWA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pblYm-006wCW-N2; Mon, 13 Mar 2023 17:02:08 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pblOb-006sEV-BJ; Mon, 13 Mar 2023 16:51:40 +0000 Received: from [192.168.0.192] (unknown [194.146.248.75]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: andrzej.p) by madras.collabora.co.uk (Postfix) with ESMTPSA id D9D0D6602135; Mon, 13 Mar 2023 16:51:29 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1678726291; bh=dmX8aSMDGdnKVVwb34Im4TzUC75nbAE+WEfMhqfpkKY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=UzL8AXuaUfv8YamQyQpf+4UGagM+ztPxrsuzVbGEdaf1Y+T4NBTJ8Pg0QAFFx1oqs sMnyl5XgTqO3yLpMi1Cd2XdGZAgkL7fh/x6W4LMmG0luQQlc5MEByNEGuLoVEXm2Bo Fb8FEYL3T6igcenf+H2Rxn7ZDNQGLKXIznqHvUA+6P0JuyiUnorhjEJTtS6gNjNp4I QrLealFvtUXSxaXGGVa7SutlClsrJBZBqcb69gOZGFJs4YQU16avJP3cW+XT/KzYqg bJQqipi4yi+A4JQ89cfMve9uUAl2yN7ec78aOyZOFNLUMc8ZiAlavE/BIP20sZBYMi txqySeN+zOhGw== Message-ID: <60c05cfb-9afb-3b25-7f91-71cf56ed6bfc@collabora.com> Date: Mon, 13 Mar 2023 17:51:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [RFC 1/4] media: videobuf2: Use vb2_get_buffer() as helper everywhere Content-Language: en-US To: Benjamin Gaignard , tfiga@chromium.org, m.szyprowski@samsung.com, mchehab@kernel.org, ming.qian@nxp.com, shijie.qin@nxp.com, eagle.zhou@nxp.com, bin.liu@mediatek.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, tiffany.lin@mediatek.com, andrew-ct.chen@mediatek.com, yunfei.dong@mediatek.com, stanimir.k.varbanov@gmail.com, quic_vgarodia@quicinc.com, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, daniel.almeida@collabora.com, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, jerbel@kernel.org Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-rockchip@lists.infradead.org, kernel@collabora.com References: <20230313135916.862852-1-benjamin.gaignard@collabora.com> <20230313135916.862852-2-benjamin.gaignard@collabora.com> From: Andrzej Pietrasiewicz In-Reply-To: <20230313135916.862852-2-benjamin.gaignard@collabora.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230313_095137_803635_75B95B67 X-CRM114-Status: GOOD ( 31.19 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org SGkgQmVuamFtaW4sCgpXIGRuaXUgMTMuMDMuMjAyMyBvwqAxNDo1OSwgQmVuamFtaW4gR2FpZ25h cmQgcGlzemU6Cj4gVGhlIGZpcnN0IHN0ZXAgYmVmb3JlIGNoYW5naW5nIGhvdyB2YjIgYnVmZmVy cyBhcmUgc3RvcmVkIGludG8gcXVldWUKPiBpcyB0byBhdm9pZCBkaXJlY3QgY2FsbCB0byBidWZz IGFycmF5cy4KPiBUaGlzIHBhdGNoIGFkZCAyIGhlbHBlcnMgZnVuY3Rpb25zIHRvIHNldCBhbmQg ZGVsZXRlIHZiMiBidWZmZXJzCj4gZnJvbSBhIHF1ZXVlLiBXaXRoIHRoZXNlIDIgYW5kIHZiMl9n ZXRfYnVmZmVyKCksIGJ1ZnMgZmllbGQgb2YKPiBzdHJ1Y3QgdmIyX3F1ZXVlIGJlY29tZXMgbGlr ZSBhIHByaXZhdGUgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuCj4gCj4gU2lnbmVkLW9mZi1ieTog QmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4gLS0t Cj4gICAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jICAgfCA2OSAr KysrKysrKysrLS0tLS0tLS0tCj4gICAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1 ZjItdjRsMi5jICAgfCAxNyArKystLQo+ICAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9kYmcuYyAgICAgIHwgIDQgKy0KPiAgIC4uLi9wbGF0Zm9ybS9tZWRpYXRlay9qcGVnL210 a19qcGVnX2NvcmUuYyAgICB8ICAyICstCj4gICAuLi4vdmNvZGVjL3ZkZWMvdmRlY192cDlfcmVx X2xhdF9pZi5jICAgICAgICAgfCAgMiArLQo+ICAgZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMv dmlzbC92aXNsLWRlYy5jICAgIHwgMTYgKysrLS0KPiAgIGluY2x1ZGUvbWVkaWEvdmlkZW9idWYy LWNvcmUuaCAgICAgICAgICAgICAgICB8IDIwICsrKysrKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCA4 MSBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1jb3JlLmMgYi9kcml2ZXJzL21lZGlh L2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWNvcmUuYwo+IGluZGV4IGNmNjcyN2Q5YzgxZi4u YjUxMTUyYWNlNzYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItY29yZS5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYy L3ZpZGVvYnVmMi1jb3JlLmMKPiBAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0 dXBfb2Zmc2V0cyhzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCj4gICAJdW5zaWduZWQgbG9uZyBvZmYg PSAwOwo+ICAgCj4gICAJaWYgKHZiLT5pbmRleCkgewo+IC0JCXN0cnVjdCB2YjJfYnVmZmVyICpw cmV2ID0gcS0+YnVmc1t2Yi0+aW5kZXggLSAxXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqcHJl diA9IHZiMl9nZXRfYnVmZmVyKHEsIHZiLT5pbmRleCAtIDEpOwoKaW50ZXJuYWxseSB2YjJfZ2V0 X2J1ZmZlcigpIHZlcmlmaWVzIHRoZSBpbmRleCBpcyB3aXRoaW4gYWxsb3dlZCByYW5nZSwgYnV0 Li4uCgo+ICAgCQlzdHJ1Y3QgdmIyX3BsYW5lICpwID0gJnByZXYtPnBsYW5lc1twcmV2LT5udW1f cGxhbmVzIC0gMV07Cj4gICAKPiAgIAkJb2ZmID0gUEFHRV9BTElHTihwLT5tLm9mZnNldCArIHAt Pmxlbmd0aCk7Cj4gQEAgLTQzNyw3ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fdmIyX3F1ZXVlX2Fs bG9jKHN0cnVjdCB2YjJfcXVldWUgKnEsIGVudW0gdmIyX21lbW9yeSBtZW1vcnksCj4gICAJCX0K PiAgIAkJY2FsbF92b2lkX2J1Zm9wKHEsIGluaXRfYnVmZmVyLCB2Yik7Cj4gICAKPiAtCQlxLT5i dWZzW3ZiLT5pbmRleF0gPSB2YjsKPiArCQl2YjJfc2V0X2J1ZmZlcihxLCB2Yik7Cj4gICAKPiAg IAkJLyogQWxsb2NhdGUgdmlkZW8gYnVmZmVyIG1lbW9yeSBmb3IgdGhlIE1NQVAgdHlwZSAqLwo+ ICAgCQlpZiAobWVtb3J5ID09IFZCMl9NRU1PUllfTU1BUCkgewo+IEBAIC00NDUsNyArNDQ1LDcg QEAgc3RhdGljIGludCBfX3ZiMl9xdWV1ZV9hbGxvYyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBlbnVt IHZiMl9tZW1vcnkgbWVtb3J5LAo+ICAgCQkJaWYgKHJldCkgewo+ICAgCQkJCWRwcmludGsocSwg MSwgImZhaWxlZCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYnVmZmVyICVkXG4iLAo+ICAgCQkJCQli dWZmZXIpOwo+IC0JCQkJcS0+YnVmc1t2Yi0+aW5kZXhdID0gTlVMTDsKPiArCQkJCXZiMl9kZWxf YnVmZmVyKHEsIHZiKTsKPiAgIAkJCQlrZnJlZSh2Yik7Cj4gICAJCQkJYnJlYWs7Cj4gICAJCQl9 Cj4gQEAgLTQ2MCw3ICs0NjAsNyBAQCBzdGF0aWMgaW50IF9fdmIyX3F1ZXVlX2FsbG9jKHN0cnVj dCB2YjJfcXVldWUgKnEsIGVudW0gdmIyX21lbW9yeSBtZW1vcnksCj4gICAJCQkJZHByaW50ayhx LCAxLCAiYnVmZmVyICVkICVwIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKPiAgIAkJCQkJYnVm ZmVyLCB2Yik7Cj4gICAJCQkJX192YjJfYnVmX21lbV9mcmVlKHZiKTsKPiAtCQkJCXEtPmJ1ZnNb dmItPmluZGV4XSA9IE5VTEw7Cj4gKwkJCQl2YjJfZGVsX2J1ZmZlcihxLCB2Yik7Cj4gICAJCQkJ a2ZyZWUodmIpOwo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IEBAIC00ODMsNyArNDgzLDcgQEAg c3RhdGljIHZvaWQgX192YjJfZnJlZV9tZW0oc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQg aW50IGJ1ZmZlcnMpCj4gICAKPiAgIAlmb3IgKGJ1ZmZlciA9IHEtPm51bV9idWZmZXJzIC0gYnVm ZmVyczsgYnVmZmVyIDwgcS0+bnVtX2J1ZmZlcnM7Cj4gICAJICAgICArK2J1ZmZlcikgewo+IC0J CXZiID0gcS0+YnVmc1tidWZmZXJdOwo+ICsJCXZiID0gdmIyX2dldF9idWZmZXIocSwgYnVmZmVy KTsKPiAgIAkJaWYgKCF2YikKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gQEAgLTUxMSw3ICs1MTEs NyBAQCBzdGF0aWMgdm9pZCBfX3ZiMl9xdWV1ZV9mcmVlKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVu c2lnbmVkIGludCBidWZmZXJzKQo+ICAgCS8qIENhbGwgZHJpdmVyLXByb3ZpZGVkIGNsZWFudXAg ZnVuY3Rpb24gZm9yIGVhY2ggYnVmZmVyLCBpZiBwcm92aWRlZCAqLwo+ICAgCWZvciAoYnVmZmVy ID0gcS0+bnVtX2J1ZmZlcnMgLSBidWZmZXJzOyBidWZmZXIgPCBxLT5udW1fYnVmZmVyczsKPiAg IAkgICAgICsrYnVmZmVyKSB7Cj4gLQkJc3RydWN0IHZiMl9idWZmZXIgKnZiID0gcS0+YnVmc1ti dWZmZXJdOwo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1 ZmZlcik7Cj4gICAKPiAgIAkJaWYgKHZiICYmIHZiLT5wbGFuZXNbMF0ubWVtX3ByaXYpCj4gICAJ CQljYWxsX3ZvaWRfdmJfcW9wKHZiLCBidWZfY2xlYW51cCwgdmIpOwo+IEBAIC01OTEsOCArNTkx LDEwIEBAIHN0YXRpYyB2b2lkIF9fdmIyX3F1ZXVlX2ZyZWUoc3RydWN0IHZiMl9xdWV1ZSAqcSwg dW5zaWduZWQgaW50IGJ1ZmZlcnMpCj4gICAJLyogRnJlZSB2YjIgYnVmZmVycyAqLwo+ICAgCWZv ciAoYnVmZmVyID0gcS0+bnVtX2J1ZmZlcnMgLSBidWZmZXJzOyBidWZmZXIgPCBxLT5udW1fYnVm ZmVyczsKPiAgIAkgICAgICsrYnVmZmVyKSB7Cj4gLQkJa2ZyZWUocS0+YnVmc1tidWZmZXJdKTsK PiAtCQlxLT5idWZzW2J1ZmZlcl0gPSBOVUxMOwo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICp2YjIg PSB2YjJfZ2V0X2J1ZmZlcihxLCBidWZmZXIpOwo+ICsKPiArCQl2YjJfZGVsX2J1ZmZlcihxLCB2 YjIpOwo+ICsJCWtmcmVlKHZiMik7Cj4gICAJfQo+ICAgCj4gICAJcS0+bnVtX2J1ZmZlcnMgLT0g YnVmZmVyczsKPiBAQCAtNjI4LDcgKzYzMCw3IEBAIHN0YXRpYyBib29sIF9fYnVmZmVyc19pbl91 c2Uoc3RydWN0IHZiMl9xdWV1ZSAqcSkKPiAgIHsKPiAgIAl1bnNpZ25lZCBpbnQgYnVmZmVyOwo+ ICAgCWZvciAoYnVmZmVyID0gMDsgYnVmZmVyIDwgcS0+bnVtX2J1ZmZlcnM7ICsrYnVmZmVyKSB7 Cj4gLQkJaWYgKHZiMl9idWZmZXJfaW5fdXNlKHEsIHEtPmJ1ZnNbYnVmZmVyXSkpCj4gKwkJaWYg KHZiMl9idWZmZXJfaW5fdXNlKHEsIHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZlcikpKQo+ICAgCQkJ cmV0dXJuIHRydWU7Cj4gICAJfQo+ICAgCXJldHVybiBmYWxzZTsKPiBAQCAtNjM2LDcgKzYzOCw3 IEBAIHN0YXRpYyBib29sIF9fYnVmZmVyc19pbl91c2Uoc3RydWN0IHZiMl9xdWV1ZSAqcSkKPiAg IAo+ICAgdm9pZCB2YjJfY29yZV9xdWVyeWJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNpZ25l ZCBpbnQgaW5kZXgsIHZvaWQgKnBiKQo+ICAgewo+IC0JY2FsbF92b2lkX2J1Zm9wKHEsIGZpbGxf dXNlcl9idWZmZXIsIHEtPmJ1ZnNbaW5kZXhdLCBwYik7Cj4gKwljYWxsX3ZvaWRfYnVmb3AocSwg ZmlsbF91c2VyX2J1ZmZlciwgdmIyX2dldF9idWZmZXIocSwgaW5kZXgpLCBwYik7Cj4gICB9Cj4g ICBFWFBPUlRfU1lNQk9MX0dQTCh2YjJfY29yZV9xdWVyeWJ1Zik7Cj4gICAKPiBAQCAtMTU0Nyw3 ICsxNTQ5LDcgQEAgaW50IHZiMl9jb3JlX3ByZXBhcmVfYnVmKHN0cnVjdCB2YjJfcXVldWUgKnEs IHVuc2lnbmVkIGludCBpbmRleCwgdm9pZCAqcGIpCj4gICAJc3RydWN0IHZiMl9idWZmZXIgKnZi Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXZiID0gcS0+YnVmc1tpbmRleF07Cj4gKwl2YiA9IHZi Ml9nZXRfYnVmZmVyKHEsIGluZGV4KTsKPiAgIAlpZiAodmItPnN0YXRlICE9IFZCMl9CVUZfU1RB VEVfREVRVUVVRUQpIHsKPiAgIAkJZHByaW50ayhxLCAxLCAiaW52YWxpZCBidWZmZXIgc3RhdGUg JXNcbiIsCj4gICAJCQl2YjJfc3RhdGVfbmFtZSh2Yi0+c3RhdGUpKTsKPiBAQCAtMTYxOCw3ICsx NjIwLDcgQEAgc3RhdGljIGludCB2YjJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUg KnEpCj4gICAJCSAqIGNvcnJlY3RseSByZXR1cm4gdGhlbSB0byB2YjIuCj4gICAJCSAqLwo+ICAg CQlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7ICsraSkgewo+IC0JCQl2YiA9IHEtPmJ1 ZnNbaV07Cj4gKwkJCXZiID0gdmIyX2dldF9idWZmZXIocSwgaSk7Cj4gICAJCQlpZiAodmItPnN0 YXRlID09IFZCMl9CVUZfU1RBVEVfQUNUSVZFKQo+ICAgCQkJCXZiMl9idWZmZXJfZG9uZSh2Yiwg VkIyX0JVRl9TVEFURV9RVUVVRUQpOwo+ICAgCQl9Cj4gQEAgLTE2NDYsNyArMTY0OCw3IEBAIGlu dCB2YjJfY29yZV9xYnVmKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBpbmRleCwg dm9pZCAqcGIsCj4gICAJCXJldHVybiAtRUlPOwo+ICAgCX0KPiAgIAo+IC0JdmIgPSBxLT5idWZz W2luZGV4XTsKPiArCXZiID0gdmIyX2dldF9idWZmZXIocSwgaW5kZXgpOwo+ICAgCj4gICAJaWYg KCFyZXEgJiYgdmItPnN0YXRlICE9IFZCMl9CVUZfU1RBVEVfSU5fUkVRVUVTVCAmJgo+ICAgCSAg ICBxLT5yZXF1aXJlc19yZXF1ZXN0cykgewo+IEBAIC0yMDIyLDEyICsyMDI0LDE1IEBAIHN0YXRp YyB2b2lkIF9fdmIyX3F1ZXVlX2NhbmNlbChzdHJ1Y3QgdmIyX3F1ZXVlICpxKQo+ICAgCSAqIHRv IHZiMiBpbiBzdG9wX3N0cmVhbWluZygpLgo+ICAgCSAqLwo+ICAgCWlmIChXQVJOX09OKGF0b21p Y19yZWFkKCZxLT5vd25lZF9ieV9kcnZfY291bnQpKSkgewo+IC0JCWZvciAoaSA9IDA7IGkgPCBx LT5udW1fYnVmZmVyczsgKytpKQo+IC0JCQlpZiAocS0+YnVmc1tpXS0+c3RhdGUgPT0gVkIyX0JV Rl9TVEFURV9BQ1RJVkUpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7ICsr aSkgewo+ICsJCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIyID0gdmIyX2dldF9idWZmZXIocSwgaSk7 Cj4gKwo+ICsJCQlpZiAodmIyLT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0FDVElWRSkgewo+ICAg CQkJCXByX3dhcm4oImRyaXZlciBidWc6IHN0b3Bfc3RyZWFtaW5nIG9wZXJhdGlvbiBpcyBsZWF2 aW5nIGJ1ZiAlcCBpbiBhY3RpdmUgc3RhdGVcbiIsCj4gLQkJCQkJcS0+YnVmc1tpXSk7Cj4gLQkJ CQl2YjJfYnVmZmVyX2RvbmUocS0+YnVmc1tpXSwgVkIyX0JVRl9TVEFURV9FUlJPUik7Cj4gKwkJ CQkJdmIyKTsKPiArCQkJCXZiMl9idWZmZXJfZG9uZSh2YjIsIFZCMl9CVUZfU1RBVEVfRVJST1Ip Owo+ICAgCQkJfQo+ICsJCX0KPiAgIAkJLyogTXVzdCBiZSB6ZXJvIG5vdyAqLwo+ICAgCQlXQVJO X09OKGF0b21pY19yZWFkKCZxLT5vd25lZF9ieV9kcnZfY291bnQpKTsKPiAgIAl9Cj4gQEAgLTIw NjEsNyArMjA2Niw3IEBAIHN0YXRpYyB2b2lkIF9fdmIyX3F1ZXVlX2NhbmNlbChzdHJ1Y3QgdmIy X3F1ZXVlICpxKQo+ICAgCSAqIGJlIGNoYW5nZWQsIHNvIHdlIGNhbid0IG1vdmUgdGhlIGJ1Zl9m aW5pc2goKSB0byBfX3ZiMl9kcWJ1ZigpLgo+ICAgCSAqLwo+ICAgCWZvciAoaSA9IDA7IGkgPCBx LT5udW1fYnVmZmVyczsgKytpKSB7Cj4gLQkJc3RydWN0IHZiMl9idWZmZXIgKnZiID0gcS0+YnVm c1tpXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBpKTsK PiAgIAkJc3RydWN0IG1lZGlhX3JlcXVlc3QgKnJlcSA9IHZiLT5yZXFfb2JqLnJlcTsKPiAgIAo+ ICAgCQkvKgo+IEBAIC0yMjE1LDcgKzIyMjAsNyBAQCBzdGF0aWMgaW50IF9fZmluZF9wbGFuZV9i eV9vZmZzZXQoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBvZmYsCj4gICAJICog cmV0dXJuIGl0cyBidWZmZXIgYW5kIHBsYW5lIG51bWJlcnMuCj4gICAJICovCj4gICAJZm9yIChi dWZmZXIgPSAwOyBidWZmZXIgPCBxLT5udW1fYnVmZmVyczsgKytidWZmZXIpIHsKPiAtCQl2YiA9 IHEtPmJ1ZnNbYnVmZmVyXTsKPiArCQl2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZlcik7Cj4g ICAKPiAgIAkJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgdmItPm51bV9wbGFuZXM7ICsrcGxhbmUp IHsKPiAgIAkJCWlmICh2Yi0+cGxhbmVzW3BsYW5lXS5tLm9mZnNldCA9PSBvZmYpIHsKPiBAQCAt MjI2Miw3ICsyMjY3LDcgQEAgaW50IHZiMl9jb3JlX2V4cGJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpx LCBpbnQgKmZkLCB1bnNpZ25lZCBpbnQgdHlwZSwKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJ fQo+ICAgCj4gLQl2YiA9IHEtPmJ1ZnNbaW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihx LCBpbmRleCk7Cj4gICAKPiAgIAlpZiAocGxhbmUgPj0gdmItPm51bV9wbGFuZXMpIHsKPiAgIAkJ ZHByaW50ayhxLCAxLCAiYnVmZmVyIHBsYW5lIG91dCBvZiByYW5nZVxuIik7Cj4gQEAgLTIzMzks NyArMjM0NCw3IEBAIGludCB2YjJfbW1hcChzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIHVubG9jazsKPiAgIAo+ IC0JdmIgPSBxLT5idWZzW2J1ZmZlcl07Cj4gKwl2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZl cik7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIE1NQVAgcmVxdWlyZXMgcGFnZV9hbGlnbmVkIGJ1ZmZl cnMuCj4gQEAgLTI2NzksNyArMjY4NCw3IEBAIHN0YXRpYyBpbnQgX192YjJfaW5pdF9maWxlaW8o c3RydWN0IHZiMl9xdWV1ZSAqcSwgaW50IHJlYWQpCj4gICAJICogQ2hlY2sgaWYgcGxhbmVfY291 bnQgaXMgY29ycmVjdAo+ICAgCSAqIChtdWx0aXBsYW5lIGJ1ZmZlcnMgYXJlIG5vdCBzdXBwb3J0 ZWQpLgo+ICAgCSAqLwo+IC0JaWYgKHEtPmJ1ZnNbMF0tPm51bV9wbGFuZXMgIT0gMSkgewo+ICsJ aWYgKHZiMl9nZXRfYnVmZmVyKHEsIDApLT5udW1fcGxhbmVzICE9IDEpIHsKPiAgIAkJcmV0ID0g LUVCVVNZOwo+ICAgCQlnb3RvIGVycl9yZXFidWZzOwo+ICAgCX0KPiBAQCAtMjY4OCwxMiArMjY5 MywxNCBAQCBzdGF0aWMgaW50IF9fdmIyX2luaXRfZmlsZWlvKHN0cnVjdCB2YjJfcXVldWUgKnEs IGludCByZWFkKQo+ICAgCSAqIEdldCBrZXJuZWwgYWRkcmVzcyBvZiBlYWNoIGJ1ZmZlci4KPiAg IAkgKi8KPiAgIAlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7IGkrKykgewo+IC0JCWZp bGVpby0+YnVmc1tpXS52YWRkciA9IHZiMl9wbGFuZV92YWRkcihxLT5idWZzW2ldLCAwKTsKPiAr CQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIyID0gdmIyX2dldF9idWZmZXIocSwgaSk7Cj4gKwo+ICsJ CWZpbGVpby0+YnVmc1tpXS52YWRkciA9IHZiMl9wbGFuZV92YWRkcih2YjIsIDApOwo+ICAgCQlp ZiAoZmlsZWlvLT5idWZzW2ldLnZhZGRyID09IE5VTEwpIHsKPiAgIAkJCXJldCA9IC1FSU5WQUw7 Cj4gICAJCQlnb3RvIGVycl9yZXFidWZzOwo+ICAgCQl9Cj4gLQkJZmlsZWlvLT5idWZzW2ldLnNp emUgPSB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2ldLCAwKTsKPiArCQlmaWxlaW8tPmJ1ZnNbaV0u c2l6ZSA9IHZiMl9wbGFuZV9zaXplKHZiMiwgMCk7Cj4gICAJfQo+ICAgCj4gICAJLyoKPiBAQCAt MjgyMSwxNSArMjgyOCwxNSBAQCBzdGF0aWMgc2l6ZV90IF9fdmIyX3BlcmZvcm1fZmlsZWlvKHN0 cnVjdCB2YjJfcXVldWUgKnEsIGNoYXIgX191c2VyICpkYXRhLCBzaXplXwo+ICAgCj4gICAJCWZp bGVpby0+Y3VyX2luZGV4ID0gaW5kZXg7Cj4gICAJCWJ1ZiA9ICZmaWxlaW8tPmJ1ZnNbaW5kZXhd Owo+IC0JCWIgPSBxLT5idWZzW2luZGV4XTsKPiArCQliID0gdmIyX2dldF9idWZmZXIocSwgaW5k ZXgpOwo+ICAgCj4gICAJCS8qCj4gICAJCSAqIEdldCBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkIGJ5 IHRoZSBkcml2ZXIKPiAgIAkJICovCj4gICAJCWJ1Zi0+cG9zID0gMDsKPiAgIAkJYnVmLT5xdWV1 ZWQgPSAwOwo+IC0JCWJ1Zi0+c2l6ZSA9IHJlYWQgPyB2YjJfZ2V0X3BsYW5lX3BheWxvYWQocS0+ YnVmc1tpbmRleF0sIDApCj4gLQkJCQkgOiB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2luZGV4XSwg MCk7Cj4gKwkJYnVmLT5zaXplID0gcmVhZCA/IHZiMl9nZXRfcGxhbmVfcGF5bG9hZChiLCAwKQo+ ICsJCQkJIDogdmIyX3BsYW5lX3NpemUoYiwgMCk7Cj4gICAJCS8qIENvbXBlbnNhdGUgZm9yIGRh dGFfb2Zmc2V0IG9uIHJlYWQgaW4gdGhlIG11bHRpcGxhbmFyIGNhc2UuICovCj4gICAJCWlmIChp c19tdWx0aXBsYW5hciAmJiByZWFkICYmCj4gICAJCQkJYi0+cGxhbmVzWzBdLmRhdGFfb2Zmc2V0 IDwgYnVmLT5zaXplKSB7Cj4gQEAgLTI4NzIsNyArMjg3OSw3IEBAIHN0YXRpYyBzaXplX3QgX192 YjJfcGVyZm9ybV9maWxlaW8oc3RydWN0IHZiMl9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmRhdGEs IHNpemVfCj4gICAJICogUXVldWUgbmV4dCBidWZmZXIgaWYgcmVxdWlyZWQuCj4gICAJICovCj4g ICAJaWYgKGJ1Zi0+cG9zID09IGJ1Zi0+c2l6ZSB8fCAoIXJlYWQgJiYgZmlsZWlvLT53cml0ZV9p bW1lZGlhdGVseSkpIHsKPiAtCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqYiA9IHEtPmJ1ZnNbaW5kZXhd Owo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICpiID0gdmIyX2dldF9idWZmZXIocSwgaW5kZXgpOwo+ ICAgCj4gICAJCS8qCj4gICAJCSAqIENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgYnVmZmVyIHRv IHJlYWQuCj4gQEAgLTI4OTksNyArMjkwNiw3IEBAIHN0YXRpYyBzaXplX3QgX192YjJfcGVyZm9y bV9maWxlaW8oc3RydWN0IHZiMl9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfCj4g ICAJCSAqLwo+ICAgCQlidWYtPnBvcyA9IDA7Cj4gICAJCWJ1Zi0+cXVldWVkID0gMTsKPiAtCQli dWYtPnNpemUgPSB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2luZGV4XSwgMCk7Cj4gKwkJYnVmLT5z aXplID0gdmIyX3BsYW5lX3NpemUodmIyX2dldF9idWZmZXIocSwgaW5kZXgpLCAwKTsKPiAgIAkJ ZmlsZWlvLT5xX2NvdW50ICs9IDE7Cj4gICAJCS8qCj4gICAJCSAqIElmIHdlIGFyZSBxdWV1aW5n IHVwIGJ1ZmZlcnMgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGVuCj4gQEAgLTI5NzAsNyArMjk3Nyw3 IEBAIHN0YXRpYyBpbnQgdmIyX3RocmVhZCh2b2lkICpkYXRhKQo+ICAgCQkgKiBDYWxsIHZiMl9k cWJ1ZiB0byBnZXQgYnVmZmVyIGJhY2suCj4gICAJCSAqLwo+ICAgCQlpZiAocHJlcXVldWUpIHsK PiAtCQkJdmIgPSBxLT5idWZzW2luZGV4KytdOwo+ICsJCQl2YiA9IHZiMl9nZXRfYnVmZmVyKHEs IGluZGV4KyspOwo+ICAgCQkJcHJlcXVldWUtLTsKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWNhbGxf dm9pZF9xb3AocSwgd2FpdF9maW5pc2gsIHEpOwo+IEBAIC0yOTc5LDcgKzI5ODYsNyBAQCBzdGF0 aWMgaW50IHZiMl90aHJlYWQodm9pZCAqZGF0YSkKPiAgIAkJCWNhbGxfdm9pZF9xb3AocSwgd2Fp dF9wcmVwYXJlLCBxKTsKPiAgIAkJCWRwcmludGsocSwgNSwgImZpbGUgaW86IHZiMl9kcWJ1ZiBy ZXN1bHQ6ICVkXG4iLCByZXQpOwo+ICAgCQkJaWYgKCFyZXQpCj4gLQkJCQl2YiA9IHEtPmJ1ZnNb aW5kZXhdOwo+ICsJCQkJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBpbmRleCk7Cj4gICAJCX0KPiAg IAkJaWYgKHJldCB8fCB0aHJlYWRpby0+c3RvcCkKPiAgIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuYyBiL2RyaXZl cnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItdjRsMi5jCj4gaW5kZXggMWY1ZDIz NWE4NDQxLi4wMWIyYmI5NTcyMzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24v dmlkZW9idWYyL3ZpZGVvYnVmMi12NGwyLmMKPiArKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92 aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuYwo+IEBAIC0zODMsNyArMzgzLDcgQEAgc3RhdGljIGlu dCB2YjJfcXVldWVfb3JfcHJlcGFyZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IG1l ZGlhX2RldmljZSAqbWQKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQlpZiAo cS0+YnVmc1tiLT5pbmRleF0gPT0gTlVMTCkgewo+ICsJaWYgKCF2YjJfZ2V0X2J1ZmZlcihxLCBi LT5pbmRleCkpIHsKPiAgIAkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwo+ICAgCQlkcHJpbnRr KHEsIDEsICIlczogYnVmZmVyIGlzIE5VTExcbiIsIG9wbmFtZSk7Cj4gICAJCXJldHVybiAtRUlO VkFMOwo+IEBAIC0zOTQsNyArMzk0LDcgQEAgc3RhdGljIGludCB2YjJfcXVldWVfb3JfcHJlcGFy ZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IG1lZGlhX2RldmljZSAqbWQKPiAgIAkJ cmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQl2YiA9IHEtPmJ1ZnNbYi0+aW5kZXhdOwo+ ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBiLT5pbmRleCk7Cj4gICAJdmJ1ZiA9IHRvX3ZiMl92 NGwyX2J1ZmZlcih2Yik7Cj4gICAJcmV0ID0gX192ZXJpZnlfcGxhbmVzX2FycmF5KHZiLCBiKTsK PiAgIAlpZiAocmV0KQo+IEBAIC02MjgsMTEgKzYyOCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHZiMl9idWZfb3BzIHY0bDJfYnVmX29wcyA9IHsKPiAgIHN0cnVjdCB2YjJfYnVmZmVyICp2YjJf ZmluZF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdTY0IHRpbWVzdGFtcCkKPiAgIHsKPiAg IAl1bnNpZ25lZCBpbnQgaTsKPiArCXN0cnVjdCB2YjJfYnVmZmVyICp2YjI7Cj4gICAKPiAtCWZv ciAoaSA9IDA7IGkgPCBxLT5udW1fYnVmZmVyczsgaSsrKQo+IC0JCWlmIChxLT5idWZzW2ldLT5j b3BpZWRfdGltZXN0YW1wICYmCj4gLQkJICAgIHEtPmJ1ZnNbaV0tPnRpbWVzdGFtcCA9PSB0aW1l c3RhbXApCj4gLQkJCXJldHVybiB2YjJfZ2V0X2J1ZmZlcihxLCBpKTsKPiArCWZvciAoaSA9IDA7 IGkgPCBxLT5udW1fYnVmZmVyczsgaSsrKSB7Cj4gKwkJdmIyID0gdmIyX2dldF9idWZmZXIocSwg aSk7Cj4gKwkJaWYgKHZiMi0+Y29waWVkX3RpbWVzdGFtcCAmJgo+ICsJCSAgICB2YjItPnRpbWVz dGFtcCA9PSB0aW1lc3RhbXApCj4gKwkJCXJldHVybiB2YjI7Cj4gKwl9Cj4gICAJcmV0dXJuIE5V TEw7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTCh2YjJfZmluZF9idWZmZXIpOwo+IEBAIC02 NjQsNyArNjY3LDcgQEAgaW50IHZiMl9xdWVyeWJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1 Y3QgdjRsMl9idWZmZXIgKmIpCj4gICAJCWRwcmludGsocSwgMSwgImJ1ZmZlciBpbmRleCBvdXQg b2YgcmFuZ2VcbiIpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gLQl2YiA9IHEtPmJ1 ZnNbYi0+aW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBiLT5pbmRleCk7Cj4gICAJ cmV0ID0gX192ZXJpZnlfcGxhbmVzX2FycmF5KHZiLCBiKTsKPiAgIAlpZiAoIXJldCkKPiAgIAkJ dmIyX2NvcmVfcXVlcnlidWYocSwgYi0+aW5kZXgsIGIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hbXBoaW9uL3ZwdV9kYmcuYwo+IGluZGV4IDQ0YjgzMGFlMDFkOC4uOGE0MjNjMWY2YjU1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMKPiAr KysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jCj4gQEAgLTEzMyw3 ICsxMzMsNyBAQCBzdGF0aWMgaW50IHZwdV9kYmdfaW5zdGFuY2Uoc3RydWN0IHNlcV9maWxlICpz LCB2b2lkICpkYXRhKQo+ICAgCj4gICAJdnEgPSB2NGwyX20ybV9nZXRfc3JjX3ZxKGluc3QtPmZo Lm0ybV9jdHgpOwo+ICAgCWZvciAoaSA9IDA7IGkgPCB2cS0+bnVtX2J1ZmZlcnM7IGkrKykgewo+ IC0JCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9IHZxLT5idWZzW2ldOwo+ICsJCXN0cnVjdCB2YjJf YnVmZmVyICp2YiA9IHZiMl9nZXRfYnVmZmVyKHZxLCBpKTsKPiAgIAkJc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7Cj4gICAKPiAgIAkJaWYgKHZi LT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0RFUVVFVUVEKQo+IEBAIC0xNDgsNyArMTQ4LDcgQEAg c3RhdGljIGludCB2cHVfZGJnX2luc3RhbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0 YSkKPiAgIAo+ICAgCXZxID0gdjRsMl9tMm1fZ2V0X2RzdF92cShpbnN0LT5maC5tMm1fY3R4KTsK PiAgIAlmb3IgKGkgPSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsKPiAtCQlzdHJ1Y3Qg dmIyX2J1ZmZlciAqdmIgPSB2cS0+YnVmc1tpXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIg PSB2YjJfZ2V0X2J1ZmZlcih2cSwgaSk7Cj4gICAJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZi dWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOwo+ICAgCj4gICAJCWlmICh2Yi0+c3RhdGUgPT0g VkIyX0JVRl9TVEFURV9ERVFVRVVFRCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tZWRpYXRlay9qcGVnL210a19qcGVnX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vbWVkaWF0ZWsvanBlZy9tdGtfanBlZ19jb3JlLmMKPiBpbmRleCA5Njk1MTZhOTQwYmEuLjBi ZTA3ZjY5MWQ5YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlhdGVr L2pwZWcvbXRrX2pwZWdfY29yZS5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tZWRp YXRlay9qcGVnL210a19qcGVnX2NvcmUuYwo+IEBAIC02MDMsNyArNjAzLDcgQEAgc3RhdGljIGlu dCBtdGtfanBlZ19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRs Ml9idWZmZXIgKmJ1ZikKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQl2YiA9 IHZxLT5idWZzW2J1Zi0+aW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcih2cSwgYnVmLT5p bmRleCk7Cj4gICAJanBlZ19zcmNfYnVmID0gbXRrX2pwZWdfdmIyX3RvX3NyY2J1Zih2Yik7Cj4g ICAJanBlZ19zcmNfYnVmLT5ic19zaXplID0gYnVmLT5tLnBsYW5lc1swXS5ieXRlc3VzZWQ7Cj4g ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tZWRpYXRlay92Y29kZWMv dmRlYy92ZGVjX3ZwOV9yZXFfbGF0X2lmLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlh dGVrL3Zjb2RlYy92ZGVjL3ZkZWNfdnA5X3JlcV9sYXRfaWYuYwo+IGluZGV4IGNiYjY3MjhiOGE0 MC4uZjU5NThiNmQ4MzRhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVk aWF0ZWsvdmNvZGVjL3ZkZWMvdmRlY192cDlfcmVxX2xhdF9pZi5jCj4gKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tZWRpYXRlay92Y29kZWMvdmRlYy92ZGVjX3ZwOV9yZXFfbGF0X2lmLmMK PiBAQCAtMTcwMSw3ICsxNzAxLDcgQEAgc3RhdGljIGludCB2ZGVjX3ZwOV9zbGljZV9zZXR1cF9j b3JlX2J1ZmZlcihzdHJ1Y3QgdmRlY192cDlfc2xpY2VfaW5zdGFuY2UgKmluc3QKPiAgIAo+ICAg CS8qIHVwZGF0ZSBpbnRlcm5hbCBidWZmZXIncyB3aWR0aC9oZWlnaHQgKi8KPiAgIAlmb3IgKGkg PSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsKPiAtCQlpZiAodmIgPT0gdnEtPmJ1ZnNb aV0pIHsKPiArCQlpZiAodmIgPT0gdmIyX2dldF9idWZmZXIodnEsIGkpKSB7Cj4gICAJCQlpbnN0 YW5jZS0+ZHBiW2ldLndpZHRoID0gdzsKPiAgIAkJCWluc3RhbmNlLT5kcGJbaV0uaGVpZ2h0ID0g aDsKPiAgIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVy cy92aXNsL3Zpc2wtZGVjLmMgYi9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wt ZGVjLmMKPiBpbmRleCAzMThkNjc1ZTU2NjguLjMyODAxNmI0NTZiYSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wtZGVjLmMKPiArKysgYi9kcml2ZXJz L21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wtZGVjLmMKPiBAQCAtMjkwLDEzICsyOTAsMTQg QEAgc3RhdGljIHZvaWQgdmlzbF90cGdfZmlsbChzdHJ1Y3QgdmlzbF9jdHggKmN0eCwgc3RydWN0 IHZpc2xfcnVuICpydW4pCj4gICAJZm9yIChpID0gMDsgaSA8IG91dF9xLT5udW1fYnVmZmVyczsg aSsrKSB7Cj4gICAJCWNoYXIgZW50cnlbXSA9ICJpbmRleDogJXUsIHN0YXRlOiAlcywgcmVxdWVz dF9mZDogJWQsICI7Cj4gICAJCXUzMiBvbGRfbGVuID0gbGVuOwo+IC0JCWNoYXIgKnFfc3RhdHVz ID0gdmlzbF9nZXRfdmIyX3N0YXRlKG91dF9xLT5idWZzW2ldLT5zdGF0ZSk7Cj4gKwkJc3RydWN0 IHZiMl9idWZmZXIgKnZiMiA9IHZiMl9nZXRfYnVmZmVyKG91dF9xLCBpKTsKPiArCQljaGFyICpx X3N0YXR1cyA9IHZpc2xfZ2V0X3ZiMl9zdGF0ZSh2YjItPnN0YXRlKTsKPiAgIAo+ICAgCQlsZW4g Kz0gc2NucHJpbnRmKCZidWZbbGVuXSwgVFBHX1NUUl9CVUZfU1ogLSBsZW4sCj4gICAJCQkJIGVu dHJ5LCBpLCBxX3N0YXR1cywKPiAtCQkJCSB0b192YjJfdjRsMl9idWZmZXIob3V0X3EtPmJ1ZnNb aV0pLT5yZXF1ZXN0X2ZkKTsKPiArCQkJCSB0b192YjJfdjRsMl9idWZmZXIodmIyKS0+cmVxdWVz dF9mZCk7Cj4gICAKPiAtCQlsZW4gKz0gdmlzbF9maWxsX2J5dGVzdXNlZCh0b192YjJfdjRsMl9i dWZmZXIob3V0X3EtPmJ1ZnNbaV0pLAo+ICsJCWxlbiArPSB2aXNsX2ZpbGxfYnl0ZXN1c2VkKHRv X3ZiMl92NGwyX2J1ZmZlcih2YjIpLAo+ICAgCQkJCQkgICAmYnVmW2xlbl0sCj4gICAJCQkJCSAg IFRQR19TVFJfQlVGX1NaIC0gbGVuKTsKPiAgIAo+IEBAIC0zNDIsMTMgKzM0MywxNCBAQCBzdGF0 aWMgdm9pZCB2aXNsX3RwZ19maWxsKHN0cnVjdCB2aXNsX2N0eCAqY3R4LCBzdHJ1Y3QgdmlzbF9y dW4gKnJ1bikKPiAgIAlsZW4gPSAwOwo+ICAgCWZvciAoaSA9IDA7IGkgPCBjYXBfcS0+bnVtX2J1 ZmZlcnM7IGkrKykgewo+ICAgCQl1MzIgb2xkX2xlbiA9IGxlbjsKPiAtCQljaGFyICpxX3N0YXR1 cyA9IHZpc2xfZ2V0X3ZiMl9zdGF0ZShjYXBfcS0+YnVmc1tpXS0+c3RhdGUpOwo+ICsJCXN0cnVj dCB2YjJfYnVmZmVyICp2YjIgPSB2YjJfZ2V0X2J1ZmZlcihjYXBfcSwgaSk7Cj4gKwkJY2hhciAq cV9zdGF0dXMgPSB2aXNsX2dldF92YjJfc3RhdGUodmIyLT5zdGF0ZSk7Cj4gICAKPiAgIAkJbGVu ICs9IHNjbnByaW50ZigmYnVmW2xlbl0sIFRQR19TVFJfQlVGX1NaIC0gbGVuLAo+ICAgCQkJCSAi aW5kZXg6ICV1LCBzdGF0dXM6ICVzLCB0aW1lc3RhbXA6ICVsbHUsIGlzX2hlbGQ6ICVkIiwKPiAt CQkJCSBjYXBfcS0+YnVmc1tpXS0+aW5kZXgsIHFfc3RhdHVzLAo+IC0JCQkJIGNhcF9xLT5idWZz W2ldLT50aW1lc3RhbXAsCj4gLQkJCQkgdG9fdmIyX3Y0bDJfYnVmZmVyKGNhcF9xLT5idWZzW2ld KS0+aXNfaGVsZCk7Cj4gKwkJCQkgdmIyLT5pbmRleCwgcV9zdGF0dXMsCj4gKwkJCQkgdmIyLT50 aW1lc3RhbXAsCj4gKwkJCQkgdG9fdmIyX3Y0bDJfYnVmZmVyKHZiMiktPmlzX2hlbGQpOwo+ICAg Cj4gICAJCXRwZ19nZW5fdGV4dCgmY3R4LT50cGcsIGJhc2VwLCBsaW5lKysgKiBsaW5lX2hlaWdo dCwgMTYsICZidWZbb2xkX2xlbl0pOwo+ICAgCQlmcmFtZV9kcHJpbnRrKGN0eC0+ZGV2LCBydW4t PmRzdC0+c2VxdWVuY2UsICIlcyIsICZidWZbb2xkX2xlbl0pOwo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL21lZGlhL3ZpZGVvYnVmMi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmMi1jb3Jl LmgKPiBpbmRleCA0YjZhOWQyZWEzNzIuLmQxOGM1N2U3YWVmMCAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL21lZGlhL3ZpZGVvYnVmMi1jb3JlLmgKPiArKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVm Mi1jb3JlLmgKPiBAQCAtMTI0NCw2ICsxMjQ0LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZi Ml9idWZmZXIgKnZiMl9nZXRfYnVmZmVyKHN0cnVjdCB2YjJfcXVldWUgKnEsCj4gICAJcmV0dXJu IE5VTEw7Cj4gICB9Cj4gICAKPiArLyoqCj4gKyAqIHZiMl9zZXRfYnVmZmVyKCkgLSBzZXQgYSBi dWZmZXIgdG8gYSBxdWV1ZQo+ICsgKiBAcToJcG9pbnRlciB0byAmc3RydWN0IHZiMl9xdWV1ZSB3 aXRoIHZpZGVvYnVmMiBxdWV1ZS4KPiArICogQHZiOglwb2ludGVyIHRvICZzdHJ1Y3QgdmIyX2J1 ZmZlciB0byBiZSBhZGRlZCB0byB0aGUgcXVldWUuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgdmIyX3NldF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IHZiMl9idWZmZXIg KnZiKQo+ICt7Cj4gKwlxLT5idWZzW3ZiLT5pbmRleF0gPSB2YjsKCm5laXRoZXIgdGhpcy4uLgoK PiArfQo+ICsKPiArLyoqCj4gKyAqIHZiMl9kZWxfYnVmZmVyKCkgLSByZW1vdmUgYSBidWZmZXIg ZnJvbSBhIHF1ZXVlCj4gKyAqIEBxOglwb2ludGVyIHRvICZzdHJ1Y3QgdmIyX3F1ZXVlIHdpdGgg dmlkZW9idWYyIHF1ZXVlLgo+ICsgKiBAdmI6CXBvaW50ZXIgdG8gJnN0cnVjdCB2YjJfYnVmZmVy IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgdmIyX2RlbF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IHZiMl9idWZmZXIg KnZiKQo+ICt7Cj4gKwlxLT5idWZzW3ZiLT5pbmRleF0gPSBOVUxMOwoKbm9yIHRoaXMgZG9lcyBz by4gSXMgaXQgaW50ZW50aW9uYWw/Cgo+ICt9Cj4gKwo+ICAgLyoKPiAgICAqIFRoZSBmb2xsb3dp bmcgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgdmIyIGNvcmUgQVBJLCBidXQgYXJlIHVz ZWZ1bAo+ICAgICogZnVuY3Rpb25zIGZvciB2aWRlb2J1ZjItKi4KCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxp c3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFk ZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJvY2tjaGlwCg== 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 C4016C6FD19 for ; Mon, 13 Mar 2023 17:02:41 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Rv8Pq2fRRLm+IGpBkNoYLHjhoRl4luO/VZiNH5N83JA=; b=3dnb5KYYP+uQBa j4KarJTSu/DkdTsP5zO9JgNeNeG7zqXZGglzI7rXEwPeCAUFGs7Ik24UaYhB/aMvz7qflPS7LiOHr YZjWPeRnSqBk/ytG+T9y8nzCJWBBSPmXh0sH0bQUKfMbAq6YJKHmyxIO+5MHbIsDpHsh9S9y3YV4c zdA7NADpi74qxu5slYxZYvemM9nTNOE7oOdIc1ZrHSpj6tcRj/h/81AAGIb0McOVF3nAJsjLiFwyi CvDAVCq1usgOaP2BYt0ebogAEAXDgB3ADVkH1RBA/Y9nkK1fj04+hXkpqDrV/7N+txwdt76hK52vC ZR7Yzhe3QqxEd2gNJljQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pblXx-006vpw-ER; Mon, 13 Mar 2023 17:01:18 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pblOb-006sEV-BJ; Mon, 13 Mar 2023 16:51:40 +0000 Received: from [192.168.0.192] (unknown [194.146.248.75]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: andrzej.p) by madras.collabora.co.uk (Postfix) with ESMTPSA id D9D0D6602135; Mon, 13 Mar 2023 16:51:29 +0000 (GMT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1678726291; bh=dmX8aSMDGdnKVVwb34Im4TzUC75nbAE+WEfMhqfpkKY=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=UzL8AXuaUfv8YamQyQpf+4UGagM+ztPxrsuzVbGEdaf1Y+T4NBTJ8Pg0QAFFx1oqs sMnyl5XgTqO3yLpMi1Cd2XdGZAgkL7fh/x6W4LMmG0luQQlc5MEByNEGuLoVEXm2Bo Fb8FEYL3T6igcenf+H2Rxn7ZDNQGLKXIznqHvUA+6P0JuyiUnorhjEJTtS6gNjNp4I QrLealFvtUXSxaXGGVa7SutlClsrJBZBqcb69gOZGFJs4YQU16avJP3cW+XT/KzYqg bJQqipi4yi+A4JQ89cfMve9uUAl2yN7ec78aOyZOFNLUMc8ZiAlavE/BIP20sZBYMi txqySeN+zOhGw== Message-ID: <60c05cfb-9afb-3b25-7f91-71cf56ed6bfc@collabora.com> Date: Mon, 13 Mar 2023 17:51:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [RFC 1/4] media: videobuf2: Use vb2_get_buffer() as helper everywhere Content-Language: en-US To: Benjamin Gaignard , tfiga@chromium.org, m.szyprowski@samsung.com, mchehab@kernel.org, ming.qian@nxp.com, shijie.qin@nxp.com, eagle.zhou@nxp.com, bin.liu@mediatek.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com, tiffany.lin@mediatek.com, andrew-ct.chen@mediatek.com, yunfei.dong@mediatek.com, stanimir.k.varbanov@gmail.com, quic_vgarodia@quicinc.com, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de, daniel.almeida@collabora.com, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, jerbel@kernel.org Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-arm-msm@vger.kernel.org, linux-rockchip@lists.infradead.org, kernel@collabora.com References: <20230313135916.862852-1-benjamin.gaignard@collabora.com> <20230313135916.862852-2-benjamin.gaignard@collabora.com> From: Andrzej Pietrasiewicz In-Reply-To: <20230313135916.862852-2-benjamin.gaignard@collabora.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230313_095137_803635_75B95B67 X-CRM114-Status: GOOD ( 31.19 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQmVuamFtaW4sCgpXIGRuaXUgMTMuMDMuMjAyMyBvwqAxNDo1OSwgQmVuamFtaW4gR2FpZ25h cmQgcGlzemU6Cj4gVGhlIGZpcnN0IHN0ZXAgYmVmb3JlIGNoYW5naW5nIGhvdyB2YjIgYnVmZmVy cyBhcmUgc3RvcmVkIGludG8gcXVldWUKPiBpcyB0byBhdm9pZCBkaXJlY3QgY2FsbCB0byBidWZz IGFycmF5cy4KPiBUaGlzIHBhdGNoIGFkZCAyIGhlbHBlcnMgZnVuY3Rpb25zIHRvIHNldCBhbmQg ZGVsZXRlIHZiMiBidWZmZXJzCj4gZnJvbSBhIHF1ZXVlLiBXaXRoIHRoZXNlIDIgYW5kIHZiMl9n ZXRfYnVmZmVyKCksIGJ1ZnMgZmllbGQgb2YKPiBzdHJ1Y3QgdmIyX3F1ZXVlIGJlY29tZXMgbGlr ZSBhIHByaXZhdGUgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUuCj4gCj4gU2lnbmVkLW9mZi1ieTog QmVuamFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGNvbGxhYm9yYS5jb20+Cj4gLS0t Cj4gICAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jICAgfCA2OSAr KysrKysrKysrLS0tLS0tLS0tCj4gICAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1 ZjItdjRsMi5jICAgfCAxNyArKystLQo+ICAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9kYmcuYyAgICAgIHwgIDQgKy0KPiAgIC4uLi9wbGF0Zm9ybS9tZWRpYXRlay9qcGVnL210 a19qcGVnX2NvcmUuYyAgICB8ICAyICstCj4gICAuLi4vdmNvZGVjL3ZkZWMvdmRlY192cDlfcmVx X2xhdF9pZi5jICAgICAgICAgfCAgMiArLQo+ICAgZHJpdmVycy9tZWRpYS90ZXN0LWRyaXZlcnMv dmlzbC92aXNsLWRlYy5jICAgIHwgMTYgKysrLS0KPiAgIGluY2x1ZGUvbWVkaWEvdmlkZW9idWYy LWNvcmUuaCAgICAgICAgICAgICAgICB8IDIwICsrKysrKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCA4 MSBpbnNlcnRpb25zKCspLCA0OSBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1jb3JlLmMgYi9kcml2ZXJzL21lZGlh L2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLWNvcmUuYwo+IGluZGV4IGNmNjcyN2Q5YzgxZi4u YjUxMTUyYWNlNzYzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItY29yZS5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYy L3ZpZGVvYnVmMi1jb3JlLmMKPiBAQCAtMzU5LDcgKzM1OSw3IEBAIHN0YXRpYyB2b2lkIF9fc2V0 dXBfb2Zmc2V0cyhzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCj4gICAJdW5zaWduZWQgbG9uZyBvZmYg PSAwOwo+ICAgCj4gICAJaWYgKHZiLT5pbmRleCkgewo+IC0JCXN0cnVjdCB2YjJfYnVmZmVyICpw cmV2ID0gcS0+YnVmc1t2Yi0+aW5kZXggLSAxXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqcHJl diA9IHZiMl9nZXRfYnVmZmVyKHEsIHZiLT5pbmRleCAtIDEpOwoKaW50ZXJuYWxseSB2YjJfZ2V0 X2J1ZmZlcigpIHZlcmlmaWVzIHRoZSBpbmRleCBpcyB3aXRoaW4gYWxsb3dlZCByYW5nZSwgYnV0 Li4uCgo+ICAgCQlzdHJ1Y3QgdmIyX3BsYW5lICpwID0gJnByZXYtPnBsYW5lc1twcmV2LT5udW1f cGxhbmVzIC0gMV07Cj4gICAKPiAgIAkJb2ZmID0gUEFHRV9BTElHTihwLT5tLm9mZnNldCArIHAt Pmxlbmd0aCk7Cj4gQEAgLTQzNyw3ICs0MzcsNyBAQCBzdGF0aWMgaW50IF9fdmIyX3F1ZXVlX2Fs bG9jKHN0cnVjdCB2YjJfcXVldWUgKnEsIGVudW0gdmIyX21lbW9yeSBtZW1vcnksCj4gICAJCX0K PiAgIAkJY2FsbF92b2lkX2J1Zm9wKHEsIGluaXRfYnVmZmVyLCB2Yik7Cj4gICAKPiAtCQlxLT5i dWZzW3ZiLT5pbmRleF0gPSB2YjsKPiArCQl2YjJfc2V0X2J1ZmZlcihxLCB2Yik7Cj4gICAKPiAg IAkJLyogQWxsb2NhdGUgdmlkZW8gYnVmZmVyIG1lbW9yeSBmb3IgdGhlIE1NQVAgdHlwZSAqLwo+ ICAgCQlpZiAobWVtb3J5ID09IFZCMl9NRU1PUllfTU1BUCkgewo+IEBAIC00NDUsNyArNDQ1LDcg QEAgc3RhdGljIGludCBfX3ZiMl9xdWV1ZV9hbGxvYyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBlbnVt IHZiMl9tZW1vcnkgbWVtb3J5LAo+ICAgCQkJaWYgKHJldCkgewo+ICAgCQkJCWRwcmludGsocSwg MSwgImZhaWxlZCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgYnVmZmVyICVkXG4iLAo+ICAgCQkJCQli dWZmZXIpOwo+IC0JCQkJcS0+YnVmc1t2Yi0+aW5kZXhdID0gTlVMTDsKPiArCQkJCXZiMl9kZWxf YnVmZmVyKHEsIHZiKTsKPiAgIAkJCQlrZnJlZSh2Yik7Cj4gICAJCQkJYnJlYWs7Cj4gICAJCQl9 Cj4gQEAgLTQ2MCw3ICs0NjAsNyBAQCBzdGF0aWMgaW50IF9fdmIyX3F1ZXVlX2FsbG9jKHN0cnVj dCB2YjJfcXVldWUgKnEsIGVudW0gdmIyX21lbW9yeSBtZW1vcnksCj4gICAJCQkJZHByaW50ayhx LCAxLCAiYnVmZmVyICVkICVwIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKPiAgIAkJCQkJYnVm ZmVyLCB2Yik7Cj4gICAJCQkJX192YjJfYnVmX21lbV9mcmVlKHZiKTsKPiAtCQkJCXEtPmJ1ZnNb dmItPmluZGV4XSA9IE5VTEw7Cj4gKwkJCQl2YjJfZGVsX2J1ZmZlcihxLCB2Yik7Cj4gICAJCQkJ a2ZyZWUodmIpOwo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IEBAIC00ODMsNyArNDgzLDcgQEAg c3RhdGljIHZvaWQgX192YjJfZnJlZV9tZW0oc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQg aW50IGJ1ZmZlcnMpCj4gICAKPiAgIAlmb3IgKGJ1ZmZlciA9IHEtPm51bV9idWZmZXJzIC0gYnVm ZmVyczsgYnVmZmVyIDwgcS0+bnVtX2J1ZmZlcnM7Cj4gICAJICAgICArK2J1ZmZlcikgewo+IC0J CXZiID0gcS0+YnVmc1tidWZmZXJdOwo+ICsJCXZiID0gdmIyX2dldF9idWZmZXIocSwgYnVmZmVy KTsKPiAgIAkJaWYgKCF2YikKPiAgIAkJCWNvbnRpbnVlOwo+ICAgCj4gQEAgLTUxMSw3ICs1MTEs NyBAQCBzdGF0aWMgdm9pZCBfX3ZiMl9xdWV1ZV9mcmVlKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVu c2lnbmVkIGludCBidWZmZXJzKQo+ICAgCS8qIENhbGwgZHJpdmVyLXByb3ZpZGVkIGNsZWFudXAg ZnVuY3Rpb24gZm9yIGVhY2ggYnVmZmVyLCBpZiBwcm92aWRlZCAqLwo+ICAgCWZvciAoYnVmZmVy ID0gcS0+bnVtX2J1ZmZlcnMgLSBidWZmZXJzOyBidWZmZXIgPCBxLT5udW1fYnVmZmVyczsKPiAg IAkgICAgICsrYnVmZmVyKSB7Cj4gLQkJc3RydWN0IHZiMl9idWZmZXIgKnZiID0gcS0+YnVmc1ti dWZmZXJdOwo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1 ZmZlcik7Cj4gICAKPiAgIAkJaWYgKHZiICYmIHZiLT5wbGFuZXNbMF0ubWVtX3ByaXYpCj4gICAJ CQljYWxsX3ZvaWRfdmJfcW9wKHZiLCBidWZfY2xlYW51cCwgdmIpOwo+IEBAIC01OTEsOCArNTkx LDEwIEBAIHN0YXRpYyB2b2lkIF9fdmIyX3F1ZXVlX2ZyZWUoc3RydWN0IHZiMl9xdWV1ZSAqcSwg dW5zaWduZWQgaW50IGJ1ZmZlcnMpCj4gICAJLyogRnJlZSB2YjIgYnVmZmVycyAqLwo+ICAgCWZv ciAoYnVmZmVyID0gcS0+bnVtX2J1ZmZlcnMgLSBidWZmZXJzOyBidWZmZXIgPCBxLT5udW1fYnVm ZmVyczsKPiAgIAkgICAgICsrYnVmZmVyKSB7Cj4gLQkJa2ZyZWUocS0+YnVmc1tidWZmZXJdKTsK PiAtCQlxLT5idWZzW2J1ZmZlcl0gPSBOVUxMOwo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICp2YjIg PSB2YjJfZ2V0X2J1ZmZlcihxLCBidWZmZXIpOwo+ICsKPiArCQl2YjJfZGVsX2J1ZmZlcihxLCB2 YjIpOwo+ICsJCWtmcmVlKHZiMik7Cj4gICAJfQo+ICAgCj4gICAJcS0+bnVtX2J1ZmZlcnMgLT0g YnVmZmVyczsKPiBAQCAtNjI4LDcgKzYzMCw3IEBAIHN0YXRpYyBib29sIF9fYnVmZmVyc19pbl91 c2Uoc3RydWN0IHZiMl9xdWV1ZSAqcSkKPiAgIHsKPiAgIAl1bnNpZ25lZCBpbnQgYnVmZmVyOwo+ ICAgCWZvciAoYnVmZmVyID0gMDsgYnVmZmVyIDwgcS0+bnVtX2J1ZmZlcnM7ICsrYnVmZmVyKSB7 Cj4gLQkJaWYgKHZiMl9idWZmZXJfaW5fdXNlKHEsIHEtPmJ1ZnNbYnVmZmVyXSkpCj4gKwkJaWYg KHZiMl9idWZmZXJfaW5fdXNlKHEsIHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZlcikpKQo+ICAgCQkJ cmV0dXJuIHRydWU7Cj4gICAJfQo+ICAgCXJldHVybiBmYWxzZTsKPiBAQCAtNjM2LDcgKzYzOCw3 IEBAIHN0YXRpYyBib29sIF9fYnVmZmVyc19pbl91c2Uoc3RydWN0IHZiMl9xdWV1ZSAqcSkKPiAg IAo+ICAgdm9pZCB2YjJfY29yZV9xdWVyeWJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNpZ25l ZCBpbnQgaW5kZXgsIHZvaWQgKnBiKQo+ICAgewo+IC0JY2FsbF92b2lkX2J1Zm9wKHEsIGZpbGxf dXNlcl9idWZmZXIsIHEtPmJ1ZnNbaW5kZXhdLCBwYik7Cj4gKwljYWxsX3ZvaWRfYnVmb3AocSwg ZmlsbF91c2VyX2J1ZmZlciwgdmIyX2dldF9idWZmZXIocSwgaW5kZXgpLCBwYik7Cj4gICB9Cj4g ICBFWFBPUlRfU1lNQk9MX0dQTCh2YjJfY29yZV9xdWVyeWJ1Zik7Cj4gICAKPiBAQCAtMTU0Nyw3 ICsxNTQ5LDcgQEAgaW50IHZiMl9jb3JlX3ByZXBhcmVfYnVmKHN0cnVjdCB2YjJfcXVldWUgKnEs IHVuc2lnbmVkIGludCBpbmRleCwgdm9pZCAqcGIpCj4gICAJc3RydWN0IHZiMl9idWZmZXIgKnZi Owo+ICAgCWludCByZXQ7Cj4gICAKPiAtCXZiID0gcS0+YnVmc1tpbmRleF07Cj4gKwl2YiA9IHZi Ml9nZXRfYnVmZmVyKHEsIGluZGV4KTsKPiAgIAlpZiAodmItPnN0YXRlICE9IFZCMl9CVUZfU1RB VEVfREVRVUVVRUQpIHsKPiAgIAkJZHByaW50ayhxLCAxLCAiaW52YWxpZCBidWZmZXIgc3RhdGUg JXNcbiIsCj4gICAJCQl2YjJfc3RhdGVfbmFtZSh2Yi0+c3RhdGUpKTsKPiBAQCAtMTYxOCw3ICsx NjIwLDcgQEAgc3RhdGljIGludCB2YjJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUg KnEpCj4gICAJCSAqIGNvcnJlY3RseSByZXR1cm4gdGhlbSB0byB2YjIuCj4gICAJCSAqLwo+ICAg CQlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7ICsraSkgewo+IC0JCQl2YiA9IHEtPmJ1 ZnNbaV07Cj4gKwkJCXZiID0gdmIyX2dldF9idWZmZXIocSwgaSk7Cj4gICAJCQlpZiAodmItPnN0 YXRlID09IFZCMl9CVUZfU1RBVEVfQUNUSVZFKQo+ICAgCQkJCXZiMl9idWZmZXJfZG9uZSh2Yiwg VkIyX0JVRl9TVEFURV9RVUVVRUQpOwo+ICAgCQl9Cj4gQEAgLTE2NDYsNyArMTY0OCw3IEBAIGlu dCB2YjJfY29yZV9xYnVmKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBpbmRleCwg dm9pZCAqcGIsCj4gICAJCXJldHVybiAtRUlPOwo+ICAgCX0KPiAgIAo+IC0JdmIgPSBxLT5idWZz W2luZGV4XTsKPiArCXZiID0gdmIyX2dldF9idWZmZXIocSwgaW5kZXgpOwo+ICAgCj4gICAJaWYg KCFyZXEgJiYgdmItPnN0YXRlICE9IFZCMl9CVUZfU1RBVEVfSU5fUkVRVUVTVCAmJgo+ICAgCSAg ICBxLT5yZXF1aXJlc19yZXF1ZXN0cykgewo+IEBAIC0yMDIyLDEyICsyMDI0LDE1IEBAIHN0YXRp YyB2b2lkIF9fdmIyX3F1ZXVlX2NhbmNlbChzdHJ1Y3QgdmIyX3F1ZXVlICpxKQo+ICAgCSAqIHRv IHZiMiBpbiBzdG9wX3N0cmVhbWluZygpLgo+ICAgCSAqLwo+ICAgCWlmIChXQVJOX09OKGF0b21p Y19yZWFkKCZxLT5vd25lZF9ieV9kcnZfY291bnQpKSkgewo+IC0JCWZvciAoaSA9IDA7IGkgPCBx LT5udW1fYnVmZmVyczsgKytpKQo+IC0JCQlpZiAocS0+YnVmc1tpXS0+c3RhdGUgPT0gVkIyX0JV Rl9TVEFURV9BQ1RJVkUpIHsKPiArCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7ICsr aSkgewo+ICsJCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIyID0gdmIyX2dldF9idWZmZXIocSwgaSk7 Cj4gKwo+ICsJCQlpZiAodmIyLT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0FDVElWRSkgewo+ICAg CQkJCXByX3dhcm4oImRyaXZlciBidWc6IHN0b3Bfc3RyZWFtaW5nIG9wZXJhdGlvbiBpcyBsZWF2 aW5nIGJ1ZiAlcCBpbiBhY3RpdmUgc3RhdGVcbiIsCj4gLQkJCQkJcS0+YnVmc1tpXSk7Cj4gLQkJ CQl2YjJfYnVmZmVyX2RvbmUocS0+YnVmc1tpXSwgVkIyX0JVRl9TVEFURV9FUlJPUik7Cj4gKwkJ CQkJdmIyKTsKPiArCQkJCXZiMl9idWZmZXJfZG9uZSh2YjIsIFZCMl9CVUZfU1RBVEVfRVJST1Ip Owo+ICAgCQkJfQo+ICsJCX0KPiAgIAkJLyogTXVzdCBiZSB6ZXJvIG5vdyAqLwo+ICAgCQlXQVJO X09OKGF0b21pY19yZWFkKCZxLT5vd25lZF9ieV9kcnZfY291bnQpKTsKPiAgIAl9Cj4gQEAgLTIw NjEsNyArMjA2Niw3IEBAIHN0YXRpYyB2b2lkIF9fdmIyX3F1ZXVlX2NhbmNlbChzdHJ1Y3QgdmIy X3F1ZXVlICpxKQo+ICAgCSAqIGJlIGNoYW5nZWQsIHNvIHdlIGNhbid0IG1vdmUgdGhlIGJ1Zl9m aW5pc2goKSB0byBfX3ZiMl9kcWJ1ZigpLgo+ICAgCSAqLwo+ICAgCWZvciAoaSA9IDA7IGkgPCBx LT5udW1fYnVmZmVyczsgKytpKSB7Cj4gLQkJc3RydWN0IHZiMl9idWZmZXIgKnZiID0gcS0+YnVm c1tpXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBpKTsK PiAgIAkJc3RydWN0IG1lZGlhX3JlcXVlc3QgKnJlcSA9IHZiLT5yZXFfb2JqLnJlcTsKPiAgIAo+ ICAgCQkvKgo+IEBAIC0yMjE1LDcgKzIyMjAsNyBAQCBzdGF0aWMgaW50IF9fZmluZF9wbGFuZV9i eV9vZmZzZXQoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBvZmYsCj4gICAJICog cmV0dXJuIGl0cyBidWZmZXIgYW5kIHBsYW5lIG51bWJlcnMuCj4gICAJICovCj4gICAJZm9yIChi dWZmZXIgPSAwOyBidWZmZXIgPCBxLT5udW1fYnVmZmVyczsgKytidWZmZXIpIHsKPiAtCQl2YiA9 IHEtPmJ1ZnNbYnVmZmVyXTsKPiArCQl2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZlcik7Cj4g ICAKPiAgIAkJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgdmItPm51bV9wbGFuZXM7ICsrcGxhbmUp IHsKPiAgIAkJCWlmICh2Yi0+cGxhbmVzW3BsYW5lXS5tLm9mZnNldCA9PSBvZmYpIHsKPiBAQCAt MjI2Miw3ICsyMjY3LDcgQEAgaW50IHZiMl9jb3JlX2V4cGJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpx LCBpbnQgKmZkLCB1bnNpZ25lZCBpbnQgdHlwZSwKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJ fQo+ICAgCj4gLQl2YiA9IHEtPmJ1ZnNbaW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihx LCBpbmRleCk7Cj4gICAKPiAgIAlpZiAocGxhbmUgPj0gdmItPm51bV9wbGFuZXMpIHsKPiAgIAkJ ZHByaW50ayhxLCAxLCAiYnVmZmVyIHBsYW5lIG91dCBvZiByYW5nZVxuIik7Cj4gQEAgLTIzMzks NyArMjM0NCw3IEBAIGludCB2YjJfbW1hcChzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3QgKnZtYSkKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIHVubG9jazsKPiAgIAo+ IC0JdmIgPSBxLT5idWZzW2J1ZmZlcl07Cj4gKwl2YiA9IHZiMl9nZXRfYnVmZmVyKHEsIGJ1ZmZl cik7Cj4gICAKPiAgIAkvKgo+ICAgCSAqIE1NQVAgcmVxdWlyZXMgcGFnZV9hbGlnbmVkIGJ1ZmZl cnMuCj4gQEAgLTI2NzksNyArMjY4NCw3IEBAIHN0YXRpYyBpbnQgX192YjJfaW5pdF9maWxlaW8o c3RydWN0IHZiMl9xdWV1ZSAqcSwgaW50IHJlYWQpCj4gICAJICogQ2hlY2sgaWYgcGxhbmVfY291 bnQgaXMgY29ycmVjdAo+ICAgCSAqIChtdWx0aXBsYW5lIGJ1ZmZlcnMgYXJlIG5vdCBzdXBwb3J0 ZWQpLgo+ICAgCSAqLwo+IC0JaWYgKHEtPmJ1ZnNbMF0tPm51bV9wbGFuZXMgIT0gMSkgewo+ICsJ aWYgKHZiMl9nZXRfYnVmZmVyKHEsIDApLT5udW1fcGxhbmVzICE9IDEpIHsKPiAgIAkJcmV0ID0g LUVCVVNZOwo+ICAgCQlnb3RvIGVycl9yZXFidWZzOwo+ICAgCX0KPiBAQCAtMjY4OCwxMiArMjY5 MywxNCBAQCBzdGF0aWMgaW50IF9fdmIyX2luaXRfZmlsZWlvKHN0cnVjdCB2YjJfcXVldWUgKnEs IGludCByZWFkKQo+ICAgCSAqIEdldCBrZXJuZWwgYWRkcmVzcyBvZiBlYWNoIGJ1ZmZlci4KPiAg IAkgKi8KPiAgIAlmb3IgKGkgPSAwOyBpIDwgcS0+bnVtX2J1ZmZlcnM7IGkrKykgewo+IC0JCWZp bGVpby0+YnVmc1tpXS52YWRkciA9IHZiMl9wbGFuZV92YWRkcihxLT5idWZzW2ldLCAwKTsKPiAr CQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIyID0gdmIyX2dldF9idWZmZXIocSwgaSk7Cj4gKwo+ICsJ CWZpbGVpby0+YnVmc1tpXS52YWRkciA9IHZiMl9wbGFuZV92YWRkcih2YjIsIDApOwo+ICAgCQlp ZiAoZmlsZWlvLT5idWZzW2ldLnZhZGRyID09IE5VTEwpIHsKPiAgIAkJCXJldCA9IC1FSU5WQUw7 Cj4gICAJCQlnb3RvIGVycl9yZXFidWZzOwo+ICAgCQl9Cj4gLQkJZmlsZWlvLT5idWZzW2ldLnNp emUgPSB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2ldLCAwKTsKPiArCQlmaWxlaW8tPmJ1ZnNbaV0u c2l6ZSA9IHZiMl9wbGFuZV9zaXplKHZiMiwgMCk7Cj4gICAJfQo+ICAgCj4gICAJLyoKPiBAQCAt MjgyMSwxNSArMjgyOCwxNSBAQCBzdGF0aWMgc2l6ZV90IF9fdmIyX3BlcmZvcm1fZmlsZWlvKHN0 cnVjdCB2YjJfcXVldWUgKnEsIGNoYXIgX191c2VyICpkYXRhLCBzaXplXwo+ICAgCj4gICAJCWZp bGVpby0+Y3VyX2luZGV4ID0gaW5kZXg7Cj4gICAJCWJ1ZiA9ICZmaWxlaW8tPmJ1ZnNbaW5kZXhd Owo+IC0JCWIgPSBxLT5idWZzW2luZGV4XTsKPiArCQliID0gdmIyX2dldF9idWZmZXIocSwgaW5k ZXgpOwo+ICAgCj4gICAJCS8qCj4gICAJCSAqIEdldCBudW1iZXIgb2YgYnl0ZXMgZmlsbGVkIGJ5 IHRoZSBkcml2ZXIKPiAgIAkJICovCj4gICAJCWJ1Zi0+cG9zID0gMDsKPiAgIAkJYnVmLT5xdWV1 ZWQgPSAwOwo+IC0JCWJ1Zi0+c2l6ZSA9IHJlYWQgPyB2YjJfZ2V0X3BsYW5lX3BheWxvYWQocS0+ YnVmc1tpbmRleF0sIDApCj4gLQkJCQkgOiB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2luZGV4XSwg MCk7Cj4gKwkJYnVmLT5zaXplID0gcmVhZCA/IHZiMl9nZXRfcGxhbmVfcGF5bG9hZChiLCAwKQo+ ICsJCQkJIDogdmIyX3BsYW5lX3NpemUoYiwgMCk7Cj4gICAJCS8qIENvbXBlbnNhdGUgZm9yIGRh dGFfb2Zmc2V0IG9uIHJlYWQgaW4gdGhlIG11bHRpcGxhbmFyIGNhc2UuICovCj4gICAJCWlmIChp c19tdWx0aXBsYW5hciAmJiByZWFkICYmCj4gICAJCQkJYi0+cGxhbmVzWzBdLmRhdGFfb2Zmc2V0 IDwgYnVmLT5zaXplKSB7Cj4gQEAgLTI4NzIsNyArMjg3OSw3IEBAIHN0YXRpYyBzaXplX3QgX192 YjJfcGVyZm9ybV9maWxlaW8oc3RydWN0IHZiMl9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmRhdGEs IHNpemVfCj4gICAJICogUXVldWUgbmV4dCBidWZmZXIgaWYgcmVxdWlyZWQuCj4gICAJICovCj4g ICAJaWYgKGJ1Zi0+cG9zID09IGJ1Zi0+c2l6ZSB8fCAoIXJlYWQgJiYgZmlsZWlvLT53cml0ZV9p bW1lZGlhdGVseSkpIHsKPiAtCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqYiA9IHEtPmJ1ZnNbaW5kZXhd Owo+ICsJCXN0cnVjdCB2YjJfYnVmZmVyICpiID0gdmIyX2dldF9idWZmZXIocSwgaW5kZXgpOwo+ ICAgCj4gICAJCS8qCj4gICAJCSAqIENoZWNrIGlmIHRoaXMgaXMgdGhlIGxhc3QgYnVmZmVyIHRv IHJlYWQuCj4gQEAgLTI4OTksNyArMjkwNiw3IEBAIHN0YXRpYyBzaXplX3QgX192YjJfcGVyZm9y bV9maWxlaW8oc3RydWN0IHZiMl9xdWV1ZSAqcSwgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfCj4g ICAJCSAqLwo+ICAgCQlidWYtPnBvcyA9IDA7Cj4gICAJCWJ1Zi0+cXVldWVkID0gMTsKPiAtCQli dWYtPnNpemUgPSB2YjJfcGxhbmVfc2l6ZShxLT5idWZzW2luZGV4XSwgMCk7Cj4gKwkJYnVmLT5z aXplID0gdmIyX3BsYW5lX3NpemUodmIyX2dldF9idWZmZXIocSwgaW5kZXgpLCAwKTsKPiAgIAkJ ZmlsZWlvLT5xX2NvdW50ICs9IDE7Cj4gICAJCS8qCj4gICAJCSAqIElmIHdlIGFyZSBxdWV1aW5n IHVwIGJ1ZmZlcnMgZm9yIHRoZSBmaXJzdCB0aW1lLCB0aGVuCj4gQEAgLTI5NzAsNyArMjk3Nyw3 IEBAIHN0YXRpYyBpbnQgdmIyX3RocmVhZCh2b2lkICpkYXRhKQo+ICAgCQkgKiBDYWxsIHZiMl9k cWJ1ZiB0byBnZXQgYnVmZmVyIGJhY2suCj4gICAJCSAqLwo+ICAgCQlpZiAocHJlcXVldWUpIHsK PiAtCQkJdmIgPSBxLT5idWZzW2luZGV4KytdOwo+ICsJCQl2YiA9IHZiMl9nZXRfYnVmZmVyKHEs IGluZGV4KyspOwo+ICAgCQkJcHJlcXVldWUtLTsKPiAgIAkJfSBlbHNlIHsKPiAgIAkJCWNhbGxf dm9pZF9xb3AocSwgd2FpdF9maW5pc2gsIHEpOwo+IEBAIC0yOTc5LDcgKzI5ODYsNyBAQCBzdGF0 aWMgaW50IHZiMl90aHJlYWQodm9pZCAqZGF0YSkKPiAgIAkJCWNhbGxfdm9pZF9xb3AocSwgd2Fp dF9wcmVwYXJlLCBxKTsKPiAgIAkJCWRwcmludGsocSwgNSwgImZpbGUgaW86IHZiMl9kcWJ1ZiBy ZXN1bHQ6ICVkXG4iLCByZXQpOwo+ICAgCQkJaWYgKCFyZXQpCj4gLQkJCQl2YiA9IHEtPmJ1ZnNb aW5kZXhdOwo+ICsJCQkJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBpbmRleCk7Cj4gICAJCX0KPiAg IAkJaWYgKHJldCB8fCB0aHJlYWRpby0+c3RvcCkKPiAgIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuYyBiL2RyaXZl cnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItdjRsMi5jCj4gaW5kZXggMWY1ZDIz NWE4NDQxLi4wMWIyYmI5NTcyMzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24v dmlkZW9idWYyL3ZpZGVvYnVmMi12NGwyLmMKPiArKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92 aWRlb2J1ZjIvdmlkZW9idWYyLXY0bDIuYwo+IEBAIC0zODMsNyArMzgzLDcgQEAgc3RhdGljIGlu dCB2YjJfcXVldWVfb3JfcHJlcGFyZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IG1l ZGlhX2RldmljZSAqbWQKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQlpZiAo cS0+YnVmc1tiLT5pbmRleF0gPT0gTlVMTCkgewo+ICsJaWYgKCF2YjJfZ2V0X2J1ZmZlcihxLCBi LT5pbmRleCkpIHsKPiAgIAkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLwo+ICAgCQlkcHJpbnRr KHEsIDEsICIlczogYnVmZmVyIGlzIE5VTExcbiIsIG9wbmFtZSk7Cj4gICAJCXJldHVybiAtRUlO VkFMOwo+IEBAIC0zOTQsNyArMzk0LDcgQEAgc3RhdGljIGludCB2YjJfcXVldWVfb3JfcHJlcGFy ZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IG1lZGlhX2RldmljZSAqbWQKPiAgIAkJ cmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQl2YiA9IHEtPmJ1ZnNbYi0+aW5kZXhdOwo+ ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBiLT5pbmRleCk7Cj4gICAJdmJ1ZiA9IHRvX3ZiMl92 NGwyX2J1ZmZlcih2Yik7Cj4gICAJcmV0ID0gX192ZXJpZnlfcGxhbmVzX2FycmF5KHZiLCBiKTsK PiAgIAlpZiAocmV0KQo+IEBAIC02MjgsMTEgKzYyOCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0 IHZiMl9idWZfb3BzIHY0bDJfYnVmX29wcyA9IHsKPiAgIHN0cnVjdCB2YjJfYnVmZmVyICp2YjJf ZmluZF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdTY0IHRpbWVzdGFtcCkKPiAgIHsKPiAg IAl1bnNpZ25lZCBpbnQgaTsKPiArCXN0cnVjdCB2YjJfYnVmZmVyICp2YjI7Cj4gICAKPiAtCWZv ciAoaSA9IDA7IGkgPCBxLT5udW1fYnVmZmVyczsgaSsrKQo+IC0JCWlmIChxLT5idWZzW2ldLT5j b3BpZWRfdGltZXN0YW1wICYmCj4gLQkJICAgIHEtPmJ1ZnNbaV0tPnRpbWVzdGFtcCA9PSB0aW1l c3RhbXApCj4gLQkJCXJldHVybiB2YjJfZ2V0X2J1ZmZlcihxLCBpKTsKPiArCWZvciAoaSA9IDA7 IGkgPCBxLT5udW1fYnVmZmVyczsgaSsrKSB7Cj4gKwkJdmIyID0gdmIyX2dldF9idWZmZXIocSwg aSk7Cj4gKwkJaWYgKHZiMi0+Y29waWVkX3RpbWVzdGFtcCAmJgo+ICsJCSAgICB2YjItPnRpbWVz dGFtcCA9PSB0aW1lc3RhbXApCj4gKwkJCXJldHVybiB2YjI7Cj4gKwl9Cj4gICAJcmV0dXJuIE5V TEw7Cj4gICB9Cj4gICBFWFBPUlRfU1lNQk9MX0dQTCh2YjJfZmluZF9idWZmZXIpOwo+IEBAIC02 NjQsNyArNjY3LDcgQEAgaW50IHZiMl9xdWVyeWJ1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1 Y3QgdjRsMl9idWZmZXIgKmIpCj4gICAJCWRwcmludGsocSwgMSwgImJ1ZmZlciBpbmRleCBvdXQg b2YgcmFuZ2VcbiIpOwo+ICAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgIAl9Cj4gLQl2YiA9IHEtPmJ1 ZnNbYi0+aW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcihxLCBiLT5pbmRleCk7Cj4gICAJ cmV0ID0gX192ZXJpZnlfcGxhbmVzX2FycmF5KHZiLCBiKTsKPiAgIAlpZiAoIXJldCkKPiAgIAkJ dmIyX2NvcmVfcXVlcnlidWYocSwgYi0+aW5kZXgsIGIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hbXBoaW9uL3ZwdV9kYmcuYwo+IGluZGV4IDQ0YjgzMGFlMDFkOC4uOGE0MjNjMWY2YjU1IDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMKPiAr KysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2RiZy5jCj4gQEAgLTEzMyw3 ICsxMzMsNyBAQCBzdGF0aWMgaW50IHZwdV9kYmdfaW5zdGFuY2Uoc3RydWN0IHNlcV9maWxlICpz LCB2b2lkICpkYXRhKQo+ICAgCj4gICAJdnEgPSB2NGwyX20ybV9nZXRfc3JjX3ZxKGluc3QtPmZo Lm0ybV9jdHgpOwo+ICAgCWZvciAoaSA9IDA7IGkgPCB2cS0+bnVtX2J1ZmZlcnM7IGkrKykgewo+ IC0JCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9IHZxLT5idWZzW2ldOwo+ICsJCXN0cnVjdCB2YjJf YnVmZmVyICp2YiA9IHZiMl9nZXRfYnVmZmVyKHZxLCBpKTsKPiAgIAkJc3RydWN0IHZiMl92NGwy X2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7Cj4gICAKPiAgIAkJaWYgKHZi LT5zdGF0ZSA9PSBWQjJfQlVGX1NUQVRFX0RFUVVFVUVEKQo+IEBAIC0xNDgsNyArMTQ4LDcgQEAg c3RhdGljIGludCB2cHVfZGJnX2luc3RhbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0 YSkKPiAgIAo+ICAgCXZxID0gdjRsMl9tMm1fZ2V0X2RzdF92cShpbnN0LT5maC5tMm1fY3R4KTsK PiAgIAlmb3IgKGkgPSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsKPiAtCQlzdHJ1Y3Qg dmIyX2J1ZmZlciAqdmIgPSB2cS0+YnVmc1tpXTsKPiArCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIg PSB2YjJfZ2V0X2J1ZmZlcih2cSwgaSk7Cj4gICAJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZi dWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOwo+ICAgCj4gICAJCWlmICh2Yi0+c3RhdGUgPT0g VkIyX0JVRl9TVEFURV9ERVFVRVVFRCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9tZWRpYXRlay9qcGVnL210a19qcGVnX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vbWVkaWF0ZWsvanBlZy9tdGtfanBlZ19jb3JlLmMKPiBpbmRleCA5Njk1MTZhOTQwYmEuLjBi ZTA3ZjY5MWQ5YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlhdGVr L2pwZWcvbXRrX2pwZWdfY29yZS5jCj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tZWRp YXRlay9qcGVnL210a19qcGVnX2NvcmUuYwo+IEBAIC02MDMsNyArNjAzLDcgQEAgc3RhdGljIGlu dCBtdGtfanBlZ19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRs Ml9idWZmZXIgKmJ1ZikKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+ICAgCj4gLQl2YiA9 IHZxLT5idWZzW2J1Zi0+aW5kZXhdOwo+ICsJdmIgPSB2YjJfZ2V0X2J1ZmZlcih2cSwgYnVmLT5p bmRleCk7Cj4gICAJanBlZ19zcmNfYnVmID0gbXRrX2pwZWdfdmIyX3RvX3NyY2J1Zih2Yik7Cj4g ICAJanBlZ19zcmNfYnVmLT5ic19zaXplID0gYnVmLT5tLnBsYW5lc1swXS5ieXRlc3VzZWQ7Cj4g ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tZWRpYXRlay92Y29kZWMv dmRlYy92ZGVjX3ZwOV9yZXFfbGF0X2lmLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21lZGlh dGVrL3Zjb2RlYy92ZGVjL3ZkZWNfdnA5X3JlcV9sYXRfaWYuYwo+IGluZGV4IGNiYjY3MjhiOGE0 MC4uZjU5NThiNmQ4MzRhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWVk aWF0ZWsvdmNvZGVjL3ZkZWMvdmRlY192cDlfcmVxX2xhdF9pZi5jCj4gKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9tZWRpYXRlay92Y29kZWMvdmRlYy92ZGVjX3ZwOV9yZXFfbGF0X2lmLmMK PiBAQCAtMTcwMSw3ICsxNzAxLDcgQEAgc3RhdGljIGludCB2ZGVjX3ZwOV9zbGljZV9zZXR1cF9j b3JlX2J1ZmZlcihzdHJ1Y3QgdmRlY192cDlfc2xpY2VfaW5zdGFuY2UgKmluc3QKPiAgIAo+ICAg CS8qIHVwZGF0ZSBpbnRlcm5hbCBidWZmZXIncyB3aWR0aC9oZWlnaHQgKi8KPiAgIAlmb3IgKGkg PSAwOyBpIDwgdnEtPm51bV9idWZmZXJzOyBpKyspIHsKPiAtCQlpZiAodmIgPT0gdnEtPmJ1ZnNb aV0pIHsKPiArCQlpZiAodmIgPT0gdmIyX2dldF9idWZmZXIodnEsIGkpKSB7Cj4gICAJCQlpbnN0 YW5jZS0+ZHBiW2ldLndpZHRoID0gdzsKPiAgIAkJCWluc3RhbmNlLT5kcGJbaV0uaGVpZ2h0ID0g aDsKPiAgIAkJCWJyZWFrOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVy cy92aXNsL3Zpc2wtZGVjLmMgYi9kcml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wt ZGVjLmMKPiBpbmRleCAzMThkNjc1ZTU2NjguLjMyODAxNmI0NTZiYSAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wtZGVjLmMKPiArKysgYi9kcml2ZXJz L21lZGlhL3Rlc3QtZHJpdmVycy92aXNsL3Zpc2wtZGVjLmMKPiBAQCAtMjkwLDEzICsyOTAsMTQg QEAgc3RhdGljIHZvaWQgdmlzbF90cGdfZmlsbChzdHJ1Y3QgdmlzbF9jdHggKmN0eCwgc3RydWN0 IHZpc2xfcnVuICpydW4pCj4gICAJZm9yIChpID0gMDsgaSA8IG91dF9xLT5udW1fYnVmZmVyczsg aSsrKSB7Cj4gICAJCWNoYXIgZW50cnlbXSA9ICJpbmRleDogJXUsIHN0YXRlOiAlcywgcmVxdWVz dF9mZDogJWQsICI7Cj4gICAJCXUzMiBvbGRfbGVuID0gbGVuOwo+IC0JCWNoYXIgKnFfc3RhdHVz ID0gdmlzbF9nZXRfdmIyX3N0YXRlKG91dF9xLT5idWZzW2ldLT5zdGF0ZSk7Cj4gKwkJc3RydWN0 IHZiMl9idWZmZXIgKnZiMiA9IHZiMl9nZXRfYnVmZmVyKG91dF9xLCBpKTsKPiArCQljaGFyICpx X3N0YXR1cyA9IHZpc2xfZ2V0X3ZiMl9zdGF0ZSh2YjItPnN0YXRlKTsKPiAgIAo+ICAgCQlsZW4g Kz0gc2NucHJpbnRmKCZidWZbbGVuXSwgVFBHX1NUUl9CVUZfU1ogLSBsZW4sCj4gICAJCQkJIGVu dHJ5LCBpLCBxX3N0YXR1cywKPiAtCQkJCSB0b192YjJfdjRsMl9idWZmZXIob3V0X3EtPmJ1ZnNb aV0pLT5yZXF1ZXN0X2ZkKTsKPiArCQkJCSB0b192YjJfdjRsMl9idWZmZXIodmIyKS0+cmVxdWVz dF9mZCk7Cj4gICAKPiAtCQlsZW4gKz0gdmlzbF9maWxsX2J5dGVzdXNlZCh0b192YjJfdjRsMl9i dWZmZXIob3V0X3EtPmJ1ZnNbaV0pLAo+ICsJCWxlbiArPSB2aXNsX2ZpbGxfYnl0ZXN1c2VkKHRv X3ZiMl92NGwyX2J1ZmZlcih2YjIpLAo+ICAgCQkJCQkgICAmYnVmW2xlbl0sCj4gICAJCQkJCSAg IFRQR19TVFJfQlVGX1NaIC0gbGVuKTsKPiAgIAo+IEBAIC0zNDIsMTMgKzM0MywxNCBAQCBzdGF0 aWMgdm9pZCB2aXNsX3RwZ19maWxsKHN0cnVjdCB2aXNsX2N0eCAqY3R4LCBzdHJ1Y3QgdmlzbF9y dW4gKnJ1bikKPiAgIAlsZW4gPSAwOwo+ICAgCWZvciAoaSA9IDA7IGkgPCBjYXBfcS0+bnVtX2J1 ZmZlcnM7IGkrKykgewo+ICAgCQl1MzIgb2xkX2xlbiA9IGxlbjsKPiAtCQljaGFyICpxX3N0YXR1 cyA9IHZpc2xfZ2V0X3ZiMl9zdGF0ZShjYXBfcS0+YnVmc1tpXS0+c3RhdGUpOwo+ICsJCXN0cnVj dCB2YjJfYnVmZmVyICp2YjIgPSB2YjJfZ2V0X2J1ZmZlcihjYXBfcSwgaSk7Cj4gKwkJY2hhciAq cV9zdGF0dXMgPSB2aXNsX2dldF92YjJfc3RhdGUodmIyLT5zdGF0ZSk7Cj4gICAKPiAgIAkJbGVu ICs9IHNjbnByaW50ZigmYnVmW2xlbl0sIFRQR19TVFJfQlVGX1NaIC0gbGVuLAo+ICAgCQkJCSAi aW5kZXg6ICV1LCBzdGF0dXM6ICVzLCB0aW1lc3RhbXA6ICVsbHUsIGlzX2hlbGQ6ICVkIiwKPiAt CQkJCSBjYXBfcS0+YnVmc1tpXS0+aW5kZXgsIHFfc3RhdHVzLAo+IC0JCQkJIGNhcF9xLT5idWZz W2ldLT50aW1lc3RhbXAsCj4gLQkJCQkgdG9fdmIyX3Y0bDJfYnVmZmVyKGNhcF9xLT5idWZzW2ld KS0+aXNfaGVsZCk7Cj4gKwkJCQkgdmIyLT5pbmRleCwgcV9zdGF0dXMsCj4gKwkJCQkgdmIyLT50 aW1lc3RhbXAsCj4gKwkJCQkgdG9fdmIyX3Y0bDJfYnVmZmVyKHZiMiktPmlzX2hlbGQpOwo+ICAg Cj4gICAJCXRwZ19nZW5fdGV4dCgmY3R4LT50cGcsIGJhc2VwLCBsaW5lKysgKiBsaW5lX2hlaWdo dCwgMTYsICZidWZbb2xkX2xlbl0pOwo+ICAgCQlmcmFtZV9kcHJpbnRrKGN0eC0+ZGV2LCBydW4t PmRzdC0+c2VxdWVuY2UsICIlcyIsICZidWZbb2xkX2xlbl0pOwo+IGRpZmYgLS1naXQgYS9pbmNs dWRlL21lZGlhL3ZpZGVvYnVmMi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmMi1jb3Jl LmgKPiBpbmRleCA0YjZhOWQyZWEzNzIuLmQxOGM1N2U3YWVmMCAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL21lZGlhL3ZpZGVvYnVmMi1jb3JlLmgKPiArKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVm Mi1jb3JlLmgKPiBAQCAtMTI0NCw2ICsxMjQ0LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZi Ml9idWZmZXIgKnZiMl9nZXRfYnVmZmVyKHN0cnVjdCB2YjJfcXVldWUgKnEsCj4gICAJcmV0dXJu IE5VTEw7Cj4gICB9Cj4gICAKPiArLyoqCj4gKyAqIHZiMl9zZXRfYnVmZmVyKCkgLSBzZXQgYSBi dWZmZXIgdG8gYSBxdWV1ZQo+ICsgKiBAcToJcG9pbnRlciB0byAmc3RydWN0IHZiMl9xdWV1ZSB3 aXRoIHZpZGVvYnVmMiBxdWV1ZS4KPiArICogQHZiOglwb2ludGVyIHRvICZzdHJ1Y3QgdmIyX2J1 ZmZlciB0byBiZSBhZGRlZCB0byB0aGUgcXVldWUuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgdmIyX3NldF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IHZiMl9idWZmZXIg KnZiKQo+ICt7Cj4gKwlxLT5idWZzW3ZiLT5pbmRleF0gPSB2YjsKCm5laXRoZXIgdGhpcy4uLgoK PiArfQo+ICsKPiArLyoqCj4gKyAqIHZiMl9kZWxfYnVmZmVyKCkgLSByZW1vdmUgYSBidWZmZXIg ZnJvbSBhIHF1ZXVlCj4gKyAqIEBxOglwb2ludGVyIHRvICZzdHJ1Y3QgdmIyX3F1ZXVlIHdpdGgg dmlkZW9idWYyIHF1ZXVlLgo+ICsgKiBAdmI6CXBvaW50ZXIgdG8gJnN0cnVjdCB2YjJfYnVmZmVy IHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHZv aWQgdmIyX2RlbF9idWZmZXIoc3RydWN0IHZiMl9xdWV1ZSAqcSwgc3RydWN0IHZiMl9idWZmZXIg KnZiKQo+ICt7Cj4gKwlxLT5idWZzW3ZiLT5pbmRleF0gPSBOVUxMOwoKbm9yIHRoaXMgZG9lcyBz by4gSXMgaXQgaW50ZW50aW9uYWw/Cgo+ICt9Cj4gKwo+ICAgLyoKPiAgICAqIFRoZSBmb2xsb3dp bmcgZnVuY3Rpb25zIGFyZSBub3QgcGFydCBvZiB0aGUgdmIyIGNvcmUgQVBJLCBidXQgYXJlIHVz ZWZ1bAo+ICAgICogZnVuY3Rpb25zIGZvciB2aWRlb2J1ZjItKi4KCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==