From patchwork Sun Mar 6 02:41:20 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Linus_L=C3=BCssing?= X-Patchwork-Id: 854 Return-Path: Received: from fmmailgate02.web.de (fmmailgate02.web.de [217.72.192.227]) by open-mesh.org (Postfix) with ESMTP id BBC5C154234 for ; Sun, 6 Mar 2011 03:41:52 +0100 (CET) Received: from smtp06.web.de ( [172.20.5.172]) by fmmailgate02.web.de (Postfix) with ESMTP id EE79219A1755D for ; Sun, 6 Mar 2011 03:41:31 +0100 (CET) Received: from [46.126.246.98] (helo=localhost) by smtp06.web.de with asmtp (TLSv1:AES128-SHA:128) (WEB.DE 4.110 #2) id 1Pw3uV-00067y-00; Sun, 06 Mar 2011 03:41:31 +0100 From: =?UTF-8?q?Linus=20L=C3=BCssing?= To: b.a.t.m.a.n@lists.open-mesh.org Date: Sun, 6 Mar 2011 03:41:20 +0100 Message-Id: <1299379280-9306-3-git-send-email-linus.luessing@web.de> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1299379280-9306-1-git-send-email-linus.luessing@web.de> References: <1299377954-8690-1-git-send-email-linus.luessing@web.de> <1299379280-9306-1-git-send-email-linus.luessing@web.de> MIME-Version: 1.0 Sender: linus.luessing@web.de X-Sender: linus.luessing@web.de X-Provags-ID: V01U2FsdGVkX1+bVlrGNtPOiF5l3/9Tqa7LUvbU3ixIr28HThpG aO7IkyaVEbmCTTcdN97aSWRvTHVYLgAlw8z1Y8Dg2FLhPAWUIO 9jGm+33ys58JWBUe2eow== Subject: [B.A.T.M.A.N.] [PATCH 2/2] batman-adv: Protect global TQ value and window with a spinlock X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Mar 2011 02:41:52 -0000 Signed-off-by: Linus Lüssing --- originator.c | 1 + routing.c | 4 ++++ types.h | 1 + 3 files changed, 6 insertions(+), 0 deletions(-) diff --git a/batman-adv/originator.c b/batman-adv/originator.c index 31c6b5a..8db9c33 100644 --- a/batman-adv/originator.c +++ b/batman-adv/originator.c @@ -87,6 +87,7 @@ struct neigh_node *create_neighbor(struct orig_node *orig_node, INIT_HLIST_NODE(&neigh_node->list); INIT_LIST_HEAD(&neigh_node->bonding_list); + spin_lock_init(&neigh_node->tq_lock); memcpy(neigh_node->addr, neigh, ETH_ALEN); neigh_node->orig_node = orig_neigh_node; diff --git a/batman-adv/routing.c b/batman-adv/routing.c index ea6b696..0b8e2cf 100644 --- a/batman-adv/routing.c +++ b/batman-adv/routing.c @@ -410,10 +410,12 @@ static void update_orig(struct bat_priv *bat_priv, if (is_duplicate) continue; + spin_lock_bh(&tmp_neigh_node->tq_lock); ring_buffer_set(tmp_neigh_node->tq_recv, &tmp_neigh_node->tq_index, 0); tmp_neigh_node->tq_avg = ring_buffer_avg(tmp_neigh_node->tq_recv); + spin_unlock_bh(&tmp_neigh_node->tq_lock); } if (!neigh_node) { @@ -438,10 +440,12 @@ static void update_orig(struct bat_priv *bat_priv, orig_node->flags = batman_packet->flags; neigh_node->last_valid = jiffies; + spin_lock_bh(&neigh_node->tq_lock); ring_buffer_set(neigh_node->tq_recv, &neigh_node->tq_index, batman_packet->tq); neigh_node->tq_avg = ring_buffer_avg(neigh_node->tq_recv); + spin_unlock_bh(&neigh_node->tq_lock); if (!is_duplicate) { orig_node->last_ttl = batman_packet->ttl; diff --git a/batman-adv/types.h b/batman-adv/types.h index 1854cbb..091476d 100644 --- a/batman-adv/types.h +++ b/batman-adv/types.h @@ -125,6 +125,7 @@ struct neigh_node { struct rcu_head rcu; struct orig_node *orig_node; struct hard_iface *if_incoming; + spinlock_t tq_lock; /* protects: tq_recv, tq_index */ };