All of lore.kernel.org
 help / color / mirror / Atom feed
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: fix unwinding for XIP kernels
Date: Mon, 28 Nov 2011 10:07:31 +0000	[thread overview]
Message-ID: <20111128100731.GB1121@arm.com> (raw)
In-Reply-To: <20111128100219.GH17668@pengutronix.de>

On Mon, Nov 28, 2011 at 10:02:19AM +0000, Uwe Kleine-K?nig wrote:
> On Mon, Nov 28, 2011 at 09:45:03AM +0000, Catalin Marinas wrote:
> > On Mon, Nov 28, 2011 at 09:22:17AM +0000, Uwe Kleine-K?nig wrote:
> > > Hello,
> > > 
> > > On Mon, Nov 21, 2011 at 06:35:45PM +0000, Catalin Marinas wrote:
> > > > On Sun, Nov 20, 2011 at 11:28:09AM +0000, Uwe Kleine-K?nig wrote:
> > > > > On Thu, Nov 17, 2011 at 02:17:06PM +0000, Catalin Marinas wrote:
> > > > > > On Thu, Nov 17, 2011 at 01:40:00PM +0000, Uwe Kleine-K?nig wrote:
> > > > > > > The linker places the unwind tables in readonly sections. So when using
> > > > > > > an XIP kernel these are located in ROM and cannot be modified.
> > > > > > > 
> > > > > > > For that reason don't convert the symbol addresses during boot (or
> > > > > > > module loading) but only when interpreting them in search_index().
> > > > > > > Moreover several consts are added to catch future writes and rename the
> > > > > > > member "addr" of struct unwind_idx to "addr_offset" to better match the
> > > > > > > new semantic.
> > > > > > > 
> > > > > > > This fixes unwinding on XIP which compared prel31 offsets to absolute
> > > > > > > addresses because the initial conversion from prel31 to absolute failed.
> > > > > > 
> > > > > > My only worry - does this increase the index search by doing the prel31
> > > > > > conversion every time? It could affect tools like lockdep that need to
> > > > > > get the backtrace regularly at run-time.
> > > > > I did a first test now using 
> > > > > 
> > > > > 	static int __init unwind_test(void)
> > > > 
> > > > With your latest patch, have you tried dropping __init from this
> > > > function? Since the .init.text section goes after the unwind_idx tables,
> > > > all the prel31 offsets are positive and the number of init functions is
> > > > smaller than the run-time ones.
> > > Yeah, it works fine. In fact unwinding unwind_test yields:
> > > 
> > > 	do_one_initcall+0x50/0x158
> > > 	kernel_init+0x78/0x120
> > > 	kernel_thread_exit+0x0/0x8
> > > 
> > > where kernel_thread_exit is not in .init.text, too.
> > > 
> > > I don't know why you asked? Did you see a bug? Or is it just to let me
> > > do enough testing before you start reviewing my patches?
> > 
> > It's not a bug, just a wondering about the performance figures you got
> > with your latest patch. When you have __init to unwind_test, the
> > .init.text functions are placed by the linker after the unwinding table,
> > with having a positive prel31 address. All the non-init functions are
> > placed before the table with a negative prel31. With your latest patch,
> > you split the set of functions in two ranges - the non-init one with a
> > negative prel31 and the init functions with a positive prel31 and the
> > binary search only happens on one of these ranges. The problem is that
> > the init range is much smaller than the non-init one, so your benchmark
> > figures may not be realistic.
> > 
> > Could you run the simple benchmark on a non-init function?
> Without __init I get with the original implementation:
> 
> 	34139, 34127, 34100
> 
> and with my patch I get
> 
> 	33456, 33425, 33407
> 
> So the speedup here is smaller here, but still OK.

OK, so as long as it is not much worse than before, I'm ok with this.
I'll do a proper review of the patch in the next day or so.

Thanks.

-- 
Catalin

  reply	other threads:[~2011-11-28 10:07 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-17 13:40 [PATCH] ARM: fix unwinding for XIP kernels Uwe Kleine-König
2011-11-17 14:17 ` Catalin Marinas
2011-11-17 18:59   ` Uwe Kleine-König
2011-11-18 18:28   ` Nicolas Pitre
2011-11-18 21:36     ` Catalin Marinas
2011-11-20 11:28   ` Uwe Kleine-König
2011-11-20 22:52     ` Uwe Kleine-König
2011-11-20 23:12       ` [PATCH RFC] ARM: unwind: optimize to not convert each table value but the address Uwe Kleine-König
2011-11-21 16:34         ` Catalin Marinas
2011-11-21 18:16           ` Uwe Kleine-König
2011-11-30 17:58         ` Catalin Marinas
2011-11-30 19:07           ` [PATCH] ARM: fix unwinding for XIP kernels Uwe Kleine-König
2011-11-30 19:37             ` Nicolas Pitre
2011-11-30 19:52             ` Catalin Marinas
2011-11-21 18:35     ` Catalin Marinas
2011-11-28  9:22       ` Uwe Kleine-König
2011-11-28  9:45         ` Catalin Marinas
2011-11-28 10:02           ` Uwe Kleine-König
2011-11-28 10:07             ` Catalin Marinas [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-11-07 11:14 Sascha Hauer

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=20111128100731.GB1121@arm.com \
    --to=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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.