From patchwork Tue Dec 22 02:21:37 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Scott Feldman X-Patchwork-Id: 41579 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 E5EE6B6F1C for ; Tue, 22 Dec 2009 13:21:47 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752740AbZLVCVj (ORCPT ); Mon, 21 Dec 2009 21:21:39 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752710AbZLVCVi (ORCPT ); Mon, 21 Dec 2009 21:21:38 -0500 Received: from sj-iport-4.cisco.com ([171.68.10.86]:63278 "EHLO sj-iport-4.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752638AbZLVCVh (ORCPT ); Mon, 21 Dec 2009 21:21:37 -0500 Authentication-Results: sj-iport-4.cisco.com; dkim=neutral (message not signed) header.i=none X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: ApsEAF+8L0urRN+K/2dsb2JhbACECrwYhwCPRIEvgi1SBA X-IronPort-AV: E=Sophos;i="4.47,434,1257120000"; d="scan'208";a="66041640" Received: from sj-core-4.cisco.com ([171.68.223.138]) by sj-iport-4.cisco.com with ESMTP; 22 Dec 2009 02:21:37 +0000 Received: from savbu-pc100.cisco.com (savbu-pc100.cisco.com [10.193.164.29]) by sj-core-4.cisco.com (8.13.8/8.14.3) with ESMTP id nBM2Lbxt001706; Tue, 22 Dec 2009 02:21:37 GMT From: Scott Feldman Subject: [net-next PATCH 3/6] enic: minimize pkt filter updates to firmware To: davem@davemloft.net Cc: netdev@vger.kernel.org Date: Mon, 21 Dec 2009 18:21:37 -0800 Message-ID: <20091222022136.30220.78631.stgit@savbu-pc100.cisco.com> In-Reply-To: <20091222021857.30220.51795.stgit@savbu-pc100.cisco.com> References: <20091222021857.30220.51795.stgit@savbu-pc100.cisco.com> User-Agent: StGIT/0.12.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Scott Feldman In set_multicast(), only push pkt filter changes down to firmware if pkt filter actually changes. Signed-off-by: Vasanthy Kolluri Signed-off-by: Scott Feldman --- drivers/net/enic/enic.h | 1 + drivers/net/enic/enic_main.c | 8 ++++++-- 2 files changed, 7 insertions(+), 2 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/enic/enic.h b/drivers/net/enic/enic.h index 8dd0105..b090d65 100644 --- a/drivers/net/enic/enic.h +++ b/drivers/net/enic/enic.h @@ -89,6 +89,7 @@ struct enic { spinlock_t devcmd_lock; u8 mac_addr[ETH_ALEN]; u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN]; + unsigned int flags; unsigned int mc_count; int csum_rx_enabled; u32 port_mtu; diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index 452a6b7..019b148 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -771,6 +771,7 @@ static void enic_set_multicast_list(struct net_device *netdev) int promisc = (netdev->flags & IFF_PROMISC) ? 1 : 0; int allmulti = (netdev->flags & IFF_ALLMULTI) || (netdev->mc_count > ENIC_MULTICAST_PERFECT_FILTERS); + unsigned int flags = netdev->flags | (allmulti ? IFF_ALLMULTI : 0); u8 mc_addr[ENIC_MULTICAST_PERFECT_FILTERS][ETH_ALEN]; unsigned int mc_count = netdev->mc_count; unsigned int i, j; @@ -780,8 +781,11 @@ static void enic_set_multicast_list(struct net_device *netdev) spin_lock(&enic->devcmd_lock); - vnic_dev_packet_filter(enic->vdev, directed, - multicast, broadcast, promisc, allmulti); + if (enic->flags != flags) { + enic->flags = flags; + vnic_dev_packet_filter(enic->vdev, directed, + multicast, broadcast, promisc, allmulti); + } /* Is there an easier way? Trying to minimize to * calls to add/del multicast addrs. We keep the