Lines Matching refs:uarg
1091 struct ubuf_info *uarg; in sock_zerocopy_alloc() local
1100 BUILD_BUG_ON(sizeof(*uarg) > sizeof(skb->cb)); in sock_zerocopy_alloc()
1101 uarg = (void *)skb->cb; in sock_zerocopy_alloc()
1102 uarg->mmp.user = NULL; in sock_zerocopy_alloc()
1104 if (mm_account_pinned_pages(&uarg->mmp, size)) { in sock_zerocopy_alloc()
1109 uarg->callback = sock_zerocopy_callback; in sock_zerocopy_alloc()
1110 uarg->id = ((u32)atomic_inc_return(&sk->sk_zckey)) - 1; in sock_zerocopy_alloc()
1111 uarg->len = 1; in sock_zerocopy_alloc()
1112 uarg->bytelen = size; in sock_zerocopy_alloc()
1113 uarg->zerocopy = 1; in sock_zerocopy_alloc()
1114 refcount_set(&uarg->refcnt, 1); in sock_zerocopy_alloc()
1117 return uarg; in sock_zerocopy_alloc()
1121 static inline struct sk_buff *skb_from_uarg(struct ubuf_info *uarg) in skb_from_uarg() argument
1123 return container_of((void *)uarg, struct sk_buff, cb); in skb_from_uarg()
1127 struct ubuf_info *uarg) in sock_zerocopy_realloc() argument
1129 if (uarg) { in sock_zerocopy_realloc()
1141 bytelen = uarg->bytelen + size; in sock_zerocopy_realloc()
1142 if (uarg->len == USHRT_MAX - 1 || bytelen > byte_limit) { in sock_zerocopy_realloc()
1150 if ((u32)(uarg->id + uarg->len) == next) { in sock_zerocopy_realloc()
1151 if (mm_account_pinned_pages(&uarg->mmp, size)) in sock_zerocopy_realloc()
1153 uarg->len++; in sock_zerocopy_realloc()
1154 uarg->bytelen = bytelen; in sock_zerocopy_realloc()
1159 sock_zerocopy_get(uarg); in sock_zerocopy_realloc()
1161 return uarg; in sock_zerocopy_realloc()
1190 void sock_zerocopy_callback(struct ubuf_info *uarg, bool success) in sock_zerocopy_callback() argument
1192 struct sk_buff *tail, *skb = skb_from_uarg(uarg); in sock_zerocopy_callback()
1200 mm_unaccount_pinned_pages(&uarg->mmp); in sock_zerocopy_callback()
1205 if (!uarg->len || sock_flag(sk, SOCK_DEAD)) in sock_zerocopy_callback()
1208 len = uarg->len; in sock_zerocopy_callback()
1209 lo = uarg->id; in sock_zerocopy_callback()
1210 hi = uarg->id + len - 1; in sock_zerocopy_callback()
1239 void sock_zerocopy_put(struct ubuf_info *uarg) in sock_zerocopy_put() argument
1241 if (uarg && refcount_dec_and_test(&uarg->refcnt)) { in sock_zerocopy_put()
1242 if (uarg->callback) in sock_zerocopy_put()
1243 uarg->callback(uarg, uarg->zerocopy); in sock_zerocopy_put()
1245 consume_skb(skb_from_uarg(uarg)); in sock_zerocopy_put()
1250 void sock_zerocopy_put_abort(struct ubuf_info *uarg, bool have_uref) in sock_zerocopy_put_abort() argument
1252 if (uarg) { in sock_zerocopy_put_abort()
1253 struct sock *sk = skb_from_uarg(uarg)->sk; in sock_zerocopy_put_abort()
1256 uarg->len--; in sock_zerocopy_put_abort()
1259 sock_zerocopy_put(uarg); in sock_zerocopy_put_abort()
1272 struct ubuf_info *uarg) in skb_zerocopy_iter_stream() argument
1281 if (orig_uarg && uarg != orig_uarg) in skb_zerocopy_iter_stream()
1296 skb_zcopy_set(skb, uarg, NULL); in skb_zerocopy_iter_stream()