[RFC PATCH 0/5] Fix Thumb-2 undef handling for mixed-arch kernels
Dave Martin
dave.martin at linaro.org
Thu Aug 11 09:10:54 EDT 2011
On Wed, Aug 10, 2011 at 12:31:37PM +0100, Tixy wrote:
> On Wed, 2011-08-10 at 11:13 +0100, Dave Martin wrote:
> > As a side-effect, this also changes cpu_architecture from a
> > function into a global variable initialised at boot-time, which is
> > probably a sensible idea anyway.
>
> One possible pitfall of this is if the variable didn't get set up before
> it's first use. I have looked at all the uses and this doesn't seem to
> be a problem though.
I thought of that. I believe the code is safe as-is, but it's not too
maintenance-friendly, so...
>
> An alternative to defend against this is to make cpu_architecture() an
> inline function returning the value of the global variable like:
>
> inline int cpu_architecture(void)
> {
> BUG_ON(the_cpu_architecture == CPU_ARCH_UNKNOWN);
> return the_cpu_architecture;
> }
>
> This has the bonus of not needing to change users of the the function.
Sounds like a good idea. I got rid of the function because I didn't like
calling a function from the undef handler entry code, but an inline
function which just reads the variable seems like the best of both worlds.
I would continue to read the variable directly from the undef handler,
but this will not get called until userspace starts -- by which time the
inline C function will have been called a few times from C code.
If cpu_architecture is unexpectedly read as zero from the undef handler,
we will get some unexpected SIGILLs in userspace -- so this will get
noticed (rather than causing silent errors). However, I think the kernel
should always hit BUG() before that point is reached, if using your
suggested inline function.
As you say, it takes away a lot of the patch churn too.
I'll follow up with a revision based on this suggestion.
This also gets rid of the kprobes- and s3c24xx-specific patches.
Cheers
---Dave
More information about the linux-arm-kernel
mailing list