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=-17.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 470F1C48BE5 for ; Wed, 16 Jun 2021 02:42:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0D8BF61246 for ; Wed, 16 Jun 2021 02:42:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231572AbhFPCof (ORCPT ); Tue, 15 Jun 2021 22:44:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:42449 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231360AbhFPCoe (ORCPT ); Tue, 15 Jun 2021 22:44:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1623811349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Oqa5WhFJLs+5ajn0RrVLRKUCTBrXJ3mBHQN7hP5zDa0=; b=Y6RiTxYW7XmGpH1K+xE8oGlQEDauvYzmHPAgPWO6VeOgCISQwayr8zxDnJRqJmpYAWdvz+ Uw6uaQdXcdZ4O+MSFO7ZtLAADf4peOqP+bIGcr8thSrP8HAWgleh0aar2Oa8Z3Orenq3pv Qs222eKaPzWMdZ0piJ8MQP4dsQrEeeU= Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-332-OGCnvyw5Puey1kAy_h1VGw-1; Tue, 15 Jun 2021 22:42:28 -0400 X-MC-Unique: OGCnvyw5Puey1kAy_h1VGw-1 Received: by mail-pl1-f198.google.com with SMTP id 62-20020a1709020544b0290116739a77a4so223428plf.7 for ; Tue, 15 Jun 2021 19:42:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=Oqa5WhFJLs+5ajn0RrVLRKUCTBrXJ3mBHQN7hP5zDa0=; b=do5+G7CDUniHPachS/KP35UCi1mjFGyxNGzNFEZ9b2BWtelrTcDZln04xirIgpoaAL lOkxjxwYTquCYENBuNO6T0m2u/+jebbl9Wlv209VN0GzTngtIhi4vG/RdI+eUjY5ww6k DGDcCtcfyCLyz7uPxxe4/UKqq2D9dwemKkP5cVYozWSZq/D6AOnEB7Xa4RtIThWXuqce Xne2Hf+9E9qxUJ0VnAYk4DZvPF9WtyFFFVOdCxIk3dvZmxm7OlPy+QaP0GL+GBRuy9kD u2XKVYPhPMTlGW1+OWW/SN7oh2aQa4V4d3CXimm+zuNCile6ea6xQFAXhE3lhcvHqBGh sg2g== X-Gm-Message-State: AOAM530pYRlLUZi671MdwLz98kAO+z6jlbDOdF9490TRu22JmGR5OeS+ zrYkTCa02+DhAipD8qzvScs85d5YA/2Jk4oq3v9GTOXcsSrkugKuAEPZE9D8SuHvMyzuLFQsW+x YKcYREsbOxQmz X-Received: by 2002:a63:78d:: with SMTP id 135mr2724779pgh.178.1623811346881; Tue, 15 Jun 2021 19:42:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxxg4OnU2/MeSJw7CkcQCwmF00RCnLICax2yHLy0z44ABMAmi49jDD3Kb/dLsnhZ/+hRm7vAg== X-Received: by 2002:a63:78d:: with SMTP id 135mr2724747pgh.178.1623811346544; Tue, 15 Jun 2021 19:42:26 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id ig1sm413200pjb.27.2021.06.15.19.42.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Jun 2021 19:42:26 -0700 (PDT) Subject: Re: [PATCH net-next v5 06/15] virtio-net: unify the code for recycling the xmit ptr To: Xuan Zhuo , netdev@vger.kernel.org Cc: "David S. Miller" , Jakub Kicinski , "Michael S. Tsirkin" , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , Magnus Karlsson , Jonathan Lemon , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Song Liu , Yonghong Song , KP Singh , virtualization@lists.linux-foundation.org, bpf@vger.kernel.org, "dust . li" References: <20210610082209.91487-1-xuanzhuo@linux.alibaba.com> <20210610082209.91487-7-xuanzhuo@linux.alibaba.com> From: Jason Wang Message-ID: <87b214de-cc8c-bfa1-6a10-8f3c6a409a9a@redhat.com> Date: Wed, 16 Jun 2021 10:42:02 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210610082209.91487-7-xuanzhuo@linux.alibaba.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org ÔÚ 2021/6/10 ÏÂÎç4:22, Xuan Zhuo дµÀ: > Now there are two types of "skb" and "xdp frame" during recycling old > xmit. > > There are two completely similar and independent implementations. This > is inconvenient for the subsequent addition of new types. So extract a > function from this piece of code and call this function uniformly to > recover old xmit ptr. > > Rename free_old_xmit_skbs() to free_old_xmit(). > > Signed-off-by: Xuan Zhuo Acked-by: Jason Wang > --- > drivers/net/virtio_net.c | 86 ++++++++++++++++++---------------------- > 1 file changed, 38 insertions(+), 48 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 6c1233f0ab3e..d791543a8dd8 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -264,6 +264,30 @@ static struct xdp_frame *ptr_to_xdp(void *ptr) > return (struct xdp_frame *)((unsigned long)ptr & ~VIRTIO_XDP_FLAG); > } > > +static void __free_old_xmit(struct send_queue *sq, bool in_napi, > + struct virtnet_sq_stats *stats) > +{ > + unsigned int len; > + void *ptr; > + > + while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) { > + if (!is_xdp_frame(ptr)) { > + struct sk_buff *skb = ptr; > + > + pr_debug("Sent skb %p\n", skb); > + > + stats->bytes += skb->len; > + napi_consume_skb(skb, in_napi); > + } else { > + struct xdp_frame *frame = ptr_to_xdp(ptr); > + > + stats->bytes += frame->len; > + xdp_return_frame(frame); > + } > + stats->packets++; > + } > +} > + > /* Converting between virtqueue no. and kernel tx/rx queue no. > * 0:rx0 1:tx0 2:rx1 3:tx1 ... 2N:rxN 2N+1:txN 2N+2:cvq > */ > @@ -572,15 +596,12 @@ static int virtnet_xdp_xmit(struct net_device *dev, > int n, struct xdp_frame **frames, u32 flags) > { > struct virtnet_info *vi = netdev_priv(dev); > + struct virtnet_sq_stats stats = {}; > struct receive_queue *rq = vi->rq; > struct bpf_prog *xdp_prog; > struct send_queue *sq; > - unsigned int len; > - int packets = 0; > - int bytes = 0; > int nxmit = 0; > int kicks = 0; > - void *ptr; > int ret; > int i; > > @@ -599,20 +620,7 @@ static int virtnet_xdp_xmit(struct net_device *dev, > } > > /* Free up any pending old buffers before queueing new ones. */ > - while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) { > - if (likely(is_xdp_frame(ptr))) { > - struct xdp_frame *frame = ptr_to_xdp(ptr); > - > - bytes += frame->len; > - xdp_return_frame(frame); > - } else { > - struct sk_buff *skb = ptr; > - > - bytes += skb->len; > - napi_consume_skb(skb, false); > - } > - packets++; > - } > + __free_old_xmit(sq, false, &stats); > > for (i = 0; i < n; i++) { > struct xdp_frame *xdpf = frames[i]; > @@ -629,8 +637,8 @@ static int virtnet_xdp_xmit(struct net_device *dev, > } > out: > u64_stats_update_begin(&sq->stats.syncp); > - sq->stats.bytes += bytes; > - sq->stats.packets += packets; > + sq->stats.bytes += stats.bytes; > + sq->stats.packets += stats.packets; > sq->stats.xdp_tx += n; > sq->stats.xdp_tx_drops += n - nxmit; > sq->stats.kicks += kicks; > @@ -1459,39 +1467,21 @@ static int virtnet_receive(struct receive_queue *rq, int budget, > return stats.packets; > } > > -static void free_old_xmit_skbs(struct send_queue *sq, bool in_napi) > +static void free_old_xmit(struct send_queue *sq, bool in_napi) > { > - unsigned int len; > - unsigned int packets = 0; > - unsigned int bytes = 0; > - void *ptr; > + struct virtnet_sq_stats stats = {}; > > - while ((ptr = virtqueue_get_buf(sq->vq, &len)) != NULL) { > - if (likely(!is_xdp_frame(ptr))) { > - struct sk_buff *skb = ptr; > - > - pr_debug("Sent skb %p\n", skb); > - > - bytes += skb->len; > - napi_consume_skb(skb, in_napi); > - } else { > - struct xdp_frame *frame = ptr_to_xdp(ptr); > - > - bytes += frame->len; > - xdp_return_frame(frame); > - } > - packets++; > - } > + __free_old_xmit(sq, in_napi, &stats); > > /* Avoid overhead when no packets have been processed > * happens when called speculatively from start_xmit. > */ > - if (!packets) > + if (!stats.packets) > return; > > u64_stats_update_begin(&sq->stats.syncp); > - sq->stats.bytes += bytes; > - sq->stats.packets += packets; > + sq->stats.bytes += stats.bytes; > + sq->stats.packets += stats.packets; > u64_stats_update_end(&sq->stats.syncp); > } > > @@ -1516,7 +1506,7 @@ static void virtnet_poll_cleantx(struct receive_queue *rq) > return; > > if (__netif_tx_trylock(txq)) { > - free_old_xmit_skbs(sq, true); > + free_old_xmit(sq, true); > __netif_tx_unlock(txq); > } > > @@ -1601,7 +1591,7 @@ static int virtnet_poll_tx(struct napi_struct *napi, int budget) > > txq = netdev_get_tx_queue(vi->dev, index); > __netif_tx_lock(txq, raw_smp_processor_id()); > - free_old_xmit_skbs(sq, true); > + free_old_xmit(sq, true); > __netif_tx_unlock(txq); > > virtqueue_napi_complete(napi, sq->vq, 0); > @@ -1670,7 +1660,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev) > bool use_napi = sq->napi.weight; > > /* Free up any pending old buffers before queueing new ones. */ > - free_old_xmit_skbs(sq, false); > + free_old_xmit(sq, false); > > if (use_napi && kick) > virtqueue_enable_cb_delayed(sq->vq); > @@ -1714,7 +1704,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, false); > + free_old_xmit(sq, false); > if (sq->vq->num_free >= 2+MAX_SKB_FRAGS) { > netif_start_subqueue(dev, qnum); > virtqueue_disable_cb(sq->vq); 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=-15.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 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 0404EC48BE5 for ; Wed, 16 Jun 2021 02:42:36 +0000 (UTC) Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id AE0EC61246 for ; Wed, 16 Jun 2021 02:42:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE0EC61246 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 7477C4013A; Wed, 16 Jun 2021 02:42:35 +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 weCyoiJoVRs9; Wed, 16 Jun 2021 02:42:34 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 0C0C7400CF; Wed, 16 Jun 2021 02:42:34 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id D5FD7C000D; Wed, 16 Jun 2021 02:42:33 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4F09EC000B for ; Wed, 16 Jun 2021 02:42:32 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 3AA6E4068F for ; Wed, 16 Jun 2021 02:42:32 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com 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 WFThUrPsH9KI for ; Wed, 16 Jun 2021 02:42:31 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id E834740304 for ; Wed, 16 Jun 2021 02:42:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1623811349; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Oqa5WhFJLs+5ajn0RrVLRKUCTBrXJ3mBHQN7hP5zDa0=; b=Y6RiTxYW7XmGpH1K+xE8oGlQEDauvYzmHPAgPWO6VeOgCISQwayr8zxDnJRqJmpYAWdvz+ Uw6uaQdXcdZ4O+MSFO7ZtLAADf4peOqP+bIGcr8thSrP8HAWgleh0aar2Oa8Z3Orenq3pv Qs222eKaPzWMdZ0piJ8MQP4dsQrEeeU= Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-78-GL0Dl-blO1e_tWc2HmHe2g-1; Tue, 15 Jun 2021 22:42:28 -0400 X-MC-Unique: GL0Dl-blO1e_tWc2HmHe2g-1 Received: by mail-pl1-f198.google.com with SMTP id s23-20020a170902b197b029011aafb8fbadso222468plr.19 for ; Tue, 15 Jun 2021 19:42:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=Oqa5WhFJLs+5ajn0RrVLRKUCTBrXJ3mBHQN7hP5zDa0=; b=WdQ+qiYUHzJBCT7GH2iotensKZICZavLoLTWIcUJqvoqJ9WdrsZgcT7bjhV9xAhHky 4fpCOj20wQHJHFBHIFC8ibPYsbk2xoDNndtuiZZNdxCZ+7APp+m0W+vk3mtLL4KtFWwf Oe8dRVxUUrdRD9+pCUr5LV7jYx0cIBmBYg7A6sH0TtRnflSkZR66bs0ypfKmyw/RON9C BxCT/XBJu3vBrgDRRb3uCv2ESUom/CKpnRqrfDXzqliFKNvTBfK3iywTSr6PYCUC87bq oGqy/pMllRwbeb7yZaLlw1O0cqkpETiL79l4dEcf/CFhq10okKyehHw8y4U9cu6fX8W/ E+cA== X-Gm-Message-State: AOAM531rFNff7nvxr9uVO44+WMJI3IxAPMUBmv0IzagpnY9EX7JggcMQ mO6FGrR3djoZJm6rgajIrXzuMzIGpocCUZDajxghXvNXwjkN+1NNsDbArCDWkjpLZb5K6JwCZyD vvw3LBernFF9vgHQ62Sdv0CzYrD3OPyQC7Z21+0oIIA== X-Received: by 2002:a63:78d:: with SMTP id 135mr2724780pgh.178.1623811346884; Tue, 15 Jun 2021 19:42:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxxg4OnU2/MeSJw7CkcQCwmF00RCnLICax2yHLy0z44ABMAmi49jDD3Kb/dLsnhZ/+hRm7vAg== X-Received: by 2002:a63:78d:: with SMTP id 135mr2724747pgh.178.1623811346544; Tue, 15 Jun 2021 19:42:26 -0700 (PDT) Received: from wangxiaodeMacBook-Air.local ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id ig1sm413200pjb.27.2021.06.15.19.42.19 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Jun 2021 19:42:26 -0700 (PDT) Subject: Re: [PATCH net-next v5 06/15] virtio-net: unify the code for recycling the xmit ptr To: Xuan Zhuo , netdev@vger.kernel.org References: <20210610082209.91487-1-xuanzhuo@linux.alibaba.com> <20210610082209.91487-7-xuanzhuo@linux.alibaba.com> From: Jason Wang Message-ID: <87b214de-cc8c-bfa1-6a10-8f3c6a409a9a@redhat.com> Date: Wed, 16 Jun 2021 10:42:02 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210610082209.91487-7-xuanzhuo@linux.alibaba.com> Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Cc: Song Liu , Martin KaFai Lau , Jesper Dangaard Brouer , Daniel Borkmann , "Michael S. Tsirkin" , Yonghong Song , John Fastabend , Alexei Starovoitov , Andrii Nakryiko , =?UTF-8?B?QmrDtnJuIFTDtnBlbA==?= , "dust . li" , Jonathan Lemon , KP Singh , Jakub Kicinski , bpf@vger.kernel.org, virtualization@lists.linux-foundation.org, "David S. Miller" , Magnus Karlsson 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: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="gbk"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CtTaIDIwMjEvNi8xMCDPws7nNDoyMiwgWHVhbiBaaHVvINC0tcA6Cj4gTm93IHRoZXJlIGFyZSB0 d28gdHlwZXMgb2YgInNrYiIgYW5kICJ4ZHAgZnJhbWUiIGR1cmluZyByZWN5Y2xpbmcgb2xkCj4g eG1pdC4KPgo+IFRoZXJlIGFyZSB0d28gY29tcGxldGVseSBzaW1pbGFyIGFuZCBpbmRlcGVuZGVu dCBpbXBsZW1lbnRhdGlvbnMuIFRoaXMKPiBpcyBpbmNvbnZlbmllbnQgZm9yIHRoZSBzdWJzZXF1 ZW50IGFkZGl0aW9uIG9mIG5ldyB0eXBlcy4gU28gZXh0cmFjdCBhCj4gZnVuY3Rpb24gZnJvbSB0 aGlzIHBpZWNlIG9mIGNvZGUgYW5kIGNhbGwgdGhpcyBmdW5jdGlvbiB1bmlmb3JtbHkgdG8KPiBy ZWNvdmVyIG9sZCB4bWl0IHB0ci4KPgo+IFJlbmFtZSBmcmVlX29sZF94bWl0X3NrYnMoKSB0byBm cmVlX29sZF94bWl0KCkuCj4KPiBTaWduZWQtb2ZmLWJ5OiBYdWFuIFpodW8gPHh1YW56aHVvQGxp bnV4LmFsaWJhYmEuY29tPgoKCkFja2VkLWJ5OiBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQu Y29tPgoKCj4gLS0tCj4gICBkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCA4NiArKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMzggaW5z ZXJ0aW9ucygrKSwgNDggZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv dmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gaW5kZXggNmMxMjMzZjBh YjNlLi5kNzkxNTQzYThkZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5j Cj4gKysrIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCj4gQEAgLTI2NCw2ICsyNjQsMzAgQEAg c3RhdGljIHN0cnVjdCB4ZHBfZnJhbWUgKnB0cl90b194ZHAodm9pZCAqcHRyKQo+ICAgCXJldHVy biAoc3RydWN0IHhkcF9mcmFtZSAqKSgodW5zaWduZWQgbG9uZylwdHIgJiB+VklSVElPX1hEUF9G TEFHKTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBfX2ZyZWVfb2xkX3htaXQoc3RydWN0IHNl bmRfcXVldWUgKnNxLCBib29sIGluX25hcGksCj4gKwkJCSAgICBzdHJ1Y3QgdmlydG5ldF9zcV9z dGF0cyAqc3RhdHMpCj4gK3sKPiArCXVuc2lnbmVkIGludCBsZW47Cj4gKwl2b2lkICpwdHI7Cj4g Kwo+ICsJd2hpbGUgKChwdHIgPSB2aXJ0cXVldWVfZ2V0X2J1ZihzcS0+dnEsICZsZW4pKSAhPSBO VUxMKSB7Cj4gKwkJaWYgKCFpc194ZHBfZnJhbWUocHRyKSkgewo+ICsJCQlzdHJ1Y3Qgc2tfYnVm ZiAqc2tiID0gcHRyOwo+ICsKPiArCQkJcHJfZGVidWcoIlNlbnQgc2tiICVwXG4iLCBza2IpOwo+ ICsKPiArCQkJc3RhdHMtPmJ5dGVzICs9IHNrYi0+bGVuOwo+ICsJCQluYXBpX2NvbnN1bWVfc2ti KHNrYiwgaW5fbmFwaSk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJc3RydWN0IHhkcF9mcmFtZSAqZnJh bWUgPSBwdHJfdG9feGRwKHB0cik7Cj4gKwo+ICsJCQlzdGF0cy0+Ynl0ZXMgKz0gZnJhbWUtPmxl bjsKPiArCQkJeGRwX3JldHVybl9mcmFtZShmcmFtZSk7Cj4gKwkJfQo+ICsJCXN0YXRzLT5wYWNr ZXRzKys7Cj4gKwl9Cj4gK30KPiArCj4gICAvKiBDb252ZXJ0aW5nIGJldHdlZW4gdmlydHF1ZXVl IG5vLiBhbmQga2VybmVsIHR4L3J4IHF1ZXVlIG5vLgo+ICAgICogMDpyeDAgMTp0eDAgMjpyeDEg Mzp0eDEgLi4uIDJOOnJ4TiAyTisxOnR4TiAyTisyOmN2cQo+ICAgICovCj4gQEAgLTU3MiwxNSAr NTk2LDEyIEBAIHN0YXRpYyBpbnQgdmlydG5ldF94ZHBfeG1pdChzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2LAo+ICAgCQkJICAgIGludCBuLCBzdHJ1Y3QgeGRwX2ZyYW1lICoqZnJhbWVzLCB1MzIgZmxh Z3MpCj4gICB7Cj4gICAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYp Owo+ICsJc3RydWN0IHZpcnRuZXRfc3Ffc3RhdHMgc3RhdHMgPSB7fTsKPiAgIAlzdHJ1Y3QgcmVj ZWl2ZV9xdWV1ZSAqcnEgPSB2aS0+cnE7Cj4gICAJc3RydWN0IGJwZl9wcm9nICp4ZHBfcHJvZzsK PiAgIAlzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3E7Cj4gLQl1bnNpZ25lZCBpbnQgbGVuOwo+IC0JaW50 IHBhY2tldHMgPSAwOwo+IC0JaW50IGJ5dGVzID0gMDsKPiAgIAlpbnQgbnhtaXQgPSAwOwo+ICAg CWludCBraWNrcyA9IDA7Cj4gLQl2b2lkICpwdHI7Cj4gICAJaW50IHJldDsKPiAgIAlpbnQgaTsK PiAgIAo+IEBAIC01OTksMjAgKzYyMCw3IEBAIHN0YXRpYyBpbnQgdmlydG5ldF94ZHBfeG1pdChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ICAgCX0KPiAgIAo+ICAgCS8qIEZyZWUgdXAgYW55IHBl bmRpbmcgb2xkIGJ1ZmZlcnMgYmVmb3JlIHF1ZXVlaW5nIG5ldyBvbmVzLiAqLwo+IC0Jd2hpbGUg KChwdHIgPSB2aXJ0cXVldWVfZ2V0X2J1ZihzcS0+dnEsICZsZW4pKSAhPSBOVUxMKSB7Cj4gLQkJ aWYgKGxpa2VseShpc194ZHBfZnJhbWUocHRyKSkpIHsKPiAtCQkJc3RydWN0IHhkcF9mcmFtZSAq ZnJhbWUgPSBwdHJfdG9feGRwKHB0cik7Cj4gLQo+IC0JCQlieXRlcyArPSBmcmFtZS0+bGVuOwo+ IC0JCQl4ZHBfcmV0dXJuX2ZyYW1lKGZyYW1lKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlzdHJ1Y3Qg c2tfYnVmZiAqc2tiID0gcHRyOwo+IC0KPiAtCQkJYnl0ZXMgKz0gc2tiLT5sZW47Cj4gLQkJCW5h cGlfY29uc3VtZV9za2Ioc2tiLCBmYWxzZSk7Cj4gLQkJfQo+IC0JCXBhY2tldHMrKzsKPiAtCX0K PiArCV9fZnJlZV9vbGRfeG1pdChzcSwgZmFsc2UsICZzdGF0cyk7Cj4gICAKPiAgIAlmb3IgKGkg PSAwOyBpIDwgbjsgaSsrKSB7Cj4gICAJCXN0cnVjdCB4ZHBfZnJhbWUgKnhkcGYgPSBmcmFtZXNb aV07Cj4gQEAgLTYyOSw4ICs2MzcsOCBAQCBzdGF0aWMgaW50IHZpcnRuZXRfeGRwX3htaXQoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwKPiAgIAl9Cj4gICBvdXQ6Cj4gICAJdTY0X3N0YXRzX3VwZGF0 ZV9iZWdpbigmc3EtPnN0YXRzLnN5bmNwKTsKPiAtCXNxLT5zdGF0cy5ieXRlcyArPSBieXRlczsK PiAtCXNxLT5zdGF0cy5wYWNrZXRzICs9IHBhY2tldHM7Cj4gKwlzcS0+c3RhdHMuYnl0ZXMgKz0g c3RhdHMuYnl0ZXM7Cj4gKwlzcS0+c3RhdHMucGFja2V0cyArPSBzdGF0cy5wYWNrZXRzOwo+ICAg CXNxLT5zdGF0cy54ZHBfdHggKz0gbjsKPiAgIAlzcS0+c3RhdHMueGRwX3R4X2Ryb3BzICs9IG4g LSBueG1pdDsKPiAgIAlzcS0+c3RhdHMua2lja3MgKz0ga2lja3M7Cj4gQEAgLTE0NTksMzkgKzE0 NjcsMjEgQEAgc3RhdGljIGludCB2aXJ0bmV0X3JlY2VpdmUoc3RydWN0IHJlY2VpdmVfcXVldWUg KnJxLCBpbnQgYnVkZ2V0LAo+ICAgCXJldHVybiBzdGF0cy5wYWNrZXRzOwo+ICAgfQo+ICAgCj4g LXN0YXRpYyB2b2lkIGZyZWVfb2xkX3htaXRfc2ticyhzdHJ1Y3Qgc2VuZF9xdWV1ZSAqc3EsIGJv b2wgaW5fbmFwaSkKPiArc3RhdGljIHZvaWQgZnJlZV9vbGRfeG1pdChzdHJ1Y3Qgc2VuZF9xdWV1 ZSAqc3EsIGJvb2wgaW5fbmFwaSkKPiAgIHsKPiAtCXVuc2lnbmVkIGludCBsZW47Cj4gLQl1bnNp Z25lZCBpbnQgcGFja2V0cyA9IDA7Cj4gLQl1bnNpZ25lZCBpbnQgYnl0ZXMgPSAwOwo+IC0Jdm9p ZCAqcHRyOwo+ICsJc3RydWN0IHZpcnRuZXRfc3Ffc3RhdHMgc3RhdHMgPSB7fTsKPiAgIAo+IC0J d2hpbGUgKChwdHIgPSB2aXJ0cXVldWVfZ2V0X2J1ZihzcS0+dnEsICZsZW4pKSAhPSBOVUxMKSB7 Cj4gLQkJaWYgKGxpa2VseSghaXNfeGRwX2ZyYW1lKHB0cikpKSB7Cj4gLQkJCXN0cnVjdCBza19i dWZmICpza2IgPSBwdHI7Cj4gLQo+IC0JCQlwcl9kZWJ1ZygiU2VudCBza2IgJXBcbiIsIHNrYik7 Cj4gLQo+IC0JCQlieXRlcyArPSBza2ItPmxlbjsKPiAtCQkJbmFwaV9jb25zdW1lX3NrYihza2Is IGluX25hcGkpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXN0cnVjdCB4ZHBfZnJhbWUgKmZyYW1lID0g cHRyX3RvX3hkcChwdHIpOwo+IC0KPiAtCQkJYnl0ZXMgKz0gZnJhbWUtPmxlbjsKPiAtCQkJeGRw X3JldHVybl9mcmFtZShmcmFtZSk7Cj4gLQkJfQo+IC0JCXBhY2tldHMrKzsKPiAtCX0KPiArCV9f ZnJlZV9vbGRfeG1pdChzcSwgaW5fbmFwaSwgJnN0YXRzKTsKPiAgIAo+ICAgCS8qIEF2b2lkIG92 ZXJoZWFkIHdoZW4gbm8gcGFja2V0cyBoYXZlIGJlZW4gcHJvY2Vzc2VkCj4gICAJICogaGFwcGVu cyB3aGVuIGNhbGxlZCBzcGVjdWxhdGl2ZWx5IGZyb20gc3RhcnRfeG1pdC4KPiAgIAkgKi8KPiAt CWlmICghcGFja2V0cykKPiArCWlmICghc3RhdHMucGFja2V0cykKPiAgIAkJcmV0dXJuOwo+ICAg Cj4gICAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3EtPnN0YXRzLnN5bmNwKTsKPiAtCXNxLT5z dGF0cy5ieXRlcyArPSBieXRlczsKPiAtCXNxLT5zdGF0cy5wYWNrZXRzICs9IHBhY2tldHM7Cj4g KwlzcS0+c3RhdHMuYnl0ZXMgKz0gc3RhdHMuYnl0ZXM7Cj4gKwlzcS0+c3RhdHMucGFja2V0cyAr PSBzdGF0cy5wYWNrZXRzOwo+ICAgCXU2NF9zdGF0c191cGRhdGVfZW5kKCZzcS0+c3RhdHMuc3lu Y3ApOwo+ICAgfQo+ICAgCj4gQEAgLTE1MTYsNyArMTUwNiw3IEBAIHN0YXRpYyB2b2lkIHZpcnRu ZXRfcG9sbF9jbGVhbnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiAgIAkJcmV0dXJuOwo+ ICAgCj4gICAJaWYgKF9fbmV0aWZfdHhfdHJ5bG9jayh0eHEpKSB7Cj4gLQkJZnJlZV9vbGRfeG1p dF9za2JzKHNxLCB0cnVlKTsKPiArCQlmcmVlX29sZF94bWl0KHNxLCB0cnVlKTsKPiAgIAkJX19u ZXRpZl90eF91bmxvY2sodHhxKTsKPiAgIAl9Cj4gICAKPiBAQCAtMTYwMSw3ICsxNTkxLDcgQEAg c3RhdGljIGludCB2aXJ0bmV0X3BvbGxfdHgoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQg YnVkZ2V0KQo+ICAgCj4gICAJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZSh2aS0+ZGV2LCBpbmRl eCk7Cj4gICAJX19uZXRpZl90eF9sb2NrKHR4cSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Cj4g LQlmcmVlX29sZF94bWl0X3NrYnMoc3EsIHRydWUpOwo+ICsJZnJlZV9vbGRfeG1pdChzcSwgdHJ1 ZSk7Cj4gICAJX19uZXRpZl90eF91bmxvY2sodHhxKTsKPiAgIAo+ICAgCXZpcnRxdWV1ZV9uYXBp X2NvbXBsZXRlKG5hcGksIHNxLT52cSwgMCk7Cj4gQEAgLTE2NzAsNyArMTY2MCw3IEBAIHN0YXRp YyBuZXRkZXZfdHhfdCBzdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpCj4gICAJYm9vbCB1c2VfbmFwaSA9IHNxLT5uYXBpLndlaWdodDsKPiAgIAo+ ICAgCS8qIEZyZWUgdXAgYW55IHBlbmRpbmcgb2xkIGJ1ZmZlcnMgYmVmb3JlIHF1ZXVlaW5nIG5l dyBvbmVzLiAqLwo+IC0JZnJlZV9vbGRfeG1pdF9za2JzKHNxLCBmYWxzZSk7Cj4gKwlmcmVlX29s ZF94bWl0KHNxLCBmYWxzZSk7Cj4gICAKPiAgIAlpZiAodXNlX25hcGkgJiYga2ljaykKPiAgIAkJ dmlydHF1ZXVlX2VuYWJsZV9jYl9kZWxheWVkKHNxLT52cSk7Cj4gQEAgLTE3MTQsNyArMTcwNCw3 IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBzdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYpCj4gICAJCWlmICghdXNlX25hcGkgJiYKPiAgIAkJICAgIHVu bGlrZWx5KCF2aXJ0cXVldWVfZW5hYmxlX2NiX2RlbGF5ZWQoc3EtPnZxKSkpIHsKPiAgIAkJCS8q IE1vcmUganVzdCBnb3QgdXNlZCwgZnJlZSB0aGVtIHRoZW4gcmVjaGVjay4gKi8KPiAtCQkJZnJl ZV9vbGRfeG1pdF9za2JzKHNxLCBmYWxzZSk7Cj4gKwkJCWZyZWVfb2xkX3htaXQoc3EsIGZhbHNl KTsKPiAgIAkJCWlmIChzcS0+dnEtPm51bV9mcmVlID49IDIrTUFYX1NLQl9GUkFHUykgewo+ICAg CQkJCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKGRldiwgcW51bSk7Cj4gICAJCQkJdmlydHF1ZXVlX2Rp c2FibGVfY2Ioc3EtPnZxKTsKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0 cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcv bWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==