From patchwork Mon May 18 06:57:47 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kirsher, Jeffrey T" X-Patchwork-Id: 27336 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@bilbo.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from ozlabs.org (ozlabs.org [203.10.76.45]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "mx.ozlabs.org", Issuer "CA Cert Signing Authority" (verified OK)) by bilbo.ozlabs.org (Postfix) with ESMTPS id 48838B6F56 for ; Mon, 18 May 2009 16:58:19 +1000 (EST) Received: by ozlabs.org (Postfix) id B87FBDE0CC; Mon, 18 May 2009 16:58:14 +1000 (EST) Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 27654DE138 for ; Mon, 18 May 2009 16:58:14 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755398AbZERG6H (ORCPT ); Mon, 18 May 2009 02:58:07 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755549AbZERG6F (ORCPT ); Mon, 18 May 2009 02:58:05 -0400 Received: from qmta08.westchester.pa.mail.comcast.net ([76.96.62.80]:47292 "EHLO QMTA08.westchester.pa.mail.comcast.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755398AbZERG6D (ORCPT ); Mon, 18 May 2009 02:58:03 -0400 Received: from OMTA10.westchester.pa.mail.comcast.net ([76.96.62.28]) by QMTA08.westchester.pa.mail.comcast.net with comcast id suuz1b0020cZkys58uxhRj; Mon, 18 May 2009 06:57:41 +0000 Received: from localhost.localdomain ([63.64.152.142]) by OMTA10.westchester.pa.mail.comcast.net with comcast id suxo1b00234bfcX3WuxqDZ; Mon, 18 May 2009 06:58:01 +0000 From: Jeff Kirsher Subject: [net-next-2.6 PATCH 1/3] ixgbe: set max desc to prevent total RSC packet size of 64K To: davem@davemloft.net Cc: netdev@vger.kernel.org, Alexander Duyck , Jeff Kirsher Date: Sun, 17 May 2009 23:57:47 -0700 Message-ID: <20090518065745.14864.86660.stgit@localhost.localdomain> User-Agent: StGIT/0.14.3 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Alexander Duyck The performance of hardware RSC is greatly reduced if the total for max rsc descriptors multiplied by the buffer size is greater than 65535. To prevent this we need to adjust the max rsc descriptors appropriately. Signed-off-by: Alexander Duyck Signed-off-by: Jeff Kirsher --- drivers/net/ixgbe/ixgbe.h | 2 ++ drivers/net/ixgbe/ixgbe_main.c | 29 ++++++++++++++++++----------- 2 files changed, 20 insertions(+), 11 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/net/ixgbe/ixgbe.h b/drivers/net/ixgbe/ixgbe.h index d291d1c..05a2405 100644 --- a/drivers/net/ixgbe/ixgbe.h +++ b/drivers/net/ixgbe/ixgbe.h @@ -75,6 +75,8 @@ #define IXGBE_RXBUFFER_128 128 /* Used for packet split */ #define IXGBE_RXBUFFER_256 256 /* Used for packet split */ #define IXGBE_RXBUFFER_2048 2048 +#define IXGBE_RXBUFFER_4096 4096 +#define IXGBE_RXBUFFER_8192 8192 #define IXGBE_MAX_RXBUFFER 16384 /* largest size for a single descriptor */ #define IXGBE_RX_HDR_SIZE IXGBE_RXBUFFER_256 diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index b53f265..4ab17ab 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c @@ -1995,21 +1995,28 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter) rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(j)); rscctrl |= IXGBE_RSCCTL_RSCEN; /* - * if packet split is enabled we can only support up - * to max frags + 1 descriptors. + * we must limit the number of descriptors so that the + * total size of max desc * buf_len is not greater + * than 65535 */ - if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) -#if (MAX_SKB_FRAGS < 3) - rscctrl |= IXGBE_RSCCTL_MAXDESC_1; -#elif (MAX_SKB_FRAGS < 7) - rscctrl |= IXGBE_RSCCTL_MAXDESC_4; -#elif (MAX_SKB_FRAGS < 15) + if (adapter->flags & IXGBE_FLAG_RX_PS_ENABLED) { +#if (MAX_SKB_FRAGS > 16) + rscctrl |= IXGBE_RSCCTL_MAXDESC_16; +#elif (MAX_SKB_FRAGS > 8) rscctrl |= IXGBE_RSCCTL_MAXDESC_8; +#elif (MAX_SKB_FRAGS > 4) + rscctrl |= IXGBE_RSCCTL_MAXDESC_4; #else - rscctrl |= IXGBE_RSCCTL_MAXDESC_16; + rscctrl |= IXGBE_RSCCTL_MAXDESC_1; #endif - else - rscctrl |= IXGBE_RSCCTL_MAXDESC_16; + } else { + if (rx_buf_len < IXGBE_RXBUFFER_4096) + rscctrl |= IXGBE_RSCCTL_MAXDESC_16; + else if (rx_buf_len < IXGBE_RXBUFFER_8192) + rscctrl |= IXGBE_RSCCTL_MAXDESC_8; + else + rscctrl |= IXGBE_RSCCTL_MAXDESC_4; + } IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(j), rscctrl); } /* Disable RSC for ACK packets */