All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefani Seibold <stefani@seibold.net>
To: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Cc: linux-kernel@vger.kernel.org, Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH 1/5] kfifo: remove unnecessary type check
Date: Tue, 08 Jan 2013 22:51:04 +0100	[thread overview]
Message-ID: <1357681864.27255.5.camel@wall-e> (raw)
In-Reply-To: <1357657073-27352-2-git-send-email-yuanhan.liu@linux.intel.com>

Am Dienstag, den 08.01.2013, 22:57 +0800 schrieb Yuanhan Liu:
> Firstly, this kind of type check doesn't work. It does something similar
> as following:
> 	void * __dummy = NULL;
> 	__buf = __dummy;
> 
> __dummy is defined as void *. Thus it will not trigger warnings as
> expected.
> 
> Second, we don't need that kind of check. Since the prototype
> of __kfifo_out is:
> 	unsigned int __kfifo_out(struct __kfifo *fifo,  void *buf, unsigned int len)
> 
> buf is defined as void *, so we don't need do the type check. Remove it.
> 

Thats wrong.

First the type checking will be used in kfifo_put() and kfifo_in() for
const types to check if the passed type of the data can converted to the
fifo element type. 
And it will be used in kfifo_get(), kfifo_peek(), kfifo_out() and
kfio_out_peek() to check if the element type of the fifo can be
converted to the passed type of the destination.

So a big NAK!  

> v2: remove ptr and const_ptr, which were used for type checking.
> 
> LINK: https://lkml.org/lkml/2012/10/25/386
> LINK: https://lkml.org/lkml/2012/10/25/584
> 
> Cc: Stefani Seibold <stefani@seibold.net>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
> ---
>  include/linux/kfifo.h |   46 ++++++++++++----------------------------------
>  1 files changed, 12 insertions(+), 34 deletions(-)
> 
> diff --git a/include/linux/kfifo.h b/include/linux/kfifo.h
> index 10308c6..7a18245 100644
> --- a/include/linux/kfifo.h
> +++ b/include/linux/kfifo.h
> @@ -63,49 +63,47 @@ struct __kfifo {
>  	void		*data;
>  };
>  
> -#define __STRUCT_KFIFO_COMMON(datatype, recsize, ptrtype) \
> +#define __STRUCT_KFIFO_COMMON(datatype, recsize) \
>  	union { \
>  		struct __kfifo	kfifo; \
>  		datatype	*type; \
>  		char		(*rectype)[recsize]; \
> -		ptrtype		*ptr; \
> -		const ptrtype	*ptr_const; \
>  	}
>  
> -#define __STRUCT_KFIFO(type, size, recsize, ptrtype) \
> +#define __STRUCT_KFIFO(type, size, recsize) \
>  { \
> -	__STRUCT_KFIFO_COMMON(type, recsize, ptrtype); \
> +	__STRUCT_KFIFO_COMMON(type, recsize); \
>  	type		buf[((size < 2) || (size & (size - 1))) ? -1 : size]; \
>  }
>  
>  #define STRUCT_KFIFO(type, size) \
> -	struct __STRUCT_KFIFO(type, size, 0, type)
> +	struct __STRUCT_KFIFO(type, size, 0)
>  
> -#define __STRUCT_KFIFO_PTR(type, recsize, ptrtype) \
> +#define __STRUCT_KFIFO_PTR(type, recsize) \
>  { \
> -	__STRUCT_KFIFO_COMMON(type, recsize, ptrtype); \
> +	__STRUCT_KFIFO_COMMON(type, recsize); \
>  	type		buf[0]; \
>  }
>  
>  #define STRUCT_KFIFO_PTR(type) \
> -	struct __STRUCT_KFIFO_PTR(type, 0, type)
> +	struct __STRUCT_KFIFO_PTR(type, 0)
>  
>  /*
>   * define compatibility "struct kfifo" for dynamic allocated fifos
>   */
> -struct kfifo __STRUCT_KFIFO_PTR(unsigned char, 0, void);
> +struct kfifo __STRUCT_KFIFO_PTR(unsigned char, 0);
>  
>  #define STRUCT_KFIFO_REC_1(size) \
> -	struct __STRUCT_KFIFO(unsigned char, size, 1, void)
> +	struct __STRUCT_KFIFO(unsigned char, size, 1)
>  
>  #define STRUCT_KFIFO_REC_2(size) \
> -	struct __STRUCT_KFIFO(unsigned char, size, 2, void)
> +	struct __STRUCT_KFIFO(unsigned char, size, 2)
>  
>  /*
>   * define kfifo_rec types
>   */
> -struct kfifo_rec_ptr_1 __STRUCT_KFIFO_PTR(unsigned char, 1, void);
> -struct kfifo_rec_ptr_2 __STRUCT_KFIFO_PTR(unsigned char, 2, void);
> +struct kfifo_rec_ptr_1 __STRUCT_KFIFO_PTR(unsigned char, 1);
> +struct kfifo_rec_ptr_2 __STRUCT_KFIFO_PTR(unsigned char, 2);
>  
>  /*
>   * helper macro to distinguish between real in place fifo where the fifo
> @@ -390,10 +388,6 @@ __kfifo_int_must_check_helper( \
>  	unsigned int __ret; \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) { \
> -		typeof(__tmp->ptr_const) __dummy __attribute__ ((unused)); \
> -		__dummy = (typeof(__val))NULL; \
> -	} \
>  	if (__recsize) \
>  		__ret = __kfifo_in_r(__kfifo, __val, sizeof(*__val), \
>  			__recsize); \
> @@ -432,8 +426,6 @@ __kfifo_uint_must_check_helper( \
>  	unsigned int __ret; \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) \
> -		__val = (typeof(__tmp->ptr))0; \
>  	if (__recsize) \
>  		__ret = __kfifo_out_r(__kfifo, __val, sizeof(*__val), \
>  			__recsize); \
> @@ -473,8 +465,6 @@ __kfifo_uint_must_check_helper( \
>  	unsigned int __ret; \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) \
> -		__val = (typeof(__tmp->ptr))NULL; \
>  	if (__recsize) \
>  		__ret = __kfifo_out_peek_r(__kfifo, __val, sizeof(*__val), \
>  			__recsize); \
> @@ -512,10 +502,6 @@ __kfifo_uint_must_check_helper( \
>  	unsigned long __n = (n); \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) { \
> -		typeof(__tmp->ptr_const) __dummy __attribute__ ((unused)); \
> -		__dummy = (typeof(__buf))NULL; \
> -	} \
>  	(__recsize) ?\
>  	__kfifo_in_r(__kfifo, __buf, __n, __recsize) : \
>  	__kfifo_in(__kfifo, __buf, __n); \
> @@ -565,10 +551,6 @@ __kfifo_uint_must_check_helper( \
>  	unsigned long __n = (n); \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) { \
> -		typeof(__tmp->ptr) __dummy = NULL; \
> -		__buf = __dummy; \
> -	} \
>  	(__recsize) ?\
>  	__kfifo_out_r(__kfifo, __buf, __n, __recsize) : \
>  	__kfifo_out(__kfifo, __buf, __n); \
> @@ -777,10 +759,6 @@ __kfifo_uint_must_check_helper( \
>  	unsigned long __n = (n); \
>  	const size_t __recsize = sizeof(*__tmp->rectype); \
>  	struct __kfifo *__kfifo = &__tmp->kfifo; \
> -	if (0) { \
> -		typeof(__tmp->ptr) __dummy __attribute__ ((unused)) = NULL; \
> -		__buf = __dummy; \
> -	} \
>  	(__recsize) ? \
>  	__kfifo_out_peek_r(__kfifo, __buf, __n, __recsize) : \
>  	__kfifo_out_peek(__kfifo, __buf, __n); \



  reply	other threads:[~2013-01-08 21:51 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-08 14:57 [PATCH 0/5] kfifo cleanup and log based kfifo API Yuanhan Liu
2013-01-08 14:57 ` [PATCH 1/5] kfifo: remove unnecessary type check Yuanhan Liu
2013-01-08 21:51   ` Stefani Seibold [this message]
2013-01-09  2:35     ` Yuanhan Liu
2013-01-09 15:29       ` Stefani Seibold
2013-01-10  7:12         ` Yuanhan Liu
2013-01-08 14:57 ` [PATCH 2/5] libsrp: replace kfifo_init with kfifo_alloc Yuanhan Liu
2013-01-08 14:57 ` [PATCH 3/5] libiscsi: " Yuanhan Liu
2013-01-08 14:57 ` [PATCH 4/5] kfifo: remove kfifo_init Yuanhan Liu
2013-01-08 15:03 ` Antw: [PATCH 0/5] kfifo cleanup and log based kfifo API Ulrich Windl
2013-01-08 15:29   ` Yuanhan Liu
  -- strict thread matches above, loose matches on Subject: below --
2013-01-08 14:57 [PATCH 5/5] kfifo: " Yuanhan Liu
2013-01-08 14:57 ` Yuanhan Liu
2013-01-08 14:57 ` Yuanhan Liu
2013-01-08 14:57 ` Yuanhan Liu
2013-01-08 14:57 ` Yuanhan Liu
2013-01-08 14:57 ` Yuanhan Liu
2013-01-08 18:16 ` Dmitry Torokhov
2013-01-08 18:16   ` Dmitry Torokhov
2013-01-08 18:16   ` Dmitry Torokhov
2013-01-08 18:16   ` Dmitry Torokhov
2013-01-08 18:16   ` Dmitry Torokhov
2013-01-08 21:10 ` Andy Walls
2013-01-08 21:10   ` Andy Walls
2013-01-08 21:10   ` Andy Walls
2013-01-08 21:10   ` Andy Walls
2013-01-08 21:10   ` Andy Walls
2013-01-09  2:42 ` Yuanhan Liu
2013-01-09  2:42   ` Yuanhan Liu
2013-01-09  2:42   ` Yuanhan Liu
2013-01-09  2:42   ` Yuanhan Liu
2013-01-09  2:42   ` Yuanhan Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1357681864.27255.5.camel@wall-e \
    --to=stefani@seibold.net \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=yuanhan.liu@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.