• Jonas Bonn's avatar
    openrisc: update DTLB-miss handler last · 8668480e
    Jonas Bonn authored
    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: default avatarJonas Bonn <jonas@southpole.se>
    Acked-by: default avatarJulius Baxter <juliusbaxter@gmail.com>
    Tested-by: default avatarSebastian Macke <sebastian@macke.de>
    8668480e
init.c 7.24 KB