diff options
-rw-r--r-- | include/net/sctp/sctp.h | 5 | ||||
-rw-r--r-- | include/net/sctp/stream_sched.h | 5 | ||||
-rw-r--r-- | net/sctp/protocol.c | 1 | ||||
-rw-r--r-- | net/sctp/stream_sched.c | 25 | ||||
-rw-r--r-- | net/sctp/stream_sched_prio.c | 7 | ||||
-rw-r--r-- | net/sctp/stream_sched_rr.c | 7 |
6 files changed, 41 insertions, 9 deletions
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index 749a42882437..906a9c0efa71 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h | |||
@@ -195,6 +195,11 @@ void sctp_remaddr_proc_exit(struct net *net); | |||
195 | int sctp_offload_init(void); | 195 | int sctp_offload_init(void); |
196 | 196 | ||
197 | /* | 197 | /* |
198 | * sctp/stream_sched.c | ||
199 | */ | ||
200 | void sctp_sched_ops_init(void); | ||
201 | |||
202 | /* | ||
198 | * sctp/stream.c | 203 | * sctp/stream.c |
199 | */ | 204 | */ |
200 | int sctp_send_reset_streams(struct sctp_association *asoc, | 205 | int sctp_send_reset_streams(struct sctp_association *asoc, |
diff --git a/include/net/sctp/stream_sched.h b/include/net/sctp/stream_sched.h index c676550a4c7d..5c5da48f65e7 100644 --- a/include/net/sctp/stream_sched.h +++ b/include/net/sctp/stream_sched.h | |||
@@ -69,4 +69,9 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch); | |||
69 | int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp); | 69 | int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp); |
70 | struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream); | 70 | struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream); |
71 | 71 | ||
72 | void sctp_sched_ops_register(enum sctp_sched_type sched, | ||
73 | struct sctp_sched_ops *sched_ops); | ||
74 | void sctp_sched_ops_prio_init(void); | ||
75 | void sctp_sched_ops_rr_init(void); | ||
76 | |||
72 | #endif /* __sctp_stream_sched_h__ */ | 77 | #endif /* __sctp_stream_sched_h__ */ |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index f5172c21349b..6a38c2503649 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -1499,6 +1499,7 @@ static __init int sctp_init(void) | |||
1499 | INIT_LIST_HEAD(&sctp_address_families); | 1499 | INIT_LIST_HEAD(&sctp_address_families); |
1500 | sctp_v4_pf_init(); | 1500 | sctp_v4_pf_init(); |
1501 | sctp_v6_pf_init(); | 1501 | sctp_v6_pf_init(); |
1502 | sctp_sched_ops_init(); | ||
1502 | 1503 | ||
1503 | status = register_pernet_subsys(&sctp_defaults_ops); | 1504 | status = register_pernet_subsys(&sctp_defaults_ops); |
1504 | if (status) | 1505 | if (status) |
diff --git a/net/sctp/stream_sched.c b/net/sctp/stream_sched.c index 0b83ec51e43b..d8c162a4089c 100644 --- a/net/sctp/stream_sched.c +++ b/net/sctp/stream_sched.c | |||
@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = { | |||
119 | .unsched_all = sctp_sched_fcfs_unsched_all, | 119 | .unsched_all = sctp_sched_fcfs_unsched_all, |
120 | }; | 120 | }; |
121 | 121 | ||
122 | static void sctp_sched_ops_fcfs_init(void) | ||
123 | { | ||
124 | sctp_sched_ops_register(SCTP_SS_FCFS, &sctp_sched_fcfs); | ||
125 | } | ||
126 | |||
122 | /* API to other parts of the stack */ | 127 | /* API to other parts of the stack */ |
123 | 128 | ||
124 | extern struct sctp_sched_ops sctp_sched_prio; | 129 | static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX + 1]; |
125 | extern struct sctp_sched_ops sctp_sched_rr; | ||
126 | 130 | ||
127 | static struct sctp_sched_ops *sctp_sched_ops[] = { | 131 | void sctp_sched_ops_register(enum sctp_sched_type sched, |
128 | &sctp_sched_fcfs, | 132 | struct sctp_sched_ops *sched_ops) |
129 | &sctp_sched_prio, | 133 | { |
130 | &sctp_sched_rr, | 134 | sctp_sched_ops[sched] = sched_ops; |
131 | }; | 135 | } |
136 | |||
137 | void sctp_sched_ops_init(void) | ||
138 | { | ||
139 | sctp_sched_ops_fcfs_init(); | ||
140 | sctp_sched_ops_prio_init(); | ||
141 | sctp_sched_ops_rr_init(); | ||
142 | } | ||
132 | 143 | ||
133 | int sctp_sched_set_sched(struct sctp_association *asoc, | 144 | int sctp_sched_set_sched(struct sctp_association *asoc, |
134 | enum sctp_sched_type sched) | 145 | enum sctp_sched_type sched) |
diff --git a/net/sctp/stream_sched_prio.c b/net/sctp/stream_sched_prio.c index 384dbf3c8760..7997d35dd0fd 100644 --- a/net/sctp/stream_sched_prio.c +++ b/net/sctp/stream_sched_prio.c | |||
@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream) | |||
333 | sctp_sched_prio_unsched(soute); | 333 | sctp_sched_prio_unsched(soute); |
334 | } | 334 | } |
335 | 335 | ||
336 | struct sctp_sched_ops sctp_sched_prio = { | 336 | static struct sctp_sched_ops sctp_sched_prio = { |
337 | .set = sctp_sched_prio_set, | 337 | .set = sctp_sched_prio_set, |
338 | .get = sctp_sched_prio_get, | 338 | .get = sctp_sched_prio_get, |
339 | .init = sctp_sched_prio_init, | 339 | .init = sctp_sched_prio_init, |
@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = { | |||
345 | .sched_all = sctp_sched_prio_sched_all, | 345 | .sched_all = sctp_sched_prio_sched_all, |
346 | .unsched_all = sctp_sched_prio_unsched_all, | 346 | .unsched_all = sctp_sched_prio_unsched_all, |
347 | }; | 347 | }; |
348 | |||
349 | void sctp_sched_ops_prio_init(void) | ||
350 | { | ||
351 | sctp_sched_ops_register(SCTP_SS_PRIO, &sctp_sched_prio); | ||
352 | } | ||
diff --git a/net/sctp/stream_sched_rr.c b/net/sctp/stream_sched_rr.c index 7612a438c5b9..1155692448f1 100644 --- a/net/sctp/stream_sched_rr.c +++ b/net/sctp/stream_sched_rr.c | |||
@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream) | |||
187 | sctp_sched_rr_unsched(stream, soute); | 187 | sctp_sched_rr_unsched(stream, soute); |
188 | } | 188 | } |
189 | 189 | ||
190 | struct sctp_sched_ops sctp_sched_rr = { | 190 | static struct sctp_sched_ops sctp_sched_rr = { |
191 | .set = sctp_sched_rr_set, | 191 | .set = sctp_sched_rr_set, |
192 | .get = sctp_sched_rr_get, | 192 | .get = sctp_sched_rr_get, |
193 | .init = sctp_sched_rr_init, | 193 | .init = sctp_sched_rr_init, |
@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = { | |||
199 | .sched_all = sctp_sched_rr_sched_all, | 199 | .sched_all = sctp_sched_rr_sched_all, |
200 | .unsched_all = sctp_sched_rr_unsched_all, | 200 | .unsched_all = sctp_sched_rr_unsched_all, |
201 | }; | 201 | }; |
202 | |||
203 | void sctp_sched_ops_rr_init(void) | ||
204 | { | ||
205 | sctp_sched_ops_register(SCTP_SS_RR, &sctp_sched_rr); | ||
206 | } | ||