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 5C57EC433FE for ; Thu, 14 Apr 2022 09:30:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235483AbiDNJcy (ORCPT ); Thu, 14 Apr 2022 05:32:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241799AbiDNJcp (ORCPT ); Thu, 14 Apr 2022 05:32:45 -0400 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 1983270049 for ; Thu, 14 Apr 2022 02:30:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649928619; 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=xTVIrXTky6oGSdrW6vSloYGYrjPuyKnFBXOPprwmmi4=; b=FvjIU4/WhzpYU41DbpC4SczPQI5G6iG+1CnuCEHNmggD+HhBncDLKocTCijlDTmSNGmZBh lPlXIblUU5sq9ERNT4bN+GGtKQVlG+Xt5K+8bWVVErQIQAyzgwbrqEBhuaT2SyANH3nLuP j+4apWbbiyCdV/+oJ0NSw5QVDjjINbU= Received: from mail-lf1-f70.google.com (mail-lf1-f70.google.com [209.85.167.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-513-xjdDKdtTMi6EyPBsNhkcsA-1; Thu, 14 Apr 2022 05:30:15 -0400 X-MC-Unique: xjdDKdtTMi6EyPBsNhkcsA-1 Received: by mail-lf1-f70.google.com with SMTP id x36-20020a056512132400b0044b07b24746so2101464lfu.8 for ; Thu, 14 Apr 2022 02:30:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xTVIrXTky6oGSdrW6vSloYGYrjPuyKnFBXOPprwmmi4=; b=SSEdore25KSnpEPK4hVCbNs1Ux3B34gLJLM8Xuyy46zd3SQ4HK8eN2JA5UO4k+asO3 exWTfnn+OhWTynWuEBmmlZwt5hjK9HOwiy3jB6b3+jJziA/iL9WwQxD8NPCSuxTW6qYl xQnq1Z8hzZZ6NO7EnRxlCABjWWoBLJX0dsSEa/XTslWPVKxQjdPYcOPlJMYDdmc+B3YH 6dPZzoNr2pUjDXrUwIktMtRxbgsErjJ02ZnlvL4KpDWPJYON3ari/D0C5P3tWSTTl7Uw 7u647BChbR9Dozugpo4n/lVsnIISimUvNvs3vu7aYQmq/BY3yAM/qhTfQ+DI4H5L9Kl5 ylkg== X-Gm-Message-State: AOAM533sztu/Hm71KjXo3z/CR0MgN5nQWNDj0wjBrbBxnxNwRH74J0PF hu+FNvN4Wun0mipRULRL2oL1bKO/A9rhtSnkHw1vxsno0+f/Y0DgdhgKxc2VTR+2yWNYYWL5Wrg ZSiAybGa9kKEZ1D7my/QJjH3/tyMdzkTdRbahrT7l4iArOg== X-Received: by 2002:a05:6512:1395:b0:446:d382:79a5 with SMTP id p21-20020a056512139500b00446d38279a5mr1356158lfa.210.1649928613792; Thu, 14 Apr 2022 02:30:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzr4h2U/Fe61ajhZ/yffQb0+ghbUvKwuL6LwQ7b0T02xdZ+hsOeGv/9VI/5jkuBOiC1HbxYHbK+Cv1CpJTPCfU= X-Received: by 2002:a05:6512:1395:b0:446:d382:79a5 with SMTP id p21-20020a056512139500b00446d38279a5mr1356123lfa.210.1649928613476; Thu, 14 Apr 2022 02:30:13 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> From: Jason Wang Date: Thu, 14 Apr 2022 17:30:02 +0800 Message-ID: Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize To: Xuan Zhuo 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 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 Wed, Apr 13, 2022 at 4:47 PM Xuan Zhuo wrot= e: > > On Wed, 13 Apr 2022 16:00:18 +0800, Jason Wang wrot= e: > > > > =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 of 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 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 | 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, void *b= uf); > > > +static void virtnet_rq_free_unused_buf(struct virtqueue *vq, void *b= uf); > > > + > > > static bool is_xdp_frame(void *ptr) > > > { > > > return (unsigned long)ptr & VIRTIO_XDP_FLAG; > > > @@ -1369,6 +1372,15 @@ static void virtnet_napi_enable(struct virtque= ue *vq, struct napi_struct *napi) > > > { > > > napi_enable(napi); > > > > > > + /* Check if vq is in reset state. The normal reset/resize process= will > > > + * be protected by napi. However, the protection of napi is only = enabled > > > + * during the operation, and the protection of napi will end afte= r the > > > + * operation is completed. If re-enable fails during the process,= 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_N= O_VECTOR) > + enable_irq(pci_irq_vector(vp_dev->pci_dev, info->msix_vec= tor)); > + > + vq->reset =3D false; > + > + return 0; > +} > > > There are three situations where an error will be returned. These are the > situations I want to handle. Right, but it looks harmless if we just schedule the NAPI without the check= . > > But I'm rethinking the question, and I feel like you're right, although t= he > hardware setup may fail. We can no longer sync with the hardware. But usi= ng 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. > > > > > > > > + > > > /* If all buffers were filled by other side before we napi_enable= d, we > > > * won't get another interrupt, so process any outstanding packet= s now. > > > * Call local_bh_enable after to trigger softIRQ processing. > > > @@ -1413,6 +1425,15 @@ static void refill_work(struct work_struct *wo= rk) > > > 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 work? > > I think there is no need to cancel the work here, because napi_disable wi= ll 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 unexpect= edly? 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 receiv= e_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. Comman= ds > > > * supported by the hypervisor, as indicated by feature bits, shoul= d > > > 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 9A357C433FE for ; Thu, 14 Apr 2022 09:30:22 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 307AE418AD; Thu, 14 Apr 2022 09:30:22 +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 yV7Uprni0cJS; Thu, 14 Apr 2022 09:30:21 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 540A8418B3; Thu, 14 Apr 2022 09:30:20 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 23DB7C002F; Thu, 14 Apr 2022 09:30:20 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2DFB7C002C for ; Thu, 14 Apr 2022 09:30:19 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 0BA4080FFE for ; Thu, 14 Apr 2022 09:30:19 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com 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 kzC2S0waccHV for ; Thu, 14 Apr 2022 09:30:18 +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 smtp1.osuosl.org (Postfix) with ESMTPS id 119AD83268 for ; Thu, 14 Apr 2022 09:30:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1649928616; 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=xTVIrXTky6oGSdrW6vSloYGYrjPuyKnFBXOPprwmmi4=; b=PXvhHDhY9PjaCWc7ZQNxbvd/jgqM71Bjb9qsqSMbiNkwKSBcgguYlKun7vVoGGEtzuB2Q5 EXiAr9afU/RsE6rFiLtiRgXAqrw6Z4G1F4LOCcWt95/pVZGPNoH46ZsrLUXHry6pVCOM5i bgevHElrbPQgaABKU6nbyZITQlDEZqs= Received: from mail-lf1-f69.google.com (mail-lf1-f69.google.com [209.85.167.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-596-8IWNISyOO6Wuj9U0MSYKiQ-1; Thu, 14 Apr 2022 05:30:15 -0400 X-MC-Unique: 8IWNISyOO6Wuj9U0MSYKiQ-1 Received: by mail-lf1-f69.google.com with SMTP id t17-20020a056512069100b0046bb606d8efso2099019lfe.12 for ; Thu, 14 Apr 2022 02:30:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xTVIrXTky6oGSdrW6vSloYGYrjPuyKnFBXOPprwmmi4=; b=X7Tro2IW1gLXFLlkG9n6M/V7TKPsOINNp93amzGsPOLt/MUmYZ6DQqO7Cirl83/+to tYsFG4p30ddMsVTZr52Ez0NzJSQUHgWYB3A2Ppr7GzY6rPRue6okWFR0XhffIH9NfBsj 1G4x5gfIrtrJmnArhNG0oAnkpqsh+IGArLj4GJ0/wC1aJW8gcDfoKNSdIkkUWNbsYA/7 igZUtXM8j0rnOxIq+YDLWawgkfX46haDY4W8KNNkrlgNzQWx+wGyB9Vc/+MLceUiT4jt BO5y7iNx9E53PhdRZ0hhYr68SFf5HZvchDMMewu5QHpl5ju1fnxauQ3TInITscFYQNvG kw6Q== X-Gm-Message-State: AOAM532XCjtAQIn0QICaNEmgi01DVKLjH9HpsL807q35s/TtcfOWAUKB ku6xktdJxYYamgBnzSY9trE9IadXRS8tkdhxwxJFlEimGQuHY40Hb4lavZ/63fJ2vTK3g8LWgNz oD+eUc8k3ZYtD/13cY4e0bZ38mbIQswpSZXZrFdFg22qNpCqSMoBTIq8phw== X-Received: by 2002:a05:6512:1395:b0:446:d382:79a5 with SMTP id p21-20020a056512139500b00446d38279a5mr1356173lfa.210.1649928613816; Thu, 14 Apr 2022 02:30:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzr4h2U/Fe61ajhZ/yffQb0+ghbUvKwuL6LwQ7b0T02xdZ+hsOeGv/9VI/5jkuBOiC1HbxYHbK+Cv1CpJTPCfU= X-Received: by 2002:a05:6512:1395:b0:446:d382:79a5 with SMTP id p21-20020a056512139500b00446d38279a5mr1356123lfa.210.1649928613476; Thu, 14 Apr 2022 02:30:13 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> From: Jason Wang Date: Thu, 14 Apr 2022 17:30:02 +0800 Message-ID: Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize To: Xuan Zhuo 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 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gV2VkLCBBcHIgMTMsIDIwMjIgYXQgNDo0NyBQTSBYdWFuIFpodW8gPHh1YW56aHVvQGxpbnV4 LmFsaWJhYmEuY29tPiB3cm90ZToKPgo+IE9uIFdlZCwgMTMgQXByIDIwMjIgMTY6MDA6MTggKzA4 MDAsIEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+IHdyb3RlOgo+ID4KPiA+IOWcqCAy MDIyLzQvNiDkuIrljYgxMTo0MywgWHVhbiBaaHVvIOWGmemBkzoKPiA+ID4gVGhpcyBwYXRjaCBp bXBsZW1lbnRzIHRoZSByZXNpemUgZnVuY3Rpb24gb2YgdGhlIHJ4LCB0eCBxdWV1ZXMuCj4gPiA+ IEJhc2VkIG9uIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgcmlu ZyBudW0gb2YgdGhlCj4gPiA+IHF1ZXVlLgo+ID4gPgo+ID4gPiBUaGVyZSBtYXkgYmUgYW4gZXhj ZXB0aW9uIGR1cmluZyB0aGUgcmVzaXplIHByb2Nlc3MsIHRoZSByZXNpemUgbWF5Cj4gPiA+IGZh aWwsIG9yIHRoZSB2cSBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuIEVpdGhlciB3YXksIHdlIG11c3Qg ZXhlY3V0ZQo+ID4gPiBuYXBpX2VuYWJsZSgpLiBCZWNhdXNlIG5hcGlfZGlzYWJsZSBpcyBzaW1p bGFyIHRvIGEgbG9jaywgbmFwaV9lbmFibGUKPiA+ID4gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2Fs bGluZyBuYXBpX2Rpc2FibGUuCj4gPiA+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IFh1YW4gWmh1byA8 eHVhbnpodW9AbGludXguYWxpYmFiYS5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgIGRyaXZlcnMvbmV0 L3ZpcnRpb19uZXQuYyB8IDgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ID4gICAxIGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKQo+ID4gPgo+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlv X25ldC5jCj4gPiA+IGluZGV4IGI4YmYwMDUyNTE3Ny4uYmE2ODU5ZjMwNWY3IDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gKysrIGIvZHJpdmVycy9uZXQv dmlydGlvX25ldC5jCj4gPiA+IEBAIC0yNTEsNiArMjUxLDkgQEAgc3RydWN0IHBhZGRlZF92bmV0 X2hkciB7Cj4gPiA+ICAgICBjaGFyIHBhZGRpbmdbNF07Cj4gPiA+ICAgfTsKPiA+ID4KPiA+ID4g K3N0YXRpYyB2b2lkIHZpcnRuZXRfc3FfZnJlZV91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUg KnZxLCB2b2lkICpidWYpOwo+ID4gPiArc3RhdGljIHZvaWQgdmlydG5ldF9ycV9mcmVlX3VudXNl ZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHZvaWQgKmJ1Zik7Cj4gPiA+ICsKPiA+ID4gICBz dGF0aWMgYm9vbCBpc194ZHBfZnJhbWUodm9pZCAqcHRyKQo+ID4gPiAgIHsKPiA+ID4gICAgIHJl dHVybiAodW5zaWduZWQgbG9uZylwdHIgJiBWSVJUSU9fWERQX0ZMQUc7Cj4gPiA+IEBAIC0xMzY5 LDYgKzEzNzIsMTUgQEAgc3RhdGljIHZvaWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3Qgdmly dHF1ZXVlICp2cSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQo+ID4gPiAgIHsKPiA+ID4gICAg IG5hcGlfZW5hYmxlKG5hcGkpOwo+ID4gPgo+ID4gPiArICAgLyogQ2hlY2sgaWYgdnEgaXMgaW4g cmVzZXQgc3RhdGUuIFRoZSBub3JtYWwgcmVzZXQvcmVzaXplIHByb2Nlc3Mgd2lsbAo+ID4gPiAr ICAgICogYmUgcHJvdGVjdGVkIGJ5IG5hcGkuIEhvd2V2ZXIsIHRoZSBwcm90ZWN0aW9uIG9mIG5h cGkgaXMgb25seSBlbmFibGVkCj4gPiA+ICsgICAgKiBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgYW5k IHRoZSBwcm90ZWN0aW9uIG9mIG5hcGkgd2lsbCBlbmQgYWZ0ZXIgdGhlCj4gPiA+ICsgICAgKiBv cGVyYXRpb24gaXMgY29tcGxldGVkLiBJZiByZS1lbmFibGUgZmFpbHMgZHVyaW5nIHRoZSBwcm9j ZXNzLCB2cQo+ID4gPiArICAgICogd2lsbCByZW1haW4gdW5hdmFpbGFibGUgd2l0aCByZXNldCBz dGF0ZS4KPiA+ID4gKyAgICAqLwo+ID4gPiArICAgaWYgKHZxLT5yZXNldCkKPiA+ID4gKyAgICAg ICAgICAgcmV0dXJuOwo+ID4KPiA+Cj4gPiBJIGRvbid0IGdldCB3aGVuIGNvdWxkIHdlIGhpdCB0 aGlzIGNvbmRpdGlvbi4KPgo+Cj4gSW4gcGF0Y2ggMjMsIHRoZSBjb2RlIHRvIGltcGxlbWVudCBy ZS1lbmFibGUgdnEgaXMgYXMgZm9sbG93czoKPgo+ICtzdGF0aWMgaW50IHZwX21vZGVybl9lbmFi bGVfcmVzZXRfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gK3sKPiArICAgICAgIHN0cnVjdCB2 aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZxLT52ZGV2KTsKPiArICAg ICAgIHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYgPSAmdnBfZGV2LT5tZGV2 Owo+ICsgICAgICAgc3RydWN0IHZpcnRpb19wY2lfdnFfaW5mbyAqaW5mbzsKPiArICAgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MsIGluZGV4Owo+ICsgICAgICAgaW50IGVycjsKPiArCj4gKyAgICAg ICBpZiAoIXZxLT5yZXNldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiArCj4g KyAgICAgICBpbmRleCA9IHZxLT5pbmRleDsKPiArICAgICAgIGluZm8gPSB2cF9kZXYtPnZxc1tp bmRleF07Cj4gKwo+ICsgICAgICAgLyogY2hlY2sgcXVldWUgcmVzZXQgc3RhdHVzICovCj4gKyAg ICAgICBpZiAodnBfbW9kZXJuX2dldF9xdWV1ZV9yZXNldChtZGV2LCBpbmRleCkgIT0gMSkKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiArCj4gKyAgICAgICBlcnIgPSB2cF9hY3Rp dmVfdnEodnEsIGluZm8tPm1zaXhfdmVjdG9yKTsKPiArICAgICAgIGlmIChlcnIpCj4gKyAgICAg ICAgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgICAgaWYgKHZxLT5jYWxsYmFjaykgewo+ ICsgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7 Cj4gKyAgICAgICAgICAgICAgIGxpc3RfYWRkKCZpbmZvLT5ub2RlLCAmdnBfZGV2LT52aXJ0cXVl dWVzKTsKPiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBfZGV2LT5s b2NrLCBmbGFncyk7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBJTklUX0xJ U1RfSEVBRCgmaW5mby0+bm9kZSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgdnBfbW9kZXJu X3NldF9xdWV1ZV9lbmFibGUoJnZwX2Rldi0+bWRldiwgaW5kZXgsIHRydWUpOwo+ICsKPiArICAg ICAgIGlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzICYmIGluZm8tPm1zaXhfdmVjdG9yICE9IFZJ UlRJT19NU0lfTk9fVkVDVE9SKQo+ICsgICAgICAgICAgICAgICBlbmFibGVfaXJxKHBjaV9pcnFf dmVjdG9yKHZwX2Rldi0+cGNpX2RldiwgaW5mby0+bXNpeF92ZWN0b3IpKTsKPiArCj4gKyAgICAg ICB2cS0+cmVzZXQgPSBmYWxzZTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+Cj4KPiBU aGVyZSBhcmUgdGhyZWUgc2l0dWF0aW9ucyB3aGVyZSBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVk LiBUaGVzZSBhcmUgdGhlCj4gc2l0dWF0aW9ucyBJIHdhbnQgdG8gaGFuZGxlLgoKUmlnaHQsIGJ1 dCBpdCBsb29rcyBoYXJtbGVzcyBpZiB3ZSBqdXN0IHNjaGVkdWxlIHRoZSBOQVBJIHdpdGhvdXQg dGhlIGNoZWNrLgoKPgo+IEJ1dCBJJ20gcmV0aGlua2luZyB0aGUgcXVlc3Rpb24sIGFuZCBJIGZl ZWwgbGlrZSB5b3UncmUgcmlnaHQsIGFsdGhvdWdoIHRoZQo+IGhhcmR3YXJlIHNldHVwIG1heSBm YWlsLiBXZSBjYW4gbm8gbG9uZ2VyIHN5bmMgd2l0aCB0aGUgaGFyZHdhcmUuIEJ1dCB1c2luZyBp dAo+IGFzIGEgbm9ybWFsIHZxIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvYmxlbXMuCgpOb3RlIHRoYXQg d2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgYnVnZ3kobWFsaWNvdXMpIGRldmljZSB3b24ndCBjcmFz aAp0aGUgY29kZXMgYnkgY2hhbmdpbmcgdGhlIHF1ZXVlX3Jlc2V0IHZhbHVlIGF0IGl0cyB3aWxs LgoKPgo+ID4KPiA+Cj4gPiA+ICsKPiA+ID4gICAgIC8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmls bGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKPiA+ID4gICAgICAq IHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcg cGFja2V0cyBub3cuCj4gPiA+ICAgICAgKiBDYWxsIGxvY2FsX2JoX2VuYWJsZSBhZnRlciB0byB0 cmlnZ2VyIHNvZnRJUlEgcHJvY2Vzc2luZy4KPiA+ID4gQEAgLTE0MTMsNiArMTQyNSwxNSBAQCBz dGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ICAg ICAgICAgICAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSA9ICZ2aS0+cnFbaV07Cj4gPiA+Cj4g PiA+ICAgICAgICAgICAgIG5hcGlfZGlzYWJsZSgmcnEtPm5hcGkpOwo+ID4gPiArCj4gPiA+ICsg ICAgICAgICAgIC8qIENoZWNrIGlmIHZxIGlzIGluIHJlc2V0IHN0YXRlLiBTZWUgbW9yZSBpbgo+ ID4gPiArICAgICAgICAgICAgKiB2aXJ0bmV0X25hcGlfZW5hYmxlKCkKPiA+ID4gKyAgICAgICAg ICAgICovCj4gPiA+ICsgICAgICAgICAgIGlmIChycS0+dnEtPnJlc2V0KSB7Cj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgdmlydG5ldF9uYXBpX2VuYWJsZShycS0+dnEsICZycS0+bmFwaSk7Cj4g PiA+ICsgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ICsgICAgICAgICAgIH0KPiA+ Cj4gPgo+ID4gQ2FuIHdlIGRvIHNvbWV0aGluZyBzaW1pbGFyIGluIHZpcnRuZXRfY2xvc2UoKSBi eSBjYW5jZWxpbmcgdGhlIHdvcms/Cj4KPiBJIHRoaW5rIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2Fu Y2VsIHRoZSB3b3JrIGhlcmUsIGJlY2F1c2UgbmFwaV9kaXNhYmxlIHdpbGwgd2FpdAo+IGZvciB0 aGUgbmFwaV9lbmFibGUgb2YgdGhlIHJlc2l6ZS4gU28gaWYgdGhlIHJlLWVuYWJsZSBmYWlsZWQg dnEgaXMgdXNlZCBhcyBhIG5vcm1hbAo+IHZxLCB0aGlzIGxvZ2ljIGNhbiBiZSByZW1vdmVkLgoK QWN0dWFsbHkgSSBtZWFudCB0aGUgcGFydCBvZiB2aXJ0bmV0X3J4X3Jlc2l6ZSgpLgoKSWYgd2Ug ZG9uJ3Qgc3luY2hyb25pemUgd2l0aCB0aGUgcmVmaWxsIHdvcmssIGl0IG1pZ2h0IGVuYWJsZSBO QVBJIHVuZXhwZWN0ZWRseT8KClRoYW5rcwoKPgo+Cj4gPgo+ID4KPiA+ID4gKwo+ID4gPiAgICAg ICAgICAgICBzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9yZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCk7 Cj4gPiA+ICAgICAgICAgICAgIHZpcnRuZXRfbmFwaV9lbmFibGUocnEtPnZxLCAmcnEtPm5hcGkp Owo+ID4gPgo+ID4gPiBAQCAtMTUyMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRf cG9sbF9jbGVhbnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ID4gICAgIGlmICghc3Et Pm5hcGkud2VpZ2h0IHx8IGlzX3hkcF9yYXdfYnVmZmVyX3F1ZXVlKHZpLCBpbmRleCkpCj4gPiA+ ICAgICAgICAgICAgIHJldHVybjsKPiA+ID4KPiA+ID4gKyAgIC8qIENoZWNrIGlmIHZxIGlzIGlu IHJlc2V0IHN0YXRlLiBTZWUgbW9yZSBpbiB2aXJ0bmV0X25hcGlfZW5hYmxlKCkgKi8KPiA+ID4g KyAgIGlmIChzcS0+dnEtPnJlc2V0KQo+ID4gPiArICAgICAgICAgICByZXR1cm47Cj4gPgo+ID4K PiA+IFdlJ3ZlIGRpc2FibGVkIFRYIG5hcGksIGFueSBjaGFuY2Ugd2UgY2FuIHN0aWxsIGhpdCB0 aGlzPwo+Cj4gU2FtZSBhcyBhYm92ZS4KPgo+ID4KPiA+Cj4gPiA+ICsKPiA+ID4gICAgIGlmIChf X25ldGlmX3R4X3RyeWxvY2sodHhxKSkgewo+ID4gPiAgICAgICAgICAgICBkbyB7Cj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgdmlydHF1ZXVlX2Rpc2FibGVfY2Ioc3EtPnZxKTsKPiA+ID4gQEAg LTE3NjksNiArMTc5NCw2MiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQo+ID4gPiAgICAgcmV0dXJuIE5F VERFVl9UWF9PSzsKPiA+ID4gICB9Cj4gPiA+Cj4gPiA+ICtzdGF0aWMgaW50IHZpcnRuZXRfcnhf cmVzaXplKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLCB1MzIgcmluZ19udW0pCj4gPiA+ICt7Cj4g PiA+ICsgICBpbnQgZXJyOwo+ID4gPiArCj4gPiA+ICsgICBuYXBpX2Rpc2FibGUoJnJxLT5uYXBp KTsKPiA+ID4gKwo+ID4gPiArICAgZXJyID0gdmlydHF1ZXVlX3Jlc2l6ZShycS0+dnEsIHJpbmdf bnVtLCB2aXJ0bmV0X3JxX2ZyZWVfdW51c2VkX2J1Zik7Cj4gPiA+ICsgICBpZiAoZXJyKQo+ID4g PiArICAgICAgICAgICBnb3RvIGVycjsKPiA+ID4gKwo+ID4gPiArICAgaWYgKCF0cnlfZmlsbF9y ZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCkpCj4gPiA+ICsgICAgICAgICAgIHNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmdmktPnJlZmlsbCwgMCk7Cj4gPiA+ICsKPiA+ID4gKyAgIHZpcnRuZXRfbmFwaV9l bmFibGUocnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gPiArICAgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ ID4gK2VycjoKPiA+ID4gKyAgIG5ldGRldl9lcnIodmktPmRldiwKPiA+ID4gKyAgICAgICAgICAg ICAgInJlc2V0IHJ4IHJlc2V0IHZxIGZhaWw6IHJ4IHF1ZXVlIGluZGV4OiAldGQgZXJyOiAlZFxu IiwKPiA+ID4gKyAgICAgICAgICAgICAgcnEgLSB2aS0+cnEsIGVycik7Cj4gPiA+ICsgICB2aXJ0 bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4gKyAgIHJldHVybiBlcnI7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgdmlydG5ldF90eF9yZXNpemUoc3Ry dWN0IHZpcnRuZXRfaW5mbyAqdmksCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2VuZF9xdWV1ZSAqc3EsIHUzMiByaW5nX251bSkKPiA+ID4gK3sKPiA+ID4gKyAgIHN0cnVj dCBuZXRkZXZfcXVldWUgKnR4cTsKPiA+ID4gKyAgIGludCBlcnIsIHFpbmRleDsKPiA+ID4gKwo+ ID4gPiArICAgcWluZGV4ID0gc3EgLSB2aS0+c3E7Cj4gPiA+ICsKPiA+ID4gKyAgIHZpcnRuZXRf bmFwaV90eF9kaXNhYmxlKCZzcS0+bmFwaSk7Cj4gPiA+ICsKPiA+ID4gKyAgIHR4cSA9IG5ldGRl dl9nZXRfdHhfcXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gKyAgIF9fbmV0aWZfdHhfbG9j a19iaCh0eHEpOwo+ID4gPiArICAgbmV0aWZfc3RvcF9zdWJxdWV1ZSh2aS0+ZGV2LCBxaW5kZXgp Owo+ID4gPiArICAgX19uZXRpZl90eF91bmxvY2tfYmgodHhxKTsKPiA+ID4gKwo+ID4gPiArICAg ZXJyID0gdmlydHF1ZXVlX3Jlc2l6ZShzcS0+dnEsIHJpbmdfbnVtLCB2aXJ0bmV0X3NxX2ZyZWVf dW51c2VkX2J1Zik7Cj4gPiA+ICsgICBpZiAoZXJyKQo+ID4gPiArICAgICAgICAgICBnb3RvIGVy cjsKPiA+ID4gKwo+ID4gPiArICAgbmV0aWZfc3RhcnRfc3VicXVldWUodmktPmRldiwgcWluZGV4 KTsKPiA+ID4gKyAgIHZpcnRuZXRfbmFwaV90eF9lbmFibGUodmksIHNxLT52cSwgJnNxLT5uYXBp KTsKPiA+ID4gKyAgIHJldHVybiAwOwo+ID4gPiArCj4gPiA+ICtlcnI6Cj4gPgo+ID4KPiA+IEkg Z3Vlc3Mgd2UgY2FuIHN0aWxsIHN0YXJ0IHRoZSBxdWV1ZSBpbiB0aGlzIGNhc2U/IChTaW5jZSB3 ZSBkb24ndAo+ID4gY2hhbmdlIHRoZSBxdWV1ZSBpZiByZXNpemUgZmFpbHMpLgo+Cj4gWWVzLCB5 b3UgYXJlIHJpZ2h0Lgo+Cj4gVGhhbmtzLgo+Cj4gPgo+ID4KPiA+ID4gKyAgIG5ldGRldl9lcnIo dmktPmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgInJlc2V0IHR4IHJlc2V0IHZxIGZhaWw6IHR4 IHF1ZXVlIGluZGV4OiAldGQgZXJyOiAlZFxuIiwKPiA+ID4gKyAgICAgICAgICAgICAgc3EgLSB2 aS0+c3EsIGVycik7Cj4gPiA+ICsgICB2aXJ0bmV0X25hcGlfdHhfZW5hYmxlKHZpLCBzcS0+dnEs ICZzcS0+bmFwaSk7Cj4gPiA+ICsgICByZXR1cm4gZXJyOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICAgLyoKPiA+ID4gICAgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBh bmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKPiA+ID4gICAgKiBzdXBwb3J0ZWQgYnkgdGhlIGh5 cGVydmlzb3IsIGFzIGluZGljYXRlZCBieSBmZWF0dXJlIGJpdHMsIHNob3VsZAo+ID4KPgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRp b24gbWFpbGluZyBsaXN0ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3Jn Cmh0dHBzOi8vbGlzdHMubGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1 YWxpemF0aW9u From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nevny-004tsl-7p for linux-um@lists.infradead.org; Thu, 14 Apr 2022 09:30:24 +0000 Received: by mail-lf1-f72.google.com with SMTP id k11-20020a05651239cb00b0046bbe5d500eso2105980lfu.7 for ; Thu, 14 Apr 2022 02:30:17 -0700 (PDT) MIME-Version: 1.0 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> In-Reply-To: <1649838917.6726515-10-xuanzhuo@linux.alibaba.com> From: Jason Wang Date: Thu, 14 Apr 2022 17:30:02 +0800 Message-ID: Subject: Re: [PATCH v9 31/32] virtio_net: support rx/tx queue resize List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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: Xuan Zhuo 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 T24gV2VkLCBBcHIgMTMsIDIwMjIgYXQgNDo0NyBQTSBYdWFuIFpodW8gPHh1YW56aHVvQGxpbnV4 LmFsaWJhYmEuY29tPiB3cm90ZToKPgo+IE9uIFdlZCwgMTMgQXByIDIwMjIgMTY6MDA6MTggKzA4 MDAsIEphc29uIFdhbmcgPGphc293YW5nQHJlZGhhdC5jb20+IHdyb3RlOgo+ID4KPiA+IOWcqCAy MDIyLzQvNiDkuIrljYgxMTo0MywgWHVhbiBaaHVvIOWGmemBkzoKPiA+ID4gVGhpcyBwYXRjaCBp bXBsZW1lbnRzIHRoZSByZXNpemUgZnVuY3Rpb24gb2YgdGhlIHJ4LCB0eCBxdWV1ZXMuCj4gPiA+ IEJhc2VkIG9uIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgcmlu ZyBudW0gb2YgdGhlCj4gPiA+IHF1ZXVlLgo+ID4gPgo+ID4gPiBUaGVyZSBtYXkgYmUgYW4gZXhj ZXB0aW9uIGR1cmluZyB0aGUgcmVzaXplIHByb2Nlc3MsIHRoZSByZXNpemUgbWF5Cj4gPiA+IGZh aWwsIG9yIHRoZSB2cSBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuIEVpdGhlciB3YXksIHdlIG11c3Qg ZXhlY3V0ZQo+ID4gPiBuYXBpX2VuYWJsZSgpLiBCZWNhdXNlIG5hcGlfZGlzYWJsZSBpcyBzaW1p bGFyIHRvIGEgbG9jaywgbmFwaV9lbmFibGUKPiA+ID4gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2Fs bGluZyBuYXBpX2Rpc2FibGUuCj4gPiA+Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IFh1YW4gWmh1byA8 eHVhbnpodW9AbGludXguYWxpYmFiYS5jb20+Cj4gPiA+IC0tLQo+ID4gPiAgIGRyaXZlcnMvbmV0 L3ZpcnRpb19uZXQuYyB8IDgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+ID4gICAxIGZpbGUgY2hhbmdlZCwgODEgaW5zZXJ0aW9ucygrKQo+ID4gPgo+ID4gPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlv X25ldC5jCj4gPiA+IGluZGV4IGI4YmYwMDUyNTE3Ny4uYmE2ODU5ZjMwNWY3IDEwMDY0NAo+ID4g PiAtLS0gYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ID4gKysrIGIvZHJpdmVycy9uZXQv dmlydGlvX25ldC5jCj4gPiA+IEBAIC0yNTEsNiArMjUxLDkgQEAgc3RydWN0IHBhZGRlZF92bmV0 X2hkciB7Cj4gPiA+ICAgICBjaGFyIHBhZGRpbmdbNF07Cj4gPiA+ICAgfTsKPiA+ID4KPiA+ID4g K3N0YXRpYyB2b2lkIHZpcnRuZXRfc3FfZnJlZV91bnVzZWRfYnVmKHN0cnVjdCB2aXJ0cXVldWUg KnZxLCB2b2lkICpidWYpOwo+ID4gPiArc3RhdGljIHZvaWQgdmlydG5ldF9ycV9mcmVlX3VudXNl ZF9idWYoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHZvaWQgKmJ1Zik7Cj4gPiA+ICsKPiA+ID4gICBz dGF0aWMgYm9vbCBpc194ZHBfZnJhbWUodm9pZCAqcHRyKQo+ID4gPiAgIHsKPiA+ID4gICAgIHJl dHVybiAodW5zaWduZWQgbG9uZylwdHIgJiBWSVJUSU9fWERQX0ZMQUc7Cj4gPiA+IEBAIC0xMzY5 LDYgKzEzNzIsMTUgQEAgc3RhdGljIHZvaWQgdmlydG5ldF9uYXBpX2VuYWJsZShzdHJ1Y3Qgdmly dHF1ZXVlICp2cSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQo+ID4gPiAgIHsKPiA+ID4gICAg IG5hcGlfZW5hYmxlKG5hcGkpOwo+ID4gPgo+ID4gPiArICAgLyogQ2hlY2sgaWYgdnEgaXMgaW4g cmVzZXQgc3RhdGUuIFRoZSBub3JtYWwgcmVzZXQvcmVzaXplIHByb2Nlc3Mgd2lsbAo+ID4gPiAr ICAgICogYmUgcHJvdGVjdGVkIGJ5IG5hcGkuIEhvd2V2ZXIsIHRoZSBwcm90ZWN0aW9uIG9mIG5h cGkgaXMgb25seSBlbmFibGVkCj4gPiA+ICsgICAgKiBkdXJpbmcgdGhlIG9wZXJhdGlvbiwgYW5k IHRoZSBwcm90ZWN0aW9uIG9mIG5hcGkgd2lsbCBlbmQgYWZ0ZXIgdGhlCj4gPiA+ICsgICAgKiBv cGVyYXRpb24gaXMgY29tcGxldGVkLiBJZiByZS1lbmFibGUgZmFpbHMgZHVyaW5nIHRoZSBwcm9j ZXNzLCB2cQo+ID4gPiArICAgICogd2lsbCByZW1haW4gdW5hdmFpbGFibGUgd2l0aCByZXNldCBz dGF0ZS4KPiA+ID4gKyAgICAqLwo+ID4gPiArICAgaWYgKHZxLT5yZXNldCkKPiA+ID4gKyAgICAg ICAgICAgcmV0dXJuOwo+ID4KPiA+Cj4gPiBJIGRvbid0IGdldCB3aGVuIGNvdWxkIHdlIGhpdCB0 aGlzIGNvbmRpdGlvbi4KPgo+Cj4gSW4gcGF0Y2ggMjMsIHRoZSBjb2RlIHRvIGltcGxlbWVudCBy ZS1lbmFibGUgdnEgaXMgYXMgZm9sbG93czoKPgo+ICtzdGF0aWMgaW50IHZwX21vZGVybl9lbmFi bGVfcmVzZXRfdnEoc3RydWN0IHZpcnRxdWV1ZSAqdnEpCj4gK3sKPiArICAgICAgIHN0cnVjdCB2 aXJ0aW9fcGNpX2RldmljZSAqdnBfZGV2ID0gdG9fdnBfZGV2aWNlKHZxLT52ZGV2KTsKPiArICAg ICAgIHN0cnVjdCB2aXJ0aW9fcGNpX21vZGVybl9kZXZpY2UgKm1kZXYgPSAmdnBfZGV2LT5tZGV2 Owo+ICsgICAgICAgc3RydWN0IHZpcnRpb19wY2lfdnFfaW5mbyAqaW5mbzsKPiArICAgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MsIGluZGV4Owo+ICsgICAgICAgaW50IGVycjsKPiArCj4gKyAgICAg ICBpZiAoIXZxLT5yZXNldCkKPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiArCj4g KyAgICAgICBpbmRleCA9IHZxLT5pbmRleDsKPiArICAgICAgIGluZm8gPSB2cF9kZXYtPnZxc1tp bmRleF07Cj4gKwo+ICsgICAgICAgLyogY2hlY2sgcXVldWUgcmVzZXQgc3RhdHVzICovCj4gKyAg ICAgICBpZiAodnBfbW9kZXJuX2dldF9xdWV1ZV9yZXNldChtZGV2LCBpbmRleCkgIT0gMSkKPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPiArCj4gKyAgICAgICBlcnIgPSB2cF9hY3Rp dmVfdnEodnEsIGluZm8tPm1zaXhfdmVjdG9yKTsKPiArICAgICAgIGlmIChlcnIpCj4gKyAgICAg ICAgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgICAgaWYgKHZxLT5jYWxsYmFjaykgewo+ ICsgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdnBfZGV2LT5sb2NrLCBmbGFncyk7 Cj4gKyAgICAgICAgICAgICAgIGxpc3RfYWRkKCZpbmZvLT5ub2RlLCAmdnBfZGV2LT52aXJ0cXVl dWVzKTsKPiArICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBfZGV2LT5s b2NrLCBmbGFncyk7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBJTklUX0xJ U1RfSEVBRCgmaW5mby0+bm9kZSk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgdnBfbW9kZXJu X3NldF9xdWV1ZV9lbmFibGUoJnZwX2Rldi0+bWRldiwgaW5kZXgsIHRydWUpOwo+ICsKPiArICAg ICAgIGlmICh2cF9kZXYtPnBlcl92cV92ZWN0b3JzICYmIGluZm8tPm1zaXhfdmVjdG9yICE9IFZJ UlRJT19NU0lfTk9fVkVDVE9SKQo+ICsgICAgICAgICAgICAgICBlbmFibGVfaXJxKHBjaV9pcnFf dmVjdG9yKHZwX2Rldi0+cGNpX2RldiwgaW5mby0+bXNpeF92ZWN0b3IpKTsKPiArCj4gKyAgICAg ICB2cS0+cmVzZXQgPSBmYWxzZTsKPiArCj4gKyAgICAgICByZXR1cm4gMDsKPiArfQo+Cj4KPiBU aGVyZSBhcmUgdGhyZWUgc2l0dWF0aW9ucyB3aGVyZSBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVk LiBUaGVzZSBhcmUgdGhlCj4gc2l0dWF0aW9ucyBJIHdhbnQgdG8gaGFuZGxlLgoKUmlnaHQsIGJ1 dCBpdCBsb29rcyBoYXJtbGVzcyBpZiB3ZSBqdXN0IHNjaGVkdWxlIHRoZSBOQVBJIHdpdGhvdXQg dGhlIGNoZWNrLgoKPgo+IEJ1dCBJJ20gcmV0aGlua2luZyB0aGUgcXVlc3Rpb24sIGFuZCBJIGZl ZWwgbGlrZSB5b3UncmUgcmlnaHQsIGFsdGhvdWdoIHRoZQo+IGhhcmR3YXJlIHNldHVwIG1heSBm YWlsLiBXZSBjYW4gbm8gbG9uZ2VyIHN5bmMgd2l0aCB0aGUgaGFyZHdhcmUuIEJ1dCB1c2luZyBp dAo+IGFzIGEgbm9ybWFsIHZxIGRvZXNuJ3QgaGF2ZSBhbnkgcHJvYmxlbXMuCgpOb3RlIHRoYXQg d2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUgYnVnZ3kobWFsaWNvdXMpIGRldmljZSB3b24ndCBjcmFz aAp0aGUgY29kZXMgYnkgY2hhbmdpbmcgdGhlIHF1ZXVlX3Jlc2V0IHZhbHVlIGF0IGl0cyB3aWxs LgoKPgo+ID4KPiA+Cj4gPiA+ICsKPiA+ID4gICAgIC8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmls bGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKPiA+ID4gICAgICAq IHdvbid0IGdldCBhbm90aGVyIGludGVycnVwdCwgc28gcHJvY2VzcyBhbnkgb3V0c3RhbmRpbmcg cGFja2V0cyBub3cuCj4gPiA+ICAgICAgKiBDYWxsIGxvY2FsX2JoX2VuYWJsZSBhZnRlciB0byB0 cmlnZ2VyIHNvZnRJUlEgcHJvY2Vzc2luZy4KPiA+ID4gQEAgLTE0MTMsNiArMTQyNSwxNSBAQCBz dGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gPiA+ICAg ICAgICAgICAgIHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSA9ICZ2aS0+cnFbaV07Cj4gPiA+Cj4g PiA+ICAgICAgICAgICAgIG5hcGlfZGlzYWJsZSgmcnEtPm5hcGkpOwo+ID4gPiArCj4gPiA+ICsg ICAgICAgICAgIC8qIENoZWNrIGlmIHZxIGlzIGluIHJlc2V0IHN0YXRlLiBTZWUgbW9yZSBpbgo+ ID4gPiArICAgICAgICAgICAgKiB2aXJ0bmV0X25hcGlfZW5hYmxlKCkKPiA+ID4gKyAgICAgICAg ICAgICovCj4gPiA+ICsgICAgICAgICAgIGlmIChycS0+dnEtPnJlc2V0KSB7Cj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgdmlydG5ldF9uYXBpX2VuYWJsZShycS0+dnEsICZycS0+bmFwaSk7Cj4g PiA+ICsgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gPiA+ICsgICAgICAgICAgIH0KPiA+ Cj4gPgo+ID4gQ2FuIHdlIGRvIHNvbWV0aGluZyBzaW1pbGFyIGluIHZpcnRuZXRfY2xvc2UoKSBi eSBjYW5jZWxpbmcgdGhlIHdvcms/Cj4KPiBJIHRoaW5rIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2Fu Y2VsIHRoZSB3b3JrIGhlcmUsIGJlY2F1c2UgbmFwaV9kaXNhYmxlIHdpbGwgd2FpdAo+IGZvciB0 aGUgbmFwaV9lbmFibGUgb2YgdGhlIHJlc2l6ZS4gU28gaWYgdGhlIHJlLWVuYWJsZSBmYWlsZWQg dnEgaXMgdXNlZCBhcyBhIG5vcm1hbAo+IHZxLCB0aGlzIGxvZ2ljIGNhbiBiZSByZW1vdmVkLgoK QWN0dWFsbHkgSSBtZWFudCB0aGUgcGFydCBvZiB2aXJ0bmV0X3J4X3Jlc2l6ZSgpLgoKSWYgd2Ug ZG9uJ3Qgc3luY2hyb25pemUgd2l0aCB0aGUgcmVmaWxsIHdvcmssIGl0IG1pZ2h0IGVuYWJsZSBO QVBJIHVuZXhwZWN0ZWRseT8KClRoYW5rcwoKPgo+Cj4gPgo+ID4KPiA+ID4gKwo+ID4gPiAgICAg ICAgICAgICBzdGlsbF9lbXB0eSA9ICF0cnlfZmlsbF9yZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCk7 Cj4gPiA+ICAgICAgICAgICAgIHZpcnRuZXRfbmFwaV9lbmFibGUocnEtPnZxLCAmcnEtPm5hcGkp Owo+ID4gPgo+ID4gPiBAQCAtMTUyMyw2ICsxNTQ0LDEwIEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRf cG9sbF9jbGVhbnR4KHN0cnVjdCByZWNlaXZlX3F1ZXVlICpycSkKPiA+ID4gICAgIGlmICghc3Et Pm5hcGkud2VpZ2h0IHx8IGlzX3hkcF9yYXdfYnVmZmVyX3F1ZXVlKHZpLCBpbmRleCkpCj4gPiA+ ICAgICAgICAgICAgIHJldHVybjsKPiA+ID4KPiA+ID4gKyAgIC8qIENoZWNrIGlmIHZxIGlzIGlu IHJlc2V0IHN0YXRlLiBTZWUgbW9yZSBpbiB2aXJ0bmV0X25hcGlfZW5hYmxlKCkgKi8KPiA+ID4g KyAgIGlmIChzcS0+dnEtPnJlc2V0KQo+ID4gPiArICAgICAgICAgICByZXR1cm47Cj4gPgo+ID4K PiA+IFdlJ3ZlIGRpc2FibGVkIFRYIG5hcGksIGFueSBjaGFuY2Ugd2UgY2FuIHN0aWxsIGhpdCB0 aGlzPwo+Cj4gU2FtZSBhcyBhYm92ZS4KPgo+ID4KPiA+Cj4gPiA+ICsKPiA+ID4gICAgIGlmIChf X25ldGlmX3R4X3RyeWxvY2sodHhxKSkgewo+ID4gPiAgICAgICAgICAgICBkbyB7Cj4gPiA+ICAg ICAgICAgICAgICAgICAgICAgdmlydHF1ZXVlX2Rpc2FibGVfY2Ioc3EtPnZxKTsKPiA+ID4gQEAg LTE3NjksNiArMTc5NCw2MiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3Qgc3RhcnRfeG1pdChzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQo+ID4gPiAgICAgcmV0dXJuIE5F VERFVl9UWF9PSzsKPiA+ID4gICB9Cj4gPiA+Cj4gPiA+ICtzdGF0aWMgaW50IHZpcnRuZXRfcnhf cmVzaXplKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHJlY2VpdmVfcXVldWUgKnJxLCB1MzIgcmluZ19udW0pCj4gPiA+ICt7Cj4g PiA+ICsgICBpbnQgZXJyOwo+ID4gPiArCj4gPiA+ICsgICBuYXBpX2Rpc2FibGUoJnJxLT5uYXBp KTsKPiA+ID4gKwo+ID4gPiArICAgZXJyID0gdmlydHF1ZXVlX3Jlc2l6ZShycS0+dnEsIHJpbmdf bnVtLCB2aXJ0bmV0X3JxX2ZyZWVfdW51c2VkX2J1Zik7Cj4gPiA+ICsgICBpZiAoZXJyKQo+ID4g PiArICAgICAgICAgICBnb3RvIGVycjsKPiA+ID4gKwo+ID4gPiArICAgaWYgKCF0cnlfZmlsbF9y ZWN2KHZpLCBycSwgR0ZQX0tFUk5FTCkpCj4gPiA+ICsgICAgICAgICAgIHNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmdmktPnJlZmlsbCwgMCk7Cj4gPiA+ICsKPiA+ID4gKyAgIHZpcnRuZXRfbmFwaV9l bmFibGUocnEtPnZxLCAmcnEtPm5hcGkpOwo+ID4gPiArICAgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ ID4gK2VycjoKPiA+ID4gKyAgIG5ldGRldl9lcnIodmktPmRldiwKPiA+ID4gKyAgICAgICAgICAg ICAgInJlc2V0IHJ4IHJlc2V0IHZxIGZhaWw6IHJ4IHF1ZXVlIGluZGV4OiAldGQgZXJyOiAlZFxu IiwKPiA+ID4gKyAgICAgICAgICAgICAgcnEgLSB2aS0+cnEsIGVycik7Cj4gPiA+ICsgICB2aXJ0 bmV0X25hcGlfZW5hYmxlKHJxLT52cSwgJnJxLT5uYXBpKTsKPiA+ID4gKyAgIHJldHVybiBlcnI7 Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgdmlydG5ldF90eF9yZXNpemUoc3Ry dWN0IHZpcnRuZXRfaW5mbyAqdmksCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2VuZF9xdWV1ZSAqc3EsIHUzMiByaW5nX251bSkKPiA+ID4gK3sKPiA+ID4gKyAgIHN0cnVj dCBuZXRkZXZfcXVldWUgKnR4cTsKPiA+ID4gKyAgIGludCBlcnIsIHFpbmRleDsKPiA+ID4gKwo+ ID4gPiArICAgcWluZGV4ID0gc3EgLSB2aS0+c3E7Cj4gPiA+ICsKPiA+ID4gKyAgIHZpcnRuZXRf bmFwaV90eF9kaXNhYmxlKCZzcS0+bmFwaSk7Cj4gPiA+ICsKPiA+ID4gKyAgIHR4cSA9IG5ldGRl dl9nZXRfdHhfcXVldWUodmktPmRldiwgcWluZGV4KTsKPiA+ID4gKyAgIF9fbmV0aWZfdHhfbG9j a19iaCh0eHEpOwo+ID4gPiArICAgbmV0aWZfc3RvcF9zdWJxdWV1ZSh2aS0+ZGV2LCBxaW5kZXgp Owo+ID4gPiArICAgX19uZXRpZl90eF91bmxvY2tfYmgodHhxKTsKPiA+ID4gKwo+ID4gPiArICAg ZXJyID0gdmlydHF1ZXVlX3Jlc2l6ZShzcS0+dnEsIHJpbmdfbnVtLCB2aXJ0bmV0X3NxX2ZyZWVf dW51c2VkX2J1Zik7Cj4gPiA+ICsgICBpZiAoZXJyKQo+ID4gPiArICAgICAgICAgICBnb3RvIGVy cjsKPiA+ID4gKwo+ID4gPiArICAgbmV0aWZfc3RhcnRfc3VicXVldWUodmktPmRldiwgcWluZGV4 KTsKPiA+ID4gKyAgIHZpcnRuZXRfbmFwaV90eF9lbmFibGUodmksIHNxLT52cSwgJnNxLT5uYXBp KTsKPiA+ID4gKyAgIHJldHVybiAwOwo+ID4gPiArCj4gPiA+ICtlcnI6Cj4gPgo+ID4KPiA+IEkg Z3Vlc3Mgd2UgY2FuIHN0aWxsIHN0YXJ0IHRoZSBxdWV1ZSBpbiB0aGlzIGNhc2U/IChTaW5jZSB3 ZSBkb24ndAo+ID4gY2hhbmdlIHRoZSBxdWV1ZSBpZiByZXNpemUgZmFpbHMpLgo+Cj4gWWVzLCB5 b3UgYXJlIHJpZ2h0Lgo+Cj4gVGhhbmtzLgo+Cj4gPgo+ID4KPiA+ID4gKyAgIG5ldGRldl9lcnIo dmktPmRldiwKPiA+ID4gKyAgICAgICAgICAgICAgInJlc2V0IHR4IHJlc2V0IHZxIGZhaWw6IHR4 IHF1ZXVlIGluZGV4OiAldGQgZXJyOiAlZFxuIiwKPiA+ID4gKyAgICAgICAgICAgICAgc3EgLSB2 aS0+c3EsIGVycik7Cj4gPiA+ICsgICB2aXJ0bmV0X25hcGlfdHhfZW5hYmxlKHZpLCBzcS0+dnEs ICZzcS0+bmFwaSk7Cj4gPiA+ICsgICByZXR1cm4gZXJyOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ ICAgLyoKPiA+ID4gICAgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBh bmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKPiA+ID4gICAgKiBzdXBwb3J0ZWQgYnkgdGhlIGh5 cGVydmlzb3IsIGFzIGluZGljYXRlZCBieSBmZWF0dXJlIGJpdHMsIHNob3VsZAo+ID4KPgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVtIG1h aWxpbmcgbGlzdApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K