sim-se: Handle simultaneous page faults in SE-mode multithreading
authorJiayi Huang <jyhuang91@gmail.com>
Thu, 21 Jan 2021 01:16:49 +0000 (17:16 -0800)
committerJiayi Huang <jyhuang91@gmail.com>
Fri, 22 Jan 2021 15:33:20 +0000 (15:33 +0000)
commitd9bc7858eda852d1fc5f1c9aaea75258e8cfc6d4
treed2f6c7813528f2a51ed483f0785c1c0a4865f994
parentd06a193c13320486f365118ee9f9f7ee79748b5d
sim-se: Handle simultaneous page faults in SE-mode multithreading

When running multithreaded programs in SE-mode with DerivO3CPU model,
there are cases that two or more cores have page faults on the same page
in nearby ticks (can be at the same tick) when fetching instructions
(more likely) or accessing data. When these cores try come to the commit
stage in nearby ticks/cycles, they will try to handle the faults
(without clobbering). Then the first core will ask for a physical page
frame to map with the virtual page. In the previous version, the right
next core that tries to handle the fault will hit a panic condition in
the EmulationPageTable::map(...) as the page has been mapped and this
page fault is not to clobber the existing mapping.

In this changeset, if it is found that the page has been mapped and it
is not to clobber the existing mapping, it will return without further
mapping activities as the page fault has been handled previously.

Jira Issue: https://gem5.atlassian.net/browse/GEM5-798

Change-Id: I9bb1163f9d1379c6fed9725101e4400fefdc8079
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39515
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/sim/process.cc