Skip to content
  • Elie Richa's avatar
    PPC: Fix sync instructions problem in SMP · 4e85f82c
    Elie Richa authored
    
    
    In the current emulation of the load-and-reserve (lwarx) and
    store-conditional (stwcx.) instructions, the internal reservation
    mechanism is taken into account, however each CPU has its own
    reservation information and this information is not synchronized between
    CPUs to perform proper synchronization.
    The following test case with 2 CPUs shows that the semantics of the
    "lwarx" and "stwcx." instructions are not preserved by the emulation.
    The test case does the following :
    	- CPU0: reserve a memory location
    	- CPU1: reserve the same memory location
    	- CPU0: perform stwcx. on the location
    The last store-conditional operation succeeds while it is supposed to
    fail since the reservation was supposed to be lost at the second reserve
    operation.
    
    This (one line) patch fixes this problem in a very simple manner by
    removing the reservation of a CPU every time it is scheduled (in
    cpu_exec()). While this is a harsh workaround, it does not affect the
    guest code much because reservations are usually held for a very short
    time, that is an lwarx is almost always followed by an stwcx. a few
    instructions below. Therefore, in most cases, the reservation will be
    taken and consumed before a CPU switch occurs. However in the rare case
    where a CPU switch does occur between the lwarx and its corresponding
    stwcx.  this patch solves a potential erroneous behavior of the
    synchronization instructions.
    
    Signed-off-by: default avatarElie Richa <richa@adacore.com>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    4e85f82c