diff options
author | Jonas Bonn <jonas@southpole.se> | 2013-02-14 07:42:30 +0100 |
---|---|---|
committer | Jonas Bonn <jonas@southpole.se> | 2013-02-17 08:46:10 +0100 |
commit | 8668480eb79f0cbd79d6b584a10604d743853062 (patch) | |
tree | 2dfe1d8e3867b9bd3c474d7844423112d5ae16d0 /arch/ia64/mm | |
parent | a81252d75e14cc2cf0ee45078ef143562a0bc279 (diff) | |
download | blackbird-op-linux-8668480eb79f0cbd79d6b584a10604d743853062.tar.gz blackbird-op-linux-8668480eb79f0cbd79d6b584a10604d743853062.zip |
openrisc: update DTLB-miss handler last
The self-modifying code that updates the TLB handler at start-up has
a subtle ordering requirement: the DTLB handler must be the last thing
changed.
What I was seeing was the following:
i) The DTLB handler was updated
ii) The following printk caused a TLB miss and the look-up resulted
in the page containing itlb_vector (0xc0000a00) being bounced from
the TLB.
iii) The subsequent access to itlb_vector caused a TLB miss and reload
of the page containing itlb_vector from the page tables.
iv) But this reload of the page in iii) was being done by the "new"
DTLB-miss handler which resulted (correctly) in the page flags being
set to read-only; the subsequent write-access to itlb_vector thus
resulted in a page (access) fault.
This is easily remedied if we ensure that the boot-time DTLB-miss handler
continues running until the very last bit of self-modifying code has been
executed. This patch should ensure that the very last thing updated is the
DTLB-handler itself.
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Acked-by: Julius Baxter <juliusbaxter@gmail.com>
Tested-by: Sebastian Macke <sebastian@macke.de>
Diffstat (limited to 'arch/ia64/mm')
0 files changed, 0 insertions, 0 deletions