From: Dan Carpenter <dan.carpenter@oracle.com>
To: mirq-linux@rere.qmqm.pl
Cc: linux-usb@vger.kernel.org
Subject: [bug report] usb: gadget: u_serial: process RX in workqueue instead of tasklet
Date: Mon, 24 Jun 2019 15:32:58 +0300 [thread overview]
Message-ID: <20190624123258.GA31097@mwanda> (raw)
Hello Michał Mirosław,
This is a semi-automatic email about new static checker warnings.
The patch 8b4c62aef6f6: "usb: gadget: u_serial: process RX in
workqueue instead of tasklet" from Dec 16, 2018, leads to the
following Smatch complaint:
drivers/usb/gadget/function/u_serial.c:438 gs_rx_push()
error: we previously assumed 'tty' could be null (see line 373)
drivers/usb/gadget/function/u_serial.c
372 /* leave data queued if tty was rx throttled */
373 if (tty && tty_throttled(tty))
^^^^^^^^^^^^^^^^^^^^^^^^
Other checks for NULL
374 break;
375
376 switch (req->status) {
377 case -ESHUTDOWN:
378 disconnect = true;
379 pr_vdebug("ttyGS%d: shutdown\n", port->port_num);
380 break;
381
382 default:
383 /* presumably a transient fault */
384 pr_warn("ttyGS%d: unexpected RX status %d\n",
385 port->port_num, req->status);
386 /* FALLTHROUGH */
387 case 0:
388 /* normal completion */
389 break;
390 }
391
392 /* push data to (open) tty */
393 if (req->actual && tty) {
394 char *packet = req->buf;
395 unsigned size = req->actual;
396 unsigned n;
397 int count;
398
399 /* we may have pushed part of this packet already... */
400 n = port->n_read;
401 if (n) {
402 packet += n;
403 size -= n;
404 }
405
406 count = tty_insert_flip_string(&port->port, packet,
407 size);
408 if (count)
409 do_push = true;
410 if (count != size) {
411 /* stop pushing; TTY layer can't handle more */
412 port->n_read += count;
413 pr_vdebug("ttyGS%d: rx block %d/%d\n",
414 port->port_num, count, req->actual);
415 break;
416 }
417 port->n_read = 0;
418 }
419
420 list_move(&req->list, &port->read_pool);
421 port->read_started--;
422 }
423
424 /* Push from tty to ldisc; this is handled by a workqueue,
425 * so we won't get callbacks and can hold port_lock
426 */
427 if (do_push)
428 tty_flip_buffer_push(&port->port);
429
430
431 /* We want our data queue to become empty ASAP, keeping data
432 * in the tty and ldisc (not here). If we couldn't push any
433 * this time around, RX may be starved, so wait until next jiffy.
434 *
435 * We may leave non-empty queue only when there is a tty, and
436 * either it is throttled or there is no more room in flip buffer.
437 */
438 if (!list_empty(queue) && !tty_throttled(tty))
^^^^^^^^^^^^^^^^^^^
in the original code there was check for NULL here but the patch removed
it.
439 schedule_delayed_work(&port->push, 1);
440
regards,
dan carpenter
next reply other threads:[~2019-06-24 12:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-24 12:32 Dan Carpenter [this message]
2019-06-24 13:41 ` [bug report] usb: gadget: u_serial: process RX in workqueue instead of tasklet mirq-linux
2019-06-24 14:16 ` Dan Carpenter
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=20190624123258.GA31097@mwanda \
--to=dan.carpenter@oracle.com \
--cc=linux-usb@vger.kernel.org \
--cc=mirq-linux@rere.qmqm.pl \
/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.