@@ -330,7 +330,7 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
330
330
if (!q )
331
331
return RX_HANDLER_PASS ;
332
332
333
- if (__skb_array_full (& q -> skb_array ))
333
+ if (__ptr_ring_full (& q -> ring ))
334
334
goto drop ;
335
335
336
336
skb_push (skb , ETH_HLEN );
@@ -348,7 +348,7 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
348
348
goto drop ;
349
349
350
350
if (!segs ) {
351
- if (skb_array_produce (& q -> skb_array , skb ))
351
+ if (ptr_ring_produce (& q -> ring , skb ))
352
352
goto drop ;
353
353
goto wake_up ;
354
354
}
@@ -358,7 +358,7 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
358
358
struct sk_buff * nskb = segs -> next ;
359
359
360
360
segs -> next = NULL ;
361
- if (skb_array_produce (& q -> skb_array , segs )) {
361
+ if (ptr_ring_produce (& q -> ring , segs )) {
362
362
kfree_skb (segs );
363
363
kfree_skb_list (nskb );
364
364
break ;
@@ -375,7 +375,7 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
375
375
!(features & NETIF_F_CSUM_MASK ) &&
376
376
skb_checksum_help (skb ))
377
377
goto drop ;
378
- if (skb_array_produce (& q -> skb_array , skb ))
378
+ if (ptr_ring_produce (& q -> ring , skb ))
379
379
goto drop ;
380
380
}
381
381
@@ -497,7 +497,7 @@ static void tap_sock_destruct(struct sock *sk)
497
497
{
498
498
struct tap_queue * q = container_of (sk , struct tap_queue , sk );
499
499
500
- skb_array_cleanup (& q -> skb_array );
500
+ ptr_ring_cleanup (& q -> ring , __skb_array_destroy_skb );
501
501
}
502
502
503
503
static int tap_open (struct inode * inode , struct file * file )
@@ -517,7 +517,7 @@ static int tap_open(struct inode *inode, struct file *file)
517
517
& tap_proto , 0 );
518
518
if (!q )
519
519
goto err ;
520
- if (skb_array_init (& q -> skb_array , tap -> dev -> tx_queue_len , GFP_KERNEL )) {
520
+ if (ptr_ring_init (& q -> ring , tap -> dev -> tx_queue_len , GFP_KERNEL )) {
521
521
sk_free (& q -> sk );
522
522
goto err ;
523
523
}
@@ -546,7 +546,7 @@ static int tap_open(struct inode *inode, struct file *file)
546
546
547
547
err = tap_set_queue (tap , file , q );
548
548
if (err ) {
549
- /* tap_sock_destruct() will take care of freeing skb_array */
549
+ /* tap_sock_destruct() will take care of freeing ptr_ring */
550
550
goto err_put ;
551
551
}
552
552
@@ -583,7 +583,7 @@ static unsigned int tap_poll(struct file *file, poll_table *wait)
583
583
mask = 0 ;
584
584
poll_wait (file , & q -> wq .wait , wait );
585
585
586
- if (!skb_array_empty (& q -> skb_array ))
586
+ if (!ptr_ring_empty (& q -> ring ))
587
587
mask |= POLLIN | POLLRDNORM ;
588
588
589
589
if (sock_writeable (& q -> sk ) ||
@@ -844,7 +844,7 @@ static ssize_t tap_do_read(struct tap_queue *q,
844
844
TASK_INTERRUPTIBLE );
845
845
846
846
/* Read frames from the queue */
847
- skb = skb_array_consume (& q -> skb_array );
847
+ skb = ptr_ring_consume (& q -> ring );
848
848
if (skb )
849
849
break ;
850
850
if (noblock ) {
@@ -1176,7 +1176,7 @@ static int tap_peek_len(struct socket *sock)
1176
1176
{
1177
1177
struct tap_queue * q = container_of (sock , struct tap_queue ,
1178
1178
sock );
1179
- return skb_array_peek_len (& q -> skb_array );
1179
+ return PTR_RING_PEEK_CALL (& q -> ring , __skb_array_len_with_tag );
1180
1180
}
1181
1181
1182
1182
/* Ops structure to mimic raw sockets with tun */
@@ -1202,7 +1202,7 @@ struct socket *tap_get_socket(struct file *file)
1202
1202
}
1203
1203
EXPORT_SYMBOL_GPL (tap_get_socket );
1204
1204
1205
- struct skb_array * tap_get_skb_array (struct file * file )
1205
+ struct ptr_ring * tap_get_ptr_ring (struct file * file )
1206
1206
{
1207
1207
struct tap_queue * q ;
1208
1208
@@ -1211,29 +1211,30 @@ struct skb_array *tap_get_skb_array(struct file *file)
1211
1211
q = file -> private_data ;
1212
1212
if (!q )
1213
1213
return ERR_PTR (- EBADFD );
1214
- return & q -> skb_array ;
1214
+ return & q -> ring ;
1215
1215
}
1216
- EXPORT_SYMBOL_GPL (tap_get_skb_array );
1216
+ EXPORT_SYMBOL_GPL (tap_get_ptr_ring );
1217
1217
1218
1218
int tap_queue_resize (struct tap_dev * tap )
1219
1219
{
1220
1220
struct net_device * dev = tap -> dev ;
1221
1221
struct tap_queue * q ;
1222
- struct skb_array * * arrays ;
1222
+ struct ptr_ring * * rings ;
1223
1223
int n = tap -> numqueues ;
1224
1224
int ret , i = 0 ;
1225
1225
1226
- arrays = kmalloc_array (n , sizeof (* arrays ), GFP_KERNEL );
1227
- if (!arrays )
1226
+ rings = kmalloc_array (n , sizeof (* rings ), GFP_KERNEL );
1227
+ if (!rings )
1228
1228
return - ENOMEM ;
1229
1229
1230
1230
list_for_each_entry (q , & tap -> queue_list , next )
1231
- arrays [i ++ ] = & q -> skb_array ;
1231
+ rings [i ++ ] = & q -> ring ;
1232
1232
1233
- ret = skb_array_resize_multiple (arrays , n ,
1234
- dev -> tx_queue_len , GFP_KERNEL );
1233
+ ret = ptr_ring_resize_multiple (rings , n ,
1234
+ dev -> tx_queue_len , GFP_KERNEL ,
1235
+ __skb_array_destroy_skb );
1235
1236
1236
- kfree (arrays );
1237
+ kfree (rings );
1237
1238
return ret ;
1238
1239
}
1239
1240
EXPORT_SYMBOL_GPL (tap_queue_resize );
0 commit comments