Optimize AX.25 socket list lock
Subsystems (2)
Right now all uses of the ax25_list_lock lock are _bh locks but knowing some code is only ever getting invoked from _bh context we can better.
Signed-off-by Ralf Baechle <[email protected]>
--- net/ax25/af_ax25.c | 14 +++++++------- net/ax25/ax25_ds_subr.c | 8 ++++---- net/ax25/ax25_ds_timer.c | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-)
net/ax25/ax25_ds_subr.c +4 -4
@@ -80,7 +80,7 @@ void ax25_ds_enquiry_response(ax25_cb *aax25_start_t3timer (ax25);ax25_ds_set_timer (ax25->ax25_dev); -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (ax25o, node, &ax25_list) {if (ax25o == ax25)continue ;
@@ -106,7 +106,7 @@ void ax25_ds_enquiry_response(ax25_cb *aif (ax25o->state !=AX25_STATE_0 )ax25_start_t3timer (ax25o); } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock); }void ax25_ds_establish_data_link (ax25_cb *ax25)
@@ -162,13 +162,13 @@ static int ax25_check_dama_slave(ax25_deint res =0 ;struct hlist_node *node; -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (ax25, node, &ax25_list)if (ax25->ax25_dev == ax25_dev && (ax25->condition &AX25_COND_DAMA_MODE ) && ax25->state >AX25_STATE_1 ) { res =1 ;break ; } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock);return res; }
net/ax25/ax25_ds_timer.c +2 -2
@@ -85,7 +85,7 @@ static void ax25_ds_timeout(unsigned lonreturn ; } -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (ax25, node, &ax25_list) {if (ax25->ax25_dev != ax25_dev || !(ax25->condition &AX25_COND_DAMA_MODE ))continue ;
@@ -93,7 +93,7 @@ static void ax25_ds_timeout(unsigned lonax25_send_control (ax25,AX25_DISC ,AX25_POLLON ,AX25_COMMAND );ax25_disconnect (ax25,ETIMEDOUT ); } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock);ax25_dev_dama_off (ax25_dev); }
net/ax25/af_ax25.c +7 -7
@@ -145,7 +145,7 @@ struct sock *ax25_find_listener(ax25_addax25_cb *s;struct hlist_node *node; -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (s, node, &ax25_list) {if ((s->iamdigi && !digi) || (!s->iamdigi && digi))continue ;
@@ -154,12 +154,12 @@ struct sock *ax25_find_listener(ax25_add/* If device is null we match any device */ if (s->ax25_dev ==NULL || s->ax25_dev->dev == dev) {sock_hold (s->sk); -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock);return s->sk; } } } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock);return NULL ; }
@@ -174,7 +174,7 @@ struct sock *ax25_get_socket(ax25_addresax25_cb *s;struct hlist_node *node; -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (s, node, &ax25_list) { if (s->sk && !ax25cmp(&s->source_addr, my_addr) && !ax25cmp(&s->dest_addr, dest_addr) &&
@@ -185,7 +185,7 @@ struct sock *ax25_get_socket(ax25_addres } } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock);return sk; }
@@ -235,7 +235,7 @@ void ax25_send_to_raw(ax25_address *addrstruct sk_buff *copy;struct hlist_node *node; -spin_lock_bh (&ax25_list_lock); +spin_lock (&ax25_list_lock);ax25_for_each (s, node, &ax25_list) { if (s->sk != NULL && ax25cmp(&s->source_addr, addr) == 0 && s->sk->sk_type == SOCK_RAW &&
@@ -248,7 +248,7 @@ void ax25_send_to_raw(ax25_address *addrkfree_skb (copy); } } -spin_unlock_bh (&ax25_list_lock); +spin_unlock (&ax25_list_lock); }/*
From: Ralf Baechle <[email protected]>
Date: Tue, 11 Jul 2006 23:20:45 +0100
Quoted 4 lines
Right now all uses of the
ax25_list_locklock are_bhlocks but knowing some code is only ever getting invoked from_bhcontext we can better.Signed-off-by Ralf Baechle <[email protected]>
Applied, thanks Ralf.