Commit a51a40b7 authored by David S. Miller's avatar David S. Miller

Merge branch 'sctp-fix-sparse-errors'

Xin Long says:

====================
sctp: fix some other sparse errors

After the last fixes for sparse errors, there are still three sparse
errors in sctp codes, two of them are type cast, and the other one
is using extern.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f95d5bf0 1ba896f6
...@@ -48,31 +48,32 @@ static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum) ...@@ -48,31 +48,32 @@ static inline __wsum sctp_csum_update(const void *buff, int len, __wsum sum)
/* This uses the crypto implementation of crc32c, which is either /* This uses the crypto implementation of crc32c, which is either
* implemented w/ hardware support or resolves to __crc32c_le(). * implemented w/ hardware support or resolves to __crc32c_le().
*/ */
return crc32c(sum, buff, len); return (__force __wsum)crc32c((__force __u32)sum, buff, len);
} }
static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2, static inline __wsum sctp_csum_combine(__wsum csum, __wsum csum2,
int offset, int len) int offset, int len)
{ {
return __crc32c_le_combine(csum, csum2, len); return (__force __wsum)__crc32c_le_combine((__force __u32)csum,
(__force __u32)csum2, len);
} }
static inline __le32 sctp_compute_cksum(const struct sk_buff *skb, static inline __le32 sctp_compute_cksum(const struct sk_buff *skb,
unsigned int offset) unsigned int offset)
{ {
struct sctphdr *sh = sctp_hdr(skb); struct sctphdr *sh = sctp_hdr(skb);
__le32 ret, old = sh->checksum;
const struct skb_checksum_ops ops = { const struct skb_checksum_ops ops = {
.update = sctp_csum_update, .update = sctp_csum_update,
.combine = sctp_csum_combine, .combine = sctp_csum_combine,
}; };
__le32 old = sh->checksum;
__wsum new;
sh->checksum = 0; sh->checksum = 0;
ret = cpu_to_le32(~__skb_checksum(skb, offset, skb->len - offset, new = ~__skb_checksum(skb, offset, skb->len - offset, ~(__wsum)0, &ops);
~(__u32)0, &ops));
sh->checksum = old; sh->checksum = old;
return ret; return cpu_to_le32((__force __u32)new);
} }
#endif /* __sctp_checksum_h__ */ #endif /* __sctp_checksum_h__ */
...@@ -194,6 +194,11 @@ void sctp_remaddr_proc_exit(struct net *net); ...@@ -194,6 +194,11 @@ void sctp_remaddr_proc_exit(struct net *net);
*/ */
int sctp_offload_init(void); int sctp_offload_init(void);
/*
* sctp/stream_sched.c
*/
void sctp_sched_ops_init(void);
/* /*
* sctp/stream.c * sctp/stream.c
*/ */
......
...@@ -69,4 +69,9 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch); ...@@ -69,4 +69,9 @@ void sctp_sched_dequeue_common(struct sctp_outq *q, struct sctp_chunk *ch);
int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp); int sctp_sched_init_sid(struct sctp_stream *stream, __u16 sid, gfp_t gfp);
struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream); struct sctp_sched_ops *sctp_sched_ops_from_stream(struct sctp_stream *stream);
void sctp_sched_ops_register(enum sctp_sched_type sched,
struct sctp_sched_ops *sched_ops);
void sctp_sched_ops_prio_init(void);
void sctp_sched_ops_rr_init(void);
#endif /* __sctp_stream_sched_h__ */ #endif /* __sctp_stream_sched_h__ */
...@@ -1499,6 +1499,7 @@ static __init int sctp_init(void) ...@@ -1499,6 +1499,7 @@ static __init int sctp_init(void)
INIT_LIST_HEAD(&sctp_address_families); INIT_LIST_HEAD(&sctp_address_families);
sctp_v4_pf_init(); sctp_v4_pf_init();
sctp_v6_pf_init(); sctp_v6_pf_init();
sctp_sched_ops_init();
status = register_pernet_subsys(&sctp_defaults_ops); status = register_pernet_subsys(&sctp_defaults_ops);
if (status) if (status)
......
...@@ -64,7 +64,7 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream, ...@@ -64,7 +64,7 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream,
*/ */
/* Mark as failed send. */ /* Mark as failed send. */
sctp_chunk_fail(ch, SCTP_ERROR_INV_STRM); sctp_chunk_fail(ch, (__force __u32)SCTP_ERROR_INV_STRM);
if (asoc->peer.prsctp_capable && if (asoc->peer.prsctp_capable &&
SCTP_PR_PRIO_ENABLED(ch->sinfo.sinfo_flags)) SCTP_PR_PRIO_ENABLED(ch->sinfo.sinfo_flags))
asoc->sent_cnt_removable--; asoc->sent_cnt_removable--;
......
...@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = { ...@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = {
.unsched_all = sctp_sched_fcfs_unsched_all, .unsched_all = sctp_sched_fcfs_unsched_all,
}; };
static void sctp_sched_ops_fcfs_init(void)
{
sctp_sched_ops_register(SCTP_SS_FCFS, &sctp_sched_fcfs);
}
/* API to other parts of the stack */ /* API to other parts of the stack */
extern struct sctp_sched_ops sctp_sched_prio; static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX + 1];
extern struct sctp_sched_ops sctp_sched_rr;
static struct sctp_sched_ops *sctp_sched_ops[] = { void sctp_sched_ops_register(enum sctp_sched_type sched,
&sctp_sched_fcfs, struct sctp_sched_ops *sched_ops)
&sctp_sched_prio, {
&sctp_sched_rr, sctp_sched_ops[sched] = sched_ops;
}; }
void sctp_sched_ops_init(void)
{
sctp_sched_ops_fcfs_init();
sctp_sched_ops_prio_init();
sctp_sched_ops_rr_init();
}
int sctp_sched_set_sched(struct sctp_association *asoc, int sctp_sched_set_sched(struct sctp_association *asoc,
enum sctp_sched_type sched) enum sctp_sched_type sched)
......
...@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream) ...@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream)
sctp_sched_prio_unsched(soute); sctp_sched_prio_unsched(soute);
} }
struct sctp_sched_ops sctp_sched_prio = { static struct sctp_sched_ops sctp_sched_prio = {
.set = sctp_sched_prio_set, .set = sctp_sched_prio_set,
.get = sctp_sched_prio_get, .get = sctp_sched_prio_get,
.init = sctp_sched_prio_init, .init = sctp_sched_prio_init,
...@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = { ...@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = {
.sched_all = sctp_sched_prio_sched_all, .sched_all = sctp_sched_prio_sched_all,
.unsched_all = sctp_sched_prio_unsched_all, .unsched_all = sctp_sched_prio_unsched_all,
}; };
void sctp_sched_ops_prio_init(void)
{
sctp_sched_ops_register(SCTP_SS_PRIO, &sctp_sched_prio);
}
...@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream) ...@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream)
sctp_sched_rr_unsched(stream, soute); sctp_sched_rr_unsched(stream, soute);
} }
struct sctp_sched_ops sctp_sched_rr = { static struct sctp_sched_ops sctp_sched_rr = {
.set = sctp_sched_rr_set, .set = sctp_sched_rr_set,
.get = sctp_sched_rr_get, .get = sctp_sched_rr_get,
.init = sctp_sched_rr_init, .init = sctp_sched_rr_init,
...@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = { ...@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = {
.sched_all = sctp_sched_rr_sched_all, .sched_all = sctp_sched_rr_sched_all,
.unsched_all = sctp_sched_rr_unsched_all, .unsched_all = sctp_sched_rr_unsched_all,
}; };
void sctp_sched_ops_rr_init(void)
{
sctp_sched_ops_register(SCTP_SS_RR, &sctp_sched_rr);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment