Re: PATCH (RFC): Rework the 8250 console fix

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

 



On Tue, May 02, 2006 at 03:09:43PM +0100, Alan Cox wrote:
> Russell got various bits of mail showing the 8250 console fix broke some
> setups with the assumptions it made. Based on this suggestion that we
> actually need to just do the locking I've prepared an alternative
> patch. 

I had merged your suggestion this morning, though I've just redone it
to fix a bug.

> There are two questions that I think make this an RFC not a final patch
> 
> 1.	Should this be pushed up into serial/serial_core.c for all chips.

No - uart_console_write doesn't know enough about the hardware to be
able to take the spinlock itself.

> 2.	Is the use of local_irq_save/spin_trylock spin_unlock_irqrestore
> going to break any platforms that do weird stuff or do we need a
> spin_trylock_irqsave ?

We do have a spin_trylock_irqsave(), so we don't need to worry about this.

b41d859ea4471c8784c500b97cdf82c7529c19ee
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -2235,10 +2235,17 @@ static void
 serial8250_console_write(struct console *co, const char *s, unsigned int count)
 {
 	struct uart_8250_port *up = &serial8250_ports[co->index];
+	unsigned long flags;
 	unsigned int ier;
+	int locked = 1;
 
 	touch_nmi_watchdog();
 
+	if (oops_in_progress) {
+		locked = spin_trylock_irqsave(&up->port.lock, flags);
+	} else
+		spin_lock_irqsave(&up->port.lock, flags);
+
 	/*
 	 *	First save the IER then disable the interrupts
 	 */
@@ -2257,6 +2265,9 @@ serial8250_console_write(struct console 
 	 */
 	wait_for_xmitr(up, BOTH_EMPTY);
 	serial_out(up, UART_IER, ier);
+
+	if (locked)
+		spin_unlock_irqrestore(&up->port.lock, flags);
 }
 
 static int serial8250_console_setup(struct console *co, char *options)


-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux