lkml.org 
[lkml]   [2015]   [Sep]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 4/4] printk: Add config option for disabling printk offloading
On Wed, 19 Aug 2015 17:38:31 +0200 Jan Kara <jack@suse.com> wrote:

> From: Jan Kara <jack@suse.cz>
>
> Necessity for offloading of printing was observed only for large
> systems. So add a config option (disabled by default)

The Kconfig has "default y"?

> which removes most
> of the overhead added by this functionality.
>
> ...
>
> +#ifdef CONFIG_PRINTK_OFFLOAD
> /*
> * Returns true iff there is other cpu waiting to take over printing. This
> * function also takes are of setting PRINTK_HANDOVER_B if we want to hand over
> @@ -2278,6 +2283,14 @@ static bool cpu_stop_printing(int printed_chars)
>
> return false;
> }
> +#else
> +
> +static bool cpu_stop_printing(int printed_chars, bool *woken)
> +{
> + return false;
> +}
> +
> +#endif
>
> /**
> * console_unlock - unlock the console system
> @@ -2316,7 +2329,9 @@ void console_unlock(void)
> /* flush buffered message fragment immediately to console */
> console_cont_flush(text, sizeof(text));
> again:
> +#ifdef CONFIG_PRINTK_OFFLOAD
> spin_lock(&print_lock);
> +#endif

You could nuke a couple of ugly ifdefs by adding
spin_[un]lock_printk_lock() wrappers into that ifdef/else/endif block
which holds cpu_stop_printing().

> for (;;) {
> struct printk_log *msg;
> size_t ext_len = 0;
> @@ -2399,12 +2414,14 @@ skip:
>
> console_locked = 0;
> up_console_sem();
> +#ifdef CONFIG_PRINTK_OFFLOAD
> /*
> * Release print_lock after console_sem so that printing_task()
> * succeeds in getting console_sem (unless someone else takes it and
> * then he'll be responsible for printing).
> */
> spin_unlock(&print_lock);
> +#endif
>
> /*
> * Subtlety: We have interrupts disabled iff hand_over == false (to
> @@ -2770,6 +2787,7 @@ int unregister_console(struct console *console)
> }
> EXPORT_SYMBOL(unregister_console);
>
> +#ifdef CONFIG_PRINTK_OFFLOAD
> /* Kthread which takes over printing from a CPU which asks for help */
> static int printing_task(void *arg)
> {
> @@ -2838,6 +2856,7 @@ static int offload_chars_set(const char *val, const struct kernel_param *kp)
> mutex_unlock(&printk_kthread_mutex);
> return 0;
> }
> +#endif /* CONFIG_PRINTK_OFFLOAD */
>
> static int __init printk_late_init(void)
> {
> @@ -2850,9 +2869,11 @@ static int __init printk_late_init(void)
> }
> hotcpu_notifier(console_cpu_notify, 0);
>
> +#ifdef CONFIG_PRINTK_OFFLOAD
> mutex_lock(&printk_kthread_mutex);
> printk_start_offload_kthreads();
> mutex_unlock(&printk_kthread_mutex);
> +#endif

Possibly ditto here. Maybe move the mutex_lock() into
printk_start_offload_kthreads() too?





\
 
 \ /
  Last update: 2015-09-19 00:41    [W:0.097 / U:0.444 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site