Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp3407105pxy; Mon, 26 Apr 2021 00:36:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwplAuspqjPu9HYbrPDY16WN+gxXEZxhb7uEiijCaiwxtsTKQpxaic5vLrzG7WmlYfFtOOL X-Received: by 2002:a05:6a00:8a:b029:260:e095:8581 with SMTP id c10-20020a056a00008ab0290260e0958581mr16849439pfj.43.1619422617549; Mon, 26 Apr 2021 00:36:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619422617; cv=none; d=google.com; s=arc-20160816; b=IbWd4HMZgjbZ5D2R6EnTMGJCIsNGkQROIHqnegfMIPge/F15/E8RB5IO3OtgsHgXDZ UUcGfqx6cL6Yyvnt20fYKMySTmwnv8kBWPR7bRY8zvYQMnltJvpuDaz1D3AOvcqCjlZ3 bu42GbNREJ3uauNFCPxynbrt1lbig9rXA285IraWv0OKBbvBK094WkbczXTfpJTacOWF Tu9fridINOO0fDxoqB1/UuA7emaBlcw4TL0d975OfxP3DqhraRtek3VKmTOJ7G7syuYB gwfUKoRHVY9qoQROOoad+lPNsbxlVX5EeQrAQmxXBougxa2Ah3kwueApYSpc3P9PUCrp poMA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ciguBzbucL1JMPlH/qUPdXUkhXdkCVOr3gXMDFYYCNc=; b=X6p9LbljnkAUyb028mhMT69h0L13Tj7KDicATse4WWIbNbYdOO8gP8Iink6NjCYXrC 4pBNpwJ8QrxmWGLXK3jaBkPq53g2VKq0S4pkgjR5QJa4xvDUyVyWqL5gqEFdVICmiXlC WCQOfBSAkRZJAwEojdvxoAgbjYwNi49YJOJGFfGl2NOrJxvryJM6hvNyotN7ftV5fRE1 9shRv6B9ngRvRvGw74mzSliUQ4Qvualxza0uMfQMTIJT/ZCp11z3Z15VUYXRiBzwP0+5 Ean/XQh/Q888gYR45RkHJVkbdfd9OoK7Jkgumb/y+lxPhIrpqaDVcvYGusLS5yFfTtST endQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="GtVmPpd/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 102si17888816plb.217.2021.04.26.00.36.45; Mon, 26 Apr 2021 00:36:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="GtVmPpd/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232976AbhDZHgu (ORCPT + 99 others); Mon, 26 Apr 2021 03:36:50 -0400 Received: from mail.kernel.org ([198.145.29.99]:49206 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232881AbhDZHgF (ORCPT ); Mon, 26 Apr 2021 03:36:05 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C3C78611C0; Mon, 26 Apr 2021 07:33:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1619422419; bh=efcH76/H992K5sTUACLYs6HZFPNoeDIAmLaSe9RPjgY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GtVmPpd/TVZuHWNMW1JNnQs/59T5LJyf0E+KNykuO2nrLRCHbRv74l88yr4J1B0bM 4Ty++0h2DxbzH7XxdQ7gkdGRPD/QwF2WXXNH/eIylxlxikdG4+KjwI4Lx8Yi/H71II RsDT4nSQIHlASQcX4OoBxCjhnzkRUVdyQrItpdt0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shujin Li , Jason Xing , Jesse Brandeburg , Jesper Dangaard Brouer , "David S. Miller" Subject: [PATCH 4.9 21/37] i40e: fix the panic when running bpf in xdpdrv mode Date: Mon, 26 Apr 2021 09:29:22 +0200 Message-Id: <20210426072817.973879455@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210426072817.245304364@linuxfoundation.org> References: <20210426072817.245304364@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jason Xing commit 4e39a072a6a0fc422ba7da5e4336bdc295d70211 upstream. Fix this panic by adding more rules to calculate the value of @rss_size_max which could be used in allocating the queues when bpf is loaded, which, however, could cause the failure and then trigger the NULL pointer of vsi->rx_rings. Prio to this fix, the machine doesn't care about how many cpus are online and then allocates 256 queues on the machine with 32 cpus online actually. Once the load of bpf begins, the log will go like this "failed to get tracking for 256 queues for VSI 0 err -12" and this "setup of MAIN VSI failed". Thus, I attach the key information of the crash-log here. BUG: unable to handle kernel NULL pointer dereference at 0000000000000000 RIP: 0010:i40e_xdp+0xdd/0x1b0 [i40e] Call Trace: [2160294.717292] ? i40e_reconfig_rss_queues+0x170/0x170 [i40e] [2160294.717666] dev_xdp_install+0x4f/0x70 [2160294.718036] dev_change_xdp_fd+0x11f/0x230 [2160294.718380] ? dev_disable_lro+0xe0/0xe0 [2160294.718705] do_setlink+0xac7/0xe70 [2160294.719035] ? __nla_parse+0xed/0x120 [2160294.719365] rtnl_newlink+0x73b/0x860 Fixes: 41c445ff0f48 ("i40e: main driver core") Co-developed-by: Shujin Li Signed-off-by: Shujin Li Signed-off-by: Jason Xing Reviewed-by: Jesse Brandeburg Acked-by: Jesper Dangaard Brouer Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/intel/i40e/i40e_main.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -8504,6 +8504,7 @@ static int i40e_sw_init(struct i40e_pf * { int err = 0; int size; + u16 pow; pf->msg_enable = netif_msg_init(I40E_DEFAULT_MSG_ENABLE, (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)); @@ -8531,6 +8532,11 @@ static int i40e_sw_init(struct i40e_pf * pf->rss_table_size = pf->hw.func_caps.rss_table_size; pf->rss_size_max = min_t(int, pf->rss_size_max, pf->hw.func_caps.num_tx_qp); + + /* find the next higher power-of-2 of num cpus */ + pow = roundup_pow_of_two(num_online_cpus()); + pf->rss_size_max = min_t(int, pf->rss_size_max, pow); + if (pf->hw.func_caps.rss) { pf->flags |= I40E_FLAG_RSS_ENABLED; pf->alloc_rss_size = min_t(int, pf->rss_size_max,