Welcome! Log In Create A New Profile


About return code of serial8050_tx_threshold_handle_irq()

Posted by H.Wada 
Hi All.
I am testing the uart driver for Altera 16550 soft ip and kernel version is 5.2.rc3.

When my test application sends data in quantities by the cycle of the 32ms, I’m faced with the following problem,
(My test application is only transfer the data and data size is less than 64byte).

“irq 46: nobody cared (try booting with the “irqpoll” option)”

I investigate about this issue, I found that serial8250_interrupt function always returns UNHANDLED code.
serial8250_interrupt() calls serial8050_tx_threshold_handle_irq() and serial8050_tx_threshold_handle_irq() alway return 0 too.
This is a pieces of the code of serial8050_tx_threshold_handle_irq function.

—>Start code of serial8050_tx_threshold_handle_irq()
/* TX Threshold IRQ triggered so load up FIFO */
if ((iir & UART_IIR_ID) == UART_IIR_THRI){
struct uart_8250_port *up = up_to_u8250p(port);

spin_lock_irqsave(&port->lock, flags);
serial8250_tx_chars(up); <-----[1]
spin_unlock_irqrestore(&port->lock, flags);
iir = serial_port_in(port, UART_IIR); <-----[2]
return(serial8250_handle_irq(port, iir));
<------End of the code of serial8050_tx_threshold_handle_irq()

Please see [1].
After calling serial8250_tx_chars(), UART_IER_THRI bit of IER register is cleared.
So, iir value is always 0xC1 and return value of serial8050_tx_threshold_handle_irq() is always 0.(see [2])

When if statement is executed, I think "return code" should be '1'.
Am I wrong?
Please advice me.

Your Email:


Spam prevention:
Please, solve the mathematical question and enter the answer in the input field below. This is for blocking bots that try to post this form automatically.
Question: how much is 24 plus 13?