Re: [Bug Fix]: Do 32-bit table calculations in pre-processor

From: Jeremy Fitzhardinge
Date: Fri Jul 03 2009 - 15:30:56 EST


On 07/03/09 12:13, Michael S. Zick wrote:
> On Fri July 3 2009, Jeremy Fitzhardinge wrote:
>
>> On 07/03/09 11:38, Michael S. Zick wrote:
>>
>>> I make no claims for it at the moment - too early in the test process.
>>> Just the general observation that it takes 0.5M to describe 0.5G of ram.
>>>
>>>
>> Only if you're using 4k pages. With large pages, 1 pte can map 2M, so
>> 256 entries can map 512M, so you only need 1/2 a page of pagetable
>> (assuming PAE; if not a single entry can map 4M).
>>
>>
>
> Ah, but you can't assume that - look at your VIA-C7M tech sheet - NO PAE.
>

According to
http://www.via.com.tw/en/products/processors/c7-m/secure_by_design.jsp,
it supports NX, which means it must support PAE.

But even without PAE, it can still support PSE (large pages).

> Try ending the filename in ".S" and passing it to gcc,
> like the build system does.
>

It doesn't make any difference. After going through cpp the expression is:

# 62 "/home/jeremy/git/linux/arch/x86/kernel/head_32.S"
MAPPING_BEYOND_END = (((((1<<32) - 0xC0000000) >> 12) / 512) + 4) << 12


which will be evaluated by the assembler. The C preprocessor doesn't
evaluate expressions in the source; it only ever does substitutions and
leaves the results for the compiler/assembler to evaluate. (It evals
expressions on cpp # lines, of course, but that's not relevant here.)

J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/