netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net 0/3] sctp: fix some other sparse errors
@ 2017-11-26 12:16 Xin Long
  2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Xin Long @ 2017-11-26 12:16 UTC (permalink / raw)
  To: network dev, linux-sctp
  Cc: davem, Marcelo Ricardo Leitner, Neil Horman, Vlad Yasevich

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(-)

-- 
2.1.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail
  2017-11-26 12:16 [PATCH net 0/3] sctp: fix some other sparse errors Xin Long
@ 2017-11-26 12:16 ` Xin Long
  2017-11-26 12:16   ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Xin Long
  2017-11-27 12:32   ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Marcelo Ricardo Leitner
  2017-11-27 14:00 ` [PATCH net 0/3] sctp: fix some other sparse errors Neil Horman
  2017-11-28 16:00 ` David Miller
  2 siblings, 2 replies; 9+ messages in thread
From: Xin Long @ 2017-11-26 12:16 UTC (permalink / raw)
  To: network dev, linux-sctp
  Cc: davem, Marcelo Ricardo Leitner, Neil Horman, Vlad Yasevich

This patch is to force SCTP_ERROR_INV_STRM with right type to
fit in sctp_chunk_fail to avoid the sparse error.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 net/sctp/stream.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/sctp/stream.c b/net/sctp/stream.c
index a20145b..76ea66b 100644
--- a/net/sctp/stream.c
+++ b/net/sctp/stream.c
@@ -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--;
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net 2/3] sctp: force the params with right types for sctp csum apis
  2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
@ 2017-11-26 12:16   ` Xin Long
  2017-11-26 12:16     ` [PATCH net 3/3] sctp: remove extern from stream sched Xin Long
  2017-11-27 12:32     ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Marcelo Ricardo Leitner
  2017-11-27 12:32   ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Marcelo Ricardo Leitner
  1 sibling, 2 replies; 9+ messages in thread
From: Xin Long @ 2017-11-26 12:16 UTC (permalink / raw)
  To: network dev, linux-sctp
  Cc: davem, Marcelo Ricardo Leitner, Neil Horman, Vlad Yasevich

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.

Fixes: e6d8b64b34aa ("net: sctp: fix and consolidate SCTP checksumming code")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 include/net/sctp/checksum.h | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
index 4a5b9a3..32ee65a 100644
--- a/include/net/sctp/checksum.h
+++ b/include/net/sctp/checksum.h
@@ -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__ */
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH net 3/3] sctp: remove extern from stream sched
  2017-11-26 12:16   ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Xin Long
@ 2017-11-26 12:16     ` Xin Long
  2017-11-27 12:41       ` Marcelo Ricardo Leitner
  2017-11-27 12:32     ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Marcelo Ricardo Leitner
  1 sibling, 1 reply; 9+ messages in thread
From: Xin Long @ 2017-11-26 12:16 UTC (permalink / raw)
  To: network dev, linux-sctp
  Cc: davem, Marcelo Ricardo Leitner, Neil Horman, Vlad Yasevich

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.

Fixes: 637784ade221 ("sctp: introduce priority based stream scheduler")
Fixes: ac1ed8b82cd6 ("sctp: introduce round robin stream scheduler")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
 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(-)

diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index 749a428..906a9c0 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);
 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,
diff --git a/include/net/sctp/stream_sched.h b/include/net/sctp/stream_sched.h
index c676550..5c5da48 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);
 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__ */
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
index f5172c2..6a38c25 100644
--- a/net/sctp/protocol.c
+++ b/net/sctp/protocol.c
@@ -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)
diff --git a/net/sctp/stream_sched.c b/net/sctp/stream_sched.c
index 0b83ec5..d8c162a 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 = {
 	.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)
diff --git a/net/sctp/stream_sched_prio.c b/net/sctp/stream_sched_prio.c
index 384dbf3..7997d35 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)
 			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);
+}
diff --git a/net/sctp/stream_sched_rr.c b/net/sctp/stream_sched_rr.c
index 7612a43..1155692 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)
 		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);
+}
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail
  2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
  2017-11-26 12:16   ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Xin Long
@ 2017-11-27 12:32   ` Marcelo Ricardo Leitner
  1 sibling, 0 replies; 9+ messages in thread
From: Marcelo Ricardo Leitner @ 2017-11-27 12:32 UTC (permalink / raw)
  To: Xin Long; +Cc: network dev, linux-sctp, davem, Neil Horman, Vlad Yasevich

On Sun, Nov 26, 2017 at 08:16:06PM +0800, Xin Long wrote:
> This patch is to force SCTP_ERROR_INV_STRM with right type to
> fit in sctp_chunk_fail to avoid the sparse error.
> 
> Signed-off-by: Xin Long <lucien.xin@gmail.com>

Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

> ---
>  net/sctp/stream.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/sctp/stream.c b/net/sctp/stream.c
> index a20145b..76ea66b 100644
> --- a/net/sctp/stream.c
> +++ b/net/sctp/stream.c
> @@ -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--;
> -- 
> 2.1.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net 2/3] sctp: force the params with right types for sctp csum apis
  2017-11-26 12:16   ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Xin Long
  2017-11-26 12:16     ` [PATCH net 3/3] sctp: remove extern from stream sched Xin Long
@ 2017-11-27 12:32     ` Marcelo Ricardo Leitner
  1 sibling, 0 replies; 9+ messages in thread
From: Marcelo Ricardo Leitner @ 2017-11-27 12:32 UTC (permalink / raw)
  To: Xin Long; +Cc: network dev, linux-sctp, davem, Neil Horman, Vlad Yasevich

On Sun, Nov 26, 2017 at 08:16:07PM +0800, Xin Long wrote:
> 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.
> 
> Fixes: e6d8b64b34aa ("net: sctp: fix and consolidate SCTP checksumming code")
> Signed-off-by: Xin Long <lucien.xin@gmail.com>

Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

> ---
>  include/net/sctp/checksum.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/include/net/sctp/checksum.h b/include/net/sctp/checksum.h
> index 4a5b9a3..32ee65a 100644
> --- a/include/net/sctp/checksum.h
> +++ b/include/net/sctp/checksum.h
> @@ -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__ */
> -- 
> 2.1.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net 3/3] sctp: remove extern from stream sched
  2017-11-26 12:16     ` [PATCH net 3/3] sctp: remove extern from stream sched Xin Long
@ 2017-11-27 12:41       ` Marcelo Ricardo Leitner
  0 siblings, 0 replies; 9+ messages in thread
From: Marcelo Ricardo Leitner @ 2017-11-27 12:41 UTC (permalink / raw)
  To: Xin Long; +Cc: network dev, linux-sctp, davem, Neil Horman, Vlad Yasevich

On Sun, Nov 26, 2017 at 08:16:08PM +0800, Xin Long wrote:
> 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.
> 
> Fixes: 637784ade221 ("sctp: introduce priority based stream scheduler")
> Fixes: ac1ed8b82cd6 ("sctp: introduce round robin stream scheduler")
> Signed-off-by: Xin Long <lucien.xin@gmail.com>

Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>

> ---
>  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(-)
> 
> diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
> index 749a428..906a9c0 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);
>  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,
> diff --git a/include/net/sctp/stream_sched.h b/include/net/sctp/stream_sched.h
> index c676550..5c5da48 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);
>  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__ */
> diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
> index f5172c2..6a38c25 100644
> --- a/net/sctp/protocol.c
> +++ b/net/sctp/protocol.c
> @@ -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)
> diff --git a/net/sctp/stream_sched.c b/net/sctp/stream_sched.c
> index 0b83ec5..d8c162a 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 = {
>  	.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)
> diff --git a/net/sctp/stream_sched_prio.c b/net/sctp/stream_sched_prio.c
> index 384dbf3..7997d35 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)
>  			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);
> +}
> diff --git a/net/sctp/stream_sched_rr.c b/net/sctp/stream_sched_rr.c
> index 7612a43..1155692 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)
>  		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);
> +}
> -- 
> 2.1.0
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net 0/3] sctp: fix some other sparse errors
  2017-11-26 12:16 [PATCH net 0/3] sctp: fix some other sparse errors Xin Long
  2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
@ 2017-11-27 14:00 ` Neil Horman
  2017-11-28 16:00 ` David Miller
  2 siblings, 0 replies; 9+ messages in thread
From: Neil Horman @ 2017-11-27 14:00 UTC (permalink / raw)
  To: Xin Long
  Cc: network dev, linux-sctp, davem, Marcelo Ricardo Leitner,
	Vlad Yasevich

On Sun, Nov 26, 2017 at 08:16:05PM +0800, Xin Long wrote:
> 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(-)
> 
> -- 
> 2.1.0
> 
> 
Series
Acked-by: Neil Horman <nhorman@tuxdriver.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH net 0/3] sctp: fix some other sparse errors
  2017-11-26 12:16 [PATCH net 0/3] sctp: fix some other sparse errors Xin Long
  2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
  2017-11-27 14:00 ` [PATCH net 0/3] sctp: fix some other sparse errors Neil Horman
@ 2017-11-28 16:00 ` David Miller
  2 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2017-11-28 16:00 UTC (permalink / raw)
  To: lucien.xin; +Cc: netdev, linux-sctp, marcelo.leitner, nhorman, vyasevich

From: Xin Long <lucien.xin@gmail.com>
Date: Sun, 26 Nov 2017 20:16:05 +0800

> 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.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2017-11-28 16:00 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-26 12:16 [PATCH net 0/3] sctp: fix some other sparse errors Xin Long
2017-11-26 12:16 ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Xin Long
2017-11-26 12:16   ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Xin Long
2017-11-26 12:16     ` [PATCH net 3/3] sctp: remove extern from stream sched Xin Long
2017-11-27 12:41       ` Marcelo Ricardo Leitner
2017-11-27 12:32     ` [PATCH net 2/3] sctp: force the params with right types for sctp csum apis Marcelo Ricardo Leitner
2017-11-27 12:32   ` [PATCH net 1/3] sctp: force SCTP_ERROR_INV_STRM with __u32 when calling sctp_chunk_fail Marcelo Ricardo Leitner
2017-11-27 14:00 ` [PATCH net 0/3] sctp: fix some other sparse errors Neil Horman
2017-11-28 16:00 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).