[Skiboot] [PATCH v2 1/2] hw/lpc-uart.c: Fix uninitialised comparison

Aditya Gupta adityag at linux.ibm.com
Fri Apr 11 19:39:52 AEST 2025


Hi Abhishek,

On 25/04/10 06:13AM, ABHISHEK SINGH TOMAR wrote:
> From: Abhishek Singh Tomar <abhishek at linux.ibm.com>
> 
> The __length variable is not initialized in the Linux
> kernel source code but is compared against a value in
> uart_opal_write_buffer_space. This results in invalid behavior.
> 
> Changes include:
> 
> Removing the invalid comparison of __length.
> Adding a temporary log statement for testing purposes:
> 	Inside uart_opal_write_buffer_space: __length=0xf03baaaa050000c0.

This line might not be required now ^^, as you seem to have removed the
log statement.

> 
> opal_console_write_buffer_space is called twice in the
> kernel code, but __length remains uninitialized in both
> cases. This fix ensures correct behavior by eliminating
> the problematic comparison.
> 
> This can finally lead to hang/softlock issue in older hardware.
> 
> Signed-off-by: Abhishek Singh Tomar <abhishek at linux.ibm.com>
> ---
>  hw/lpc-uart.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/lpc-uart.c b/hw/lpc-uart.c
> index c0f9c52ff..a5ffc5f22 100644
> --- a/hw/lpc-uart.c
> +++ b/hw/lpc-uart.c
> @@ -337,7 +337,7 @@ static int64_t uart_opal_write_buffer_space(int64_t term_number,
>  	lock(&uart_lock);
>  	tx_buf_len = uart_tx_buf_space();
>  
> -	if ((tx_buf_len < be64_to_cpu(*__length)) && uart_timed_out(1000))
> +	if (uart_timed_out(1000))
>  		ret = OPAL_TIMEOUT;
>  
>  	*__length = cpu_to_be64(tx_buf_len);
> -- 
> 2.48.1

Looks good to me. QEMU powerNV boots fine for me.

Reviewed-by: Aditya Gupta <adityag at linux.ibm.com>

Thanks,
- Aditya G




More information about the Skiboot mailing list