• David S. Miller's avatar
    [SPARC64]: Turn off TSB growing for now. · f4e841da
    David S. Miller authored
    There are several tricky races involved with growing the TSB.  So just
    use base-size TSBs for user contexts and we can revisit enabling this
    later.
    
    One part of the SMP problems is that tsb_context_switch() can see
    partially updated TSB configuration state if tsb_grow() is running in
    parallel.  That's easily solved with a seqlock taken as a writer by
    tsb_grow() and taken as a reader to capture all the TSB config state
    in tsb_context_switch().
    
    Then there is flush_tsb_user() running in parallel with a tsb_grow().
    In theory we could take the seqlock as a reader there too, and just
    resample the TSB pointer and reflush but that looks really ugly.
    
    Lastly, I believe there is a case with threads that results in a TSB
    entry lock bit being set spuriously which will cause the next access
    to that TSB entry to wedge the cpu (since the TSB entry lock bit will
    never clear).  It's either copy_tsb() or some bug elsewhere in the TSB
    assembly.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f4e841da
tsb.c 8.32 KB