RE: RE: [PATCH] printk: nbcon: check uart port is nbcon or not in nbcon_release

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

 



Hi John,

As you mentioned, same console driver is only registered once. 8250 console driver is registered once, its "struct console *newcon" parameter is address of "univ8250_console" which is defined in drivers\tty\serial\8250\8250_core.c.

However, in each serial port device is registered, their cons pointer( "struct console *cons;" in "struct uart_port") will be assigned with same cons in API serial_core_add_one_port:
	uport->cons = drv->cons;
That is, multiple similar 8250 uart_port devices have same console pointer which points to above univ8250_console.

Hi Sebastain,

The ADL hardware I used has two UART devices, one is lpss 8250, another is 8250_dw. Usually there is no serial port in consumer product. Maybe there is serial port in Intel ADL industrial product.
With my hardware, hang issue could be reproduced every time with 6.6.7-rt18 if serial console is enabled. If you or John need me to run some test build and get debug log with my hardware, please feel free to let me know.


The main problem is that there is "nbcon" checking in nbcon_acquire, but no this checking in nbcon_release. It makes nbcon lock not balance. My patch is just to add same "uart_is_nbcon" checking in nb_release.

void nbcon_acquire(struct uart_port *up)
{
	...
	if (!uart_is_nbcon(up))
		return;
	...

Thanks,
Junxiao

-----Original Message-----
From: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> 
Sent: Wednesday, January 17, 2024 6:25 PM
To: John Ogness <john.ogness@xxxxxxxxxxxxx>
Cc: Chang, Junxiao <junxiao.chang@xxxxxxxxx>; tglx@xxxxxxxxxxxxx; rostedt@xxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Li, Hao3 <hao3.li@xxxxxxxxx>; Li, Lili <lili.li@xxxxxxxxx>; Gao, Jianfeng <jianfeng.gao@xxxxxxxxx>; linux-rt-users@xxxxxxxxxxxxxxx
Subject: Re: RE: [PATCH] printk: nbcon: check uart port is nbcon or not in nbcon_release

On 2024-01-17 11:09:24 [+0106], John Ogness wrote:
> On 2024-01-17, "Chang, Junxiao" <junxiao.chang@xxxxxxxxx> wrote:
> > There are several serial ports in one Intel ADL hardware, they are 
> > enumerated as ttyS0, ttyS1, ttyS4, and so on. Multiple console 
> > options might be appended to kernel command line. For example,
> > "console=ttyS0,115200n8 console=ttyS4,115200n8 
> > console=ttyS5,115200n8".
> >
> > In this case, several uarts "cons" pointers are same.
> 
> So I ask again. Please explain how this is possible.

I have here
| 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
| 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A

and I have

| root        2315  0.0  0.0   5480  1792 ttyS0    Ss+  11:19   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220
| root        2502  0.1  0.0   5480  1792 ttyS1    Ss+  11:20   0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,57600,38400,9600 - vt220

and I can stop both of them without any trouble. 
Can this be reproduced on an ordinary x86 hardware given they have more than one UART (up to four).
Is any of this ADL hardware upstream?

> John

Sebastian




[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux