Commit 73d6ac633c6c0ca703f90db0b808d9593e46aef6
Committed by
David S. Miller
1 parent
1c01a80cfe
Exists in
master
and in
4 other branches
caif: code cleanup
Cleanup of new CAIF code. * make local functions static * remove code that is never used * expand get_caif_conf() since wrapper is no longer needed * make args to comparison functions const * rename connect_req_to_link_param to keep exported names consistent Compile tested only. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Acked-by: Sjur Brændeland <sjur.brandeland@stericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 12 changed files with 30 additions and 416 deletions Side-by-side Diff
include/net/caif/caif_dev.h
... | ... | @@ -74,19 +74,8 @@ |
74 | 74 | int caif_disconnect_client(struct cflayer *client_layer); |
75 | 75 | |
76 | 76 | /** |
77 | - * caif_release_client - Release adaptation layer reference to client. | |
78 | - * | |
79 | - * @client_layer: Client layer. | |
80 | - * | |
81 | - * Releases a client/adaptation layer use of the caif stack. | |
82 | - * This function must be used after caif_disconnect_client to | |
83 | - * decrease the reference count of the service layer. | |
84 | - */ | |
85 | -void caif_release_client(struct cflayer *client_layer); | |
86 | - | |
87 | -/** | |
88 | - * connect_req_to_link_param - Translate configuration parameters | |
89 | - * from socket format to internal format. | |
77 | + * caif_connect_req_to_link_param - Translate configuration parameters | |
78 | + * from socket format to internal format. | |
90 | 79 | * @cnfg: Pointer to configuration handler |
91 | 80 | * @con_req: Configuration parameters supplied in function |
92 | 81 | * caif_connect_client |
... | ... | @@ -94,15 +83,9 @@ |
94 | 83 | * setting up channels. |
95 | 84 | * |
96 | 85 | */ |
97 | -int connect_req_to_link_param(struct cfcnfg *cnfg, | |
98 | - struct caif_connect_request *con_req, | |
99 | - struct cfctrl_link_param *channel_setup_param); | |
100 | - | |
101 | -/** | |
102 | - * get_caif_conf() - Get the configuration handler. | |
103 | - */ | |
104 | -struct cfcnfg *get_caif_conf(void); | |
105 | - | |
86 | +int caif_connect_req_to_link_param(struct cfcnfg *cnfg, | |
87 | + struct caif_connect_request *con_req, | |
88 | + struct cfctrl_link_param *setup_param); | |
106 | 89 | |
107 | 90 | #endif /* CAIF_DEV_H_ */ |
include/net/caif/cfctrl.h
... | ... | @@ -121,19 +121,9 @@ |
121 | 121 | struct cflayer *user_layer); |
122 | 122 | int cfctrl_linkdown_req(struct cflayer *cfctrl, u8 linkid, |
123 | 123 | struct cflayer *client); |
124 | -void cfctrl_sleep_req(struct cflayer *cfctrl); | |
125 | -void cfctrl_wake_req(struct cflayer *cfctrl); | |
126 | -void cfctrl_getstartreason_req(struct cflayer *cfctrl); | |
124 | + | |
127 | 125 | struct cflayer *cfctrl_create(void); |
128 | -void cfctrl_set_dnlayer(struct cflayer *this, struct cflayer *dn); | |
129 | -void cfctrl_set_uplayer(struct cflayer *this, struct cflayer *up); | |
130 | 126 | struct cfctrl_rsp *cfctrl_get_respfuncs(struct cflayer *layer); |
131 | -bool cfctrl_req_eq(struct cfctrl_request_info *r1, | |
132 | - struct cfctrl_request_info *r2); | |
133 | -void cfctrl_insert_req(struct cfctrl *ctrl, | |
134 | - struct cfctrl_request_info *req); | |
135 | -struct cfctrl_request_info *cfctrl_remove_req(struct cfctrl *ctrl, | |
136 | - struct cfctrl_request_info *req); | |
137 | 127 | void cfctrl_cancel_req(struct cflayer *layr, struct cflayer *adap_layer); |
138 | 128 | |
139 | 129 | #endif /* CFCTRL_H_ */ |
include/net/caif/cfmuxl.h
... | ... | @@ -16,8 +16,6 @@ |
16 | 16 | struct cflayer *cfmuxl_remove_dnlayer(struct cflayer *layr, u8 phyid); |
17 | 17 | int cfmuxl_set_dnlayer(struct cflayer *layr, struct cflayer *up, u8 phyid); |
18 | 18 | struct cflayer *cfmuxl_remove_uplayer(struct cflayer *layr, u8 linkid); |
19 | -bool cfmuxl_is_phy_inuse(struct cflayer *layr, u8 phyid); | |
20 | -u8 cfmuxl_get_phyid(struct cflayer *layr, u8 channel_id); | |
21 | 19 | |
22 | 20 | #endif /* CFMUXL_H_ */ |
include/net/caif/cfpkt.h
... | ... | @@ -16,12 +16,6 @@ |
16 | 16 | */ |
17 | 17 | struct cfpkt *cfpkt_create(u16 len); |
18 | 18 | |
19 | -/* Create a CAIF packet. | |
20 | - * data Data to copy. | |
21 | - * len Length of packet to be created | |
22 | - * @return New packet. | |
23 | - */ | |
24 | -struct cfpkt *cfpkt_create_uplink(const unsigned char *data, unsigned int len); | |
25 | 19 | /* |
26 | 20 | * Destroy a CAIF Packet. |
27 | 21 | * pkt Packet to be destoyed. |
... | ... | @@ -181,22 +175,6 @@ |
181 | 175 | u16 (*iter_func)(u16 chks, void *buf, u16 len), |
182 | 176 | u16 data); |
183 | 177 | |
184 | -/* Append by giving user access to packet buffer | |
185 | - * cfpkt Packet to append to | |
186 | - * buf Buffer inside pkt that user shall copy data into | |
187 | - * buflen Length of buffer and number of bytes added to packet | |
188 | - * @return 0 on error, 1 on success | |
189 | - */ | |
190 | -int cfpkt_raw_append(struct cfpkt *cfpkt, void **buf, unsigned int buflen); | |
191 | - | |
192 | -/* Extract by giving user access to packet buffer | |
193 | - * cfpkt Packet to extract from | |
194 | - * buf Buffer inside pkt that user shall copy data from | |
195 | - * buflen Length of buffer and number of bytes removed from packet | |
196 | - * @return 0 on error, 1 on success | |
197 | - */ | |
198 | -int cfpkt_raw_extract(struct cfpkt *cfpkt, void **buf, unsigned int buflen); | |
199 | - | |
200 | 178 | /* Map from a "native" packet (e.g. Linux Socket Buffer) to a CAIF packet. |
201 | 179 | * dir - Direction indicating whether this packet is to be sent or received. |
202 | 180 | * nativepkt - The native packet to be transformed to a CAIF packet |
... | ... | @@ -209,59 +187,6 @@ |
209 | 187 | * @return The native packet transformed from a CAIF packet. |
210 | 188 | */ |
211 | 189 | void *cfpkt_tonative(struct cfpkt *pkt); |
212 | - | |
213 | -/* | |
214 | - * Insert a packet in the packet queue. | |
215 | - * pktq Packet queue to insert into | |
216 | - * pkt Packet to be inserted in queue | |
217 | - * prio Priority of packet | |
218 | - */ | |
219 | -void cfpkt_queue(struct cfpktq *pktq, struct cfpkt *pkt, | |
220 | - unsigned short prio); | |
221 | - | |
222 | -/* | |
223 | - * Remove a packet from the packet queue. | |
224 | - * pktq Packet queue to fetch packets from. | |
225 | - * @return Dequeued packet. | |
226 | - */ | |
227 | -struct cfpkt *cfpkt_dequeue(struct cfpktq *pktq); | |
228 | - | |
229 | -/* | |
230 | - * Peek into a packet from the packet queue. | |
231 | - * pktq Packet queue to fetch packets from. | |
232 | - * @return Peeked packet. | |
233 | - */ | |
234 | -struct cfpkt *cfpkt_qpeek(struct cfpktq *pktq); | |
235 | - | |
236 | -/* | |
237 | - * Initiates the packet queue. | |
238 | - * @return Pointer to new packet queue. | |
239 | - */ | |
240 | -struct cfpktq *cfpktq_create(void); | |
241 | - | |
242 | -/* | |
243 | - * Get the number of packets in the queue. | |
244 | - * pktq Packet queue to fetch count from. | |
245 | - * @return Number of packets in queue. | |
246 | - */ | |
247 | -int cfpkt_qcount(struct cfpktq *pktq); | |
248 | - | |
249 | -/* | |
250 | - * Put content of packet into buffer for debuging purposes. | |
251 | - * pkt Packet to copy data from | |
252 | - * buf Buffer to copy data into | |
253 | - * buflen Length of data to copy | |
254 | - * @return Pointer to copied data | |
255 | - */ | |
256 | -char *cfpkt_log_pkt(struct cfpkt *pkt, char *buf, int buflen); | |
257 | - | |
258 | -/* | |
259 | - * Clones a packet and releases the original packet. | |
260 | - * This is used for taking ownership of a packet e.g queueing. | |
261 | - * pkt Packet to clone and release. | |
262 | - * @return Cloned packet. | |
263 | - */ | |
264 | -struct cfpkt *cfpkt_clone_release(struct cfpkt *pkt); | |
265 | 190 | |
266 | 191 | |
267 | 192 | /* |
include/net/caif/cfsrvl.h
... | ... | @@ -22,7 +22,6 @@ |
22 | 22 | struct kref ref; |
23 | 23 | }; |
24 | 24 | |
25 | -void cfsrvl_release(struct kref *kref); | |
26 | 25 | struct cflayer *cfvei_create(u8 linkid, struct dev_info *dev_info); |
27 | 26 | struct cflayer *cfdgml_create(u8 linkid, struct dev_info *dev_info); |
28 | 27 | struct cflayer *cfutill_create(u8 linkid, struct dev_info *dev_info); |
... | ... | @@ -31,7 +30,7 @@ |
31 | 30 | int mtu_size); |
32 | 31 | struct cflayer *cfdbgl_create(u8 linkid, struct dev_info *dev_info); |
33 | 32 | bool cfsrvl_phyid_match(struct cflayer *layer, int phyid); |
34 | -void cfservl_destroy(struct cflayer *layer); | |
33 | + | |
35 | 34 | void cfsrvl_init(struct cfsrvl *service, |
36 | 35 | u8 channel_id, |
37 | 36 | struct dev_info *dev_info, |
net/caif/caif_config_util.c
... | ... | @@ -10,9 +10,9 @@ |
10 | 10 | #include <net/caif/cfcnfg.h> |
11 | 11 | #include <net/caif/caif_dev.h> |
12 | 12 | |
13 | -int connect_req_to_link_param(struct cfcnfg *cnfg, | |
14 | - struct caif_connect_request *s, | |
15 | - struct cfctrl_link_param *l) | |
13 | +int caif_connect_req_to_link_param(struct cfcnfg *cnfg, | |
14 | + struct caif_connect_request *s, | |
15 | + struct cfctrl_link_param *l) | |
16 | 16 | { |
17 | 17 | struct dev_info *dev_info; |
18 | 18 | enum cfcnfg_phy_preference pref; |
net/caif/caif_dev.c
... | ... | @@ -257,7 +257,7 @@ |
257 | 257 | break; |
258 | 258 | } |
259 | 259 | dev_hold(dev); |
260 | - cfcnfg_add_phy_layer(get_caif_conf(), | |
260 | + cfcnfg_add_phy_layer(cfg, | |
261 | 261 | phy_type, |
262 | 262 | dev, |
263 | 263 | &caifd->layer, |
... | ... | @@ -300,7 +300,7 @@ |
300 | 300 | if (atomic_read(&caifd->in_use)) |
301 | 301 | netdev_warn(dev, |
302 | 302 | "Unregistering an active CAIF device\n"); |
303 | - cfcnfg_del_phy_layer(get_caif_conf(), &caifd->layer); | |
303 | + cfcnfg_del_phy_layer(cfg, &caifd->layer); | |
304 | 304 | dev_put(dev); |
305 | 305 | atomic_set(&caifd->state, what); |
306 | 306 | break; |
307 | 307 | |
308 | 308 | |
... | ... | @@ -322,24 +322,18 @@ |
322 | 322 | .priority = 0, |
323 | 323 | }; |
324 | 324 | |
325 | - | |
326 | -struct cfcnfg *get_caif_conf(void) | |
327 | -{ | |
328 | - return cfg; | |
329 | -} | |
330 | -EXPORT_SYMBOL(get_caif_conf); | |
331 | - | |
332 | 325 | int caif_connect_client(struct caif_connect_request *conn_req, |
333 | 326 | struct cflayer *client_layer, int *ifindex, |
334 | 327 | int *headroom, int *tailroom) |
335 | 328 | { |
336 | 329 | struct cfctrl_link_param param; |
337 | 330 | int ret; |
338 | - ret = connect_req_to_link_param(get_caif_conf(), conn_req, ¶m); | |
331 | + | |
332 | + ret = caif_connect_req_to_link_param(cfg, conn_req, ¶m); | |
339 | 333 | if (ret) |
340 | 334 | return ret; |
341 | 335 | /* Hook up the adaptation layer. */ |
342 | - return cfcnfg_add_adaptation_layer(get_caif_conf(), ¶m, | |
336 | + return cfcnfg_add_adaptation_layer(cfg, ¶m, | |
343 | 337 | client_layer, ifindex, |
344 | 338 | headroom, tailroom); |
345 | 339 | } |
346 | 340 | |
... | ... | @@ -347,15 +341,9 @@ |
347 | 341 | |
348 | 342 | int caif_disconnect_client(struct cflayer *adap_layer) |
349 | 343 | { |
350 | - return cfcnfg_disconn_adapt_layer(get_caif_conf(), adap_layer); | |
344 | + return cfcnfg_disconn_adapt_layer(cfg, adap_layer); | |
351 | 345 | } |
352 | 346 | EXPORT_SYMBOL(caif_disconnect_client); |
353 | - | |
354 | -void caif_release_client(struct cflayer *adap_layer) | |
355 | -{ | |
356 | - cfcnfg_release_adap_layer(adap_layer); | |
357 | -} | |
358 | -EXPORT_SYMBOL(caif_release_client); | |
359 | 347 | |
360 | 348 | /* Per-namespace Caif devices handling */ |
361 | 349 | static int caif_init_net(struct net *net) |
net/caif/cfcnfg.c
net/caif/cfctrl.c
... | ... | @@ -58,7 +58,8 @@ |
58 | 58 | return &this->serv.layer; |
59 | 59 | } |
60 | 60 | |
61 | -static bool param_eq(struct cfctrl_link_param *p1, struct cfctrl_link_param *p2) | |
61 | +static bool param_eq(const struct cfctrl_link_param *p1, | |
62 | + const struct cfctrl_link_param *p2) | |
62 | 63 | { |
63 | 64 | bool eq = |
64 | 65 | p1->linktype == p2->linktype && |
... | ... | @@ -100,8 +101,8 @@ |
100 | 101 | return false; |
101 | 102 | } |
102 | 103 | |
103 | -bool cfctrl_req_eq(struct cfctrl_request_info *r1, | |
104 | - struct cfctrl_request_info *r2) | |
104 | +static bool cfctrl_req_eq(const struct cfctrl_request_info *r1, | |
105 | + const struct cfctrl_request_info *r2) | |
105 | 106 | { |
106 | 107 | if (r1->cmd != r2->cmd) |
107 | 108 | return false; |
... | ... | @@ -112,7 +113,7 @@ |
112 | 113 | } |
113 | 114 | |
114 | 115 | /* Insert request at the end */ |
115 | -void cfctrl_insert_req(struct cfctrl *ctrl, | |
116 | +static void cfctrl_insert_req(struct cfctrl *ctrl, | |
116 | 117 | struct cfctrl_request_info *req) |
117 | 118 | { |
118 | 119 | spin_lock(&ctrl->info_list_lock); |
... | ... | @@ -123,8 +124,8 @@ |
123 | 124 | } |
124 | 125 | |
125 | 126 | /* Compare and remove request */ |
126 | -struct cfctrl_request_info *cfctrl_remove_req(struct cfctrl *ctrl, | |
127 | - struct cfctrl_request_info *req) | |
127 | +static struct cfctrl_request_info *cfctrl_remove_req(struct cfctrl *ctrl, | |
128 | + struct cfctrl_request_info *req) | |
128 | 129 | { |
129 | 130 | struct cfctrl_request_info *p, *tmp, *first; |
130 | 131 | |
... | ... | @@ -154,16 +155,6 @@ |
154 | 155 | return &this->res; |
155 | 156 | } |
156 | 157 | |
157 | -void cfctrl_set_dnlayer(struct cflayer *this, struct cflayer *dn) | |
158 | -{ | |
159 | - this->dn = dn; | |
160 | -} | |
161 | - | |
162 | -void cfctrl_set_uplayer(struct cflayer *this, struct cflayer *up) | |
163 | -{ | |
164 | - this->up = up; | |
165 | -} | |
166 | - | |
167 | 158 | static void init_info(struct caif_payload_info *info, struct cfctrl *cfctrl) |
168 | 159 | { |
169 | 160 | info->hdr_len = 0; |
... | ... | @@ -303,58 +294,6 @@ |
303 | 294 | } |
304 | 295 | return ret; |
305 | 296 | } |
306 | - | |
307 | -void cfctrl_sleep_req(struct cflayer *layer) | |
308 | -{ | |
309 | - int ret; | |
310 | - struct cfctrl *cfctrl = container_obj(layer); | |
311 | - struct cfpkt *pkt = cfpkt_create(CFPKT_CTRL_PKT_LEN); | |
312 | - if (!pkt) { | |
313 | - pr_warn("Out of memory\n"); | |
314 | - return; | |
315 | - } | |
316 | - cfpkt_addbdy(pkt, CFCTRL_CMD_SLEEP); | |
317 | - init_info(cfpkt_info(pkt), cfctrl); | |
318 | - ret = | |
319 | - cfctrl->serv.layer.dn->transmit(cfctrl->serv.layer.dn, pkt); | |
320 | - if (ret < 0) | |
321 | - cfpkt_destroy(pkt); | |
322 | -} | |
323 | - | |
324 | -void cfctrl_wake_req(struct cflayer *layer) | |
325 | -{ | |
326 | - int ret; | |
327 | - struct cfctrl *cfctrl = container_obj(layer); | |
328 | - struct cfpkt *pkt = cfpkt_create(CFPKT_CTRL_PKT_LEN); | |
329 | - if (!pkt) { | |
330 | - pr_warn("Out of memory\n"); | |
331 | - return; | |
332 | - } | |
333 | - cfpkt_addbdy(pkt, CFCTRL_CMD_WAKE); | |
334 | - init_info(cfpkt_info(pkt), cfctrl); | |
335 | - ret = | |
336 | - cfctrl->serv.layer.dn->transmit(cfctrl->serv.layer.dn, pkt); | |
337 | - if (ret < 0) | |
338 | - cfpkt_destroy(pkt); | |
339 | -} | |
340 | - | |
341 | -void cfctrl_getstartreason_req(struct cflayer *layer) | |
342 | -{ | |
343 | - int ret; | |
344 | - struct cfctrl *cfctrl = container_obj(layer); | |
345 | - struct cfpkt *pkt = cfpkt_create(CFPKT_CTRL_PKT_LEN); | |
346 | - if (!pkt) { | |
347 | - pr_warn("Out of memory\n"); | |
348 | - return; | |
349 | - } | |
350 | - cfpkt_addbdy(pkt, CFCTRL_CMD_START_REASON); | |
351 | - init_info(cfpkt_info(pkt), cfctrl); | |
352 | - ret = | |
353 | - cfctrl->serv.layer.dn->transmit(cfctrl->serv.layer.dn, pkt); | |
354 | - if (ret < 0) | |
355 | - cfpkt_destroy(pkt); | |
356 | -} | |
357 | - | |
358 | 297 | |
359 | 298 | void cfctrl_cancel_req(struct cflayer *layr, struct cflayer *adap_layer) |
360 | 299 | { |
net/caif/cfmuxl.c
... | ... | @@ -71,41 +71,6 @@ |
71 | 71 | return 0; |
72 | 72 | } |
73 | 73 | |
74 | -bool cfmuxl_is_phy_inuse(struct cflayer *layr, u8 phyid) | |
75 | -{ | |
76 | - struct list_head *node; | |
77 | - struct cflayer *layer; | |
78 | - struct cfmuxl *muxl = container_obj(layr); | |
79 | - bool match = false; | |
80 | - spin_lock(&muxl->receive_lock); | |
81 | - | |
82 | - list_for_each(node, &muxl->srvl_list) { | |
83 | - layer = list_entry(node, struct cflayer, node); | |
84 | - if (cfsrvl_phyid_match(layer, phyid)) { | |
85 | - match = true; | |
86 | - break; | |
87 | - } | |
88 | - | |
89 | - } | |
90 | - spin_unlock(&muxl->receive_lock); | |
91 | - return match; | |
92 | -} | |
93 | - | |
94 | -u8 cfmuxl_get_phyid(struct cflayer *layr, u8 channel_id) | |
95 | -{ | |
96 | - struct cflayer *up; | |
97 | - int phyid; | |
98 | - struct cfmuxl *muxl = container_obj(layr); | |
99 | - spin_lock(&muxl->receive_lock); | |
100 | - up = get_up(muxl, channel_id); | |
101 | - if (up != NULL) | |
102 | - phyid = cfsrvl_getphyid(up); | |
103 | - else | |
104 | - phyid = 0; | |
105 | - spin_unlock(&muxl->receive_lock); | |
106 | - return phyid; | |
107 | -} | |
108 | - | |
109 | 74 | int cfmuxl_set_dnlayer(struct cflayer *layr, struct cflayer *dn, u8 phyid) |
110 | 75 | { |
111 | 76 | struct cfmuxl *muxl = (struct cfmuxl *) layr; |
net/caif/cfpkt_skbuff.c
... | ... | @@ -42,22 +42,22 @@ |
42 | 42 | bool erronous; |
43 | 43 | }; |
44 | 44 | |
45 | -inline struct cfpkt_priv_data *cfpkt_priv(struct cfpkt *pkt) | |
45 | +static inline struct cfpkt_priv_data *cfpkt_priv(struct cfpkt *pkt) | |
46 | 46 | { |
47 | 47 | return (struct cfpkt_priv_data *) pkt->skb.cb; |
48 | 48 | } |
49 | 49 | |
50 | -inline bool is_erronous(struct cfpkt *pkt) | |
50 | +static inline bool is_erronous(struct cfpkt *pkt) | |
51 | 51 | { |
52 | 52 | return cfpkt_priv(pkt)->erronous; |
53 | 53 | } |
54 | 54 | |
55 | -inline struct sk_buff *pkt_to_skb(struct cfpkt *pkt) | |
55 | +static inline struct sk_buff *pkt_to_skb(struct cfpkt *pkt) | |
56 | 56 | { |
57 | 57 | return &pkt->skb; |
58 | 58 | } |
59 | 59 | |
60 | -inline struct cfpkt *skb_to_pkt(struct sk_buff *skb) | |
60 | +static inline struct cfpkt *skb_to_pkt(struct sk_buff *skb) | |
61 | 61 | { |
62 | 62 | return (struct cfpkt *) skb; |
63 | 63 | } |
... | ... | @@ -317,17 +317,6 @@ |
317 | 317 | } |
318 | 318 | EXPORT_SYMBOL(cfpkt_setlen); |
319 | 319 | |
320 | -struct cfpkt *cfpkt_create_uplink(const unsigned char *data, unsigned int len) | |
321 | -{ | |
322 | - struct cfpkt *pkt = cfpkt_create_pfx(len + PKT_POSTFIX, PKT_PREFIX); | |
323 | - if (!pkt) | |
324 | - return NULL; | |
325 | - if (unlikely(data != NULL)) | |
326 | - cfpkt_add_body(pkt, data, len); | |
327 | - return pkt; | |
328 | -} | |
329 | -EXPORT_SYMBOL(cfpkt_create_uplink); | |
330 | - | |
331 | 320 | struct cfpkt *cfpkt_append(struct cfpkt *dstpkt, |
332 | 321 | struct cfpkt *addpkt, |
333 | 322 | u16 expectlen) |
334 | 323 | |
335 | 324 | |
... | ... | @@ -408,169 +397,12 @@ |
408 | 397 | } |
409 | 398 | EXPORT_SYMBOL(cfpkt_split); |
410 | 399 | |
411 | -char *cfpkt_log_pkt(struct cfpkt *pkt, char *buf, int buflen) | |
400 | +bool cfpkt_erroneous(struct cfpkt *pkt) | |
412 | 401 | { |
413 | - struct sk_buff *skb = pkt_to_skb(pkt); | |
414 | - char *p = buf; | |
415 | - int i; | |
416 | - | |
417 | - /* | |
418 | - * Sanity check buffer length, it needs to be at least as large as | |
419 | - * the header info: ~=50+ bytes | |
420 | - */ | |
421 | - if (buflen < 50) | |
422 | - return NULL; | |
423 | - | |
424 | - snprintf(buf, buflen, "%s: pkt:%p len:%ld(%ld+%ld) {%ld,%ld} data: [", | |
425 | - is_erronous(pkt) ? "ERRONOUS-SKB" : | |
426 | - (skb->data_len != 0 ? "COMPLEX-SKB" : "SKB"), | |
427 | - skb, | |
428 | - (long) skb->len, | |
429 | - (long) (skb_tail_pointer(skb) - skb->data), | |
430 | - (long) skb->data_len, | |
431 | - (long) (skb->data - skb->head), | |
432 | - (long) (skb_tail_pointer(skb) - skb->head)); | |
433 | - p = buf + strlen(buf); | |
434 | - | |
435 | - for (i = 0; i < skb_tail_pointer(skb) - skb->data && i < 300; i++) { | |
436 | - if (p > buf + buflen - 10) { | |
437 | - sprintf(p, "..."); | |
438 | - p = buf + strlen(buf); | |
439 | - break; | |
440 | - } | |
441 | - sprintf(p, "%02x,", skb->data[i]); | |
442 | - p = buf + strlen(buf); | |
443 | - } | |
444 | - sprintf(p, "]\n"); | |
445 | - return buf; | |
446 | -} | |
447 | -EXPORT_SYMBOL(cfpkt_log_pkt); | |
448 | - | |
449 | -int cfpkt_raw_append(struct cfpkt *pkt, void **buf, unsigned int buflen) | |
450 | -{ | |
451 | - struct sk_buff *skb = pkt_to_skb(pkt); | |
452 | - struct sk_buff *lastskb; | |
453 | - | |
454 | - caif_assert(buf != NULL); | |
455 | - if (unlikely(is_erronous(pkt))) | |
456 | - return -EPROTO; | |
457 | - /* Make sure SKB is writable */ | |
458 | - if (unlikely(skb_cow_data(skb, 0, &lastskb) < 0)) { | |
459 | - PKT_ERROR(pkt, "skb_cow_data failed\n"); | |
460 | - return -EPROTO; | |
461 | - } | |
462 | - | |
463 | - if (unlikely(skb_linearize(skb) != 0)) { | |
464 | - PKT_ERROR(pkt, "linearize failed\n"); | |
465 | - return -EPROTO; | |
466 | - } | |
467 | - | |
468 | - if (unlikely(skb_tailroom(skb) < buflen)) { | |
469 | - PKT_ERROR(pkt, "buffer too short - failed\n"); | |
470 | - return -EPROTO; | |
471 | - } | |
472 | - | |
473 | - *buf = skb_put(skb, buflen); | |
474 | - return 1; | |
475 | -} | |
476 | -EXPORT_SYMBOL(cfpkt_raw_append); | |
477 | - | |
478 | -int cfpkt_raw_extract(struct cfpkt *pkt, void **buf, unsigned int buflen) | |
479 | -{ | |
480 | - struct sk_buff *skb = pkt_to_skb(pkt); | |
481 | - | |
482 | - caif_assert(buf != NULL); | |
483 | - if (unlikely(is_erronous(pkt))) | |
484 | - return -EPROTO; | |
485 | - | |
486 | - if (unlikely(buflen > skb->len)) { | |
487 | - PKT_ERROR(pkt, "buflen too large - failed\n"); | |
488 | - return -EPROTO; | |
489 | - } | |
490 | - | |
491 | - if (unlikely(buflen > skb_headlen(skb))) { | |
492 | - if (unlikely(skb_linearize(skb) != 0)) { | |
493 | - PKT_ERROR(pkt, "linearize failed\n"); | |
494 | - return -EPROTO; | |
495 | - } | |
496 | - } | |
497 | - | |
498 | - *buf = skb->data; | |
499 | - skb_pull(skb, buflen); | |
500 | - | |
501 | - return 1; | |
502 | -} | |
503 | -EXPORT_SYMBOL(cfpkt_raw_extract); | |
504 | - | |
505 | -inline bool cfpkt_erroneous(struct cfpkt *pkt) | |
506 | -{ | |
507 | 402 | return cfpkt_priv(pkt)->erronous; |
508 | 403 | } |
509 | 404 | EXPORT_SYMBOL(cfpkt_erroneous); |
510 | 405 | |
511 | -struct cfpktq *cfpktq_create(void) | |
512 | -{ | |
513 | - struct cfpktq *q = kmalloc(sizeof(struct cfpktq), GFP_ATOMIC); | |
514 | - if (!q) | |
515 | - return NULL; | |
516 | - skb_queue_head_init(&q->head); | |
517 | - atomic_set(&q->count, 0); | |
518 | - spin_lock_init(&q->lock); | |
519 | - return q; | |
520 | -} | |
521 | -EXPORT_SYMBOL(cfpktq_create); | |
522 | - | |
523 | -void cfpkt_queue(struct cfpktq *pktq, struct cfpkt *pkt, unsigned short prio) | |
524 | -{ | |
525 | - atomic_inc(&pktq->count); | |
526 | - spin_lock(&pktq->lock); | |
527 | - skb_queue_tail(&pktq->head, pkt_to_skb(pkt)); | |
528 | - spin_unlock(&pktq->lock); | |
529 | - | |
530 | -} | |
531 | -EXPORT_SYMBOL(cfpkt_queue); | |
532 | - | |
533 | -struct cfpkt *cfpkt_qpeek(struct cfpktq *pktq) | |
534 | -{ | |
535 | - struct cfpkt *tmp; | |
536 | - spin_lock(&pktq->lock); | |
537 | - tmp = skb_to_pkt(skb_peek(&pktq->head)); | |
538 | - spin_unlock(&pktq->lock); | |
539 | - return tmp; | |
540 | -} | |
541 | -EXPORT_SYMBOL(cfpkt_qpeek); | |
542 | - | |
543 | -struct cfpkt *cfpkt_dequeue(struct cfpktq *pktq) | |
544 | -{ | |
545 | - struct cfpkt *pkt; | |
546 | - spin_lock(&pktq->lock); | |
547 | - pkt = skb_to_pkt(skb_dequeue(&pktq->head)); | |
548 | - if (pkt) { | |
549 | - atomic_dec(&pktq->count); | |
550 | - caif_assert(atomic_read(&pktq->count) >= 0); | |
551 | - } | |
552 | - spin_unlock(&pktq->lock); | |
553 | - return pkt; | |
554 | -} | |
555 | -EXPORT_SYMBOL(cfpkt_dequeue); | |
556 | - | |
557 | -int cfpkt_qcount(struct cfpktq *pktq) | |
558 | -{ | |
559 | - return atomic_read(&pktq->count); | |
560 | -} | |
561 | -EXPORT_SYMBOL(cfpkt_qcount); | |
562 | - | |
563 | -struct cfpkt *cfpkt_clone_release(struct cfpkt *pkt) | |
564 | -{ | |
565 | - struct cfpkt *clone; | |
566 | - clone = skb_to_pkt(skb_clone(pkt_to_skb(pkt), GFP_ATOMIC)); | |
567 | - /* Free original packet. */ | |
568 | - cfpkt_destroy(pkt); | |
569 | - if (!clone) | |
570 | - return NULL; | |
571 | - return clone; | |
572 | -} | |
573 | -EXPORT_SYMBOL(cfpkt_clone_release); | |
574 | 406 | |
575 | 407 | struct caif_payload_info *cfpkt_info(struct cfpkt *pkt) |
576 | 408 | { |
net/caif/cfsrvl.c
... | ... | @@ -151,12 +151,7 @@ |
151 | 151 | return -EINVAL; |
152 | 152 | } |
153 | 153 | |
154 | -void cfservl_destroy(struct cflayer *layer) | |
155 | -{ | |
156 | - kfree(layer); | |
157 | -} | |
158 | - | |
159 | -void cfsrvl_release(struct kref *kref) | |
154 | +static void cfsrvl_release(struct kref *kref) | |
160 | 155 | { |
161 | 156 | struct cfsrvl *service = container_of(kref, struct cfsrvl, ref); |
162 | 157 | kfree(service); |