Staging: batman-adv: move queue counters into bat_priv
authorSimon Wunderlich <siwu@hrz.tu-chemnitz.de>
Sat, 4 Sep 2010 23:58:23 +0000 (01:58 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 5 Sep 2010 07:29:44 +0000 (00:29 -0700)
to support multiple mesh devices later, we need to move global variables
like the queues into corresponding private structs bat_priv of the soft
devices.

Note that this patch still has a lot of FIXMEs and depends on the global
soft_device variable. This should be resolved later, e.g. by referencing
the parent soft device in batman_if.

Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
[sven.eckelmann@gmx.de: Rework on top of current version]
Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/batman-adv/aggregation.c
drivers/staging/batman-adv/bat_sysfs.c
drivers/staging/batman-adv/main.c
drivers/staging/batman-adv/main.h
drivers/staging/batman-adv/send.c
drivers/staging/batman-adv/types.h

index 9862d16..d738b7a 100644 (file)
@@ -111,7 +111,7 @@ static void new_aggregated_packet(unsigned char *packet_buff,
 
        /* own packet should always be scheduled */
        if (!own_packet) {
-               if (!atomic_dec_not_zero(&batman_queue_left)) {
+               if (!atomic_dec_not_zero(&bat_priv->batman_queue_left)) {
                        bat_dbg(DBG_BATMAN, bat_priv,
                                "batman packet queue full\n");
                        return;
@@ -121,7 +121,7 @@ static void new_aggregated_packet(unsigned char *packet_buff,
        forw_packet_aggr = kmalloc(sizeof(struct forw_packet), GFP_ATOMIC);
        if (!forw_packet_aggr) {
                if (!own_packet)
-                       atomic_inc(&batman_queue_left);
+                       atomic_inc(&bat_priv->batman_queue_left);
                return;
        }
 
@@ -129,7 +129,7 @@ static void new_aggregated_packet(unsigned char *packet_buff,
                                                GFP_ATOMIC);
        if (!forw_packet_aggr->packet_buff) {
                if (!own_packet)
-                       atomic_inc(&batman_queue_left);
+                       atomic_inc(&bat_priv->batman_queue_left);
                kfree(forw_packet_aggr);
                return;
        }
index 05ca15a..d49adde 100644 (file)
@@ -311,6 +311,8 @@ int sysfs_add_meshif(struct net_device *dev)
        atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE);
        atomic_set(&bat_priv->orig_interval, 1000);
        atomic_set(&bat_priv->log_level, 0);
+       atomic_set(&bat_priv->bcast_queue_left, BCAST_QUEUE_LEN);
+       atomic_set(&bat_priv->batman_queue_left, BATMAN_QUEUE_LEN);
 
        bat_priv->primary_if = NULL;
        bat_priv->num_ifaces = 0;
index ef7c20a..c0a3373 100644 (file)
@@ -42,9 +42,6 @@ DEFINE_SPINLOCK(orig_hash_lock);
 DEFINE_SPINLOCK(forw_bat_list_lock);
 DEFINE_SPINLOCK(forw_bcast_list_lock);
 
-atomic_t bcast_queue_left;
-atomic_t batman_queue_left;
-
 int16_t num_hna;
 
 struct net_device *soft_device;
@@ -69,9 +66,6 @@ static int __init batman_init(void)
 
        atomic_set(&module_state, MODULE_INACTIVE);
 
-       atomic_set(&bcast_queue_left, BCAST_QUEUE_LEN);
-       atomic_set(&batman_queue_left, BATMAN_QUEUE_LEN);
-
        /* the name should not be longer than 10 chars - see
         * http://lwn.net/Articles/23634/ */
        bat_event_workqueue = create_singlethread_workqueue("bat_events");
index 9b30eef..2d364e0 100644 (file)
@@ -136,8 +136,6 @@ extern spinlock_t orig_hash_lock;
 extern spinlock_t forw_bat_list_lock;
 extern spinlock_t forw_bcast_list_lock;
 
-extern atomic_t bcast_queue_left;
-extern atomic_t batman_queue_left;
 extern int16_t num_hna;
 
 extern struct net_device *soft_device;
index da3c82e..e874cae 100644 (file)
@@ -404,7 +404,7 @@ int add_bcast_packet_to_list(struct sk_buff *skb)
        /* FIXME: each batman_if will be attached to a softif */
        struct bat_priv *bat_priv = netdev_priv(soft_device);
 
-       if (!atomic_dec_not_zero(&bcast_queue_left)) {
+       if (!atomic_dec_not_zero(&bat_priv->bcast_queue_left)) {
                bat_dbg(DBG_BATMAN, bat_priv, "bcast packet queue full\n");
                goto out;
        }
@@ -436,7 +436,7 @@ int add_bcast_packet_to_list(struct sk_buff *skb)
 packet_free:
        kfree(forw_packet);
 out_and_inc:
-       atomic_inc(&bcast_queue_left);
+       atomic_inc(&bat_priv->bcast_queue_left);
 out:
        return NETDEV_TX_BUSY;
 }
@@ -450,6 +450,8 @@ static void send_outstanding_bcast_packet(struct work_struct *work)
                container_of(delayed_work, struct forw_packet, delayed_work);
        unsigned long flags;
        struct sk_buff *skb1;
+       /* FIXME: each batman_if will be attached to a softif */
+       struct bat_priv *bat_priv = netdev_priv(soft_device);
 
        spin_lock_irqsave(&forw_bcast_list_lock, flags);
        hlist_del(&forw_packet->list);
@@ -479,7 +481,7 @@ static void send_outstanding_bcast_packet(struct work_struct *work)
 
 out:
        forw_packet_free(forw_packet);
-       atomic_inc(&bcast_queue_left);
+       atomic_inc(&bat_priv->bcast_queue_left);
 }
 
 void send_outstanding_bat_packet(struct work_struct *work)
@@ -489,6 +491,8 @@ void send_outstanding_bat_packet(struct work_struct *work)
        struct forw_packet *forw_packet =
                container_of(delayed_work, struct forw_packet, delayed_work);
        unsigned long flags;
+       /* FIXME: each batman_if will be attached to a softif */
+       struct bat_priv *bat_priv = netdev_priv(soft_device);
 
        spin_lock_irqsave(&forw_bat_list_lock, flags);
        hlist_del(&forw_packet->list);
@@ -510,7 +514,7 @@ void send_outstanding_bat_packet(struct work_struct *work)
 out:
        /* don't count own packet */
        if (!forw_packet->own)
-               atomic_inc(&batman_queue_left);
+               atomic_inc(&bat_priv->batman_queue_left);
 
        forw_packet_free(forw_packet);
 }
index 9aa9d36..67bf4db 100644 (file)
@@ -113,6 +113,8 @@ struct bat_priv {
        atomic_t vis_mode;
        atomic_t orig_interval;
        atomic_t log_level;
+       atomic_t bcast_queue_left;
+       atomic_t batman_queue_left;
        char num_ifaces;
        struct debug_log *debug_log;
        struct batman_if *primary_if;