From: cyril@ti.com (Cyril Chemparathy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 01/22] ARM: add mechanism for late code patching
Date: Mon, 6 Aug 2012 09:38:18 -0400 [thread overview]
Message-ID: <501FC8CA.20303@ti.com> (raw)
In-Reply-To: <20120806132642.GC18957@n2100.arm.linux.org.uk>
On 8/6/2012 9:26 AM, Russell King - ARM Linux wrote:
> On Mon, Aug 06, 2012 at 09:19:10AM -0400, Cyril Chemparathy wrote:
>> With a flush_cache_all(), we could avoid having to operate a cacheline
>> at a time, but that clobbers way more than necessary.
>
> You can't do that, because flush_cache_all() on some CPUs requires the
> proper MMU mappings to be in place, and you can't get those mappings
> in place because you don't have the V:P offsets fixed up in the kernel.
> Welcome to the chicken and egg problem.
>
>> Sure, flushing caches is expensive. But then, so is running the
>> patching code with caches disabled. I guess memory access latencies
>> drive the performance trade off here.
>
> There we disagree on a few orders of magnitude. There are relatively
> few places that need updating. According to the kernel I have here:
>
> text data bss dec hex filename
> 7644346 454320 212984 8311650 7ed362 vmlinux
>
> Idx Name Size VMA LMA File off Algn
> 1 .text 004cd170 c00081c0 c00081c0 000081c0 2**5
> 16 .init.pv_table 00000300 c0753a24 c0753a24 00753a24 2**0
>
> That's about 7MB of text, and only 192 points in that code which need
> patching. Even if we did this with caches on, that's still 192 places,
> and only 192 places we'd need to flush a cache line.
>
> Alternatively, with your approach and 7MB of text, you need to flush
> 238885 cache lines to cover the entire kernel.
>
> It would be far _cheaper_ with your approach to flush the individual
> cache lines as you go.
>
Agreed. Thanks.
--
Thanks
- Cyril
WARNING: multiple messages have this Message-ID (diff)
From: Cyril Chemparathy <cyril@ti.com>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: <linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <arnd@arndb.de>,
<catalin.marinas@arm.com>, <nico@linaro.org>,
<will.deacon@arm.com>
Subject: Re: [PATCH 01/22] ARM: add mechanism for late code patching
Date: Mon, 6 Aug 2012 09:38:18 -0400 [thread overview]
Message-ID: <501FC8CA.20303@ti.com> (raw)
In-Reply-To: <20120806132642.GC18957@n2100.arm.linux.org.uk>
On 8/6/2012 9:26 AM, Russell King - ARM Linux wrote:
> On Mon, Aug 06, 2012 at 09:19:10AM -0400, Cyril Chemparathy wrote:
>> With a flush_cache_all(), we could avoid having to operate a cacheline
>> at a time, but that clobbers way more than necessary.
>
> You can't do that, because flush_cache_all() on some CPUs requires the
> proper MMU mappings to be in place, and you can't get those mappings
> in place because you don't have the V:P offsets fixed up in the kernel.
> Welcome to the chicken and egg problem.
>
>> Sure, flushing caches is expensive. But then, so is running the
>> patching code with caches disabled. I guess memory access latencies
>> drive the performance trade off here.
>
> There we disagree on a few orders of magnitude. There are relatively
> few places that need updating. According to the kernel I have here:
>
> text data bss dec hex filename
> 7644346 454320 212984 8311650 7ed362 vmlinux
>
> Idx Name Size VMA LMA File off Algn
> 1 .text 004cd170 c00081c0 c00081c0 000081c0 2**5
> 16 .init.pv_table 00000300 c0753a24 c0753a24 00753a24 2**0
>
> That's about 7MB of text, and only 192 points in that code which need
> patching. Even if we did this with caches on, that's still 192 places,
> and only 192 places we'd need to flush a cache line.
>
> Alternatively, with your approach and 7MB of text, you need to flush
> 238885 cache lines to cover the entire kernel.
>
> It would be far _cheaper_ with your approach to flush the individual
> cache lines as you go.
>
Agreed. Thanks.
--
Thanks
- Cyril
next prev parent reply other threads:[~2012-08-06 13:38 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-31 23:04 [PATCH 00/22] Introducing the TI Keystone platform Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 01/22] ARM: add mechanism for late code patching Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 5:38 ` Nicolas Pitre
2012-08-04 5:38 ` Nicolas Pitre
2012-08-05 13:56 ` Cyril Chemparathy
2012-08-05 13:56 ` Cyril Chemparathy
2012-08-07 22:52 ` Cyril Chemparathy
2012-08-07 22:52 ` Cyril Chemparathy
2012-08-08 5:56 ` Nicolas Pitre
2012-08-08 5:56 ` Nicolas Pitre
2012-08-08 13:18 ` Cyril Chemparathy
2012-08-08 13:18 ` Cyril Chemparathy
2012-08-08 13:55 ` Nicolas Pitre
2012-08-08 13:55 ` Nicolas Pitre
2012-08-08 16:05 ` Russell King - ARM Linux
2012-08-08 16:05 ` Russell King - ARM Linux
2012-08-08 16:56 ` Nicolas Pitre
2012-08-08 16:56 ` Nicolas Pitre
2012-08-09 6:59 ` Tixy
2012-08-09 6:59 ` Tixy
2012-08-06 11:12 ` Russell King - ARM Linux
2012-08-06 11:12 ` Russell King - ARM Linux
2012-08-06 13:19 ` Cyril Chemparathy
2012-08-06 13:19 ` Cyril Chemparathy
2012-08-06 13:26 ` Russell King - ARM Linux
2012-08-06 13:26 ` Russell King - ARM Linux
2012-08-06 13:38 ` Cyril Chemparathy [this message]
2012-08-06 13:38 ` Cyril Chemparathy
2012-08-06 18:02 ` Nicolas Pitre
2012-08-06 18:02 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 02/22] ARM: use late patch framework for phys-virt patching Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 6:15 ` Nicolas Pitre
2012-08-04 6:15 ` Nicolas Pitre
2012-08-05 14:03 ` Cyril Chemparathy
2012-08-05 14:03 ` Cyril Chemparathy
2012-08-06 2:06 ` Nicolas Pitre
2012-08-06 2:06 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 03/22] ARM: LPAE: use phys_addr_t on virt <--> phys conversion Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 6:24 ` Nicolas Pitre
2012-08-04 6:24 ` Nicolas Pitre
2012-08-05 14:05 ` Cyril Chemparathy
2012-08-05 14:05 ` Cyril Chemparathy
2012-08-06 11:14 ` Russell King - ARM Linux
2012-08-06 11:14 ` Russell King - ARM Linux
2012-08-06 13:30 ` Cyril Chemparathy
2012-08-06 13:30 ` Cyril Chemparathy
2012-08-09 14:10 ` Cyril Chemparathy
2012-08-09 14:10 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 04/22] ARM: LPAE: support 64-bit virt/phys patching Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 6:49 ` Nicolas Pitre
2012-08-04 6:49 ` Nicolas Pitre
2012-08-05 14:21 ` Cyril Chemparathy
2012-08-05 14:21 ` Cyril Chemparathy
2012-08-06 2:19 ` Nicolas Pitre
2012-08-06 2:19 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 05/22] ARM: LPAE: use signed arithmetic for mask definitions Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 06/22] ARM: LPAE: use phys_addr_t in alloc_init_pud() Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-01 12:08 ` Sergei Shtylyov
2012-08-01 12:08 ` Sergei Shtylyov
2012-08-01 15:42 ` Cyril Chemparathy
2012-08-01 15:42 ` Cyril Chemparathy
2012-08-04 6:51 ` Nicolas Pitre
2012-08-04 6:51 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 07/22] ARM: LPAE: use phys_addr_t in free_memmap() Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 6:54 ` Nicolas Pitre
2012-08-04 6:54 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 08/22] ARM: LPAE: use phys_addr_t for initrd location and size Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 6:57 ` Nicolas Pitre
2012-08-04 6:57 ` Nicolas Pitre
2012-08-05 14:23 ` Cyril Chemparathy
2012-08-05 14:23 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 09/22] ARM: LPAE: use 64-bit pgd physical address in switch_mm() Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-08-04 7:04 ` Nicolas Pitre
2012-08-04 7:04 ` Nicolas Pitre
2012-08-05 14:29 ` Cyril Chemparathy
2012-08-05 14:29 ` Cyril Chemparathy
2012-08-06 2:35 ` Nicolas Pitre
2012-08-06 2:35 ` Nicolas Pitre
2012-07-31 23:04 ` [PATCH 10/22] ARM: LPAE: use 64-bit accessors for TTBR registers Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 11/22] ARM: LPAE: define ARCH_LOW_ADDRESS_LIMIT for bootmem Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 12/22] ARM: LPAE: factor out T1SZ and TTBR1 computations Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 13/22] ARM: LPAE: allow proc override of TTB setup Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 14/22] ARM: LPAE: accomodate >32-bit addresses for page table base Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 15/22] ARM: mm: use physical addresses in highmem sanity checks Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 16/22] ARM: mm: cleanup checks for membank overlap with vmalloc area Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 17/22] ARM: mm: clean up membank size limit checks Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 18/22] ARM: add virt_to_idmap for interconnect aliasing Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [PATCH 19/22] ARM: recreate kernel mappings in early_paging_init() Cyril Chemparathy
2012-07-31 23:04 ` Cyril Chemparathy
2012-07-31 23:04 ` [RFC 20/22] ARM: keystone: introducing TI Keystone platform Cyril Chemparathy
2012-07-31 23:06 ` Cyril Chemparathy
2012-07-31 23:16 ` Arnd Bergmann
2012-07-31 23:16 ` Arnd Bergmann
2012-08-01 15:41 ` Cyril Chemparathy
2012-08-01 15:41 ` Cyril Chemparathy
2012-08-01 17:20 ` Arnd Bergmann
2012-07-31 23:04 ` [RFC 21/22] ARM: keystone: enable SMP on Keystone machines Cyril Chemparathy
2012-07-31 23:05 ` Cyril Chemparathy
2012-07-31 23:04 ` [RFC 22/22] ARM: keystone: add switch over to high physical address range Cyril Chemparathy
2012-07-31 23:05 ` Cyril Chemparathy
2012-08-04 8:39 ` [PATCH 00/22] Introducing the TI Keystone platform Russell King - ARM Linux
2012-08-04 8:39 ` Russell King - ARM Linux
2012-08-05 15:10 ` Cyril Chemparathy
2012-08-05 15:10 ` Cyril Chemparathy
2012-08-08 15:43 ` Catalin Marinas
2012-08-08 15:43 ` Catalin Marinas
2012-08-08 13:57 ` Will Deacon
2012-08-08 13:57 ` Will Deacon
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=501FC8CA.20303@ti.com \
--to=cyril@ti.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.