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 X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B9A2C43612 for ; Wed, 2 Jan 2019 13:59:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 29216218CD for ; Wed, 2 Jan 2019 13:59:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729996AbfABN7i (ORCPT ); Wed, 2 Jan 2019 08:59:38 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58892 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727827AbfABN7h (ORCPT ); Wed, 2 Jan 2019 08:59:37 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id EA36D2C9C9C; Wed, 2 Jan 2019 13:59:36 +0000 (UTC) Received: from redhat.com (ovpn-120-148.rdu2.redhat.com [10.10.120.148]) by smtp.corp.redhat.com (Postfix) with ESMTP id 730EF60C47; Wed, 2 Jan 2019 13:59:31 +0000 (UTC) Date: Wed, 2 Jan 2019 08:59:30 -0500 From: "Michael S. Tsirkin" To: Jason Wang Cc: linux-kernel@vger.kernel.org, maxime.coquelin@redhat.com, tiwei.bie@intel.com, wexu@redhat.com, jfreimann@redhat.com, "David S. Miller" , virtualization@lists.linux-foundation.org, netdev@vger.kernel.org Subject: Re: [PATCH RFC 1/2] virtio-net: bql support Message-ID: <20190102085457-mutt-send-email-mst@kernel.org> References: <20181205225323.12555-1-mst@redhat.com> <20181205225323.12555-2-mst@redhat.com> <21384cb5-99a6-7431-1039-b356521e1bc3@redhat.com> <20181226101528-mutt-send-email-mst@kernel.org> <0fa99d9b-e510-d7eb-db1b-831bd7610ce9@redhat.com> <20181230134106-mutt-send-email-mst@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 02 Jan 2019 13:59:37 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jan 02, 2019 at 11:28:43AM +0800, Jason Wang wrote: > > On 2018/12/31 上午2:45, Michael S. Tsirkin wrote: > > On Thu, Dec 27, 2018 at 06:00:36PM +0800, Jason Wang wrote: > > > On 2018/12/26 下午11:19, Michael S. Tsirkin wrote: > > > > On Thu, Dec 06, 2018 at 04:17:36PM +0800, Jason Wang wrote: > > > > > On 2018/12/6 上午6:54, Michael S. Tsirkin wrote: > > > > > > When use_napi is set, let's enable BQLs. Note: some of the issues are > > > > > > similar to wifi. It's worth considering whether something similar to > > > > > > commit 36148c2bbfbe ("mac80211: Adjust TSQ pacing shift") might be > > > > > > benefitial. > > > > > I've played a similar patch several days before. The tricky part is the mode > > > > > switching between napi and no napi. We should make sure when the packet is > > > > > sent and trakced by BQL,  it should be consumed by BQL as well. I did it by > > > > > tracking it through skb->cb.  And deal with the freeze by reset the BQL > > > > > status. Patch attached. > > > > > > > > > > But when testing with vhost-net, I don't very a stable performance, > > > > So how about increasing TSQ pacing shift then? > > > > > > I can test this. But changing default TCP value is much more than a > > > virtio-net specific thing. > > Well same logic as wifi applies. Unpredictable latencies related > > to radio in one case, to host scheduler in the other. > > > > > > > it was > > > > > probably because we batch the used ring updating so tx interrupt may come > > > > > randomly. We probably need to implement time bounded coalescing mechanism > > > > > which could be configured from userspace. > > > > I don't think it's reasonable to expect userspace to be that smart ... > > > > Why do we need time bounded? used ring is always updated when ring > > > > becomes empty. > > > > > > We don't add used when means BQL may not see the consumed packet in time. > > > And the delay varies based on the workload since we count packets not bytes > > > or time before doing the batched updating. > > > > > > Thanks > > Sorry I still don't get it. > > When nothing is outstanding then we do update the used. > > So if BQL stops userspace from sending packets then > > we get an interrupt and packets start flowing again. > > > Yes, but how about the cases of multiple flows. That's where I see unstable > results. > > > > > > It might be suboptimal, we might need to tune it but I doubt running > > timers is a solution, timer interrupts cause VM exits. > > > Probably not a timer but a time counter (or event byte counter) in vhost to > add used and signal guest if it exceeds a value instead of waiting the > number of packets. > > > Thanks Well we already have VHOST_NET_WEIGHT - is it too big then? And maybe we should expose the "MORE" flag in the descriptor - do you think that will help? > > > > > > > > Btw, maybe it's time just enable napi TX by default. I get ~10% TCP_RR > > > > > regression on machine without APICv, (haven't found time to test APICv > > > > > machine). But consider it was for correctness, I think it's acceptable? Then > > > > > we can do optimization on top? > > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > > > Signed-off-by: Michael S. Tsirkin > > > > > > --- > > > > > > drivers/net/virtio_net.c | 27 +++++++++++++++++++-------- > > > > > > 1 file changed, 19 insertions(+), 8 deletions(-) > > > > > > > > > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > > > > > index cecfd77c9f3c..b657bde6b94b 100644 > > > > > > --- a/drivers/net/virtio_net.c > > > > > > +++ b/drivers/net/virtio_net.c > > > > > > @@ -1325,7 +1325,8 @@ static int virtnet_receive(struct receive_queue *rq, int budget, > > > > > > return stats.packets; > > > > > > } > > > > > > -static void free_old_xmit_skbs(struct send_queue *sq) > > > > > > +static void free_old_xmit_skbs(struct send_queue *sq, struct netdev_queue *txq, > > > > > > + bool use_napi) > > > > > > { > > > > > > struct sk_buff *skb; > > > > > > unsigned int len; > > > > > > @@ -1347,6 +1348,9 @@ static void free_old_xmit_skbs(struct send_queue *sq) > > > > > > if (!packets) > > > > > > return; > > > > > > + if (use_napi) > > > > > > + netdev_tx_completed_queue(txq, packets, bytes); > > > > > > + > > > > > > u64_stats_update_begin(&sq->stats.syncp); > > > > > > sq->stats.bytes += bytes; > > > > > > sq->stats.packets += packets; > > > > > > @@ -1364,7 +1368,7 @@ static void virtnet_poll_cleantx(struct receive_queue *rq) > > > > > > return; > > > > > > if (__netif_tx_trylock(txq)) { > > > > > > - free_old_xmit_skbs(sq); > > > > > > + free_old_xmit_skbs(sq, txq, true); > > > > > > __netif_tx_unlock(txq); > > > > > > } > > > > > > @@ -1440,7 +1444,7 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget) > > > > > > struct netdev_queue *txq = netdev_get_tx_queue(vi->dev, vq2txq(sq->vq)); > > > > > > __netif_tx_lock(txq, raw_smp_processor_id()); > > > > > > - free_old_xmit_skbs(sq); > > > > > > + free_old_xmit_skbs(sq, txq, true); > > > > > > __netif_tx_unlock(txq); > > > > > > virtqueue_napi_complete(napi, sq->vq, 0); > > > > > > @@ -1505,13 +1509,15 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > > > > > > struct send_queue *sq = &vi->sq[qnum]; > > > > > > int err; > > > > > > struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); > > > > > > - bool kick = !skb->xmit_more; > > > > > > + bool more = skb->xmit_more; > > > > > > bool use_napi = sq->napi.weight; > > > > > > + unsigned int bytes = skb->len; > > > > > > + bool kick; > > > > > > /* Free up any pending old buffers before queueing new ones. */ > > > > > > - free_old_xmit_skbs(sq); > > > > > > + free_old_xmit_skbs(sq, txq, use_napi); > > > > > > - if (use_napi && kick) > > > > > > + if (use_napi && !more) > > > > > > virtqueue_enable_cb_delayed(sq->vq); > > > > > > /* timestamp packet in software */ > > > > > > @@ -1552,7 +1558,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > > > > > > if (!use_napi && > > > > > > unlikely(!virtqueue_enable_cb_delayed(sq->vq))) { > > > > > > /* More just got used, free them then recheck. */ > > > > > > - free_old_xmit_skbs(sq); > > > > > > + free_old_xmit_skbs(sq, txq, false); > > > > > > if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) { > > > > > > netif_start_subqueue(dev, qnum); > > > > > > virtqueue_disable_cb(sq->vq); > > > > > > @@ -1560,7 +1566,12 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > > > > > > } > > > > > > } > > > > > > - if (kick || netif_xmit_stopped(txq)) { > > > > > > + if (use_napi) > > > > > > + kick = __netdev_tx_sent_queue(txq, bytes, more); > > > > > > + else > > > > > > + kick = !more || netif_xmit_stopped(txq); > > > > > > + > > > > > > + if (kick) { > > > > > > if (virtqueue_kick_prepare(sq->vq) && virtqueue_notify(sq->vq)) { > > > > > > u64_stats_update_begin(&sq->stats.syncp); > > > > > > sq->stats.kicks++; From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH RFC 1/2] virtio-net: bql support Date: Wed, 2 Jan 2019 08:59:30 -0500 Message-ID: <20190102085457-mutt-send-email-mst@kernel.org> References: <20181205225323.12555-1-mst@redhat.com> <20181205225323.12555-2-mst@redhat.com> <21384cb5-99a6-7431-1039-b356521e1bc3@redhat.com> <20181226101528-mutt-send-email-mst@kernel.org> <0fa99d9b-e510-d7eb-db1b-831bd7610ce9@redhat.com> <20181230134106-mutt-send-email-mst@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, maxime.coquelin@redhat.com, wexu@redhat.com, "David S. Miller" To: Jason Wang Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org List-Id: netdev.vger.kernel.org T24gV2VkLCBKYW4gMDIsIDIwMTkgYXQgMTE6Mjg6NDNBTSArMDgwMCwgSmFzb24gV2FuZyB3cm90 ZToKPiAKPiBPbiAyMDE4LzEyLzMxIOS4iuWNiDI6NDUsIE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90 ZToKPiA+IE9uIFRodSwgRGVjIDI3LCAyMDE4IGF0IDA2OjAwOjM2UE0gKzA4MDAsIEphc29uIFdh bmcgd3JvdGU6Cj4gPiA+IE9uIDIwMTgvMTIvMjYg5LiL5Y2IMTE6MTksIE1pY2hhZWwgUy4gVHNp cmtpbiB3cm90ZToKPiA+ID4gPiBPbiBUaHUsIERlYyAwNiwgMjAxOCBhdCAwNDoxNzozNlBNICsw ODAwLCBKYXNvbiBXYW5nIHdyb3RlOgo+ID4gPiA+ID4gT24gMjAxOC8xMi82IOS4iuWNiDY6NTQs IE1pY2hhZWwgUy4gVHNpcmtpbiB3cm90ZToKPiA+ID4gPiA+ID4gV2hlbiB1c2VfbmFwaSBpcyBz ZXQsIGxldCdzIGVuYWJsZSBCUUxzLiAgTm90ZTogc29tZSBvZiB0aGUgaXNzdWVzIGFyZQo+ID4g PiA+ID4gPiBzaW1pbGFyIHRvIHdpZmkuICBJdCdzIHdvcnRoIGNvbnNpZGVyaW5nIHdoZXRoZXIg c29tZXRoaW5nIHNpbWlsYXIgdG8KPiA+ID4gPiA+ID4gY29tbWl0IDM2MTQ4YzJiYmZiZSAoIm1h YzgwMjExOiBBZGp1c3QgVFNRIHBhY2luZyBzaGlmdCIpIG1pZ2h0IGJlCj4gPiA+ID4gPiA+IGJl bmVmaXRpYWwuCj4gPiA+ID4gPiBJJ3ZlIHBsYXllZCBhIHNpbWlsYXIgcGF0Y2ggc2V2ZXJhbCBk YXlzIGJlZm9yZS4gVGhlIHRyaWNreSBwYXJ0IGlzIHRoZSBtb2RlCj4gPiA+ID4gPiBzd2l0Y2hp bmcgYmV0d2VlbiBuYXBpIGFuZCBubyBuYXBpLiBXZSBzaG91bGQgbWFrZSBzdXJlIHdoZW4gdGhl IHBhY2tldCBpcwo+ID4gPiA+ID4gc2VudCBhbmQgdHJha2NlZCBieSBCUUwswqAgaXQgc2hvdWxk IGJlIGNvbnN1bWVkIGJ5IEJRTCBhcyB3ZWxsLiBJIGRpZCBpdCBieQo+ID4gPiA+ID4gdHJhY2tp bmcgaXQgdGhyb3VnaCBza2ItPmNiLsKgIEFuZCBkZWFsIHdpdGggdGhlIGZyZWV6ZSBieSByZXNl dCB0aGUgQlFMCj4gPiA+ID4gPiBzdGF0dXMuIFBhdGNoIGF0dGFjaGVkLgo+ID4gPiA+ID4gCj4g PiA+ID4gPiBCdXQgd2hlbiB0ZXN0aW5nIHdpdGggdmhvc3QtbmV0LCBJIGRvbid0IHZlcnkgYSBz dGFibGUgcGVyZm9ybWFuY2UsCj4gPiA+ID4gU28gaG93IGFib3V0IGluY3JlYXNpbmcgVFNRIHBh Y2luZyBzaGlmdCB0aGVuPwo+ID4gPiAKPiA+ID4gSSBjYW4gdGVzdCB0aGlzLiBCdXQgY2hhbmdp bmcgZGVmYXVsdCBUQ1AgdmFsdWUgaXMgbXVjaCBtb3JlIHRoYW4gYQo+ID4gPiB2aXJ0aW8tbmV0 IHNwZWNpZmljIHRoaW5nLgo+ID4gV2VsbCBzYW1lIGxvZ2ljIGFzIHdpZmkgYXBwbGllcy4gVW5w cmVkaWN0YWJsZSBsYXRlbmNpZXMgcmVsYXRlZAo+ID4gdG8gcmFkaW8gaW4gb25lIGNhc2UsIHRv IGhvc3Qgc2NoZWR1bGVyIGluIHRoZSBvdGhlci4KPiA+IAo+ID4gPiA+ID4gaXQgd2FzCj4gPiA+ ID4gPiBwcm9iYWJseSBiZWNhdXNlIHdlIGJhdGNoIHRoZSB1c2VkIHJpbmcgdXBkYXRpbmcgc28g dHggaW50ZXJydXB0IG1heSBjb21lCj4gPiA+ID4gPiByYW5kb21seS4gV2UgcHJvYmFibHkgbmVl ZCB0byBpbXBsZW1lbnQgdGltZSBib3VuZGVkIGNvYWxlc2NpbmcgbWVjaGFuaXNtCj4gPiA+ID4g PiB3aGljaCBjb3VsZCBiZSBjb25maWd1cmVkIGZyb20gdXNlcnNwYWNlLgo+ID4gPiA+IEkgZG9u J3QgdGhpbmsgaXQncyByZWFzb25hYmxlIHRvIGV4cGVjdCB1c2Vyc3BhY2UgdG8gYmUgdGhhdCBz bWFydCAuLi4KPiA+ID4gPiBXaHkgZG8gd2UgbmVlZCB0aW1lIGJvdW5kZWQ/IHVzZWQgcmluZyBp cyBhbHdheXMgdXBkYXRlZCB3aGVuIHJpbmcKPiA+ID4gPiBiZWNvbWVzIGVtcHR5Lgo+ID4gPiAK PiA+ID4gV2UgZG9uJ3QgYWRkIHVzZWQgd2hlbiBtZWFucyBCUUwgbWF5IG5vdCBzZWUgdGhlIGNv bnN1bWVkIHBhY2tldCBpbiB0aW1lLgo+ID4gPiBBbmQgdGhlIGRlbGF5IHZhcmllcyBiYXNlZCBv biB0aGUgd29ya2xvYWQgc2luY2Ugd2UgY291bnQgcGFja2V0cyBub3QgYnl0ZXMKPiA+ID4gb3Ig dGltZSBiZWZvcmUgZG9pbmcgdGhlIGJhdGNoZWQgdXBkYXRpbmcuCj4gPiA+IAo+ID4gPiBUaGFu a3MKPiA+IFNvcnJ5IEkgc3RpbGwgZG9uJ3QgZ2V0IGl0Lgo+ID4gV2hlbiBub3RoaW5nIGlzIG91 dHN0YW5kaW5nIHRoZW4gd2UgZG8gdXBkYXRlIHRoZSB1c2VkLgo+ID4gU28gaWYgQlFMIHN0b3Bz IHVzZXJzcGFjZSBmcm9tIHNlbmRpbmcgcGFja2V0cyB0aGVuCj4gPiB3ZSBnZXQgYW4gaW50ZXJy dXB0IGFuZCBwYWNrZXRzIHN0YXJ0IGZsb3dpbmcgYWdhaW4uCj4gCj4gCj4gWWVzLCBidXQgaG93 IGFib3V0IHRoZSBjYXNlcyBvZiBtdWx0aXBsZSBmbG93cy4gVGhhdCdzIHdoZXJlIEkgc2VlIHVu c3RhYmxlCj4gcmVzdWx0cy4KPiAKPiAKPiA+IAo+ID4gSXQgbWlnaHQgYmUgc3Vib3B0aW1hbCwg d2UgbWlnaHQgbmVlZCB0byB0dW5lIGl0IGJ1dCBJIGRvdWJ0IHJ1bm5pbmcKPiA+IHRpbWVycyBp cyBhIHNvbHV0aW9uLCB0aW1lciBpbnRlcnJ1cHRzIGNhdXNlIFZNIGV4aXRzLgo+IAo+IAo+IFBy b2JhYmx5IG5vdCBhIHRpbWVyIGJ1dCBhIHRpbWUgY291bnRlciAob3IgZXZlbnQgYnl0ZSBjb3Vu dGVyKSBpbiB2aG9zdCB0bwo+IGFkZCB1c2VkIGFuZCBzaWduYWwgZ3Vlc3QgaWYgaXQgZXhjZWVk cyBhIHZhbHVlIGluc3RlYWQgb2Ygd2FpdGluZyB0aGUKPiBudW1iZXIgb2YgcGFja2V0cy4KPiAK PiAKPiBUaGFua3MKCldlbGwgd2UgYWxyZWFkeSBoYXZlIFZIT1NUX05FVF9XRUlHSFQgLSBpcyBp dCB0b28gYmlnIHRoZW4/CgpBbmQgbWF5YmUgd2Ugc2hvdWxkIGV4cG9zZSB0aGUgIk1PUkUiIGZs YWcgaW4gdGhlIGRlc2NyaXB0b3IgLQpkbyB5b3UgdGhpbmsgdGhhdCB3aWxsIGhlbHA/CgoKCj4g Cj4gPiAKPiA+ID4gPiA+IEJ0dywgbWF5YmUgaXQncyB0aW1lIGp1c3QgZW5hYmxlIG5hcGkgVFgg YnkgZGVmYXVsdC4gSSBnZXQgfjEwJSBUQ1BfUlIKPiA+ID4gPiA+IHJlZ3Jlc3Npb24gb24gbWFj aGluZSB3aXRob3V0IEFQSUN2LCAoaGF2ZW4ndCBmb3VuZCB0aW1lIHRvIHRlc3QgQVBJQ3YKPiA+ ID4gPiA+IG1hY2hpbmUpLiBCdXQgY29uc2lkZXIgaXQgd2FzIGZvciBjb3JyZWN0bmVzcywgSSB0 aGluayBpdCdzIGFjY2VwdGFibGU/IFRoZW4KPiA+ID4gPiA+IHdlIGNhbiBkbyBvcHRpbWl6YXRp b24gb24gdG9wPwo+ID4gPiA+ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+IFRoYW5rcwo+ID4gPiA+ ID4gCj4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogTWljaGFlbCBTLiBUc2ly a2luIDxtc3RAcmVkaGF0LmNvbT4KPiA+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiA+ICAgICBkcml2 ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCAyNyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KPiA+ ID4gPiA+ID4gICAgIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9u cygtKQo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Zp cnRpb19uZXQuYyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ID4gPiA+ID4gPiBpbmRleCBj ZWNmZDc3YzlmM2MuLmI2NTdiZGU2Yjk0YiAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJpdmVy cy9uZXQvdmlydGlvX25ldC5jCj4gPiA+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19u ZXQuYwo+ID4gPiA+ID4gPiBAQCAtMTMyNSw3ICsxMzI1LDggQEAgc3RhdGljIGludCB2aXJ0bmV0 X3JlY2VpdmUoc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLCBpbnQgYnVkZ2V0LAo+ID4gPiA+ID4g PiAgICAgCXJldHVybiBzdGF0cy5wYWNrZXRzOwo+ID4gPiA+ID4gPiAgICAgfQo+ID4gPiA+ID4g PiAtc3RhdGljIHZvaWQgZnJlZV9vbGRfeG1pdF9za2JzKHN0cnVjdCBzZW5kX3F1ZXVlICpzcSkK PiA+ID4gPiA+ID4gK3N0YXRpYyB2b2lkIGZyZWVfb2xkX3htaXRfc2ticyhzdHJ1Y3Qgc2VuZF9x dWV1ZSAqc3EsIHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSwKPiA+ID4gPiA+ID4gKwkJCSAgICAg ICBib29sIHVzZV9uYXBpKQo+ID4gPiA+ID4gPiAgICAgewo+ID4gPiA+ID4gPiAgICAgCXN0cnVj dCBza19idWZmICpza2I7Cj4gPiA+ID4gPiA+ICAgICAJdW5zaWduZWQgaW50IGxlbjsKPiA+ID4g PiA+ID4gQEAgLTEzNDcsNiArMTM0OCw5IEBAIHN0YXRpYyB2b2lkIGZyZWVfb2xkX3htaXRfc2ti cyhzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EpCj4gPiA+ID4gPiA+ICAgICAJaWYgKCFwYWNrZXRzKQo+ ID4gPiA+ID4gPiAgICAgCQlyZXR1cm47Cj4gPiA+ID4gPiA+ICsJaWYgKHVzZV9uYXBpKQo+ID4g PiA+ID4gPiArCQluZXRkZXZfdHhfY29tcGxldGVkX3F1ZXVlKHR4cSwgcGFja2V0cywgYnl0ZXMp Owo+ID4gPiA+ID4gPiArCj4gPiA+ID4gPiA+ICAgICAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigm c3EtPnN0YXRzLnN5bmNwKTsKPiA+ID4gPiA+ID4gICAgIAlzcS0+c3RhdHMuYnl0ZXMgKz0gYnl0 ZXM7Cj4gPiA+ID4gPiA+ICAgICAJc3EtPnN0YXRzLnBhY2tldHMgKz0gcGFja2V0czsKPiA+ID4g PiA+ID4gQEAgLTEzNjQsNyArMTM2OCw3IEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRfcG9sbF9jbGVh bnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ID4gPiA+ID4gICAgIAkJcmV0dXJuOwo+ ID4gPiA+ID4gPiAgICAgCWlmIChfX25ldGlmX3R4X3RyeWxvY2sodHhxKSkgewo+ID4gPiA+ID4g PiAtCQlmcmVlX29sZF94bWl0X3NrYnMoc3EpOwo+ID4gPiA+ID4gPiArCQlmcmVlX29sZF94bWl0 X3NrYnMoc3EsIHR4cSwgdHJ1ZSk7Cj4gPiA+ID4gPiA+ICAgICAJCV9fbmV0aWZfdHhfdW5sb2Nr KHR4cSk7Cj4gPiA+ID4gPiA+ICAgICAJfQo+ID4gPiA+ID4gPiBAQCAtMTQ0MCw3ICsxNDQ0LDcg QEAgc3RhdGljIGludCB2aXJ0bmV0X3BvbGxfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBp bnQgYnVkZ2V0KQo+ID4gPiA+ID4gPiAgICAgCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5l dGRldl9nZXRfdHhfcXVldWUodmktPmRldiwgdnEydHhxKHNxLT52cSkpOwo+ID4gPiA+ID4gPiAg ICAgCV9fbmV0aWZfdHhfbG9jayh0eHEsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwo+ID4gPiA+ ID4gPiAtCWZyZWVfb2xkX3htaXRfc2ticyhzcSk7Cj4gPiA+ID4gPiA+ICsJZnJlZV9vbGRfeG1p dF9za2JzKHNxLCB0eHEsIHRydWUpOwo+ID4gPiA+ID4gPiAgICAgCV9fbmV0aWZfdHhfdW5sb2Nr KHR4cSk7Cj4gPiA+ID4gPiA+ICAgICAJdmlydHF1ZXVlX25hcGlfY29tcGxldGUobmFwaSwgc3Et PnZxLCAwKTsKPiA+ID4gPiA+ID4gQEAgLTE1MDUsMTMgKzE1MDksMTUgQEAgc3RhdGljIG5ldGRl dl90eF90IHN0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2Ug KmRldikKPiA+ID4gPiA+ID4gICAgIAlzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EgPSAmdmktPnNxW3Fu dW1dOwo+ID4gPiA+ID4gPiAgICAgCWludCBlcnI7Cj4gPiA+ID4gPiA+ICAgICAJc3RydWN0IG5l dGRldl9xdWV1ZSAqdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIHFudW0pOwo+ID4gPiA+ ID4gPiAtCWJvb2wga2ljayA9ICFza2ItPnhtaXRfbW9yZTsKPiA+ID4gPiA+ID4gKwlib29sIG1v cmUgPSBza2ItPnhtaXRfbW9yZTsKPiA+ID4gPiA+ID4gICAgIAlib29sIHVzZV9uYXBpID0gc3Et Pm5hcGkud2VpZ2h0Owo+ID4gPiA+ID4gPiArCXVuc2lnbmVkIGludCBieXRlcyA9IHNrYi0+bGVu Owo+ID4gPiA+ID4gPiArCWJvb2wga2ljazsKPiA+ID4gPiA+ID4gICAgIAkvKiBGcmVlIHVwIGFu eSBwZW5kaW5nIG9sZCBidWZmZXJzIGJlZm9yZSBxdWV1ZWluZyBuZXcgb25lcy4gKi8KPiA+ID4g PiA+ID4gLQlmcmVlX29sZF94bWl0X3NrYnMoc3EpOwo+ID4gPiA+ID4gPiArCWZyZWVfb2xkX3ht aXRfc2ticyhzcSwgdHhxLCB1c2VfbmFwaSk7Cj4gPiA+ID4gPiA+IC0JaWYgKHVzZV9uYXBpICYm IGtpY2spCj4gPiA+ID4gPiA+ICsJaWYgKHVzZV9uYXBpICYmICFtb3JlKQo+ID4gPiA+ID4gPiAg ICAgCQl2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQoc3EtPnZxKTsKPiA+ID4gPiA+ID4gICAg IAkvKiB0aW1lc3RhbXAgcGFja2V0IGluIHNvZnR3YXJlICovCj4gPiA+ID4gPiA+IEBAIC0xNTUy LDcgKzE1NTgsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQo+ID4gPiA+ID4gPiAgICAgCQlpZiAoIXVz ZV9uYXBpICYmCj4gPiA+ID4gPiA+ICAgICAJCSAgICB1bmxpa2VseSghdmlydHF1ZXVlX2VuYWJs ZV9jYl9kZWxheWVkKHNxLT52cSkpKSB7Cj4gPiA+ID4gPiA+ICAgICAJCQkvKiBNb3JlIGp1c3Qg Z290IHVzZWQsIGZyZWUgdGhlbSB0aGVuIHJlY2hlY2suICovCj4gPiA+ID4gPiA+IC0JCQlmcmVl X29sZF94bWl0X3NrYnMoc3EpOwo+ID4gPiA+ID4gPiArCQkJZnJlZV9vbGRfeG1pdF9za2JzKHNx LCB0eHEsIGZhbHNlKTsKPiA+ID4gPiA+ID4gICAgIAkJCWlmIChzcS0+dnEtPm51bV9mcmVlID49 IDIrTUFYX1NLQl9GUkFHUykgewo+ID4gPiA+ID4gPiAgICAgCQkJCW5ldGlmX3N0YXJ0X3N1YnF1 ZXVlKGRldiwgcW51bSk7Cj4gPiA+ID4gPiA+ICAgICAJCQkJdmlydHF1ZXVlX2Rpc2FibGVfY2Io c3EtPnZxKTsKPiA+ID4gPiA+ID4gQEAgLTE1NjAsNyArMTU2NiwxMiBAQCBzdGF0aWMgbmV0ZGV2 X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQo+ID4gPiA+ID4gPiAgICAgCQl9Cj4gPiA+ID4gPiA+ICAgICAJfQo+ID4gPiA+ID4gPiAt CWlmIChraWNrIHx8IG5ldGlmX3htaXRfc3RvcHBlZCh0eHEpKSB7Cj4gPiA+ID4gPiA+ICsJaWYg KHVzZV9uYXBpKQo+ID4gPiA+ID4gPiArCQlraWNrID0gX19uZXRkZXZfdHhfc2VudF9xdWV1ZSh0 eHEsIGJ5dGVzLCBtb3JlKTsKPiA+ID4gPiA+ID4gKwllbHNlCj4gPiA+ID4gPiA+ICsJCWtpY2sg PSAhbW9yZSB8fCBuZXRpZl94bWl0X3N0b3BwZWQodHhxKTsKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ ID4gPiArCWlmIChraWNrKSB7Cj4gPiA+ID4gPiA+ICAgICAJCWlmICh2aXJ0cXVldWVfa2lja19w cmVwYXJlKHNxLT52cSkgJiYgdmlydHF1ZXVlX25vdGlmeShzcS0+dnEpKSB7Cj4gPiA+ID4gPiA+ ICAgICAJCQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzcS0+c3RhdHMuc3luY3ApOwo+ID4gPiA+ ID4gPiAgICAgCQkJc3EtPnN0YXRzLmtpY2tzKys7Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFs aXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91 bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==