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 C9BEFC433F5 for ; Tue, 11 Jan 2022 03:44:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347329AbiAKDod (ORCPT ); Mon, 10 Jan 2022 22:44:33 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:24649 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235403AbiAKDoc (ORCPT ); Mon, 10 Jan 2022 22:44:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1641872672; 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=JtiMfG4GXJ3rvFWMqnRqtwQzzJ20vH8srT5uvLjmDcU=; b=dzrrIDmtXy1sA/4hYvD88GfGg4X+3PYs+q5r+UjtSv+NEUfXEWIALo6eEO9euYO8mrgsIX pnkSTjVtsLyouY3C5hfcJAw8tm48gkCPeOwG7QNxtJQseIaL8TOlnA3vJTmL4p0Ui4Myy3 wCuSLKTl2IS+Br+nCeSjR5RdrhCjSJY= Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-568-lgm83V1YNi2JZBhkxFj35g-1; Mon, 10 Jan 2022 22:44:30 -0500 X-MC-Unique: lgm83V1YNi2JZBhkxFj35g-1 Received: by mail-pl1-f198.google.com with SMTP id u23-20020a170902a61700b0014a4dce9c91so1941653plq.9 for ; Mon, 10 Jan 2022 19:44:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=JtiMfG4GXJ3rvFWMqnRqtwQzzJ20vH8srT5uvLjmDcU=; b=GXVPNc1mcLrYvbcMQNCDuUZZ4a8xFLuZTJ8hXd+9C3MFMQTydC7MINeESohYZWqK2b 71tCOm+opk/GBvTeMfdwGX//ATSY9U+gbOInmrCt4wTtlfAsAFCzxx3mrO1Yzp9dMe/t foaMImN508C3y/5Ftxcat634WkZHW0zzFrsajQiAYFW+mxmiAUbh05tFKcQinvTCb3gZ pIZhJQ3HGulnXtWviAc1SvpwSBiLhXQFS02egZrvUwJFJd0aFhj4HI4JN0OeXzSw34m5 rx+JYpMA1BjWg5EJa1HPCvgPX+ITHRYiiaWwu6JLH5q7niItdnz/KqNNMauF7aGQe2O6 pn4g== X-Gm-Message-State: AOAM530kAtZtrZ3Z+bX8SKPXsN5IPCf9taeAxvbMG+QUukkQR+ynrzz0 4CEJOSQjn8r+CjIpAOAcHMB4xFF8ucn/ebT8GvynmO3p60kuVDTNom6C10o6uXMphHqrNQhxMQQ fvhd6D5fRTPOeuxAU4JuCDcmj X-Received: by 2002:a17:90a:4483:: with SMTP id t3mr1024985pjg.229.1641872669523; Mon, 10 Jan 2022 19:44:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJxghLB3emoZ38eHH5Ur/qoDoT0kIOJsfTKjyzK/kh/adDRiLg+gcN2vyWd2JTwVsiIUhyol0w== X-Received: by 2002:a17:90a:4483:: with SMTP id t3mr1024959pjg.229.1641872669160; Mon, 10 Jan 2022 19:44:29 -0800 (PST) Received: from [10.72.13.222] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id v16sm8407913pfu.131.2022.01.10.19.44.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Jan 2022 19:44:28 -0800 (PST) Message-ID: <08f6fef7-4534-6ec3-3a72-84d392a60256@redhat.com> Date: Tue, 11 Jan 2022 11:44:23 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH 2/4] drivers/net/virtio_net: Added basic RSS support. Content-Language: en-US To: Andrew Melnychenko , netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, davem@davemloft.net, kuba@kernel.org, mst@redhat.com Cc: yan@daynix.com, yuri.benditovich@daynix.com References: <20220109210659.2866740-1-andrew@daynix.com> <20220109210659.2866740-3-andrew@daynix.com> From: Jason Wang In-Reply-To: <20220109210659.2866740-3-andrew@daynix.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/1/10 上午5:06, Andrew Melnychenko 写道: > Added features for RSS. > Added initialization, RXHASH feature and ethtool ops. > By default RSS/RXHASH is disabled. > Virtio RSS "IPv6 extensions" hashes disabled. > Added ethtools ops to set key and indirection table. > > Signed-off-by: Andrew Melnychenko > --- > drivers/net/virtio_net.c | 194 +++++++++++++++++++++++++++++++++++++-- > 1 file changed, 184 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 66439ca488f4..21794731fc75 100644 > --- a/drivers/net/virtio_net.c > +++ b/drivers/net/virtio_net.c > @@ -169,6 +169,28 @@ struct receive_queue { > struct xdp_rxq_info xdp_rxq; > }; > > +/* This structure can contain rss message with maximum settings for indirection table and keysize > + * Note, that default structure that describes RSS configuration virtio_net_rss_config > + * contains same info but can't handle table values. > + * In any case, structure would be passed to virtio hw through sg_buf split by parts > + * because table sizes may be differ according to the device configuration. > + */ > +#define VIRTIO_NET_RSS_MAX_KEY_SIZE 40 > +#define VIRTIO_NET_RSS_MAX_TABLE_LEN 128 > +struct virtio_net_ctrl_rss { > + struct { > + __le32 hash_types; > + __le16 indirection_table_mask; > + __le16 unclassified_queue; > + } __packed table_info; > + u16 indirection_table[VIRTIO_NET_RSS_MAX_TABLE_LEN]; > + struct { > + u16 max_tx_vq; /* queues */ > + u8 hash_key_length; > + } __packed key_info; > + u8 key[VIRTIO_NET_RSS_MAX_KEY_SIZE]; > +}; We need to consider to tweak and use uAPI in the future, e.g split the above into four parts: 1) first embed structure 2) indirection table 3) second embed structure 4) key array 1) and 3) could be uAPI. > + > /* Control VQ buffers: protected by the rtnl lock */ > struct control_buf { > struct virtio_net_ctrl_hdr hdr; > @@ -178,6 +200,7 @@ struct control_buf { > u8 allmulti; > __virtio16 vid; > __virtio64 offloads; > + struct virtio_net_ctrl_rss rss; > }; > > struct virtnet_info { > @@ -206,6 +229,12 @@ struct virtnet_info { > /* Host will merge rx buffers for big packets (shake it! shake it!) */ > bool mergeable_rx_bufs; > > + /* Host supports rss and/or hash report */ > + bool has_rss; > + u8 rss_key_size; > + u16 rss_indir_table_size; > + u32 rss_hash_types_supported; > + > /* Has control virtqueue */ > bool has_cvq; > > @@ -395,9 +424,7 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi, > hdr_p = p; > > hdr_len = vi->hdr_len; > - if (vi->has_rss_hash_report) > - hdr_padded_len = sizeof(struct virtio_net_hdr_v1_hash); > - else if (vi->mergeable_rx_bufs) > + if (vi->mergeable_rx_bufs) > hdr_padded_len = sizeof(*hdr); Is this correct if both mergeable_rx_bufs and hash_report are set? > else > hdr_padded_len = sizeof(struct padded_vnet_hdr); > @@ -2184,6 +2211,55 @@ static void virtnet_get_ringparam(struct net_device *dev, > ring->tx_pending = ring->tx_max_pending; > } > > +static bool virtnet_commit_rss_command(struct virtnet_info *vi) > +{ > + struct net_device *dev = vi->dev; > + struct scatterlist sgs[4]; > + unsigned int sg_buf_size; > + > + /* prepare sgs */ > + sg_init_table(sgs, 4); > + > + sg_buf_size = sizeof(vi->ctrl->rss.table_info); > + sg_set_buf(&sgs[0], &vi->ctrl->rss.table_info, sg_buf_size); > + > + sg_buf_size = sizeof(uint16_t) * vi->rss_indir_table_size; > + sg_set_buf(&sgs[1], vi->ctrl->rss.indirection_table, sg_buf_size); > + > + sg_buf_size = sizeof(vi->ctrl->rss.key_info); > + sg_set_buf(&sgs[2], &vi->ctrl->rss.key_info, sg_buf_size); > + > + sg_buf_size = vi->rss_key_size; > + 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)) { > + dev_warn(&dev->dev, "VIRTIONET issue with committing RSS sgs\n"); > + return false; > + } > + return true; > +} > + > +static void virtnet_init_default_rss(struct virtnet_info *vi) > +{ > + u32 indir_val = 0; > + int i = 0; > + > + vi->ctrl->rss.table_info.hash_types = vi->rss_hash_types_supported; > + vi->ctrl->rss.table_info.indirection_table_mask = vi->rss_indir_table_size - 1; > + vi->ctrl->rss.table_info.unclassified_queue = 0; > + > + for (; i < vi->rss_indir_table_size; ++i) { > + indir_val = ethtool_rxfh_indir_default(i, vi->max_queue_pairs); > + vi->ctrl->rss.indirection_table[i] = indir_val; > + } > + > + vi->ctrl->rss.key_info.max_tx_vq = vi->curr_queue_pairs; > + vi->ctrl->rss.key_info.hash_key_length = vi->rss_key_size; > + > + netdev_rss_key_fill(vi->ctrl->rss.key, vi->rss_key_size); > +} > + > > static void virtnet_get_drvinfo(struct net_device *dev, > struct ethtool_drvinfo *info) > @@ -2412,6 +2488,71 @@ static void virtnet_update_settings(struct virtnet_info *vi) > vi->duplex = duplex; > } > > +static u32 virtnet_get_rxfh_key_size(struct net_device *dev) > +{ > + return ((struct virtnet_info *)netdev_priv(dev))->rss_key_size; > +} > + > +static u32 virtnet_get_rxfh_indir_size(struct net_device *dev) > +{ > + return ((struct virtnet_info *)netdev_priv(dev))->rss_indir_table_size; > +} > + > +static int virtnet_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, u8 *hfunc) > +{ > + struct virtnet_info *vi = netdev_priv(dev); > + int i; > + > + if (indir) { > + for (i = 0; i < vi->rss_indir_table_size; ++i) > + indir[i] = vi->ctrl->rss.indirection_table[i]; > + } > + > + if (key) > + memcpy(key, vi->ctrl->rss.key, vi->rss_key_size); > + > + if (hfunc) > + *hfunc = ETH_RSS_HASH_TOP; > + > + return 0; > +} > + > +static int virtnet_set_rxfh(struct net_device *dev, const u32 *indir, const u8 *key, const u8 hfunc) > +{ > + struct virtnet_info *vi = netdev_priv(dev); > + int i; > + > + if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) > + return -EOPNOTSUPP; > + > + if (indir) { > + for (i = 0; i < vi->rss_indir_table_size; ++i) > + vi->ctrl->rss.indirection_table[i] = indir[i]; > + } > + if (key) > + memcpy(vi->ctrl->rss.key, key, vi->rss_key_size); > + > + virtnet_commit_rss_command(vi); > + > + return 0; > +} > + > +static int virtnet_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info, u32 *rule_locs) > +{ > + struct virtnet_info *vi = netdev_priv(dev); > + int rc = 0; > + > + switch (info->cmd) { > + case ETHTOOL_GRXRINGS: > + info->data = vi->curr_queue_pairs; > + break; > + default: > + rc = -EOPNOTSUPP; > + } > + > + return rc; > +} > + > static const struct ethtool_ops virtnet_ethtool_ops = { > .supported_coalesce_params = ETHTOOL_COALESCE_MAX_FRAMES, > .get_drvinfo = virtnet_get_drvinfo, > @@ -2427,6 +2568,11 @@ static const struct ethtool_ops virtnet_ethtool_ops = { > .set_link_ksettings = virtnet_set_link_ksettings, > .set_coalesce = virtnet_set_coalesce, > .get_coalesce = virtnet_get_coalesce, > + .get_rxfh_key_size = virtnet_get_rxfh_key_size, > + .get_rxfh_indir_size = virtnet_get_rxfh_indir_size, > + .get_rxfh = virtnet_get_rxfh, > + .set_rxfh = virtnet_set_rxfh, > + .get_rxnfc = virtnet_get_rxnfc, > }; > > static void virtnet_freeze_down(struct virtio_device *vdev) > @@ -3073,7 +3219,8 @@ static bool virtnet_validate_features(struct virtio_device *vdev) > "VIRTIO_NET_F_CTRL_VQ") || > 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"))) { > + "VIRTIO_NET_F_CTRL_VQ") || > + VIRTNET_FAIL_ON(vdev, VIRTIO_NET_F_RSS, "VIRTIO_NET_F_RSS"))) { > return false; > } > > @@ -3113,13 +3260,14 @@ static int virtnet_probe(struct virtio_device *vdev) > u16 max_queue_pairs; > int mtu; > > - /* Find if host supports multiqueue virtio_net device */ > - err = virtio_cread_feature(vdev, VIRTIO_NET_F_MQ, > - struct virtio_net_config, > - max_virtqueue_pairs, &max_queue_pairs); > + /* Find if host supports multiqueue/rss virtio_net device */ > + max_queue_pairs = 0; > + if (virtio_has_feature(vdev, VIRTIO_NET_F_MQ) || virtio_has_feature(vdev, VIRTIO_NET_F_RSS)) > + max_queue_pairs = > + virtio_cread16(vdev, offsetof(struct virtio_net_config, max_virtqueue_pairs)); > Can we simply do virtio_cread_feature(vdev, VIRTIO_NET_F_MQ | VIRTIO_NET_F_RSS, ...) ? > /* We need at least 2 queue's */ > - if (err || max_queue_pairs < VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN || > + if (max_queue_pairs < VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN || > max_queue_pairs > VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX || > !virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_VQ)) > max_queue_pairs = 1; > @@ -3207,6 +3355,25 @@ static int virtnet_probe(struct virtio_device *vdev) > if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF)) > vi->mergeable_rx_bufs = true; > > + if (virtio_has_feature(vdev, VIRTIO_NET_F_RSS)) { > + vi->has_rss = true; > + vi->rss_indir_table_size = > + virtio_cread16(vdev, offsetof(struct virtio_net_config, > + rss_max_indirection_table_length)); > + vi->rss_key_size = > + virtio_cread8(vdev, offsetof(struct virtio_net_config, rss_max_key_size)); > + } > + > + if (vi->has_rss) { > + vi->rss_hash_types_supported = > + virtio_cread32(vdev, offsetof(struct virtio_net_config, supported_hash_types)); > + vi->rss_hash_types_supported &= > + ~(VIRTIO_NET_RSS_HASH_TYPE_IP_EX | > + VIRTIO_NET_RSS_HASH_TYPE_TCP_EX | > + VIRTIO_NET_RSS_HASH_TYPE_UDP_EX); > + > + dev->hw_features |= NETIF_F_RXHASH; > + } > if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF) || > virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) > vi->hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf); > @@ -3275,6 +3442,12 @@ static int virtnet_probe(struct virtio_device *vdev) > } > } > > + if (vi->has_rss) { > + rtnl_lock(); Is rtnl_lock() really needed here consider we haven't even register netdev? Thanks > + virtnet_init_default_rss(vi); > + rtnl_unlock(); > + } > + > err = register_netdev(dev); > if (err) { > pr_debug("virtio_net: registering device failed\n"); > @@ -3406,7 +3579,8 @@ static struct virtio_device_id id_table[] = { > VIRTIO_NET_F_GUEST_ANNOUNCE, VIRTIO_NET_F_MQ, \ > 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_SPEED_DUPLEX, VIRTIO_NET_F_STANDBY, \ > + VIRTIO_NET_F_RSS > > static unsigned int features[] = { > 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 C9A75C433F5 for ; Tue, 11 Jan 2022 03:44:39 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 549A182CA5; Tue, 11 Jan 2022 03:44:39 +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 90Yb-PYbd4dK; Tue, 11 Jan 2022 03:44:38 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id A555582A83; Tue, 11 Jan 2022 03:44:37 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7D92DC002F; Tue, 11 Jan 2022 03:44:37 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2CD5AC001E for ; Tue, 11 Jan 2022 03:44:36 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2868082CA5 for ; Tue, 11 Jan 2022 03:44:36 +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 HScQKeygRC-c for ; Tue, 11 Jan 2022 03:44:35 +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 1A03B82A83 for ; Tue, 11 Jan 2022 03:44:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1641872674; 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=JtiMfG4GXJ3rvFWMqnRqtwQzzJ20vH8srT5uvLjmDcU=; b=Col8dHPQkQiz0toFtpUpNM5LhGs8cpbOPPJbIHa+covjgn9Gc4Pk4PGwWXZZcXWHz+ECvi 6ReLUiB1W1Eu5HKto29DoCfZP3HH3HZUyIP7MERNPYIRvbKIsEhKuQOXaWNbdv2RP+RxHF ws9QtbA6jaqrnAyYFBw0i1FDmifODM0= Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-546-rVZ5qH_hPHSSS5mJrKacfQ-1; Mon, 10 Jan 2022 22:44:30 -0500 X-MC-Unique: rVZ5qH_hPHSSS5mJrKacfQ-1 Received: by mail-pl1-f197.google.com with SMTP id z18-20020a170903019200b00149b6eb5d3eso4074672plg.0 for ; Mon, 10 Jan 2022 19:44:30 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=JtiMfG4GXJ3rvFWMqnRqtwQzzJ20vH8srT5uvLjmDcU=; b=iLyUyTUrRvxpC0ta+IoEpq3UNiHyRxK4wWcNwg/N//krBHRAZi1Czgqcag33yHAhIe SPLtON8eAqBnRFTnQzxf+qPkwutvMK5lL1goRHt9E9KjrsBjVmAH0fvtQr11XAKpjWza zXhkcqvRxh+Vcd29a2L/CqmoldAiimOu9l34dChUsZQ38XSYxA5mxoGX//ff4/NEU1mG grzBPqY6yt27iIya0CLxsmBlOYRMqq+nggfDChysHjsuzn9k1PURSHgtxvYBnT1SN808 ADn4HXcSJDHDUIRpM2Fk3DyRa5mYsPmiEXC7gw5s4a718nYHvohTLi0R9OkURL01mHkN /0oA== X-Gm-Message-State: AOAM531yTbt8da58aXtFpeH4zVh5tSp8gltq8DS5ypxziiQdywyIZedH vIqCpfx+MpBJqE6iW+Ap8x/b/BrQdjW6Kp7RNf1YeAUUQBK38N5Bt7B72HAJPw4jI3zrH6RKJHj RB9eUPsaWwNTDEHHwjfD+1vAVf4gSwyYFYF/Vi0Kz5A== X-Received: by 2002:a17:90a:4483:: with SMTP id t3mr1024983pjg.229.1641872669522; Mon, 10 Jan 2022 19:44:29 -0800 (PST) X-Google-Smtp-Source: ABdhPJxghLB3emoZ38eHH5Ur/qoDoT0kIOJsfTKjyzK/kh/adDRiLg+gcN2vyWd2JTwVsiIUhyol0w== X-Received: by 2002:a17:90a:4483:: with SMTP id t3mr1024959pjg.229.1641872669160; Mon, 10 Jan 2022 19:44:29 -0800 (PST) Received: from [10.72.13.222] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id v16sm8407913pfu.131.2022.01.10.19.44.25 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Jan 2022 19:44:28 -0800 (PST) Message-ID: <08f6fef7-4534-6ec3-3a72-84d392a60256@redhat.com> Date: Tue, 11 Jan 2022 11:44:23 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH 2/4] drivers/net/virtio_net: Added basic RSS support. To: Andrew Melnychenko , netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, davem@davemloft.net, kuba@kernel.org, mst@redhat.com References: <20220109210659.2866740-1-andrew@daynix.com> <20220109210659.2866740-3-andrew@daynix.com> From: Jason Wang In-Reply-To: <20220109210659.2866740-3-andrew@daynix.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: yan@daynix.com, yuri.benditovich@daynix.com 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="utf-8"; Format="flowed" Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" CuWcqCAyMDIyLzEvMTAg5LiK5Y2INTowNiwgQW5kcmV3IE1lbG55Y2hlbmtvIOWGmemBkzoKPiBB ZGRlZCBmZWF0dXJlcyBmb3IgUlNTLgo+IEFkZGVkIGluaXRpYWxpemF0aW9uLCBSWEhBU0ggZmVh dHVyZSBhbmQgZXRodG9vbCBvcHMuCj4gQnkgZGVmYXVsdCBSU1MvUlhIQVNIIGlzIGRpc2FibGVk Lgo+IFZpcnRpbyBSU1MgIklQdjYgZXh0ZW5zaW9ucyIgaGFzaGVzIGRpc2FibGVkLgo+IEFkZGVk IGV0aHRvb2xzIG9wcyB0byBzZXQga2V5IGFuZCBpbmRpcmVjdGlvbiB0YWJsZS4KPgo+IFNpZ25l ZC1vZmYtYnk6IEFuZHJldyBNZWxueWNoZW5rbyA8YW5kcmV3QGRheW5peC5jb20+Cj4gLS0tCj4g ICBkcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgfCAxOTQgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMTg0IGluc2VydGlvbnMoKyksIDEw IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYyBi L2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+IGluZGV4IDY2NDM5Y2E0ODhmNC4uMjE3OTQ3MzFm Yzc1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwo+ICsrKyBiL2RyaXZl cnMvbmV0L3ZpcnRpb19uZXQuYwo+IEBAIC0xNjksNiArMTY5LDI4IEBAIHN0cnVjdCByZWNlaXZl X3F1ZXVlIHsKPiAgIAlzdHJ1Y3QgeGRwX3J4cV9pbmZvIHhkcF9yeHE7Cj4gICB9Owo+ICAgCj4g Ky8qIFRoaXMgc3RydWN0dXJlIGNhbiBjb250YWluIHJzcyBtZXNzYWdlIHdpdGggbWF4aW11bSBz ZXR0aW5ncyBmb3IgaW5kaXJlY3Rpb24gdGFibGUgYW5kIGtleXNpemUKPiArICogTm90ZSwgdGhh dCBkZWZhdWx0IHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBSU1MgY29uZmlndXJhdGlvbiB2aXJ0 aW9fbmV0X3Jzc19jb25maWcKPiArICogY29udGFpbnMgc2FtZSBpbmZvIGJ1dCBjYW4ndCBoYW5k bGUgdGFibGUgdmFsdWVzLgo+ICsgKiBJbiBhbnkgY2FzZSwgc3RydWN0dXJlIHdvdWxkIGJlIHBh c3NlZCB0byB2aXJ0aW8gaHcgdGhyb3VnaCBzZ19idWYgc3BsaXQgYnkgcGFydHMKPiArICogYmVj YXVzZSB0YWJsZSBzaXplcyBtYXkgYmUgZGlmZmVyIGFjY29yZGluZyB0byB0aGUgZGV2aWNlIGNv bmZpZ3VyYXRpb24uCj4gKyAqLwo+ICsjZGVmaW5lIFZJUlRJT19ORVRfUlNTX01BWF9LRVlfU0la RSAgICAgNDAKPiArI2RlZmluZSBWSVJUSU9fTkVUX1JTU19NQVhfVEFCTEVfTEVOICAgIDEyOAo+ ICtzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX3JzcyB7Cj4gKwlzdHJ1Y3Qgewo+ICsJCV9fbGUzMiBo YXNoX3R5cGVzOwo+ICsJCV9fbGUxNiBpbmRpcmVjdGlvbl90YWJsZV9tYXNrOwo+ICsJCV9fbGUx NiB1bmNsYXNzaWZpZWRfcXVldWU7Cj4gKwl9IF9fcGFja2VkIHRhYmxlX2luZm87Cj4gKwl1MTYg aW5kaXJlY3Rpb25fdGFibGVbVklSVElPX05FVF9SU1NfTUFYX1RBQkxFX0xFTl07Cj4gKwlzdHJ1 Y3Qgewo+ICsJCXUxNiBtYXhfdHhfdnE7IC8qIHF1ZXVlcyAqLwo+ICsJCXU4IGhhc2hfa2V5X2xl bmd0aDsKPiArCX0gX19wYWNrZWQga2V5X2luZm87Cj4gKwl1OCBrZXlbVklSVElPX05FVF9SU1Nf TUFYX0tFWV9TSVpFXTsKPiArfTsKCgpXZSBuZWVkIHRvIGNvbnNpZGVyIHRvIHR3ZWFrIGFuZCB1 c2UgdUFQSSBpbiB0aGUgZnV0dXJlLCBlLmcgc3BsaXQgdGhlIAphYm92ZSBpbnRvIGZvdXIgcGFy dHM6CgoxKSBmaXJzdCBlbWJlZCBzdHJ1Y3R1cmUKMikgaW5kaXJlY3Rpb24gdGFibGUKMykgc2Vj b25kIGVtYmVkIHN0cnVjdHVyZQo0KSBrZXkgYXJyYXkKCjEpIGFuZCAzKSBjb3VsZCBiZSB1QVBJ LgoKCj4gKwo+ICAgLyogQ29udHJvbCBWUSBidWZmZXJzOiBwcm90ZWN0ZWQgYnkgdGhlIHJ0bmwg bG9jayAqLwo+ICAgc3RydWN0IGNvbnRyb2xfYnVmIHsKPiAgIAlzdHJ1Y3QgdmlydGlvX25ldF9j dHJsX2hkciBoZHI7Cj4gQEAgLTE3OCw2ICsyMDAsNyBAQCBzdHJ1Y3QgY29udHJvbF9idWYgewo+ ICAgCXU4IGFsbG11bHRpOwo+ICAgCV9fdmlydGlvMTYgdmlkOwo+ICAgCV9fdmlydGlvNjQgb2Zm bG9hZHM7Cj4gKwlzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX3JzcyByc3M7Cj4gICB9Owo+ICAgCj4g ICBzdHJ1Y3QgdmlydG5ldF9pbmZvIHsKPiBAQCAtMjA2LDYgKzIyOSwxMiBAQCBzdHJ1Y3Qgdmly dG5ldF9pbmZvIHsKPiAgIAkvKiBIb3N0IHdpbGwgbWVyZ2UgcnggYnVmZmVycyBmb3IgYmlnIHBh Y2tldHMgKHNoYWtlIGl0ISBzaGFrZSBpdCEpICovCj4gICAJYm9vbCBtZXJnZWFibGVfcnhfYnVm czsKPiAgIAo+ICsJLyogSG9zdCBzdXBwb3J0cyByc3MgYW5kL29yIGhhc2ggcmVwb3J0ICovCj4g Kwlib29sIGhhc19yc3M7Cj4gKwl1OCByc3Nfa2V5X3NpemU7Cj4gKwl1MTYgcnNzX2luZGlyX3Rh YmxlX3NpemU7Cj4gKwl1MzIgcnNzX2hhc2hfdHlwZXNfc3VwcG9ydGVkOwo+ICsKPiAgIAkvKiBI YXMgY29udHJvbCB2aXJ0cXVldWUgKi8KPiAgIAlib29sIGhhc19jdnE7Cj4gICAKPiBAQCAtMzk1 LDkgKzQyNCw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcGFnZV90b19za2Ioc3RydWN0IHZp cnRuZXRfaW5mbyAqdmksCj4gICAJaGRyX3AgPSBwOwo+ICAgCj4gICAJaGRyX2xlbiA9IHZpLT5o ZHJfbGVuOwo+IC0JaWYgKHZpLT5oYXNfcnNzX2hhc2hfcmVwb3J0KQo+IC0JCWhkcl9wYWRkZWRf bGVuID0gc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl92MV9oYXNoKTsKPiAtCWVsc2UgaWYg KHZpLT5tZXJnZWFibGVfcnhfYnVmcykKPiArCWlmICh2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMpCj4g ICAJCWhkcl9wYWRkZWRfbGVuID0gc2l6ZW9mKCpoZHIpOwoKCklzIHRoaXMgY29ycmVjdCBpZiBi b3RoIG1lcmdlYWJsZV9yeF9idWZzIGFuZCBoYXNoX3JlcG9ydCBhcmUgc2V0PwoKCj4gICAJZWxz ZQo+ICAgCQloZHJfcGFkZGVkX2xlbiA9IHNpemVvZihzdHJ1Y3QgcGFkZGVkX3ZuZXRfaGRyKTsK PiBAQCAtMjE4NCw2ICsyMjExLDU1IEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRfZ2V0X3JpbmdwYXJh bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+ICAgCXJpbmctPnR4X3BlbmRpbmcgPSByaW5nLT50 eF9tYXhfcGVuZGluZzsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgYm9vbCB2aXJ0bmV0X2NvbW1pdF9y c3NfY29tbWFuZChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKPiArewo+ICsJc3RydWN0IG5ldF9k ZXZpY2UgKmRldiA9IHZpLT5kZXY7Cj4gKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dzWzRdOwo+ICsJ dW5zaWduZWQgaW50IHNnX2J1Zl9zaXplOwo+ICsKPiArCS8qIHByZXBhcmUgc2dzICovCj4gKwlz Z19pbml0X3RhYmxlKHNncywgNCk7Cj4gKwo+ICsJc2dfYnVmX3NpemUgPSBzaXplb2YodmktPmN0 cmwtPnJzcy50YWJsZV9pbmZvKTsKPiArCXNnX3NldF9idWYoJnNnc1swXSwgJnZpLT5jdHJsLT5y c3MudGFibGVfaW5mbywgc2dfYnVmX3NpemUpOwo+ICsKPiArCXNnX2J1Zl9zaXplID0gc2l6ZW9m KHVpbnQxNl90KSAqIHZpLT5yc3NfaW5kaXJfdGFibGVfc2l6ZTsKPiArCXNnX3NldF9idWYoJnNn c1sxXSwgdmktPmN0cmwtPnJzcy5pbmRpcmVjdGlvbl90YWJsZSwgc2dfYnVmX3NpemUpOwo+ICsK PiArCXNnX2J1Zl9zaXplID0gc2l6ZW9mKHZpLT5jdHJsLT5yc3Mua2V5X2luZm8pOwo+ICsJc2df c2V0X2J1Zigmc2dzWzJdLCAmdmktPmN0cmwtPnJzcy5rZXlfaW5mbywgc2dfYnVmX3NpemUpOwo+ ICsKPiArCXNnX2J1Zl9zaXplID0gdmktPnJzc19rZXlfc2l6ZTsKPiArCXNnX3NldF9idWYoJnNn c1szXSwgdmktPmN0cmwtPnJzcy5rZXksIHNnX2J1Zl9zaXplKTsKPiArCj4gKwlpZiAoIXZpcnRu ZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfTVEsCj4gKwkJCQkgIFZJUlRJT19O RVRfQ1RSTF9NUV9SU1NfQ09ORklHLCBzZ3MpKSB7Cj4gKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAi VklSVElPTkVUIGlzc3VlIHdpdGggY29tbWl0dGluZyBSU1Mgc2dzXG4iKTsKPiArCQlyZXR1cm4g ZmFsc2U7Cj4gKwl9Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmly dG5ldF9pbml0X2RlZmF1bHRfcnNzKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpKQo+ICt7Cj4gKwl1 MzIgaW5kaXJfdmFsID0gMDsKPiArCWludCBpID0gMDsKPiArCj4gKwl2aS0+Y3RybC0+cnNzLnRh YmxlX2luZm8uaGFzaF90eXBlcyA9IHZpLT5yc3NfaGFzaF90eXBlc19zdXBwb3J0ZWQ7Cj4gKwl2 aS0+Y3RybC0+cnNzLnRhYmxlX2luZm8uaW5kaXJlY3Rpb25fdGFibGVfbWFzayA9IHZpLT5yc3Nf aW5kaXJfdGFibGVfc2l6ZSAtIDE7Cj4gKwl2aS0+Y3RybC0+cnNzLnRhYmxlX2luZm8udW5jbGFz c2lmaWVkX3F1ZXVlID0gMDsKPiArCj4gKwlmb3IgKDsgaSA8IHZpLT5yc3NfaW5kaXJfdGFibGVf c2l6ZTsgKytpKSB7Cj4gKwkJaW5kaXJfdmFsID0gZXRodG9vbF9yeGZoX2luZGlyX2RlZmF1bHQo aSwgdmktPm1heF9xdWV1ZV9wYWlycyk7Cj4gKwkJdmktPmN0cmwtPnJzcy5pbmRpcmVjdGlvbl90 YWJsZVtpXSA9IGluZGlyX3ZhbDsKPiArCX0KPiArCj4gKwl2aS0+Y3RybC0+cnNzLmtleV9pbmZv Lm1heF90eF92cSA9IHZpLT5jdXJyX3F1ZXVlX3BhaXJzOwo+ICsJdmktPmN0cmwtPnJzcy5rZXlf aW5mby5oYXNoX2tleV9sZW5ndGggPSB2aS0+cnNzX2tleV9zaXplOwo+ICsKPiArCW5ldGRldl9y c3Nfa2V5X2ZpbGwodmktPmN0cmwtPnJzcy5rZXksIHZpLT5yc3Nfa2V5X3NpemUpOwo+ICt9Cj4g Kwo+ICAgCj4gICBzdGF0aWMgdm9pZCB2aXJ0bmV0X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsCj4gICAJCQkJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKPiBAQCAtMjQx Miw2ICsyNDg4LDcxIEBAIHN0YXRpYyB2b2lkIHZpcnRuZXRfdXBkYXRlX3NldHRpbmdzKHN0cnVj dCB2aXJ0bmV0X2luZm8gKnZpKQo+ICAgCQl2aS0+ZHVwbGV4ID0gZHVwbGV4Owo+ICAgfQo+ICAg Cj4gK3N0YXRpYyB1MzIgdmlydG5ldF9nZXRfcnhmaF9rZXlfc2l6ZShzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2KQo+ICt7Cj4gKwlyZXR1cm4gKChzdHJ1Y3QgdmlydG5ldF9pbmZvICopbmV0ZGV2X3By aXYoZGV2KSktPnJzc19rZXlfc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIHUzMiB2aXJ0bmV0X2dl dF9yeGZoX2luZGlyX3NpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKPiArewo+ICsJcmV0dXJu ICgoc3RydWN0IHZpcnRuZXRfaW5mbyAqKW5ldGRldl9wcml2KGRldikpLT5yc3NfaW5kaXJfdGFi bGVfc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCB2aXJ0bmV0X2dldF9yeGZoKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIHUzMiAqaW5kaXIsIHU4ICprZXksIHU4ICpoZnVuYykKPiArewo+ICsJ c3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwo+ICsJaW50IGk7Cj4g Kwo+ICsJaWYgKGluZGlyKSB7Cj4gKwkJZm9yIChpID0gMDsgaSA8IHZpLT5yc3NfaW5kaXJfdGFi bGVfc2l6ZTsgKytpKQo+ICsJCQlpbmRpcltpXSA9IHZpLT5jdHJsLT5yc3MuaW5kaXJlY3Rpb25f dGFibGVbaV07Cj4gKwl9Cj4gKwo+ICsJaWYgKGtleSkKPiArCQltZW1jcHkoa2V5LCB2aS0+Y3Ry bC0+cnNzLmtleSwgdmktPnJzc19rZXlfc2l6ZSk7Cj4gKwo+ICsJaWYgKGhmdW5jKQo+ICsJCSpo ZnVuYyA9IEVUSF9SU1NfSEFTSF9UT1A7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmlydG5ldF9zZXRfcnhmaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1 MzIgKmluZGlyLCBjb25zdCB1OCAqa2V5LCBjb25zdCB1OCBoZnVuYykKPiArewo+ICsJc3RydWN0 IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwo+ICsJaW50IGk7Cj4gKwo+ICsJ aWYgKGhmdW5jICE9IEVUSF9SU1NfSEFTSF9OT19DSEFOR0UgJiYgaGZ1bmMgIT0gRVRIX1JTU19I QVNIX1RPUCkKPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwo+ICsJaWYgKGluZGlyKSB7Cj4g KwkJZm9yIChpID0gMDsgaSA8IHZpLT5yc3NfaW5kaXJfdGFibGVfc2l6ZTsgKytpKQo+ICsJCQl2 aS0+Y3RybC0+cnNzLmluZGlyZWN0aW9uX3RhYmxlW2ldID0gaW5kaXJbaV07Cj4gKwl9Cj4gKwlp ZiAoa2V5KQo+ICsJCW1lbWNweSh2aS0+Y3RybC0+cnNzLmtleSwga2V5LCB2aS0+cnNzX2tleV9z aXplKTsKPiArCj4gKwl2aXJ0bmV0X2NvbW1pdF9yc3NfY29tbWFuZCh2aSk7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydG5ldF9nZXRfcnhuZmMoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKmluZm8sIHUzMiAqcnVsZV9sb2Nz KQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7Cj4g KwlpbnQgcmMgPSAwOwo+ICsKPiArCXN3aXRjaCAoaW5mby0+Y21kKSB7Cj4gKwljYXNlIEVUSFRP T0xfR1JYUklOR1M6Cj4gKwkJaW5mby0+ZGF0YSA9IHZpLT5jdXJyX3F1ZXVlX3BhaXJzOwo+ICsJ CWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlyYyA9IC1FT1BOT1RTVVBQOwo+ICsJfQo+ICsKPiAr CXJldHVybiByYzsKPiArfQo+ICsKPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMg dmlydG5ldF9ldGh0b29sX29wcyA9IHsKPiAgIAkuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9 IEVUSFRPT0xfQ09BTEVTQ0VfTUFYX0ZSQU1FUywKPiAgIAkuZ2V0X2RydmluZm8gPSB2aXJ0bmV0 X2dldF9kcnZpbmZvLAo+IEBAIC0yNDI3LDYgKzI1NjgsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBldGh0b29sX29wcyB2aXJ0bmV0X2V0aHRvb2xfb3BzID0gewo+ICAgCS5zZXRfbGlua19rc2V0 dGluZ3MgPSB2aXJ0bmV0X3NldF9saW5rX2tzZXR0aW5ncywKPiAgIAkuc2V0X2NvYWxlc2NlID0g dmlydG5ldF9zZXRfY29hbGVzY2UsCj4gICAJLmdldF9jb2FsZXNjZSA9IHZpcnRuZXRfZ2V0X2Nv YWxlc2NlLAo+ICsJLmdldF9yeGZoX2tleV9zaXplID0gdmlydG5ldF9nZXRfcnhmaF9rZXlfc2l6 ZSwKPiArCS5nZXRfcnhmaF9pbmRpcl9zaXplID0gdmlydG5ldF9nZXRfcnhmaF9pbmRpcl9zaXpl LAo+ICsJLmdldF9yeGZoID0gdmlydG5ldF9nZXRfcnhmaCwKPiArCS5zZXRfcnhmaCA9IHZpcnRu ZXRfc2V0X3J4ZmgsCj4gKwkuZ2V0X3J4bmZjID0gdmlydG5ldF9nZXRfcnhuZmMsCj4gICB9Owo+ ICAgCj4gICBzdGF0aWMgdm9pZCB2aXJ0bmV0X2ZyZWV6ZV9kb3duKHN0cnVjdCB2aXJ0aW9fZGV2 aWNlICp2ZGV2KQo+IEBAIC0zMDczLDcgKzMyMTksOCBAQCBzdGF0aWMgYm9vbCB2aXJ0bmV0X3Zh bGlkYXRlX2ZlYXR1cmVzKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICAgCQkJICAgICAi VklSVElPX05FVF9GX0NUUkxfVlEiKSB8fAo+ICAgCSAgICAgVklSVE5FVF9GQUlMX09OKHZkZXYs IFZJUlRJT19ORVRfRl9NUSwgIlZJUlRJT19ORVRfRl9DVFJMX1ZRIikgfHwKPiAgIAkgICAgIFZJ UlRORVRfRkFJTF9PTih2ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9NQUNfQUREUiwKPiAtCQkJICAg ICAiVklSVElPX05FVF9GX0NUUkxfVlEiKSkpIHsKPiArCQkJICAgICAiVklSVElPX05FVF9GX0NU UkxfVlEiKSB8fAo+ICsJICAgICBWSVJUTkVUX0ZBSUxfT04odmRldiwgVklSVElPX05FVF9GX1JT UywgIlZJUlRJT19ORVRfRl9SU1MiKSkpIHsKPiAgIAkJcmV0dXJuIGZhbHNlOwo+ICAgCX0KPiAg IAo+IEBAIC0zMTEzLDEzICszMjYwLDE0IEBAIHN0YXRpYyBpbnQgdmlydG5ldF9wcm9iZShzdHJ1 Y3QgdmlydGlvX2RldmljZSAqdmRldikKPiAgIAl1MTYgbWF4X3F1ZXVlX3BhaXJzOwo+ICAgCWlu dCBtdHU7Cj4gICAKPiAtCS8qIEZpbmQgaWYgaG9zdCBzdXBwb3J0cyBtdWx0aXF1ZXVlIHZpcnRp b19uZXQgZGV2aWNlICovCj4gLQllcnIgPSB2aXJ0aW9fY3JlYWRfZmVhdHVyZSh2ZGV2LCBWSVJU SU9fTkVUX0ZfTVEsCj4gLQkJCQkgICBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsCj4gLQkJCQkg ICBtYXhfdmlydHF1ZXVlX3BhaXJzLCAmbWF4X3F1ZXVlX3BhaXJzKTsKPiArCS8qIEZpbmQgaWYg aG9zdCBzdXBwb3J0cyBtdWx0aXF1ZXVlL3JzcyB2aXJ0aW9fbmV0IGRldmljZSAqLwo+ICsJbWF4 X3F1ZXVlX3BhaXJzID0gMDsKPiArCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElP X05FVF9GX01RKSB8fCB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX1JTUykp Cj4gKwkJbWF4X3F1ZXVlX3BhaXJzID0KPiArCQkgICAgIHZpcnRpb19jcmVhZDE2KHZkZXYsIG9m ZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWF4X3ZpcnRxdWV1ZV9wYWlycykpOwo+ ICAgCgoKQ2FuIHdlIHNpbXBseSBkbyB2aXJ0aW9fY3JlYWRfZmVhdHVyZSh2ZGV2LCBWSVJUSU9f TkVUX0ZfTVEgfCAKVklSVElPX05FVF9GX1JTUywgLi4uKSA/CgoKPiAgIAkvKiBXZSBuZWVkIGF0 IGxlYXN0IDIgcXVldWUncyAqLwo+IC0JaWYgKGVyciB8fCBtYXhfcXVldWVfcGFpcnMgPCBWSVJU SU9fTkVUX0NUUkxfTVFfVlFfUEFJUlNfTUlOIHx8Cj4gKwlpZiAobWF4X3F1ZXVlX3BhaXJzIDwg VklSVElPX05FVF9DVFJMX01RX1ZRX1BBSVJTX01JTiB8fAo+ICAgCSAgICBtYXhfcXVldWVfcGFp cnMgPiBWSVJUSU9fTkVUX0NUUkxfTVFfVlFfUEFJUlNfTUFYIHx8Cj4gICAJICAgICF2aXJ0aW9f aGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0NUUkxfVlEpKQo+ICAgCQltYXhfcXVldWVf cGFpcnMgPSAxOwo+IEBAIC0zMjA3LDYgKzMzNTUsMjUgQEAgc3RhdGljIGludCB2aXJ0bmV0X3By b2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQo+ICAgCWlmICh2aXJ0aW9faGFzX2ZlYXR1 cmUodmRldiwgVklSVElPX05FVF9GX01SR19SWEJVRikpCj4gICAJCXZpLT5tZXJnZWFibGVfcnhf YnVmcyA9IHRydWU7Cj4gICAKPiArCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElP X05FVF9GX1JTUykpIHsKPiArCQl2aS0+aGFzX3JzcyA9IHRydWU7Cj4gKwkJdmktPnJzc19pbmRp cl90YWJsZV9zaXplID0KPiArCQkJdmlydGlvX2NyZWFkMTYodmRldiwgb2Zmc2V0b2Yoc3RydWN0 IHZpcnRpb19uZXRfY29uZmlnLAo+ICsJCQkJCQkgICAgICByc3NfbWF4X2luZGlyZWN0aW9uX3Rh YmxlX2xlbmd0aCkpOwo+ICsJCXZpLT5yc3Nfa2V5X3NpemUgPQo+ICsJCQl2aXJ0aW9fY3JlYWQ4 KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgcnNzX21heF9rZXlfc2l6 ZSkpOwo+ICsJfQo+ICsKPiArCWlmICh2aS0+aGFzX3Jzcykgewo+ICsJCXZpLT5yc3NfaGFzaF90 eXBlc19zdXBwb3J0ZWQgPQo+ICsJCSAgICB2aXJ0aW9fY3JlYWQzMih2ZGV2LCBvZmZzZXRvZihz dHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIHN1cHBvcnRlZF9oYXNoX3R5cGVzKSk7Cj4gKwkJdmkt PnJzc19oYXNoX3R5cGVzX3N1cHBvcnRlZCAmPQo+ICsJCQkJfihWSVJUSU9fTkVUX1JTU19IQVNI X1RZUEVfSVBfRVggfAo+ICsJCQkJICBWSVJUSU9fTkVUX1JTU19IQVNIX1RZUEVfVENQX0VYIHwK PiArCQkJCSAgVklSVElPX05FVF9SU1NfSEFTSF9UWVBFX1VEUF9FWCk7Cj4gKwo+ICsJCWRldi0+ aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9SWEhBU0g7Cj4gKwl9Cj4gICAJaWYgKHZpcnRpb19oYXNf ZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGKSB8fAo+ICAgCSAgICB2aXJ0aW9f aGFzX2ZlYXR1cmUodmRldiwgVklSVElPX0ZfVkVSU0lPTl8xKSkKPiAgIAkJdmktPmhkcl9sZW4g PSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyX21yZ19yeGJ1Zik7Cj4gQEAgLTMyNzUsNiAr MzQ0MiwxMiBAQCBzdGF0aWMgaW50IHZpcnRuZXRfcHJvYmUoc3RydWN0IHZpcnRpb19kZXZpY2Ug KnZkZXYpCj4gICAJCX0KPiAgIAl9Cj4gICAKPiArCWlmICh2aS0+aGFzX3Jzcykgewo+ICsJCXJ0 bmxfbG9jaygpOwoKCklzIHJ0bmxfbG9jaygpIHJlYWxseSBuZWVkZWQgaGVyZSBjb25zaWRlciB3 ZSBoYXZlbid0IGV2ZW4gcmVnaXN0ZXIgbmV0ZGV2PwoKVGhhbmtzCgoKPiArCQl2aXJ0bmV0X2lu aXRfZGVmYXVsdF9yc3ModmkpOwo+ICsJCXJ0bmxfdW5sb2NrKCk7Cj4gKwl9Cj4gKwo+ICAgCWVy ciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwo+ICAgCWlmIChlcnIpIHsKPiAgIAkJcHJfZGVidWco InZpcnRpb19uZXQ6IHJlZ2lzdGVyaW5nIGRldmljZSBmYWlsZWRcbiIpOwo+IEBAIC0zNDA2LDcg KzM1NzksOCBAQCBzdGF0aWMgc3RydWN0IHZpcnRpb19kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsK PiAgIAlWSVJUSU9fTkVUX0ZfR1VFU1RfQU5OT1VOQ0UsIFZJUlRJT19ORVRfRl9NUSwgXAo+ICAg CVZJUlRJT19ORVRfRl9DVFJMX01BQ19BRERSLCBcCj4gICAJVklSVElPX05FVF9GX01UVSwgVklS VElPX05FVF9GX0NUUkxfR1VFU1RfT0ZGTE9BRFMsIFwKPiAtCVZJUlRJT19ORVRfRl9TUEVFRF9E VVBMRVgsIFZJUlRJT19ORVRfRl9TVEFOREJZCj4gKwlWSVJUSU9fTkVUX0ZfU1BFRURfRFVQTEVY LCBWSVJUSU9fTkVUX0ZfU1RBTkRCWSwgXAo+ICsJVklSVElPX05FVF9GX1JTUwo+ICAgCj4gICBz dGF0aWMgdW5zaWduZWQgaW50IGZlYXR1cmVzW10gPSB7Cj4gICAJVklSVE5FVF9GRUFUVVJFUywK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxp emF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92 aXJ0dWFsaXphdGlvbg==