Lines Matching full:stream
7 * These functions manipulate sctp stream queue/scheduling.
26 static void sctp_sched_prio_unsched_all(struct sctp_stream *stream);
41 struct sctp_stream *stream, int prio, gfp_t gfp) in sctp_sched_prio_new_head() argument
59 struct sctp_stream *stream, int prio, gfp_t gfp) in sctp_sched_prio_get_head() argument
67 list_for_each_entry(p, &stream->prio_list, prio_sched) { in sctp_sched_prio_get_head()
75 for (i = 0; i < stream->outcnt; i++) { in sctp_sched_prio_get_head()
76 if (!SCTP_SO(stream, i)->ext) in sctp_sched_prio_get_head()
79 p = SCTP_SO(stream, i)->ext->prio_head; in sctp_sched_prio_get_head()
90 return sctp_sched_prio_new_head(stream, prio, gfp); in sctp_sched_prio_get_head()
114 /* Try to move to the next stream */ in sctp_sched_prio_unsched()
119 /* Also unsched the priority if this was the last stream */ in sctp_sched_prio_unsched()
122 /* If there is no stream left, clear next */ in sctp_sched_prio_unsched()
130 static void sctp_sched_prio_sched(struct sctp_stream *stream, in sctp_sched_prio_sched() argument
141 /* Schedule the stream. If there is a next, we schedule the new in sctp_sched_prio_sched()
153 list_for_each_entry(prio, &stream->prio_list, prio_sched) { in sctp_sched_prio_sched()
160 list_add_tail(&prio_head->prio_sched, &stream->prio_list); in sctp_sched_prio_sched()
163 static int sctp_sched_prio_set(struct sctp_stream *stream, __u16 sid, in sctp_sched_prio_set() argument
166 struct sctp_stream_out *sout = SCTP_SO(stream, sid); in sctp_sched_prio_set()
175 prio_head = sctp_sched_prio_get_head(stream, prio, gfp); in sctp_sched_prio_set()
182 sctp_sched_prio_sched(stream, soute); in sctp_sched_prio_set()
188 static int sctp_sched_prio_get(struct sctp_stream *stream, __u16 sid, in sctp_sched_prio_get() argument
191 *value = SCTP_SO(stream, sid)->ext->prio_head->prio; in sctp_sched_prio_get()
195 static int sctp_sched_prio_init(struct sctp_stream *stream) in sctp_sched_prio_init() argument
197 INIT_LIST_HEAD(&stream->prio_list); in sctp_sched_prio_init()
202 static int sctp_sched_prio_init_sid(struct sctp_stream *stream, __u16 sid, in sctp_sched_prio_init_sid() argument
205 INIT_LIST_HEAD(&SCTP_SO(stream, sid)->ext->prio_list); in sctp_sched_prio_init_sid()
206 return sctp_sched_prio_set(stream, sid, 0, gfp); in sctp_sched_prio_init_sid()
209 static void sctp_sched_prio_free_sid(struct sctp_stream *stream, __u16 sid) in sctp_sched_prio_free_sid() argument
211 sctp_sched_prio_head_put(SCTP_SO(stream, sid)->ext->prio_head); in sctp_sched_prio_free_sid()
212 SCTP_SO(stream, sid)->ext->prio_head = NULL; in sctp_sched_prio_free_sid()
215 static void sctp_sched_prio_free(struct sctp_stream *stream) in sctp_sched_prio_free() argument
227 sctp_sched_prio_unsched_all(stream); in sctp_sched_prio_free()
228 for (i = 0; i < stream->outcnt; i++) { in sctp_sched_prio_free()
229 if (!SCTP_SO(stream, i)->ext) in sctp_sched_prio_free()
231 prio = SCTP_SO(stream, i)->ext->prio_head; in sctp_sched_prio_free()
244 struct sctp_stream *stream; in sctp_sched_prio_enqueue() local
250 stream = &q->asoc->stream; in sctp_sched_prio_enqueue()
251 sctp_sched_prio_sched(stream, SCTP_SO(stream, sid)->ext); in sctp_sched_prio_enqueue()
256 struct sctp_stream *stream = &q->asoc->stream; in sctp_sched_prio_dequeue() local
266 * one or the first chunk on the next active stream. in sctp_sched_prio_dequeue()
268 if (stream->out_curr) { in sctp_sched_prio_dequeue()
269 soute = stream->out_curr->ext; in sctp_sched_prio_dequeue()
271 prio = list_entry(stream->prio_list.next, in sctp_sched_prio_dequeue()
289 /* Last chunk on that msg, move to the next stream on in sctp_sched_prio_dequeue_done()
293 soute = SCTP_SO(&q->asoc->stream, sid)->ext; in sctp_sched_prio_dequeue_done()
302 static void sctp_sched_prio_sched_all(struct sctp_stream *stream) in sctp_sched_prio_sched_all() argument
308 asoc = container_of(stream, struct sctp_association, stream); in sctp_sched_prio_sched_all()
313 sout = SCTP_SO(stream, sid); in sctp_sched_prio_sched_all()
315 sctp_sched_prio_sched(stream, sout->ext); in sctp_sched_prio_sched_all()
319 static void sctp_sched_prio_unsched_all(struct sctp_stream *stream) in sctp_sched_prio_unsched_all() argument
324 list_for_each_entry_safe(p, tmp, &stream->prio_list, prio_sched) in sctp_sched_prio_unsched_all()