From patchwork Mon Feb 6 01:24:39 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Chan X-Patchwork-Id: 139673 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 0D8FF1007D4 for ; Mon, 6 Feb 2012 12:18:00 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754779Ab2BFBR6 (ORCPT ); Sun, 5 Feb 2012 20:17:58 -0500 Received: from mms3.broadcom.com ([216.31.210.19]:3298 "EHLO MMS3.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754641Ab2BFBRu (ORCPT ); Sun, 5 Feb 2012 20:17:50 -0500 Received: from [10.9.200.131] by MMS3.broadcom.com with ESMTP (Broadcom SMTP Relay (Email Firewall v6.3.2)); Sun, 05 Feb 2012 17:25:41 -0800 X-Server-Uuid: B55A25B1-5D7D-41F8-BC53-C57E7AD3C201 Received: from mail-irva-13.broadcom.com (10.11.16.103) by IRVEXCHHUB01.corp.ad.broadcom.com (10.9.200.131) with Microsoft SMTP Server id 8.2.247.2; Sun, 5 Feb 2012 17:17:13 -0800 Received: from dell (dhcp-10-12-137-59.irv.broadcom.com [10.12.137.59]) by mail-irva-13.broadcom.com (Postfix) with ESMTP id EB333BC394; Sun, 5 Feb 2012 17:17:12 -0800 (PST) From: "Michael Chan" To: davem@davemloft.net cc: netdev@vger.kernel.org Subject: [PATCH 2/3 net-next] bnx2: Add missing memory barrier in bnx2_start_xmit() Date: Sun, 5 Feb 2012 17:24:39 -0800 Message-ID: <1328491480-13030-2-git-send-email-mchan@broadcom.com> X-Mailer: git-send-email 1.5.5.GIT In-Reply-To: <1328491480-13030-1-git-send-email-mchan@broadcom.com> References: <1328491480-13030-1-git-send-email-mchan@broadcom.com> MIME-Version: 1.0 X-WSS-ID: 6331F39F50420353903-02-01 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Vlad Zolotarov Sync DMA descriptor before hitting the TX mailbox for weak memory model CPUs. There has been discussions several years ago about this. Some believe that writel() should guarantee ordering. Others want explicit barriers if necessary. Today writel() does not have the ordering guarantee and many other drivers use explicit barriers. Signed-off-by: Vlad Zolotarov Signed-off-by: Michael Chan --- drivers/net/ethernet/broadcom/bnx2.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c index 2ab31da..7105989 100644 --- a/drivers/net/ethernet/broadcom/bnx2.c +++ b/drivers/net/ethernet/broadcom/bnx2.c @@ -6565,6 +6565,9 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev) } txbd->tx_bd_vlan_tag_flags |= TX_BD_FLAGS_END; + /* Sync BD data before updating TX mailbox */ + wmb(); + netdev_tx_sent_queue(txq, skb->len); prod = NEXT_TX_BD(prod);