From patchwork Tue Dec 16 07:27:05 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sakari Ailus X-Patchwork-Id: 14183 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 55FA3DDF4A for ; Tue, 16 Dec 2008 18:35:22 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751902AbYLPHfR (ORCPT ); Tue, 16 Dec 2008 02:35:17 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751694AbYLPHfR (ORCPT ); Tue, 16 Dec 2008 02:35:17 -0500 Received: from gw01.mail.saunalahti.fi ([195.197.172.115]:41200 "EHLO gw01.mail.saunalahti.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751189AbYLPHfQ (ORCPT ); Tue, 16 Dec 2008 02:35:16 -0500 X-Greylist: delayed 484 seconds by postgrey-1.27 at vger.kernel.org; Tue, 16 Dec 2008 02:35:15 EST Received: from retiisi.dyndns.org (a91-152-223-52.elisa-laajakaista.fi [91.152.223.52]) by gw01.mail.saunalahti.fi (Postfix) with ESMTP id 861B6151509; Tue, 16 Dec 2008 09:27:06 +0200 (EET) Received: from masiina.localdomain (masiina.localdomain [192.168.1.1]) by retiisi.dyndns.org (Postfix) with ESMTP id 3DDBC528A2; Tue, 16 Dec 2008 09:27:06 +0200 (EET) Received: from masiina.localdomain (localhost [127.0.0.1]) by masiina.localdomain (8.13.8/8.13.8/Debian-3) with ESMTP id mBG7R5ke002644; Tue, 16 Dec 2008 09:27:05 +0200 Received: (from sakke@localhost) by masiina.localdomain (8.13.8/8.13.8/Submit) id mBG7R5ro002641; Tue, 16 Dec 2008 09:27:05 +0200 From: Sakari Ailus To: netdev@vger.kernel.org Cc: Sakari Ailus Subject: [PATCH] tlan: Fix small (< 64 bytes) datagram transmissions Date: Tue, 16 Dec 2008 09:27:05 +0200 Message-Id: <1229412425-2619-1-git-send-email-sakari.ailus@iki.fi> X-Mailer: git-send-email 1.5.6.5 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The TLAN chip does not support tranmissions smaller than 64 bytes. Smaller transfers need to be padded up to that size. This was broken by commit id 41873e9aff0632d80c74380d58a89e8d420151bd. Signed-off-by: Sakari Ailus --- drivers/net/tlan.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/tlan.c b/drivers/net/tlan.c index c41d687..cf8cdaf 100644 --- a/drivers/net/tlan.c +++ b/drivers/net/tlan.c @@ -1098,6 +1098,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) dma_addr_t tail_list_phys; u8 *tail_buffer; unsigned long flags; + unsigned int txlen; if ( ! priv->phyOnline ) { TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", @@ -1108,6 +1109,7 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) if (skb_padto(skb, TLAN_MIN_FRAME_SIZE)) return 0; + txlen = max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE); tail_list = priv->txList + priv->txTail; tail_list_phys = priv->txListDMA + sizeof(TLanList) * priv->txTail; @@ -1125,16 +1127,16 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) if ( bbuf ) { tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); - skb_copy_from_linear_data(skb, tail_buffer, skb->len); + skb_copy_from_linear_data(skb, tail_buffer, txlen); } else { tail_list->buffer[0].address = pci_map_single(priv->pciDev, - skb->data, skb->len, + skb->data, txlen, PCI_DMA_TODEVICE); TLan_StoreSKB(tail_list, skb); } - tail_list->frameSize = (u16) skb->len; - tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len; + tail_list->frameSize = (u16) txlen; + tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen; tail_list->buffer[1].count = 0; tail_list->buffer[1].address = 0;