Re: [PATCH v2] printk: Correctly handle preemption in console_unlock()

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

 



On Wed, 25 Jan 2017 15:08:45 +0100
Petr Mladek <pmladek@xxxxxxxx> wrote:

> diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
> index 7180088cbb23..cc90c0a5ae21 100644
> --- a/kernel/printk/printk.c
> +++ b/kernel/printk/printk.c
> @@ -2158,19 +2158,18 @@ void console_unlock(void)
>  	}
>  
>  	/*
> -	 * Console drivers are called under logbuf_lock, so
> -	 * @console_may_schedule should be cleared before; however, we may
> -	 * end up dumping a lot of lines, for example, if called from
> -	 * console registration path, and should invoke cond_resched()
> -	 * between lines if allowable.  Not doing so can cause a very long
> -	 * scheduling stall on a slow console leading to RCU stall and
> -	 * softlockup warnings which exacerbate the issue with more
> -	 * messages practically incapacitating the system.

Why did you remove the comment about invoking cond_resched()? It's
still pertinent to the code, as there still exists a:

	if (do_cond_resched)
		cond_resched();

And the rational in the comment is still correct.

-- Steve

> +	 * Console drivers are called with interrupts disabled, so
> +	 * @console_may_schedule must be cleared before. The original
> +	 * value must be stored so that we could schedule between lines.
> +	 *
> +	 * console_trylock() is not able to detect the preemtible
> +	 * context reliably. Therefore the value must be stored before
> +	 * and cleared after the the "again" goto label.
>  	 */
>  	do_cond_resched = console_may_schedule;
> +again:
>  	console_may_schedule = 0;
>  
> -again:
>  	/*
>  	 * We released the console_sem lock, so we need to recheck if
>  	 * cpu is online and (if not) is there at least one CON_ANYTIME

--
To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Video for Linux]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Tourism]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux