mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "William King" <William.King@dadaboom.com>
To: <linux-kernel@vger.kernel.org>
Subject: Bug: 2.4.xx in serial.c
Date: Mon, 17 Feb 2003 12:32:49 -0800	[thread overview]
Message-ID: <JAEGLIPFMODKGALKJJGNOEJGCAAA.William.King@dadaboom.com> (raw)

I've traced what appears to be a bug in the serial driver (serial.c) in
regards to how the transmit fifo is handled on some uarts.

In the function transmit_chars() around line 6016:

count = info->xmit_fifo_size;
do {
        serial_out(info, UART_TX, info->xmit.buf[info->xmit.tail]);
        info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
        info->state->icount.tx++;
        if (info->xmit.head == info->xmit.tail)
                break;
} while (--count > 0);

This loop fills the xmit fifo with up to the number of characters which the
fifo can hold. If we have more characters to send than the fifo can handle,
we will take an interrupt when the fifo empties and run this loop again.

The assumption is however that the fifo empty interrupt will occur when the
number of characters in the xmit fifo is 0. This is true on a 16550A uart,
but is not true on others (such as a ST16C654.) The ST16C654 uart has a 64
byte fifo, but the interrrupt will occur when the number of characters drops
below a programmable threshold. The minimum threshold is 8 on this uart
which causes an overflow of the xmit fifo.

My thought for a patch is to add a field to struct async_struct to indicate
the maximum number of characters which still may be in the fifo when an
interrupt occurs. The only other thing I can think of is to poll the fifo
full bit which every character write, but this seems like a bad idea.

I'd like to get some feedback before I code up a patch. Maybe I'm just
missing the bigger picture :-)

Thanks,

-- Bill






             reply	other threads:[~2003-02-17 20:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-02-17 20:32 William King [this message]
2003-02-17 23:00 ` Jörn Engel

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=JAEGLIPFMODKGALKJJGNOEJGCAAA.William.King@dadaboom.com \
    --to=william.king@dadaboom.com \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®