[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202007241310.55tGDyxu%lkp@intel.com>
Date: Fri, 24 Jul 2020 13:32:22 +0800
From: kernel test robot <lkp@...el.com>
To: Johnson CH Chen (陳昭勳)
<JohnsonCH.Chen@...a.com>, Jiri Slaby <jirislaby@...il.com>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Cc: kbuild-all@...ts.01.org,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"linux-serial@...r.kernel.org" <linux-serial@...r.kernel.org>
Subject: Re: [PATCH] tty: Add MOXA NPort Real TTY Driver
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 <lkp@...el.com>
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/kbuild-all@lists.01.org
Download attachment ".config.gz" of type "application/gzip" (24970 bytes)
Powered by blists - more mailing lists