sctp: fix some other sparse errors
Subsystems (3)
Xin Long
maintainercover 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.
Xin Long (3):
sctp: force SCTP_ERROR_INV_STRM with __u32 when calling
sctp_chunk_fail
sctp: force the params with right types for sctp csum apis
sctp: remove extern from stream sched
include/net/sctp/checksum.h | 13 +++++++------ include/net/sctp/sctp.h | 5 +++++ include/net/sctp/stream_sched.h | 5 +++++ net/sctp/protocol.c | 1 + net/sctp/stream.c | 2 +- net/sctp/stream_sched.c | 25 ++++++++++++++++++------- net/sctp/stream_sched_prio.c | 7 ++++++- net/sctp/stream_sched_rr.c | 7 ++++++- 8 files changed, 49 insertions(+), 16 deletions(-)
Signature · 1 line
2.1.0
Xin Long
maintainerPATCH 1/3 sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail
This patch is to force SCTP_ERROR_INV_STRM with right type to fit in sctp_chunk_fail to avoid the sparse error.
--- net/sctp/stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/sctp/stream.c +1 -1
@@ -64,7 +64,7 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream,*/ /* 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 &&SCTP_PR_PRIO_ENABLED (ch->sinfo.sinfo_flags)) asoc->sent_cnt_removable--;
Signature · 1 line
2.1.0
Xin Long
maintainerPATCH 2/3 sctp: force the params with right types for sctp csum apis
Now sctp_csum_xxx doesn't really match the param types of these common csum apis. As sctp_csum_xxx is defined in sctp/checksum.h, many sparse errors occur when make C=2 not only with M=net/sctp but also with other modules that include this header file.
This patch is to force them fit in csum apis with the right types.
--- include/net/sctp/checksum.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
include/net/sctp/checksum.h +7 -6
@@ -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 * 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,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,unsigned int offset) {struct sctphdr *sh =sctp_hdr (skb); -__le32 ret, old = sh->checksum;const struct skb_checksum_ops ops = { .update = sctp_csum_update, .combine = sctp_csum_combine, }; +__le32 old = sh->checksum; +__wsum new; sh->checksum =0 ; - ret =cpu_to_le32 (~__skb_checksum (skb, offset, skb->len - offset, - ~(__u32 )0 , &ops)); + new = ~__skb_checksum (skb, offset, skb->len - offset, ~(__wsum )0 , &ops); sh->checksum = old; -return ret; +return cpu_to_le32 ((__force __u32 )new); }#endif /* __sctp_checksum_h__ */
Signature · 1 line
2.1.0
Xin Long
maintainerPATCH 3/3 sctp: remove extern from stream sched
Now each stream sched ops is defined in different .c file and added into the global ops in another .c file, it uses extern to make this work.
However extern is not good coding style to get them in and even make C=2 reports errors for this.
This patch adds sctp_sched_ops_xxx_init for each stream sched ops in their .c file, then get them into the global ops by calling them when initializing sctp module.
--- include/net/sctp/sctp.h | 5 +++++ include/net/sctp/stream_sched.h | 5 +++++ net/sctp/protocol.c | 1 + net/sctp/stream_sched.c | 25 ++++++++++++++++++------- net/sctp/stream_sched_prio.c | 7 ++++++- net/sctp/stream_sched_rr.c | 7 ++++++- 6 files changed, 41 insertions(+), 9 deletions(-)
include/net/sctp/sctp.h +5 -0
@@ -195,6 +195,11 @@ void sctp_remaddr_proc_exit(struct net *net);int sctp_offload_init (void );/* +* sctp/stream_sched.c +*/ +void sctp_sched_ops_init (void ); + +/* * sctp/stream.c */ int sctp_send_reset_streams(struct sctp_association *asoc,
include/net/sctp/stream_sched.h +5 -0
@@ -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);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__ */
net/sctp/protocol.c +1 -0
@@ -1499,6 +1499,7 @@ static __init int sctp_init(void)INIT_LIST_HEAD (&sctp_address_families);sctp_v4_pf_init ();sctp_v6_pf_init (); +sctp_sched_ops_init (); status =register_pernet_subsys (&sctp_defaults_ops);if (status)
net/sctp/stream_sched.c +18 -7
@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = { .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 */ -extern struct sctp_sched_ops sctp_sched_prio; -extern struct sctp_sched_ops sctp_sched_rr; +static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX +1 ]; -static struct sctp_sched_ops *sctp_sched_ops[] = { - &sctp_sched_fcfs, - &sctp_sched_prio, - &sctp_sched_rr, -}; +void sctp_sched_ops_register (enum sctp_sched_type sched, +struct sctp_sched_ops *sched_ops) +{ + 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,enum sctp_sched_type sched)
net/sctp/stream_sched_prio.c +6 -1
@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream)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, .get = sctp_sched_prio_get, .init = sctp_sched_prio_init,
@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = { .sched_all = sctp_sched_prio_sched_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); +}
net/sctp/stream_sched_rr.c +6 -1
@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream)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, .get = sctp_sched_rr_get, .init = sctp_sched_rr_init,
@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = { .sched_all = sctp_sched_rr_sched_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); +}
Signature · 1 line
2.1.0
Re: [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail
In reply to Xin LongQuoted 4 lines · Xin Long
This patch is to force
SCTP_ERROR_INV_STRMwith right type to fit insctp_chunk_failto avoid the sparse error.Signed-off-by Xin Long <[email protected]>
Quoted 25 lines
--- net/sctp/stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)net/sctp/stream.c +1
-1@@ -64,7 +64,7 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream,*/ /* 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 &&SCTP_PR_PRIO_ENABLED (ch->sinfo.sinfo_flags)) asoc->sent_cnt_removable--;Signature · 6 lines
2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net 2/3] sctp: force the params with right types for sctp csum apis
In reply to Xin LongQuoted 9 lines · Xin Long
Now
sctp_csum_xxxdoesn't really match the param types of these common csum apis. Assctp_csum_xxxis defined insctp/checksum.h, many sparse errors occur when make C=2 not only with M=net/sctp but also with other modules that include this header file.This patch is to force them fit in csum apis with the right types.
Fixes e6d8b64b34aa ("net: sctp: fix and consolidate SCTP checksumming code")Signed-off-by Xin Long <[email protected]>
Quoted 55 lines
--- include/net/sctp/checksum.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)include/net/sctp/checksum.h +7
-6@@ -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 * 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,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,unsigned int offset) {struct sctphdr *sh =sctp_hdr (skb); -__le32 ret, old = sh->checksum;const struct skb_checksum_ops ops = { .update = sctp_csum_update, .combine = sctp_csum_combine, }; +__le32 old = sh->checksum; +__wsum new; sh->checksum =0 ; - ret =cpu_to_le32 (~__skb_checksum (skb, offset, skb->len - offset, - ~(__u32 )0 , &ops)); + new = ~__skb_checksum (skb, offset, skb->len - offset, ~(__wsum )0 , &ops); sh->checksum = old; -return ret; +return cpu_to_le32 ((__force __u32 )new); }#endif /* __sctp_checksum_h__ */ Signature · 6 lines
2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH net 3/3] sctp: remove extern from stream sched
In reply to Xin LongQuoted 7 lines · Xin Long
Now each stream sched ops is defined in different .c file and added into the global ops in another .c file, it uses extern to make this work.
However extern is not good coding style to get them in and even make C=2 reports errors for this.
Quoted 7 lines
This patch adds
sctp_sched_ops_xxx_initfor each stream sched ops in their .c file, then get them into the global ops by calling them when initializing sctp module.Fixes 637784ade221 ("sctp: introduce priority based stream scheduler")Fixes ac1ed8b82cd6 ("sctp: introduce round robin stream scheduler")Signed-off-by Xin Long <[email protected]>
Quoted 142 lines
--- include/net/sctp/sctp.h | 5 +++++ include/net/sctp/stream_sched.h | 5 +++++ net/sctp/protocol.c | 1 + net/sctp/stream_sched.c | 25 ++++++++++++++++++------- net/sctp/stream_sched_prio.c | 7 ++++++- net/sctp/stream_sched_rr.c | 7 ++++++- 6 files changed, 41 insertions(+), 9 deletions(-)include/net/sctp/sctp.h +5
-0@@ -195,6 +195,11 @@ void sctp_remaddr_proc_exit(struct net *net);int sctp_offload_init (void );/* +* sctp/stream_sched.c +*/ +void sctp_sched_ops_init (void ); + +/* * sctp/stream.c */ int sctp_send_reset_streams(struct sctp_association *asoc,include/net/sctp/stream_sched.h +5
-0@@ -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);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__ */ net/sctp/protocol.c +1
-0@@ -1499,6 +1499,7 @@ static __init int sctp_init(void)INIT_LIST_HEAD (&sctp_address_families);sctp_v4_pf_init ();sctp_v6_pf_init (); +sctp_sched_ops_init (); status =register_pernet_subsys (&sctp_defaults_ops);if (status)net/sctp/stream_sched.c +18
-7@@ -119,16 +119,27 @@ static struct sctp_sched_ops sctp_sched_fcfs = { .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 */ -extern struct sctp_sched_ops sctp_sched_prio; -extern struct sctp_sched_ops sctp_sched_rr; +static struct sctp_sched_ops *sctp_sched_ops[SCTP_SS_MAX +1 ]; -static struct sctp_sched_ops *sctp_sched_ops[] = { - &sctp_sched_fcfs, - &sctp_sched_prio, - &sctp_sched_rr, -}; +void sctp_sched_ops_register (enum sctp_sched_type sched, +struct sctp_sched_ops *sched_ops) +{ + 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,enum sctp_sched_type sched)net/sctp/stream_sched_prio.c +6
-1@@ -333,7 +333,7 @@ static void sctp_sched_prio_unsched_all(struct sctp_stream *stream)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, .get = sctp_sched_prio_get, .init = sctp_sched_prio_init,@@ -345,3 +345,8 @@ struct sctp_sched_ops sctp_sched_prio = { .sched_all = sctp_sched_prio_sched_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); +}net/sctp/stream_sched_rr.c +6
-1@@ -187,7 +187,7 @@ static void sctp_sched_rr_unsched_all(struct sctp_stream *stream)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, .get = sctp_sched_rr_get, .init = sctp_sched_rr_init,@@ -199,3 +199,8 @@ struct sctp_sched_ops sctp_sched_rr = { .sched_all = sctp_sched_rr_sched_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); +}Signature · 6 lines
2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Xin Long
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.
Xin Long (3):
sctp: forceSCTP_ERROR_INV_STRMwith__u32when calling
sctp_chunk_fail
sctp: force the params with right types for sctp csum apis
sctp: remove extern from stream sched
Quoted 14 lines
include/net/sctp/checksum.h | 13 +++++++------ include/net/sctp/sctp.h | 5 +++++ include/net/sctp/stream_sched.h | 5 +++++ net/sctp/protocol.c | 1 + net/sctp/stream.c | 2 +- net/sctp/stream_sched.c | 25 ++++++++++++++++++------- net/sctp/stream_sched_prio.c | 7 ++++++- net/sctp/stream_sched_rr.c | 7 ++++++- 8 files changed, 49 insertions(+), 16 deletions(-)Signature · 1 line
2.1.0
Series
David Miller
maintainerFrom: Xin Long <[email protected]>
Date: Sun, 26 Nov 2017 20:16:05 +0800
Quoted 3 lines
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.
Series applied.