[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] V2 pci uart - better cope with UART being temporarily unavailable



>>> On 27.08.13 at 15:36, Tomasz Wroblewski <tomasz.wroblewski@xxxxxxxxxx> 
>>> wrote:

>>> --- a/xen/drivers/char/serial.c
>>> +++ b/xen/drivers/char/serial.c
>>> @@ -111,15 +111,18 @@ static void __serial_putc(struct serial_port *port, 
> char c)
>>>               if ( port->tx_log_everything )
>>>               {
>>>                   /* Buffer is full: we spin waiting for space to appear. */
>>> -                unsigned int n;
>>> +                int n;
>>>
>>>                   while ( (n = port->driver->tx_ready(port)) == 0 )
>>>                       cpu_relax();
>>> -                while ( n-- )
>>> -                    port->driver->putc(
>>> -                        port,
>>> -                        
>>> port->txbuf[mask_serial_txbuf_idx(port->txbufc++)]);
>>> -                port->txbuf[mask_serial_txbuf_idx(port->txbufp++)] = c;
>>> +                if (n>  0)
>>> +                {
>>> +                    while ( n-- )
>> "while ( n-->  0 )" can achieve the same without the extra if()
>> and with just a one line change.
> Thanks for review - agree with most comments except this one, we need to 
> avoid executing "port->txbuf[mask_serial_txbuf_idx(port->txbufp++)] = c" 
> if port is offline, since in this case the while loop will not consume 
> pull any character out of the buffer, and it will stay full, and we 
> should just drop the char. The "if" I added pulled the buffer insert 
> into its body.

Indeed. However, we're in a log-everything section, so dropping
characters here is not really right. Not sure what to do about this.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.