All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleg Nesterov <oleg@redhat.com>
To: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Rusty Russell <rusty@rustcorp.com.au>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Prarit Bhargava <prarit@redhat.com>,
	Fabian Frederick <fabf@skynet.be>,
	Johannes Weiner <hannes@cmpxchg.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [RFC/PATCH] init/main.c: Simplify initcall_blacklisted()
Date: Mon, 19 Jan 2015 20:19:25 +0100	[thread overview]
Message-ID: <20150119191924.GA19153@redhat.com> (raw)
In-Reply-To: <1421454312-30505-1-git-send-email-linux@rasmusvillemoes.dk>

On 01/17, Rasmus Villemoes wrote:
>
> Using kasprintf to get the function name makes us look up the name
> twice, along with all the vsnprintf overhead of parsing the format
> string etc. It also means there is an allocation failure case to deal
> with. Since symbol_string in vsprintf.c would anyway allocate an array
> of size KSYM_SYMBOL_LEN on the stack, that might as well be done up
> here.
> 
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> ---
> 
> Notes:
>     I don't know how expensive it is to do the symbol lookup for each
>     initcall. It might be worthwhile adding an
>     
>       if (list_empty(&blacklisted_initcalls))
>         return false;
>     
>     at the very beginning of initcall_blacklisted(), since this is a debug
>     feature and the blacklist is indeed usually empty.

If we want to optimize this... I am wondering if we can change
initcall_blacklist()

	-	entry->buf = alloc_bootmem(strlen(str_entry) + 1);
	+	ebtry->fn = kallsyms_lookup_name(str_entry);

and then change initcall_blacklisted() to just compare the pointers.

Oleg.

>  init/main.c | 8 ++------
>  1 file changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/init/main.c b/init/main.c
> index 61b993767db5..286602b677de 100644
> --- a/init/main.c
> +++ b/init/main.c
> @@ -733,22 +733,18 @@ static bool __init_or_module initcall_blacklisted(initcall_t fn)
>  {
>  	struct list_head *tmp;
>  	struct blacklist_entry *entry;
> -	char *fn_name;
> +	char fn_name[KSYM_SYMBOL_LEN];
>  
> -	fn_name = kasprintf(GFP_KERNEL, "%pf", fn);
> -	if (!fn_name)
> -		return false;
> +	sprint_symbol_no_offset(fn_name, (unsigned long)fn);
>  
>  	list_for_each(tmp, &blacklisted_initcalls) {
>  		entry = list_entry(tmp, struct blacklist_entry, next);
>  		if (!strcmp(fn_name, entry->buf)) {
>  			pr_debug("initcall %s blacklisted\n", fn_name);
> -			kfree(fn_name);
>  			return true;
>  		}
>  	}
>  
> -	kfree(fn_name);
>  	return false;
>  }
>  #else
> -- 
> 2.1.3
> 


  reply	other threads:[~2015-01-19 19:21 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-17  0:25 [RFC/PATCH] init/main.c: Simplify initcall_blacklisted() Rasmus Villemoes
2015-01-19 19:19 ` Oleg Nesterov [this message]
2015-01-20  1:05   ` Rusty Russell
2015-01-20 10:49     ` Prarit Bhargava
2015-01-20 18:05       ` Oleg Nesterov
2015-01-20 18:39         ` Prarit Bhargava
2016-03-21 23:14           ` [PATCH resend] " Rasmus Villemoes
2016-03-22  3:27             ` Rusty Russell
2016-03-23 23:54               ` Rasmus Villemoes
2016-03-24 17:16             ` Prarit Bhargava

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150119191924.GA19153@redhat.com \
    --to=oleg@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=fabf@skynet.be \
    --cc=geert@linux-m68k.org \
    --cc=hannes@cmpxchg.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    --cc=peterz@infradead.org \
    --cc=prarit@redhat.com \
    --cc=rusty@rustcorp.com.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.