Hi "Johnson,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on tty/tty-testing]
[also build test WARNING on v5.8-rc6 next-20200723]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Johnson-CH-Chen/tty-Add-MOXA-NPort-Real-TTY-Driver/20200714-142712
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git 
tty-testing
config: mips-randconfig-s032-20200723 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 9.3.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.2-93-g4c6cbe55-dirty
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


sparse warnings: (new ones prefixed by >>)

   drivers/tty/npreal2.c:1107:26: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void [noderef] __user *to @@     got 
struct serial_struct *retinfo @@
   drivers/tty/npreal2.c:1107:26: sparse:     expected void [noderef] __user *to
   drivers/tty/npreal2.c:1107:26: sparse:     got struct serial_struct *retinfo
   drivers/tty/npreal2.c:1122:56: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void const [noderef] __user *from @@ 
    got struct serial_struct *new_info @@
   drivers/tty/npreal2.c:1122:56: sparse:     expected void const [noderef] 
__user *from
   drivers/tty/npreal2.c:1122:56: sparse:     got struct serial_struct *new_info
   drivers/tty/npreal2.c:1149:57: sparse: sparse: Using plain integer as NULL 
pointer
   drivers/tty/npreal2.c:1186:9: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected unsigned int [noderef] __user 
*__pu_addr @@     got unsigned int *value @@
   drivers/tty/npreal2.c:1186:9: sparse:     expected unsigned int [noderef] 
__user *__pu_addr
   drivers/tty/npreal2.c:1186:9: sparse:     got unsigned int *value
   drivers/tty/npreal2.c:1624:38: sparse: sparse: Using plain integer as NULL 
pointer
   drivers/tty/npreal2.c:1897:34: sparse: sparse: Using plain integer as NULL 
pointer
   drivers/tty/npreal2.c:1914:21: sparse: sparse: Using plain integer as NULL 
pointer
   drivers/tty/npreal2.c:1984:46: sparse: sparse: Using plain integer as NULL 
pointer
   drivers/tty/npreal2.c:2261:17: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected unsigned long [noderef] __user 
*__pu_addr @@     got unsigned long * @@
   drivers/tty/npreal2.c:2261:17: sparse:     expected unsigned long [noderef] 
__user *__pu_addr
   drivers/tty/npreal2.c:2261:17: sparse:     got unsigned long *
>> drivers/tty/npreal2.c:2265:17: sparse: sparse: incorrect type in initializer 
>> (different address spaces) @@     expected unsigned long const [noderef] 
>> __user *__gu_ptr @@     got unsigned long * @@
>> drivers/tty/npreal2.c:2265:17: sparse:     expected unsigned long const 
>> [noderef] __user *__gu_ptr
   drivers/tty/npreal2.c:2265:17: sparse:     got unsigned long *
   drivers/tty/npreal2.c:2319:21: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2319:21: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2319:21: sparse:     got int *
   drivers/tty/npreal2.c:2319:62: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2319:62: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2319:62: sparse:     got int *
   drivers/tty/npreal2.c:2320:25: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2320:25: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2320:25: sparse:     got int *
   drivers/tty/npreal2.c:2321:25: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2321:25: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2321:25: sparse:     got int *
   drivers/tty/npreal2.c:2322:25: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2322:25: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2322:25: sparse:     got int *
   drivers/tty/npreal2.c:2323:25: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2323:25: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2323:25: sparse:     got int *
   drivers/tty/npreal2.c:2324:25: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2324:25: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2324:25: sparse:     got int *
   drivers/tty/npreal2.c:2329:17: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2329:17: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2329:17: sparse:     got int *
   drivers/tty/npreal2.c:2330:17: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2330:17: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2330:17: sparse:     got int *
   drivers/tty/npreal2.c:2331:17: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2331:17: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2331:17: sparse:     got int *
   drivers/tty/npreal2.c:2332:17: sparse: sparse: incorrect type in initializer 
(different address spaces) @@     expected int [noderef] __user *__pu_addr @@   
  got int * @@
   drivers/tty/npreal2.c:2332:17: sparse:     expected int [noderef] __user 
*__pu_addr
   drivers/tty/npreal2.c:2332:17: sparse:     got int *
   drivers/tty/npreal2.c:2570:35: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void [noderef] __user *to @@     got 
void * @@
   drivers/tty/npreal2.c:2570:35: sparse:     expected void [noderef] __user *to
   drivers/tty/npreal2.c:2570:35: sparse:     got void *
   drivers/tty/npreal2.c:2591:57: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void const [noderef] __user *from @@ 
    got void * @@
   drivers/tty/npreal2.c:2591:57: sparse:     expected void const [noderef] 
__user *from
   drivers/tty/npreal2.c:2591:57: sparse:     got void *
   drivers/tty/npreal2.c:2720:35: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void [noderef] __user *to @@     got 
void * @@
   drivers/tty/npreal2.c:2720:35: sparse:     expected void [noderef] __user *to
   drivers/tty/npreal2.c:2720:35: sparse:     got void *
   drivers/tty/npreal2.c:2734:56: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void const [noderef] __user *from @@ 
    got void * @@
   drivers/tty/npreal2.c:2734:56: sparse:     expected void const [noderef] 
__user *from
   drivers/tty/npreal2.c:2734:56: sparse:     got void *
   drivers/tty/npreal2.c:2803:34: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void [noderef] __user *to @@     got 
char *buf @@
   drivers/tty/npreal2.c:2803:34: sparse:     expected void [noderef] __user *to
   drivers/tty/npreal2.c:2803:34: sparse:     got char *buf
   drivers/tty/npreal2.c:2831:38: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@     expected void [noderef] __user *to @@     got 
char * @@
   drivers/tty/npreal2.c:2831:38: sparse:     expected void [noderef] __user *to
   drivers/tty/npreal2.c:2831:38: sparse:     got char *
   drivers/tty/npreal2.c:2899:38: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@     expected void const [noderef] __user *from @@ 
    got char const *buf @@
   drivers/tty/npreal2.c:2899:38: sparse:     expected void const [noderef] 
__user *from
   drivers/tty/npreal2.c:2899:38: sparse:     got char const *buf
>> drivers/tty/npreal2.c:2950:22: sparse: sparse: incorrect type in initializer 
>> (incompatible argument 2 (different address spaces)) @@     expected int ( 
>> *proc_read )( ... ) @@     got int ( * )( ... ) @@
>> drivers/tty/npreal2.c:2950:22: sparse:     expected int ( *proc_read )( ... )
>> drivers/tty/npreal2.c:2950:22: sparse:     got int ( * )( ... )
>> drivers/tty/npreal2.c:2951:23: sparse: sparse: incorrect type in initializer 
>> (incompatible argument 2 (different address spaces)) @@     expected int ( 
>> *proc_write )( ... ) @@     got int ( * )( ... ) @@
>> drivers/tty/npreal2.c:2951:23: sparse:     expected int ( *proc_write )( ... 
>> )
   drivers/tty/npreal2.c:2951:23: sparse:     got int ( * )( ... )
   drivers/tty/npreal2.c:2954:22: sparse: sparse: incorrect type in initializer 
(different base types) @@     expected restricted __poll_t ( *proc_poll )( ... 
) @@     got unsigned int ( * )( ... ) @@
   drivers/tty/npreal2.c:2954:22: sparse:     expected restricted __poll_t ( 
*proc_poll )( ... )
   drivers/tty/npreal2.c:2954:22: sparse:     got unsigned int ( * )( ... )

vim +2265 drivers/tty/npreal2.c

  2201  
  2202  static int npreal_ioctl(struct tty_struct *tty, unsigned int cmd,
  2203                          unsigned long arg)
  2204  {
  2205          struct npreal_struct *info = (struct npreal_struct 
*)tty->driver_data;
  2206          struct serial_icounter_struct *p_cuser; /* user space */
  2207          unsigned long templ;
  2208          int ret = 0;
  2209  
  2210          if (!info)
  2211                  return -ENODEV;
  2212  
  2213          if ((cmd != TIOCGSERIAL) && (cmd != TIOCMIWAIT) && (cmd != 
TIOCGICOUNT) &&
  2214                  test_bit(TTY_IO_ERROR, &tty->flags))
  2215                  return -EIO;
  2216  
  2217          switch (cmd) {
  2218          case TCFLSH:
  2219                  ret = tty_check_change(tty);
  2220                  if (!ret) {
  2221                          switch (arg) {
  2222                          case TCIFLUSH:
  2223                                  if (tty->ldisc->ops->flush_buffer)
  2224                                          
tty->ldisc->ops->flush_buffer(tty);
  2225                                  break;
  2226  
  2227                          case TCIOFLUSH:
  2228                                  if (tty->ldisc->ops->flush_buffer)
  2229                                          
tty->ldisc->ops->flush_buffer(tty);
  2230                                  npreal_flush_buffer(tty);
  2231                                  break;
  2232  
  2233                          case TCOFLUSH:
  2234                                  npreal_flush_buffer(tty);
  2235                                  break;
  2236  
  2237                          default:
  2238                                  ret = -EINVAL;
  2239                          }
  2240                  }
  2241                  break;
  2242  
  2243          case TCSBRK: /* SVID version: non-zero arg --> no break */
  2244                  ret = tty_check_change(tty);
  2245                  if (!ret) {
  2246                          tty_wait_until_sent(tty, 0);
  2247                          if (!arg)
  2248                                  npreal_send_break(info, HZ / 4);
  2249                  }
  2250                  break;
  2251  
  2252          case TCSBRKP: /* support for POSIX tcsendbreak() */
  2253                  ret = tty_check_change(tty);
  2254                  if (!ret) {
  2255                          tty_wait_until_sent(tty, 0);
  2256                          npreal_send_break(info, arg ? arg * (HZ / 10) : 
HZ / 4);
  2257                  }
  2258                  break;
  2259  
  2260          case TIOCGSOFTCAR:
  2261                  put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg);
  2262                  break;
  2263  
  2264          case TIOCSSOFTCAR:
> 2265                  get_user(templ, (unsigned long *)arg);
  2266                  tty->termios.c_cflag = ((tty->termios.c_cflag & 
~CLOCAL) | (arg ? CLOCAL : 0));
  2267                  break;
  2268  
  2269          case TIOCGSERIAL:
  2270                  ret = (npreal_get_serial_info(info, (struct 
serial_struct *)arg));
  2271                  break;
  2272  
  2273          case TIOCSSERIAL:
  2274                  ret = (npreal_set_serial_info(info, (struct 
serial_struct *)arg));
  2275                  break;
  2276  
  2277          case TIOCSERGETLSR: /* Get line status register */
  2278                  ret = (npreal_get_lsr_info(info, (unsigned int *)arg));
  2279                  break;
  2280  
  2281          case TIOCMIWAIT: {
  2282                  struct async_icount cprev;
  2283                  DECLARE_WAITQUEUE(wait, current);
  2284  
  2285                  cprev = info->icount;
  2286                  add_wait_queue(&info->delta_msr_wait, &wait);
  2287                  while (1) {
  2288                          struct async_icount cnow;
  2289  
  2290                          cnow = info->icount;
  2291                          if (((arg & TIOCM_RNG) && (cnow.rng != 
cprev.rng)) ||
  2292                                  ((arg & TIOCM_DSR) && (cnow.dsr != 
cprev.dsr)) ||
  2293                                  ((arg & TIOCM_CD) && (cnow.dcd != 
cprev.dcd)) ||
  2294                                  ((arg & TIOCM_CTS) && (cnow.cts != 
cprev.cts))) {
  2295                                  ret = 0;
  2296                                  break;
  2297                          }
  2298  
  2299                          if (signal_pending(current)) {
  2300                                  ret = -ERESTARTSYS;
  2301                                  break;
  2302                          }
  2303  
  2304                          cprev = cnow;
  2305                          current->state = TASK_INTERRUPTIBLE;
  2306                          schedule();
  2307                  }
  2308  
  2309                  remove_wait_queue(&info->delta_msr_wait, &wait);
  2310                  break;
  2311          }
  2312  
  2313          case TIOCGICOUNT:{
  2314                  struct async_icount cnow;
  2315  
  2316                  cnow = info->icount;
  2317                  p_cuser = (struct serial_icounter_struct *)arg;
  2318  
  2319                  if (put_user(cnow.frame, &p_cuser->frame) || 
put_user(cnow.brk, &p_cuser->brk) ||
  2320                          put_user(cnow.overrun, &p_cuser->overrun) ||
  2321                          put_user(cnow.buf_overrun, 
&p_cuser->buf_overrun) ||
  2322                          put_user(cnow.parity, &p_cuser->parity) ||
  2323                          put_user(cnow.rx, &p_cuser->rx) ||
  2324                          put_user(cnow.tx, &p_cuser->tx)) {
  2325                          ret = -EFAULT;
  2326                          break;
  2327                  }
  2328  
  2329                  put_user(cnow.cts, &p_cuser->cts);
  2330                  put_user(cnow.dsr, &p_cuser->dsr);
  2331                  put_user(cnow.rng, &p_cuser->rng);
  2332                  put_user(cnow.dcd, &p_cuser->dcd);
  2333                  break;
  2334          }
  2335          case TCXONC:
  2336                  ret = tty_check_change(tty);
  2337                  if (!ret) {
  2338                          switch (arg) {
  2339                          case TCOOFF:
  2340                                  ret = 
npreal_set_generic_command_done(info, ASPP_CMD_SETXOFF);
  2341                                  break;
  2342  
  2343                          case TCOON:
  2344                                  ret = 
npreal_set_generic_command_done(info, ASPP_CMD_SETXON);
  2345                                  break;
  2346  
  2347                          default:
  2348                                  ret = -EINVAL;
  2349                          }
  2350                  }
  2351                  break;
  2352  
  2353          default:
  2354                  ret = -ENOIOCTLCMD;
  2355          }
  2356          return ret;
  2357  }
  2358  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

Reply via email to