From patchwork Wed Mar 2 21:16:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Duyck X-Patchwork-Id: 591152 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 88D9E1414D8 for ; Thu, 3 Mar 2016 09:27:06 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=mirantis.com header.i=@mirantis.com header.b=ap9CBMHL; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755321AbcCBW0s (ORCPT ); Wed, 2 Mar 2016 17:26:48 -0500 Received: from mail-pf0-f175.google.com ([209.85.192.175]:33944 "EHLO mail-pf0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755105AbcCBW0q (ORCPT ); Wed, 2 Mar 2016 17:26:46 -0500 Received: by mail-pf0-f175.google.com with SMTP id 4so1881121pfd.1 for ; Wed, 02 Mar 2016 14:26:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mirantis.com; s=google; h=subject:from:to:date:message-id:in-reply-to:references:user-agent :mime-version:content-transfer-encoding; bh=M6aJ3k2HKPMtSbzTfjsJ22/s5hVEFH3BUKpFbxxEkCE=; b=ap9CBMHLUZjypBr3F7StVgSISZ2ZQjenzadMxdTGJsSzxPfyLlVR5dgOE2nouEEsKq F9QEte2BESGxhHAxgoLDP17TQGRBcWR5szEabS212ikx3uVF6+HxKUMr37fA/JH2dckx G67anqlI90/FbIsSr4PQpFxXzxgMZmRkdKd+A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:from:to:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=M6aJ3k2HKPMtSbzTfjsJ22/s5hVEFH3BUKpFbxxEkCE=; b=YU9ns4ycRXbIfzZeaTd7PCv0vs+5NgZ5K+Eg5D2jrUe+fQyzoU82CcNUfUVCkGK74h MGAWwPKgguD2vTAmtuCZgPTJ/8PNOld23ctwNLCx7QViFaUkpY5aelOSy7Sqd5BOO21z zKTHWFL03nH9I6oTvYpYKQ6ELqNSVZ32UAVQzzmKWjtAuA5FNUXwk05gftBUc9lW998s jACdKnm9qTnBKx2Nc4jFg8wfa9p3mGszX8ZRrIeMhziH2tNaIB1rikIWSJYR8bVyPMlR DlQfKD9d3FRTmvncdFtawNI2/pJ862UOLcROBKBX/6o8b9gTLRq8oS6+osAXZMPW2T8m 9Msw== X-Gm-Message-State: AD7BkJJfIXxOvtAB1iMJ9AKW5Fla9PRKHgFqbKxmIEuGCVOxJFBiR4AP6rKAXgG8iziFPzyB X-Received: by 10.98.72.8 with SMTP id v8mr26320884pfa.62.1456957605925; Wed, 02 Mar 2016 14:26:45 -0800 (PST) Received: from localhost.localdomain ([64.124.158.100]) by smtp.gmail.com with ESMTPSA id xa9sm55382310pab.44.2016.03.02.14.26.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 02 Mar 2016 14:26:45 -0800 (PST) Subject: [net PATCH 1/2] e1000: Do not overestimate descriptor counts in Tx pre-check From: Alexander Duyck To: netdev@vger.kernel.org, jogreene@redhat.com, intel-wired-lan@lists.osuosl.org, jeffrey.t.kirsher@intel.com, sassmann@redhat.com Date: Wed, 02 Mar 2016 16:16:01 -0500 Message-ID: <20160302211601.2124.64160.stgit@localhost.localdomain> In-Reply-To: <20160302205129.2124.67042.stgit@localhost.localdomain> References: <20160302205129.2124.67042.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The current code path is capable of grossly overestimating the number of descriptors needed to transmit a new frame. This specifically occurs if the skb contains a number of 4K pages. The issue is that the logic for determining the descriptors needed is ((S) >> (X)) + 1. When X is 12 it means that we were indicating that we required 2 descriptors for each 4K page when we only needed one. This change corrects this by instead adding (1 << (X)) - 1 to the S value instead of adding 1 after the fact. This way we get an accurate descriptor needed count as we are essentially doing a DIV_ROUNDUP(). Reported-by: Ivan Suzdal Signed-off-by: Alexander Duyck Tested-by: Aaron Brown --- drivers/net/ethernet/intel/e1000/e1000_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c index 3fc7bde..d213fb4 100644 --- a/drivers/net/ethernet/intel/e1000/e1000_main.c +++ b/drivers/net/ethernet/intel/e1000/e1000_main.c @@ -3106,7 +3106,7 @@ static int e1000_maybe_stop_tx(struct net_device *netdev, return __e1000_maybe_stop_tx(netdev, size); } -#define TXD_USE_COUNT(S, X) (((S) >> (X)) + 1) +#define TXD_USE_COUNT(S, X) (((S) + ((1 << (X)) - 1)) >> (X)) static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb, struct net_device *netdev) {