Subject: Re: [PATCH 1/2] GenWQE: Fix endian issues detected by sparse

From: Greg KH <[email-masked]>
Date: Fri, 20 Dec 2013 08:47:05 -0800

On Fri, Dec 20, 2013 at 04:26:10PM +0100, Frank Haverkamp wrote:
> Fengguang Wu used CF=-D__CHECK_ENDIAN__ to check the GenWQE driver for
> endian issues. Sparse found a couple of those. Most of them were caused
> by not correctly handling __be64/32 and __u64/32. Those I was able to
> fix with appropriate castings.
> 
> One more serious issue was the ATS entry in struct genwqe_ddcb_cmd.
> The kernel expected it in big-endian, but the type was defined __u64.
> I decided that it is better to keep the interface consistent using
> host endian byte-odering instead of having a mixture. With this change
> the kernel likes to see host endian byte order for the ATS entry. That
> would have been an interface change, if someone would have used the
> driver already. Since this is not the case, I hope it is ok to fix it
> now.
> 
> For the genqwe_readq/writeq/readl/writel functions I enforced the casts.
> 
> It still complains, as far as I can see, about some copy_to/from_user()
> usages:
> 
>   CHECK   char-misc/drivers/misc/genwqe/card_dev.c
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
>   CC [M]  drivers/misc/genwqe/card_dev.o
>   CHECK   char-misc/drivers/misc/genwqe/card_ddcb.c
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
> char-misc/arch/x86/include/asm/uaccess.h:625:18: warning: incorrect type in argument 1 (different modifiers)
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    expected void *<noident>
> char-misc/arch/x86/include/asm/uaccess.h:625:18:    got void const *from
>   CC [M]  drivers/misc/genwqe/card_ddcb.o
>   LD [M]  drivers/misc/genwqe/genwqe_card.o
> 
> I appreciate some help from you to figure out what is causig those, and
> making a proposal how to fix them.
> 
> I included the missing header file to fix the
> implicit-function-declaration warning when using dynamic_hex_dump.
> 
> Signed-off-by: Frank Haverkamp <[email-masked]>

In the future (I missed this as well), please use a "Reported-by:" tag
to document who reported the problem to you.

thanks,

greg k-h