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 F2286C433F5 for ; Mon, 17 Jan 2022 07:57:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237770AbiAQH51 (ORCPT ); Mon, 17 Jan 2022 02:57:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237757AbiAQH5Z (ORCPT ); Mon, 17 Jan 2022 02:57:25 -0500 Received: from mail-oi1-x22c.google.com (mail-oi1-x22c.google.com [IPv6:2607:f8b0:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96863C06161C for ; Sun, 16 Jan 2022 23:57:25 -0800 (PST) Received: by mail-oi1-x22c.google.com with SMTP id g205so22362347oif.5 for ; Sun, 16 Jan 2022 23:57:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=tLlyeAyKlnwHxx5tD2c6sR9OmT151cKCbOIWFvV7ogc=; b=A424nQgJnhIa6KIvg/IqFiQ/6IYZPD7zcbckynw02lYKsOl5qItvmn6v6cW125mCb4 7ZHT0OagcGAVnOeug7fQYcJdRRzU3aURHCeGfi19f+w8ZUpFYW4VzWUIZ6/1tvist5Vv idqZXL/5jd1+F3c3JFrUL1RLJc90t1M7pn4zhx6B8URT/Cr7wnCNNpUibu/rnmKCvVai FeEsfjS8eMsyUHaJGLCXh4eL+VJX2TKZuR9BKzlk/NzD4j/fB2SSGvN+MQ9cVn6Zuq7C iCMTHPTwXk2x50Vrrcayxw5SbRQoTdk5UTOGBp9zULkNDAXipX/MdbbtyrtP+pNkD/C5 f0/Q== 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=tLlyeAyKlnwHxx5tD2c6sR9OmT151cKCbOIWFvV7ogc=; b=1cmVOd260lrpqS2Rv7Xb1UC0NJYz4qXF8+IYDdMqlFr8vrzob2ryElbBJBNXiZAKnf zJJcLwEJafb9ay1GRYQ+fuyuuyQzHu1sVgSKxVKLNjXDeUPZqe9XoF9qiTemrJPa/HTl JhMncdFzIXXhqYLIeygaQQCipyrdyGu+XiCMA/RRdkdMYTQxXqXFlvGjltdilzXFAFmD lMh4HHk+VOn8lY95uZxGNmkEVieYUE5SBFD4wbiBSb4rgEokgerGbfqyzSjPlwX3pBsH LZ9oYRogD2QcX9xeJCEncyvXCPzY1jWT7vs4YVq3R3pNOHdVgLT3djArTaGNVjqPjJ7U Z2gA== X-Gm-Message-State: AOAM5321bh4Ms9MS0T3cLPfDcvT+yziaURes7QF6PNHU5FtChltYPNPH O0+BHuiodrPy2Eevt3jQ2iwGPGCA9w5FTMWXJPnYKg== X-Google-Smtp-Source: ABdhPJzVr7BeAL5NnvfkfRu8qcruCGoWS/X9/DgQfXcUH0nLTA8af9zVshceOBXeAHgl9EMUdJV/CmPF76UuvXP261s= X-Received: by 2002:aca:ba85:: with SMTP id k127mr15932673oif.169.1642406244923; Sun, 16 Jan 2022 23:57:24 -0800 (PST) MIME-Version: 1.0 References: <20220109210659.2866740-1-andrew@daynix.com> <20220109210659.2866740-4-andrew@daynix.com> <60f24351-1011-de84-b443-ff5a50c3ff7f@redhat.com> In-Reply-To: <60f24351-1011-de84-b443-ff5a50c3ff7f@redhat.com> From: Andrew Melnichenko Date: Mon, 17 Jan 2022 09:57:14 +0200 Message-ID: Subject: Re: [PATCH 3/4] drivers/net/virtio_net: Added RSS hash report. To: Jason Wang Cc: netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, davem@davemloft.net, kuba@kernel.org, "Michael S. Tsirkin" , Yan Vugenfirer , Yuri Benditovich Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi all. > I think we should make RSS depend on CTRL_VQ. > Need to depend on CTRL_VQ here. I'll fix that. > Any reason to initialize RSS feature here not the init_default_rss()? init_default_rss() initializes virtio_net_ctrl_rss structure only, I think it's a good idea not to mix field initializations. On Tue, Jan 11, 2022 at 6:06 AM Jason Wang wrote: > > > =E5=9C=A8 2022/1/10 =E4=B8=8A=E5=8D=885:06, Andrew Melnychenko =E5=86=99= =E9=81=93: > > Added features for RSS hash report. > > If hash is provided - it sets to skb. > > Added checks if rss and/or hash are enabled together. > > > > Signed-off-by: Andrew Melnychenko > > --- > > drivers/net/virtio_net.c | 56 ++++++++++++++++++++++++++++++++++-----= - > > 1 file changed, 48 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > > index 21794731fc75..6e7461b01f87 100644 > > --- a/drivers/net/virtio_net.c > > +++ b/drivers/net/virtio_net.c > > @@ -231,6 +231,7 @@ struct virtnet_info { > > > > /* Host supports rss and/or hash report */ > > bool has_rss; > > + bool has_rss_hash_report; > > u8 rss_key_size; > > u16 rss_indir_table_size; > > u32 rss_hash_types_supported; > > @@ -424,7 +425,9 @@ static struct sk_buff *page_to_skb(struct virtnet_i= nfo *vi, > > hdr_p =3D p; > > > > hdr_len =3D vi->hdr_len; > > - if (vi->mergeable_rx_bufs) > > + if (vi->has_rss_hash_report) > > + hdr_padded_len =3D sizeof(struct virtio_net_hdr_v1_hash); > > + else if (vi->mergeable_rx_bufs) > > hdr_padded_len =3D sizeof(*hdr); > > else > > hdr_padded_len =3D sizeof(struct padded_vnet_hdr); > > @@ -1160,6 +1163,8 @@ static void receive_buf(struct virtnet_info *vi, = struct receive_queue *rq, > > struct net_device *dev =3D vi->dev; > > struct sk_buff *skb; > > struct virtio_net_hdr_mrg_rxbuf *hdr; > > + struct virtio_net_hdr_v1_hash *hdr_hash; > > + enum pkt_hash_types rss_hash_type; > > > > if (unlikely(len < vi->hdr_len + ETH_HLEN)) { > > pr_debug("%s: short packet %i\n", dev->name, len); > > @@ -1186,6 +1191,29 @@ static void receive_buf(struct virtnet_info *vi,= struct receive_queue *rq, > > return; > > > > hdr =3D skb_vnet_hdr(skb); > > + if (dev->features & NETIF_F_RXHASH) { > > + hdr_hash =3D (struct virtio_net_hdr_v1_hash *)(hdr); > > + > > + switch (hdr_hash->hash_report) { > > + case VIRTIO_NET_HASH_REPORT_TCPv4: > > + case VIRTIO_NET_HASH_REPORT_UDPv4: > > + case VIRTIO_NET_HASH_REPORT_TCPv6: > > + case VIRTIO_NET_HASH_REPORT_UDPv6: > > + case VIRTIO_NET_HASH_REPORT_TCPv6_EX: > > + case VIRTIO_NET_HASH_REPORT_UDPv6_EX: > > + rss_hash_type =3D PKT_HASH_TYPE_L4; > > + break; > > + case VIRTIO_NET_HASH_REPORT_IPv4: > > + case VIRTIO_NET_HASH_REPORT_IPv6: > > + case VIRTIO_NET_HASH_REPORT_IPv6_EX: > > + rss_hash_type =3D PKT_HASH_TYPE_L3; > > + break; > > + case VIRTIO_NET_HASH_REPORT_NONE: > > + default: > > + rss_hash_type =3D PKT_HASH_TYPE_NONE; > > + } > > + skb_set_hash(skb, hdr_hash->hash_value, rss_hash_type); > > + } > > > > if (hdr->hdr.flags & VIRTIO_NET_HDR_F_DATA_VALID) > > skb->ip_summed =3D CHECKSUM_UNNECESSARY; > > @@ -2233,7 +2261,8 @@ static bool virtnet_commit_rss_command(struct vir= tnet_info *vi) > > sg_set_buf(&sgs[3], vi->ctrl->rss.key, sg_buf_size); > > > > if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MQ, > > - VIRTIO_NET_CTRL_MQ_RSS_CONFIG, sgs)) { > > + vi->has_rss ? VIRTIO_NET_CTRL_MQ_RSS_CO= NFIG > > + : VIRTIO_NET_CTRL_MQ_HASH_CONFIG, sgs))= { > > dev_warn(&dev->dev, "VIRTIONET issue with committing RSS = sgs\n"); > > return false; > > } > > @@ -3220,7 +3249,9 @@ static bool virtnet_validate_features(struct virt= io_device *vdev) > > VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_MQ, "VIRTIO_NET_F_CTRL_VQ= ") || > > VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR, > > "VIRTIO_NET_F_CTRL_VQ") || > > - VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_RSS, "VIRTIO_NET_F_RSS"))= ) { > > + VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_RSS, "VIRTIO_NET_F_RSS") = || > > > I think we should make RSS depend on CTRL_VQ. > > > > + VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_HASH_REPORT, > > + "VIRTIO_NET_F_HASH_REPORT"))) { > > > Need to depend on CTRL_VQ here. > > > > return false; > > } > > > > @@ -3355,6 +3386,12 @@ static int virtnet_probe(struct virtio_device *v= dev) > > if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) > > vi->mergeable_rx_bufs =3D true; > > > > + if (virtio_has_feature(vdev, VIRTIO_NET_F_HASH_REPORT)) { > > + vi->has_rss_hash_report =3D true; > > + vi->rss_indir_table_size =3D 1; > > + vi->rss_key_size =3D VIRTIO_NET_RSS_MAX_KEY_SIZE; > > > Any reason to initialize RSS feature here not the init_default_rss()? > > Thanks > > > > + } > > + > > if (virtio_has_feature(vdev, VIRTIO_NET_F_RSS)) { > > vi->has_rss =3D true; > > vi->rss_indir_table_size =3D > > @@ -3364,7 +3401,7 @@ static int virtnet_probe(struct virtio_device *vd= ev) > > virtio_cread8(vdev, offsetof(struct virtio_net_co= nfig, rss_max_key_size)); > > } > > > > - if (vi->has_rss) { > > + if (vi->has_rss || vi->has_rss_hash_report) { > > vi->rss_hash_types_supported =3D > > virtio_cread32(vdev, offsetof(struct virtio_net_confi= g, supported_hash_types)); > > vi->rss_hash_types_supported &=3D > > @@ -3374,8 +3411,11 @@ static int virtnet_probe(struct virtio_device *v= dev) > > > > dev->hw_features |=3D NETIF_F_RXHASH; > > } > > - if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF) || > > - virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) > > + > > + if (vi->has_rss_hash_report) > > + vi->hdr_len =3D sizeof(struct virtio_net_hdr_v1_hash); > > + else if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF) || > > + virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) > > vi->hdr_len =3D sizeof(struct virtio_net_hdr_mrg_rxbuf); > > else > > vi->hdr_len =3D sizeof(struct virtio_net_hdr); > > @@ -3442,7 +3482,7 @@ static int virtnet_probe(struct virtio_device *vd= ev) > > } > > } > > > > - if (vi->has_rss) { > > + if (vi->has_rss || vi->has_rss_hash_report) { > > rtnl_lock(); > > virtnet_init_default_rss(vi); > > rtnl_unlock(); > > @@ -3580,7 +3620,7 @@ static struct virtio_device_id id_table[] =3D { > > VIRTIO_NET_F_CTRL_MAC_ADDR, \ > > VIRTIO_NET_F_MTU, VIRTIO_NET_F_CTRL_GUEST_OFFLOADS, \ > > VIRTIO_NET_F_SPEED_DUPLEX, VIRTIO_NET_F_STANDBY, \ > > - VIRTIO_NET_F_RSS > > + VIRTIO_NET_F_RSS, VIRTIO_NET_F_HASH_REPORT > > > > static unsigned int features[] =3D { > > VIRTNET_FEATURES, > 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 smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (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 75070C433F5 for ; Mon, 17 Jan 2022 07:57:31 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 1921E80BD7; Mon, 17 Jan 2022 07:57:31 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id KRqokVfHG0ed; Mon, 17 Jan 2022 07:57:30 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 9550D80BC7; Mon, 17 Jan 2022 07:57:29 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 69C57C0039; Mon, 17 Jan 2022 07:57:29 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) by lists.linuxfoundation.org (Postfix) with ESMTP id EA5ABC002F for ; Mon, 17 Jan 2022 07:57:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id D7F976061B for ; Mon, 17 Jan 2022 07:57:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=daynix-com.20210112.gappssmtp.com 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 Q-hwr9tQDJFW for ; Mon, 17 Jan 2022 07:57:26 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by smtp3.osuosl.org (Postfix) with ESMTPS id E1669605E8 for ; Mon, 17 Jan 2022 07:57:25 +0000 (UTC) Received: by mail-oi1-x230.google.com with SMTP id bf5so148030oib.4 for ; Sun, 16 Jan 2022 23:57:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=daynix-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=tLlyeAyKlnwHxx5tD2c6sR9OmT151cKCbOIWFvV7ogc=; b=A424nQgJnhIa6KIvg/IqFiQ/6IYZPD7zcbckynw02lYKsOl5qItvmn6v6cW125mCb4 7ZHT0OagcGAVnOeug7fQYcJdRRzU3aURHCeGfi19f+w8ZUpFYW4VzWUIZ6/1tvist5Vv idqZXL/5jd1+F3c3JFrUL1RLJc90t1M7pn4zhx6B8URT/Cr7wnCNNpUibu/rnmKCvVai FeEsfjS8eMsyUHaJGLCXh4eL+VJX2TKZuR9BKzlk/NzD4j/fB2SSGvN+MQ9cVn6Zuq7C iCMTHPTwXk2x50Vrrcayxw5SbRQoTdk5UTOGBp9zULkNDAXipX/MdbbtyrtP+pNkD/C5 f0/Q== 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=tLlyeAyKlnwHxx5tD2c6sR9OmT151cKCbOIWFvV7ogc=; b=eWS/ecYj9/3V0avjUCJ2d7uMXmYOOhDuktQWVPuiPYQcJvbul6mMBUHSbNTNnFkJY2 m1PzV/UjHgqGLptT/vSZQe6anN8E8UdX29mWGqxiA+WJWgAX/6H0HvbwbgQPOklbzJaJ uyvxYfaJyKCj0Wdq+xeUrHd+CKFIXabODJ+GsnmctdLcnkd0L4kFUOS2kJpb+BvwkGB4 qBIt3uJ9nmCD0UU9xebaJKYuvP3KG4muLlX7qz9TSoyEQkZ8rMCbB5q26ynC2oLczfxr 7QadhptRoYh1roE7hVz/qESxuLb6zbBwo1TKofqqruqjRcJuyblcu6rIzDpwmFcGwHcl RpRQ== X-Gm-Message-State: AOAM530/iUcrps4Z+7VKK5ZoqGKuB6zwhm+MroNV05EAO+BiJQuWjMFE TGcPRETDp5aTdiIaiMp48pXvolu/DuSsRbrvnbticg== X-Google-Smtp-Source: ABdhPJzVr7BeAL5NnvfkfRu8qcruCGoWS/X9/DgQfXcUH0nLTA8af9zVshceOBXeAHgl9EMUdJV/CmPF76UuvXP261s= X-Received: by 2002:aca:ba85:: with SMTP id k127mr15932673oif.169.1642406244923; Sun, 16 Jan 2022 23:57:24 -0800 (PST) MIME-Version: 1.0 References: <20220109210659.2866740-1-andrew@daynix.com> <20220109210659.2866740-4-andrew@daynix.com> <60f24351-1011-de84-b443-ff5a50c3ff7f@redhat.com> In-Reply-To: <60f24351-1011-de84-b443-ff5a50c3ff7f@redhat.com> From: Andrew Melnichenko Date: Mon, 17 Jan 2022 09:57:14 +0200 Message-ID: Subject: Re: [PATCH 3/4] drivers/net/virtio_net: Added RSS hash report. To: Jason Wang Cc: "Michael S. Tsirkin" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org, Yuri Benditovich , Yan Vugenfirer , kuba@kernel.org, davem@davemloft.net 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" SGkgYWxsLgoKPiBJIHRoaW5rIHdlIHNob3VsZCBtYWtlIFJTUyBkZXBlbmQgb24gQ1RSTF9WUS4K PiBOZWVkIHRvIGRlcGVuZCBvbiBDVFJMX1ZRIGhlcmUuCkknbGwgZml4IHRoYXQuCgo+IEFueSBy ZWFzb24gdG8gaW5pdGlhbGl6ZSBSU1MgZmVhdHVyZSBoZXJlIG5vdCB0aGUgaW5pdF9kZWZhdWx0 X3JzcygpPwppbml0X2RlZmF1bHRfcnNzKCkgaW5pdGlhbGl6ZXMgdmlydGlvX25ldF9jdHJsX3Jz cyBzdHJ1Y3R1cmUgb25seSwgSQp0aGluayBpdCdzIGEgZ29vZCBpZGVhIG5vdCB0byBtaXggZmll bGQgaW5pdGlhbGl6YXRpb25zLgoKT24gVHVlLCBKYW4gMTEsIDIwMjIgYXQgNjowNiBBTSBKYXNv biBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPgo+Cj4g5ZyoIDIwMjIvMS8xMCDk uIrljYg1OjA2LCBBbmRyZXcgTWVsbnljaGVua28g5YaZ6YGTOgo+ID4gQWRkZWQgZmVhdHVyZXMg Zm9yIFJTUyBoYXNoIHJlcG9ydC4KPiA+IElmIGhhc2ggaXMgcHJvdmlkZWQgLSBpdCBzZXRzIHRv IHNrYi4KPiA+IEFkZGVkIGNoZWNrcyBpZiByc3MgYW5kL29yIGhhc2ggYXJlIGVuYWJsZWQgdG9n ZXRoZXIuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogQW5kcmV3IE1lbG55Y2hlbmtvIDxhbmRyZXdA ZGF5bml4LmNvbT4KPiA+IC0tLQo+ID4gICBkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCA1NiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCj4gPiAgIDEgZmlsZSBjaGFu Z2VkLCA0OCBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQo+ID4KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ IGluZGV4IDIxNzk0NzMxZmM3NS4uNmU3NDYxYjAxZjg3IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9uZXQvdmlydGlvX25ldC5jCj4gPiArKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKPiA+ IEBAIC0yMzEsNiArMjMxLDcgQEAgc3RydWN0IHZpcnRuZXRfaW5mbyB7Cj4gPgo+ID4gICAgICAg LyogSG9zdCBzdXBwb3J0cyByc3MgYW5kL29yIGhhc2ggcmVwb3J0ICovCj4gPiAgICAgICBib29s IGhhc19yc3M7Cj4gPiArICAgICBib29sIGhhc19yc3NfaGFzaF9yZXBvcnQ7Cj4gPiAgICAgICB1 OCByc3Nfa2V5X3NpemU7Cj4gPiAgICAgICB1MTYgcnNzX2luZGlyX3RhYmxlX3NpemU7Cj4gPiAg ICAgICB1MzIgcnNzX2hhc2hfdHlwZXNfc3VwcG9ydGVkOwo+ID4gQEAgLTQyNCw3ICs0MjUsOSBA QCBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8g KnZpLAo+ID4gICAgICAgaGRyX3AgPSBwOwo+ID4KPiA+ICAgICAgIGhkcl9sZW4gPSB2aS0+aGRy X2xlbjsKPiA+IC0gICAgIGlmICh2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMpCj4gPiArICAgICBpZiAo dmktPmhhc19yc3NfaGFzaF9yZXBvcnQpCj4gPiArICAgICAgICAgICAgIGhkcl9wYWRkZWRfbGVu ID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl92MV9oYXNoKTsKPiA+ICsgICAgIGVsc2Ug aWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKPiA+ICAgICAgICAgICAgICAgaGRyX3BhZGRlZF9s ZW4gPSBzaXplb2YoKmhkcik7Cj4gPiAgICAgICBlbHNlCj4gPiAgICAgICAgICAgICAgIGhkcl9w YWRkZWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBwYWRkZWRfdm5ldF9oZHIpOwo+ID4gQEAgLTExNjAs NiArMTE2Myw4IEBAIHN0YXRpYyB2b2lkIHJlY2VpdmVfYnVmKHN0cnVjdCB2aXJ0bmV0X2luZm8g KnZpLCBzdHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEsCj4gPiAgICAgICBzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2ID0gdmktPmRldjsKPiA+ICAgICAgIHN0cnVjdCBza19idWZmICpza2I7Cj4gPiAgICAg ICBzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmICpoZHI7Cj4gPiArICAgICBzdHJ1Y3Qg dmlydGlvX25ldF9oZHJfdjFfaGFzaCAqaGRyX2hhc2g7Cj4gPiArICAgICBlbnVtIHBrdF9oYXNo X3R5cGVzIHJzc19oYXNoX3R5cGU7Cj4gPgo+ID4gICAgICAgaWYgKHVubGlrZWx5KGxlbiA8IHZp LT5oZHJfbGVuICsgRVRIX0hMRU4pKSB7Cj4gPiAgICAgICAgICAgICAgIHByX2RlYnVnKCIlczog c2hvcnQgcGFja2V0ICVpXG4iLCBkZXYtPm5hbWUsIGxlbik7Cj4gPiBAQCAtMTE4Niw2ICsxMTkx LDI5IEBAIHN0YXRpYyB2b2lkIHJlY2VpdmVfYnVmKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBz dHJ1Y3QgcmVjZWl2ZV9xdWV1ZSAqcnEsCj4gPiAgICAgICAgICAgICAgIHJldHVybjsKPiA+Cj4g PiAgICAgICBoZHIgPSBza2Jfdm5ldF9oZHIoc2tiKTsKPiA+ICsgICAgIGlmIChkZXYtPmZlYXR1 cmVzICYgTkVUSUZfRl9SWEhBU0gpIHsKPiA+ICsgICAgICAgICAgICAgaGRyX2hhc2ggPSAoc3Ry dWN0IHZpcnRpb19uZXRfaGRyX3YxX2hhc2ggKikoaGRyKTsKPiA+ICsKPiA+ICsgICAgICAgICAg ICAgc3dpdGNoIChoZHJfaGFzaC0+aGFzaF9yZXBvcnQpIHsKPiA+ICsgICAgICAgICAgICAgY2Fz ZSBWSVJUSU9fTkVUX0hBU0hfUkVQT1JUX1RDUHY0Ogo+ID4gKyAgICAgICAgICAgICBjYXNlIFZJ UlRJT19ORVRfSEFTSF9SRVBPUlRfVURQdjQ6Cj4gPiArICAgICAgICAgICAgIGNhc2UgVklSVElP X05FVF9IQVNIX1JFUE9SVF9UQ1B2NjoKPiA+ICsgICAgICAgICAgICAgY2FzZSBWSVJUSU9fTkVU X0hBU0hfUkVQT1JUX1VEUHY2Ogo+ID4gKyAgICAgICAgICAgICBjYXNlIFZJUlRJT19ORVRfSEFT SF9SRVBPUlRfVENQdjZfRVg6Cj4gPiArICAgICAgICAgICAgIGNhc2UgVklSVElPX05FVF9IQVNI X1JFUE9SVF9VRFB2Nl9FWDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICByc3NfaGFzaF90eXBl ID0gUEtUX0hBU0hfVFlQRV9MNDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ ICsgICAgICAgICAgICAgY2FzZSBWSVJUSU9fTkVUX0hBU0hfUkVQT1JUX0lQdjQ6Cj4gPiArICAg ICAgICAgICAgIGNhc2UgVklSVElPX05FVF9IQVNIX1JFUE9SVF9JUHY2Ogo+ID4gKyAgICAgICAg ICAgICBjYXNlIFZJUlRJT19ORVRfSEFTSF9SRVBPUlRfSVB2Nl9FWDoKPiA+ICsgICAgICAgICAg ICAgICAgICAgICByc3NfaGFzaF90eXBlID0gUEtUX0hBU0hfVFlQRV9MMzsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgY2FzZSBWSVJUSU9fTkVUX0hB U0hfUkVQT1JUX05PTkU6Cj4gPiArICAgICAgICAgICAgIGRlZmF1bHQ6Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgcnNzX2hhc2hfdHlwZSA9IFBLVF9IQVNIX1RZUEVfTk9ORTsKPiA+ICsgICAg ICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICBza2Jfc2V0X2hhc2goc2tiLCBoZHJfaGFzaC0+ aGFzaF92YWx1ZSwgcnNzX2hhc2hfdHlwZSk7Cj4gPiArICAgICB9Cj4gPgo+ID4gICAgICAgaWYg KGhkci0+aGRyLmZsYWdzICYgVklSVElPX05FVF9IRFJfRl9EQVRBX1ZBTElEKQo+ID4gICAgICAg ICAgICAgICBza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwo+ID4gQEAgLTIy MzMsNyArMjI2MSw4IEBAIHN0YXRpYyBib29sIHZpcnRuZXRfY29tbWl0X3Jzc19jb21tYW5kKHN0 cnVjdCB2aXJ0bmV0X2luZm8gKnZpKQo+ID4gICAgICAgc2dfc2V0X2J1Zigmc2dzWzNdLCB2aS0+ Y3RybC0+cnNzLmtleSwgc2dfYnVmX3NpemUpOwo+ID4KPiA+ICAgICAgIGlmICghdmlydG5ldF9z ZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9NUSwKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVklSVElPX05FVF9DVFJMX01RX1JTU19DT05GSUcsIHNncykpIHsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmktPmhhc19yc3MgPyBWSVJUSU9fTkVU X0NUUkxfTVFfUlNTX0NPTkZJRwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IFZJUlRJT19ORVRfQ1RSTF9NUV9IQVNIX0NPTkZJRywgc2dzKSkgewo+ID4gICAgICAgICAgICAg ICBkZXZfd2FybigmZGV2LT5kZXYsICJWSVJUSU9ORVQgaXNzdWUgd2l0aCBjb21taXR0aW5nIFJT UyBzZ3NcbiIpOwo+ID4gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gPiAgICAgICB9Cj4g PiBAQCAtMzIyMCw3ICszMjQ5LDkgQEAgc3RhdGljIGJvb2wgdmlydG5ldF92YWxpZGF0ZV9mZWF0 dXJlcyhzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+ICAgICAgICAgICAgVklSVE5FVF9G QUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9NUSwgIlZJUlRJT19ORVRfRl9DVFJMX1ZRIikgfHwK PiA+ICAgICAgICAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX01B Q19BRERSLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZJUlRJT19ORVRfRl9DVFJM X1ZRIikgfHwKPiA+IC0gICAgICAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRf Rl9SU1MsICJWSVJUSU9fTkVUX0ZfUlNTIikpKSB7Cj4gPiArICAgICAgICAgIFZJUlRORVRfRkFJ TF9PTih2ZGV2LCBWSVJUSU9fTkVUX0ZfUlNTLCAiVklSVElPX05FVF9GX1JTUyIpIHx8Cj4KPgo+ IEkgdGhpbmsgd2Ugc2hvdWxkIG1ha2UgUlNTIGRlcGVuZCBvbiBDVFJMX1ZRLgo+Cj4KPiA+ICsg ICAgICAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYsIFZJUlRJT19ORVRfRl9IQVNIX1JFUE9SVCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICJWSVJUSU9fTkVUX0ZfSEFTSF9SRVBPUlQi KSkpIHsKPgo+Cj4gTmVlZCB0byBkZXBlbmQgb24gQ1RSTF9WUSBoZXJlLgo+Cj4KPiA+ICAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ID4gICAgICAgfQo+ID4KPiA+IEBAIC0zMzU1LDYgKzMz ODYsMTIgQEAgc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2 ZGV2KQo+ID4gICAgICAgaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0Zf TVJHX1JYQlVGKSkKPiA+ICAgICAgICAgICAgICAgdmktPm1lcmdlYWJsZV9yeF9idWZzID0gdHJ1 ZTsKPiA+Cj4gPiArICAgICBpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRf Rl9IQVNIX1JFUE9SVCkpIHsKPiA+ICsgICAgICAgICAgICAgdmktPmhhc19yc3NfaGFzaF9yZXBv cnQgPSB0cnVlOwo+ID4gKyAgICAgICAgICAgICB2aS0+cnNzX2luZGlyX3RhYmxlX3NpemUgPSAx Owo+ID4gKyAgICAgICAgICAgICB2aS0+cnNzX2tleV9zaXplID0gVklSVElPX05FVF9SU1NfTUFY X0tFWV9TSVpFOwo+Cj4KPiBBbnkgcmVhc29uIHRvIGluaXRpYWxpemUgUlNTIGZlYXR1cmUgaGVy ZSBub3QgdGhlIGluaXRfZGVmYXVsdF9yc3MoKT8KPgo+IFRoYW5rcwo+Cj4KPiA+ICsgICAgIH0K PiA+ICsKPiA+ICAgICAgIGlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9G X1JTUykpIHsKPiA+ICAgICAgICAgICAgICAgdmktPmhhc19yc3MgPSB0cnVlOwo+ID4gICAgICAg ICAgICAgICB2aS0+cnNzX2luZGlyX3RhYmxlX3NpemUgPQo+ID4gQEAgLTMzNjQsNyArMzQwMSw3 IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9wcm9iZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikK PiA+ICAgICAgICAgICAgICAgICAgICAgICB2aXJ0aW9fY3JlYWQ4KHZkZXYsIG9mZnNldG9mKHN0 cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgcnNzX21heF9rZXlfc2l6ZSkpOwo+ID4gICAgICAgfQo+ ID4KPiA+IC0gICAgIGlmICh2aS0+aGFzX3Jzcykgewo+ID4gKyAgICAgaWYgKHZpLT5oYXNfcnNz IHx8IHZpLT5oYXNfcnNzX2hhc2hfcmVwb3J0KSB7Cj4gPiAgICAgICAgICAgICAgIHZpLT5yc3Nf aGFzaF90eXBlc19zdXBwb3J0ZWQgPQo+ID4gICAgICAgICAgICAgICAgICAgdmlydGlvX2NyZWFk MzIodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBzdXBwb3J0ZWRfaGFz aF90eXBlcykpOwo+ID4gICAgICAgICAgICAgICB2aS0+cnNzX2hhc2hfdHlwZXNfc3VwcG9ydGVk ICY9Cj4gPiBAQCAtMzM3NCw4ICszNDExLDExIEBAIHN0YXRpYyBpbnQgdmlydG5ldF9wcm9iZShz dHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiA+Cj4gPiAgICAgICAgICAgICAgIGRldi0+aHdf ZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7Cj4gPiAgICAgICB9Cj4gPiAtICAgICBpZiAodmly dGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpIHx8Cj4gPiAtICAg ICAgICAgdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19GX1ZFUlNJT05fMSkpCj4gPiAr Cj4gPiArICAgICBpZiAodmktPmhhc19yc3NfaGFzaF9yZXBvcnQpCj4gPiArICAgICAgICAgICAg IHZpLT5oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl92MV9oYXNoKTsKPiA+ ICsgICAgIGVsc2UgaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfTVJH X1JYQlVGKSB8fAo+ID4gKyAgICAgICAgICAgICAgdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJ UlRJT19GX1ZFUlNJT05fMSkpCj4gPiAgICAgICAgICAgICAgIHZpLT5oZHJfbGVuID0gc2l6ZW9m KHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9tcmdfcnhidWYpOwo+ID4gICAgICAgZWxzZQo+ID4gICAg ICAgICAgICAgICB2aS0+aGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpOwo+ ID4gQEAgLTM0NDIsNyArMzQ4Miw3IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9wcm9iZShzdHJ1Y3Qg dmlydGlvX2RldmljZSAqdmRldikKPiA+ICAgICAgICAgICAgICAgfQo+ID4gICAgICAgfQo+ID4K PiA+IC0gICAgIGlmICh2aS0+aGFzX3Jzcykgewo+ID4gKyAgICAgaWYgKHZpLT5oYXNfcnNzIHx8 IHZpLT5oYXNfcnNzX2hhc2hfcmVwb3J0KSB7Cj4gPiAgICAgICAgICAgICAgIHJ0bmxfbG9jaygp Owo+ID4gICAgICAgICAgICAgICB2aXJ0bmV0X2luaXRfZGVmYXVsdF9yc3ModmkpOwo+ID4gICAg ICAgICAgICAgICBydG5sX3VubG9jaygpOwo+ID4gQEAgLTM1ODAsNyArMzYyMCw3IEBAIHN0YXRp YyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewo+ID4gICAgICAgVklSVElP X05FVF9GX0NUUkxfTUFDX0FERFIsIFwKPiA+ICAgICAgIFZJUlRJT19ORVRfRl9NVFUsIFZJUlRJ T19ORVRfRl9DVFJMX0dVRVNUX09GRkxPQURTLCBcCj4gPiAgICAgICBWSVJUSU9fTkVUX0ZfU1BF RURfRFVQTEVYLCBWSVJUSU9fTkVUX0ZfU1RBTkRCWSwgXAo+ID4gLSAgICAgVklSVElPX05FVF9G X1JTUwo+ID4gKyAgICAgVklSVElPX05FVF9GX1JTUywgVklSVElPX05FVF9GX0hBU0hfUkVQT1JU Cj4gPgo+ID4gICBzdGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7Cj4gPiAgICAgICBW SVJUTkVUX0ZFQVRVUkVTLAo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0 cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcv bWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==