lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20130626171649.GG10333@mudshark.cambridge.arm.com>
Date:	Wed, 26 Jun 2013 18:16:49 +0100
From:	Will Deacon <will.deacon@....com>
To:	"Wang, Yalin" <Yalin.Wang@...ymobile.com>
Cc:	"'linux-kernel@...r.kernel.org'" <linux-kernel@...r.kernel.org>,
	"'linux-arch@...r.kernel.org'" <linux-arch@...r.kernel.org>,
	linux-arm-kernel@...ts.infradead.org
Subject: Re: ARM pagetable setting in Linux

[adding the ARM list -- please try and remember to do that in future]

On Wed, Jun 26, 2013 at 03:41:40AM +0100, Wang, Yalin wrote:
> Hi  Will,

Hello,

> I have a question about  arm pagetable setting in Linux .
> 
> From armV6,  there is TTBR0 and TTBR1  translation base address registers  in mmu .
> But I  found linux only use TTBR0 for translation base address ,
> Could we use TTBR0 and TTBR1 to split user task and kernel pagetables (swapper_pg_dir)? 
> 
> But I found this need set TTBCR.N   ,
> If PAGE_OFFSET==0xc0000000  ,   set TTBCR.N=0x2 ,
> Will not work , because   only ensure 0--0x00FFFFFF  MVA use TTBCR0 
> And other  MVA will use TTBCR1 ,
> But if we set PAGE_OFFSET==0x80000000  (2GB split )  ,
> And set  TTBCR.N=0x1 ,
> This will make sure user task MVA use TTBCR0 and kernel  MVA 
> Use TTBCR1 , this  will make some improvement for the system .
> 
> 1. Because we don’t need copy kernel first –level pagetables into every 
> User task’s pagetables and flush tlb (for example fork() a new process).

Well, you still need the TLB maintenance for setting up CoW, so this win is
probably not very big.

> 2. And don’t need handle kernel page fault because that user task’s kernel 
> Pagetable when it is not set up , need copy again( for example vmalloc()  ioremap()  kmap()  will change 
> Kernel pagetables and need update to every task pagetables ) .

Is that really a fastpath?

> 3. We  even can only allocate 8KB first level pagetables for user task to save 
> Memorys .

That would be a nice gain, but there are a number of factors here:

	1. Pre-ARMv6 only have one ttbr, so you'd end up needing to support
	   both configurations in the same kernel source.

	2. The module area lives below PAGE_OFFSET, so you still have to
	   deal with that correctly (mitigating some of your earlier points)

	3. PAGE_OFFSET is not fixed at 2GB, so you constrain your use-case
	   even further.

	4. We do actually use TTBR1 to hold an identity mapping at the
	   moment. This could probably be fixed, but would require some
	   thought.

There's undoubtedly other problems that haven't immediately come to me but,
all in all, I don't think this is a significant enough win to justify the
effort and maintenance headache.

Cheers,

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ