From patchwork Tue Aug 23 05:41:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathya Perla X-Patchwork-Id: 111043 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 7A3D4B6F98 for ; Tue, 23 Aug 2011 15:43:15 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753879Ab1HWFmx (ORCPT ); Tue, 23 Aug 2011 01:42:53 -0400 Received: from exht1.emulex.com ([138.239.113.183]:27624 "EHLO exht1.ad.emulex.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751595Ab1HWFmt (ORCPT ); Tue, 23 Aug 2011 01:42:49 -0400 Received: from S20-BMW.localdomain (10.192.238.20) by exht1.ad.emulex.com (138.239.113.183) with Microsoft SMTP Server id 8.3.159.2; Mon, 22 Aug 2011 22:40:21 -0700 From: Sathya Perla To: Subject: [PATCH net-next 1/5] be2net: Fix race in posting rx buffers. Date: Tue, 23 Aug 2011 11:11:51 +0530 Message-ID: <1314078115-8121-2-git-send-email-sathya.perla@emulex.com> X-Mailer: git-send-email 1.7.4 In-Reply-To: <1314078115-8121-1-git-send-email-sathya.perla@emulex.com> References: <1314078115-8121-1-git-send-email-sathya.perla@emulex.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There is a possibility of be_post_rx_frags() being called simultaneously from both be_worker() (when rx_post_starved) and be_poll_rx() (when rxq->used is 0). This can be avoided by posting rx buffers only when some completions have been reaped. Signed-off-by: Sathya Perla --- drivers/net/ethernet/emulex/benet/be_main.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index ef62594..09eb699 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -1862,7 +1862,7 @@ loop_continue: } /* Refill the queue */ - if (atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM) + if (work_done && atomic_read(&rxo->q.used) < RX_FRAGS_REFILL_WM) be_post_rx_frags(rxo, GFP_ATOMIC); /* All consumed */