Re: drivers/ide/ide-ioctls.c:15:24: sparse: sparse: incorrect type in initializer (different address spaces)

From: Arnd Bergmann
Date: Fri May 22 2020 - 09:41:11 EST


On Fri, May 22, 2020 at 2:24 PM kbuild test robot <lkp@xxxxxxxxx> wrote:
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 051143e1602d90ea71887d92363edd539d411de5
> commit: 1df23c6fe5b0654ece219985a0c32e40b100bd9a compat_ioctl: move HDIO ioctl handling into drivers/ide
> date: 5 months ago
> config: xtensa-randconfig-s002-20200522 (attached as .config)
> compiler: xtensa-linux-gcc (GCC) 9.3.0
> reproduce:
> # apt-get install sparse
> # sparse version: v0.6.1-193-gb8fad4bc-dirty
> git checkout 1df23c6fe5b0654ece219985a0c32e40b100bd9a
> # save the attached .config to linux build tree
> make W=1 C=1 ARCH=xtensa CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kbuild test robot <lkp@xxxxxxxxx>
>
>
> sparse warnings: (new ones prefixed by >>)
>
> ./arch/xtensa/include/generated/uapi/asm/unistd_32.h:391:41: sparse: sparse: no newline at end of file
> >> drivers/ide/ide-ioctls.c:15:24: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected signed int *__pu_addr @@ got signed int [noderef] [usertypsigned int *__pu_addr @@
> >> drivers/ide/ide-ioctls.c:15:24: sparse: expected signed int *__pu_addr
> >> drivers/ide/ide-ioctls.c:15:24: sparse: got signed int [noderef] [usertype] <asn:1> *
> >> drivers/ide/ide-ioctls.c:15:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] <asn:1> *to @@ got f] <asn:1> *to @@
> drivers/ide/ide-ioctls.c:15:24: sparse: expected void [noderef] <asn:1> *to
> >> drivers/ide/ide-ioctls.c:15:24: sparse: got signed int *__pu_addr


I think this is a bug in the xtensa asm/uaccess.h, but I don't know why it
only showed up now.

> drivers/ide/ide-ioctls.c:17:16: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected long *__pu_addr @@ got long [noderef] <aslong *__pu_addr @@
> drivers/ide/ide-ioctls.c:17:16: sparse: expected long *__pu_addr
> drivers/ide/ide-ioctls.c:17:16: sparse: got long [noderef] <asn:1> *
> drivers/ide/ide-ioctls.c:17:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void [noderef] <asn:1> *to @@ got n:1> *to @@
> drivers/ide/ide-ioctls.c:17:16: sparse: expected void [noderef] <asn:1> *to
> drivers/ide/ide-ioctls.c:17:16: sparse: got long *__pu_addr

This looks like an old bug in the ide driver, unrelated to my patch.

Arnd