On Mon, Jun 25, 2018 at 9:31 AM, Emilio G. Cota <c...@braap.org> wrote: > Commit 0b5c91f ("translate-all: use per-page locking in !user-mode", > 2018-06-15) introduced per-page locking. It assumed that the physical > pages corresponding to a TB (at most two pages) are always distinct, > which is wrong. For instance, an xtensa test provided by Max Filippov > is broken by the commit, since the test maps two virtual pages > to the same physical page: > > virt1: 7fff, virt2: 8000 > phys1 6000fff, phys2 6000000 > > Fix it by removing the assumption from page_lock_pair. > If the two physical page addresses are equal, we only lock > the PageDesc once. Note that the two callers of page_lock_pair, > namely page_unlock_tb and tb_link_page, are also updated so that > we do not try to unlock the same PageDesc twice. > > Fixes: 0b5c91f74f3c83a36f37740969df8c775c997e69 > Reported-by: Max Filippov <jcmvb...@gmail.com> > Signed-off-by: Emilio G. Cota <c...@braap.org> > --- > accel/tcg/translate-all.c | 32 +++++++++++++++++++++++++------- > 1 file changed, 25 insertions(+), 7 deletions(-)
Tested-by: Max Filippov <jcmvb...@gmail.com> Thank you! -- Max