From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E93BC35244 for ; Fri, 24 Jan 2020 14:25:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 55C5C2072C for ; Fri, 24 Jan 2020 14:25:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579875914; bh=t7xgp0eBt/9ZJZ3LBVQDnnhYCOpd/zyuwsptUk1VxEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=s0D2rVxwNxvOnaa4pkYgB87CORZ8fe91FH4FiNFRDSJbpXszfb4Z7P1XgPfb4RrHT dt9t2jdTSnx+b6QHxSCbiAMh+pHKIVW87dLIK5pdbuN7WACkRwPSaENrJrG/twX6Sg wbvipHRAlNtNnMian6TZ28a72cMyIIQDvP9ihx5Q= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2392496AbgAXOZN (ORCPT ); Fri, 24 Jan 2020 09:25:13 -0500 Received: from mail.kernel.org ([198.145.29.99]:43972 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2392266AbgAXOVz (ORCPT ); Fri, 24 Jan 2020 09:21:55 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5B16E218AC; Fri, 24 Jan 2020 14:21:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579875715; bh=t7xgp0eBt/9ZJZ3LBVQDnnhYCOpd/zyuwsptUk1VxEI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hXJ4MBnfR7iVM3bbzKitUnOC6uZIyAUERbnBqJdTuOdYrNf5hoCw2/e5IxjSchF2e cLDQpZAk+2K9Ng+0FaqazHgpqa/5gYTzdy527kqZCDpsVUBCUNZmB9pxb1w6SKRPRC EBKjqeBeDOP89sVNZCcUUcDGCS+zMQxyWbO0JKEc= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Yonglong Liu , "David S . Miller" , Sasha Levin , netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.14 30/32] net: hns: fix soft lockup when there is not enough memory Date: Fri, 24 Jan 2020 09:21:17 -0500 Message-Id: <20200124142119.30484-30-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200124142119.30484-1-sashal@kernel.org> References: <20200124142119.30484-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yonglong Liu [ Upstream commit 49edd6a2c456150870ddcef5b7ed11b21d849e13 ] When there is not enough memory and napi_alloc_skb() return NULL, the HNS driver will print error message, and than try again, if the memory is not enough for a while, huge error message and the retry operation will cause soft lockup. When napi_alloc_skb() return NULL because of no memory, we can get a warn_alloc() call trace, so this patch deletes the error message. We already use polling mode to handle irq, but the retry operation will render the polling weight inactive, this patch just return budget when the rx is not completed to avoid dead loop. Fixes: 36eedfde1a36 ("net: hns: Optimize hns_nic_common_poll for better performance") Fixes: b5996f11ea54 ("net: add Hisilicon Network Subsystem basic ethernet support") Signed-off-by: Yonglong Liu Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/hisilicon/hns/hns_enet.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c index b681c07b33fb6..0733745f4be6c 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c @@ -669,7 +669,6 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data, skb = *out_skb = napi_alloc_skb(&ring_data->napi, HNS_RX_HEAD_SIZE); if (unlikely(!skb)) { - netdev_err(ndev, "alloc rx skb fail\n"); ring->stats.sw_err_cnt++; return -ENOMEM; } @@ -1180,7 +1179,6 @@ static int hns_nic_common_poll(struct napi_struct *napi, int budget) container_of(napi, struct hns_nic_ring_data, napi); struct hnae_ring *ring = ring_data->ring; -try_again: clean_complete += ring_data->poll_one( ring_data, budget - clean_complete, ring_data->ex_process); @@ -1190,7 +1188,7 @@ try_again: napi_complete(napi); ring->q->handle->dev->ops->toggle_ring_irq(ring, 0); } else { - goto try_again; + return budget; } } -- 2.20.1