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 BD276EB64DC for ; Mon, 26 Jun 2023 07:48:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229717AbjFZHsp (ORCPT ); Mon, 26 Jun 2023 03:48:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38392 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229770AbjFZHsn (ORCPT ); Mon, 26 Jun 2023 03:48:43 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D2DB1B1; Mon, 26 Jun 2023 00:48:37 -0700 (PDT) Received: from [IPV6:2a01:e0a:120:3210:960a:2463:3114:4c3a] (unknown [IPv6:2a01:e0a:120:3210:960a:2463:3114:4c3a]) (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: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 55F0E6607113; Mon, 26 Jun 2023 08:48:35 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1687765715; bh=G/GIgYrmoJj0dG40UwbmNhWWtziwx1kJTwCIfcKa/os=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=DPSJrQaXeeLSwERR2pUdSOSuMx+7/fb5bAJMBR8c9n7bDN58icTSNzWFKa0A1cL2J xxbLPB9dTt4ffUHKAhdhMJqSmOXg9vLr5toQ/at+X8zNBdvOq8pN9dX1BQhYbyCyX+ tx4949AZoGURQ77PNVE9QnU17NWXH4WtaE2yOCaruWTBmMklPW97vTBStMZffJ/L9p di5W9qpTazPRFDOrYR5+Ag4cHP055yTR9eXFl1KH4cCqkA8h/aioMpfbLrX7gmkf13 BlJ0lyfPoOxEmK7qxFR6EVvkIfQyW+a5U/TLRIzP0IOsubqTfnfPX3J+59sntvumwM L9ThGrQ8AEPzg== Message-ID: Date: Mon, 26 Jun 2023 09:48:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [EXT] [PATCH v3 10/11] media: v4l2: Add DELETE_BUF ioctl To: Ming Qian , "mchehab@kernel.org" , "tfiga@chromium.org" , "m.szyprowski@samsung.com" , "ezequiel@vanguardiasur.com.ar" , "p.zabel@pengutronix.de" , "gregkh@linuxfoundation.org" , "hverkuil-cisco@xs4all.nl" , "nicolas.dufresne@collabora.com" 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" , "linux-staging@lists.linux.dev" , "kernel@collabora.com" References: <20230622131349.144160-1-benjamin.gaignard@collabora.com> <20230622131349.144160-11-benjamin.gaignard@collabora.com> Content-Language: en-US From: Benjamin Gaignard In-Reply-To: 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 Le 26/06/2023 à 09:08, Ming Qian a écrit : > Hi Benjamin, > >> -----Original Message----- >> From: Benjamin Gaignard >> Sent: 2023年6月22日 21:14 >> To: mchehab@kernel.org; tfiga@chromium.org; m.szyprowski@samsung.com; >> Ming Qian ; ezequiel@vanguardiasur.com.ar; >> p.zabel@pengutronix.de; gregkh@linuxfoundation.org; hverkuil- >> cisco@xs4all.nl; nicolas.dufresne@collabora.com >> 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; linux- >> staging@lists.linux.dev; kernel@collabora.com; Benjamin Gaignard >> >> Subject: [EXT] [PATCH v3 10/11] media: v4l2: Add DELETE_BUF ioctl >> >> Caution: This is an external email. Please take care when clicking links or >> opening attachments. When in doubt, report the message using the 'Report >> this email' button >> >> >> VIDIOC_DELETE_BUF ioctl allows to delete a buffer from a queue. >> >> Signed-off-by: Benjamin Gaignard >> --- >> .../userspace-api/media/v4l/user-func.rst | 1 + >> .../media/v4l/vidioc-delete-buf.rst | 51 +++++++++++++++++++ >> .../media/common/videobuf2/videobuf2-core.c | 33 ++++++++++++ >> .../media/common/videobuf2/videobuf2-v4l2.c | 6 +++ >> drivers/media/v4l2-core/v4l2-dev.c | 1 + >> drivers/media/v4l2-core/v4l2-ioctl.c | 10 ++++ >> include/media/v4l2-ioctl.h | 4 ++ >> include/media/videobuf2-core.h | 9 ++++ >> include/media/videobuf2-v4l2.h | 11 ++++ >> include/uapi/linux/videodev2.h | 2 + >> 10 files changed, 128 insertions(+) >> create mode 100644 Documentation/userspace-api/media/v4l/vidioc-delete- >> buf.rst >> >> diff --git a/Documentation/userspace-api/media/v4l/user-func.rst >> b/Documentation/userspace-api/media/v4l/user-func.rst >> index 15ff0bf7bbe6..8c74016e12fd 100644 >> --- a/Documentation/userspace-api/media/v4l/user-func.rst >> +++ b/Documentation/userspace-api/media/v4l/user-func.rst >> @@ -17,6 +17,7 @@ Function Reference >> vidioc-dbg-g-chip-info >> vidioc-dbg-g-register >> vidioc-decoder-cmd >> + vidioc-delete-buf >> vidioc-dqevent >> vidioc-dv-timings-cap >> vidioc-encoder-cmd >> diff --git a/Documentation/userspace-api/media/v4l/vidioc-delete-buf.rst >> b/Documentation/userspace-api/media/v4l/vidioc-delete-buf.rst >> new file mode 100644 >> index 000000000000..0e7ce58f91bc >> --- /dev/null >> +++ b/Documentation/userspace-api/media/v4l/vidioc-delete-buf.rst >> @@ -0,0 +1,51 @@ >> +.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later .. >> +c:namespace:: V4L >> + >> +.. _VIDIOC_DELETE_BUF: >> + >> +************************ >> +ioctl VIDIOC_DELETE_BUF >> +************************ >> + >> +Name >> +==== >> + >> +VIDIOC_DELETE_BUF - Delete a buffer from a queue >> + >> +Synopsis >> +======== >> + >> +.. c:macro:: VIDIOC_DELETE_BUF >> + >> +``int ioctl(int fd, VIDIOC_DELETE_BUF, struct v4l2_buffer *argp)`` >> + >> +Arguments >> +========= >> + >> +``fd`` >> + File descriptor returned by :c:func:`open()`. >> + >> +``argp`` >> + Pointer to struct :c:type:`v4l2_buffer`. >> + >> +Description >> +=========== >> + >> +Applications can optionally call the :ref:`VIDIOC_DELETE_BUF` ioctl to >> +delete a buffer from a queue. >> + >> +The struct :c:type:`v4l2_buffer` structure is specified in >> +:ref:`buffer`. >> + >> +Return Value >> +============ >> + >> +On success 0 is returned, on error -1 and the ``errno`` variable is set >> +appropriately. The generic error codes are described at the >> +:ref:`Generic Error Codes ` chapter. >> + >> +EBUSY >> + File I/O is in progress. >> + >> +EINVAL >> + The buffer ``index`` doesn't exist in the queue. >> diff --git a/drivers/media/common/videobuf2/videobuf2-core.c >> b/drivers/media/common/videobuf2/videobuf2-core.c >> index 899783f67580..aa546c972c3d 100644 >> --- a/drivers/media/common/videobuf2/videobuf2-core.c >> +++ b/drivers/media/common/videobuf2/videobuf2-core.c >> @@ -1637,6 +1637,39 @@ int vb2_core_prepare_buf(struct vb2_queue *q, >> unsigned int index, void *pb) } >> EXPORT_SYMBOL_GPL(vb2_core_prepare_buf); >> >> +int vb2_core_delete_buf(struct vb2_queue *q, unsigned int index) { >> + struct vb2_buffer *vb; >> + >> + vb = vb2_get_buffer(q, index); >> + if (!vb) { >> + dprintk(q, 1, "invalid buffer index %d\n", index); >> + return -EINVAL; >> + } >> + >> + if (vb->state != VB2_BUF_STATE_DEQUEUED) { >> + dprintk(q, 1, "can't delete non dequeued buffer index %d\n", index); >> + return -EINVAL; >> + } >> + >> + if (vb->planes[0].mem_priv) >> + call_void_vb_qop(vb, buf_cleanup, vb); >> + >> + /* Free MMAP buffers or release USERPTR buffers */ >> + if (q->memory == VB2_MEMORY_MMAP) >> + __vb2_buf_mem_free(vb); >> + else if (q->memory == VB2_MEMORY_DMABUF) >> + __vb2_buf_dmabuf_put(vb); >> + else >> + __vb2_buf_userptr_put(vb); >> + >> + vb2_queue_remove_buffer(q, vb); >> + kfree(vb); > The num_buffers is not changed, Is that on purpose? > num_buffers doesn't mean the number of vb2 buffers, but only decides the max index of allocated vb2 buffer? > Once the index is deleted, then it won't be used anymore, unless free the vb2 queue? is it a hole in vb2 queue? Yes num_buffers isn't change and still represent the highest index of allocated buffer. DELETE_BUF remove the buffer from the list and free the memory. That could a create a hole in vb2 queue, that why the first patch of this series change all places where vb2 queue array was used by calls to helpers function and also check the return value. num_buffers is used as the lowest possible value when finding the free indexes for buffers (see vb2_queue_add_buffer()) this way I can guaranty that the indexes a continuous which is a requirement for create_bufs. I choose this solution because XArray API doesn't offer way to find continuous free range. It doesn't seem impossible to add it but this series is already big enough from my point of view. Regards, Benjamin > > And you can use xa_for_each() instead the for loop to iterate over the present buffers in vb2 queue. > >> + >> + dprintk(q, 2, "buffer %d deleted\n", index); >> + return 0; >> +} >> + >> /* >> * vb2_start_streaming() - Attempt to start streaming. >> * @q: videobuf2 queue >> diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c >> b/drivers/media/common/videobuf2/videobuf2-v4l2.c >> index 724135d41f7f..cea666c17b41 100644 >> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c >> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c >> @@ -751,6 +751,12 @@ int vb2_prepare_buf(struct vb2_queue *q, struct >> media_device *mdev, } EXPORT_SYMBOL_GPL(vb2_prepare_buf); >> >> +int vb2_delete_buf(struct vb2_queue *q, struct v4l2_buffer *b) { >> + return vb2_core_delete_buf(q, b->index); } >> +EXPORT_SYMBOL_GPL(vb2_delete_buf); >> + >> int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create) >> { >> unsigned requested_planes = 1; >> diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2- >> core/v4l2-dev.c >> index f81279492682..80ace2e1e932 100644 >> --- a/drivers/media/v4l2-core/v4l2-dev.c >> +++ b/drivers/media/v4l2-core/v4l2-dev.c >> @@ -720,6 +720,7 @@ static void determine_valid_ioctls(struct video_device >> *vdev) >> SET_VALID_IOCTL(ops, VIDIOC_PREPARE_BUF, vidioc_prepare_buf); >> SET_VALID_IOCTL(ops, VIDIOC_STREAMON, vidioc_streamon); >> SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff); >> + SET_VALID_IOCTL(ops, VIDIOC_DELETE_BUF, >> + vidioc_delete_buf); >> } >> >> if (is_vid || is_vbi || is_meta) { diff --git a/drivers/media/v4l2-core/v4l2- >> ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c >> index a858acea6547..1c737279d3ef 100644 >> --- a/drivers/media/v4l2-core/v4l2-ioctl.c >> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c >> @@ -2156,6 +2156,15 @@ static int v4l_prepare_buf(const struct >> v4l2_ioctl_ops *ops, >> return ret ? ret : ops->vidioc_prepare_buf(file, fh, b); } >> >> +static int v4l_delete_buf(const struct v4l2_ioctl_ops *ops, >> + struct file *file, void *fh, void *arg) { >> + struct v4l2_buffer *b = arg; >> + int ret = check_fmt(file, b->type); >> + >> + return ret ? ret : ops->vidioc_delete_buf(file, fh, b); } >> + >> static int v4l_g_parm(const struct v4l2_ioctl_ops *ops, >> struct file *file, void *fh, void *arg) { @@ -2905,6 +2914,7 >> @@ static const struct v4l2_ioctl_info v4l2_ioctls[] = { >> IOCTL_INFO(VIDIOC_ENUM_FREQ_BANDS, v4l_enum_freq_bands, >> v4l_print_freq_band, 0), >> IOCTL_INFO(VIDIOC_DBG_G_CHIP_INFO, v4l_dbg_g_chip_info, >> v4l_print_dbg_chip_info, INFO_FL_CLEAR(v4l2_dbg_chip_info, match)), >> IOCTL_INFO(VIDIOC_QUERY_EXT_CTRL, v4l_query_ext_ctrl, >> v4l_print_query_ext_ctrl, INFO_FL_CTRL | INFO_FL_CLEAR(v4l2_query_ext_ctrl, >> id)), >> + IOCTL_INFO(VIDIOC_DELETE_BUF, v4l_delete_buf, v4l_print_buffer, >> + INFO_FL_QUEUE), >> }; >> #define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls) >> >> diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index >> edb733f21604..2f232ed884c7 100644 >> --- a/include/media/v4l2-ioctl.h >> +++ b/include/media/v4l2-ioctl.h >> @@ -163,6 +163,8 @@ struct v4l2_fh; >> * :ref:`VIDIOC_CREATE_BUFS ` ioctl >> * @vidioc_prepare_buf: pointer to the function that implements >> * :ref:`VIDIOC_PREPARE_BUF ` ioctl >> + * @vidioc_delete_buf: pointer to the function that implements >> + * :ref:`VIDIOC_DELETE_BUF ` ioctl >> * @vidioc_overlay: pointer to the function that implements >> * :ref:`VIDIOC_OVERLAY ` ioctl >> * @vidioc_g_fbuf: pointer to the function that implements @@ -422,6 +424,8 >> @@ struct v4l2_ioctl_ops { >> struct v4l2_create_buffers *b); >> int (*vidioc_prepare_buf)(struct file *file, void *fh, >> struct v4l2_buffer *b); >> + int (*vidioc_delete_buf)(struct file *file, void *fh, >> + struct v4l2_buffer *b); >> >> int (*vidioc_overlay)(struct file *file, void *fh, unsigned int i); >> int (*vidioc_g_fbuf)(struct file *file, void *fh, diff --git >> a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h index >> 080b783d608d..0f9e68f76b77 100644 >> --- a/include/media/videobuf2-core.h >> +++ b/include/media/videobuf2-core.h >> @@ -840,6 +840,15 @@ int vb2_core_create_bufs(struct vb2_queue *q, >> enum vb2_memory memory, >> */ >> int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb); >> >> +/** >> + * vb2_core_delete_buf() - >> + * @q: pointer to &struct vb2_queue with videobuf2 queue. >> + * @index: id number of the buffer. >> + * >> + * Return: returns zero on success; an error code otherwise. >> + */ >> +int vb2_core_delete_buf(struct vb2_queue *q, unsigned int index); >> + >> /** >> * vb2_core_qbuf() - Queue a buffer from userspace >> * >> diff --git a/include/media/videobuf2-v4l2.h b/include/media/videobuf2-v4l2.h >> index 88a7a565170e..3beeb4c735f0 100644 >> --- a/include/media/videobuf2-v4l2.h >> +++ b/include/media/videobuf2-v4l2.h >> @@ -114,6 +114,17 @@ int vb2_create_bufs(struct vb2_queue *q, struct >> v4l2_create_buffers *create); >> */ >> int vb2_prepare_buf(struct vb2_queue *q, struct media_device *mdev, >> struct v4l2_buffer *b); >> +/** >> + * vb2_delete_buf() - Delete the buffer from the queue >> + * >> + * @q: pointer to &struct vb2_queue with videobuf2 queue. >> + * @b: buffer structure passed from userspace to >> + * &v4l2_ioctl_ops->vidioc_delete_buf handler in driver >> + * >> + * The return values from this function are intended to be directly >> +returned >> + * from &v4l2_ioctl_ops->vidioc_delete_buf handler in driver. >> + */ >> +int vb2_delete_buf(struct vb2_queue *q, struct v4l2_buffer *b); >> >> /** >> * vb2_qbuf() - Queue a buffer from userspace diff --git >> a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index >> aee75eb9e686..31bba1915642 100644 >> --- a/include/uapi/linux/videodev2.h >> +++ b/include/uapi/linux/videodev2.h >> @@ -2702,6 +2702,8 @@ struct v4l2_create_buffers { #define >> VIDIOC_DBG_G_CHIP_INFO _IOWR('V', 102, struct v4l2_dbg_chip_info) >> >> #define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl) >> +#define VIDIOC_DELETE_BUF _IOWR('V', 104, struct v4l2_buffer) >> + >> >> /* Reminder: when adding new ioctls please add support for them to >> drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */ >> -- >> 2.39.2 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 3A7A1EB64DC for ; Mon, 26 Jun 2023 07:48:54 +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=Xx350V4VpHt3+N2uAgPfdeZfeQCIoJF3veyqianIQbs=; b=r6SjJx3la5iDW7 4SkNWkv3lrcKPLhI82KdkMzR1+bjdK6fyd80as7YtOp34WaHyimieFE5XBL9KmQPepdNk2qc0RkR2 nGW+h8GT90fFxi7ZlzwZYhpVlnf6S0c4n7635u39DbVxvv/NcRX8M6JdevHzPY9yVjJ3oZI8LRiMv /BJjYq57g93Qo3VTIR1pIKafPfMew8UPPIAZGOzyMi5NqwDn77brqe3D/4GIiXlb0qo4nylM7vdmY E2zx3qz4Ln7AIGQoPxOEO5fAWoaT0pI374EuMTCfjNHW5dbNVxeTQ7helBZ6GG9CLEyp2eGEOox0p LTwozK1mFwYKOigt0wDg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qDgxo-009aCp-0j; Mon, 26 Jun 2023 07:48:44 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qDgxj-009aB2-18; Mon, 26 Jun 2023 07:48:41 +0000 Received: from [IPV6:2a01:e0a:120:3210:960a:2463:3114:4c3a] (unknown [IPv6:2a01:e0a:120:3210:960a:2463:3114:4c3a]) (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: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 55F0E6607113; Mon, 26 Jun 2023 08:48:35 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1687765715; bh=G/GIgYrmoJj0dG40UwbmNhWWtziwx1kJTwCIfcKa/os=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=DPSJrQaXeeLSwERR2pUdSOSuMx+7/fb5bAJMBR8c9n7bDN58icTSNzWFKa0A1cL2J xxbLPB9dTt4ffUHKAhdhMJqSmOXg9vLr5toQ/at+X8zNBdvOq8pN9dX1BQhYbyCyX+ tx4949AZoGURQ77PNVE9QnU17NWXH4WtaE2yOCaruWTBmMklPW97vTBStMZffJ/L9p di5W9qpTazPRFDOrYR5+Ag4cHP055yTR9eXFl1KH4cCqkA8h/aioMpfbLrX7gmkf13 BlJ0lyfPoOxEmK7qxFR6EVvkIfQyW+a5U/TLRIzP0IOsubqTfnfPX3J+59sntvumwM L9ThGrQ8AEPzg== Message-ID: Date: Mon, 26 Jun 2023 09:48:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [EXT] [PATCH v3 10/11] media: v4l2: Add DELETE_BUF ioctl To: Ming Qian , "mchehab@kernel.org" , "tfiga@chromium.org" , "m.szyprowski@samsung.com" , "ezequiel@vanguardiasur.com.ar" , "p.zabel@pengutronix.de" , "gregkh@linuxfoundation.org" , "hverkuil-cisco@xs4all.nl" , "nicolas.dufresne@collabora.com" 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" , "linux-staging@lists.linux.dev" , "kernel@collabora.com" References: <20230622131349.144160-1-benjamin.gaignard@collabora.com> <20230622131349.144160-11-benjamin.gaignard@collabora.com> Content-Language: en-US From: Benjamin Gaignard In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230626_004839_677988_08A84A84 X-CRM114-Status: GOOD ( 32.61 ) 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 CkxlIDI2LzA2LzIwMjMgw6AgMDk6MDgsIE1pbmcgUWlhbiBhIMOpY3JpdMKgOgo+IEhpIEJlbmph bWluLAo+Cj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEJlbmphbWluIEdh aWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+PiBTZW50OiAyMDIz5bm0 NuaciDIy5pelIDIxOjE0Cj4+IFRvOiBtY2hlaGFiQGtlcm5lbC5vcmc7IHRmaWdhQGNocm9taXVt Lm9yZzsgbS5zenlwcm93c2tpQHNhbXN1bmcuY29tOwo+PiBNaW5nIFFpYW4gPG1pbmcucWlhbkBu eHAuY29tPjsgZXplcXVpZWxAdmFuZ3VhcmRpYXN1ci5jb20uYXI7Cj4+IHAuemFiZWxAcGVuZ3V0 cm9uaXguZGU7IGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnOyBodmVya3VpbC0KPj4gY2lzY29A eHM0YWxsLm5sOyBuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20KPj4gQ2M6IGxpbnV4LW1l ZGlhQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXgt YXJtLQo+PiBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgtbWVkaWF0ZWtAbGlzdHMu aW5mcmFkZWFkLm9yZzsgbGludXgtYXJtLQo+PiBtc21Admdlci5rZXJuZWwub3JnOyBsaW51eC1y b2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC0KPj4gc3RhZ2luZ0BsaXN0cy5saW51 eC5kZXY7IGtlcm5lbEBjb2xsYWJvcmEuY29tOyBCZW5qYW1pbiBHYWlnbmFyZAo+PiA8YmVuamFt aW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPj4gU3ViamVjdDogW0VYVF0gW1BBVENIIHYzIDEw LzExXSBtZWRpYTogdjRsMjogQWRkIERFTEVURV9CVUYgaW9jdGwKPj4KPj4gQ2F1dGlvbjogVGhp cyBpcyBhbiBleHRlcm5hbCBlbWFpbC4gUGxlYXNlIHRha2UgY2FyZSB3aGVuIGNsaWNraW5nIGxp bmtzIG9yCj4+IG9wZW5pbmcgYXR0YWNobWVudHMuIFdoZW4gaW4gZG91YnQsIHJlcG9ydCB0aGUg bWVzc2FnZSB1c2luZyB0aGUgJ1JlcG9ydAo+PiB0aGlzIGVtYWlsJyBidXR0b24KPj4KPj4KPj4g VklESU9DX0RFTEVURV9CVUYgaW9jdGwgYWxsb3dzIHRvIGRlbGV0ZSBhIGJ1ZmZlciBmcm9tIGEg cXVldWUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5n YWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+PiAtLS0KPj4gLi4uL3VzZXJzcGFjZS1hcGkvbWVkaWEv djRsL3VzZXItZnVuYy5yc3QgICAgIHwgIDEgKwo+PiAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1kZWxl dGUtYnVmLnJzdCAgICAgICAgICAgfCA1MSArKysrKysrKysrKysrKysrKysrCj4+IC4uLi9tZWRp YS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1jb3JlLmMgICB8IDMzICsrKysrKysrKysrKwo+ PiAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItdjRsMi5jICAgfCAgNiArKysK Pj4gZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1kZXYuYyAgICAgICAgICAgIHwgIDEgKwo+ PiBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWlvY3RsLmMgICAgICAgICAgfCAxMCArKysr Cj4+IGluY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oICAgICAgICAgICAgICAgICAgICB8ICA0ICsr Cj4+IGluY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaCAgICAgICAgICAgICAgICB8ICA5ICsr KysKPj4gaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oICAgICAgICAgICAgICAgIHwgMTEg KysrKwo+PiBpbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmggICAgICAgICAgICAgICAgfCAg MiArCj4+IDEwIGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspCj4+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL3ZpZGlvYy1kZWxl dGUtCj4+IGJ1Zi5yc3QKPj4KPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBpbmRleCAxNWZmMGJmN2JiZTYuLjhjNzQw MTZlMTJmZCAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21lZGlh L3Y0bC91c2VyLWZ1bmMucnN0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9t ZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBAQCAtMTcsNiArMTcsNyBAQCBGdW5jdGlvbiBSZWZl cmVuY2UKPj4gICAgICB2aWRpb2MtZGJnLWctY2hpcC1pbmZvCj4+ICAgICAgdmlkaW9jLWRiZy1n LXJlZ2lzdGVyCj4+ICAgICAgdmlkaW9jLWRlY29kZXItY21kCj4+ICsgICAgdmlkaW9jLWRlbGV0 ZS1idWYKPj4gICAgICB2aWRpb2MtZHFldmVudAo+PiAgICAgIHZpZGlvYy1kdi10aW1pbmdzLWNh cAo+PiAgICAgIHZpZGlvYy1lbmNvZGVyLWNtZAo+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi91c2Vyc3BhY2UtYXBpL21lZGlhL3Y0bC92aWRpb2MtZGVsZXRlLWJ1Zi5yc3QKPj4gYi9Eb2N1 bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL3ZpZGlvYy1kZWxldGUtYnVmLnJzdAo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjBlN2NlNThmOTFi Ywo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9t ZWRpYS92NGwvdmlkaW9jLWRlbGV0ZS1idWYucnN0Cj4+IEBAIC0wLDAgKzEsNTEgQEAKPj4gKy4u IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHRkRMLTEuMS1uby1pbnZhcmlhbnRzLW9yLWxhdGVy IC4uCj4+ICtjOm5hbWVzcGFjZTo6IFY0TAo+PiArCj4+ICsuLiBfVklESU9DX0RFTEVURV9CVUY6 Cj4+ICsKPj4gKyoqKioqKioqKioqKioqKioqKioqKioqKgo+PiAraW9jdGwgVklESU9DX0RFTEVU RV9CVUYKPj4gKyoqKioqKioqKioqKioqKioqKioqKioqKgo+PiArCj4+ICtOYW1lCj4+ICs9PT09 Cj4+ICsKPj4gK1ZJRElPQ19ERUxFVEVfQlVGIC0gRGVsZXRlIGEgYnVmZmVyIGZyb20gYSBxdWV1 ZQo+PiArCj4+ICtTeW5vcHNpcwo+PiArPT09PT09PT0KPj4gKwo+PiArLi4gYzptYWNybzo6IFZJ RElPQ19ERUxFVEVfQlVGCj4+ICsKPj4gK2BgaW50IGlvY3RsKGludCBmZCwgVklESU9DX0RFTEVU RV9CVUYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYXJncClgYAo+PiArCj4+ICtBcmd1bWVudHMKPj4g Kz09PT09PT09PQo+PiArCj4+ICtgYGZkYGAKPj4gKyAgICBGaWxlIGRlc2NyaXB0b3IgcmV0dXJu ZWQgYnkgOmM6ZnVuYzpgb3BlbigpYC4KPj4gKwo+PiArYGBhcmdwYGAKPj4gKyAgICBQb2ludGVy IHRvIHN0cnVjdCA6Yzp0eXBlOmB2NGwyX2J1ZmZlcmAuCj4+ICsKPj4gK0Rlc2NyaXB0aW9uCj4+ ICs9PT09PT09PT09PQo+PiArCj4+ICtBcHBsaWNhdGlvbnMgY2FuIG9wdGlvbmFsbHkgY2FsbCB0 aGUgOnJlZjpgVklESU9DX0RFTEVURV9CVUZgIGlvY3RsIHRvCj4+ICtkZWxldGUgYSBidWZmZXIg ZnJvbSBhIHF1ZXVlLgo+PiArCj4+ICtUaGUgc3RydWN0IDpjOnR5cGU6YHY0bDJfYnVmZmVyYCBz dHJ1Y3R1cmUgaXMgc3BlY2lmaWVkIGluCj4+ICs6cmVmOmBidWZmZXJgLgo+PiArCj4+ICtSZXR1 cm4gVmFsdWUKPj4gKz09PT09PT09PT09PQo+PiArCj4+ICtPbiBzdWNjZXNzIDAgaXMgcmV0dXJu ZWQsIG9uIGVycm9yIC0xIGFuZCB0aGUgYGBlcnJub2BgIHZhcmlhYmxlIGlzIHNldAo+PiArYXBw cm9wcmlhdGVseS4gVGhlIGdlbmVyaWMgZXJyb3IgY29kZXMgYXJlIGRlc2NyaWJlZCBhdCB0aGUK Pj4gKzpyZWY6YEdlbmVyaWMgRXJyb3IgQ29kZXMgPGdlbi1lcnJvcnM+YCBjaGFwdGVyLgo+PiAr Cj4+ICtFQlVTWQo+PiArICAgIEZpbGUgSS9PIGlzIGluIHByb2dyZXNzLgo+PiArCj4+ICtFSU5W QUwKPj4gKyAgICBUaGUgYnVmZmVyIGBgaW5kZXhgYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBxdWV1 ZS4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1 ZjItY29yZS5jCj4+IGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1j b3JlLmMKPj4gaW5kZXggODk5NzgzZjY3NTgwLi5hYTU0NmM5NzJjM2QgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jCj4+ICsrKyBi L2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jCj4+IEBAIC0x NjM3LDYgKzE2MzcsMzkgQEAgaW50IHZiMl9jb3JlX3ByZXBhcmVfYnVmKHN0cnVjdCB2YjJfcXVl dWUgKnEsCj4+IHVuc2lnbmVkIGludCBpbmRleCwgdm9pZCAqcGIpICB9Cj4+IEVYUE9SVF9TWU1C T0xfR1BMKHZiMl9jb3JlX3ByZXBhcmVfYnVmKTsKPj4KPj4gK2ludCB2YjJfY29yZV9kZWxldGVf YnVmKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBpbmRleCkgewo+PiArICAgICAg IHN0cnVjdCB2YjJfYnVmZmVyICp2YjsKPj4gKwo+PiArICAgICAgIHZiID0gdmIyX2dldF9idWZm ZXIocSwgaW5kZXgpOwo+PiArICAgICAgIGlmICghdmIpIHsKPj4gKyAgICAgICAgICAgICAgIGRw cmludGsocSwgMSwgImludmFsaWQgYnVmZmVyIGluZGV4ICVkXG4iLCBpbmRleCk7Cj4+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICBp ZiAodmItPnN0YXRlICE9IFZCMl9CVUZfU1RBVEVfREVRVUVVRUQpIHsKPj4gKyAgICAgICAgICAg ICAgIGRwcmludGsocSwgMSwgImNhbid0IGRlbGV0ZSBub24gZGVxdWV1ZWQgYnVmZmVyIGluZGV4 ICVkXG4iLCBpbmRleCk7Cj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICBpZiAodmItPnBsYW5lc1swXS5tZW1fcHJpdikKPj4gKyAg ICAgICAgICAgICAgIGNhbGxfdm9pZF92Yl9xb3AodmIsIGJ1Zl9jbGVhbnVwLCB2Yik7Cj4+ICsK Pj4gKyAgICAgICAvKiBGcmVlIE1NQVAgYnVmZmVycyBvciByZWxlYXNlIFVTRVJQVFIgYnVmZmVy cyAqLwo+PiArICAgICAgIGlmIChxLT5tZW1vcnkgPT0gVkIyX01FTU9SWV9NTUFQKQo+PiArICAg ICAgICAgICAgICAgX192YjJfYnVmX21lbV9mcmVlKHZiKTsKPj4gKyAgICAgICBlbHNlIGlmIChx LT5tZW1vcnkgPT0gVkIyX01FTU9SWV9ETUFCVUYpCj4+ICsgICAgICAgICAgICAgICBfX3ZiMl9i dWZfZG1hYnVmX3B1dCh2Yik7Cj4+ICsgICAgICAgZWxzZQo+PiArICAgICAgICAgICAgICAgX192 YjJfYnVmX3VzZXJwdHJfcHV0KHZiKTsKPj4gKwo+PiArICAgICAgIHZiMl9xdWV1ZV9yZW1vdmVf YnVmZmVyKHEsIHZiKTsKPj4gKyAgICAgICBrZnJlZSh2Yik7Cj4gVGhlIG51bV9idWZmZXJzIGlz IG5vdCBjaGFuZ2VkLCBJcyB0aGF0IG9uIHB1cnBvc2U/Cj4gbnVtX2J1ZmZlcnMgZG9lc24ndCBt ZWFuIHRoZSBudW1iZXIgb2YgdmIyIGJ1ZmZlcnMsICBidXQgb25seSBkZWNpZGVzIHRoZSBtYXgg aW5kZXggb2YgYWxsb2NhdGVkIHZiMiBidWZmZXI/Cj4gT25jZSB0aGUgaW5kZXggaXMgZGVsZXRl ZCwgdGhlbiBpdCB3b24ndCBiZSB1c2VkIGFueW1vcmUsIHVubGVzcyBmcmVlIHRoZSB2YjIgcXVl dWU/IGlzIGl0IGEgaG9sZSBpbiB2YjIgcXVldWU/CgpZZXMgbnVtX2J1ZmZlcnMgaXNuJ3QgY2hh bmdlIGFuZCBzdGlsbCByZXByZXNlbnQgdGhlIGhpZ2hlc3QgaW5kZXggb2YgYWxsb2NhdGVkIGJ1 ZmZlci4KREVMRVRFX0JVRiByZW1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBsaXN0IGFuZCBmcmVl IHRoZSBtZW1vcnkuClRoYXQgY291bGQgYSBjcmVhdGUgYSBob2xlIGluIHZiMiBxdWV1ZSwgdGhh dCB3aHkgdGhlIGZpcnN0IHBhdGNoIG9mIHRoaXMgc2VyaWVzIGNoYW5nZQphbGwgcGxhY2VzIHdo ZXJlIHZiMiBxdWV1ZSBhcnJheSB3YXMgdXNlZCBieSBjYWxscyB0byBoZWxwZXJzIGZ1bmN0aW9u IGFuZCBhbHNvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCm51bV9idWZmZXJzIGlzIHVzZWQgYXMg dGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSB3aGVuIGZpbmRpbmcgdGhlIGZyZWUgaW5kZXhlcyBm b3IgYnVmZmVycyAoc2VlIHZiMl9xdWV1ZV9hZGRfYnVmZmVyKCkpCnRoaXMgd2F5IEkgY2FuIGd1 YXJhbnR5IHRoYXQgdGhlIGluZGV4ZXMgYSBjb250aW51b3VzIHdoaWNoIGlzIGEgcmVxdWlyZW1l bnQgZm9yIGNyZWF0ZV9idWZzLgpJIGNob29zZSB0aGlzIHNvbHV0aW9uIGJlY2F1c2UgWEFycmF5 IEFQSSBkb2Vzbid0IG9mZmVyIHdheSB0byBmaW5kIGNvbnRpbnVvdXMgZnJlZSByYW5nZS4KSXQg ZG9lc24ndCBzZWVtIGltcG9zc2libGUgdG8gYWRkIGl0IGJ1dCB0aGlzIHNlcmllcyBpcyBhbHJl YWR5IGJpZyBlbm91Z2ggZnJvbSBteSBwb2ludCBvZiB2aWV3LgoKUmVnYXJkcywKQmVuamFtaW4K Cj4KPiBBbmQgeW91IGNhbiB1c2UgeGFfZm9yX2VhY2goKSBpbnN0ZWFkIHRoZSBmb3IgbG9vcCB0 byBpdGVyYXRlIG92ZXIgdGhlIHByZXNlbnQgYnVmZmVycyBpbiB2YjIgcXVldWUuCj4KPj4gKwo+ PiArICAgICAgIGRwcmludGsocSwgMiwgImJ1ZmZlciAlZCBkZWxldGVkXG4iLCBpbmRleCk7Cj4+ ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gLyoKPj4gICAqIHZiMl9zdGFydF9zdHJl YW1pbmcoKSAtIEF0dGVtcHQgdG8gc3RhcnQgc3RyZWFtaW5nLgo+PiAgICogQHE6ICAgICAgICAg dmlkZW9idWYyIHF1ZXVlCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRl b2J1ZjIvdmlkZW9idWYyLXY0bDIuYwo+PiBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItdjRsMi5jCj4+IGluZGV4IDcyNDEzNWQ0MWY3Zi4uY2VhNjY2YzE3YjQxIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0 bDIuYwo+PiArKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0 bDIuYwo+PiBAQCAtNzUxLDYgKzc1MSwxMiBAQCBpbnQgdmIyX3ByZXBhcmVfYnVmKHN0cnVjdCB2 YjJfcXVldWUgKnEsIHN0cnVjdAo+PiBtZWRpYV9kZXZpY2UgKm1kZXYsICB9ICBFWFBPUlRfU1lN Qk9MX0dQTCh2YjJfcHJlcGFyZV9idWYpOwo+Pgo+PiAraW50IHZiMl9kZWxldGVfYnVmKHN0cnVj dCB2YjJfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikgewo+PiArICAgICAgIHJldHVy biB2YjJfY29yZV9kZWxldGVfYnVmKHEsIGItPmluZGV4KTsgfQo+PiArRVhQT1JUX1NZTUJPTF9H UEwodmIyX2RlbGV0ZV9idWYpOwo+PiArCj4+IGludCB2YjJfY3JlYXRlX2J1ZnMoc3RydWN0IHZi Ml9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfY3JlYXRlX2J1ZmZlcnMgKmNyZWF0ZSkKPj4gewo+PiAg ICAgICAgIHVuc2lnbmVkIHJlcXVlc3RlZF9wbGFuZXMgPSAxOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdjRsMi0KPj4g Y29yZS92NGwyLWRldi5jCj4+IGluZGV4IGY4MTI3OTQ5MjY4Mi4uODBhY2UyZTFlOTMyIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWRldi5jCj4+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItZGV2LmMKPj4gQEAgLTcyMCw2ICs3MjAsNyBAQCBz dGF0aWMgdm9pZCBkZXRlcm1pbmVfdmFsaWRfaW9jdGxzKHN0cnVjdCB2aWRlb19kZXZpY2UKPj4g KnZkZXYpCj4+ICAgICAgICAgICAgICAgICBTRVRfVkFMSURfSU9DVEwob3BzLCBWSURJT0NfUFJF UEFSRV9CVUYsIHZpZGlvY19wcmVwYXJlX2J1Zik7Cj4+ICAgICAgICAgICAgICAgICBTRVRfVkFM SURfSU9DVEwob3BzLCBWSURJT0NfU1RSRUFNT04sIHZpZGlvY19zdHJlYW1vbik7Cj4+ICAgICAg ICAgICAgICAgICBTRVRfVkFMSURfSU9DVEwob3BzLCBWSURJT0NfU1RSRUFNT0ZGLCB2aWRpb2Nf c3RyZWFtb2ZmKTsKPj4gKyAgICAgICAgICAgICAgIFNFVF9WQUxJRF9JT0NUTChvcHMsIFZJRElP Q19ERUxFVEVfQlVGLAo+PiArIHZpZGlvY19kZWxldGVfYnVmKTsKPj4gICAgICAgICB9Cj4+Cj4+ ICAgICAgICAgaWYgKGlzX3ZpZCB8fCBpc192YmkgfHwgaXNfbWV0YSkgeyBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi0KPj4gaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEv djRsMi1jb3JlL3Y0bDItaW9jdGwuYwo+PiBpbmRleCBhODU4YWNlYTY1NDcuLjFjNzM3Mjc5ZDNl ZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1pb2N0bC5jCj4+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9jdGwuYwo+PiBAQCAtMjE1Niw2 ICsyMTU2LDE1IEBAIHN0YXRpYyBpbnQgdjRsX3ByZXBhcmVfYnVmKGNvbnN0IHN0cnVjdAo+PiB2 NGwyX2lvY3RsX29wcyAqb3BzLAo+PiAgICAgICAgIHJldHVybiByZXQgPyByZXQgOiBvcHMtPnZp ZGlvY19wcmVwYXJlX2J1ZihmaWxlLCBmaCwgYik7ICB9Cj4+Cj4+ICtzdGF0aWMgaW50IHY0bF9k ZWxldGVfYnVmKGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyAqb3BzLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdm9pZCAqYXJnKSB7 Cj4+ICsgICAgICAgc3RydWN0IHY0bDJfYnVmZmVyICpiID0gYXJnOwo+PiArICAgICAgIGludCBy ZXQgPSBjaGVja19mbXQoZmlsZSwgYi0+dHlwZSk7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gcmV0 ID8gcmV0IDogb3BzLT52aWRpb2NfZGVsZXRlX2J1ZihmaWxlLCBmaCwgYik7IH0KPj4gKwo+PiBz dGF0aWMgaW50IHY0bF9nX3Bhcm0oY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpvcHMsCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KmZoLCB2b2lkICphcmcpICB7IEBAIC0yOTA1LDYgKzI5MTQsNwo+PiBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IHY0bDJfaW9jdGxfaW5mbyB2NGwyX2lvY3Rsc1tdID0gewo+PiAgICAgICAgIElPQ1RM X0lORk8oVklESU9DX0VOVU1fRlJFUV9CQU5EUywgdjRsX2VudW1fZnJlcV9iYW5kcywKPj4gdjRs X3ByaW50X2ZyZXFfYmFuZCwgMCksCj4+ICAgICAgICAgSU9DVExfSU5GTyhWSURJT0NfREJHX0df Q0hJUF9JTkZPLCB2NGxfZGJnX2dfY2hpcF9pbmZvLAo+PiB2NGxfcHJpbnRfZGJnX2NoaXBfaW5m bywgSU5GT19GTF9DTEVBUih2NGwyX2RiZ19jaGlwX2luZm8sIG1hdGNoKSksCj4+ICAgICAgICAg SU9DVExfSU5GTyhWSURJT0NfUVVFUllfRVhUX0NUUkwsIHY0bF9xdWVyeV9leHRfY3RybCwKPj4g djRsX3ByaW50X3F1ZXJ5X2V4dF9jdHJsLCBJTkZPX0ZMX0NUUkwgfCBJTkZPX0ZMX0NMRUFSKHY0 bDJfcXVlcnlfZXh0X2N0cmwsCj4+IGlkKSksCj4+ICsgICAgICAgSU9DVExfSU5GTyhWSURJT0Nf REVMRVRFX0JVRiwgdjRsX2RlbGV0ZV9idWYsIHY0bF9wcmludF9idWZmZXIsCj4+ICsgSU5GT19G TF9RVUVVRSksCj4+IH07Cj4+ICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lv Y3RscykKPj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oIGIvaW5j bHVkZS9tZWRpYS92NGwyLWlvY3RsLmggaW5kZXgKPj4gZWRiNzMzZjIxNjA0Li4yZjIzMmVkODg0 YzcgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCj4+ICsrKyBiL2lu Y2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCj4+IEBAIC0xNjMsNiArMTYzLDggQEAgc3RydWN0IHY0 bDJfZmg7Cj4+ICAgKiAgICAgOnJlZjpgVklESU9DX0NSRUFURV9CVUZTIDx2aWRpb2NfY3JlYXRl X2J1ZnM+YCBpb2N0bAo+PiAgICogQHZpZGlvY19wcmVwYXJlX2J1ZjogcG9pbnRlciB0byB0aGUg ZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzCj4+ICAgKiAgICAgOnJlZjpgVklESU9DX1BSRVBBUkVf QlVGIDx2aWRpb2NfcHJlcGFyZV9idWY+YCBpb2N0bAo+PiArICogQHZpZGlvY19kZWxldGVfYnVm OiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMKPj4gKyAqICAgICA6cmVm OmBWSURJT0NfREVMRVRFX0JVRiA8dmlkaW9jX2RlbGV0ZV9idWY+YCBpb2N0bAo+PiAgICogQHZp ZGlvY19vdmVybGF5OiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMKPj4g ICAqICAgICA6cmVmOmBWSURJT0NfT1ZFUkxBWSA8dmlkaW9jX292ZXJsYXk+YCBpb2N0bAo+PiAg ICogQHZpZGlvY19nX2ZidWY6IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50 cyBAQCAtNDIyLDYgKzQyNCw4Cj4+IEBAIHN0cnVjdCB2NGwyX2lvY3RsX29wcyB7Cj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyAq Yik7Cj4+ICAgICAgICAgaW50ICgqdmlkaW9jX3ByZXBhcmVfYnVmKShzdHJ1Y3QgZmlsZSAqZmls ZSwgdm9pZCAqZmgsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg djRsMl9idWZmZXIgKmIpOwo+PiArICAgICAgIGludCAoKnZpZGlvY19kZWxldGVfYnVmKShzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7Cj4+Cj4+ICAgICAgICAgaW50ICgqdmlkaW9jX292 ZXJsYXkpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpOwo+PiAg ICAgICAgIGludCAoKnZpZGlvY19nX2ZidWYpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwg ZGlmZiAtLWdpdAo+PiBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaCBiL2luY2x1ZGUv bWVkaWEvdmlkZW9idWYyLWNvcmUuaCBpbmRleAo+PiAwODBiNzgzZDYwOGQuLjBmOWU2OGY3NmI3 NyAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItY29yZS5oCj4+ICsrKyBi L2luY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaAo+PiBAQCAtODQwLDYgKzg0MCwxNSBAQCBp bnQgdmIyX2NvcmVfY3JlYXRlX2J1ZnMoc3RydWN0IHZiMl9xdWV1ZSAqcSwKPj4gZW51bSB2YjJf bWVtb3J5IG1lbW9yeSwKPj4gICAqLwo+PiBpbnQgdmIyX2NvcmVfcHJlcGFyZV9idWYoc3RydWN0 IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGluZGV4LCB2b2lkICpwYik7Cj4+Cj4+ICsvKioK Pj4gKyAqIHZiMl9jb3JlX2RlbGV0ZV9idWYoKSAtCj4+ICsgKiBAcTogcG9pbnRlciB0byAmc3Ry dWN0IHZiMl9xdWV1ZSB3aXRoIHZpZGVvYnVmMiBxdWV1ZS4KPj4gKyAqIEBpbmRleDogICAgIGlk IG51bWJlciBvZiB0aGUgYnVmZmVyLgo+PiArICoKPj4gKyAqICBSZXR1cm46IHJldHVybnMgemVy byBvbiBzdWNjZXNzOyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4KPj4gKyAqLwo+PiAraW50IHZi Ml9jb3JlX2RlbGV0ZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGluZGV4 KTsKPj4gKwo+PiAvKioKPj4gICAqIHZiMl9jb3JlX3FidWYoKSAtIFF1ZXVlIGEgYnVmZmVyIGZy b20gdXNlcnNwYWNlCj4+ICAgKgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1 ZjItdjRsMi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oCj4+IGluZGV4IDg4YTdh NTY1MTcwZS4uM2JlZWI0YzczNWYwIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVv YnVmMi12NGwyLmgKPj4gKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oCj4+IEBA IC0xMTQsNiArMTE0LDE3IEBAIGludCB2YjJfY3JlYXRlX2J1ZnMoc3RydWN0IHZiMl9xdWV1ZSAq cSwgc3RydWN0Cj4+IHY0bDJfY3JlYXRlX2J1ZmZlcnMgKmNyZWF0ZSk7Cj4+ICAgKi8KPj4gaW50 IHZiMl9wcmVwYXJlX2J1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3QgbWVkaWFfZGV2aWNl ICptZGV2LAo+PiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7Cj4+ ICsvKioKPj4gKyAqIHZiMl9kZWxldGVfYnVmKCkgLSBEZWxldGUgdGhlIGJ1ZmZlciBmcm9tIHRo ZSBxdWV1ZQo+PiArICoKPj4gKyAqIEBxOiAgICAgICAgIHBvaW50ZXIgdG8gJnN0cnVjdCB2YjJf cXVldWUgd2l0aCB2aWRlb2J1ZjIgcXVldWUuCj4+ICsgKiBAYjogICAgICAgICBidWZmZXIgc3Ry dWN0dXJlIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSB0bwo+PiArICogICAgICAgICAgICAgJnY0bDJf aW9jdGxfb3BzLT52aWRpb2NfZGVsZXRlX2J1ZiBoYW5kbGVyIGluIGRyaXZlcgo+PiArICoKPj4g KyAqIFRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhpcyBmdW5jdGlvbiBhcmUgaW50ZW5kZWQgdG8g YmUgZGlyZWN0bHkKPj4gK3JldHVybmVkCj4+ICsgKiBmcm9tICZ2NGwyX2lvY3RsX29wcy0+dmlk aW9jX2RlbGV0ZV9idWYgaGFuZGxlciBpbiBkcml2ZXIuCj4+ICsgKi8KPj4gK2ludCB2YjJfZGVs ZXRlX2J1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOwo+Pgo+ PiAvKioKPj4gICAqIHZiMl9xYnVmKCkgLSBRdWV1ZSBhIGJ1ZmZlciBmcm9tIHVzZXJzcGFjZSBk aWZmIC0tZ2l0Cj4+IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGluZGV4Cj4+IGFlZTc1ZWI5ZTY4Ni4uMzFiYmExOTE1NjQy IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPj4gKysrIGIv aW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCj4+IEBAIC0yNzAyLDYgKzI3MDIsOCBAQCBz dHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyB7ICAjZGVmaW5lCj4+IFZJRElPQ19EQkdfR19DSElQ X0lORk8gIF9JT1dSKCdWJywgMTAyLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pbmZvKQo+Pgo+PiAj ZGVmaW5lIFZJRElPQ19RVUVSWV9FWFRfQ1RSTCAgX0lPV1IoJ1YnLCAxMDMsIHN0cnVjdCB2NGwy X3F1ZXJ5X2V4dF9jdHJsKQo+PiArI2RlZmluZSBWSURJT0NfREVMRVRFX0JVRiAgICAgIF9JT1dS KCdWJywgMTA0LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCj4+ICsKPj4KPj4gLyogUmVtaW5kZXI6IHdo ZW4gYWRkaW5nIG5ldyBpb2N0bHMgcGxlYXNlIGFkZCBzdXBwb3J0IGZvciB0aGVtIHRvCj4+ICAg ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYXMgd2VsbCEg Ki8KPj4gLS0KPj4gMi4zOS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJvY2tjaGlwCg== 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 D0619EB64D7 for ; Mon, 26 Jun 2023 07:49:19 +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=IN0GPTzGtUxJK96Zwe/GTh721MntnEGRyRtDHfxWYaM=; b=qGZQ2eby6RBJ/B K01ZYO37kecIvU8weDQFhyOs9PQT/fpwWQ6tyENszIicHcTIycS/9oHjKdvHFW4LW+a3/bivV5SMo t4yNdGNcDIjbEOOmo+R6MK5GEv7odCr6S4CfjV73imsZwm0GPhXJuwzp3Fs9G2yl+DPu6YXpnlxnX r0HD0dMP+G45huUjovAuUa3ItDRLpczDRT6/tSo4lBiTB5YE5MkLADJayLGU6cUIXPBAAPdeyA+vi uTJkdD8LLNl5oQ4WV2FoakLQYufOmGH63Lb+zmQJpZEaLrDeqeE2ZKVLBV1xaSaYjnhMrQL+C/9TK 8nc599rgcJKROkNp0MXA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qDgxn-009aCc-16; Mon, 26 Jun 2023 07:48:43 +0000 Received: from madras.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e5ab]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qDgxj-009aB2-18; Mon, 26 Jun 2023 07:48:41 +0000 Received: from [IPV6:2a01:e0a:120:3210:960a:2463:3114:4c3a] (unknown [IPv6:2a01:e0a:120:3210:960a:2463:3114:4c3a]) (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: benjamin.gaignard) by madras.collabora.co.uk (Postfix) with ESMTPSA id 55F0E6607113; Mon, 26 Jun 2023 08:48:35 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1687765715; bh=G/GIgYrmoJj0dG40UwbmNhWWtziwx1kJTwCIfcKa/os=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=DPSJrQaXeeLSwERR2pUdSOSuMx+7/fb5bAJMBR8c9n7bDN58icTSNzWFKa0A1cL2J xxbLPB9dTt4ffUHKAhdhMJqSmOXg9vLr5toQ/at+X8zNBdvOq8pN9dX1BQhYbyCyX+ tx4949AZoGURQ77PNVE9QnU17NWXH4WtaE2yOCaruWTBmMklPW97vTBStMZffJ/L9p di5W9qpTazPRFDOrYR5+Ag4cHP055yTR9eXFl1KH4cCqkA8h/aioMpfbLrX7gmkf13 BlJ0lyfPoOxEmK7qxFR6EVvkIfQyW+a5U/TLRIzP0IOsubqTfnfPX3J+59sntvumwM L9ThGrQ8AEPzg== Message-ID: Date: Mon, 26 Jun 2023 09:48:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [EXT] [PATCH v3 10/11] media: v4l2: Add DELETE_BUF ioctl To: Ming Qian , "mchehab@kernel.org" , "tfiga@chromium.org" , "m.szyprowski@samsung.com" , "ezequiel@vanguardiasur.com.ar" , "p.zabel@pengutronix.de" , "gregkh@linuxfoundation.org" , "hverkuil-cisco@xs4all.nl" , "nicolas.dufresne@collabora.com" 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" , "linux-staging@lists.linux.dev" , "kernel@collabora.com" References: <20230622131349.144160-1-benjamin.gaignard@collabora.com> <20230622131349.144160-11-benjamin.gaignard@collabora.com> Content-Language: en-US From: Benjamin Gaignard In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230626_004839_677988_08A84A84 X-CRM114-Status: GOOD ( 32.61 ) 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 CkxlIDI2LzA2LzIwMjMgw6AgMDk6MDgsIE1pbmcgUWlhbiBhIMOpY3JpdMKgOgo+IEhpIEJlbmph bWluLAo+Cj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEJlbmphbWluIEdh aWduYXJkIDxiZW5qYW1pbi5nYWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+PiBTZW50OiAyMDIz5bm0 NuaciDIy5pelIDIxOjE0Cj4+IFRvOiBtY2hlaGFiQGtlcm5lbC5vcmc7IHRmaWdhQGNocm9taXVt Lm9yZzsgbS5zenlwcm93c2tpQHNhbXN1bmcuY29tOwo+PiBNaW5nIFFpYW4gPG1pbmcucWlhbkBu eHAuY29tPjsgZXplcXVpZWxAdmFuZ3VhcmRpYXN1ci5jb20uYXI7Cj4+IHAuemFiZWxAcGVuZ3V0 cm9uaXguZGU7IGdyZWdraEBsaW51eGZvdW5kYXRpb24ub3JnOyBodmVya3VpbC0KPj4gY2lzY29A eHM0YWxsLm5sOyBuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jb20KPj4gQ2M6IGxpbnV4LW1l ZGlhQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXgt YXJtLQo+PiBrZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsgbGludXgtbWVkaWF0ZWtAbGlzdHMu aW5mcmFkZWFkLm9yZzsgbGludXgtYXJtLQo+PiBtc21Admdlci5rZXJuZWwub3JnOyBsaW51eC1y b2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51eC0KPj4gc3RhZ2luZ0BsaXN0cy5saW51 eC5kZXY7IGtlcm5lbEBjb2xsYWJvcmEuY29tOyBCZW5qYW1pbiBHYWlnbmFyZAo+PiA8YmVuamFt aW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPj4gU3ViamVjdDogW0VYVF0gW1BBVENIIHYzIDEw LzExXSBtZWRpYTogdjRsMjogQWRkIERFTEVURV9CVUYgaW9jdGwKPj4KPj4gQ2F1dGlvbjogVGhp cyBpcyBhbiBleHRlcm5hbCBlbWFpbC4gUGxlYXNlIHRha2UgY2FyZSB3aGVuIGNsaWNraW5nIGxp bmtzIG9yCj4+IG9wZW5pbmcgYXR0YWNobWVudHMuIFdoZW4gaW4gZG91YnQsIHJlcG9ydCB0aGUg bWVzc2FnZSB1c2luZyB0aGUgJ1JlcG9ydAo+PiB0aGlzIGVtYWlsJyBidXR0b24KPj4KPj4KPj4g VklESU9DX0RFTEVURV9CVUYgaW9jdGwgYWxsb3dzIHRvIGRlbGV0ZSBhIGJ1ZmZlciBmcm9tIGEg cXVldWUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEdhaWduYXJkIDxiZW5qYW1pbi5n YWlnbmFyZEBjb2xsYWJvcmEuY29tPgo+PiAtLS0KPj4gLi4uL3VzZXJzcGFjZS1hcGkvbWVkaWEv djRsL3VzZXItZnVuYy5yc3QgICAgIHwgIDEgKwo+PiAuLi4vbWVkaWEvdjRsL3ZpZGlvYy1kZWxl dGUtYnVmLnJzdCAgICAgICAgICAgfCA1MSArKysrKysrKysrKysrKysrKysrCj4+IC4uLi9tZWRp YS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1jb3JlLmMgICB8IDMzICsrKysrKysrKysrKwo+ PiAuLi4vbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItdjRsMi5jICAgfCAgNiArKysK Pj4gZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1kZXYuYyAgICAgICAgICAgIHwgIDEgKwo+ PiBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWlvY3RsLmMgICAgICAgICAgfCAxMCArKysr Cj4+IGluY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oICAgICAgICAgICAgICAgICAgICB8ICA0ICsr Cj4+IGluY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaCAgICAgICAgICAgICAgICB8ICA5ICsr KysKPj4gaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oICAgICAgICAgICAgICAgIHwgMTEg KysrKwo+PiBpbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmggICAgICAgICAgICAgICAgfCAg MiArCj4+IDEwIGZpbGVzIGNoYW5nZWQsIDEyOCBpbnNlcnRpb25zKCspCj4+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBEb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL3ZpZGlvYy1kZWxl dGUtCj4+IGJ1Zi5yc3QKPj4KPj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNl LWFwaS9tZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBpbmRleCAxNWZmMGJmN2JiZTYuLjhjNzQw MTZlMTJmZCAxMDA2NDQKPj4gLS0tIGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL21lZGlh L3Y0bC91c2VyLWZ1bmMucnN0Cj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9t ZWRpYS92NGwvdXNlci1mdW5jLnJzdAo+PiBAQCAtMTcsNiArMTcsNyBAQCBGdW5jdGlvbiBSZWZl cmVuY2UKPj4gICAgICB2aWRpb2MtZGJnLWctY2hpcC1pbmZvCj4+ICAgICAgdmlkaW9jLWRiZy1n LXJlZ2lzdGVyCj4+ICAgICAgdmlkaW9jLWRlY29kZXItY21kCj4+ICsgICAgdmlkaW9jLWRlbGV0 ZS1idWYKPj4gICAgICB2aWRpb2MtZHFldmVudAo+PiAgICAgIHZpZGlvYy1kdi10aW1pbmdzLWNh cAo+PiAgICAgIHZpZGlvYy1lbmNvZGVyLWNtZAo+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi91c2Vyc3BhY2UtYXBpL21lZGlhL3Y0bC92aWRpb2MtZGVsZXRlLWJ1Zi5yc3QKPj4gYi9Eb2N1 bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkvbWVkaWEvdjRsL3ZpZGlvYy1kZWxldGUtYnVmLnJzdAo+ PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjBlN2NlNThmOTFi Ywo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9t ZWRpYS92NGwvdmlkaW9jLWRlbGV0ZS1idWYucnN0Cj4+IEBAIC0wLDAgKzEsNTEgQEAKPj4gKy4u IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHRkRMLTEuMS1uby1pbnZhcmlhbnRzLW9yLWxhdGVy IC4uCj4+ICtjOm5hbWVzcGFjZTo6IFY0TAo+PiArCj4+ICsuLiBfVklESU9DX0RFTEVURV9CVUY6 Cj4+ICsKPj4gKyoqKioqKioqKioqKioqKioqKioqKioqKgo+PiAraW9jdGwgVklESU9DX0RFTEVU RV9CVUYKPj4gKyoqKioqKioqKioqKioqKioqKioqKioqKgo+PiArCj4+ICtOYW1lCj4+ICs9PT09 Cj4+ICsKPj4gK1ZJRElPQ19ERUxFVEVfQlVGIC0gRGVsZXRlIGEgYnVmZmVyIGZyb20gYSBxdWV1 ZQo+PiArCj4+ICtTeW5vcHNpcwo+PiArPT09PT09PT0KPj4gKwo+PiArLi4gYzptYWNybzo6IFZJ RElPQ19ERUxFVEVfQlVGCj4+ICsKPj4gK2BgaW50IGlvY3RsKGludCBmZCwgVklESU9DX0RFTEVU RV9CVUYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYXJncClgYAo+PiArCj4+ICtBcmd1bWVudHMKPj4g Kz09PT09PT09PQo+PiArCj4+ICtgYGZkYGAKPj4gKyAgICBGaWxlIGRlc2NyaXB0b3IgcmV0dXJu ZWQgYnkgOmM6ZnVuYzpgb3BlbigpYC4KPj4gKwo+PiArYGBhcmdwYGAKPj4gKyAgICBQb2ludGVy IHRvIHN0cnVjdCA6Yzp0eXBlOmB2NGwyX2J1ZmZlcmAuCj4+ICsKPj4gK0Rlc2NyaXB0aW9uCj4+ ICs9PT09PT09PT09PQo+PiArCj4+ICtBcHBsaWNhdGlvbnMgY2FuIG9wdGlvbmFsbHkgY2FsbCB0 aGUgOnJlZjpgVklESU9DX0RFTEVURV9CVUZgIGlvY3RsIHRvCj4+ICtkZWxldGUgYSBidWZmZXIg ZnJvbSBhIHF1ZXVlLgo+PiArCj4+ICtUaGUgc3RydWN0IDpjOnR5cGU6YHY0bDJfYnVmZmVyYCBz dHJ1Y3R1cmUgaXMgc3BlY2lmaWVkIGluCj4+ICs6cmVmOmBidWZmZXJgLgo+PiArCj4+ICtSZXR1 cm4gVmFsdWUKPj4gKz09PT09PT09PT09PQo+PiArCj4+ICtPbiBzdWNjZXNzIDAgaXMgcmV0dXJu ZWQsIG9uIGVycm9yIC0xIGFuZCB0aGUgYGBlcnJub2BgIHZhcmlhYmxlIGlzIHNldAo+PiArYXBw cm9wcmlhdGVseS4gVGhlIGdlbmVyaWMgZXJyb3IgY29kZXMgYXJlIGRlc2NyaWJlZCBhdCB0aGUK Pj4gKzpyZWY6YEdlbmVyaWMgRXJyb3IgQ29kZXMgPGdlbi1lcnJvcnM+YCBjaGFwdGVyLgo+PiAr Cj4+ICtFQlVTWQo+PiArICAgIEZpbGUgSS9PIGlzIGluIHByb2dyZXNzLgo+PiArCj4+ICtFSU5W QUwKPj4gKyAgICBUaGUgYnVmZmVyIGBgaW5kZXhgYCBkb2Vzbid0IGV4aXN0IGluIHRoZSBxdWV1 ZS4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1 ZjItY29yZS5jCj4+IGIvZHJpdmVycy9tZWRpYS9jb21tb24vdmlkZW9idWYyL3ZpZGVvYnVmMi1j b3JlLmMKPj4gaW5kZXggODk5NzgzZjY3NTgwLi5hYTU0NmM5NzJjM2QgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jCj4+ICsrKyBi L2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVmMi92aWRlb2J1ZjItY29yZS5jCj4+IEBAIC0x NjM3LDYgKzE2MzcsMzkgQEAgaW50IHZiMl9jb3JlX3ByZXBhcmVfYnVmKHN0cnVjdCB2YjJfcXVl dWUgKnEsCj4+IHVuc2lnbmVkIGludCBpbmRleCwgdm9pZCAqcGIpICB9Cj4+IEVYUE9SVF9TWU1C T0xfR1BMKHZiMl9jb3JlX3ByZXBhcmVfYnVmKTsKPj4KPj4gK2ludCB2YjJfY29yZV9kZWxldGVf YnVmKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBpbmRleCkgewo+PiArICAgICAg IHN0cnVjdCB2YjJfYnVmZmVyICp2YjsKPj4gKwo+PiArICAgICAgIHZiID0gdmIyX2dldF9idWZm ZXIocSwgaW5kZXgpOwo+PiArICAgICAgIGlmICghdmIpIHsKPj4gKyAgICAgICAgICAgICAgIGRw cmludGsocSwgMSwgImludmFsaWQgYnVmZmVyIGluZGV4ICVkXG4iLCBpbmRleCk7Cj4+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAgICAgICB9Cj4+ICsKPj4gKyAgICAgICBp ZiAodmItPnN0YXRlICE9IFZCMl9CVUZfU1RBVEVfREVRVUVVRUQpIHsKPj4gKyAgICAgICAgICAg ICAgIGRwcmludGsocSwgMSwgImNhbid0IGRlbGV0ZSBub24gZGVxdWV1ZWQgYnVmZmVyIGluZGV4 ICVkXG4iLCBpbmRleCk7Cj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKyAg ICAgICB9Cj4+ICsKPj4gKyAgICAgICBpZiAodmItPnBsYW5lc1swXS5tZW1fcHJpdikKPj4gKyAg ICAgICAgICAgICAgIGNhbGxfdm9pZF92Yl9xb3AodmIsIGJ1Zl9jbGVhbnVwLCB2Yik7Cj4+ICsK Pj4gKyAgICAgICAvKiBGcmVlIE1NQVAgYnVmZmVycyBvciByZWxlYXNlIFVTRVJQVFIgYnVmZmVy cyAqLwo+PiArICAgICAgIGlmIChxLT5tZW1vcnkgPT0gVkIyX01FTU9SWV9NTUFQKQo+PiArICAg ICAgICAgICAgICAgX192YjJfYnVmX21lbV9mcmVlKHZiKTsKPj4gKyAgICAgICBlbHNlIGlmIChx LT5tZW1vcnkgPT0gVkIyX01FTU9SWV9ETUFCVUYpCj4+ICsgICAgICAgICAgICAgICBfX3ZiMl9i dWZfZG1hYnVmX3B1dCh2Yik7Cj4+ICsgICAgICAgZWxzZQo+PiArICAgICAgICAgICAgICAgX192 YjJfYnVmX3VzZXJwdHJfcHV0KHZiKTsKPj4gKwo+PiArICAgICAgIHZiMl9xdWV1ZV9yZW1vdmVf YnVmZmVyKHEsIHZiKTsKPj4gKyAgICAgICBrZnJlZSh2Yik7Cj4gVGhlIG51bV9idWZmZXJzIGlz IG5vdCBjaGFuZ2VkLCBJcyB0aGF0IG9uIHB1cnBvc2U/Cj4gbnVtX2J1ZmZlcnMgZG9lc24ndCBt ZWFuIHRoZSBudW1iZXIgb2YgdmIyIGJ1ZmZlcnMsICBidXQgb25seSBkZWNpZGVzIHRoZSBtYXgg aW5kZXggb2YgYWxsb2NhdGVkIHZiMiBidWZmZXI/Cj4gT25jZSB0aGUgaW5kZXggaXMgZGVsZXRl ZCwgdGhlbiBpdCB3b24ndCBiZSB1c2VkIGFueW1vcmUsIHVubGVzcyBmcmVlIHRoZSB2YjIgcXVl dWU/IGlzIGl0IGEgaG9sZSBpbiB2YjIgcXVldWU/CgpZZXMgbnVtX2J1ZmZlcnMgaXNuJ3QgY2hh bmdlIGFuZCBzdGlsbCByZXByZXNlbnQgdGhlIGhpZ2hlc3QgaW5kZXggb2YgYWxsb2NhdGVkIGJ1 ZmZlci4KREVMRVRFX0JVRiByZW1vdmUgdGhlIGJ1ZmZlciBmcm9tIHRoZSBsaXN0IGFuZCBmcmVl IHRoZSBtZW1vcnkuClRoYXQgY291bGQgYSBjcmVhdGUgYSBob2xlIGluIHZiMiBxdWV1ZSwgdGhh dCB3aHkgdGhlIGZpcnN0IHBhdGNoIG9mIHRoaXMgc2VyaWVzIGNoYW5nZQphbGwgcGxhY2VzIHdo ZXJlIHZiMiBxdWV1ZSBhcnJheSB3YXMgdXNlZCBieSBjYWxscyB0byBoZWxwZXJzIGZ1bmN0aW9u IGFuZCBhbHNvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUuCm51bV9idWZmZXJzIGlzIHVzZWQgYXMg dGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZSB3aGVuIGZpbmRpbmcgdGhlIGZyZWUgaW5kZXhlcyBm b3IgYnVmZmVycyAoc2VlIHZiMl9xdWV1ZV9hZGRfYnVmZmVyKCkpCnRoaXMgd2F5IEkgY2FuIGd1 YXJhbnR5IHRoYXQgdGhlIGluZGV4ZXMgYSBjb250aW51b3VzIHdoaWNoIGlzIGEgcmVxdWlyZW1l bnQgZm9yIGNyZWF0ZV9idWZzLgpJIGNob29zZSB0aGlzIHNvbHV0aW9uIGJlY2F1c2UgWEFycmF5 IEFQSSBkb2Vzbid0IG9mZmVyIHdheSB0byBmaW5kIGNvbnRpbnVvdXMgZnJlZSByYW5nZS4KSXQg ZG9lc24ndCBzZWVtIGltcG9zc2libGUgdG8gYWRkIGl0IGJ1dCB0aGlzIHNlcmllcyBpcyBhbHJl YWR5IGJpZyBlbm91Z2ggZnJvbSBteSBwb2ludCBvZiB2aWV3LgoKUmVnYXJkcywKQmVuamFtaW4K Cj4KPiBBbmQgeW91IGNhbiB1c2UgeGFfZm9yX2VhY2goKSBpbnN0ZWFkIHRoZSBmb3IgbG9vcCB0 byBpdGVyYXRlIG92ZXIgdGhlIHByZXNlbnQgYnVmZmVycyBpbiB2YjIgcXVldWUuCj4KPj4gKwo+ PiArICAgICAgIGRwcmludGsocSwgMiwgImJ1ZmZlciAlZCBkZWxldGVkXG4iLCBpbmRleCk7Cj4+ ICsgICAgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gLyoKPj4gICAqIHZiMl9zdGFydF9zdHJl YW1pbmcoKSAtIEF0dGVtcHQgdG8gc3RhcnQgc3RyZWFtaW5nLgo+PiAgICogQHE6ICAgICAgICAg dmlkZW9idWYyIHF1ZXVlCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRl b2J1ZjIvdmlkZW9idWYyLXY0bDIuYwo+PiBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3ZpZGVvYnVm Mi92aWRlb2J1ZjItdjRsMi5jCj4+IGluZGV4IDcyNDEzNWQ0MWY3Zi4uY2VhNjY2YzE3YjQxIDEw MDY0NAo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0 bDIuYwo+PiArKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi92aWRlb2J1ZjIvdmlkZW9idWYyLXY0 bDIuYwo+PiBAQCAtNzUxLDYgKzc1MSwxMiBAQCBpbnQgdmIyX3ByZXBhcmVfYnVmKHN0cnVjdCB2 YjJfcXVldWUgKnEsIHN0cnVjdAo+PiBtZWRpYV9kZXZpY2UgKm1kZXYsICB9ICBFWFBPUlRfU1lN Qk9MX0dQTCh2YjJfcHJlcGFyZV9idWYpOwo+Pgo+PiAraW50IHZiMl9kZWxldGVfYnVmKHN0cnVj dCB2YjJfcXVldWUgKnEsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikgewo+PiArICAgICAgIHJldHVy biB2YjJfY29yZV9kZWxldGVfYnVmKHEsIGItPmluZGV4KTsgfQo+PiArRVhQT1JUX1NZTUJPTF9H UEwodmIyX2RlbGV0ZV9idWYpOwo+PiArCj4+IGludCB2YjJfY3JlYXRlX2J1ZnMoc3RydWN0IHZi Ml9xdWV1ZSAqcSwgc3RydWN0IHY0bDJfY3JlYXRlX2J1ZmZlcnMgKmNyZWF0ZSkKPj4gewo+PiAg ICAgICAgIHVuc2lnbmVkIHJlcXVlc3RlZF9wbGFuZXMgPSAxOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1kZXYuYyBiL2RyaXZlcnMvbWVkaWEvdjRsMi0KPj4g Y29yZS92NGwyLWRldi5jCj4+IGluZGV4IGY4MTI3OTQ5MjY4Mi4uODBhY2UyZTFlOTMyIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWRldi5jCj4+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItZGV2LmMKPj4gQEAgLTcyMCw2ICs3MjAsNyBAQCBz dGF0aWMgdm9pZCBkZXRlcm1pbmVfdmFsaWRfaW9jdGxzKHN0cnVjdCB2aWRlb19kZXZpY2UKPj4g KnZkZXYpCj4+ICAgICAgICAgICAgICAgICBTRVRfVkFMSURfSU9DVEwob3BzLCBWSURJT0NfUFJF UEFSRV9CVUYsIHZpZGlvY19wcmVwYXJlX2J1Zik7Cj4+ICAgICAgICAgICAgICAgICBTRVRfVkFM SURfSU9DVEwob3BzLCBWSURJT0NfU1RSRUFNT04sIHZpZGlvY19zdHJlYW1vbik7Cj4+ICAgICAg ICAgICAgICAgICBTRVRfVkFMSURfSU9DVEwob3BzLCBWSURJT0NfU1RSRUFNT0ZGLCB2aWRpb2Nf c3RyZWFtb2ZmKTsKPj4gKyAgICAgICAgICAgICAgIFNFVF9WQUxJRF9JT0NUTChvcHMsIFZJRElP Q19ERUxFVEVfQlVGLAo+PiArIHZpZGlvY19kZWxldGVfYnVmKTsKPj4gICAgICAgICB9Cj4+Cj4+ ICAgICAgICAgaWYgKGlzX3ZpZCB8fCBpc192YmkgfHwgaXNfbWV0YSkgeyBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi0KPj4gaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEv djRsMi1jb3JlL3Y0bDItaW9jdGwuYwo+PiBpbmRleCBhODU4YWNlYTY1NDcuLjFjNzM3Mjc5ZDNl ZiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1pb2N0bC5jCj4+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9jdGwuYwo+PiBAQCAtMjE1Niw2 ICsyMTU2LDE1IEBAIHN0YXRpYyBpbnQgdjRsX3ByZXBhcmVfYnVmKGNvbnN0IHN0cnVjdAo+PiB2 NGwyX2lvY3RsX29wcyAqb3BzLAo+PiAgICAgICAgIHJldHVybiByZXQgPyByZXQgOiBvcHMtPnZp ZGlvY19wcmVwYXJlX2J1ZihmaWxlLCBmaCwgYik7ICB9Cj4+Cj4+ICtzdGF0aWMgaW50IHY0bF9k ZWxldGVfYnVmKGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyAqb3BzLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdm9pZCAqYXJnKSB7 Cj4+ICsgICAgICAgc3RydWN0IHY0bDJfYnVmZmVyICpiID0gYXJnOwo+PiArICAgICAgIGludCBy ZXQgPSBjaGVja19mbXQoZmlsZSwgYi0+dHlwZSk7Cj4+ICsKPj4gKyAgICAgICByZXR1cm4gcmV0 ID8gcmV0IDogb3BzLT52aWRpb2NfZGVsZXRlX2J1ZihmaWxlLCBmaCwgYik7IH0KPj4gKwo+PiBz dGF0aWMgaW50IHY0bF9nX3Bhcm0oY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpvcHMsCj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KmZoLCB2b2lkICphcmcpICB7IEBAIC0yOTA1LDYgKzI5MTQsNwo+PiBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IHY0bDJfaW9jdGxfaW5mbyB2NGwyX2lvY3Rsc1tdID0gewo+PiAgICAgICAgIElPQ1RM X0lORk8oVklESU9DX0VOVU1fRlJFUV9CQU5EUywgdjRsX2VudW1fZnJlcV9iYW5kcywKPj4gdjRs X3ByaW50X2ZyZXFfYmFuZCwgMCksCj4+ICAgICAgICAgSU9DVExfSU5GTyhWSURJT0NfREJHX0df Q0hJUF9JTkZPLCB2NGxfZGJnX2dfY2hpcF9pbmZvLAo+PiB2NGxfcHJpbnRfZGJnX2NoaXBfaW5m bywgSU5GT19GTF9DTEVBUih2NGwyX2RiZ19jaGlwX2luZm8sIG1hdGNoKSksCj4+ICAgICAgICAg SU9DVExfSU5GTyhWSURJT0NfUVVFUllfRVhUX0NUUkwsIHY0bF9xdWVyeV9leHRfY3RybCwKPj4g djRsX3ByaW50X3F1ZXJ5X2V4dF9jdHJsLCBJTkZPX0ZMX0NUUkwgfCBJTkZPX0ZMX0NMRUFSKHY0 bDJfcXVlcnlfZXh0X2N0cmwsCj4+IGlkKSksCj4+ICsgICAgICAgSU9DVExfSU5GTyhWSURJT0Nf REVMRVRFX0JVRiwgdjRsX2RlbGV0ZV9idWYsIHY0bF9wcmludF9idWZmZXIsCj4+ICsgSU5GT19G TF9RVUVVRSksCj4+IH07Cj4+ICNkZWZpbmUgVjRMMl9JT0NUTFMgQVJSQVlfU0laRSh2NGwyX2lv Y3RscykKPj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oIGIvaW5j bHVkZS9tZWRpYS92NGwyLWlvY3RsLmggaW5kZXgKPj4gZWRiNzMzZjIxNjA0Li4yZjIzMmVkODg0 YzcgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCj4+ICsrKyBiL2lu Y2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCj4+IEBAIC0xNjMsNiArMTYzLDggQEAgc3RydWN0IHY0 bDJfZmg7Cj4+ICAgKiAgICAgOnJlZjpgVklESU9DX0NSRUFURV9CVUZTIDx2aWRpb2NfY3JlYXRl X2J1ZnM+YCBpb2N0bAo+PiAgICogQHZpZGlvY19wcmVwYXJlX2J1ZjogcG9pbnRlciB0byB0aGUg ZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzCj4+ICAgKiAgICAgOnJlZjpgVklESU9DX1BSRVBBUkVf QlVGIDx2aWRpb2NfcHJlcGFyZV9idWY+YCBpb2N0bAo+PiArICogQHZpZGlvY19kZWxldGVfYnVm OiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMKPj4gKyAqICAgICA6cmVm OmBWSURJT0NfREVMRVRFX0JVRiA8dmlkaW9jX2RlbGV0ZV9idWY+YCBpb2N0bAo+PiAgICogQHZp ZGlvY19vdmVybGF5OiBwb2ludGVyIHRvIHRoZSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMKPj4g ICAqICAgICA6cmVmOmBWSURJT0NfT1ZFUkxBWSA8dmlkaW9jX292ZXJsYXk+YCBpb2N0bAo+PiAg ICogQHZpZGlvY19nX2ZidWY6IHBvaW50ZXIgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50 cyBAQCAtNDIyLDYgKzQyNCw4Cj4+IEBAIHN0cnVjdCB2NGwyX2lvY3RsX29wcyB7Cj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyAq Yik7Cj4+ICAgICAgICAgaW50ICgqdmlkaW9jX3ByZXBhcmVfYnVmKShzdHJ1Y3QgZmlsZSAqZmls ZSwgdm9pZCAqZmgsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg djRsMl9idWZmZXIgKmIpOwo+PiArICAgICAgIGludCAoKnZpZGlvY19kZWxldGVfYnVmKShzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7Cj4+Cj4+ICAgICAgICAgaW50ICgqdmlkaW9jX292 ZXJsYXkpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGkpOwo+PiAg ICAgICAgIGludCAoKnZpZGlvY19nX2ZidWYpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwg ZGlmZiAtLWdpdAo+PiBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaCBiL2luY2x1ZGUv bWVkaWEvdmlkZW9idWYyLWNvcmUuaCBpbmRleAo+PiAwODBiNzgzZDYwOGQuLjBmOWU2OGY3NmI3 NyAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItY29yZS5oCj4+ICsrKyBi L2luY2x1ZGUvbWVkaWEvdmlkZW9idWYyLWNvcmUuaAo+PiBAQCAtODQwLDYgKzg0MCwxNSBAQCBp bnQgdmIyX2NvcmVfY3JlYXRlX2J1ZnMoc3RydWN0IHZiMl9xdWV1ZSAqcSwKPj4gZW51bSB2YjJf bWVtb3J5IG1lbW9yeSwKPj4gICAqLwo+PiBpbnQgdmIyX2NvcmVfcHJlcGFyZV9idWYoc3RydWN0 IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGluZGV4LCB2b2lkICpwYik7Cj4+Cj4+ICsvKioK Pj4gKyAqIHZiMl9jb3JlX2RlbGV0ZV9idWYoKSAtCj4+ICsgKiBAcTogcG9pbnRlciB0byAmc3Ry dWN0IHZiMl9xdWV1ZSB3aXRoIHZpZGVvYnVmMiBxdWV1ZS4KPj4gKyAqIEBpbmRleDogICAgIGlk IG51bWJlciBvZiB0aGUgYnVmZmVyLgo+PiArICoKPj4gKyAqICBSZXR1cm46IHJldHVybnMgemVy byBvbiBzdWNjZXNzOyBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4KPj4gKyAqLwo+PiAraW50IHZi Ml9jb3JlX2RlbGV0ZV9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwgdW5zaWduZWQgaW50IGluZGV4 KTsKPj4gKwo+PiAvKioKPj4gICAqIHZiMl9jb3JlX3FidWYoKSAtIFF1ZXVlIGEgYnVmZmVyIGZy b20gdXNlcnNwYWNlCj4+ICAgKgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1 ZjItdjRsMi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oCj4+IGluZGV4IDg4YTdh NTY1MTcwZS4uM2JlZWI0YzczNWYwIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVv YnVmMi12NGwyLmgKPj4gKysrIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1ZjItdjRsMi5oCj4+IEBA IC0xMTQsNiArMTE0LDE3IEBAIGludCB2YjJfY3JlYXRlX2J1ZnMoc3RydWN0IHZiMl9xdWV1ZSAq cSwgc3RydWN0Cj4+IHY0bDJfY3JlYXRlX2J1ZmZlcnMgKmNyZWF0ZSk7Cj4+ICAgKi8KPj4gaW50 IHZiMl9wcmVwYXJlX2J1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3QgbWVkaWFfZGV2aWNl ICptZGV2LAo+PiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYik7Cj4+ ICsvKioKPj4gKyAqIHZiMl9kZWxldGVfYnVmKCkgLSBEZWxldGUgdGhlIGJ1ZmZlciBmcm9tIHRo ZSBxdWV1ZQo+PiArICoKPj4gKyAqIEBxOiAgICAgICAgIHBvaW50ZXIgdG8gJnN0cnVjdCB2YjJf cXVldWUgd2l0aCB2aWRlb2J1ZjIgcXVldWUuCj4+ICsgKiBAYjogICAgICAgICBidWZmZXIgc3Ry dWN0dXJlIHBhc3NlZCBmcm9tIHVzZXJzcGFjZSB0bwo+PiArICogICAgICAgICAgICAgJnY0bDJf aW9jdGxfb3BzLT52aWRpb2NfZGVsZXRlX2J1ZiBoYW5kbGVyIGluIGRyaXZlcgo+PiArICoKPj4g KyAqIFRoZSByZXR1cm4gdmFsdWVzIGZyb20gdGhpcyBmdW5jdGlvbiBhcmUgaW50ZW5kZWQgdG8g YmUgZGlyZWN0bHkKPj4gK3JldHVybmVkCj4+ICsgKiBmcm9tICZ2NGwyX2lvY3RsX29wcy0+dmlk aW9jX2RlbGV0ZV9idWYgaGFuZGxlciBpbiBkcml2ZXIuCj4+ICsgKi8KPj4gK2ludCB2YjJfZGVs ZXRlX2J1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpOwo+Pgo+ PiAvKioKPj4gICAqIHZiMl9xYnVmKCkgLSBRdWV1ZSBhIGJ1ZmZlciBmcm9tIHVzZXJzcGFjZSBk aWZmIC0tZ2l0Cj4+IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS91 YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGluZGV4Cj4+IGFlZTc1ZWI5ZTY4Ni4uMzFiYmExOTE1NjQy IDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKPj4gKysrIGIv aW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCj4+IEBAIC0yNzAyLDYgKzI3MDIsOCBAQCBz dHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyB7ICAjZGVmaW5lCj4+IFZJRElPQ19EQkdfR19DSElQ X0lORk8gIF9JT1dSKCdWJywgMTAyLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pbmZvKQo+Pgo+PiAj ZGVmaW5lIFZJRElPQ19RVUVSWV9FWFRfQ1RSTCAgX0lPV1IoJ1YnLCAxMDMsIHN0cnVjdCB2NGwy X3F1ZXJ5X2V4dF9jdHJsKQo+PiArI2RlZmluZSBWSURJT0NfREVMRVRFX0JVRiAgICAgIF9JT1dS KCdWJywgMTA0LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCj4+ICsKPj4KPj4gLyogUmVtaW5kZXI6IHdo ZW4gYWRkaW5nIG5ldyBpb2N0bHMgcGxlYXNlIGFkZCBzdXBwb3J0IGZvciB0aGVtIHRvCj4+ICAg ICBkcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWNvbXBhdC1pb2N0bDMyLmMgYXMgd2VsbCEg Ki8KPj4gLS0KPj4gMi4zOS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==