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 E7043C433EF for ; Wed, 9 Mar 2022 10:20:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229546AbiCIKVl (ORCPT ); Wed, 9 Mar 2022 05:21:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229492AbiCIKVk (ORCPT ); Wed, 9 Mar 2022 05:21:40 -0500 Received: from out30-131.freemail.mail.aliyun.com (out30-131.freemail.mail.aliyun.com [115.124.30.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03F881688FD; Wed, 9 Mar 2022 02:20:40 -0800 (PST) X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R161e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e01424;MF=xuanzhuo@linux.alibaba.com;NM=1;PH=DS;RN=33;SR=0;TI=SMTPD_---0V6jFsoZ_1646821234; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0V6jFsoZ_1646821234) by smtp.aliyun-inc.com(127.0.0.1); Wed, 09 Mar 2022 18:20:35 +0800 Message-ID: <1646821007.3534708-15-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 24/26] virtio_net: support rx/tx queue reset Date: Wed, 9 Mar 2022 18:16:47 +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, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-25-xuanzhuo@linux.alibaba.com> <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> In-Reply-To: <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-remoteproc@vger.kernel.org Sorry, the last reply email was too fast, with some Chinese mixed in. So se= nd another email. On Wed, 9 Mar 2022 17:14:34 +0800, Jason Wang wrote: > > =E5=9C=A8 2022/3/8 =E4=B8=8B=E5=8D=888:35, Xuan Zhuo =E5=86=99=E9=81=93: > > This patch implements the reset function of the rx, tx queues. > > > > Based on this function, it is possible to modify the ring num of the > > queue. And quickly recycle the buffer in the queue. > > > > In the process of the queue disable, in theory, as long as virtio > > supports queue reset, there will be no exceptions. > > > > However, in the process of the queue enable, there may be exceptions du= e to > > memory allocation. In this case, vq is not available, but we still have > > to execute 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 | 107 +++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 107 insertions(+) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 409a8e180918..ffff323dcef0 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -251,6 +251,11 @@ struct padded_vnet_hdr { > > char padding[4]; > > }; > > > > +static void virtnet_sq_free_unused_bufs(struct virtnet_info *vi, > > + struct send_queue *sq); > > +static void virtnet_rq_free_unused_bufs(struct virtnet_info *vi, > > + struct receive_queue *rq); > > + > > static bool is_xdp_frame(void *ptr) > > { > > return (unsigned long)ptr & VIRTIO_XDP_FLAG; > > @@ -1369,6 +1374,9 @@ static void virtnet_napi_enable(struct virtqueue = *vq, struct napi_struct *napi) > > { > > napi_enable(napi); > > > > + if (vq->reset) > > + return; > > + > > > Let's WARN_ONCE() here? > > > > /* If all buffers were filled by other side before we napi_enabled, = we > > * won't get another interrupt, so process any outstanding packets n= ow. > > * Call local_bh_enable after to trigger softIRQ processing. > > @@ -1413,6 +1421,10 @@ static void refill_work(struct work_struct *work) > > struct receive_queue *rq =3D &vi->rq[i]; > > > > napi_disable(&rq->napi); > > + if (rq->vq->reset) { > > + virtnet_napi_enable(rq->vq, &rq->napi); > > + continue; > > + } > > > This seems racy and it's a hint that we need sync with the refill work > during reset like what we did in virtnet_close(): > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 /* Make sure refill_work does= n't re-enable napi! */ > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 cancel_delayed_work_sync(&vi-= >refill); > > > > still_empty =3D !try_fill_recv(vi, rq, GFP_KERNEL); > > virtnet_napi_enable(rq->vq, &rq->napi); > > > > @@ -1523,6 +1535,9 @@ static void virtnet_poll_cleantx(struct receive_q= ueue *rq) > > if (!sq->napi.weight || is_xdp_raw_buffer_queue(vi, index)) > > return; > > > > + if (sq->vq->reset) > > + return; > > > It looks to me we'd better either WARN or just remove this. Since it > looks like a workaround for the un-synchronized NAPI somehow. During the reset process, both ring reset and enable may fail. In the case = of failure, vq will be unavailable. All three cases prevent this situation. Even if it fails, napi still needs to be enabled. This is to prevent napi_disable from being stuck when the network card is closed. So the first and second cases above are that napi is enabled, but vq has not been reset successfully or is still in reset. And the third case is to deal with tx in reset, and rx is in working state,= then here will access the vq of sq. > > > > + > > if (__netif_tx_trylock(txq)) { > > do { > > virtqueue_disable_cb(sq->vq); > > @@ -1769,6 +1784,98 @@ static netdev_tx_t start_xmit(struct sk_buff *sk= b, struct net_device *dev) > > return NETDEV_TX_OK; > > } > > > > +static int virtnet_rx_vq_reset(struct virtnet_info *vi, > > + struct receive_queue *rq, u32 ring_num) > > > It's better to rename this as virtnet_rx_resize(). I don't think resize is good enough, because I think resize is an effect of reset. Inside af_xdp, we will call it just to reset to free the buffer with= out resize with ring_num =3D=3D 0. So virtnet_rx_reset() might be better. > > > > +{ > > + int err; > > + > > + /* stop napi */ > > + napi_disable(&rq->napi); > > + > > > Here, as discussed above, we need synchronize with the refill work. > > > > + /* reset the queue */ > > + err =3D virtio_reset_vq(rq->vq); > > + if (err) > > + goto err; > > > Btw, most comment of this function seems useless since code already > explain themselves. > OK, I will remove these. > > > + > > + /* free bufs */ > > + virtnet_rq_free_unused_bufs(vi, rq); > > + > > + /* reset vring. */ > > + err =3D virtqueue_reset_vring(rq->vq, ring_num); > > + if (err) > > + goto err; > > + > > + /* enable reset queue */ > > + err =3D virtio_enable_resetq(rq->vq); > > + if (err) > > + goto err; > > + > > + /* fill recv */ > > + if (!try_fill_recv(vi, rq, GFP_KERNEL)) > > + schedule_delayed_work(&vi->refill, 0); > > + > > + /* enable napi */ > > + virtnet_napi_enable(rq->vq, &rq->napi); > > + return 0; > > + > > +err: > > + netdev_err(vi->dev, > > + "reset rx reset vq fail: rx queue index: %ld err: %d\n", > > + rq - vi->rq, err); > > + virtnet_napi_enable(rq->vq, &rq->napi); > > + return err; > > +} > > + > > +static int virtnet_tx_vq_reset(struct virtnet_info *vi, > > + struct send_queue *sq, u32 ring_num) > > +{ > > > It looks to me it's better to rename this as "virtnet_rx_resize()" > > > > + struct netdev_queue *txq; > > + int err, qindex; > > + > > + qindex =3D sq - vi->sq; > > + > > + txq =3D netdev_get_tx_queue(vi->dev, qindex); > > + __netif_tx_lock_bh(txq); > > + > > + /* stop tx queue and napi */ > > + netif_stop_subqueue(vi->dev, qindex); > > + virtnet_napi_tx_disable(&sq->napi); > > > There's no need to hold tx lock for napi disable. The main purpose of tx lock is to wait for other xmit calls to end. And set netif_stop_subqueue() Thanks. > > Thanks > > > > + > > + __netif_tx_unlock_bh(txq); > > + > > + /* reset the queue */ > > + err =3D virtio_reset_vq(sq->vq); > > + if (err) { > > + netif_start_subqueue(vi->dev, qindex); > > + goto err; > > + } > > + > > + /* free bufs */ > > + virtnet_sq_free_unused_bufs(vi, sq); > > + > > + /* reset vring. */ > > + err =3D virtqueue_reset_vring(sq->vq, ring_num); > > + if (err) > > + goto err; > > + > > + /* enable reset queue */ > > + err =3D virtio_enable_resetq(sq->vq); > > + if (err) > > + goto err; > > + > > + /* start tx queue and napi */ > > + netif_start_subqueue(vi->dev, qindex); > > + virtnet_napi_tx_enable(vi, sq->vq, &sq->napi); > > + return 0; > > + > > +err: > > + netdev_err(vi->dev, > > + "reset tx reset vq fail: tx queue index: %ld 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 smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 09DB2C4321E for ; Wed, 9 Mar 2022 10:20:47 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id AEB376109A; Wed, 9 Mar 2022 10:20:46 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id cqgUK5X4ZrWD; Wed, 9 Mar 2022 10:20:45 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 27406610AE; Wed, 9 Mar 2022 10:20:45 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id EFA79C001D; Wed, 9 Mar 2022 10:20:44 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2D963C000B for ; Wed, 9 Mar 2022 10:20:44 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 209C440159 for ; Wed, 9 Mar 2022 10:20:44 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id m9VjimB7q7Wh for ; Wed, 9 Mar 2022 10:20:42 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from out199-14.us.a.mail.aliyun.com (out199-14.us.a.mail.aliyun.com [47.90.199.14]) by smtp2.osuosl.org (Postfix) with ESMTPS id 2B64C4002B for ; Wed, 9 Mar 2022 10:20:41 +0000 (UTC) X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R161e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=e01e01424; MF=xuanzhuo@linux.alibaba.com; NM=1; PH=DS; RN=33; SR=0; TI=SMTPD_---0V6jFsoZ_1646821234; Received: from localhost(mailfrom:xuanzhuo@linux.alibaba.com fp:SMTPD_---0V6jFsoZ_1646821234) by smtp.aliyun-inc.com(127.0.0.1); Wed, 09 Mar 2022 18:20:35 +0800 Message-ID: <1646821007.3534708-15-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 24/26] virtio_net: support rx/tx queue reset Date: Wed, 9 Mar 2022 18:16:47 +0800 From: Xuan Zhuo To: Jason Wang References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-25-xuanzhuo@linux.alibaba.com> <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> In-Reply-To: <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> 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@lists.linux-foundation.org, Heiko Carstens , Jesper Dangaard Brouer , Vasily Gorbik , Jeff Dike , linux-um@lists.infradead.org, Mark Gross , Hans de Goede , kvm@vger.kernel.org, platform-driver-x86@vger.kernel.org, Mathieu Poirier , netdev@vger.kernel.org, Cornelia Huck , Sven Schnelle , bpf@vger.kernel.org, "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" U29ycnksIHRoZSBsYXN0IHJlcGx5IGVtYWlsIHdhcyB0b28gZmFzdCwgd2l0aCBzb21lIENoaW5l c2UgbWl4ZWQgaW4uIFNvIHNlbmQKYW5vdGhlciBlbWFpbC4KCk9uIFdlZCwgOSBNYXIgMjAyMiAx NzoxNDozNCArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4gd3JvdGU6Cj4K PiDlnKggMjAyMi8zLzgg5LiL5Y2IODozNSwgWHVhbiBaaHVvIOWGmemBkzoKPiA+IFRoaXMgcGF0 Y2ggaW1wbGVtZW50cyB0aGUgcmVzZXQgZnVuY3Rpb24gb2YgdGhlIHJ4LCB0eCBxdWV1ZXMuCj4g Pgo+ID4gQmFzZWQgb24gdGhpcyBmdW5jdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRo ZSByaW5nIG51bSBvZiB0aGUKPiA+IHF1ZXVlLiBBbmQgcXVpY2tseSByZWN5Y2xlIHRoZSBidWZm ZXIgaW4gdGhlIHF1ZXVlLgo+ID4KPiA+IEluIHRoZSBwcm9jZXNzIG9mIHRoZSBxdWV1ZSBkaXNh YmxlLCBpbiB0aGVvcnksIGFzIGxvbmcgYXMgdmlydGlvCj4gPiBzdXBwb3J0cyBxdWV1ZSByZXNl dCwgdGhlcmUgd2lsbCBiZSBubyBleGNlcHRpb25zLgo+ID4KPiA+IEhvd2V2ZXIsIGluIHRoZSBw cm9jZXNzIG9mIHRoZSBxdWV1ZSBlbmFibGUsIHRoZXJlIG1heSBiZSBleGNlcHRpb25zIGR1ZSB0 bwo+ID4gbWVtb3J5IGFsbG9jYXRpb24uICBJbiB0aGlzIGNhc2UsIHZxIGlzIG5vdCBhdmFpbGFi bGUsIGJ1dCB3ZSBzdGlsbCBoYXZlCj4gPiB0byBleGVjdXRlIG5hcGlfZW5hYmxlKCkuIEJlY2F1 c2UgbmFwaV9kaXNhYmxlIGlzIHNpbWlsYXIgdG8gYSBsb2NrLAo+ID4gbmFwaV9lbmFibGUgbXVz dCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBuYXBpX2Rpc2FibGUuCj4gPgo+ID4gU2lnbmVkLW9m Zi1ieTogWHVhbiBaaHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4KPiA+IC0tLQo+ID4g ICBkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCAxMDcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiAgIDEgZmlsZSBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKQo+ ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMKPiA+IGluZGV4IDQwOWE4ZTE4MDkxOC4uZmZmZjMyM2RjZWYwIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiArKysgYi9kcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMKPiA+IEBAIC0yNTEsNiArMjUxLDExIEBAIHN0cnVjdCBwYWRkZWRfdm5l dF9oZHIgewo+ID4gICAJY2hhciBwYWRkaW5nWzRdOwo+ID4gICB9Owo+ID4KPiA+ICtzdGF0aWMg dm9pZCB2aXJ0bmV0X3NxX2ZyZWVfdW51c2VkX2J1ZnMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmks Cj4gPiArCQkJCQlzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EpOwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRu ZXRfcnFfZnJlZV91bnVzZWRfYnVmcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwKPiA+ICsJCQkJ CXN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSk7Cj4gPiArCj4gPiAgIHN0YXRpYyBib29sIGlzX3hk cF9mcmFtZSh2b2lkICpwdHIpCj4gPiAgIHsKPiA+ICAgCXJldHVybiAodW5zaWduZWQgbG9uZylw dHIgJiBWSVJUSU9fWERQX0ZMQUc7Cj4gPiBAQCAtMTM2OSw2ICsxMzc0LDkgQEAgc3RhdGljIHZv aWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgc3RydWN0IG5hcGlf c3RydWN0ICpuYXBpKQo+ID4gICB7Cj4gPiAgIAluYXBpX2VuYWJsZShuYXBpKTsKPiA+Cj4gPiAr CWlmICh2cS0+cmVzZXQpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4KPgo+IExldCdzIFdBUk5fT05D RSgpIGhlcmU/Cj4KPgo+ID4gICAJLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3Ro ZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQo+ID4gICAJICogd29uJ3QgZ2V0IGFu b3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzIG5vdy4K PiA+ICAgCSAqIENhbGwgbG9jYWxfYmhfZW5hYmxlIGFmdGVyIHRvIHRyaWdnZXIgc29mdElSUSBw cm9jZXNzaW5nLgo+ID4gQEAgLTE0MTMsNiArMTQyMSwxMCBAQCBzdGF0aWMgdm9pZCByZWZpbGxf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiAgIAkJc3RydWN0IHJlY2VpdmVfcXVl dWUgKnJxID0gJnZpLT5ycVtpXTsKPiA+Cj4gPiAgIAkJbmFwaV9kaXNhYmxlKCZycS0+bmFwaSk7 Cj4gPiArCQlpZiAocnEtPnZxLT5yZXNldCkgewo+ID4gKwkJCXZpcnRuZXRfbmFwaV9lbmFibGUo cnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+Cj4KPiBUaGlz IHNlZW1zIHJhY3kgYW5kIGl0J3MgYSBoaW50IHRoYXQgd2UgbmVlZCBzeW5jIHdpdGggdGhlIHJl ZmlsbCB3b3JrCj4gZHVyaW5nIHJlc2V0IGxpa2Ugd2hhdCB3ZSBkaWQgaW4gdmlydG5ldF9jbG9z ZSgpOgo+Cj4gIMKgwqDCoMKgwqDCoMKgIC8qIE1ha2Ugc3VyZSByZWZpbGxfd29yayBkb2Vzbid0 IHJlLWVuYWJsZSBuYXBpISAqLwo+ICDCoMKgwqDCoMKgwqDCoCBjYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJnZpLT5yZWZpbGwpOwo+Cj4KPiA+ICAgCQlzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9y ZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCk7Cj4gPiAgIAkJdmlydG5ldF9uYXBpX2VuYWJsZShycS0+ dnEsICZycS0+bmFwaSk7Cj4gPgo+ID4gQEAgLTE1MjMsNiArMTUzNSw5IEBAIHN0YXRpYyB2b2lk IHZpcnRuZXRfcG9sbF9jbGVhbnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ICAgCWlm ICghc3EtPm5hcGkud2VpZ2h0IHx8IGlzX3hkcF9yYXdfYnVmZmVyX3F1ZXVlKHZpLCBpbmRleCkp Cj4gPiAgIAkJcmV0dXJuOwo+ID4KPiA+ICsJaWYgKHNxLT52cS0+cmVzZXQpCj4gPiArCQlyZXR1 cm47Cj4KPgo+IEl0IGxvb2tzIHRvIG1lIHdlJ2QgYmV0dGVyIGVpdGhlciBXQVJOIG9yIGp1c3Qg cmVtb3ZlIHRoaXMuIFNpbmNlIGl0Cj4gbG9va3MgbGlrZSBhIHdvcmthcm91bmQgZm9yIHRoZSB1 bi1zeW5jaHJvbml6ZWQgTkFQSSBzb21laG93LgoKRHVyaW5nIHRoZSByZXNldCBwcm9jZXNzLCBi b3RoIHJpbmcgcmVzZXQgYW5kIGVuYWJsZSBtYXkgZmFpbC4gSW4gdGhlIGNhc2Ugb2YKZmFpbHVy ZSwgdnEgd2lsbCBiZSB1bmF2YWlsYWJsZS4gQWxsIHRocmVlIGNhc2VzIHByZXZlbnQgdGhpcyBz aXR1YXRpb24uCgpFdmVuIGlmIGl0IGZhaWxzLCBuYXBpIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJs ZWQuIFRoaXMgaXMgdG8gcHJldmVudApuYXBpX2Rpc2FibGUgZnJvbSBiZWluZyBzdHVjayB3aGVu IHRoZSBuZXR3b3JrIGNhcmQgaXMgY2xvc2VkLgoKClNvIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNh c2VzIGFib3ZlIGFyZSB0aGF0IG5hcGkgaXMgZW5hYmxlZCwgYnV0IHZxIGhhcyBub3QKYmVlbiBy ZXNldCBzdWNjZXNzZnVsbHkgb3IgaXMgc3RpbGwgaW4gcmVzZXQuCgpBbmQgdGhlIHRoaXJkIGNh c2UgaXMgdG8gZGVhbCB3aXRoIHR4IGluIHJlc2V0LCBhbmQgcnggaXMgaW4gd29ya2luZyBzdGF0 ZSwgdGhlbgpoZXJlIHdpbGwgYWNjZXNzIHRoZSB2cSBvZiBzcS4KCj4KPgo+ID4gKwo+ID4gICAJ aWYgKF9fbmV0aWZfdHhfdHJ5bG9jayh0eHEpKSB7Cj4gPiAgIAkJZG8gewo+ID4gICAJCQl2aXJ0 cXVldWVfZGlzYWJsZV9jYihzcS0+dnEpOwo+ID4gQEAgLTE3NjksNiArMTc4NCw5OCBAQCBzdGF0 aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQo+ID4gICAJcmV0dXJuIE5FVERFVl9UWF9PSzsKPiA+ICAgfQo+ID4KPiA+ ICtzdGF0aWMgaW50IHZpcnRuZXRfcnhfdnFfcmVzZXQoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmks Cj4gPiArCQkJICAgICAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwgdTMyIHJpbmdfbnVtKQo+ Cj4KPiBJdCdzIGJldHRlciB0byByZW5hbWUgdGhpcyBhcyB2aXJ0bmV0X3J4X3Jlc2l6ZSgpLgoK SSBkb24ndCB0aGluayByZXNpemUgaXMgZ29vZCBlbm91Z2gsIGJlY2F1c2UgSSB0aGluayByZXNp emUgaXMgYW4gZWZmZWN0IG9mCnJlc2V0LiBJbnNpZGUgYWZfeGRwLCB3ZSB3aWxsIGNhbGwgaXQg anVzdCB0byByZXNldCB0byBmcmVlIHRoZSBidWZmZXIgd2l0aG91dApyZXNpemUgd2l0aCByaW5n X251bSA9PSAwLgoKU28gdmlydG5ldF9yeF9yZXNldCgpIG1pZ2h0IGJlIGJldHRlci4KCgo+Cj4K PiA+ICt7Cj4gPiArCWludCBlcnI7Cj4gPiArCj4gPiArCS8qIHN0b3AgbmFwaSAqLwo+ID4gKwlu YXBpX2Rpc2FibGUoJnJxLT5uYXBpKTsKPiA+ICsKPgo+Cj4gSGVyZSwgYXMgZGlzY3Vzc2VkIGFi b3ZlLCB3ZSBuZWVkIHN5bmNocm9uaXplIHdpdGggdGhlIHJlZmlsbCB3b3JrLgo+Cj4KPiA+ICsJ LyogcmVzZXQgdGhlIHF1ZXVlICovCj4gPiArCWVyciA9IHZpcnRpb19yZXNldF92cShycS0+dnEp Owo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJZ290byBlcnI7Cj4KPgo+IEJ0dywgbW9zdCBjb21tZW50 IG9mIHRoaXMgZnVuY3Rpb24gc2VlbXMgdXNlbGVzcyBzaW5jZSBjb2RlIGFscmVhZHkKPiBleHBs YWluIHRoZW1zZWx2ZXMuCj4KCk9LLCBJIHdpbGwgcmVtb3ZlIHRoZXNlLgoKPgo+ID4gKwo+ID4g KwkvKiBmcmVlIGJ1ZnMgKi8KPiA+ICsJdmlydG5ldF9ycV9mcmVlX3VudXNlZF9idWZzKHZpLCBy cSk7Cj4gPiArCj4gPiArCS8qIHJlc2V0IHZyaW5nLiAqLwo+ID4gKwllcnIgPSB2aXJ0cXVldWVf cmVzZXRfdnJpbmcocnEtPnZxLCByaW5nX251bSk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3Rv IGVycjsKPiA+ICsKPiA+ICsJLyogZW5hYmxlIHJlc2V0IHF1ZXVlICovCj4gPiArCWVyciA9IHZp cnRpb19lbmFibGVfcmVzZXRxKHJxLT52cSk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGVy cjsKPiA+ICsKPiA+ICsJLyogZmlsbCByZWN2ICovCj4gPiArCWlmICghdHJ5X2ZpbGxfcmVjdih2 aSwgcnEsIEdGUF9LRVJORUwpKQo+ID4gKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2aS0+cmVm aWxsLCAwKTsKPiA+ICsKPiA+ICsJLyogZW5hYmxlIG5hcGkgKi8KPiA+ICsJdmlydG5ldF9uYXBp X2VuYWJsZShycS0+dnEsICZycS0+bmFwaSk7Cj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK2Vy cjoKPiA+ICsJbmV0ZGV2X2Vycih2aS0+ZGV2LAo+ID4gKwkJICAgInJlc2V0IHJ4IHJlc2V0IHZx IGZhaWw6IHJ4IHF1ZXVlIGluZGV4OiAlbGQgZXJyOiAlZFxuIiwKPiA+ICsJCSAgIHJxIC0gdmkt PnJxLCBlcnIpOwo+ID4gKwl2aXJ0bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsK PiA+ICsJcmV0dXJuIGVycjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB2aXJ0bmV0X3R4 X3ZxX3Jlc2V0KHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qg c2VuZF9xdWV1ZSAqc3EsIHUzMiByaW5nX251bSkKPiA+ICt7Cj4KPgo+IEl0IGxvb2tzIHRvIG1l IGl0J3MgYmV0dGVyIHRvIHJlbmFtZSB0aGlzIGFzICJ2aXJ0bmV0X3J4X3Jlc2l6ZSgpIgo+Cj4K PiA+ICsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwo+ID4gKwlpbnQgZXJyLCBxaW5kZXg7Cj4g PiArCj4gPiArCXFpbmRleCA9IHNxIC0gdmktPnNxOwo+ID4gKwo+ID4gKwl0eHEgPSBuZXRkZXZf Z2V0X3R4X3F1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiArCV9fbmV0aWZfdHhfbG9ja19iaCh0 eHEpOwo+ID4gKwo+ID4gKwkvKiBzdG9wIHR4IHF1ZXVlIGFuZCBuYXBpICovCj4gPiArCW5ldGlm X3N0b3Bfc3VicXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ICsJdmlydG5ldF9uYXBpX3R4X2Rp c2FibGUoJnNxLT5uYXBpKTsKPgo+Cj4gVGhlcmUncyBubyBuZWVkIHRvIGhvbGQgdHggbG9jayBm b3IgbmFwaSBkaXNhYmxlLgoKVGhlIG1haW4gcHVycG9zZSBvZiB0eCBsb2NrIGlzIHRvIHdhaXQg Zm9yIG90aGVyIHhtaXQgY2FsbHMgdG8gZW5kLiBBbmQgc2V0Cm5ldGlmX3N0b3Bfc3VicXVldWUo KQoKVGhhbmtzLgoKPgo+IFRoYW5rcwo+Cj4KPiA+ICsKPiA+ICsJX19uZXRpZl90eF91bmxvY2tf YmgodHhxKTsKPiA+ICsKPiA+ICsJLyogcmVzZXQgdGhlIHF1ZXVlICovCj4gPiArCWVyciA9IHZp cnRpb19yZXNldF92cShzcS0+dnEpOwo+ID4gKwlpZiAoZXJyKSB7Cj4gPiArCQluZXRpZl9zdGFy dF9zdWJxdWV1ZSh2aS0+ZGV2LCBxaW5kZXgpOwo+ID4gKwkJZ290byBlcnI7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJLyogZnJlZSBidWZzICovCj4gPiArCXZpcnRuZXRfc3FfZnJlZV91bnVzZWRfYnVm cyh2aSwgc3EpOwo+ID4gKwo+ID4gKwkvKiByZXNldCB2cmluZy4gKi8KPiA+ICsJZXJyID0gdmly dHF1ZXVlX3Jlc2V0X3ZyaW5nKHNxLT52cSwgcmluZ19udW0pOwo+ID4gKwlpZiAoZXJyKQo+ID4g KwkJZ290byBlcnI7Cj4gPiArCj4gPiArCS8qIGVuYWJsZSByZXNldCBxdWV1ZSAqLwo+ID4gKwll cnIgPSB2aXJ0aW9fZW5hYmxlX3Jlc2V0cShzcS0+dnEpOwo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJ Z290byBlcnI7Cj4gPiArCj4gPiArCS8qIHN0YXJ0IHR4IHF1ZXVlIGFuZCBuYXBpICovCj4gPiAr CW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiArCXZpcnRuZXRfbmFw aV90eF9lbmFibGUodmksIHNxLT52cSwgJnNxLT5uYXBpKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr Cj4gPiArZXJyOgo+ID4gKwluZXRkZXZfZXJyKHZpLT5kZXYsCj4gPiArCQkgICAicmVzZXQgdHgg cmVzZXQgdnEgZmFpbDogdHggcXVldWUgaW5kZXg6ICVsZCBlcnI6ICVkXG4iLAo+ID4gKwkJICAg c3EgLSB2aS0+c3EsIGVycik7Cj4gPiArCXZpcnRuZXRfbmFwaV90eF9lbmFibGUodmksIHNxLT52 cSwgJnNxLT5uYXBpKTsKPiA+ICsJcmV0dXJuIGVycjsKPiA+ICt9Cj4gPiArCj4gPiAgIC8qCj4g PiAgICAqIFNlbmQgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgdmlydHF1ZXVlIGFuZCBjaGVjayBz dGF0dXMuICBDb21tYW5kcwo+ID4gICAgKiBzdXBwb3J0ZWQgYnkgdGhlIGh5cGVydmlzb3IsIGFz IGluZGljYXRlZCBieSBmZWF0dXJlIGJpdHMsIHNob3VsZAo+Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApW aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out30-45.freemail.mail.aliyun.com ([115.124.30.45]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nRtQv-0087o8-5G for linux-um@lists.infradead.org; Wed, 09 Mar 2022 10:20:43 +0000 Message-ID: <1646821007.3534708-15-xuanzhuo@linux.alibaba.com> Subject: Re: [PATCH v7 24/26] virtio_net: support rx/tx queue reset Date: Wed, 9 Mar 2022 18:16:47 +0800 From: Xuan Zhuo References: <20220308123518.33800-1-xuanzhuo@linux.alibaba.com> <20220308123518.33800-25-xuanzhuo@linux.alibaba.com> <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> In-Reply-To: <7ff78ff8-bdd0-bb5e-1cea-cf1126226feb@redhat.com> 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, platform-driver-x86@vger.kernel.org, linux-remoteproc@vger.kernel.org, linux-s390@vger.kernel.org, kvm@vger.kernel.org, bpf@vger.kernel.org, virtualization@lists.linux-foundation.org, netdev@vger.kernel.org U29ycnksIHRoZSBsYXN0IHJlcGx5IGVtYWlsIHdhcyB0b28gZmFzdCwgd2l0aCBzb21lIENoaW5l c2UgbWl4ZWQgaW4uIFNvIHNlbmQKYW5vdGhlciBlbWFpbC4KCk9uIFdlZCwgOSBNYXIgMjAyMiAx NzoxNDozNCArMDgwMCwgSmFzb24gV2FuZyA8amFzb3dhbmdAcmVkaGF0LmNvbT4gd3JvdGU6Cj4K PiDlnKggMjAyMi8zLzgg5LiL5Y2IODozNSwgWHVhbiBaaHVvIOWGmemBkzoKPiA+IFRoaXMgcGF0 Y2ggaW1wbGVtZW50cyB0aGUgcmVzZXQgZnVuY3Rpb24gb2YgdGhlIHJ4LCB0eCBxdWV1ZXMuCj4g Pgo+ID4gQmFzZWQgb24gdGhpcyBmdW5jdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gbW9kaWZ5IHRo ZSByaW5nIG51bSBvZiB0aGUKPiA+IHF1ZXVlLiBBbmQgcXVpY2tseSByZWN5Y2xlIHRoZSBidWZm ZXIgaW4gdGhlIHF1ZXVlLgo+ID4KPiA+IEluIHRoZSBwcm9jZXNzIG9mIHRoZSBxdWV1ZSBkaXNh YmxlLCBpbiB0aGVvcnksIGFzIGxvbmcgYXMgdmlydGlvCj4gPiBzdXBwb3J0cyBxdWV1ZSByZXNl dCwgdGhlcmUgd2lsbCBiZSBubyBleGNlcHRpb25zLgo+ID4KPiA+IEhvd2V2ZXIsIGluIHRoZSBw cm9jZXNzIG9mIHRoZSBxdWV1ZSBlbmFibGUsIHRoZXJlIG1heSBiZSBleGNlcHRpb25zIGR1ZSB0 bwo+ID4gbWVtb3J5IGFsbG9jYXRpb24uICBJbiB0aGlzIGNhc2UsIHZxIGlzIG5vdCBhdmFpbGFi bGUsIGJ1dCB3ZSBzdGlsbCBoYXZlCj4gPiB0byBleGVjdXRlIG5hcGlfZW5hYmxlKCkuIEJlY2F1 c2UgbmFwaV9kaXNhYmxlIGlzIHNpbWlsYXIgdG8gYSBsb2NrLAo+ID4gbmFwaV9lbmFibGUgbXVz dCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBuYXBpX2Rpc2FibGUuCj4gPgo+ID4gU2lnbmVkLW9m Zi1ieTogWHVhbiBaaHVvIDx4dWFuemh1b0BsaW51eC5hbGliYWJhLmNvbT4KPiA+IC0tLQo+ID4g ICBkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCAxMDcgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiAgIDEgZmlsZSBjaGFuZ2VkLCAxMDcgaW5zZXJ0aW9ucygrKQo+ ID4KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMKPiA+IGluZGV4IDQwOWE4ZTE4MDkxOC4uZmZmZjMyM2RjZWYwIDEwMDY0 NAo+ID4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gPiArKysgYi9kcml2ZXJzL25l dC92aXJ0aW9fbmV0LmMKPiA+IEBAIC0yNTEsNiArMjUxLDExIEBAIHN0cnVjdCBwYWRkZWRfdm5l dF9oZHIgewo+ID4gICAJY2hhciBwYWRkaW5nWzRdOwo+ID4gICB9Owo+ID4KPiA+ICtzdGF0aWMg dm9pZCB2aXJ0bmV0X3NxX2ZyZWVfdW51c2VkX2J1ZnMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmks Cj4gPiArCQkJCQlzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EpOwo+ID4gK3N0YXRpYyB2b2lkIHZpcnRu ZXRfcnFfZnJlZV91bnVzZWRfYnVmcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwKPiA+ICsJCQkJ CXN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSk7Cj4gPiArCj4gPiAgIHN0YXRpYyBib29sIGlzX3hk cF9mcmFtZSh2b2lkICpwdHIpCj4gPiAgIHsKPiA+ICAgCXJldHVybiAodW5zaWduZWQgbG9uZylw dHIgJiBWSVJUSU9fWERQX0ZMQUc7Cj4gPiBAQCAtMTM2OSw2ICsxMzc0LDkgQEAgc3RhdGljIHZv aWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgc3RydWN0IG5hcGlf c3RydWN0ICpuYXBpKQo+ID4gICB7Cj4gPiAgIAluYXBpX2VuYWJsZShuYXBpKTsKPiA+Cj4gPiAr CWlmICh2cS0+cmVzZXQpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4KPgo+IExldCdzIFdBUk5fT05D RSgpIGhlcmU/Cj4KPgo+ID4gICAJLyogSWYgYWxsIGJ1ZmZlcnMgd2VyZSBmaWxsZWQgYnkgb3Ro ZXIgc2lkZSBiZWZvcmUgd2UgbmFwaV9lbmFibGVkLCB3ZQo+ID4gICAJICogd29uJ3QgZ2V0IGFu b3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzIG5vdy4K PiA+ICAgCSAqIENhbGwgbG9jYWxfYmhfZW5hYmxlIGFmdGVyIHRvIHRyaWdnZXIgc29mdElSUSBw cm9jZXNzaW5nLgo+ID4gQEAgLTE0MTMsNiArMTQyMSwxMCBAQCBzdGF0aWMgdm9pZCByZWZpbGxf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiAgIAkJc3RydWN0IHJlY2VpdmVfcXVl dWUgKnJxID0gJnZpLT5ycVtpXTsKPiA+Cj4gPiAgIAkJbmFwaV9kaXNhYmxlKCZycS0+bmFwaSk7 Cj4gPiArCQlpZiAocnEtPnZxLT5yZXNldCkgewo+ID4gKwkJCXZpcnRuZXRfbmFwaV9lbmFibGUo cnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gKwkJCWNvbnRpbnVlOwo+ID4gKwkJfQo+Cj4KPiBUaGlz IHNlZW1zIHJhY3kgYW5kIGl0J3MgYSBoaW50IHRoYXQgd2UgbmVlZCBzeW5jIHdpdGggdGhlIHJl ZmlsbCB3b3JrCj4gZHVyaW5nIHJlc2V0IGxpa2Ugd2hhdCB3ZSBkaWQgaW4gdmlydG5ldF9jbG9z ZSgpOgo+Cj4gIMKgwqDCoMKgwqDCoMKgIC8qIE1ha2Ugc3VyZSByZWZpbGxfd29yayBkb2Vzbid0 IHJlLWVuYWJsZSBuYXBpISAqLwo+ICDCoMKgwqDCoMKgwqDCoCBjYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJnZpLT5yZWZpbGwpOwo+Cj4KPiA+ICAgCQlzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9y ZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCk7Cj4gPiAgIAkJdmlydG5ldF9uYXBpX2VuYWJsZShycS0+ dnEsICZycS0+bmFwaSk7Cj4gPgo+ID4gQEAgLTE1MjMsNiArMTUzNSw5IEBAIHN0YXRpYyB2b2lk IHZpcnRuZXRfcG9sbF9jbGVhbnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ICAgCWlm ICghc3EtPm5hcGkud2VpZ2h0IHx8IGlzX3hkcF9yYXdfYnVmZmVyX3F1ZXVlKHZpLCBpbmRleCkp Cj4gPiAgIAkJcmV0dXJuOwo+ID4KPiA+ICsJaWYgKHNxLT52cS0+cmVzZXQpCj4gPiArCQlyZXR1 cm47Cj4KPgo+IEl0IGxvb2tzIHRvIG1lIHdlJ2QgYmV0dGVyIGVpdGhlciBXQVJOIG9yIGp1c3Qg cmVtb3ZlIHRoaXMuIFNpbmNlIGl0Cj4gbG9va3MgbGlrZSBhIHdvcmthcm91bmQgZm9yIHRoZSB1 bi1zeW5jaHJvbml6ZWQgTkFQSSBzb21laG93LgoKRHVyaW5nIHRoZSByZXNldCBwcm9jZXNzLCBi b3RoIHJpbmcgcmVzZXQgYW5kIGVuYWJsZSBtYXkgZmFpbC4gSW4gdGhlIGNhc2Ugb2YKZmFpbHVy ZSwgdnEgd2lsbCBiZSB1bmF2YWlsYWJsZS4gQWxsIHRocmVlIGNhc2VzIHByZXZlbnQgdGhpcyBz aXR1YXRpb24uCgpFdmVuIGlmIGl0IGZhaWxzLCBuYXBpIHN0aWxsIG5lZWRzIHRvIGJlIGVuYWJs ZWQuIFRoaXMgaXMgdG8gcHJldmVudApuYXBpX2Rpc2FibGUgZnJvbSBiZWluZyBzdHVjayB3aGVu IHRoZSBuZXR3b3JrIGNhcmQgaXMgY2xvc2VkLgoKClNvIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNh c2VzIGFib3ZlIGFyZSB0aGF0IG5hcGkgaXMgZW5hYmxlZCwgYnV0IHZxIGhhcyBub3QKYmVlbiBy ZXNldCBzdWNjZXNzZnVsbHkgb3IgaXMgc3RpbGwgaW4gcmVzZXQuCgpBbmQgdGhlIHRoaXJkIGNh c2UgaXMgdG8gZGVhbCB3aXRoIHR4IGluIHJlc2V0LCBhbmQgcnggaXMgaW4gd29ya2luZyBzdGF0 ZSwgdGhlbgpoZXJlIHdpbGwgYWNjZXNzIHRoZSB2cSBvZiBzcS4KCj4KPgo+ID4gKwo+ID4gICAJ aWYgKF9fbmV0aWZfdHhfdHJ5bG9jayh0eHEpKSB7Cj4gPiAgIAkJZG8gewo+ID4gICAJCQl2aXJ0 cXVldWVfZGlzYWJsZV9jYihzcS0+dnEpOwo+ID4gQEAgLTE3NjksNiArMTc4NCw5OCBAQCBzdGF0 aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQo+ID4gICAJcmV0dXJuIE5FVERFVl9UWF9PSzsKPiA+ICAgfQo+ID4KPiA+ ICtzdGF0aWMgaW50IHZpcnRuZXRfcnhfdnFfcmVzZXQoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmks Cj4gPiArCQkJICAgICAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSwgdTMyIHJpbmdfbnVtKQo+ Cj4KPiBJdCdzIGJldHRlciB0byByZW5hbWUgdGhpcyBhcyB2aXJ0bmV0X3J4X3Jlc2l6ZSgpLgoK SSBkb24ndCB0aGluayByZXNpemUgaXMgZ29vZCBlbm91Z2gsIGJlY2F1c2UgSSB0aGluayByZXNp emUgaXMgYW4gZWZmZWN0IG9mCnJlc2V0LiBJbnNpZGUgYWZfeGRwLCB3ZSB3aWxsIGNhbGwgaXQg anVzdCB0byByZXNldCB0byBmcmVlIHRoZSBidWZmZXIgd2l0aG91dApyZXNpemUgd2l0aCByaW5n X251bSA9PSAwLgoKU28gdmlydG5ldF9yeF9yZXNldCgpIG1pZ2h0IGJlIGJldHRlci4KCgo+Cj4K PiA+ICt7Cj4gPiArCWludCBlcnI7Cj4gPiArCj4gPiArCS8qIHN0b3AgbmFwaSAqLwo+ID4gKwlu YXBpX2Rpc2FibGUoJnJxLT5uYXBpKTsKPiA+ICsKPgo+Cj4gSGVyZSwgYXMgZGlzY3Vzc2VkIGFi b3ZlLCB3ZSBuZWVkIHN5bmNocm9uaXplIHdpdGggdGhlIHJlZmlsbCB3b3JrLgo+Cj4KPiA+ICsJ LyogcmVzZXQgdGhlIHF1ZXVlICovCj4gPiArCWVyciA9IHZpcnRpb19yZXNldF92cShycS0+dnEp Owo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJZ290byBlcnI7Cj4KPgo+IEJ0dywgbW9zdCBjb21tZW50 IG9mIHRoaXMgZnVuY3Rpb24gc2VlbXMgdXNlbGVzcyBzaW5jZSBjb2RlIGFscmVhZHkKPiBleHBs YWluIHRoZW1zZWx2ZXMuCj4KCk9LLCBJIHdpbGwgcmVtb3ZlIHRoZXNlLgoKPgo+ID4gKwo+ID4g KwkvKiBmcmVlIGJ1ZnMgKi8KPiA+ICsJdmlydG5ldF9ycV9mcmVlX3VudXNlZF9idWZzKHZpLCBy cSk7Cj4gPiArCj4gPiArCS8qIHJlc2V0IHZyaW5nLiAqLwo+ID4gKwllcnIgPSB2aXJ0cXVldWVf cmVzZXRfdnJpbmcocnEtPnZxLCByaW5nX251bSk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3Rv IGVycjsKPiA+ICsKPiA+ICsJLyogZW5hYmxlIHJlc2V0IHF1ZXVlICovCj4gPiArCWVyciA9IHZp cnRpb19lbmFibGVfcmVzZXRxKHJxLT52cSk7Cj4gPiArCWlmIChlcnIpCj4gPiArCQlnb3RvIGVy cjsKPiA+ICsKPiA+ICsJLyogZmlsbCByZWN2ICovCj4gPiArCWlmICghdHJ5X2ZpbGxfcmVjdih2 aSwgcnEsIEdGUF9LRVJORUwpKQo+ID4gKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ2aS0+cmVm aWxsLCAwKTsKPiA+ICsKPiA+ICsJLyogZW5hYmxlIG5hcGkgKi8KPiA+ICsJdmlydG5ldF9uYXBp X2VuYWJsZShycS0+dnEsICZycS0+bmFwaSk7Cj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK2Vy cjoKPiA+ICsJbmV0ZGV2X2Vycih2aS0+ZGV2LAo+ID4gKwkJICAgInJlc2V0IHJ4IHJlc2V0IHZx IGZhaWw6IHJ4IHF1ZXVlIGluZGV4OiAlbGQgZXJyOiAlZFxuIiwKPiA+ICsJCSAgIHJxIC0gdmkt PnJxLCBlcnIpOwo+ID4gKwl2aXJ0bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsK PiA+ICsJcmV0dXJuIGVycjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCB2aXJ0bmV0X3R4 X3ZxX3Jlc2V0KHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qg c2VuZF9xdWV1ZSAqc3EsIHUzMiByaW5nX251bSkKPiA+ICt7Cj4KPgo+IEl0IGxvb2tzIHRvIG1l IGl0J3MgYmV0dGVyIHRvIHJlbmFtZSB0aGlzIGFzICJ2aXJ0bmV0X3J4X3Jlc2l6ZSgpIgo+Cj4K PiA+ICsJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwo+ID4gKwlpbnQgZXJyLCBxaW5kZXg7Cj4g PiArCj4gPiArCXFpbmRleCA9IHNxIC0gdmktPnNxOwo+ID4gKwo+ID4gKwl0eHEgPSBuZXRkZXZf Z2V0X3R4X3F1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiArCV9fbmV0aWZfdHhfbG9ja19iaCh0 eHEpOwo+ID4gKwo+ID4gKwkvKiBzdG9wIHR4IHF1ZXVlIGFuZCBuYXBpICovCj4gPiArCW5ldGlm X3N0b3Bfc3VicXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ICsJdmlydG5ldF9uYXBpX3R4X2Rp c2FibGUoJnNxLT5uYXBpKTsKPgo+Cj4gVGhlcmUncyBubyBuZWVkIHRvIGhvbGQgdHggbG9jayBm b3IgbmFwaSBkaXNhYmxlLgoKVGhlIG1haW4gcHVycG9zZSBvZiB0eCBsb2NrIGlzIHRvIHdhaXQg Zm9yIG90aGVyIHhtaXQgY2FsbHMgdG8gZW5kLiBBbmQgc2V0Cm5ldGlmX3N0b3Bfc3VicXVldWUo KQoKVGhhbmtzLgoKPgo+IFRoYW5rcwo+Cj4KPiA+ICsKPiA+ICsJX19uZXRpZl90eF91bmxvY2tf YmgodHhxKTsKPiA+ICsKPiA+ICsJLyogcmVzZXQgdGhlIHF1ZXVlICovCj4gPiArCWVyciA9IHZp cnRpb19yZXNldF92cShzcS0+dnEpOwo+ID4gKwlpZiAoZXJyKSB7Cj4gPiArCQluZXRpZl9zdGFy dF9zdWJxdWV1ZSh2aS0+ZGV2LCBxaW5kZXgpOwo+ID4gKwkJZ290byBlcnI7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJLyogZnJlZSBidWZzICovCj4gPiArCXZpcnRuZXRfc3FfZnJlZV91bnVzZWRfYnVm cyh2aSwgc3EpOwo+ID4gKwo+ID4gKwkvKiByZXNldCB2cmluZy4gKi8KPiA+ICsJZXJyID0gdmly dHF1ZXVlX3Jlc2V0X3ZyaW5nKHNxLT52cSwgcmluZ19udW0pOwo+ID4gKwlpZiAoZXJyKQo+ID4g KwkJZ290byBlcnI7Cj4gPiArCj4gPiArCS8qIGVuYWJsZSByZXNldCBxdWV1ZSAqLwo+ID4gKwll cnIgPSB2aXJ0aW9fZW5hYmxlX3Jlc2V0cShzcS0+dnEpOwo+ID4gKwlpZiAoZXJyKQo+ID4gKwkJ Z290byBlcnI7Cj4gPiArCj4gPiArCS8qIHN0YXJ0IHR4IHF1ZXVlIGFuZCBuYXBpICovCj4gPiAr CW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKHZpLT5kZXYsIHFpbmRleCk7Cj4gPiArCXZpcnRuZXRfbmFw aV90eF9lbmFibGUodmksIHNxLT52cSwgJnNxLT5uYXBpKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr Cj4gPiArZXJyOgo+ID4gKwluZXRkZXZfZXJyKHZpLT5kZXYsCj4gPiArCQkgICAicmVzZXQgdHgg cmVzZXQgdnEgZmFpbDogdHggcXVldWUgaW5kZXg6ICVsZCBlcnI6ICVkXG4iLAo+ID4gKwkJICAg c3EgLSB2aS0+c3EsIGVycik7Cj4gPiArCXZpcnRuZXRfbmFwaV90eF9lbmFibGUodmksIHNxLT52 cSwgJnNxLT5uYXBpKTsKPiA+ICsJcmV0dXJuIGVycjsKPiA+ICt9Cj4gPiArCj4gPiAgIC8qCj4g PiAgICAqIFNlbmQgY29tbWFuZCB2aWEgdGhlIGNvbnRyb2wgdmlydHF1ZXVlIGFuZCBjaGVjayBz dGF0dXMuICBDb21tYW5kcwo+ID4gICAgKiBzdXBwb3J0ZWQgYnkgdGhlIGh5cGVydmlzb3IsIGFz IGluZGljYXRlZCBieSBmZWF0dXJlIGJpdHMsIHNob3VsZAo+CgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC11bSBtYWlsaW5nIGxpc3QKbGludXgt dW1AbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXVtCg==