* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Adrian Bunk @ 2008-08-26 20:21 UTC (permalink / raw)
To: Linus Torvalds
Cc: Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar,
linux-embedded-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <alpine.LFD.1.10.0808261134530.3363-nfNrOhbfy2R17+2ddN/4kux8cNe9sq/dYPYVAmT7z5s@public.gmane.org>
On Tue, Aug 26, 2008 at 11:40:10AM -0700, Linus Torvalds wrote:
>
>
> On Tue, 26 Aug 2008, Adrian Bunk wrote:
> >
> > A debugging option (for better traces) to disallow gcc some inlining
> > might make sense (and might even make sense for distributions to
> > enable in their kernels), but when you go to use cases that require
> > really small kernels the cost is too high.
>
> You ignore the fact that it's really not just about debugging.
I had in mind that we anyway have to support it for tiny kernels.
I simply don't see that we add kconfig options for 5kB of code for
tiny kernels but remove something like this that can cause size
increases > 1%.
> Inlining really isn't the great tool some people think it is. Especially
> not since gcc stack allocation is so horrid that it won't re-use stack
> slots etc (which I don't disagree with per se - it's _hard_ to re-use
> stack slots while still allowing code scheduling).
gcc's stack allocation has become better
(that's why we disable unit-at-a-time only for gcc 3.4 on i386).
> NOTE! I also would never claim that _our_ choices of "inline" are all that
> great, and we've often inlined too much or not inlined things that really
> could be inlined. But at least when a developer says "inline" (or forgets
> to say it), we have somebody to blame. When the compiler does insane
> things that doesn't suit us, we're just screwed.
Most LOCs of the kernel are not written by people like you or Al Viro or
David Miller, and the average kernel developer is unlikely to do it as
good as gcc.
For the average driver the choice is realistically between
"inline's randomly sprinkled across the driver" and
"no inline's, leave it to gcc".
And code evolves during the years from tiny with 1 caller to huge with
many callers.
BTW:
I just ran checkstack on a (roughly) allyesconfig kernel, and we have a
new driver that allocates "unsigned char recvbuf[1500];" on the stack...
> > But if you don't trust gcc's inlining you should revert
> > commit 3f9b5cc018566ad9562df0648395649aebdbc5e0 that increases gcc's
> > freedom regarding what to inline in 2.6.27
>
> Actually, that just allows gcc to _not_ inline. Which is probably ok.
>
> (Well, it would be ok if gcc did it well enough, it obviously has some
> problems at times).
With the "gcc inline's static functions" you complain about we have
4-5 years of experience.
Suddenly allowing 4 release series of gcc to ignore any inline's is a
completely new area for us. I'd generally agree with giving gcc more
freedom here, but I'd rather do it right by removing tons of wrong
inline's than doing one global change hoping that it will make things
better.
And whether the "optimized inlining" actually makes the kernel bigger or
smaller depends in my experience on the .config and the gcc version.
> Linus
cu
Adrian
[1] there are some rare exceptions
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: [PATCH] 2.6.27-rc4-git3: make section names compatible with -ffunction-sections -fdata-sections
From: Denys Vlasenko @ 2008-08-26 20:05 UTC (permalink / raw)
To: Daniel Walker
Cc: Andrew Morton, mingo, x86, James Bottomley, Russell King,
David Howells, Ralf Baechle, Lennert Buytenhek, Josh Boyer,
Paul Mackerras, David Woodhouse, Andi Kleen, torvalds,
Paul Gortmaker, linux-embedded, linux-kernel, Tim Bird,
Martin Schwidefsky, Dave Miller
In-Reply-To: <1219775585.3797.2.camel@dhcp32.mvista.com>
On Tuesday 26 August 2008 20:33, Daniel Walker wrote:
> On Mon, 2008-08-25 at 01:18 +0200, Denys Vlasenko wrote:
> > Hi Andrew,
> >
> > You asked me to maintain it and resubmit when
> > merge frenzy is over.
> >
> > Here is the update against current Linus tree
> > (which is 2.6.27-rc4-git3), rolled up into one patch.
>
>
> Do you have the patches that actually use
> -ffunction-sections,-fdata-sections updated someplace?
I had, but it's a PITA to maintain and rediff them.
My current plan is to get this merged first,
and then introduce another change which actually
puts -ffunction-sections,-fdata-sections to use.
It will be much easier to review this way.
--
vda
^ permalink raw reply
* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Linus Torvalds @ 2008-08-26 19:18 UTC (permalink / raw)
To: Jamie Lokier
Cc: Adrian Bunk, Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar,
linux-embedded-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20080826190213.GA30255-yetKDKU6eevNLxjTenLetw@public.gmane.org>
On Tue, 26 Aug 2008, Jamie Lokier wrote:
>
> A function which is only called from one place should, if everything
> made sense, _never_ use more stack through being inlined.
But that's simply not true.
See the whole discussion.
The problem is that if you inline that function, the stack usage of the
newly inlined function is now added to ALL THE OTHER paths too!
So the case we had in module loading was that yes, we had a function with
a big stack footprint, but it was NOT in the deep path.
But by inlining it, it now moved the stack footprint "up" one level to
another function, and now the big stack footprint really _was_ in the deep
path, because the caller was involved in a much deeper chain.
So inlining moves the code up the callchain, and that is a problem for the
backtrace, but that's "just" a debugging issue. But it also moves the
stack footprint up the callchain, and that can actually be a correctness
issue.
Of course, a compiler doesn't _have_ to do that. A compiler _could_ have
multiple different stack footprints for a single function, and do liveness
analysis etc. But no sane compiler probably does that, because it's very
painful indeed, and it's not even an issue if you aren't stack-limited
(and being stack-limited is really just a kernel thing).
(Yeah, it can be an issue even if you have a big stack, in that you get
worse cache behaviour, so a dense stack footprint _would_ help. But the
complexity of stack liveness analysis is almost certainly not worth the
relatively small gains it would get on some odd cases).
Linus
^ permalink raw reply
* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Jamie Lokier @ 2008-08-26 19:02 UTC (permalink / raw)
To: Linus Torvalds
Cc: Adrian Bunk, Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar, linux-embedded
In-Reply-To: <alpine.LFD.1.10.0808261144510.3363@nehalem.linux-foundation.org>
Linus Torvalds wrote:
> The inline-functions-called-once thing is what causes even big functions
> to be inlined, and that's where you find the big downsides too (eg the
> stack usage).
That's a bit bizarre, though, isn't it?
A function which is only called from one place should, if everything
made sense, _never_ use more stack through being inlined. Inlining
should just increase the opportunities that the called function's
local variables can share the same stack slots are the caller's dead
locals.
Whereas not inlining guarantees they occupy separate, immediately
adjacent regions of the stack, and shouldn't be increasing the total
numbers of local variables.
-- Jamie
^ permalink raw reply
* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Linus Torvalds @ 2008-08-26 18:47 UTC (permalink / raw)
To: Adrian Bunk
Cc: Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar,
linux-embedded-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20080826183051.GB10925-re2QNgSbS3j4D6uPqz5PAwR5/fbUUdgG@public.gmane.org>
On Tue, 26 Aug 2008, Adrian Bunk wrote:
>
> I added "-fno-inline-functions-called-once -fno-early-inlining" to
> KBUILD_CFLAGS, and (with gcc 4.3) that increased the size of my kernel
> image by 2%.
Btw, did you check with just "-fno-inline-functions-called-once"?
The -fearly-inlining decisions _should_ be mostly right. If gcc sees early
that a function is so small (even without any constant propagation etc)
that it can be inlined, it's probably right.
The inline-functions-called-once thing is what causes even big functions
to be inlined, and that's where you find the big downsides too (eg the
stack usage).
Linus
^ permalink raw reply
* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Linus Torvalds @ 2008-08-26 18:40 UTC (permalink / raw)
To: Adrian Bunk
Cc: Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar,
linux-embedded-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <20080826183051.GB10925-re2QNgSbS3j4D6uPqz5PAwR5/fbUUdgG@public.gmane.org>
On Tue, 26 Aug 2008, Adrian Bunk wrote:
>
> A debugging option (for better traces) to disallow gcc some inlining
> might make sense (and might even make sense for distributions to
> enable in their kernels), but when you go to use cases that require
> really small kernels the cost is too high.
You ignore the fact that it's really not just about debugging.
Inlining really isn't the great tool some people think it is. Especially
not since gcc stack allocation is so horrid that it won't re-use stack
slots etc (which I don't disagree with per se - it's _hard_ to re-use
stack slots while still allowing code scheduling).
NOTE! I also would never claim that _our_ choices of "inline" are all that
great, and we've often inlined too much or not inlined things that really
could be inlined. But at least when a developer says "inline" (or forgets
to say it), we have somebody to blame. When the compiler does insane
things that doesn't suit us, we're just screwed.
> But if you don't trust gcc's inlining you should revert
> commit 3f9b5cc018566ad9562df0648395649aebdbc5e0 that increases gcc's
> freedom regarding what to inline in 2.6.27
Actually, that just allows gcc to _not_ inline. Which is probably ok.
(Well, it would be ok if gcc did it well enough, it obviously has some
problems at times).
Linus
^ permalink raw reply
* Re: [PATCH] 2.6.27-rc4-git3: make section names compatible with -ffunction-sections -fdata-sections
From: Daniel Walker @ 2008-08-26 18:33 UTC (permalink / raw)
To: Denys Vlasenko
Cc: Andrew Morton, mingo, x86, James Bottomley, Russell King,
David Howells, Ralf Baechle, Lennert Buytenhek, Josh Boyer,
Paul Mackerras, David Woodhouse, Andi Kleen, torvalds,
Paul Gortmaker, linux-embedded, linux-kernel, Tim Bird,
Martin Schwidefsky, Dave Miller
In-Reply-To: <200808250118.08406.vda.linux@googlemail.com>
On Mon, 2008-08-25 at 01:18 +0200, Denys Vlasenko wrote:
> Hi Andrew,
>
> You asked me to maintain it and resubmit when
> merge frenzy is over.
>
> Here is the update against current Linus tree
> (which is 2.6.27-rc4-git3), rolled up into one patch.
Do you have the patches that actually use
-ffunction-sections,-fdata-sections updated someplace?
Daniel
^ permalink raw reply
* Re: [Bug #11342] Linux 2.6.27-rc3: kernel BUG at mm/vmalloc.c - bisected
From: Adrian Bunk @ 2008-08-26 18:30 UTC (permalink / raw)
To: Linus Torvalds
Cc: Rusty Russell, Alan D. Brunelle, Rafael J. Wysocki,
Linux Kernel Mailing List, Kernel Testers List, Andrew Morton,
Arjan van de Ven, Ingo Molnar, linux-embedded
In-Reply-To: <alpine.LFD.1.10.0808261019450.3363@nehalem.linux-foundation.org>
On Tue, Aug 26, 2008 at 10:35:05AM -0700, Linus Torvalds wrote:
>
>
> On Tue, 26 Aug 2008, Rusty Russell wrote:
> >
> > Your workaround is very random, and that scares me. I think a huge number of
> > CPUs needs a real solution (an actual cpumask allocator, then do something
> > clever if we come across an actual fastpath).
>
> The thing is, the inlining thing is a separate issue.
>
> Yes, the cpumasks were what made stack pressure so critical to begin with,
> but no, a 400-byte stack frame in a deep callchain isn't acceptable
> _regardless_ of any cpumask_t issues.
>
> Gcc inlining is a total and utter pile of shit. And _that_ is the problem.
> I seriously think we shouldn't allow gcc to inline anything at all unless
> we tell it to. That's how it used to work, and quite frankly, that's how
> it _should_ work.
>
> The downsides of inlining are big enough from both a debugging and a real
> code generation angle (eg stack usage like this), that the upsides
> (_somesimes_ smaller kernel, possibly slightly faster code) simply aren't
> relevant.
>...
> It would be interesting to see what "-fno-default-inline" does to the
> kernel. It really would get rid of a _lot_ of gcc version issues too.
> Inlining behavior of gcc has long been a problem for us.
I added "-fno-inline-functions-called-once -fno-early-inlining" to
KBUILD_CFLAGS, and (with gcc 4.3) that increased the size of my kernel
image by 2%.
And when David's "-fwhole-program --combine" will become ready the cost
of disallowing gcc to inline functions will most likely increase.
A debugging option (for better traces) to disallow gcc some inlining
might make sense (and might even make sense for distributions to
enable in their kernels), but when you go to use cases that require
really small kernels the cost is too high.
But if you don't trust gcc's inlining you should revert
commit 3f9b5cc018566ad9562df0648395649aebdbc5e0 that increases gcc's
freedom regarding what to inline in 2.6.27 - what gcc 4.2 does in the
case of the regression tracked as Bugzilla #11276 is really not funny
(two callers -> function not inlined; gcc seems to emit the function
although both callers later get removed (or at least should be removed)
by dead code elimination).
> Linus
cu
Adrian
--
"Is there not promise of rain?" Ling Tan asked suddenly out
of the darkness. There had been need of rain for many days.
"Only a promise," Lao Er said.
Pearl S. Buck - Dragon Seed
^ permalink raw reply
* Re: [RFC] Remove more code when IP_MULTICAST=n
From: Tim Bird @ 2008-08-26 16:44 UTC (permalink / raw)
To: Paul Mundt
Cc: Thomas Petazzoni, Geert Uytterhoeven, linux-embedded,
David Woodhouse
In-Reply-To: <20080826033345.GA30587@linux-sh.org>
Paul Mundt wrote:
> On Mon, Aug 25, 2008 at 08:48:25AM +0200, Thomas Petazzoni wrote:
>> Le Tue, 19 Aug 2008 16:18:38 +0200 (CEST),
>> Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> a ??crit :
>>
>>> On Tue, 19 Aug 2008, Thomas Petazzoni wrote:
>>>> [RFC] Remove more code when IP_MULTICAST=n
>>> Probably you wanted to cc netdev@vger.kernel.org?
>> Not necessarly at the beginning: I first wanted to get the feedback of
>> embedded-concerned developers, who might have a better understanding
>> than me of the networking stack. Last time I submitted a size-reduction
>> patch to Dave Miller concerning IGMP, the answer was:
>>
>> ??
>> I'm not applying this.
>>
>> This removes core parts of the BSD socket API from applications.
>> Like TCP and UDP, multicast capabilities are something applications
>> can always depend upon being available.
>>
>> If you want a broken networking implementation, you have the source
>> code, so you can do it in your own tree.
>> ??
>>
>> So, I'd prefer to send a good patch from the beginning.
>>
> Out of that bit of criticism, it's the validity of the approach in
> particular that's being called in to question, rather than the patch
> itself. How to clean up the patch itself is irrelevant if the idea itself
> is being shot down by the folks that will merge it. This is something
> that needs to be resolved first, and lists outside of the scope of netdev
> are really the wrong place to do this.
>
> This is generally the way a lot of the size reduction work seems to be
> going these days. Now that most of the low-hanging fruit is out of the
> way, it's mostly down to micro-optimizations aimed at things perceived to
> be core functionality by others. Expect to continue running in to these
> sorts of problems if you choose to continue down this path.
This is a good observation.
I agree that we will continue to face opposition like this. However,
IIRC, near the end of this thread David Miller did say that if the
patch got cleaned up he would take another look.
With regard to things perceived to be core functionality by others, this
is exactly correct. In this case, David Miller asserts that without IGMP
functionality, the network stack is incorrect (and that "people" expect
and depend on a fully functional stack.) He doesn't acknowledge (and
some other kernel developer don't either) that there might be developers
willing to forego stack features in the interest of other aims. This
is something that will require ongoing education with kernel developers
about.
There are two sides to this battle: 1) convincing people that size matters
(AND that small increments can have a cumulative impact that matters), and
2) that the kernel can function "correctly" with the affected feature removed.
It is quite common for kernel developers to raise use cases unrelated
to embedded, which is frustrating. But the burden of proof is on us to
show that the slicing and dicing we're requesting doesn't fundamentally
break the remaining functionality in ways that will negatively impact the
maintainers of those function areas.
In this particular case, I think we need to show that
there are valid cases were an embedded product can use networking just
fine, without IGMP support but with support for multicast. (I believe
that's the slice that this particular patch makes). IMHO, what's
needed is a test to show that this works. This can then be presented
to the netdev guys, who are, after all much more experienced with the
networking stuff. If they can show that multicast does indeed *need* IGMP
to work correctly, then we need to back off. The last thing I want is
to find out in the field that some streaming feature I've built into a
Sony camera that relies on multicast won't work in lots of network
configurations. If that's true, then David is doing me a favor by
saying No. (Note that I might still make the decision to forego
a feature for size reasons if the number of instances of non-workingness
was small.)
IMHO, we need to acknowledge that the network guys can help us avoid
problems like the above. Avoiding confrontation is good, but we should
still be ready to assert the value of our patches, when needed.
-- Tim
P.S. We should also be careful about taking claims of incorrectness
at face value. In this particular thread, David asserted that NTP breaks
with this patch applied, but that turned out not to be the case.
=============================
Tim Bird
Architecture Group Chair, CE Linux Forum
Senior Staff Engineer, Sony Corporation of America
=============================
^ permalink raw reply
* Re: [RFC] Remove more code when IP_MULTICAST=n
From: Paul Mundt @ 2008-08-26 3:33 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: Geert Uytterhoeven, linux-embedded, David Woodhouse
In-Reply-To: <20080825084826.19923151@surf>
On Mon, Aug 25, 2008 at 08:48:25AM +0200, Thomas Petazzoni wrote:
> Le Tue, 19 Aug 2008 16:18:38 +0200 (CEST),
> Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> a ??crit :
>
> > On Tue, 19 Aug 2008, Thomas Petazzoni wrote:
> > > [RFC] Remove more code when IP_MULTICAST=n
> >
> > Probably you wanted to cc netdev@vger.kernel.org?
>
> Not necessarly at the beginning: I first wanted to get the feedback of
> embedded-concerned developers, who might have a better understanding
> than me of the networking stack. Last time I submitted a size-reduction
> patch to Dave Miller concerning IGMP, the answer was:
>
> ??
> I'm not applying this.
>
> This removes core parts of the BSD socket API from applications.
> Like TCP and UDP, multicast capabilities are something applications
> can always depend upon being available.
>
> If you want a broken networking implementation, you have the source
> code, so you can do it in your own tree.
> ??
>
> So, I'd prefer to send a good patch from the beginning.
>
Out of that bit of criticism, it's the validity of the approach in
particular that's being called in to question, rather than the patch
itself. How to clean up the patch itself is irrelevant if the idea itself
is being shot down by the folks that will merge it. This is something
that needs to be resolved first, and lists outside of the scope of netdev
are really the wrong place to do this.
This is generally the way a lot of the size reduction work seems to be
going these days. Now that most of the low-hanging fruit is out of the
way, it's mostly down to micro-optimizations aimed at things perceived to
be core functionality by others. Expect to continue running in to these
sorts of problems if you choose to continue down this path.
^ permalink raw reply
* Re: [RFC] Remove more code when IP_MULTICAST=n
From: Mike Frysinger @ 2008-08-25 22:31 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: linux-embedded, David Woodhouse
In-Reply-To: <20080819150047.38f09acf@surf>
On Tue, Aug 19, 2008 at 9:00 AM, Thomas Petazzoni wrote:
> Index: linuxdev/include/linux/igmp.h
> +#define ip_check_mc(a, b, c, d) ({ 0; })
> +#define ip_mc_sf_allow(a, b, c, d) ({ 1; })
> +#define ip_mc_init_dev(a) ({ })
> +#define ip_mc_up(a) ({ })
> +#define ip_mc_down(a) ({ })
> +#define ip_mc_destroy_dev(a) ({ })
> +#define ip_mc_init_dev(a) ({ })
> +#define ip_mc_drop_socket(a) ({ })
i thought kernel headers in general use static inline stubs rather
than macros so that nested arguments get correct behavior (arg++).
-mike
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Greg Ungerer @ 2008-08-25 14:02 UTC (permalink / raw)
To: Jamie Lokier
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, cotte, nickpiggin
In-Reply-To: <20080825114346.GB20960@shareable.org>
Hi Jamie,
Jamie Lokier wrote:
> Greg Ungerer wrote:
>> Sort of. It actually just uses a single ->read to bring in
>> the entire file contents. There is a few limitations on the use
>> of mmap() for non-mmu. Documentation/nommu-mmap.txt gives
>> more details. With no MMU it does rely on being able to kmalloc()
>> a single RAM region big enough to hold the entire file.
>
> That's unfortunate, if you're using FDPIC-ELF or BFLT-XIP, you really want
> to kmalloc() one region for code (i.e. mmap not the whole file), and
> one separate for data.
That is what the BFLT loader does. For the XIP case it mmap()s
the text directly from the file, and then mmap()s a second region
for the data/bss (reading the data into that region).
I was referring to general mmap() of a file case above, not
the exec path.
> Asking for a single larger region sometimes
> creates much higher memory pressure while kmalloc() attempts to
> defragment by evicting everything.
Sure.
> But that's fiddly to do right in general.
>
> The natural thing for AXFS to do to support no-MMU FDPIC-ELF or
> BFLT-XIP is store the code segment uncompressed and contiguous, and
> the data segment however the filesystem prefers, and the profiling
> information to work out where these are is readily available from the
> mmap() calls, which are always the same when an executable is run.
Yep.
Regards
Greg
------------------------------------------------------------------------
Greg Ungerer -- Chief Software Dude EMAIL: gerg@snapgear.com
SnapGear -- a Secure Computing Company PHONE: +61 7 3435 2888
825 Stanley St, FAX: +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia WEB: http://www.SnapGear.com
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: David Woodhouse @ 2008-08-25 12:16 UTC (permalink / raw)
To: Jared Hulbert
Cc: Geert Uytterhoeven, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, cotte, nickpiggin
In-Reply-To: <6934efce0808220951i5a2cd6f9t70f9c522eae6f1d6@mail.gmail.com>
On Fri, 2008-08-22 at 09:51 -0700, Jared Hulbert wrote:
> Can you run mkfs.axfs on the same trivial directory on both ia32 and
> PPC64 and then get me the resulting images?
git.infradead.org is a big-endian box, and I know you have an account
there...
--
David Woodhouse Open Source Technology Centre
David.Woodhouse@intel.com Intel Corporation
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Jamie Lokier @ 2008-08-25 11:43 UTC (permalink / raw)
To: Greg Ungerer
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, cotte, nickpiggin
In-Reply-To: <48B2529B.8030906@snapgear.com>
Greg Ungerer wrote:
> Sort of. It actually just uses a single ->read to bring in
> the entire file contents. There is a few limitations on the use
> of mmap() for non-mmu. Documentation/nommu-mmap.txt gives
> more details. With no MMU it does rely on being able to kmalloc()
> a single RAM region big enough to hold the entire file.
That's unfortunate, if you're using FDPIC-ELF or BFLT-XIP, you really want
to kmalloc() one region for code (i.e. mmap not the whole file), and
one separate for data. Asking for a single larger region sometimes
creates much higher memory pressure while kmalloc() attempts to
defragment by evicting everything.
But that's fiddly to do right in general.
The natural thing for AXFS to do to support no-MMU FDPIC-ELF or
BFLT-XIP is store the code segment uncompressed and contiguous, and
the data segment however the filesystem prefers, and the profiling
information to work out where these are is readily available from the
mmap() calls, which are always the same when an executable is run.
-- Jamie
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Carsten Otte @ 2008-08-25 10:52 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, nickpiggin
In-Reply-To: <Pine.LNX.4.64.0808251136140.3893@vixen.sonytel.be>
Geert Uytterhoeven wrote:
> From your good relationship with the s390 developers, I had hoped you would
> have done some tests on s390 ;-)
Haha, we let you sort out the endianess issues first and then take the
easy path :-). We have'nt tried it yet so far.
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Geert Uytterhoeven @ 2008-08-25 9:37 UTC (permalink / raw)
To: Jared Hulbert
Cc: Linux-kernel, linux-embedded, linux-mtd, Jörn Engel,
tim.bird, cotte, nickpiggin
In-Reply-To: <6934efce0808220951i5a2cd6f9t70f9c522eae6f1d6@mail.gmail.com>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1433 bytes --]
On Fri, 22 Aug 2008, Jared Hulbert wrote:
> > The version in SVN seems to be slightly older than the one you submitted?
>
> Oops. Okay I must have neglected to sync at the very end. Thanks.
>
> I forgot, there is also a git repo at
>
> git://git.infradead.org/users/jehulber/axfs.git
>
> > Which platform(s) do you use for testing?
>
> ARM, x86
Ah, little endian.
From your good relationship with the s390 developers, I had hoped you would
have done some tests on s390 ;-)
> > I gave AxFS a try on PS3 (ppc64, always use big-endian 64-bit for testing new
> > code ;-).
>
> Smart. Hmmm, If only I had a PS3....
>
> > When mounting the image, I got the crash below:
>
> > When mounting (also on PS3) an image created on ia32, I get a different crash:
> >
> > | axfs: wrong magic
> >
> > So I guess some parts are not yet 64-bit or endian clean.
>
> Can you run mkfs.axfs on the same trivial directory on both ia32 and
> PPC64 and then get me the resulting images?
I'll send them by private email.
With kind regards,
Geert Uytterhoeven
Software Architect
Sony Techsoft Centre Europe
The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium
Phone: +32 (0)2 700 8453
Fax: +32 (0)2 700 8622
E-mail: Geert.Uytterhoeven@sonycom.com
Internet: http://www.sony-europe.com/
A division of Sony Europe (Belgium) N.V.
VAT BE 0413.825.160 · RPR Brussels
Fortis · BIC GEBABEBB · IBAN BE41293037680010
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Geert Uytterhoeven @ 2008-08-25 7:23 UTC (permalink / raw)
To: Will Marone
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird
In-Reply-To: <48AF3905.70304@gmail.com>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 1879 bytes --]
On Fri, 22 Aug 2008, Will Marone wrote:
> Geert Uytterhoeven wrote:
> > I gave AxFS a try on PS3 (ppc64, always use big-endian 64-bit for testing
> > new
> > code ;-).
> > When mounting the image, I got the crash below:
> >
> > | attempt to access beyond end of device
> > | loop0: rw=0, want=4920, limit=4912
> > | Unable to handle kernel paging request for data at address 0x00000028
> > | Faulting instruction address: 0xd000000000037988
> > | Oops: Kernel access of bad area, sig: 11 [#1]
> > | SMP NR_CPUS=2 PS3
> >
> > When mounting (also on PS3) an image created on ia32, I get a different
> > crash:
> >
> > | axfs: wrong magic
> > ^^^^^^^^^^^^^^^^^
> > | Unable to handle kernel paging request for data at address 0x000003a8
> > | Faulting instruction address: 0xd0000000000355f0
> > | Oops: Kernel access of bad area, sig: 11 [#1]
> > | SMP NR_CPUS=2 PS
> Geert,
>
> Thanks for giving it a spin, especially on a platform as different from ours
> as the PS3.
>
> Before I dig more into what happened, I was wondering if you could tell me a
> bit more
> about your environment, particularly how you supplied the filesystem to the
> kernel and
> your mount commandline (also, if you used a boot commandline, what it was.)
>
> My first guess would be a ppc64 compiled UML session, but I'd like to be a bit
> more sure.
Nope, I just built axfs as a module and insmoded it. After that
mount image.axfs /mnt -o loop -t axfs
So nothing fancy.
With kind regards,
Geert Uytterhoeven
Software Architect
Sony Techsoft Centre Europe
The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium
Phone: +32 (0)2 700 8453
Fax: +32 (0)2 700 8622
E-mail: Geert.Uytterhoeven@sonycom.com
Internet: http://www.sony-europe.com/
A division of Sony Europe (Belgium) N.V.
VAT BE 0413.825.160 · RPR Brussels
Fortis · BIC GEBABEBB · IBAN BE41293037680010
^ permalink raw reply
* Re: [RFC] Remove more code when IP_MULTICAST=n
From: Thomas Petazzoni @ 2008-08-25 6:48 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: linux-embedded, David Woodhouse
In-Reply-To: <Pine.LNX.4.64.0808191618190.25348@vixen.sonytel.be>
Le Tue, 19 Aug 2008 16:18:38 +0200 (CEST),
Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com> a écrit :
> On Tue, 19 Aug 2008, Thomas Petazzoni wrote:
> > [RFC] Remove more code when IP_MULTICAST=n
>
> Probably you wanted to cc netdev@vger.kernel.org?
Not necessarly at the beginning: I first wanted to get the feedback of
embedded-concerned developers, who might have a better understanding
than me of the networking stack. Last time I submitted a size-reduction
patch to Dave Miller concerning IGMP, the answer was:
«
I'm not applying this.
This removes core parts of the BSD socket API from applications.
Like TCP and UDP, multicast capabilities are something applications
can always depend upon being available.
If you want a broken networking implementation, you have the source
code, so you can do it in your own tree.
»
So, I'd prefer to send a good patch from the beginning.
Thanks,
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Greg Ungerer @ 2008-08-25 6:35 UTC (permalink / raw)
To: Jared Hulbert
Cc: Jamie Lokier, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, cotte, nickpiggin
In-Reply-To: <6934efce0808211948kd12ba76k1ee847a0e08010e0@mail.gmail.com>
Hi Jared,
Jared Hulbert wrote:
>> That would be enough I think. If you could manually select
>> which files are contiguous-and-uncompressed that would be
>> useful for some too here.
>
> So.... If you don't have an MMU when do you call ->fault? Does the
> noMMU code just loop through ->fault()ing all the pages in an mmap()?
Sort of. It actually just uses a single ->read to bring in
the entire file contents. There is a few limitations on the use
of mmap() for non-mmu. Documentation/nommu-mmap.txt gives
more details. With no MMU it does rely on being able to kmalloc()
a single RAM region big enough to hold the entire file.
>> One thing for sure is that many people who do non-MMU setups
>> are interested in XIP to get the space savings. These are very
>> often small devices with very constrained RAM and flash. (For
>> whatever it is worth single NOR flash only boards are common in
>> these smaller form factors :-)
>
> True.
Regards
Greg
------------------------------------------------------------------------
Greg Ungerer -- Chief Software Dude EMAIL: gerg@snapgear.com
SnapGear -- a Secure Computing Company PHONE: +61 7 3435 2888
825 Stanley St, FAX: +61 7 3891 3630
Woolloongabba, QLD, 4102, Australia WEB: http://www.SnapGear.com
^ permalink raw reply
* [PATCH] 2.6.27-rc4-git3: make section names compatible with -ffunction-sections -fdata-sections
From: Denys Vlasenko @ 2008-08-24 23:18 UTC (permalink / raw)
To: Andrew Morton, mingo, x86, James Bottomley
Cc: Russell King, David Howells, Ralf Baechle, Lennert Buytenhek,
Josh Boyer, Paul Mackerras, David Woodhouse, Andi Kleen, torvalds,
Paul Gortmaker, linux-embedded, linux-kernel, Tim Bird,
Martin Schwidefsky, Dave Miller
Hi Andrew,
You asked me to maintain it and resubmit when
merge frenzy is over.
Here is the update against current Linus tree
(which is 2.6.27-rc4-git3), rolled up into one patch.
James Bottomley suggested a different naming scheme:
instead of swapping parts (.text.head -> .head.text),
prepend .kernel to our special section names.
This patch implements his idea.
x86 and m68k have the following fix:
-.section ".text.head"
+.section ".kernel.text.head","ax",@progbits
In previous iteration I asked arch maintainers
to ACK/NAK this patch. There were a few ACKs, no NAKs.
Changelog follows:
The purpose of these patches is to make kernel buildable
with "gcc -ffunction-sections -fdata-sections".
The problem is that with -ffunction-sections -fdata-sections gcc
creates sections like .text.head and .data.nosave
whenever someone has innocuous code like this:
static void head(...) {...}
or this:
int f(...) { static int nosave; ... }
somewhere in the kernel.
Kernel linker script is confused by such names and puts these sections
in wrong places.
This patch renames all "magic" section names used by kernel
to not have this format, eliminating the possibility of such collisions.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
--
vda
--- gc.0/Documentation/mutex-design.txt Wed Jul 16 23:11:07 2008
+++ gc.2/Documentation/mutex-design.txt Sun Aug 24 23:54:07 2008
@@ -66,14 +66,14 @@
c0377ccb <mutex_lock>:
c0377ccb: f0 ff 08 lock decl (%eax)
- c0377cce: 78 0e js c0377cde <.text.lock.mutex>
+ c0377cce: 78 0e js c0377cde <.kernel.text.lock.mutex>
c0377cd0: c3 ret
the unlocking fastpath is equally tight:
c0377cd1 <mutex_unlock>:
c0377cd1: f0 ff 00 lock incl (%eax)
- c0377cd4: 7e 0f jle c0377ce5 <.text.lock.mutex+0x7>
+ c0377cd4: 7e 0f jle c0377ce5 <.kernel.text.lock.mutex+0x7>
c0377cd6: c3 ret
- 'struct mutex' semantics are well-defined and are enforced if
--- gc.0/arch/alpha/kernel/head.S Wed Jul 16 23:11:08 2008
+++ gc.2/arch/alpha/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -10,7 +10,7 @@
#include <asm/system.h>
#include <asm/asm-offsets.h>
-.section .text.head, "ax"
+.section .kernel.text.head, "ax"
.globl swapper_pg_dir
.globl _stext
swapper_pg_dir=SWAPPER_PGD
--- gc.0/arch/alpha/kernel/init_task.c Wed Jul 16 23:11:08 2008
+++ gc.2/arch/alpha/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -18,5 +18,5 @@
EXPORT_SYMBOL(init_task);
union thread_union init_thread_union
- __attribute__((section(".data.init_thread")))
+ __attribute__((section(".kernel.data.init_thread")))
= { INIT_THREAD_INFO(init_task) };
--- gc.0/arch/alpha/kernel/vmlinux.lds.S Wed Jul 16 23:11:08 2008
+++ gc.2/arch/alpha/kernel/vmlinux.lds.S Sun Aug 24 23:53:53 2008
@@ -16,7 +16,7 @@
_text = .; /* Text and read-only data */
.text : {
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -93,18 +93,18 @@
/* Freed after init ends here */
/* Note 2 page alignment above. */
- .data.init_thread : {
- *(.data.init_thread)
+ .kernel.data.init_thread : {
+ *(.kernel.data.init_thread)
}
. = ALIGN(PAGE_SIZE);
- .data.page_aligned : {
- *(.data.page_aligned)
+ .kernel.data.page_aligned : {
+ *(.kernel.data.page_aligned)
}
. = ALIGN(64);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
_data = .;
--- gc.0/arch/arm/kernel/head-nommu.S Sun Aug 24 23:32:10 2008
+++ gc.2/arch/arm/kernel/head-nommu.S Sun Aug 24 23:53:53 2008
@@ -32,7 +32,7 @@
* numbers for r1.
*
*/
- .section ".text.head", "ax"
+ .section ".kernel.text.head", "ax"
.type stext, %function
ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
--- gc.0/arch/arm/kernel/head.S Wed Jul 16 23:11:08 2008
+++ gc.2/arch/arm/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -74,7 +74,7 @@
* crap here - that's what the boot loader (or in extreme, well justified
* circumstances, zImage) is for.
*/
- .section ".text.head", "ax"
+ .section ".kernel.text.head", "ax"
.type stext, %function
ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
--- gc.0/arch/arm/kernel/init_task.c Wed Jul 16 23:11:08 2008
+++ gc.2/arch/arm/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -30,7 +30,7 @@
* The things we do for performance..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/arm/kernel/vmlinux.lds.S Wed Jul 16 23:11:08 2008
+++ gc.2/arch/arm/kernel/vmlinux.lds.S Sun Aug 24 23:53:53 2008
@@ -23,10 +23,10 @@
#else
. = PAGE_OFFSET + TEXT_OFFSET;
#endif
- .text.head : {
+ .kernel.text.head : {
_stext = .;
_sinittext = .;
- *(.text.head)
+ *(.kernel.text.head)
}
.init : { /* Init code and data */
@@ -65,8 +65,8 @@
#endif
. = ALIGN(4096);
__per_cpu_start = .;
- *(.data.percpu)
- *(.data.percpu.shared_aligned)
+ *(.kernel.data.percpu)
+ *(.kernel.data.percpu.shared_aligned)
__per_cpu_end = .;
#ifndef CONFIG_XIP_KERNEL
__init_begin = _stext;
@@ -125,7 +125,7 @@
* first, the init task union, aligned
* to an 8192 byte boundary.
*/
- *(.data.init_task)
+ *(.kernel.data.init_task)
#ifdef CONFIG_XIP_KERNEL
. = ALIGN(4096);
@@ -137,7 +137,7 @@
. = ALIGN(4096);
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
. = ALIGN(4096);
__nosave_end = .;
@@ -145,7 +145,7 @@
* then the cacheline aligned data
*/
. = ALIGN(32);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
/*
* The exception fixup table (might need resorting at runtime)
--- gc.0/arch/arm/mm/proc-v6.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/arm/mm/proc-v6.S Sun Aug 24 23:53:57 2008
@@ -164,7 +164,7 @@
.asciz "ARMv6-compatible processor"
.align
- .section ".text.init", #alloc, #execinstr
+ .section ".kernel.text.init", #alloc, #execinstr
/*
* __v6_setup
--- gc.0/arch/arm/mm/proc-v7.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/arm/mm/proc-v7.S Sun Aug 24 23:53:57 2008
@@ -146,7 +146,7 @@
.ascii "ARMv7 Processor"
.align
- .section ".text.init", #alloc, #execinstr
+ .section ".kernel.text.init", #alloc, #execinstr
/*
* __v7_setup
--- gc.0/arch/arm/mm/tlb-v6.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/arm/mm/tlb-v6.S Sun Aug 24 23:53:57 2008
@@ -87,7 +87,7 @@
mcr p15, 0, r2, c7, c5, 4 @ prefetch flush
mov pc, lr
- .section ".text.init", #alloc, #execinstr
+ .section ".kernel.text.init", #alloc, #execinstr
.type v6wbi_tlb_fns, #object
ENTRY(v6wbi_tlb_fns)
--- gc.0/arch/arm/mm/tlb-v7.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/arm/mm/tlb-v7.S Sun Aug 24 23:53:57 2008
@@ -78,7 +78,7 @@
isb
mov pc, lr
- .section ".text.init", #alloc, #execinstr
+ .section ".kernel.text.init", #alloc, #execinstr
.type v7wbi_tlb_fns, #object
ENTRY(v7wbi_tlb_fns)
--- gc.0/arch/avr32/kernel/init_task.c Wed Jul 16 23:11:09 2008
+++ gc.2/arch/avr32/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -24,7 +24,7 @@
* Initial thread structure. Must be aligned on an 8192-byte boundary.
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/avr32/kernel/vmlinux.lds.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/avr32/kernel/vmlinux.lds.S Sun Aug 24 23:53:03 2008
@@ -95,15 +95,15 @@
/*
* First, the init task union, aligned to an 8K boundary.
*/
- *(.data.init_task)
+ *(.kernel.data.init_task)
/* Then, the page-aligned data */
. = ALIGN(PAGE_SIZE);
- *(.data.page_aligned)
+ *(.kernel.data.page_aligned)
/* Then, the cacheline aligned data */
. = ALIGN(L1_CACHE_BYTES);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
/* And the rest... */
*(.data.rel*)
--- gc.0/arch/avr32/mm/init.c Sun Aug 24 23:32:13 2008
+++ gc.2/arch/avr32/mm/init.c Sun Aug 24 23:53:03 2008
@@ -24,7 +24,7 @@
#include <asm/setup.h>
#include <asm/sections.h>
-#define __page_aligned __attribute__((section(".data.page_aligned")))
+#define __page_aligned __attribute__((section(".kernel.data.page_aligned")))
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
--- gc.0/arch/blackfin/kernel/vmlinux.lds.S Sun Aug 24 23:32:13 2008
+++ gc.2/arch/blackfin/kernel/vmlinux.lds.S Sun Aug 24 23:52:30 2008
@@ -92,7 +92,7 @@
__sdata = .;
/* This gets done first, so the glob doesn't suck it in */
. = ALIGN(32);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
#if !L1_DATA_A_LENGTH
. = ALIGN(32);
--- gc.0/arch/cris/arch-v10/vmlinux.lds.S Wed Jul 16 23:11:09 2008
+++ gc.2/arch/cris/arch-v10/vmlinux.lds.S Sun Aug 24 23:52:49 2008
@@ -51,7 +51,7 @@
_edata = . ;
. = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned */
- .data.init_task : { *(.data.init_task) }
+ .kernel.data.init_task : { *(.kernel.data.init_task) }
. = ALIGN(PAGE_SIZE); /* Init code and data */
__init_begin = .;
--- gc.0/arch/cris/arch-v32/vmlinux.lds.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/cris/arch-v32/vmlinux.lds.S Sun Aug 24 23:52:49 2008
@@ -63,7 +63,7 @@
_edata = . ;
. = ALIGN(PAGE_SIZE); /* init_task and stack, must be aligned. */
- .data.init_task : { *(.data.init_task) }
+ .kernel.data.init_task : { *(.kernel.data.init_task) }
. = ALIGN(PAGE_SIZE); /* Init code and data. */
__init_begin = .;
--- gc.0/arch/cris/kernel/process.c Wed Jul 16 23:11:10 2008
+++ gc.2/arch/cris/kernel/process.c Sun Aug 24 23:52:49 2008
@@ -52,7 +52,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/frv/kernel/break.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/break.S Sun Aug 24 23:54:30 2008
@@ -21,7 +21,7 @@
#
# the break handler has its own stack
#
- .section .bss.stack
+ .section .bss.kernel.stack
.globl __break_user_context
.balign THREAD_SIZE
__break_stack:
@@ -63,7 +63,7 @@
# entry point for Break Exceptions/Interrupts
#
###############################################################################
- .section .text.break
+ .section .kernel.text.break
.balign 4
.globl __entry_break
__entry_break:
--- gc.0/arch/frv/kernel/entry.S Sun Aug 24 23:32:13 2008
+++ gc.2/arch/frv/kernel/entry.S Sun Aug 24 23:53:44 2008
@@ -38,7 +38,7 @@
#define nr_syscalls ((syscall_table_size)/4)
- .section .text.entry
+ .section .kernel.text.entry
.balign 4
.macro LEDS val
--- gc.0/arch/frv/kernel/head-mmu-fr451.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/head-mmu-fr451.S Sun Aug 24 23:53:57 2008
@@ -31,7 +31,7 @@
#define __400_LCR 0xfe000100
#define __400_LSBR 0xfe000c00
- .section .text.init,"ax"
+ .section .kernel.text.init,"ax"
.balign 4
###############################################################################
--- gc.0/arch/frv/kernel/head-uc-fr401.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/head-uc-fr401.S Sun Aug 24 23:53:58 2008
@@ -30,7 +30,7 @@
#define __400_LCR 0xfe000100
#define __400_LSBR 0xfe000c00
- .section .text.init,"ax"
+ .section .kernel.text.init,"ax"
.balign 4
###############################################################################
--- gc.0/arch/frv/kernel/head-uc-fr451.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/head-uc-fr451.S Sun Aug 24 23:53:58 2008
@@ -30,7 +30,7 @@
#define __400_LCR 0xfe000100
#define __400_LSBR 0xfe000c00
- .section .text.init,"ax"
+ .section .kernel.text.init,"ax"
.balign 4
###############################################################################
--- gc.0/arch/frv/kernel/head-uc-fr555.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/head-uc-fr555.S Sun Aug 24 23:53:58 2008
@@ -29,7 +29,7 @@
#define __551_LCR 0xfeff1100
#define __551_LSBR 0xfeff1c00
- .section .text.init,"ax"
+ .section .kernel.text.init,"ax"
.balign 4
###############################################################################
--- gc.0/arch/frv/kernel/head.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/head.S Sun Aug 24 23:54:17 2008
@@ -27,7 +27,7 @@
# command line string
#
###############################################################################
- .section .text.head,"ax"
+ .section .kernel.text.head,"ax"
.balign 4
.globl _boot, __head_reference
@@ -541,7 +541,7 @@
.size _boot, .-_boot
# provide a point for GDB to place a break
- .section .text.start,"ax"
+ .section .kernel.text.start,"ax"
.globl _start
.balign 4
_start:
--- gc.0/arch/frv/kernel/init_task.c Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -25,7 +25,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/frv/kernel/vmlinux.lds.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/kernel/vmlinux.lds.S Sun Aug 24 23:54:30 2008
@@ -26,7 +26,7 @@
_sinittext = .;
.init.text : {
- *(.text.head)
+ *(.kernel.text.head)
#ifndef CONFIG_DEBUG_INFO
INIT_TEXT
EXIT_TEXT
@@ -71,13 +71,13 @@
/* put sections together that have massive alignment issues */
. = ALIGN(THREAD_SIZE);
- .data.init_task : {
+ .kernel.data.init_task : {
/* init task record & stack */
- *(.data.init_task)
+ *(.kernel.data.init_task)
}
. = ALIGN(L1_CACHE_BYTES);
- .data.cacheline_aligned : { *(.data.cacheline_aligned) }
+ .kernel.data.cacheline_aligned : { *(.kernel.data.cacheline_aligned) }
.trap : {
/* trap table management - read entry-table.S before modifying */
@@ -94,10 +94,10 @@
_text = .;
_stext = .;
.text : {
- *(.text.start)
- *(.text.entry)
- *(.text.break)
- *(.text.tlbmiss)
+ *(.kernel.text.start)
+ *(.kernel.text.entry)
+ *(.kernel.text.break)
+ *(.kernel.text.tlbmiss)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -152,7 +152,7 @@
.sbss : { *(.sbss .sbss.*) }
.bss : { *(.bss .bss.*) }
- .bss.stack : { *(.bss) }
+ .bss.kernel.stack : { *(.bss) }
__bss_stop = .;
_end = . ;
--- gc.0/arch/frv/mm/tlb-miss.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/frv/mm/tlb-miss.S Sun Aug 24 23:54:21 2008
@@ -16,7 +16,7 @@
#include <asm/highmem.h>
#include <asm/spr-regs.h>
- .section .text.tlbmiss
+ .section .kernel.text.tlbmiss
.balign 4
.globl __entry_insn_mmu_miss
--- gc.0/arch/h8300/boot/compressed/head.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/h8300/boot/compressed/head.S Sun Aug 24 23:54:17 2008
@@ -9,7 +9,7 @@
#define SRAM_START 0xff4000
- .section .text.startup
+ .section .kernel.text.startup
.global startup
startup:
mov.l #SRAM_START+0x8000, sp
--- gc.0/arch/h8300/boot/compressed/vmlinux.lds Wed Jul 16 23:11:10 2008
+++ gc.2/arch/h8300/boot/compressed/vmlinux.lds Sun Aug 24 23:54:17 2008
@@ -4,7 +4,7 @@
{
__stext = . ;
__text = .;
- *(.text.startup)
+ *(.kernel.text.startup)
*(.text)
__etext = . ;
}
--- gc.0/arch/h8300/kernel/init_task.c Wed Jul 16 23:11:10 2008
+++ gc.2/arch/h8300/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -37,6 +37,6 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
--- gc.0/arch/h8300/kernel/vmlinux.lds.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/h8300/kernel/vmlinux.lds.S Sun Aug 24 23:52:49 2008
@@ -101,7 +101,7 @@
___data_start = . ;
. = ALIGN(0x2000) ;
- *(.data.init_task)
+ *(.kernel.data.init_task)
. = ALIGN(0x4) ;
DATA_DATA
. = ALIGN(0x4) ;
--- gc.0/arch/ia64/include/asm/asmmacro.h Sun Aug 24 23:32:13 2008
+++ gc.2/arch/ia64/include/asm/asmmacro.h Sun Aug 24 23:53:07 2008
@@ -70,12 +70,12 @@
* path (ivt.S - TLB miss processing) or in places where it might not be
* safe to use a "tpa" instruction (mca_asm.S - error recovery).
*/
- .section ".data.patch.vtop", "a" // declare section & section attributes
+ .section ".kernel.data.patch.vtop", "a" // declare section & section attributes
.previous
#define LOAD_PHYSICAL(pr, reg, obj) \
[1:](pr)movl reg = obj; \
- .xdata4 ".data.patch.vtop", 1b-.
+ .xdata4 ".kernel.data.patch.vtop", 1b-.
/*
* For now, we always put in the McKinley E9 workaround. On CPUs that don't need it,
@@ -84,11 +84,11 @@
#define DO_MCKINLEY_E9_WORKAROUND
#ifdef DO_MCKINLEY_E9_WORKAROUND
- .section ".data.patch.mckinley_e9", "a"
+ .section ".kernel.data.patch.mckinley_e9", "a"
.previous
/* workaround for Itanium 2 Errata 9: */
# define FSYS_RETURN \
- .xdata4 ".data.patch.mckinley_e9", 1f-.; \
+ .xdata4 ".kernel.data.patch.mckinley_e9", 1f-.; \
1:{ .mib; \
nop.m 0; \
mov r16=ar.pfs; \
@@ -107,11 +107,11 @@
* If physical stack register size is different from DEF_NUM_STACK_REG,
* dynamically patch the kernel for correct size.
*/
- .section ".data.patch.phys_stack_reg", "a"
+ .section ".kernel.data.patch.phys_stack_reg", "a"
.previous
#define LOAD_PHYS_STACK_REG_SIZE(reg) \
[1:] adds reg=IA64_NUM_PHYS_STACK_REG*8+8,r0; \
- .xdata4 ".data.patch.phys_stack_reg", 1b-.
+ .xdata4 ".kernel.data.patch.phys_stack_reg", 1b-.
/*
* Up until early 2004, use of .align within a function caused bad unwind info.
--- gc.0/arch/ia64/include/asm/cache.h Sun Aug 24 23:32:13 2008
+++ gc.2/arch/ia64/include/asm/cache.h Sun Aug 24 23:53:17 2008
@@ -24,6 +24,6 @@
# define SMP_CACHE_BYTES (1 << 3)
#endif
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#endif /* _ASM_IA64_CACHE_H */
--- gc.0/arch/ia64/include/asm/percpu.h Sun Aug 24 23:32:13 2008
+++ gc.2/arch/ia64/include/asm/percpu.h Sun Aug 24 23:53:12 2008
@@ -27,7 +27,7 @@
#else /* ! SMP */
-#define PER_CPU_ATTRIBUTES __attribute__((__section__(".data.percpu")))
+#define PER_CPU_ATTRIBUTES __attribute__((__section__(".kernel.data.percpu")))
#define per_cpu_init() (__phys_per_cpu_start)
--- gc.0/arch/ia64/kernel/Makefile Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/Makefile Sun Aug 24 23:52:40 2008
@@ -68,7 +68,7 @@
$(obj)/gate-syms.o: $(obj)/gate.lds $(obj)/gate.o FORCE
$(call if_changed,gate)
-# gate-data.o contains the gate DSO image as data in section .data.gate.
+# gate-data.o contains the gate DSO image as data in section .kernel.data.gate.
# We must build gate.so before we can assemble it.
# Note: kbuild does not track this dependency due to usage of .incbin
$(obj)/gate-data.o: $(obj)/gate.so
--- gc.0/arch/ia64/kernel/gate-data.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/ia64/kernel/gate-data.S Sun Aug 24 23:52:40 2008
@@ -1,3 +1,3 @@
- .section .data.gate, "aw"
+ .section .kernel.data.gate, "aw"
.incbin "arch/ia64/kernel/gate.so"
--- gc.0/arch/ia64/kernel/gate.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/ia64/kernel/gate.S Sun Aug 24 23:53:07 2008
@@ -20,18 +20,18 @@
* to targets outside the shared object) and to avoid multi-phase kernel builds, we
* simply create minimalistic "patch lists" in special ELF sections.
*/
- .section ".data.patch.fsyscall_table", "a"
+ .section ".kernel.data.patch.fsyscall_table", "a"
.previous
#define LOAD_FSYSCALL_TABLE(reg) \
[1:] movl reg=0; \
- .xdata4 ".data.patch.fsyscall_table", 1b-.
+ .xdata4 ".kernel.data.patch.fsyscall_table", 1b-.
- .section ".data.patch.brl_fsys_bubble_down", "a"
+ .section ".kernel.data.patch.brl_fsys_bubble_down", "a"
.previous
#define BRL_COND_FSYS_BUBBLE_DOWN(pr) \
[1:](pr)brl.cond.sptk 0; \
;; \
- .xdata4 ".data.patch.brl_fsys_bubble_down", 1b-.
+ .xdata4 ".kernel.data.patch.brl_fsys_bubble_down", 1b-.
GLOBAL_ENTRY(__kernel_syscall_via_break)
.prologue
--- gc.0/arch/ia64/kernel/gate.lds.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/ia64/kernel/gate.lds.S Mon Aug 25 00:48:15 2008
@@ -32,21 +32,21 @@
*/
. = GATE_ADDR + 0x600;
- .data.patch : {
+ .kernel.data.patch : {
__start_gate_mckinley_e9_patchlist = .;
- *(.data.patch.mckinley_e9)
+ *(.kernel.data.patch.mckinley_e9)
__end_gate_mckinley_e9_patchlist = .;
__start_gate_vtop_patchlist = .;
- *(.data.patch.vtop)
+ *(.kernel.data.patch.vtop)
__end_gate_vtop_patchlist = .;
__start_gate_fsyscall_patchlist = .;
- *(.data.patch.fsyscall_table)
+ *(.kernel.data.patch.fsyscall_table)
__end_gate_fsyscall_patchlist = .;
__start_gate_brl_fsys_bubble_down_patchlist = .;
- *(.data.patch.brl_fsys_bubble_down)
+ *(.kernel.data.patch.brl_fsys_bubble_down)
__end_gate_brl_fsys_bubble_down_patchlist = .;
} :readable
--- gc.0/arch/ia64/kernel/head.S Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -181,7 +181,7 @@
halt_msg:
stringz "Halting kernel\n"
- .section .text.head,"ax"
+ .section .kernel.text.head,"ax"
.global start_ap
--- gc.0/arch/ia64/kernel/init_task.c Wed Jul 16 23:11:10 2008
+++ gc.2/arch/ia64/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -28,7 +28,7 @@
* Initial task structure.
*
* We need to make sure that this is properly aligned due to the way process stacks are
- * handled. This is done by having a special ".data.init_task" section...
+ * handled. This is done by having a special ".kernel.data.init_task" section...
*/
#define init_thread_info init_task_mem.s.thread_info
@@ -38,7 +38,7 @@
struct thread_info thread_info;
} s;
unsigned long stack[KERNEL_STACK_SIZE/sizeof (unsigned long)];
-} init_task_mem asm ("init_task") __attribute__((section(".data.init_task"))) = {{
+} init_task_mem asm ("init_task") __attribute__((section(".kernel.data.init_task"))) = {{
.task = INIT_TASK(init_task_mem.s.task),
.thread_info = INIT_THREAD_INFO(init_task_mem.s.task)
}};
--- gc.0/arch/ia64/kernel/ivt.S Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/ivt.S Sun Aug 24 23:54:02 2008
@@ -83,7 +83,7 @@
mov r19=n;; /* prepare to save predicates */ \
br.sptk.many dispatch_to_fault_handler
- .section .text.ivt,"ax"
+ .section .kernel.text.ivt,"ax"
.align 32768 // align on 32KB boundary
.global ia64_ivt
--- gc.0/arch/ia64/kernel/minstate.h Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/minstate.h Mon Aug 25 00:40:33 2008
@@ -16,7 +16,7 @@
#define ACCOUNT_SYS_ENTER
#endif
-.section ".data.patch.rse", "a"
+.section ".kernel.data.patch.rse", "a"
.previous
/*
@@ -215,7 +215,7 @@
(pUStk) extr.u r17=r18,3,6; \
(pUStk) sub r16=r18,r22; \
[1:](pKStk) br.cond.sptk.many 1f; \
- .xdata4 ".data.patch.rse",1b-. \
+ .xdata4 ".kernel.data.patch.rse",1b-. \
;; \
cmp.ge p6,p7 = 33,r17; \
;; \
--- gc.0/arch/ia64/kernel/paravirtentry.S Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/paravirtentry.S Sun Aug 24 23:53:17 2008
@@ -25,7 +25,7 @@
#include "entry.h"
#define DATA8(sym, init_value) \
- .pushsection .data.read_mostly ; \
+ .pushsection .kernel.data.read_mostly ; \
.align 8 ; \
.global sym ; \
sym: ; \
--- gc.0/arch/ia64/kernel/vmlinux.lds.S Sun Aug 24 23:32:14 2008
+++ gc.2/arch/ia64/kernel/vmlinux.lds.S Mon Aug 25 00:41:16 2008
@@ -8,7 +8,7 @@
#define IVT_TEXT \
VMLINUX_SYMBOL(__start_ivt_text) = .; \
- *(.text.ivt) \
+ *(.kernel.text.ivt) \
VMLINUX_SYMBOL(__end_ivt_text) = .;
OUTPUT_FORMAT("elf64-ia64-little")
@@ -51,13 +51,13 @@
KPROBES_TEXT
*(.gnu.linkonce.t*)
}
- .text.head : AT(ADDR(.text.head) - LOAD_OFFSET)
- { *(.text.head) }
+ .kernel.text.head : AT(ADDR(.kernel.text.head) - LOAD_OFFSET)
+ { *(.kernel.text.head) }
.text2 : AT(ADDR(.text2) - LOAD_OFFSET)
{ *(.text2) }
#ifdef CONFIG_SMP
- .text.lock : AT(ADDR(.text.lock) - LOAD_OFFSET)
- { *(.text.lock) }
+ .kernel.text.lock : AT(ADDR(.kernel.text.lock) - LOAD_OFFSET)
+ { *(.kernel.text.lock) }
#endif
_etext = .;
@@ -84,10 +84,10 @@
__stop___mca_table = .;
}
- .data.patch.phys_stack_reg : AT(ADDR(.data.patch.phys_stack_reg) - LOAD_OFFSET)
+ .kernel.data.patch.phys_stack_reg : AT(ADDR(.kernel.data.patch.phys_stack_reg) - LOAD_OFFSET)
{
__start___phys_stack_reg_patchlist = .;
- *(.data.patch.phys_stack_reg)
+ *(.kernel.data.patch.phys_stack_reg)
__end___phys_stack_reg_patchlist = .;
}
@@ -148,24 +148,24 @@
__initcall_end = .;
}
- .data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET)
+ .kernel.data.patch.vtop : AT(ADDR(.kernel.data.patch.vtop) - LOAD_OFFSET)
{
__start___vtop_patchlist = .;
- *(.data.patch.vtop)
+ *(.kernel.data.patch.vtop)
__end___vtop_patchlist = .;
}
- .data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET)
+ .kernel.data.patch.rse : AT(ADDR(.kernel.data.patch.rse) - LOAD_OFFSET)
{
__start___rse_patchlist = .;
- *(.data.patch.rse)
+ *(.kernel.data.patch.rse)
__end___rse_patchlist = .;
}
- .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET)
+ .kernel.data.patch.mckinley_e9 : AT(ADDR(.kernel.data.patch.mckinley_e9) - LOAD_OFFSET)
{
__start___mckinley_e9_bundles = .;
- *(.data.patch.mckinley_e9)
+ *(.kernel.data.patch.mckinley_e9)
__end___mckinley_e9_bundles = .;
}
@@ -193,24 +193,24 @@
__init_end = .;
/* The initial task and kernel stack */
- .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET)
- { *(.data.init_task) }
+ .kernel.data.init_task : AT(ADDR(.kernel.data.init_task) - LOAD_OFFSET)
+ { *(.kernel.data.init_task) }
- .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET)
+ .kernel.data.page_aligned : AT(ADDR(.kernel.data.page_aligned) - LOAD_OFFSET)
{ *(__special_page_section)
__start_gate_section = .;
- *(.data.gate)
+ *(.kernel.data.gate)
__stop_gate_section = .;
}
. = ALIGN(PAGE_SIZE); /* make sure the gate page doesn't expose
* kernel data
*/
- .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET)
- { *(.data.read_mostly) }
+ .kernel.data.read_mostly : AT(ADDR(.kernel.data.read_mostly) - LOAD_OFFSET)
+ { *(.kernel.data.read_mostly) }
- .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET)
- { *(.data.cacheline_aligned) }
+ .kernel.data.cacheline_aligned : AT(ADDR(.kernel.data.cacheline_aligned) - LOAD_OFFSET)
+ { *(.kernel.data.cacheline_aligned) }
/* Per-cpu data: */
percpu : { } :percpu
@@ -219,11 +219,11 @@
. = . + PERCPU_PAGE_SIZE; /* cpu0 per-cpu space */
#endif
__phys_per_cpu_start = .;
- .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET)
+ .kernel.data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET)
{
__per_cpu_start = .;
- *(.data.percpu)
- *(.data.percpu.shared_aligned)
+ *(.kernel.data.percpu)
+ *(.kernel.data.percpu.shared_aligned)
__per_cpu_end = .;
}
. = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits
--- gc.0/arch/ia64/kvm/vmm_ivt.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/ia64/kvm/vmm_ivt.S Sun Aug 24 23:54:02 2008
@@ -97,7 +97,7 @@
- .section .text.ivt,"ax"
+ .section .kernel.text.ivt,"ax"
.align 32768 // align on 32KB boundary
.global kvm_ia64_ivt
--- gc.0/arch/m32r/kernel/init_task.c Wed Jul 16 23:11:10 2008
+++ gc.2/arch/m32r/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -26,7 +26,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/m32r/kernel/vmlinux.lds.S Wed Jul 16 23:11:10 2008
+++ gc.2/arch/m32r/kernel/vmlinux.lds.S Sun Aug 24 23:52:58 2008
@@ -56,17 +56,17 @@
. = ALIGN(4096);
__nosave_begin = .;
- .data_nosave : { *(.data.nosave) }
+ .data_nosave : { *(.kernel.data.nosave) }
. = ALIGN(4096);
__nosave_end = .;
. = ALIGN(32);
- .data.cacheline_aligned : { *(.data.cacheline_aligned) }
+ .kernel.data.cacheline_aligned : { *(.kernel.data.cacheline_aligned) }
_edata = .; /* End of data section */
. = ALIGN(8192); /* init_task */
- .data.init_task : { *(.data.init_task) }
+ .kernel.data.init_task : { *(.kernel.data.init_task) }
/* will be freed after init */
. = ALIGN(4096); /* Init code and data */
--- gc.0/arch/m68k/kernel/head.S Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68k/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -577,7 +577,7 @@
#endif
.endm
-.section ".text.head","ax"
+.section ".kernel.text.head","ax"
ENTRY(_stext)
/*
* Version numbers of the bootinfo interface
--- gc.0/arch/m68k/kernel/process.c Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68k/kernel/process.c Sun Aug 24 23:52:49 2008
@@ -48,7 +48,7 @@
EXPORT_SYMBOL(init_mm);
union thread_union init_thread_union
-__attribute__((section(".data.init_task"), aligned(THREAD_SIZE)))
+__attribute__((section(".kernel.data.init_task"), aligned(THREAD_SIZE)))
= { INIT_THREAD_INFO(init_task) };
/* initial task structure */
--- gc.0/arch/m68k/kernel/sun3-head.S Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68k/kernel/sun3-head.S Mon Aug 25 00:25:44 2008
@@ -29,7 +29,7 @@
.globl kernel_pg_dir
.equ kernel_pg_dir,kernel_pmd_table
- .section .text.head
+ .section .kernel.text.head, "ax"
ENTRY(_stext)
ENTRY(_start)
--- gc.0/arch/m68k/kernel/vmlinux-std.lds Sun Aug 24 23:32:15 2008
+++ gc.2/arch/m68k/kernel/vmlinux-std.lds Sun Aug 24 23:53:53 2008
@@ -12,7 +12,7 @@
. = 0x1000;
_text = .; /* Text and read-only data */
.text : {
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -37,7 +37,7 @@
.bss : { *(.bss) } /* BSS */
. = ALIGN(16);
- .data.cacheline_aligned : { *(.data.cacheline_aligned) } :data
+ .kernel.data.cacheline_aligned : { *(.kernel.data.cacheline_aligned) } :data
_edata = .; /* End of data section */
@@ -77,7 +77,7 @@
. = ALIGN(8192);
__init_end = .;
- .data.init_task : { *(.data.init_task) } /* The initial task and kernel stack */
+ .kernel.data.init_task : { *(.kernel.data.init_task) } /* The initial task and kernel stack */
_end = . ;
--- gc.0/arch/m68k/kernel/vmlinux-sun3.lds Sun Aug 24 23:32:15 2008
+++ gc.2/arch/m68k/kernel/vmlinux-sun3.lds Sun Aug 24 23:53:53 2008
@@ -12,7 +12,7 @@
. = 0xE002000;
_text = .; /* Text and read-only data */
.text : {
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -69,7 +69,7 @@
#endif
. = ALIGN(PAGE_SIZE);
__init_end = .;
- .data.init.task : { *(.data.init_task) }
+ .kernel.data.init.task : { *(.kernel.data.init_task) }
.bss : { *(.bss) } /* BSS */
--- gc.0/arch/m68knommu/kernel/init_task.c Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68knommu/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -37,6 +37,6 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
--- gc.0/arch/m68knommu/kernel/vmlinux.lds.S Sun Aug 24 23:32:15 2008
+++ gc.2/arch/m68knommu/kernel/vmlinux.lds.S Sun Aug 24 23:54:07 2008
@@ -55,7 +55,7 @@
.romvec : {
__rom_start = . ;
_romvec = .;
- *(.data.initvect)
+ *(.kernel.data.initvect)
} > romvec
#endif
@@ -66,7 +66,7 @@
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
- *(.text.lock)
+ *(.kernel.text.lock)
. = ALIGN(16); /* Exception table */
__start___ex_table = .;
@@ -148,7 +148,7 @@
_sdata = . ;
DATA_DATA
. = ALIGN(8192) ;
- *(.data.init_task)
+ *(.kernel.data.init_task)
_edata = . ;
} > DATA
--- gc.0/arch/m68knommu/platform/68360/head-ram.S Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68knommu/platform/68360/head-ram.S Sun Aug 24 23:52:49 2008
@@ -280,7 +280,7 @@
* and then overwritten as needed.
*/
-.section ".data.initvect","awx"
+.section ".kernel.data.initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */
--- gc.0/arch/m68knommu/platform/68360/head-rom.S Wed Jul 16 23:11:11 2008
+++ gc.2/arch/m68knommu/platform/68360/head-rom.S Sun Aug 24 23:52:49 2008
@@ -291,7 +291,7 @@
* and then overwritten as needed.
*/
-.section ".data.initvect","awx"
+.section ".kernel.data.initvect","awx"
.long RAMEND /* Reset: Initial Stack Pointer - 0. */
.long _start /* Reset: Initial Program Counter - 1. */
.long buserr /* Bus Error - 2. */
--- gc.0/arch/mips/kernel/init_task.c Wed Jul 16 23:11:11 2008
+++ gc.2/arch/mips/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -27,7 +27,7 @@
* The things we do for performance..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"),
+ __attribute__((__section__(".kernel.data.init_task"),
__aligned__(THREAD_SIZE))) =
{ INIT_THREAD_INFO(init_task) };
--- gc.0/arch/mips/kernel/vmlinux.lds.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mips/kernel/vmlinux.lds.S Sun Aug 24 23:52:58 2008
@@ -76,7 +76,7 @@
* object file alignment. Using 32768
*/
. = ALIGN(_PAGE_SIZE);
- *(.data.init_task)
+ *(.kernel.data.init_task)
DATA_DATA
CONSTRUCTORS
@@ -98,14 +98,14 @@
. = ALIGN(_PAGE_SIZE);
.data_nosave : {
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
}
. = ALIGN(_PAGE_SIZE);
__nosave_end = .;
. = ALIGN(32);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
_edata = .; /* End of data section */
--- gc.0/arch/mips/lasat/image/head.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mips/lasat/image/head.S Sun Aug 24 23:54:17 2008
@@ -1,7 +1,7 @@
#include <asm/lasat/head.h>
.text
- .section .text.start, "ax"
+ .section .kernel.text.start, "ax"
.set noreorder
.set mips3
--- gc.0/arch/mips/lasat/image/romscript.normal Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mips/lasat/image/romscript.normal Sun Aug 24 23:54:17 2008
@@ -4,7 +4,7 @@
{
.text :
{
- *(.text.start)
+ *(.kernel.text.start)
}
/* Data in ROM */
--- gc.0/arch/mn10300/kernel/head.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mn10300/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -19,7 +19,7 @@
#include <asm/param.h>
#include <asm/unit/serial.h>
- .section .text.head,"ax"
+ .section .kernel.text.head,"ax"
###############################################################################
#
--- gc.0/arch/mn10300/kernel/init_task.c Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mn10300/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -32,7 +32,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/mn10300/kernel/vmlinux.lds.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/mn10300/kernel/vmlinux.lds.S Sun Aug 24 23:54:26 2008
@@ -27,7 +27,7 @@
_text = .; /* Text and read-only data */
.text : {
*(
- .text.head
+ .kernel.text.head
.text
)
TEXT_TEXT
@@ -57,25 +57,25 @@
. = ALIGN(4096);
__nosave_begin = .;
- .data_nosave : { *(.data.nosave) }
+ .data_nosave : { *(.kernel.data.nosave) }
. = ALIGN(4096);
__nosave_end = .;
. = ALIGN(4096);
- .data.page_aligned : { *(.data.idt) }
+ .kernel.data.page_aligned : { *(.kernel.data.idt) }
. = ALIGN(32);
- .data.cacheline_aligned : { *(.data.cacheline_aligned) }
+ .kernel.data.cacheline_aligned : { *(.kernel.data.cacheline_aligned) }
/* rarely changed data like cpu maps */
. = ALIGN(32);
- .data.read_mostly : AT(ADDR(.data.read_mostly)) {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : AT(ADDR(.kernel.data.read_mostly)) {
+ *(.kernel.data.read_mostly)
_edata = .; /* End of data section */
}
. = ALIGN(THREAD_SIZE); /* init_task */
- .data.init_task : { *(.data.init_task) }
+ .kernel.data.init_task : { *(.kernel.data.init_task) }
/* might get freed after init */
. = ALIGN(4096);
@@ -128,7 +128,7 @@
. = ALIGN(32);
__per_cpu_start = .;
- .data.percpu : { *(.data.percpu) }
+ .kernel.data.percpu : { *(.kernel.data.percpu) }
__per_cpu_end = .;
. = ALIGN(4096);
__init_end = .;
@@ -136,7 +136,7 @@
__bss_start = .; /* BSS */
.bss : {
- *(.bss.page_aligned)
+ *(.bss.kernel.page_aligned)
*(.bss)
}
. = ALIGN(4);
--- gc.0/arch/parisc/kernel/head.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/parisc/kernel/head.S Sun Aug 24 23:53:17 2008
@@ -345,7 +345,7 @@
ENDPROC(stext)
#ifndef CONFIG_64BIT
- .section .data.read_mostly
+ .section .kernel.data.read_mostly
.align 4
.export $global$,data
--- gc.0/arch/parisc/kernel/init_task.c Wed Jul 16 23:11:12 2008
+++ gc.2/arch/parisc/kernel/init_task.c Sun Aug 24 23:53:22 2008
@@ -49,7 +49,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((aligned(128))) __attribute__((__section__(".data.init_task"))) =
+ __attribute__((aligned(128))) __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
#if PT_NLEVELS == 3
@@ -58,11 +58,11 @@
* guarantee that global objects will be laid out in memory in the same order
* as the order of declaration, so put these in different sections and use
* the linker script to order them. */
-pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".data.vm0.pmd"), aligned(PAGE_SIZE)));
+pmd_t pmd0[PTRS_PER_PMD] __attribute__ ((__section__ (".kernel.data.vm0.pmd"), aligned(PAGE_SIZE)));
#endif
-pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".data.vm0.pgd"), aligned(PAGE_SIZE)));
-pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".data.vm0.pte"), aligned(PAGE_SIZE)));
+pgd_t swapper_pg_dir[PTRS_PER_PGD] __attribute__ ((__section__ (".kernel.data.vm0.pgd"), aligned(PAGE_SIZE)));
+pte_t pg0[PT_INITIAL * PTRS_PER_PTE] __attribute__ ((__section__ (".kernel.data.vm0.pte"), aligned(PAGE_SIZE)));
/*
* Initial task structure.
--- gc.0/arch/parisc/kernel/vmlinux.lds.S Wed Jul 16 23:11:12 2008
+++ gc.2/arch/parisc/kernel/vmlinux.lds.S Sun Aug 24 23:53:26 2008
@@ -94,8 +94,8 @@
/* rarely changed data like cpu maps */
. = ALIGN(16);
- .data.read_mostly : {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : {
+ *(.kernel.data.read_mostly)
}
. = ALIGN(L1_CACHE_BYTES);
@@ -106,14 +106,14 @@
}
. = ALIGN(L1_CACHE_BYTES);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
/* PA-RISC locks requires 16-byte alignment */
. = ALIGN(16);
- .data.lock_aligned : {
- *(.data.lock_aligned)
+ .kernel.data.lock_aligned : {
+ *(.kernel.data.lock_aligned)
}
/* nosave data is really only used for software suspend...it's here
@@ -122,7 +122,7 @@
. = ALIGN(PAGE_SIZE);
__nosave_begin = .;
.data_nosave : {
- *(.data.nosave)
+ *(.kernel.data.nosave)
}
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
@@ -134,10 +134,10 @@
__bss_start = .;
/* page table entries need to be PAGE_SIZE aligned */
. = ALIGN(PAGE_SIZE);
- .data.vmpages : {
- *(.data.vm0.pmd)
- *(.data.vm0.pgd)
- *(.data.vm0.pte)
+ .kernel.data.vmpages : {
+ *(.kernel.data.vm0.pmd)
+ *(.kernel.data.vm0.pgd)
+ *(.kernel.data.vm0.pte)
}
.bss : {
*(.bss)
@@ -149,8 +149,8 @@
/* assembler code expects init_task to be 16k aligned */
. = ALIGN(16384);
/* init_task */
- .data.init_task : {
- *(.data.init_task)
+ .kernel.data.init_task : {
+ *(.kernel.data.init_task)
}
#ifdef CONFIG_64BIT
--- gc.0/arch/powerpc/include/asm/cache.h Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/include/asm/cache.h Sun Aug 24 23:53:17 2008
@@ -38,7 +38,7 @@
#endif /* __powerpc64__ && ! __ASSEMBLY__ */
#if !defined(__ASSEMBLY__)
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#endif
#endif /* __KERNEL__ */
--- gc.0/arch/powerpc/include/asm/page_64.h Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/include/asm/page_64.h Sun Aug 24 23:53:03 2008
@@ -157,7 +157,7 @@
#else
#define __page_aligned \
__attribute__((__aligned__(PAGE_SIZE), \
- __section__(".data.page_aligned")))
+ __section__(".kernel.data.page_aligned")))
#endif
#define VM_DATA_DEFAULT_FLAGS \
--- gc.0/arch/powerpc/include/asm/ppc_asm.h Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/include/asm/ppc_asm.h Sun Aug 24 23:53:58 2008
@@ -193,7 +193,7 @@
GLUE(.,name):
#define _INIT_GLOBAL(name) \
- .section ".text.init.refok"; \
+ .section ".kernel.text.init.refok"; \
.align 2 ; \
.globl name; \
.globl GLUE(.,name); \
@@ -233,7 +233,7 @@
GLUE(.,name):
#define _INIT_STATIC(name) \
- .section ".text.init.refok"; \
+ .section ".kernel.text.init.refok"; \
.align 2 ; \
.section ".opd","aw"; \
name: \
--- gc.0/arch/powerpc/kernel/head_32.S Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/kernel/head_32.S Sun Aug 24 23:53:53 2008
@@ -49,7 +49,7 @@
mtspr SPRN_DBAT##n##L,RB; \
1:
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
.stabs "arch/powerpc/kernel/",N_SO,0,0,0f
.stabs "head_32.S",N_SO,0,0,0f
0:
--- gc.0/arch/powerpc/kernel/head_40x.S Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/head_40x.S Sun Aug 24 23:53:53 2008
@@ -52,7 +52,7 @@
*
* This is all going to change RSN when we add bi_recs....... -- Dan
*/
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
_ENTRY(_stext);
_ENTRY(_start);
--- gc.0/arch/powerpc/kernel/head_44x.S Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/head_44x.S Sun Aug 24 23:53:53 2008
@@ -50,7 +50,7 @@
* r7 - End of kernel command line string
*
*/
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
_ENTRY(_stext);
_ENTRY(_start);
/*
--- gc.0/arch/powerpc/kernel/head_8xx.S Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/head_8xx.S Sun Aug 24 23:53:53 2008
@@ -38,7 +38,7 @@
#else
#define DO_8xx_CPU6(val, reg)
#endif
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
_ENTRY(_stext);
_ENTRY(_start);
--- gc.0/arch/powerpc/kernel/head_fsl_booke.S Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/kernel/head_fsl_booke.S Sun Aug 24 23:53:53 2008
@@ -53,7 +53,7 @@
* r7 - End of kernel command line string
*
*/
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
_ENTRY(_stext);
_ENTRY(_start);
/*
--- gc.0/arch/powerpc/kernel/init_task.c Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -22,7 +22,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/powerpc/kernel/machine_kexec_64.c Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/machine_kexec_64.c Sun Aug 24 23:52:49 2008
@@ -250,7 +250,7 @@
* current, but that audit has not been performed.
*/
static union thread_union kexec_stack
- __attribute__((__section__(".data.init_task"))) = { };
+ __attribute__((__section__(".kernel.data.init_task"))) = { };
/* Our assembly helper, in kexec_stub.S */
extern NORET_TYPE void kexec_sequence(void *newstack, unsigned long start,
--- gc.0/arch/powerpc/kernel/vdso.c Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/kernel/vdso.c Sun Aug 24 23:53:03 2008
@@ -74,7 +74,7 @@
static union {
struct vdso_data data;
u8 page[PAGE_SIZE];
-} vdso_data_store __attribute__((__section__(".data.page_aligned")));
+} vdso_data_store __attribute__((__section__(".kernel.data.page_aligned")));
struct vdso_data *vdso_data = &vdso_data_store.data;
/* Format of the patch table */
--- gc.0/arch/powerpc/kernel/vdso32/vdso32_wrapper.S Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/vdso32/vdso32_wrapper.S Sun Aug 24 23:53:03 2008
@@ -1,7 +1,7 @@
#include <linux/init.h>
#include <asm/page.h>
- .section ".data.page_aligned"
+ .section ".kernel.data.page_aligned"
.globl vdso32_start, vdso32_end
.balign PAGE_SIZE
--- gc.0/arch/powerpc/kernel/vdso64/vdso64_wrapper.S Wed Jul 16 23:11:13 2008
+++ gc.2/arch/powerpc/kernel/vdso64/vdso64_wrapper.S Sun Aug 24 23:53:03 2008
@@ -1,7 +1,7 @@
#include <linux/init.h>
#include <asm/page.h>
- .section ".data.page_aligned"
+ .section ".kernel.data.page_aligned"
.globl vdso64_start, vdso64_end
.balign PAGE_SIZE
--- gc.0/arch/powerpc/kernel/vmlinux.lds.S Sun Aug 24 23:32:16 2008
+++ gc.2/arch/powerpc/kernel/vmlinux.lds.S Sun Aug 24 23:53:58 2008
@@ -52,9 +52,9 @@
/* Text and gots */
.text : AT(ADDR(.text) - LOAD_OFFSET) {
ALIGN_FUNCTION();
- *(.text.head)
+ *(.kernel.text.head)
_text = .;
- *(.text .fixup .text.init.refok .exit.text.refok __ftr_alt_*)
+ *(.text .fixup .kernel.text.init.refok .kernel.exit.text.refok __ftr_alt_*)
SCHED_TEXT
LOCK_TEXT
KPROBES_TEXT
@@ -173,10 +173,10 @@
}
#endif
. = ALIGN(PAGE_SIZE);
- .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
+ .kernel.data.percpu : AT(ADDR(.kernel.data.percpu) - LOAD_OFFSET) {
__per_cpu_start = .;
- *(.data.percpu)
- *(.data.percpu.shared_aligned)
+ *(.kernel.data.percpu)
+ *(.kernel.data.percpu.shared_aligned)
__per_cpu_end = .;
}
@@ -233,28 +233,28 @@
#else
. = ALIGN(16384);
#endif
- .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
- *(.data.init_task)
+ .kernel.data.init_task : AT(ADDR(.kernel.data.init_task) - LOAD_OFFSET) {
+ *(.kernel.data.init_task)
}
. = ALIGN(PAGE_SIZE);
- .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
- *(.data.page_aligned)
+ .kernel.data.page_aligned : AT(ADDR(.kernel.data.page_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.page_aligned)
}
- .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : AT(ADDR(.kernel.data.cacheline_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.cacheline_aligned)
}
. = ALIGN(L1_CACHE_BYTES);
- .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : AT(ADDR(.kernel.data.read_mostly) - LOAD_OFFSET) {
+ *(.kernel.data.read_mostly)
}
. = ALIGN(PAGE_SIZE);
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
}
--- gc.0/arch/s390/include/asm/cache.h Sun Aug 24 23:32:17 2008
+++ gc.2/arch/s390/include/asm/cache.h Sun Aug 24 23:53:17 2008
@@ -14,6 +14,6 @@
#define L1_CACHE_BYTES 256
#define L1_CACHE_SHIFT 8
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#endif
--- gc.0/arch/s390/kernel/head.S Wed Jul 16 23:11:14 2008
+++ gc.2/arch/s390/kernel/head.S Sun Aug 24 23:53:53 2008
@@ -35,7 +35,7 @@
#define ARCH_OFFSET 0
#endif
-.section ".text.head","ax"
+.section ".kernel.text.head","ax"
#ifndef CONFIG_IPL
.org 0
.long 0x00080000,0x80000000+startup # Just a restart PSW
--- gc.0/arch/s390/kernel/init_task.c Wed Jul 16 23:11:14 2008
+++ gc.2/arch/s390/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -31,7 +31,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/s390/kernel/vmlinux.lds.S Wed Jul 16 23:11:14 2008
+++ gc.2/arch/s390/kernel/vmlinux.lds.S Sun Aug 24 23:53:53 2008
@@ -28,7 +28,7 @@
. = 0x00000000;
.text : {
_text = .; /* Text and read-only data */
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -65,30 +65,30 @@
. = ALIGN(PAGE_SIZE);
.data_nosave : {
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
}
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
. = ALIGN(PAGE_SIZE);
- .data.page_aligned : {
- *(.data.idt)
+ .kernel.data.page_aligned : {
+ *(.kernel.data.idt)
}
. = ALIGN(0x100);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
. = ALIGN(0x100);
- .data.read_mostly : {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : {
+ *(.kernel.data.read_mostly)
}
_edata = .; /* End of data section */
. = ALIGN(2 * PAGE_SIZE); /* init_task */
- .data.init_task : {
- *(.data.init_task)
+ .kernel.data.init_task : {
+ *(.kernel.data.init_task)
}
/* will be freed after init */
--- gc.0/arch/sh/include/asm/cache.h Sun Aug 24 23:32:18 2008
+++ gc.2/arch/sh/include/asm/cache.h Sun Aug 24 23:53:17 2008
@@ -14,7 +14,7 @@
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#ifndef __ASSEMBLY__
struct cache_info {
--- gc.0/arch/sh/kernel/cpu/sh5/entry.S Sun Aug 24 23:32:19 2008
+++ gc.2/arch/sh/kernel/cpu/sh5/entry.S Sun Aug 24 23:53:57 2008
@@ -2064,10 +2064,10 @@
/*
- * --- .text.init Section
+ * --- .kernel.text.init Section
*/
- .section .text.init, "ax"
+ .section .kernel.text.init, "ax"
/*
* void trap_init (void)
--- gc.0/arch/sh/kernel/head_32.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sh/kernel/head_32.S Sun Aug 24 23:53:53 2008
@@ -40,7 +40,7 @@
1:
.skip PAGE_SIZE - empty_zero_page - 1b
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
/*
* Condition at the entry of _stext:
--- gc.0/arch/sh/kernel/head_64.S Sun Aug 24 23:32:19 2008
+++ gc.2/arch/sh/kernel/head_64.S Sun Aug 24 23:53:53 2008
@@ -110,7 +110,7 @@
fpu_in_use: .quad 0
- .section .text.head, "ax"
+ .section .kernel.text.head, "ax"
.balign L1_CACHE_BYTES
/*
* Condition at the entry of __stext:
--- gc.0/arch/sh/kernel/init_task.c Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sh/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -22,7 +22,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
--- gc.0/arch/sh/kernel/irq.c Sun Aug 24 23:32:19 2008
+++ gc.2/arch/sh/kernel/irq.c Sun Aug 24 23:54:26 2008
@@ -158,10 +158,10 @@
#ifdef CONFIG_IRQSTACKS
static char softirq_stack[NR_CPUS * THREAD_SIZE]
- __attribute__((__section__(".bss.page_aligned")));
+ __attribute__((__section__(".bss.kernel.page_aligned")));
static char hardirq_stack[NR_CPUS * THREAD_SIZE]
- __attribute__((__section__(".bss.page_aligned")));
+ __attribute__((__section__(".bss.kernel.page_aligned")));
/*
* allocate per-cpu stacks for hardirq and for softirq processing
--- gc.0/arch/sh/kernel/vmlinux_32.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sh/kernel/vmlinux_32.lds.S Sun Aug 24 23:54:26 2008
@@ -28,7 +28,7 @@
} = 0
.text : {
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -58,19 +58,19 @@
. = ALIGN(THREAD_SIZE);
.data : { /* Data */
- *(.data.init_task)
+ *(.kernel.data.init_task)
. = ALIGN(L1_CACHE_BYTES);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
. = ALIGN(L1_CACHE_BYTES);
- *(.data.read_mostly)
+ *(.kernel.data.read_mostly)
. = ALIGN(PAGE_SIZE);
- *(.data.page_aligned)
+ *(.kernel.data.page_aligned)
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
@@ -128,7 +128,7 @@
.bss : {
__init_end = .;
__bss_start = .; /* BSS */
- *(.bss.page_aligned)
+ *(.bss.kernel.page_aligned)
*(.bss)
*(COMMON)
. = ALIGN(4);
--- gc.0/arch/sh/kernel/vmlinux_64.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sh/kernel/vmlinux_64.lds.S Sun Aug 24 23:54:26 2008
@@ -42,7 +42,7 @@
} = 0
.text : C_PHYS(.text) {
- *(.text.head)
+ *(.kernel.text.head)
TEXT_TEXT
*(.text64)
*(.text..SHmedia32)
@@ -70,19 +70,19 @@
. = ALIGN(THREAD_SIZE);
.data : C_PHYS(.data) { /* Data */
- *(.data.init_task)
+ *(.kernel.data.init_task)
. = ALIGN(L1_CACHE_BYTES);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
. = ALIGN(L1_CACHE_BYTES);
- *(.data.read_mostly)
+ *(.kernel.data.read_mostly)
. = ALIGN(PAGE_SIZE);
- *(.data.page_aligned)
+ *(.kernel.data.page_aligned)
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
@@ -140,7 +140,7 @@
.bss : C_PHYS(.bss) {
__init_end = .;
__bss_start = .; /* BSS */
- *(.bss.page_aligned)
+ *(.bss.kernel.page_aligned)
*(.bss)
*(COMMON)
. = ALIGN(4);
--- gc.0/arch/sparc/boot/btfixupprep.c Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sparc/boot/btfixupprep.c Sun Aug 24 23:53:48 2008
@@ -171,7 +171,7 @@
}
} else if (buffer[nbase+4] != '_')
continue;
- if (!strcmp (sect, ".text.exit"))
+ if (!strcmp (sect, ".kernel.text.exit"))
continue;
if (strcmp (sect, ".text") &&
strcmp (sect, ".init.text") &&
@@ -325,7 +325,7 @@
(*rr)->next = NULL;
}
printf("! Generated by btfixupprep. Do not edit.\n\n");
- printf("\t.section\t\".data.init\",#alloc,#write\n\t.align\t4\n\n");
+ printf("\t.section\t\".kernel.data.init\",#alloc,#write\n\t.align\t4\n\n");
printf("\t.global\t___btfixup_start\n___btfixup_start:\n\n");
for (i = 0; i < last; i++) {
f = array + i;
--- gc.0/arch/sparc/include/asm/cache.h Sun Aug 24 23:32:19 2008
+++ gc.2/arch/sparc/include/asm/cache.h Sun Aug 24 23:53:17 2008
@@ -19,7 +19,7 @@
#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#ifdef CONFIG_SPARC32
#include <asm/asi.h>
--- gc.0/arch/sparc/kernel/head.S Sun Aug 24 23:32:19 2008
+++ gc.2/arch/sparc/kernel/head.S Sun Aug 24 23:53:58 2008
@@ -741,7 +741,7 @@
nop
/* The code above should be at beginning and we have to take care about
- * short jumps, as branching to .text.init section from .text is usually
+ * short jumps, as branching to .kernel.text.init section from .text is usually
* impossible */
__INIT
/* Acquire boot time privileged register values, this will help debugging.
--- gc.0/arch/sparc/kernel/vmlinux.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sparc/kernel/vmlinux.lds.S Sun Aug 24 23:53:17 2008
@@ -86,12 +86,12 @@
. = ALIGN(PAGE_SIZE);
__init_end = .;
. = ALIGN(32);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
. = ALIGN(32);
- .data.read_mostly : {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : {
+ *(.kernel.data.read_mostly)
}
__bss_start = .;
--- gc.0/arch/sparc64/kernel/head.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sparc64/kernel/head.S Sun Aug 24 23:53:58 2008
@@ -466,7 +466,7 @@
jmpl %g2 + %g0, %g0
nop
- .section .text.init.refok
+ .section .kernel.text.init.refok
sun4u_init:
BRANCH_IF_SUN4V(g1, sun4v_init)
--- gc.0/arch/sparc64/kernel/vmlinux.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/sparc64/kernel/vmlinux.lds.S Sun Aug 24 23:53:17 2008
@@ -32,12 +32,12 @@
*(.data1)
}
. = ALIGN(64);
- .data.cacheline_aligned : {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : {
+ *(.kernel.data.cacheline_aligned)
}
. = ALIGN(64);
- .data.read_mostly : {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : {
+ *(.kernel.data.read_mostly)
}
_edata = .;
PROVIDE (edata = .);
--- gc.0/arch/um/kernel/dyn.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/um/kernel/dyn.lds.S Sun Aug 24 23:52:49 2008
@@ -97,9 +97,9 @@
.fini_array : { *(.fini_array) }
.data : {
. = ALIGN(KERNEL_STACK_SIZE); /* init_task */
- *(.data.init_task)
+ *(.kernel.data.init_task)
. = ALIGN(KERNEL_STACK_SIZE);
- *(.data.init_irqstack)
+ *(.kernel.data.init_irqstack)
DATA_DATA
*(.data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
--- gc.0/arch/um/kernel/init_task.c Wed Jul 16 23:11:15 2008
+++ gc.2/arch/um/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -35,9 +35,9 @@
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
union thread_union cpu0_irqstack
- __attribute__((__section__(".data.init_irqstack"))) =
+ __attribute__((__section__(".kernel.data.init_irqstack"))) =
{ INIT_THREAD_INFO(init_task) };
--- gc.0/arch/um/kernel/uml.lds.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/um/kernel/uml.lds.S Sun Aug 24 23:52:49 2008
@@ -53,9 +53,9 @@
.data :
{
. = ALIGN(KERNEL_STACK_SIZE); /* init_task */
- *(.data.init_task)
+ *(.kernel.data.init_task)
. = ALIGN(KERNEL_STACK_SIZE);
- *(.data.init_irqstack)
+ *(.kernel.data.init_irqstack)
DATA_DATA
*(.gnu.linkonce.d*)
CONSTRUCTORS
--- gc.0/arch/x86/boot/compressed/head_32.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/boot/compressed/head_32.S Sun Aug 24 23:53:53 2008
@@ -29,7 +29,7 @@
#include <asm/boot.h>
#include <asm/asm-offsets.h>
-.section ".text.head","ax",@progbits
+.section ".kernel.text.head","ax",@progbits
.globl startup_32
startup_32:
--- gc.0/arch/x86/boot/compressed/head_64.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/boot/compressed/head_64.S Mon Aug 25 00:19:49 2008
@@ -33,7 +33,7 @@
#include <asm/processor-flags.h>
#include <asm/asm-offsets.h>
-.section ".text.head"
+.section ".kernel.text.head","ax",@progbits
.code32
.globl startup_32
--- gc.0/arch/x86/boot/compressed/vmlinux.scr Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/boot/compressed/vmlinux.scr Sun Aug 24 23:53:35 2008
@@ -1,6 +1,6 @@
SECTIONS
{
- .rodata.compressed : {
+ .kernel.rodata.compressed : {
input_len = .;
LONG(input_data_end - input_data) input_data = .;
*(.data)
--- gc.0/arch/x86/boot/compressed/vmlinux_32.lds Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/boot/compressed/vmlinux_32.lds Mon Aug 25 00:19:49 2008
@@ -7,13 +7,13 @@
* address 0.
*/
. = 0;
- .text.head : {
+ .kernel.text.head : {
_head = . ;
- *(.text.head)
+ *(.kernel.text.head)
_ehead = . ;
}
- .rodata.compressed : {
- *(.rodata.compressed)
+ .kernel.rodata.compressed : {
+ *(.kernel.rodata.compressed)
}
.text : {
_text = .; /* Text */
@@ -40,4 +40,6 @@
*(COMMON)
_end = . ;
}
+ /* Be bold, and discard everything not explicitly mentioned */
+ /DISCARD/ : { *(*) }
}
--- gc.0/arch/x86/boot/compressed/vmlinux_64.lds Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/boot/compressed/vmlinux_64.lds Mon Aug 25 00:19:49 2008
@@ -7,13 +7,13 @@
* address 0.
*/
. = 0;
- .text.head : {
+ .kernel.text.head : {
_head = . ;
- *(.text.head)
+ *(.kernel.text.head)
_ehead = . ;
}
- .rodata.compressed : {
- *(.rodata.compressed)
+ .kernel.rodata.compressed : {
+ *(.kernel.rodata.compressed)
}
.text : {
_text = .; /* Text */
@@ -45,4 +45,6 @@
. = . + 4096 * 6;
_ebss = .;
}
+ /* Be bold, and discard everything not explicitly mentioned */
+ /DISCARD/ : { *(*) }
}
--- gc.0/arch/x86/kernel/acpi/wakeup_32.S Wed Jul 16 23:11:15 2008
+++ gc.2/arch/x86/kernel/acpi/wakeup_32.S Sun Aug 24 23:54:12 2008
@@ -1,4 +1,4 @@
- .section .text.page_aligned
+ .section .kernel.text.page_aligned
#include <linux/linkage.h>
#include <asm/segment.h>
#include <asm/page.h>
--- gc.0/arch/x86/kernel/head_32.S Sun Aug 24 23:32:19 2008
+++ gc.2/arch/x86/kernel/head_32.S Sun Aug 24 23:54:26 2008
@@ -81,7 +81,7 @@
* any particular GDT layout, because we load our own as soon as we
* can.
*/
-.section .text.head,"ax",@progbits
+.section .kernel.text.head,"ax",@progbits
ENTRY(startup_32)
/* test KEEP_SEGMENTS flag to see if the bootloader is asking
us to not reload segments */
@@ -613,7 +613,7 @@
/*
* BSS section
*/
-.section ".bss.page_aligned","wa"
+.section ".bss.kernel.page_aligned","wa"
.align PAGE_SIZE_asm
#ifdef CONFIG_X86_PAE
swapper_pg_pmd:
@@ -630,7 +630,7 @@
* This starts the data section.
*/
#ifdef CONFIG_X86_PAE
-.section ".data.page_aligned","wa"
+.section ".kernel.data.page_aligned","wa"
/* Page-aligned for the benefit of paravirt? */
.align PAGE_SIZE_asm
ENTRY(swapper_pg_dir)
--- gc.0/arch/x86/kernel/head_64.S Sun Aug 24 23:32:19 2008
+++ gc.2/arch/x86/kernel/head_64.S Mon Aug 25 00:19:49 2008
@@ -40,7 +40,7 @@
L3_START_KERNEL = pud_index(__START_KERNEL_map)
.text
- .section .text.head
+ .section .kernel.text.head,"ax",@progbits
.code64
.globl startup_64
startup_64:
@@ -414,7 +414,7 @@
ENTRY(idt_table)
.skip 256 * 16
- .section .bss.page_aligned, "aw", @nobits
+ .section .bss.kernel.page_aligned, "aw", @nobits
.align PAGE_SIZE
ENTRY(empty_zero_page)
.skip PAGE_SIZE
--- gc.0/arch/x86/kernel/init_task.c Wed Jul 16 23:11:16 2008
+++ gc.2/arch/x86/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -24,7 +24,7 @@
* "init_task" linker map entry..
*/
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
/*
@@ -38,7 +38,7 @@
/*
* per-CPU TSS segments. Threads are completely 'soft' on Linux,
* no more per-task TSS's. The TSS size is kept cacheline-aligned
- * so they are allowed to end up in the .data.cacheline_aligned
+ * so they are allowed to end up in the .kernel.data.cacheline_aligned
* section. Since TSS's are completely CPU-local, we want them
* on exact cacheline boundaries, to eliminate cacheline ping-pong.
*/
--- gc.0/arch/x86/kernel/traps_32.c Sun Aug 24 23:32:20 2008
+++ gc.2/arch/x86/kernel/traps_32.c Sun Aug 24 23:52:45 2008
@@ -76,7 +76,7 @@
* for this.
*/
gate_desc idt_table[256]
- __attribute__((__section__(".data.idt"))) = { { { { 0, 0 } } }, };
+ __attribute__((__section__(".kernel.data.idt"))) = { { { { 0, 0 } } }, };
int panic_on_unrecovered_nmi;
int kstack_depth_to_print = 24;
--- gc.0/arch/x86/kernel/vmlinux_32.lds.S Sun Aug 24 23:32:20 2008
+++ gc.2/arch/x86/kernel/vmlinux_32.lds.S Sun Aug 24 23:54:26 2008
@@ -31,15 +31,15 @@
. = LOAD_OFFSET + LOAD_PHYSICAL_ADDR;
phys_startup_32 = startup_32 - LOAD_OFFSET;
- .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
+ .kernel.text.head : AT(ADDR(.kernel.text.head) - LOAD_OFFSET) {
_text = .; /* Text and read-only data */
- *(.text.head)
+ *(.kernel.text.head)
} :text = 0x9090
/* read-only */
.text : AT(ADDR(.text) - LOAD_OFFSET) {
. = ALIGN(PAGE_SIZE); /* not really needed, already page aligned */
- *(.text.page_aligned)
+ *(.kernel.text.page_aligned)
TEXT_TEXT
SCHED_TEXT
LOCK_TEXT
@@ -70,32 +70,32 @@
. = ALIGN(PAGE_SIZE);
.data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
__nosave_begin = .;
- *(.data.nosave)
+ *(.kernel.data.nosave)
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
}
. = ALIGN(PAGE_SIZE);
- .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
- *(.data.page_aligned)
- *(.data.idt)
+ .kernel.data.page_aligned : AT(ADDR(.kernel.data.page_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.page_aligned)
+ *(.kernel.data.idt)
}
. = ALIGN(32);
- .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : AT(ADDR(.kernel.data.cacheline_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.cacheline_aligned)
}
/* rarely changed data like cpu maps */
. = ALIGN(32);
- .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : AT(ADDR(.kernel.data.read_mostly) - LOAD_OFFSET) {
+ *(.kernel.data.read_mostly)
_edata = .; /* End of data section */
}
. = ALIGN(THREAD_SIZE); /* init_task */
- .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
- *(.data.init_task)
+ .kernel.data.init_task : AT(ADDR(.kernel.data.init_task) - LOAD_OFFSET) {
+ *(.kernel.data.init_task)
}
/* might get freed after init */
@@ -178,10 +178,10 @@
}
#endif
. = ALIGN(PAGE_SIZE);
- .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
+ .kernel.data.percpu : AT(ADDR(.kernel.data.percpu) - LOAD_OFFSET) {
__per_cpu_start = .;
- *(.data.percpu)
- *(.data.percpu.shared_aligned)
+ *(.kernel.data.percpu)
+ *(.kernel.data.percpu.shared_aligned)
__per_cpu_end = .;
}
. = ALIGN(PAGE_SIZE);
@@ -190,7 +190,7 @@
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
__init_end = .;
__bss_start = .; /* BSS */
- *(.bss.page_aligned)
+ *(.bss.kernel.page_aligned)
*(.bss)
. = ALIGN(4);
__bss_stop = .;
--- gc.0/arch/x86/kernel/vmlinux_64.lds.S Wed Jul 16 23:11:16 2008
+++ gc.2/arch/x86/kernel/vmlinux_64.lds.S Sun Aug 24 23:54:26 2008
@@ -28,7 +28,7 @@
_text = .; /* Text and read-only data */
.text : AT(ADDR(.text) - LOAD_OFFSET) {
/* First the code that has to be first for bootstrapping */
- *(.text.head)
+ *(.kernel.text.head)
_stext = .;
/* Then the rest */
TEXT_TEXT
@@ -62,17 +62,17 @@
. = ALIGN(PAGE_SIZE);
. = ALIGN(CONFIG_X86_L1_CACHE_BYTES);
- .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
- *(.data.cacheline_aligned)
+ .kernel.data.cacheline_aligned : AT(ADDR(.kernel.data.cacheline_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.cacheline_aligned)
}
. = ALIGN(CONFIG_X86_INTERNODE_CACHE_BYTES);
- .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
- *(.data.read_mostly)
+ .kernel.data.read_mostly : AT(ADDR(.kernel.data.read_mostly) - LOAD_OFFSET) {
+ *(.kernel.data.read_mostly)
}
#define VSYSCALL_ADDR (-10*1024*1024)
-#define VSYSCALL_PHYS_ADDR ((LOADADDR(.data.read_mostly) + SIZEOF(.data.read_mostly) + 4095) & ~(4095))
-#define VSYSCALL_VIRT_ADDR ((ADDR(.data.read_mostly) + SIZEOF(.data.read_mostly) + 4095) & ~(4095))
+#define VSYSCALL_PHYS_ADDR ((LOADADDR(.kernel.data.read_mostly) + SIZEOF(.kernel.data.read_mostly) + 4095) & ~(4095))
+#define VSYSCALL_VIRT_ADDR ((ADDR(.kernel.data.read_mostly) + SIZEOF(.kernel.data.read_mostly) + 4095) & ~(4095))
#define VLOAD_OFFSET (VSYSCALL_ADDR - VSYSCALL_PHYS_ADDR)
#define VLOAD(x) (ADDR(x) - VLOAD_OFFSET)
@@ -121,13 +121,13 @@
#undef VVIRT
. = ALIGN(THREAD_SIZE); /* init_task */
- .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
- *(.data.init_task)
+ .kernel.data.init_task : AT(ADDR(.kernel.data.init_task) - LOAD_OFFSET) {
+ *(.kernel.data.init_task)
}:data.init
. = ALIGN(PAGE_SIZE);
- .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
- *(.data.page_aligned)
+ .kernel.data.page_aligned : AT(ADDR(.kernel.data.page_aligned) - LOAD_OFFSET) {
+ *(.kernel.data.page_aligned)
}
/* might get freed after init */
@@ -215,13 +215,13 @@
. = ALIGN(PAGE_SIZE);
__nosave_begin = .;
- .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
+ .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.kernel.data.nosave) }
. = ALIGN(PAGE_SIZE);
__nosave_end = .;
__bss_start = .; /* BSS */
.bss : AT(ADDR(.bss) - LOAD_OFFSET) {
- *(.bss.page_aligned)
+ *(.bss.kernel.page_aligned)
*(.bss)
}
__bss_stop = .;
--- gc.0/arch/xtensa/kernel/head.S Wed Jul 16 23:11:16 2008
+++ gc.2/arch/xtensa/kernel/head.S Sun Aug 24 23:54:26 2008
@@ -234,7 +234,7 @@
* BSS section
*/
-.section ".bss.page_aligned", "w"
+.section ".bss.kernel.page_aligned", "w"
ENTRY(swapper_pg_dir)
.fill PAGE_SIZE, 1, 0
ENTRY(empty_zero_page)
--- gc.0/arch/xtensa/kernel/init_task.c Wed Jul 16 23:11:16 2008
+++ gc.2/arch/xtensa/kernel/init_task.c Sun Aug 24 23:52:49 2008
@@ -29,7 +29,7 @@
EXPORT_SYMBOL(init_mm);
union thread_union init_thread_union
- __attribute__((__section__(".data.init_task"))) =
+ __attribute__((__section__(".kernel.data.init_task"))) =
{ INIT_THREAD_INFO(init_task) };
struct task_struct init_task = INIT_TASK(init_task);
--- gc.0/arch/xtensa/kernel/vmlinux.lds.S Wed Jul 16 23:11:16 2008
+++ gc.2/arch/xtensa/kernel/vmlinux.lds.S Sun Aug 24 23:54:26 2008
@@ -121,14 +121,14 @@
DATA_DATA
CONSTRUCTORS
. = ALIGN(XCHAL_ICACHE_LINESIZE);
- *(.data.cacheline_aligned)
+ *(.kernel.data.cacheline_aligned)
}
_edata = .;
/* The initial task */
. = ALIGN(8192);
- .data.init_task : { *(.data.init_task) }
+ .kernel.data.init_task : { *(.kernel.data.init_task) }
/* Initialization code and data: */
@@ -259,7 +259,7 @@
/* BSS section */
_bss_start = .;
- .bss : { *(.bss.page_aligned) *(.bss) }
+ .bss : { *(.bss.kernel.page_aligned) *(.bss) }
_bss_end = .;
_end = .;
--- gc.0/include/asm-frv/init.h Wed Jul 16 23:11:44 2008
+++ gc.2/include/asm-frv/init.h Sun Aug 24 23:53:58 2008
@@ -1,12 +1,12 @@
#ifndef _ASM_INIT_H
#define _ASM_INIT_H
-#define __init __attribute__ ((__section__ (".text.init")))
-#define __initdata __attribute__ ((__section__ (".data.init")))
+#define __init __attribute__ ((__section__ (".kernel.text.init")))
+#define __initdata __attribute__ ((__section__ (".kernel.data.init")))
/* For assembly routines */
-#define __INIT .section ".text.init",#alloc,#execinstr
+#define __INIT .section ".kernel.text.init",#alloc,#execinstr
#define __FINIT .previous
-#define __INITDATA .section ".data.init",#alloc,#write
+#define __INITDATA .section ".kernel.data.init",#alloc,#write
#endif
--- gc.0/include/asm-generic/vmlinux.lds.h Sun Aug 24 23:32:36 2008
+++ gc.2/include/asm-generic/vmlinux.lds.h Mon Aug 25 00:38:41 2008
@@ -41,7 +41,7 @@
/* .data section */
#define DATA_DATA \
*(.data) \
- *(.data.init.refok) \
+ *(.kernel.data.init.refok) \
*(.ref.data) \
DEV_KEEP(init.data) \
DEV_KEEP(exit.data) \
@@ -224,8 +224,8 @@
*(.text.hot) \
*(.text) \
*(.ref.text) \
- *(.text.init.refok) \
- *(.exit.text.refok) \
+ *(.kernel.text.init.refok) \
+ *(.kernel.exit.text.refok) \
DEV_KEEP(init.text) \
DEV_KEEP(exit.text) \
CPU_KEEP(init.text) \
@@ -384,8 +384,8 @@
#define PERCPU(align) \
. = ALIGN(align); \
VMLINUX_SYMBOL(__per_cpu_start) = .; \
- .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { \
- *(.data.percpu) \
- *(.data.percpu.shared_aligned) \
+ .kernel.data.percpu : AT(ADDR(.kernel.data.percpu) - LOAD_OFFSET) { \
+ *(.kernel.data.percpu) \
+ *(.kernel.data.percpu.shared_aligned) \
} \
VMLINUX_SYMBOL(__per_cpu_end) = .;
--- gc.0/include/asm-parisc/cache.h Wed Jul 16 23:11:44 2008
+++ gc.2/include/asm-parisc/cache.h Sun Aug 24 23:53:17 2008
@@ -28,7 +28,7 @@
#define SMP_CACHE_BYTES L1_CACHE_BYTES
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
void parisc_cache_init(void); /* initializes cache-flushing */
void disable_sr_hashing_asm(int); /* low level support for above */
--- gc.0/include/asm-parisc/system.h Wed Jul 16 23:11:45 2008
+++ gc.2/include/asm-parisc/system.h Sun Aug 24 23:52:53 2008
@@ -174,7 +174,7 @@
})
#ifdef CONFIG_SMP
-# define __lock_aligned __attribute__((__section__(".data.lock_aligned")))
+# define __lock_aligned __attribute__((__section__(".kernel.data.lock_aligned")))
#endif
#define arch_align_stack(x) (x)
--- gc.0/include/asm-um/common.lds.S Wed Jul 16 23:11:45 2008
+++ gc.2/include/asm-um/common.lds.S Sun Aug 24 23:53:12 2008
@@ -49,9 +49,9 @@
}
. = ALIGN(32);
- .data.percpu : {
+ .kernel.data.percpu : {
__per_cpu_start = . ;
- *(.data.percpu)
+ *(.kernel.data.percpu)
__per_cpu_end = . ;
}
--- gc.0/include/asm-x86/cache.h Wed Jul 16 23:11:45 2008
+++ gc.2/include/asm-x86/cache.h Sun Aug 24 23:53:17 2008
@@ -5,7 +5,7 @@
#define L1_CACHE_SHIFT (CONFIG_X86_L1_CACHE_SHIFT)
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __read_mostly __attribute__((__section__(".kernel.data.read_mostly")))
#ifdef CONFIG_X86_VSMP
/* vSMP Internode cacheline shift */
@@ -13,7 +13,7 @@
#ifdef CONFIG_SMP
#define __cacheline_aligned_in_smp \
__attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) \
- __attribute__((__section__(".data.page_aligned")))
+ __attribute__((__section__(".kernel.data.page_aligned")))
#endif
#endif
--- gc.0/include/linux/cache.h Wed Jul 16 23:11:46 2008
+++ gc.2/include/linux/cache.h Sun Aug 24 23:52:30 2008
@@ -31,7 +31,7 @@
#ifndef __cacheline_aligned
#define __cacheline_aligned \
__attribute__((__aligned__(SMP_CACHE_BYTES), \
- __section__(".data.cacheline_aligned")))
+ __section__(".kernel.data.cacheline_aligned")))
#endif /* __cacheline_aligned */
#ifndef __cacheline_aligned_in_smp
--- gc.0/include/linux/init.h Sun Aug 24 23:32:36 2008
+++ gc.2/include/linux/init.h Sun Aug 24 23:53:58 2008
@@ -62,9 +62,9 @@
/* backward compatibility note
* A few places hardcode the old section names:
- * .text.init.refok
- * .data.init.refok
- * .exit.text.refok
+ * .kernel.text.init.refok
+ * .kernel.data.init.refok
+ * .kernel.exit.text.refok
* They should be converted to use the defines from this file
*/
@@ -301,7 +301,7 @@
#endif
/* Data marked not to be saved by software suspend */
-#define __nosavedata __section(.data.nosave)
+#define __nosavedata __section(.kernel.data.nosave)
/* This means "can be init if no module support, otherwise module load
may call it." */
--- gc.0/include/linux/linkage.h Wed Jul 16 23:11:46 2008
+++ gc.2/include/linux/linkage.h Sun Aug 24 23:54:26 2008
@@ -20,8 +20,8 @@
# define asmregparm
#endif
-#define __page_aligned_data __section(.data.page_aligned) __aligned(PAGE_SIZE)
-#define __page_aligned_bss __section(.bss.page_aligned) __aligned(PAGE_SIZE)
+#define __page_aligned_data __section(.kernel.data.page_aligned) __aligned(PAGE_SIZE)
+#define __page_aligned_bss __section(.bss.kernel.page_aligned) __aligned(PAGE_SIZE)
/*
* This is used by architectures to keep arguments on the stack
--- gc.0/include/linux/percpu.h Sun Aug 24 23:32:36 2008
+++ gc.2/include/linux/percpu.h Mon Aug 25 00:37:49 2008
@@ -10,13 +10,13 @@
#ifdef CONFIG_SMP
#define DEFINE_PER_CPU(type, name) \
- __attribute__((__section__(".data.percpu"))) \
+ __attribute__((__section__(".kernel.data.percpu"))) \
PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name
#ifdef MODULE
-#define SHARED_ALIGNED_SECTION ".data.percpu"
+#define SHARED_ALIGNED_SECTION ".kernel.data.percpu"
#else
-#define SHARED_ALIGNED_SECTION ".data.percpu.shared_aligned"
+#define SHARED_ALIGNED_SECTION ".kernel.data.percpu.shared_aligned"
#endif
#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \
@@ -27,7 +27,7 @@
#define DEFINE_PER_CPU(type, name) \
PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name
-#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \
+#define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \
DEFINE_PER_CPU(type, name)
#endif
--- gc.0/include/linux/spinlock.h Sun Aug 24 23:32:36 2008
+++ gc.2/include/linux/spinlock.h Sun Aug 24 23:54:07 2008
@@ -60,7 +60,7 @@
/*
* Must define these before including other files, inline functions need them
*/
-#define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME
+#define LOCK_SECTION_NAME ".kernel.text.lock."KBUILD_BASENAME
#define LOCK_SECTION_START(extra) \
".subsection 1\n\t" \
--- gc.0/kernel/module.c Sun Aug 24 23:32:37 2008
+++ gc.2/kernel/module.c Sun Aug 24 23:53:12 2008
@@ -456,7 +456,7 @@
Elf_Shdr *sechdrs,
const char *secstrings)
{
- return find_sec(hdr, sechdrs, secstrings, ".data.percpu");
+ return find_sec(hdr, sechdrs, secstrings, ".kernel.data.percpu");
}
static void percpu_modcopy(void *pcpudest, const void *from, unsigned long size)
--- gc.0/scripts/mod/modpost.c Sun Aug 24 23:32:38 2008
+++ gc.2/scripts/mod/modpost.c Sun Aug 24 23:53:58 2008
@@ -794,9 +794,9 @@
/* sections that may refer to an init/exit section with no warning */
static const char *initref_sections[] =
{
- ".text.init.refok*",
- ".exit.text.refok*",
- ".data.init.refok*",
+ ".kernel.text.init.refok*",
+ ".kernel.exit.text.refok*",
+ ".kernel.data.init.refok*",
NULL
};
@@ -915,7 +915,7 @@
* Pattern 0:
* Do not warn if funtion/data are marked with __init_refok/__initdata_refok.
* The pattern is identified by:
- * fromsec = .text.init.refok* | .data.init.refok*
+ * fromsec = .kernel.text.init.refok* | .kernel.data.init.refok*
*
* Pattern 1:
* If a module parameter is declared __initdata and permissions=0
@@ -939,8 +939,8 @@
* *probe_one, *_console, *_timer
*
* Pattern 3:
- * Whitelist all refereces from .text.head to .init.data
- * Whitelist all refereces from .text.head to .init.text
+ * Whitelist all refereces from .kernel.text.head to .init.data
+ * Whitelist all refereces from .kernel.text.head to .init.text
*
* Pattern 4:
* Some symbols belong to init section but still it is ok to reference
^ permalink raw reply
* Re: embedded rootfs utility
From: Behan Webster @ 2008-08-24 16:14 UTC (permalink / raw)
To: Michelle Konzack; +Cc: linux-embedded
In-Reply-To: <20080810151435.GG15696@tamay-dogan.net>
Michelle Konzack wrote:
> Hello Behan,
>
> Since I am running Debian GNU/Linux on my ARMs...
>
> I like to know, whether I can use it for the Atmel AT91SAM7SE, Atmel
> AT91SAM9G20, Freescale i.MX31 and NXP LH7A404 too?
>
If debian runs on those platforms, my utility should work for it.
--
Behan Webster
behanw@websterwood.com
^ permalink raw reply
* Re: [PATCH 07/10] AXFS: axfs_bdev.c
From: MinChan Kim @ 2008-08-24 8:19 UTC (permalink / raw)
To: jaredeh
Cc: Linux-kernel, linux-embedded, linux-mtd, Jörn Engel,
tim.bird, cotte, nickpiggin
In-Reply-To: <48AD010B.6030209@gmail.com>
On Thu, Aug 21, 2008 at 2:45 PM, Jared Hulbert <jaredeh@gmail.com> wrote:
> All the block device code goes here.
>
> Signed-off-by: Jared Hulbert <jaredeh@gmail.com>
> ---
> diff --git a/fs/axfs/axfs_bdev.c b/fs/axfs/axfs_bdev.c
> new file mode 100644
> index 0000000..4c6f83c
> --- /dev/null
> +++ b/fs/axfs/axfs_bdev.c
> @@ -0,0 +1,158 @@
> +/*
> + * Advanced XIP File System for Linux - AXFS
> + * Readonly, compressed, and XIP filesystem for Linux systems big and small
> + *
> + * Copyright(c) 2008 Numonyx
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * Authors:
> + * Jared Hulbert <jaredeh@gmail.com>
> + *
> + * Project url: http://axfs.sourceforge.net
> + *
> + * axfs_bdev.c -
> + * Allows axfs to use block devices or has dummy functions if block
> + * device support is compiled out of the kernel.
> + *
> + */
> +
> +#include <linux/axfs.h>
> +#include <linux/mount.h>
> +#ifdef CONFIG_BLOCK
> +#include <linux/buffer_head.h>
> +#include <linux/namei.h>
> +
> +int axfs_fill_super(struct super_block *sb, void *data, int silent);
> +
> +int axfs_get_sb_bdev(struct file_system_type *fs_type, int flags,
> + const char *dev_name, struct axfs_super *sbi,
> + struct vfsmount *mnt, int *err)
> +{
> + *err = get_sb_bdev(fs_type, flags, dev_name, sbi, axfs_fill_super, mnt);
> +
> + if (*err)
> + return FALSE;
> + return TRUE;
> +}
> +
> +void axfs_kill_block_super(struct super_block *sb)
> +{
> + kill_block_super(sb);
> +}
> +
> +/******************************************************************************
> + *
> + * axfs_copy_block_data
> + *
> + * Description: Helper function to read data from block device
> + *
> + * Parameters:
> + * (IN) sb - pointer to super block structure.
> + *
> + * (IN) dst_addr - pointer to buffer into which data is to be read.
> + *
> + * (IN) boffset - offset within block device
> + *
> + * (IN) len - length of data to be read
> + *
> + * Returns:
> + * 0 or error number
> + *
> + *****************************************************************************/
> +int axfs_copy_block(struct super_block *sb, void *dst_addr, u64 fsoffset,
> + u64 len)
> +{
> + struct axfs_super *sbi = AXFS_SB(sb);
> + u64 boffset = AXFS_FSOFFSET_2_DEVOFFSET(sbi, fsoffset);
> + u64 blocks;
> + u64 blksize = sb->s_blocksize;
> + unsigned long dst;
> + unsigned long src;
> + sector_t block;
> + size_t bytes;
> + struct buffer_head *bh;
> + u64 copied = 0;
> +
> + if (len == 0)
> + return 0;
> +
> + blocks = len / blksize;
> + if ((len % blksize) > 0)
> + blocks += 1;
blocks ??
You have to drop blocks variable since anyone don't use it.
> + while (copied < len) {
> + /* Explicit casting for ARM linker errors. */
> + block = (sector_t) boffset + (sector_t) copied;
> + block /= (sector_t) blksize;
> + bh = sb_bread(sb, block);
> + src = (unsigned long)bh->b_data;
> + dst = (unsigned long)dst_addr;
> + if (copied == 0) {
> + /* Explicit casting for ARM linker errors. */
> + bytes = (size_t) blksize;
> + bytes -= (size_t) boffset % (size_t) blksize;
> + if (bytes > len)
> + bytes = len;
> + /* Explicit casting for ARM linker errors. */
> + src += (unsigned long)boffset % (unsigned long)blksize;
> + } else {
> + dst += copied;
> + if ((len - copied) < blksize) {
> + bytes = len - copied;
> + } else {
> + bytes = blksize;
> + }
> + }
> + memcpy((void *)dst, (void *)src, bytes);
> + copied += bytes;
> + brelse(bh);
> + }
> + return 0;
> +}
> +
> +int axfs_is_dev_bdev(char *path)
> +{
> + struct nameidata nd;
> + int ret = FALSE;
> +
> + if (!path)
> + return FALSE;
> +
> + if (path_lookup(path, LOOKUP_FOLLOW, &nd))
> + return FALSE;
> +
> + if (S_ISBLK(nd.path.dentry->d_inode->i_mode))
> + ret = TRUE;
> +
> + path_put(&nd.path);
> + return ret;
> +}
> +
> +#else
> +
> +int axfs_get_sb_bdev(struct file_system_type *fs_type, int flags,
> + const char *dev_name, struct axfs_super *sbi,
> + struct vfsmount *mnt, int *err)
> +{
> + return FALSE;
> +}
> +
> +void axfs_kill_block_super(struct super_block *sb)
> +{
> +}
> +
> +int axfs_copy_block(struct super_block *sb, void *dst_addr, u64 fsoffset,
> + u64 len)
> +{
> + return -EINVAL;
> +}
> +
> +int axfs_is_dev_bdev(char *path)
> +{
> + return FALSE;
> +}
> +
> +#endif /* CONFIG_BLOCK */
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Kinds regards,
MinChan Kim
^ permalink raw reply
* Re: [PATCH 00/10] AXFS: Advanced XIP filesystem
From: Will Marone @ 2008-08-22 22:09 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird
In-Reply-To: <Pine.LNX.4.64.0808221650500.17105@vixen.sonytel.be>
Geert Uytterhoeven wrote:
> I gave AxFS a try on PS3 (ppc64, always use big-endian 64-bit for testing new
> code ;-).
> When mounting the image, I got the crash below:
>
> | attempt to access beyond end of device
> | loop0: rw=0, want=4920, limit=4912
> | Unable to handle kernel paging request for data at address 0x00000028
> | Faulting instruction address: 0xd000000000037988
> | Oops: Kernel access of bad area, sig: 11 [#1]
> | SMP NR_CPUS=2 PS3
>
> When mounting (also on PS3) an image created on ia32, I get a different crash:
>
> | axfs: wrong magic
> ^^^^^^^^^^^^^^^^^
> | Unable to handle kernel paging request for data at address 0x000003a8
> | Faulting instruction address: 0xd0000000000355f0
> | Oops: Kernel access of bad area, sig: 11 [#1]
> | SMP NR_CPUS=2 PS
Geert,
Thanks for giving it a spin, especially on a platform as different from
ours as the PS3.
Before I dig more into what happened, I was wondering if you could tell
me a bit more
about your environment, particularly how you supplied the filesystem to
the kernel and
your mount commandline (also, if you used a boot commandline, what it was.)
My first guess would be a ppc64 compiled UML session, but I'd like to be
a bit more sure.
Will Marone
^ permalink raw reply
* Re: [PATCH 05/10] AXFS: axfs_profiling.c
From: Arnd Bergmann @ 2008-08-22 20:37 UTC (permalink / raw)
To: Jared Hulbert
Cc: nickpiggin, linux-embedded, carsteno, Jörn Engel,
Linux-kernel, linux-mtd, tim.bird, David Woodhouse
In-Reply-To: <6934efce0808210755n1977e085o63b8b91e84575dc9@mail.gmail.com>
On Thursday 21 August 2008, Jared Hulbert wrote:
> 1) same mount point -
> I don't see how this works without an ioctl. I can't just make up
> files in my mounted filesystem. You expect the mounted version to
> match input to the mkfs. I'd not be happy with an ioctl. You can
> just read it.
>
> 2) sysfs -
> I agree with Carsten, I don't see how this fits in the sysfs hierarchy.
>
> 3) debugfs -
> I don't know diddly about this.
Ok, so now yet another suggestion, which may sound a little strange:
oprofilefs
I believe you can use the oprofile infrastructure to record data
about file accesses, even independent of the file system you
are looking at.
It's probably a lot of work to get it right, but I would be worth it.
Arnd <><
______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
^ permalink raw reply
* Re: [PATCH 06/10] AXFS: axfs_super.c
From: Arnd Bergmann @ 2008-08-22 19:49 UTC (permalink / raw)
To: Phillip Lougher
Cc: Jared Hulbert, Linux-kernel, linux-embedded, linux-mtd,
Jörn Engel, tim.bird, cotte, nickpiggin
In-Reply-To: <48AEF976.1010705@lougher.demon.co.uk>
On Friday 22 August 2008, Phillip Lougher wrote:
> 1. Support for > 4GB filesystems. In theory 2^64 bytes.
> 2. Compressed metadata
> 3. Inode timestamps
> 4. Hard-link support, and correct nlink counts
> 5. Sparse file support
> 6. Support for ". & ".." in readdir
> 7. Indexed directories for fast lookup
> 8. NFS exporting
> 9. No need to cache entire metadata in memory
>
> Squashfs has been optimised for block-based rotating media like hard
> disks, CDROMS. AXFS has been optimised for flash based media. Squashfs
> will outperform AXFS on rotating media, AXFS will outperform Squashfs on
> flash based media.
Ok, thanks for the list. I'm sure that sparse files are already
part of AXFS, and among the other things, I would consider some
to be AXFS bugs rather than squashfs features ("." in readdir, in
particular), but I get the point.
> Squashfs and AXFS should be seen as complementary filesystems, and there
> should be room in the Linux kernel for both.
>
> I don't see what your problem is here. I think AXFS is an extremely
> good filesystem and should be merged. But I don't see why this should
> lead to more Squashfs bashing.
Sorry, I didn't mean to be abusive. From first look, it appeared to do
everything that squashfs does, with less code, but you've made it clear
that there is need for both of them.
I would still expect axfs to replace cramfs for all practical purposes,
even though that was written by our Emperor Penguin ;-)
Arnd <><
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox