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 DDF56C433FE for ; Fri, 15 Apr 2022 09:26:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234597AbiDOJ3G (ORCPT ); Fri, 15 Apr 2022 05:29:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59200 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233670AbiDOJ3F (ORCPT ); Fri, 15 Apr 2022 05:29:05 -0400 Received: from out30-132.freemail.mail.aliyun.com (out30-132.freemail.mail.aliyun.com [115.124.30.132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B386E972FE; Fri, 15 Apr 2022 02:26:35 -0700 (PDT) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R111e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04407;MF=xuanzhuo@linux.alibaba.com;NM=1;PH=DS;RN=33;SR=0;TI=SMTPD_---0VA6gwDg_1650014789; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0VA6gwDg_1650014789) by smtp.aliyun-inc.com(127.0.0.1); Fri, 15 Apr 2022 17:26:30 +0800 Message-ID: <1650014226.0312726-1-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize Date: Fri, 15 Apr 2022 17:17:06 +0800 From: Xuan Zhuo To: Jason Wang Cc: Jeff Dike , Richard Weinberger , Anton Ivanov , "Michael S. Tsirkin" , "David S. Miller" , Jakub Kicinski , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Alexander Gordeev , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Johannes Berg , Vincent Whitchurch , linux-um@lists.infradead.org, netdev , platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm , "open list:XDP (eXpress Data Path)" , virtualization References: <20220406034346.74409-1-xuanzhuo@linux.alibaba.com> <20220406034346.74409-32-xuanzhuo@linux.alibaba.com> <122008a6-1e79-14d3-1478-59f96464afc9@redhat.com> <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> <1649989126.5433838-1-xuanzhuo@linux.alibaba.com> In-Reply-To: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org On Fri, 15 Apr 2022 13:53:54 +0800, Jason Wang wrote: > On Fri, Apr 15, 2022 at 10:23 AM Xuan Zhuo w= rote: > > > > On Thu, 14 Apr 2022 17:30:02 +0800, Jason Wang wr= ote: > > > On Wed, Apr 13, 2022 at 4:47 PM Xuan Zhuo wrote: > > > > > > > > On Wed, 13 Apr 2022 16:00:18 +0800, Jason Wang wrote: > > > > > > > > > > =E5=9C=A8 2022/4/6 =E4=B8=8A=E5=8D=8811:43, Xuan Zhuo =E5=86=99= =E9=81=93: > > > > > > This patch implements the resize function of the rx, tx queues. > > > > > > Based on this function, it is possible to modify the ring num o= f the > > > > > > queue. > > > > > > > > > > > > There may be an exception during the resize process, the resize= may > > > > > > fail, or the vq can no longer be used. Either way, we must exec= ute > > > > > > napi_enable(). Because napi_disable is similar to a lock, napi_= enable > > > > > > must be called after calling napi_disable. > > > > > > > > > > > > Signed-off-by: Xuan Zhuo > > > > > > --- > > > > > > drivers/net/virtio_net.c | 81 +++++++++++++++++++++++++++++++= +++++++++ > > > > > > 1 file changed, 81 insertions(+) > > > > > > > > > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > > > > > index b8bf00525177..ba6859f305f7 100644 > > > > > > --- a/drivers/net/virtio_net.c > > > > > > +++ b/drivers/net/virtio_net.c > > > > > > @@ -251,6 +251,9 @@ struct padded_vnet_hdr { > > > > > > char padding[4]; > > > > > > }; > > > > > > > > > > > > +static void virtnet_sq_free_unused_buf(struct virtqueue *vq, v= oid *buf); > > > > > > +static void virtnet_rq_free_unused_buf(struct virtqueue *vq, v= oid *buf); > > > > > > + > > > > > > static bool is_xdp_frame(void *ptr) > > > > > > { > > > > > > return (unsigned long)ptr & VIRTIO_XDP_FLAG; > > > > > > @@ -1369,6 +1372,15 @@ static void virtnet_napi_enable(struct v= irtqueue *vq, struct napi_struct *napi) > > > > > > { > > > > > > napi_enable(napi); > > > > > > > > > > > > + /* Check if vq is in reset state. The normal reset/resize p= rocess will > > > > > > + * be protected by napi. However, the protection of napi is= only enabled > > > > > > + * during the operation, and the protection of napi will en= d after the > > > > > > + * operation is completed. If re-enable fails during the pr= ocess, vq > > > > > > + * will remain unavailable with reset state. > > > > > > + */ > > > > > > + if (vq->reset) > > > > > > + return; > > > > > > > > > > > > > > > I don't get when could we hit this condition. > > > > > > > > > > > > In patch 23, the code to implement re-enable vq is as follows: > > > > > > > > +static int vp_modern_enable_reset_vq(struct virtqueue *vq) > > > > +{ > > > > + struct virtio_pci_device *vp_dev =3D to_vp_device(vq->vdev); > > > > + struct virtio_pci_modern_device *mdev =3D &vp_dev->mdev; > > > > + struct virtio_pci_vq_info *info; > > > > + unsigned long flags, index; > > > > + int err; > > > > + > > > > + if (!vq->reset) > > > > + return -EBUSY; > > > > + > > > > + index =3D vq->index; > > > > + info =3D vp_dev->vqs[index]; > > > > + > > > > + /* check queue reset status */ > > > > + if (vp_modern_get_queue_reset(mdev, index) !=3D 1) > > > > + return -EBUSY; > > > > + > > > > + err =3D vp_active_vq(vq, info->msix_vector); > > > > + if (err) > > > > + return err; > > > > + > > > > + if (vq->callback) { > > > > + spin_lock_irqsave(&vp_dev->lock, flags); > > > > + list_add(&info->node, &vp_dev->virtqueues); > > > > + spin_unlock_irqrestore(&vp_dev->lock, flags); > > > > + } else { > > > > + INIT_LIST_HEAD(&info->node); > > > > + } > > > > + > > > > + vp_modern_set_queue_enable(&vp_dev->mdev, index, true); > > > > + > > > > + if (vp_dev->per_vq_vectors && info->msix_vector !=3D VIRTIO= _MSI_NO_VECTOR) > > > > + enable_irq(pci_irq_vector(vp_dev->pci_dev, info->ms= ix_vector)); > > > > + > > > > + vq->reset =3D false; > > > > + > > > > + return 0; > > > > +} > > > > > > > > > > > > There are three situations where an error will be returned. These a= re the > > > > situations I want to handle. > > > > > > Right, but it looks harmless if we just schedule the NAPI without the= check. > > > > Yes. > > > > > > > > > > But I'm rethinking the question, and I feel like you're right, alth= ough the > > > > hardware setup may fail. We can no longer sync with the hardware. B= ut using it > > > > as a normal vq doesn't have any problems. > > > > > > Note that we should make sure the buggy(malicous) device won't crash > > > the codes by changing the queue_reset value at its will. > > > > I will keep an eye on this situation. > > > > > > > > > > > > > > > > > > > > > > > > > + > > > > > > /* If all buffers were filled by other side before we napi_= enabled, we > > > > > > * won't get another interrupt, so process any outstanding = packets now. > > > > > > * Call local_bh_enable after to trigger softIRQ processing. > > > > > > @@ -1413,6 +1425,15 @@ static void refill_work(struct work_stru= ct *work) > > > > > > struct receive_queue *rq =3D &vi->rq[i]; > > > > > > > > > > > > napi_disable(&rq->napi); > > > > > > + > > > > > > + /* Check if vq is in reset state. See more in > > > > > > + * virtnet_napi_enable() > > > > > > + */ > > > > > > + if (rq->vq->reset) { > > > > > > + virtnet_napi_enable(rq->vq, &rq->napi); > > > > > > + continue; > > > > > > + } > > > > > > > > > > > > > > > Can we do something similar in virtnet_close() by canceling the w= ork? > > > > > > > > I think there is no need to cancel the work here, because napi_disa= ble will wait > > > > for the napi_enable of the resize. So if the re-enable failed vq is= used as a normal > > > > vq, this logic can be removed. > > > > > > Actually I meant the part of virtnet_rx_resize(). > > > > > > If we don't synchronize with the refill work, it might enable NAPI un= expectedly? > > > > I don't think this situation will be encountered, because napi_disable = is > > mutually exclusive, so there will be no unexpected napi enable. > > > > Is there something I misunderstood? > > So in virtnet_rx_resize() we do: > > napi_disable() > ... > resize() > ... > napi_enalbe() > > How can we guarantee that the work is not run after the napi_disable()? I think you're talking about a situation like this: virtnet_rx_resize refill work ----------------------------------------------------------- napi_disable() ... napi_disable() resize() ... napi_enable() ... napi_enalbe() But in fact: virtnet_rx_resize refill work ----------------------------------------------------------- napi_disable() ... napi_disable() <----[0] resize() | ... | napi_enalbe() | napi_disable() <---- [1] here success napi_enable() Because virtnet_rx_resize() has already executed napi_disable(), napi_disal= be() of [0] will wait until [1] to complete. I'm not sure if my understanding is correct. Thanks. > > Thanks > > > > > Thanks. > > > > > > > > Thanks > > > > > > > > > > > > > > > > > > > > > > > > > > > + > > > > > > still_empty =3D !try_fill_recv(vi, rq, GFP_KERNEL); > > > > > > virtnet_napi_enable(rq->vq, &rq->napi); > > > > > > > > > > > > @@ -1523,6 +1544,10 @@ static void virtnet_poll_cleantx(struct = receive_queue *rq) > > > > > > if (!sq->napi.weight || is_xdp_raw_buffer_queue(vi, index)) > > > > > > return; > > > > > > > > > > > > + /* Check if vq is in reset state. See more in virtnet_napi_= enable() */ > > > > > > + if (sq->vq->reset) > > > > > > + return; > > > > > > > > > > > > > > > We've disabled TX napi, any chance we can still hit this? > > > > > > > > Same as above. > > > > > > > > > > > > > > > > > > > > + > > > > > > if (__netif_tx_trylock(txq)) { > > > > > > do { > > > > > > virtqueue_disable_cb(sq->vq); > > > > > > @@ -1769,6 +1794,62 @@ static netdev_tx_t start_xmit(struct sk_= buff *skb, struct net_device *dev) > > > > > > return NETDEV_TX_OK; > > > > > > } > > > > > > > > > > > > +static int virtnet_rx_resize(struct virtnet_info *vi, > > > > > > + struct receive_queue *rq, u32 ring_num) > > > > > > +{ > > > > > > + int err; > > > > > > + > > > > > > + napi_disable(&rq->napi); > > > > > > + > > > > > > + err =3D virtqueue_resize(rq->vq, ring_num, virtnet_rq_free_= unused_buf); > > > > > > + if (err) > > > > > > + goto err; > > > > > > + > > > > > > + if (!try_fill_recv(vi, rq, GFP_KERNEL)) > > > > > > + schedule_delayed_work(&vi->refill, 0); > > > > > > + > > > > > > + virtnet_napi_enable(rq->vq, &rq->napi); > > > > > > + return 0; > > > > > > + > > > > > > +err: > > > > > > + netdev_err(vi->dev, > > > > > > + "reset rx reset vq fail: rx queue index: %td err= : %d\n", > > > > > > + rq - vi->rq, err); > > > > > > + virtnet_napi_enable(rq->vq, &rq->napi); > > > > > > + return err; > > > > > > +} > > > > > > + > > > > > > +static int virtnet_tx_resize(struct virtnet_info *vi, > > > > > > + struct send_queue *sq, u32 ring_num) > > > > > > +{ > > > > > > + struct netdev_queue *txq; > > > > > > + int err, qindex; > > > > > > + > > > > > > + qindex =3D sq - vi->sq; > > > > > > + > > > > > > + virtnet_napi_tx_disable(&sq->napi); > > > > > > + > > > > > > + txq =3D netdev_get_tx_queue(vi->dev, qindex); > > > > > > + __netif_tx_lock_bh(txq); > > > > > > + netif_stop_subqueue(vi->dev, qindex); > > > > > > + __netif_tx_unlock_bh(txq); > > > > > > + > > > > > > + err =3D virtqueue_resize(sq->vq, ring_num, virtnet_sq_free_= unused_buf); > > > > > > + if (err) > > > > > > + goto err; > > > > > > + > > > > > > + netif_start_subqueue(vi->dev, qindex); > > > > > > + virtnet_napi_tx_enable(vi, sq->vq, &sq->napi); > > > > > > + return 0; > > > > > > + > > > > > > +err: > > > > > > > > > > > > > > > I guess we can still start the queue in this case? (Since we don't > > > > > change the queue if resize fails). > > > > > > > > Yes, you are right. > > > > > > > > Thanks. > > > > > > > > > > > > > > > > > > > > + netdev_err(vi->dev, > > > > > > + "reset tx reset vq fail: tx queue index: %td err= : %d\n", > > > > > > + sq - vi->sq, err); > > > > > > + virtnet_napi_tx_enable(vi, sq->vq, &sq->napi); > > > > > > + return err; > > > > > > +} > > > > > > + > > > > > > /* > > > > > > * Send command via the control virtqueue and check status. = Commands > > > > > > * supported by the hypervisor, as indicated by feature bits,= should > > > > > > > > > > > > > > > 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 smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 E666BC433F5 for ; Fri, 15 Apr 2022 09:26:41 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 78FA7417E2; Fri, 15 Apr 2022 09:26:41 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2CN9DS6rb_GJ; Fri, 15 Apr 2022 09:26:39 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTPS id 0D75A41811; Fri, 15 Apr 2022 09:26:39 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id BD1B1C0033; Fri, 15 Apr 2022 09:26:38 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2DBB8C002C for ; Fri, 15 Apr 2022 09:26:37 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 162F38410B for ; Fri, 15 Apr 2022 09:26:37 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id A4-4aEpHdCWo for ; Fri, 15 Apr 2022 09:26:35 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131]) by smtp1.osuosl.org (Postfix) with ESMTPS id 934908410A for ; Fri, 15 Apr 2022 09:26:35 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R111e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e04407; MF=xuanzhuo@linux.alibaba.com; NM=1; PH=DS; RN=33; SR=0; TI=SMTPD_---0VA6gwDg_1650014789; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0VA6gwDg_1650014789) by smtp.aliyun-inc.com(127.0.0.1); Fri, 15 Apr 2022 17:26:30 +0800 Message-ID: <1650014226.0312726-1-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize Date: Fri, 15 Apr 2022 17:17:06 +0800 From: Xuan Zhuo To: Jason Wang References: <20220406034346.74409-1-xuanzhuo@linux.alibaba.com> <20220406034346.74409-32-xuanzhuo@linux.alibaba.com> <122008a6-1e79-14d3-1478-59f96464afc9@redhat.com> <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> <1649989126.5433838-1-xuanzhuo@linux.alibaba.com> In-Reply-To: Cc: Vadim Pasternak , "Michael S. Tsirkin" , linux-remoteproc@vger.kernel.org, Alexei Starovoitov , Bjorn Andersson , Alexander Gordeev , Anton Ivanov , linux-s390@vger.kernel.org, Johannes Berg , Daniel Borkmann , Richard Weinberger , Vincent Whitchurch , John Fastabend , Halil Pasic , Jakub Kicinski , virtualization , Heiko Carstens , Jesper Dangaard Brouer , Vasily Gorbik , Jeff Dike , linux-um@lists.infradead.org, Mark Gross , Hans de Goede , kvm , platform-driver-x86@vger.kernel.org, Mathieu Poirier , netdev , Cornelia Huck , Sven Schnelle , "open list:XDP \(eXpress Data Path\)" , "David S. Miller" X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gRnJpLCAxNSBBcHIgMjAyMiAxMzo1Mzo1NCArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdA cmVkaGF0LmNvbT4gd3JvdGU6Cj4gT24gRnJpLCBBcHIgMTUsIDIwMjIgYXQgMTA6MjMgQU0gWHVh biBaaHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gVGh1 LCAxNCBBcHIgMjAyMiAxNzozMDowMiArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0 LmNvbT4gd3JvdGU6Cj4gPiA+IE9uIFdlZCwgQXByIDEzLCAyMDIyIGF0IDQ6NDcgUE0gWHVhbiBa aHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4gd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBP biBXZWQsIDEzIEFwciAyMDIyIDE2OjAwOjE4ICswODAwLCBKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKPiA+ID4gPiA+Cj4gPiA+ID4gPiDlnKggMjAyMi80LzYg5LiK5Y2I MTE6NDMsIFh1YW4gWmh1byDlhpnpgZM6Cj4gPiA+ID4gPiA+IFRoaXMgcGF0Y2ggaW1wbGVtZW50 cyB0aGUgcmVzaXplIGZ1bmN0aW9uIG9mIHRoZSByeCwgdHggcXVldWVzLgo+ID4gPiA+ID4gPiBC YXNlZCBvbiB0aGlzIGZ1bmN0aW9uLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIHJpbmcg bnVtIG9mIHRoZQo+ID4gPiA+ID4gPiBxdWV1ZS4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhl cmUgbWF5IGJlIGFuIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIHJlc2l6ZSBwcm9jZXNzLCB0aGUgcmVz aXplIG1heQo+ID4gPiA+ID4gPiBmYWlsLCBvciB0aGUgdnEgY2FuIG5vIGxvbmdlciBiZSB1c2Vk LiBFaXRoZXIgd2F5LCB3ZSBtdXN0IGV4ZWN1dGUKPiA+ID4gPiA+ID4gbmFwaV9lbmFibGUoKS4g QmVjYXVzZSBuYXBpX2Rpc2FibGUgaXMgc2ltaWxhciB0byBhIGxvY2ssIG5hcGlfZW5hYmxlCj4g PiA+ID4gPiA+IG11c3QgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgbmFwaV9kaXNhYmxlLgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBYdWFuIFpodW8gPHh1YW56aHVvQGxp bnV4LmFsaWJhYmEuY29tPgo+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gICBkcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiA+ID4gPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKykKPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBi L2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiA+ID4gPiBpbmRleCBiOGJmMDA1MjUxNzcu LmJhNjg1OWYzMDVmNyAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlv X25ldC5jCj4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiA+ ID4gPiBAQCAtMjUxLDYgKzI1MSw5IEBAIHN0cnVjdCBwYWRkZWRfdm5ldF9oZHIgewo+ID4gPiA+ ID4gPiAgICAgY2hhciBwYWRkaW5nWzRdOwo+ID4gPiA+ID4gPiAgIH07Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICtzdGF0aWMgdm9pZCB2aXJ0bmV0X3NxX2ZyZWVfdW51c2VkX2J1ZihzdHJ1Y3Qg dmlydHF1ZXVlICp2cSwgdm9pZCAqYnVmKTsKPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIHZpcnRu ZXRfcnFfZnJlZV91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB2b2lkICpidWYpOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgc3RhdGljIGJvb2wgaXNfeGRwX2ZyYW1lKHZvaWQg KnB0cikKPiA+ID4gPiA+ID4gICB7Cj4gPiA+ID4gPiA+ICAgICByZXR1cm4gKHVuc2lnbmVkIGxv bmcpcHRyICYgVklSVElPX1hEUF9GTEFHOwo+ID4gPiA+ID4gPiBAQCAtMTM2OSw2ICsxMzcyLDE1 IEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRfbmFwaV9lbmFibGUoc3RydWN0IHZpcnRxdWV1ZSAqdnEs IHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKPiA+ID4gPiA+ID4gICB7Cj4gPiA+ID4gPiA+ICAg ICBuYXBpX2VuYWJsZShuYXBpKTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKyAgIC8qIENoZWNr IGlmIHZxIGlzIGluIHJlc2V0IHN0YXRlLiBUaGUgbm9ybWFsIHJlc2V0L3Jlc2l6ZSBwcm9jZXNz IHdpbGwKPiA+ID4gPiA+ID4gKyAgICAqIGJlIHByb3RlY3RlZCBieSBuYXBpLiBIb3dldmVyLCB0 aGUgcHJvdGVjdGlvbiBvZiBuYXBpIGlzIG9ubHkgZW5hYmxlZAo+ID4gPiA+ID4gPiArICAgICog ZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgcHJvdGVjdGlvbiBvZiBuYXBpIHdpbGwgZW5k IGFmdGVyIHRoZQo+ID4gPiA+ID4gPiArICAgICogb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4gSWYg cmUtZW5hYmxlIGZhaWxzIGR1cmluZyB0aGUgcHJvY2VzcywgdnEKPiA+ID4gPiA+ID4gKyAgICAq IHdpbGwgcmVtYWluIHVuYXZhaWxhYmxlIHdpdGggcmVzZXQgc3RhdGUuCj4gPiA+ID4gPiA+ICsg ICAgKi8KPiA+ID4gPiA+ID4gKyAgIGlmICh2cS0+cmVzZXQpCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgIHJldHVybjsKPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSSBkb24ndCBnZXQgd2hl biBjb3VsZCB3ZSBoaXQgdGhpcyBjb25kaXRpb24uCj4gPiA+ID4KPiA+ID4gPgo+ID4gPiA+IElu IHBhdGNoIDIzLCB0aGUgY29kZSB0byBpbXBsZW1lbnQgcmUtZW5hYmxlIHZxIGlzIGFzIGZvbGxv d3M6Cj4gPiA+ID4KPiA+ID4gPiArc3RhdGljIGludCB2cF9tb2Rlcm5fZW5hYmxlX3Jlc2V0X3Zx KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qg dmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2cS0+dmRldik7Cj4gPiA+ ID4gKyAgICAgICBzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2ID0gJnZwX2Rl di0+bWRldjsKPiA+ID4gPiArICAgICAgIHN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8gKmluZm87 Cj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbmRleDsKPiA+ID4gPiArICAg ICAgIGludCBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKCF2cS0+cmVzZXQpCj4g PiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4gPiA+ID4gKwo+ID4gPiA+ICsg ICAgICAgaW5kZXggPSB2cS0+aW5kZXg7Cj4gPiA+ID4gKyAgICAgICBpbmZvID0gdnBfZGV2LT52 cXNbaW5kZXhdOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIC8qIGNoZWNrIHF1ZXVlIHJlc2V0 IHN0YXR1cyAqLwo+ID4gPiA+ICsgICAgICAgaWYgKHZwX21vZGVybl9nZXRfcXVldWVfcmVzZXQo bWRldiwgaW5kZXgpICE9IDEpCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7 Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgZXJyID0gdnBfYWN0aXZlX3ZxKHZxLCBpbmZvLT5t c2l4X3ZlY3Rvcik7Cj4gPiA+ID4gKyAgICAgICBpZiAoZXJyKQo+ID4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gZXJyOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICh2cS0+Y2FsbGJh Y2spIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnZwX2Rldi0+ bG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBsaXN0X2FkZCgmaW5mby0+bm9k ZSwgJnZwX2Rldi0+dmlydHF1ZXVlcyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsgICAgICAgfSBl bHNlIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmluZm8tPm5vZGUp Owo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHZwX21vZGVybl9z ZXRfcXVldWVfZW5hYmxlKCZ2cF9kZXYtPm1kZXYsIGluZGV4LCB0cnVlKTsKPiA+ID4gPiArCj4g PiA+ID4gKyAgICAgICBpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycyAmJiBpbmZvLT5tc2l4X3Zl Y3RvciAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikKPiA+ID4gPiArICAgICAgICAgICAgICAgZW5h YmxlX2lycShwY2lfaXJxX3ZlY3Rvcih2cF9kZXYtPnBjaV9kZXYsIGluZm8tPm1zaXhfdmVjdG9y KSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgdnEtPnJlc2V0ID0gZmFsc2U7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPgo+ID4gPiA+Cj4g PiA+ID4gVGhlcmUgYXJlIHRocmVlIHNpdHVhdGlvbnMgd2hlcmUgYW4gZXJyb3Igd2lsbCBiZSBy ZXR1cm5lZC4gVGhlc2UgYXJlIHRoZQo+ID4gPiA+IHNpdHVhdGlvbnMgSSB3YW50IHRvIGhhbmRs ZS4KPiA+ID4KPiA+ID4gUmlnaHQsIGJ1dCBpdCBsb29rcyBoYXJtbGVzcyBpZiB3ZSBqdXN0IHNj aGVkdWxlIHRoZSBOQVBJIHdpdGhvdXQgdGhlIGNoZWNrLgo+ID4KPiA+IFllcy4KPiA+Cj4gPiA+ ID4KPiA+ID4gPiBCdXQgSSdtIHJldGhpbmtpbmcgdGhlIHF1ZXN0aW9uLCBhbmQgSSBmZWVsIGxp a2UgeW91J3JlIHJpZ2h0LCBhbHRob3VnaCB0aGUKPiA+ID4gPiBoYXJkd2FyZSBzZXR1cCBtYXkg ZmFpbC4gV2UgY2FuIG5vIGxvbmdlciBzeW5jIHdpdGggdGhlIGhhcmR3YXJlLiBCdXQgdXNpbmcg aXQKPiA+ID4gPiBhcyBhIG5vcm1hbCB2cSBkb2Vzbid0IGhhdmUgYW55IHByb2JsZW1zLgo+ID4g Pgo+ID4gPiBOb3RlIHRoYXQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgYnVnZ3kobWFsaWNvdXMp IGRldmljZSB3b24ndCBjcmFzaAo+ID4gPiB0aGUgY29kZXMgYnkgY2hhbmdpbmcgdGhlIHF1ZXVl X3Jlc2V0IHZhbHVlIGF0IGl0cyB3aWxsLgo+ID4KPiA+IEkgd2lsbCBrZWVwIGFuIGV5ZSBvbiB0 aGlzIHNpdHVhdGlvbi4KPiA+Cj4gPiA+Cj4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgICAvKiBJZiBhbGwgYnVmZmVycyB3ZXJlIGZpbGxlZCBi eSBvdGhlciBzaWRlIGJlZm9yZSB3ZSBuYXBpX2VuYWJsZWQsIHdlCj4gPiA+ID4gPiA+ICAgICAg KiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5n IHBhY2tldHMgbm93Lgo+ID4gPiA+ID4gPiAgICAgICogQ2FsbCBsb2NhbF9iaF9lbmFibGUgYWZ0 ZXIgdG8gdHJpZ2dlciBzb2Z0SVJRIHByb2Nlc3NpbmcuCj4gPiA+ID4gPiA+IEBAIC0xNDEzLDYg KzE0MjUsMTUgQEAgc3RhdGljIHZvaWQgcmVmaWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICBzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEgPSAm dmktPnJxW2ldOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICAgICAgICAgICBuYXBpX2Rpc2Fi bGUoJnJxLT5uYXBpKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgICAgICAvKiBD aGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4gU2VlIG1vcmUgaW4KPiA+ID4gPiA+ID4gKyAg ICAgICAgICAgICogdmlydG5ldF9uYXBpX2VuYWJsZSgpCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAqLwo+ID4gPiA+ID4gPiArICAgICAgICAgICBpZiAocnEtPnZxLT5yZXNldCkgewo+ID4gPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgIHZpcnRuZXRfbmFwaV9lbmFibGUocnEtPnZxLCAmcnEt Pm5hcGkpOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiA+ ID4gPiArICAgICAgICAgICB9Cj4gPiA+ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+IENhbiB3ZSBk byBzb21ldGhpbmcgc2ltaWxhciBpbiB2aXJ0bmV0X2Nsb3NlKCkgYnkgY2FuY2VsaW5nIHRoZSB3 b3JrPwo+ID4gPiA+Cj4gPiA+ID4gSSB0aGluayB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbmNlbCB0 aGUgd29yayBoZXJlLCBiZWNhdXNlIG5hcGlfZGlzYWJsZSB3aWxsIHdhaXQKPiA+ID4gPiBmb3Ig dGhlIG5hcGlfZW5hYmxlIG9mIHRoZSByZXNpemUuIFNvIGlmIHRoZSByZS1lbmFibGUgZmFpbGVk IHZxIGlzIHVzZWQgYXMgYSBub3JtYWwKPiA+ID4gPiB2cSwgdGhpcyBsb2dpYyBjYW4gYmUgcmVt b3ZlZC4KPiA+ID4KPiA+ID4gQWN0dWFsbHkgSSBtZWFudCB0aGUgcGFydCBvZiB2aXJ0bmV0X3J4 X3Jlc2l6ZSgpLgo+ID4gPgo+ID4gPiBJZiB3ZSBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIHRoZSBy ZWZpbGwgd29yaywgaXQgbWlnaHQgZW5hYmxlIE5BUEkgdW5leHBlY3RlZGx5Pwo+ID4KPiA+IEkg ZG9uJ3QgdGhpbmsgdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBlbmNvdW50ZXJlZCwgYmVjYXVzZSBu YXBpX2Rpc2FibGUgaXMKPiA+IG11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gdGhlcmUgd2lsbCBiZSBu byB1bmV4cGVjdGVkIG5hcGkgZW5hYmxlLgo+ID4KPiA+IElzIHRoZXJlIHNvbWV0aGluZyBJIG1p c3VuZGVyc3Rvb2Q/Cj4KPiBTbyBpbiB2aXJ0bmV0X3J4X3Jlc2l6ZSgpIHdlIGRvOgo+Cj4gbmFw aV9kaXNhYmxlKCkKPiAuLi4KPiByZXNpemUoKQo+IC4uLgo+IG5hcGlfZW5hbGJlKCkKPgo+IEhv dyBjYW4gd2UgZ3VhcmFudGVlIHRoYXQgdGhlIHdvcmsgaXMgbm90IHJ1biBhZnRlciB0aGUgbmFw aV9kaXNhYmxlKCk/CgoKSSB0aGluayB5b3UncmUgdGFsa2luZyBhYm91dCBhIHNpdHVhdGlvbiBs aWtlIHRoaXM6Cgp2aXJ0bmV0X3J4X3Jlc2l6ZSAgICAgICAgICByZWZpbGwgd29yawotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbmFw aV9kaXNhYmxlKCkKIC4uLiAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kaXNhYmxlKCkKIHJl c2l6ZSgpICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAg ICBuYXBpX2VuYWJsZSgpCiAuLi4KIG5hcGlfZW5hbGJlKCkKCgpCdXQgaW4gZmFjdDoKCnZpcnRu ZXRfcnhfcmVzaXplICAgICAgICAgIHJlZmlsbCB3b3JrCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBuYXBpX2Rpc2FibGUoKQogLi4u ICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2Rpc2FibGUoKSA8LS0tLVswXQogcmVzaXplKCkg ICAgICAgICAgICAgICAgICAgICAgIHwKIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 CiBuYXBpX2VuYWxiZSgpICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAg ICAgICBuYXBpX2Rpc2FibGUoKSA8LS0tLSBbMV0gaGVyZSBzdWNjZXNzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hcGlfZW5hYmxlKCkKCkJlY2F1c2UgdmlydG5ldF9yeF9yZXNpemUoKSBo YXMgYWxyZWFkeSBleGVjdXRlZCBuYXBpX2Rpc2FibGUoKSwgbmFwaV9kaXNhbGJlKCkKb2YgWzBd IHdpbGwgd2FpdCB1bnRpbCBbMV0gdG8gY29tcGxldGUuCgpJJ20gbm90IHN1cmUgaWYgbXkgdW5k ZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKVGhhbmtzLgoKPgo+IFRoYW5rcwo+Cj4gPgo+ID4gVGhh bmtzLgo+ID4KPiA+ID4KPiA+ID4gVGhhbmtzCj4gPiA+Cj4gPiA+ID4KPiA+ID4gPgo+ID4gPiA+ ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgc3RpbGxf ZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2aSwgcnEsIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gPiAg ICAgICAgICAgICB2aXJ0bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gQEAgLTE1MjMsNiArMTU0NCwxMCBAQCBzdGF0aWMgdm9pZCB2aXJ0 bmV0X3BvbGxfY2xlYW50eChzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEpCj4gPiA+ID4gPiA+ICAg ICBpZiAoIXNxLT5uYXBpLndlaWdodCB8fCBpc194ZHBfcmF3X2J1ZmZlcl9xdWV1ZSh2aSwgaW5k ZXgpKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICsgICAvKiBDaGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4gU2VlIG1vcmUgaW4gdmly dG5ldF9uYXBpX2VuYWJsZSgpICovCj4gPiA+ID4gPiA+ICsgICBpZiAoc3EtPnZxLT5yZXNldCkK PiA+ID4gPiA+ID4gKyAgICAgICAgICAgcmV0dXJuOwo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ ID4gPiBXZSd2ZSBkaXNhYmxlZCBUWCBuYXBpLCBhbnkgY2hhbmNlIHdlIGNhbiBzdGlsbCBoaXQg dGhpcz8KPiA+ID4gPgo+ID4gPiA+IFNhbWUgYXMgYWJvdmUuCj4gPiA+ID4KPiA+ID4gPiA+Cj4g PiA+ID4gPgo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgICBpZiAoX19uZXRpZl90eF90cnls b2NrKHR4cSkpIHsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgZG8gewo+ID4gPiA+ID4gPiAgICAg ICAgICAgICAgICAgICAgIHZpcnRxdWV1ZV9kaXNhYmxlX2NiKHNxLT52cSk7Cj4gPiA+ID4gPiA+ IEBAIC0xNzY5LDYgKzE3OTQsNjIgQEAgc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3htaXQoc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKPiA+ID4gPiA+ID4gICAg IHJldHVybiBORVRERVZfVFhfT0s7Cj4gPiA+ID4gPiA+ICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiArc3RhdGljIGludCB2aXJ0bmV0X3J4X3Jlc2l6ZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2 aSwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWNlaXZlX3F1 ZXVlICpycSwgdTMyIHJpbmdfbnVtKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArICAgaW50 IGVycjsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgbmFwaV9kaXNhYmxlKCZycS0+bmFw aSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIGVyciA9IHZpcnRxdWV1ZV9yZXNpemUo cnEtPnZxLCByaW5nX251bSwgdmlydG5ldF9ycV9mcmVlX3VudXNlZF9idWYpOwo+ID4gPiA+ID4g PiArICAgaWYgKGVycikKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgZ290byBlcnI7Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gKyAgIGlmICghdHJ5X2ZpbGxfcmVjdih2aSwgcnEsIEdGUF9LRVJO RUwpKQo+ID4gPiA+ID4gPiArICAgICAgICAgICBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnZpLT5y ZWZpbGwsIDApOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25hcGlfZW5h YmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4gPiA+ID4gKyAgIHJldHVybiAwOwo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICtlcnI6Cj4gPiA+ID4gPiA+ICsgICBuZXRkZXZfZXJyKHZpLT5k ZXYsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICJyZXNldCByeCByZXNldCB2cSBmYWlsOiBy eCBxdWV1ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg IHJxIC0gdmktPnJxLCBlcnIpOwo+ID4gPiA+ID4gPiArICAgdmlydG5ldF9uYXBpX2VuYWJsZShy cS0+dnEsICZycS0+bmFwaSk7Cj4gPiA+ID4gPiA+ICsgICByZXR1cm4gZXJyOwo+ID4gPiA+ID4g PiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHZpcnRuZXRfdHhfcmVz aXplKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNlbmRfcXVldWUgKnNxLCB1MzIgcmluZ19udW0pCj4gPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiA+ICsgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Cj4gPiA+ID4gPiA+ ICsgICBpbnQgZXJyLCBxaW5kZXg7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIHFpbmRl eCA9IHNxIC0gdmktPnNxOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25h cGlfdHhfZGlzYWJsZSgmc3EtPm5hcGkpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB0 eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiA+ID4gPiA+ICsg ICBfX25ldGlmX3R4X2xvY2tfYmgodHhxKTsKPiA+ID4gPiA+ID4gKyAgIG5ldGlmX3N0b3Bfc3Vi cXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gPiA+ID4gKyAgIF9fbmV0aWZfdHhfdW5sb2Nr X2JoKHR4cSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIGVyciA9IHZpcnRxdWV1ZV9y ZXNpemUoc3EtPnZxLCByaW5nX251bSwgdmlydG5ldF9zcV9mcmVlX3VudXNlZF9idWYpOwo+ID4g PiA+ID4gPiArICAgaWYgKGVycikKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgZ290byBlcnI7Cj4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIG5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHZpLT5kZXYs IHFpbmRleCk7Cj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25hcGlfdHhfZW5hYmxlKHZpLCBzcS0+ dnEsICZzcS0+bmFwaSk7Cj4gPiA+ID4gPiA+ICsgICByZXR1cm4gMDsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArZXJyOgo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBJIGd1ZXNzIHdl IGNhbiBzdGlsbCBzdGFydCB0aGUgcXVldWUgaW4gdGhpcyBjYXNlPyAoU2luY2Ugd2UgZG9uJ3QK PiA+ID4gPiA+IGNoYW5nZSB0aGUgcXVldWUgaWYgcmVzaXplIGZhaWxzKS4KPiA+ID4gPgo+ID4g PiA+IFllcywgeW91IGFyZSByaWdodC4KPiA+ID4gPgo+ID4gPiA+IFRoYW5rcy4KPiA+ID4gPgo+ ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsgICBuZXRkZXZfZXJyKHZpLT5kZXYsCj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgICJyZXNldCB0eCByZXNldCB2cSBmYWlsOiB0eCBxdWV1 ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgIHNxIC0g dmktPnNxLCBlcnIpOwo+ID4gPiA+ID4gPiArICAgdmlydG5ldF9uYXBpX3R4X2VuYWJsZSh2aSwg c3EtPnZxLCAmc3EtPm5hcGkpOwo+ID4gPiA+ID4gPiArICAgcmV0dXJuIGVycjsKPiA+ID4gPiA+ ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAgIC8qCj4gPiA+ID4gPiA+ICAgICogU2Vu ZCBjb21tYW5kIHZpYSB0aGUgY29udHJvbCB2aXJ0cXVldWUgYW5kIGNoZWNrIHN0YXR1cy4gIENv bW1hbmRzCj4gPiA+ID4gPiA+ICAgICogc3VwcG9ydGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBhcyBp bmRpY2F0ZWQgYnkgZmVhdHVyZSBiaXRzLCBzaG91bGQKPiA+ID4gPiA+Cj4gPiA+ID4KPiA+ID4K PiA+Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmly dHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5k YXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3ZpcnR1YWxpemF0aW9u From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-56.freemail.mail.aliyun.com ([115.124.30.56]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nfIDu-009Sfb-1j for linux-um@lists.infradead.org; Fri, 15 Apr 2022 09:26:41 +0000 Message-ID: <1650014226.0312726-1-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize Date: Fri, 15 Apr 2022 17:17:06 +0800 From: Xuan Zhuo References: <20220406034346.74409-1-xuanzhuo@linux.alibaba.com> <20220406034346.74409-32-xuanzhuo@linux.alibaba.com> <122008a6-1e79-14d3-1478-59f96464afc9@redhat.com> <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> <1649989126.5433838-1-xuanzhuo@linux.alibaba.com> In-Reply-To: List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Jason Wang Cc: Jeff Dike , Richard Weinberger , Anton Ivanov , "Michael S. Tsirkin" , "David S. Miller" , Jakub Kicinski , Hans de Goede , Mark Gross , Vadim Pasternak , Bjorn Andersson , Mathieu Poirier , Cornelia Huck , Halil Pasic , Heiko Carstens , Vasily Gorbik , Christian Borntraeger , Alexander Gordeev , Sven Schnelle , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Johannes Berg , Vincent Whitchurch , linux-um@lists.infradead.org, netdev , platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm , "open list:XDP (eXpress Data Path)" , virtualization T24gRnJpLCAxNSBBcHIgMjAyMiAxMzo1Mzo1NCArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdA cmVkaGF0LmNvbT4gd3JvdGU6Cj4gT24gRnJpLCBBcHIgMTUsIDIwMjIgYXQgMTA6MjMgQU0gWHVh biBaaHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24gVGh1 LCAxNCBBcHIgMjAyMiAxNzozMDowMiArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0 LmNvbT4gd3JvdGU6Cj4gPiA+IE9uIFdlZCwgQXByIDEzLCAyMDIyIGF0IDQ6NDcgUE0gWHVhbiBa aHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4gd3JvdGU6Cj4gPiA+ID4KPiA+ID4gPiBP biBXZWQsIDEzIEFwciAyMDIyIDE2OjAwOjE4ICswODAwLCBKYXNvbiBXYW5nIDxqYXNvd2FuZ0By ZWRoYXQuY29tPiB3cm90ZToKPiA+ID4gPiA+Cj4gPiA+ID4gPiDlnKggMjAyMi80LzYg5LiK5Y2I MTE6NDMsIFh1YW4gWmh1byDlhpnpgZM6Cj4gPiA+ID4gPiA+IFRoaXMgcGF0Y2ggaW1wbGVtZW50 cyB0aGUgcmVzaXplIGZ1bmN0aW9uIG9mIHRoZSByeCwgdHggcXVldWVzLgo+ID4gPiA+ID4gPiBC YXNlZCBvbiB0aGlzIGZ1bmN0aW9uLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhlIHJpbmcg bnVtIG9mIHRoZQo+ID4gPiA+ID4gPiBxdWV1ZS4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gVGhl cmUgbWF5IGJlIGFuIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIHJlc2l6ZSBwcm9jZXNzLCB0aGUgcmVz aXplIG1heQo+ID4gPiA+ID4gPiBmYWlsLCBvciB0aGUgdnEgY2FuIG5vIGxvbmdlciBiZSB1c2Vk LiBFaXRoZXIgd2F5LCB3ZSBtdXN0IGV4ZWN1dGUKPiA+ID4gPiA+ID4gbmFwaV9lbmFibGUoKS4g QmVjYXVzZSBuYXBpX2Rpc2FibGUgaXMgc2ltaWxhciB0byBhIGxvY2ssIG5hcGlfZW5hYmxlCj4g PiA+ID4gPiA+IG11c3QgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgbmFwaV9kaXNhYmxlLgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBYdWFuIFpodW8gPHh1YW56aHVvQGxp bnV4LmFsaWJhYmEuY29tPgo+ID4gPiA+ID4gPiAtLS0KPiA+ID4gPiA+ID4gICBkcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gPiA+ID4gPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKykKPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBi L2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiA+ID4gPiBpbmRleCBiOGJmMDA1MjUxNzcu LmJhNjg1OWYzMDVmNyAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlv X25ldC5jCj4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiA+ ID4gPiBAQCAtMjUxLDYgKzI1MSw5IEBAIHN0cnVjdCBwYWRkZWRfdm5ldF9oZHIgewo+ID4gPiA+ ID4gPiAgICAgY2hhciBwYWRkaW5nWzRdOwo+ID4gPiA+ID4gPiAgIH07Cj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+ICtzdGF0aWMgdm9pZCB2aXJ0bmV0X3NxX2ZyZWVfdW51c2VkX2J1ZihzdHJ1Y3Qg dmlydHF1ZXVlICp2cSwgdm9pZCAqYnVmKTsKPiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIHZpcnRu ZXRfcnFfZnJlZV91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUgKnZxLCB2b2lkICpidWYpOwo+ ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgc3RhdGljIGJvb2wgaXNfeGRwX2ZyYW1lKHZvaWQg KnB0cikKPiA+ID4gPiA+ID4gICB7Cj4gPiA+ID4gPiA+ICAgICByZXR1cm4gKHVuc2lnbmVkIGxv bmcpcHRyICYgVklSVElPX1hEUF9GTEFHOwo+ID4gPiA+ID4gPiBAQCAtMTM2OSw2ICsxMzcyLDE1 IEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRfbmFwaV9lbmFibGUoc3RydWN0IHZpcnRxdWV1ZSAqdnEs IHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKPiA+ID4gPiA+ID4gICB7Cj4gPiA+ID4gPiA+ICAg ICBuYXBpX2VuYWJsZShuYXBpKTsKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gKyAgIC8qIENoZWNr IGlmIHZxIGlzIGluIHJlc2V0IHN0YXRlLiBUaGUgbm9ybWFsIHJlc2V0L3Jlc2l6ZSBwcm9jZXNz IHdpbGwKPiA+ID4gPiA+ID4gKyAgICAqIGJlIHByb3RlY3RlZCBieSBuYXBpLiBIb3dldmVyLCB0 aGUgcHJvdGVjdGlvbiBvZiBuYXBpIGlzIG9ubHkgZW5hYmxlZAo+ID4gPiA+ID4gPiArICAgICog ZHVyaW5nIHRoZSBvcGVyYXRpb24sIGFuZCB0aGUgcHJvdGVjdGlvbiBvZiBuYXBpIHdpbGwgZW5k IGFmdGVyIHRoZQo+ID4gPiA+ID4gPiArICAgICogb3BlcmF0aW9uIGlzIGNvbXBsZXRlZC4gSWYg cmUtZW5hYmxlIGZhaWxzIGR1cmluZyB0aGUgcHJvY2VzcywgdnEKPiA+ID4gPiA+ID4gKyAgICAq IHdpbGwgcmVtYWluIHVuYXZhaWxhYmxlIHdpdGggcmVzZXQgc3RhdGUuCj4gPiA+ID4gPiA+ICsg ICAgKi8KPiA+ID4gPiA+ID4gKyAgIGlmICh2cS0+cmVzZXQpCj4gPiA+ID4gPiA+ICsgICAgICAg ICAgIHJldHVybjsKPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSSBkb24ndCBnZXQgd2hl biBjb3VsZCB3ZSBoaXQgdGhpcyBjb25kaXRpb24uCj4gPiA+ID4KPiA+ID4gPgo+ID4gPiA+IElu IHBhdGNoIDIzLCB0aGUgY29kZSB0byBpbXBsZW1lbnQgcmUtZW5hYmxlIHZxIGlzIGFzIGZvbGxv d3M6Cj4gPiA+ID4KPiA+ID4gPiArc3RhdGljIGludCB2cF9tb2Rlcm5fZW5hYmxlX3Jlc2V0X3Zx KHN0cnVjdCB2aXJ0cXVldWUgKnZxKQo+ID4gPiA+ICt7Cj4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qg dmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHRvX3ZwX2RldmljZSh2cS0+dmRldik7Cj4gPiA+ ID4gKyAgICAgICBzdHJ1Y3QgdmlydGlvX3BjaV9tb2Rlcm5fZGV2aWNlICptZGV2ID0gJnZwX2Rl di0+bWRldjsKPiA+ID4gPiArICAgICAgIHN0cnVjdCB2aXJ0aW9fcGNpX3ZxX2luZm8gKmluZm87 Cj4gPiA+ID4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbmRleDsKPiA+ID4gPiArICAg ICAgIGludCBlcnI7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgaWYgKCF2cS0+cmVzZXQpCj4g PiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4gPiA+ID4gKwo+ID4gPiA+ICsg ICAgICAgaW5kZXggPSB2cS0+aW5kZXg7Cj4gPiA+ID4gKyAgICAgICBpbmZvID0gdnBfZGV2LT52 cXNbaW5kZXhdOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIC8qIGNoZWNrIHF1ZXVlIHJlc2V0 IHN0YXR1cyAqLwo+ID4gPiA+ICsgICAgICAgaWYgKHZwX21vZGVybl9nZXRfcXVldWVfcmVzZXQo bWRldiwgaW5kZXgpICE9IDEpCj4gPiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7 Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgZXJyID0gdnBfYWN0aXZlX3ZxKHZxLCBpbmZvLT5t c2l4X3ZlY3Rvcik7Cj4gPiA+ID4gKyAgICAgICBpZiAoZXJyKQo+ID4gPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gZXJyOwo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIGlmICh2cS0+Y2FsbGJh Y2spIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnZwX2Rldi0+ bG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsgICAgICAgICAgICAgICBsaXN0X2FkZCgmaW5mby0+bm9k ZSwgJnZwX2Rldi0+dmlydHF1ZXVlcyk7Cj4gPiA+ID4gKyAgICAgICAgICAgICAgIHNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnZwX2Rldi0+bG9jaywgZmxhZ3MpOwo+ID4gPiA+ICsgICAgICAgfSBl bHNlIHsKPiA+ID4gPiArICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmluZm8tPm5vZGUp Owo+ID4gPiA+ICsgICAgICAgfQo+ID4gPiA+ICsKPiA+ID4gPiArICAgICAgIHZwX21vZGVybl9z ZXRfcXVldWVfZW5hYmxlKCZ2cF9kZXYtPm1kZXYsIGluZGV4LCB0cnVlKTsKPiA+ID4gPiArCj4g PiA+ID4gKyAgICAgICBpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycyAmJiBpbmZvLT5tc2l4X3Zl Y3RvciAhPSBWSVJUSU9fTVNJX05PX1ZFQ1RPUikKPiA+ID4gPiArICAgICAgICAgICAgICAgZW5h YmxlX2lycShwY2lfaXJxX3ZlY3Rvcih2cF9kZXYtPnBjaV9kZXYsIGluZm8tPm1zaXhfdmVjdG9y KSk7Cj4gPiA+ID4gKwo+ID4gPiA+ICsgICAgICAgdnEtPnJlc2V0ID0gZmFsc2U7Cj4gPiA+ID4g Kwo+ID4gPiA+ICsgICAgICAgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPgo+ID4gPiA+Cj4g PiA+ID4gVGhlcmUgYXJlIHRocmVlIHNpdHVhdGlvbnMgd2hlcmUgYW4gZXJyb3Igd2lsbCBiZSBy ZXR1cm5lZC4gVGhlc2UgYXJlIHRoZQo+ID4gPiA+IHNpdHVhdGlvbnMgSSB3YW50IHRvIGhhbmRs ZS4KPiA+ID4KPiA+ID4gUmlnaHQsIGJ1dCBpdCBsb29rcyBoYXJtbGVzcyBpZiB3ZSBqdXN0IHNj aGVkdWxlIHRoZSBOQVBJIHdpdGhvdXQgdGhlIGNoZWNrLgo+ID4KPiA+IFllcy4KPiA+Cj4gPiA+ ID4KPiA+ID4gPiBCdXQgSSdtIHJldGhpbmtpbmcgdGhlIHF1ZXN0aW9uLCBhbmQgSSBmZWVsIGxp a2UgeW91J3JlIHJpZ2h0LCBhbHRob3VnaCB0aGUKPiA+ID4gPiBoYXJkd2FyZSBzZXR1cCBtYXkg ZmFpbC4gV2UgY2FuIG5vIGxvbmdlciBzeW5jIHdpdGggdGhlIGhhcmR3YXJlLiBCdXQgdXNpbmcg aXQKPiA+ID4gPiBhcyBhIG5vcm1hbCB2cSBkb2Vzbid0IGhhdmUgYW55IHByb2JsZW1zLgo+ID4g Pgo+ID4gPiBOb3RlIHRoYXQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgYnVnZ3kobWFsaWNvdXMp IGRldmljZSB3b24ndCBjcmFzaAo+ID4gPiB0aGUgY29kZXMgYnkgY2hhbmdpbmcgdGhlIHF1ZXVl X3Jlc2V0IHZhbHVlIGF0IGl0cyB3aWxsLgo+ID4KPiA+IEkgd2lsbCBrZWVwIGFuIGV5ZSBvbiB0 aGlzIHNpdHVhdGlvbi4KPiA+Cj4gPiA+Cj4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPgo+ID4g PiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgICAvKiBJZiBhbGwgYnVmZmVycyB3ZXJlIGZpbGxlZCBi eSBvdGhlciBzaWRlIGJlZm9yZSB3ZSBuYXBpX2VuYWJsZWQsIHdlCj4gPiA+ID4gPiA+ICAgICAg KiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5n IHBhY2tldHMgbm93Lgo+ID4gPiA+ID4gPiAgICAgICogQ2FsbCBsb2NhbF9iaF9lbmFibGUgYWZ0 ZXIgdG8gdHJpZ2dlciBzb2Z0SVJRIHByb2Nlc3NpbmcuCj4gPiA+ID4gPiA+IEBAIC0xNDEzLDYg KzE0MjUsMTUgQEAgc3RhdGljIHZvaWQgcmVmaWxsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICBzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEgPSAm dmktPnJxW2ldOwo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiAgICAgICAgICAgICBuYXBpX2Rpc2Fi bGUoJnJxLT5uYXBpKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgICAgICAgICAvKiBD aGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4gU2VlIG1vcmUgaW4KPiA+ID4gPiA+ID4gKyAg ICAgICAgICAgICogdmlydG5ldF9uYXBpX2VuYWJsZSgpCj4gPiA+ID4gPiA+ICsgICAgICAgICAg ICAqLwo+ID4gPiA+ID4gPiArICAgICAgICAgICBpZiAocnEtPnZxLT5yZXNldCkgewo+ID4gPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgIHZpcnRuZXRfbmFwaV9lbmFibGUocnEtPnZxLCAmcnEt Pm5hcGkpOwo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ID4gPiA+ ID4gPiArICAgICAgICAgICB9Cj4gPiA+ID4gPgo+ID4gPiA+ID4KPiA+ID4gPiA+IENhbiB3ZSBk byBzb21ldGhpbmcgc2ltaWxhciBpbiB2aXJ0bmV0X2Nsb3NlKCkgYnkgY2FuY2VsaW5nIHRoZSB3 b3JrPwo+ID4gPiA+Cj4gPiA+ID4gSSB0aGluayB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbmNlbCB0 aGUgd29yayBoZXJlLCBiZWNhdXNlIG5hcGlfZGlzYWJsZSB3aWxsIHdhaXQKPiA+ID4gPiBmb3Ig dGhlIG5hcGlfZW5hYmxlIG9mIHRoZSByZXNpemUuIFNvIGlmIHRoZSByZS1lbmFibGUgZmFpbGVk IHZxIGlzIHVzZWQgYXMgYSBub3JtYWwKPiA+ID4gPiB2cSwgdGhpcyBsb2dpYyBjYW4gYmUgcmVt b3ZlZC4KPiA+ID4KPiA+ID4gQWN0dWFsbHkgSSBtZWFudCB0aGUgcGFydCBvZiB2aXJ0bmV0X3J4 X3Jlc2l6ZSgpLgo+ID4gPgo+ID4gPiBJZiB3ZSBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIHRoZSBy ZWZpbGwgd29yaywgaXQgbWlnaHQgZW5hYmxlIE5BUEkgdW5leHBlY3RlZGx5Pwo+ID4KPiA+IEkg ZG9uJ3QgdGhpbmsgdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBlbmNvdW50ZXJlZCwgYmVjYXVzZSBu YXBpX2Rpc2FibGUgaXMKPiA+IG11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gdGhlcmUgd2lsbCBiZSBu byB1bmV4cGVjdGVkIG5hcGkgZW5hYmxlLgo+ID4KPiA+IElzIHRoZXJlIHNvbWV0aGluZyBJIG1p c3VuZGVyc3Rvb2Q/Cj4KPiBTbyBpbiB2aXJ0bmV0X3J4X3Jlc2l6ZSgpIHdlIGRvOgo+Cj4gbmFw aV9kaXNhYmxlKCkKPiAuLi4KPiByZXNpemUoKQo+IC4uLgo+IG5hcGlfZW5hbGJlKCkKPgo+IEhv dyBjYW4gd2UgZ3VhcmFudGVlIHRoYXQgdGhlIHdvcmsgaXMgbm90IHJ1biBhZnRlciB0aGUgbmFw aV9kaXNhYmxlKCk/CgoKSSB0aGluayB5b3UncmUgdGFsa2luZyBhYm91dCBhIHNpdHVhdGlvbiBs aWtlIHRoaXM6Cgp2aXJ0bmV0X3J4X3Jlc2l6ZSAgICAgICAgICByZWZpbGwgd29yawotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbmFw aV9kaXNhYmxlKCkKIC4uLiAgICAgICAgICAgICAgICAgICAgICAgbmFwaV9kaXNhYmxlKCkKIHJl c2l6ZSgpICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAg ICBuYXBpX2VuYWJsZSgpCiAuLi4KIG5hcGlfZW5hbGJlKCkKCgpCdXQgaW4gZmFjdDoKCnZpcnRu ZXRfcnhfcmVzaXplICAgICAgICAgIHJlZmlsbCB3b3JrCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBuYXBpX2Rpc2FibGUoKQogLi4u ICAgICAgICAgICAgICAgICAgICAgICBuYXBpX2Rpc2FibGUoKSA8LS0tLVswXQogcmVzaXplKCkg ICAgICAgICAgICAgICAgICAgICAgIHwKIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 CiBuYXBpX2VuYWxiZSgpICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAg ICAgICBuYXBpX2Rpc2FibGUoKSA8LS0tLSBbMV0gaGVyZSBzdWNjZXNzCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hcGlfZW5hYmxlKCkKCkJlY2F1c2UgdmlydG5ldF9yeF9yZXNpemUoKSBo YXMgYWxyZWFkeSBleGVjdXRlZCBuYXBpX2Rpc2FibGUoKSwgbmFwaV9kaXNhbGJlKCkKb2YgWzBd IHdpbGwgd2FpdCB1bnRpbCBbMV0gdG8gY29tcGxldGUuCgpJJ20gbm90IHN1cmUgaWYgbXkgdW5k ZXJzdGFuZGluZyBpcyBjb3JyZWN0LgoKVGhhbmtzLgoKPgo+IFRoYW5rcwo+Cj4gPgo+ID4gVGhh bmtzLgo+ID4KPiA+ID4KPiA+ID4gVGhhbmtzCj4gPiA+Cj4gPiA+ID4KPiA+ID4gPgo+ID4gPiA+ ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgc3RpbGxf ZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2aSwgcnEsIEdGUF9LRVJORUwpOwo+ID4gPiA+ID4gPiAg ICAgICAgICAgICB2aXJ0bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4g PiA+ID4KPiA+ID4gPiA+ID4gQEAgLTE1MjMsNiArMTU0NCwxMCBAQCBzdGF0aWMgdm9pZCB2aXJ0 bmV0X3BvbGxfY2xlYW50eChzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEpCj4gPiA+ID4gPiA+ICAg ICBpZiAoIXNxLT5uYXBpLndlaWdodCB8fCBpc194ZHBfcmF3X2J1ZmZlcl9xdWV1ZSh2aSwgaW5k ZXgpKQo+ID4gPiA+ID4gPiAgICAgICAgICAgICByZXR1cm47Cj4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ICsgICAvKiBDaGVjayBpZiB2cSBpcyBpbiByZXNldCBzdGF0ZS4gU2VlIG1vcmUgaW4gdmly dG5ldF9uYXBpX2VuYWJsZSgpICovCj4gPiA+ID4gPiA+ICsgICBpZiAoc3EtPnZxLT5yZXNldCkK PiA+ID4gPiA+ID4gKyAgICAgICAgICAgcmV0dXJuOwo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ ID4gPiBXZSd2ZSBkaXNhYmxlZCBUWCBuYXBpLCBhbnkgY2hhbmNlIHdlIGNhbiBzdGlsbCBoaXQg dGhpcz8KPiA+ID4gPgo+ID4gPiA+IFNhbWUgYXMgYWJvdmUuCj4gPiA+ID4KPiA+ID4gPiA+Cj4g PiA+ID4gPgo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgICBpZiAoX19uZXRpZl90eF90cnls b2NrKHR4cSkpIHsKPiA+ID4gPiA+ID4gICAgICAgICAgICAgZG8gewo+ID4gPiA+ID4gPiAgICAg ICAgICAgICAgICAgICAgIHZpcnRxdWV1ZV9kaXNhYmxlX2NiKHNxLT52cSk7Cj4gPiA+ID4gPiA+ IEBAIC0xNzY5LDYgKzE3OTQsNjIgQEAgc3RhdGljIG5ldGRldl90eF90IHN0YXJ0X3htaXQoc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKPiA+ID4gPiA+ID4gICAg IHJldHVybiBORVRERVZfVFhfT0s7Cj4gPiA+ID4gPiA+ICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ ID4gPiArc3RhdGljIGludCB2aXJ0bmV0X3J4X3Jlc2l6ZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2 aSwKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWNlaXZlX3F1 ZXVlICpycSwgdTMyIHJpbmdfbnVtKQo+ID4gPiA+ID4gPiArewo+ID4gPiA+ID4gPiArICAgaW50 IGVycjsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArICAgbmFwaV9kaXNhYmxlKCZycS0+bmFw aSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIGVyciA9IHZpcnRxdWV1ZV9yZXNpemUo cnEtPnZxLCByaW5nX251bSwgdmlydG5ldF9ycV9mcmVlX3VudXNlZF9idWYpOwo+ID4gPiA+ID4g PiArICAgaWYgKGVycikKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgZ290byBlcnI7Cj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gKyAgIGlmICghdHJ5X2ZpbGxfcmVjdih2aSwgcnEsIEdGUF9LRVJO RUwpKQo+ID4gPiA+ID4gPiArICAgICAgICAgICBzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnZpLT5y ZWZpbGwsIDApOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25hcGlfZW5h YmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4gPiA+ID4gKyAgIHJldHVybiAwOwo+ID4gPiA+ ID4gPiArCj4gPiA+ID4gPiA+ICtlcnI6Cj4gPiA+ID4gPiA+ICsgICBuZXRkZXZfZXJyKHZpLT5k ZXYsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICJyZXNldCByeCByZXNldCB2cSBmYWlsOiBy eCBxdWV1ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAg IHJxIC0gdmktPnJxLCBlcnIpOwo+ID4gPiA+ID4gPiArICAgdmlydG5ldF9uYXBpX2VuYWJsZShy cS0+dnEsICZycS0+bmFwaSk7Cj4gPiA+ID4gPiA+ICsgICByZXR1cm4gZXJyOwo+ID4gPiA+ID4g PiArfQo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICtzdGF0aWMgaW50IHZpcnRuZXRfdHhfcmVz aXplKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHNlbmRfcXVldWUgKnNxLCB1MzIgcmluZ19udW0pCj4gPiA+ID4gPiA+ ICt7Cj4gPiA+ID4gPiA+ICsgICBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Cj4gPiA+ID4gPiA+ ICsgICBpbnQgZXJyLCBxaW5kZXg7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIHFpbmRl eCA9IHNxIC0gdmktPnNxOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25h cGlfdHhfZGlzYWJsZSgmc3EtPm5hcGkpOwo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICsgICB0 eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiA+ID4gPiA+ICsg ICBfX25ldGlmX3R4X2xvY2tfYmgodHhxKTsKPiA+ID4gPiA+ID4gKyAgIG5ldGlmX3N0b3Bfc3Vi cXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gPiA+ID4gKyAgIF9fbmV0aWZfdHhfdW5sb2Nr X2JoKHR4cSk7Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIGVyciA9IHZpcnRxdWV1ZV9y ZXNpemUoc3EtPnZxLCByaW5nX251bSwgdmlydG5ldF9zcV9mcmVlX3VudXNlZF9idWYpOwo+ID4g PiA+ID4gPiArICAgaWYgKGVycikKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgZ290byBlcnI7Cj4g PiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAgIG5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHZpLT5kZXYs IHFpbmRleCk7Cj4gPiA+ID4gPiA+ICsgICB2aXJ0bmV0X25hcGlfdHhfZW5hYmxlKHZpLCBzcS0+ dnEsICZzcS0+bmFwaSk7Cj4gPiA+ID4gPiA+ICsgICByZXR1cm4gMDsKPiA+ID4gPiA+ID4gKwo+ ID4gPiA+ID4gPiArZXJyOgo+ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBJIGd1ZXNzIHdl IGNhbiBzdGlsbCBzdGFydCB0aGUgcXVldWUgaW4gdGhpcyBjYXNlPyAoU2luY2Ugd2UgZG9uJ3QK PiA+ID4gPiA+IGNoYW5nZSB0aGUgcXVldWUgaWYgcmVzaXplIGZhaWxzKS4KPiA+ID4gPgo+ID4g PiA+IFllcywgeW91IGFyZSByaWdodC4KPiA+ID4gPgo+ID4gPiA+IFRoYW5rcy4KPiA+ID4gPgo+ ID4gPiA+ID4KPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ICsgICBuZXRkZXZfZXJyKHZpLT5kZXYsCj4g PiA+ID4gPiA+ICsgICAgICAgICAgICAgICJyZXNldCB0eCByZXNldCB2cSBmYWlsOiB0eCBxdWV1 ZSBpbmRleDogJXRkIGVycjogJWRcbiIsCj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgIHNxIC0g dmktPnNxLCBlcnIpOwo+ID4gPiA+ID4gPiArICAgdmlydG5ldF9uYXBpX3R4X2VuYWJsZSh2aSwg c3EtPnZxLCAmc3EtPm5hcGkpOwo+ID4gPiA+ID4gPiArICAgcmV0dXJuIGVycjsKPiA+ID4gPiA+ ID4gK30KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiAgIC8qCj4gPiA+ID4gPiA+ICAgICogU2Vu ZCBjb21tYW5kIHZpYSB0aGUgY29udHJvbCB2aXJ0cXVldWUgYW5kIGNoZWNrIHN0YXR1cy4gIENv bW1hbmRzCj4gPiA+ID4gPiA+ICAgICogc3VwcG9ydGVkIGJ5IHRoZSBoeXBlcnZpc29yLCBhcyBp bmRpY2F0ZWQgYnkgZmVhdHVyZSBiaXRzLCBzaG91bGQKPiA+ID4gPiA+Cj4gPiA+ID4KPiA+ID4K PiA+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LXVtIG1haWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K