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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).