diff options
author | Krishna Kumar <krkumar2@in.ibm.com> | 2009-10-19 19:46:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-10-20 21:55:45 -0400 |
commit | e022f0b4a03f4fff9323b509df023b8af635716e (patch) | |
tree | f287633fd72c4f70882b768836101acff7d1bc62 /include/net/sock.h | |
parent | 748879776e3b738d53e64df6dbec7394b829462a (diff) |
net: Introduce sk_tx_queue_mapping
Introduce sk_tx_queue_mapping; and functions that set, test and
get this value. Reset sk_tx_queue_mapping to -1 whenever the dst
cache is set/reset, and in socket alloc. Setting txq to -1 and
using valid txq=<0 to n-1> allows the tx path to use the value
of sk_tx_queue_mapping directly instead of subtracting 1 on every
tx.
Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/sock.h')
-rw-r--r-- | include/net/sock.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index 1364428f53f2..55de3bd719a5 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -107,6 +107,7 @@ struct net; | |||
107 | * @skc_node: main hash linkage for various protocol lookup tables | 107 | * @skc_node: main hash linkage for various protocol lookup tables |
108 | * @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol | 108 | * @skc_nulls_node: main hash linkage for UDP/UDP-Lite protocol |
109 | * @skc_refcnt: reference count | 109 | * @skc_refcnt: reference count |
110 | * @skc_tx_queue_mapping: tx queue number for this connection | ||
110 | * @skc_hash: hash value used with various protocol lookup tables | 111 | * @skc_hash: hash value used with various protocol lookup tables |
111 | * @skc_family: network address family | 112 | * @skc_family: network address family |
112 | * @skc_state: Connection state | 113 | * @skc_state: Connection state |
@@ -128,6 +129,7 @@ struct sock_common { | |||
128 | struct hlist_nulls_node skc_nulls_node; | 129 | struct hlist_nulls_node skc_nulls_node; |
129 | }; | 130 | }; |
130 | atomic_t skc_refcnt; | 131 | atomic_t skc_refcnt; |
132 | int skc_tx_queue_mapping; | ||
131 | 133 | ||
132 | unsigned int skc_hash; | 134 | unsigned int skc_hash; |
133 | unsigned short skc_family; | 135 | unsigned short skc_family; |
@@ -215,6 +217,7 @@ struct sock { | |||
215 | #define sk_node __sk_common.skc_node | 217 | #define sk_node __sk_common.skc_node |
216 | #define sk_nulls_node __sk_common.skc_nulls_node | 218 | #define sk_nulls_node __sk_common.skc_nulls_node |
217 | #define sk_refcnt __sk_common.skc_refcnt | 219 | #define sk_refcnt __sk_common.skc_refcnt |
220 | #define sk_tx_queue_mapping __sk_common.skc_tx_queue_mapping | ||
218 | 221 | ||
219 | #define sk_copy_start __sk_common.skc_hash | 222 | #define sk_copy_start __sk_common.skc_hash |
220 | #define sk_hash __sk_common.skc_hash | 223 | #define sk_hash __sk_common.skc_hash |
@@ -1094,8 +1097,29 @@ static inline void sock_put(struct sock *sk) | |||
1094 | extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb, | 1097 | extern int sk_receive_skb(struct sock *sk, struct sk_buff *skb, |
1095 | const int nested); | 1098 | const int nested); |
1096 | 1099 | ||
1100 | static inline void sk_tx_queue_set(struct sock *sk, int tx_queue) | ||
1101 | { | ||
1102 | sk->sk_tx_queue_mapping = tx_queue; | ||
1103 | } | ||
1104 | |||
1105 | static inline void sk_tx_queue_clear(struct sock *sk) | ||
1106 | { | ||
1107 | sk->sk_tx_queue_mapping = -1; | ||
1108 | } | ||
1109 | |||
1110 | static inline int sk_tx_queue_get(const struct sock *sk) | ||
1111 | { | ||
1112 | return sk->sk_tx_queue_mapping; | ||
1113 | } | ||
1114 | |||
1115 | static inline bool sk_tx_queue_recorded(const struct sock *sk) | ||
1116 | { | ||
1117 | return (sk && sk->sk_tx_queue_mapping >= 0); | ||
1118 | } | ||
1119 | |||
1097 | static inline void sk_set_socket(struct sock *sk, struct socket *sock) | 1120 | static inline void sk_set_socket(struct sock *sk, struct socket *sock) |
1098 | { | 1121 | { |
1122 | sk_tx_queue_clear(sk); | ||
1099 | sk->sk_socket = sock; | 1123 | sk->sk_socket = sock; |
1100 | } | 1124 | } |
1101 | 1125 | ||
@@ -1152,6 +1176,7 @@ __sk_dst_set(struct sock *sk, struct dst_entry *dst) | |||
1152 | { | 1176 | { |
1153 | struct dst_entry *old_dst; | 1177 | struct dst_entry *old_dst; |
1154 | 1178 | ||
1179 | sk_tx_queue_clear(sk); | ||
1155 | old_dst = sk->sk_dst_cache; | 1180 | old_dst = sk->sk_dst_cache; |
1156 | sk->sk_dst_cache = dst; | 1181 | sk->sk_dst_cache = dst; |
1157 | dst_release(old_dst); | 1182 | dst_release(old_dst); |
@@ -1170,6 +1195,7 @@ __sk_dst_reset(struct sock *sk) | |||
1170 | { | 1195 | { |
1171 | struct dst_entry *old_dst; | 1196 | struct dst_entry *old_dst; |
1172 | 1197 | ||
1198 | sk_tx_queue_clear(sk); | ||
1173 | old_dst = sk->sk_dst_cache; | 1199 | old_dst = sk->sk_dst_cache; |
1174 | sk->sk_dst_cache = NULL; | 1200 | sk->sk_dst_cache = NULL; |
1175 | dst_release(old_dst); | 1201 | dst_release(old_dst); |