From patchwork Tue Oct 11 11:25:22 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 118940 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 85747B6F68 for ; Tue, 11 Oct 2011 22:25:29 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754651Ab1JKLZY (ORCPT ); Tue, 11 Oct 2011 07:25:24 -0400 Received: from mail-iy0-f174.google.com ([209.85.210.174]:55043 "EHLO mail-iy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752266Ab1JKLZX (ORCPT ); Tue, 11 Oct 2011 07:25:23 -0400 Received: by iaek3 with SMTP id k3so510832iae.19 for ; Tue, 11 Oct 2011 04:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=wxgqZXn5Xe/X77QgveusculveGV3WksjAOw/0SuI9vs=; b=Tj9lo+vK+/IERIg95u8uSv11dy0mL9qjG+KDVLcFJqATT8Mz7+CisCu5QOr1y1T/ZL eJD581E2TGrs9KYbILR9Zzm0UQ3l1/Wc/BoH3ObPKFvA4KZqGP8nz0eAvEBtNfg/vLcI mdKQDkda+2qOnzPdEsolMjRVw/Ukcc4YPUPC4= MIME-Version: 1.0 Received: by 10.42.150.134 with SMTP id a6mr25208710icw.37.1318332322931; Tue, 11 Oct 2011 04:25:22 -0700 (PDT) Received: by 10.42.172.197 with HTTP; Tue, 11 Oct 2011 04:25:22 -0700 (PDT) In-Reply-To: <4E941198.9000307@msgid.tls.msk.ru> References: <4E90212D.8030009@msgid.tls.msk.ru> <1318091046.5276.22.camel@edumazet-laptop> <4E9097C0.2030307@gmail.com> <20111010101954.GB2840382@jupiter.n2.diac24.net> <4E9307CB.4050704@msgid.tls.msk.ru> <1318259152.3227.0.camel@edumazet-HP-Compaq-6005-Pro-SFF-PC> <20111010151343.GB3260852@jupiter.n2.diac24.net> <4E932278.8010802@tls.msk.ru> <4E941198.9000307@msgid.tls.msk.ru> Date: Tue, 11 Oct 2011 13:25:22 +0200 Message-ID: Subject: Re: e100 + VLANs? From: Eric Dumazet To: Michael Tokarev Cc: David Lamparter , jeffrey.t.kirsher@intel.com, netdev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org > So, is that a hardware limitation? Its a driver bug This comes from fact that sizeof(struct rfd) = 16 and VLAN_ETH_FRAME_LEN is 1518 driver mixes VLAN_ETH_FRAME_LEN and 1500+4+sizeof(struct rfd) (1520, not 1518) It therefore misses 2 bytes for large frames (VLAN tagged) Fix is to remove VLAN_ETH_FRAME_LEN references for good... if (!(rx->skb = netdev_alloc_skb_ip_align(nic->netdev, RFD_BUF_LEN))) @@ -2058,7 +2058,7 @@ static void e100_rx_clean(struct nic *nic, unsigned int *work_done, pci_dma_sync_single_for_device(nic->pdev, old_before_last_rx->dma_addr, sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL); - old_before_last_rfd->size = cpu_to_le16(VLAN_ETH_FRAME_LEN); + old_before_last_rfd->size = cpu_to_le16(RFD_BUF_LEN); pci_dma_sync_single_for_device(nic->pdev, old_before_last_rx->dma_addr, sizeof(struct rfd), PCI_DMA_BIDIRECTIONAL); diff --git a/drivers/net/e100.c b/drivers/net/e100.c index c1352c6..3287d31 100644 --- a/drivers/net/e100.c +++ b/drivers/net/e100.c @@ -435,6 +435,7 @@ struct rfd { __le16 actual_size; __le16 size; }; +#define RFD_BUF_LEN (sizeof(struct rfd) + ETH_DATA_LEN + VLAN_HLEN) struct rx { struct rx *next, *prev; @@ -1075,7 +1076,7 @@ static void e100_get_defaults(struct nic *nic) /* Template for a freshly allocated RFD */ nic->blank_rfd.command = 0; nic->blank_rfd.rbd = cpu_to_le32(0xFFFFFFFF); - nic->blank_rfd.size = cpu_to_le16(VLAN_ETH_FRAME_LEN); + nic->blank_rfd.size = cpu_to_le16(RFD_BUF_LEN); /* MII setup */ nic->mii.phy_id_mask = 0x1F; @@ -1881,7 +1882,6 @@ static inline void e100_start_receiver(struct nic *nic, struct rx *rx) } } -#define RFD_BUF_LEN (sizeof(struct rfd) + VLAN_ETH_FRAME_LEN) static int e100_rx_alloc_skb(struct nic *nic, struct rx *rx) {