target/ppc: Flush TLB on write to PIDR
commit31b2b0f8463533c32b5ad76e73668e2e9fca8ae2
authorSuraj Jitindar Singh <sjitindarsingh@gmail.com>
Thu, 13 Apr 2017 06:02:36 +0000 (13 16:02 +1000)
committerDavid Gibson <david@gibson.dropbear.id.au>
Wed, 26 Apr 2017 02:41:56 +0000 (26 12:41 +1000)
treee39b281fda73aaf3999bad82aa820393964d84ee
parent8f37e54e5b9960151dfb16183fc1c530a0674c77
target/ppc: Flush TLB on write to PIDR

The PIDR (process id register) is used to store the id of the currently
running process, which is used to select the process table entry used to
perform address translation. This means that when we write to this register
all the translations in the TLB become outdated as they are for a
previously running process. Thus when this register is written to we need
to invalidate the TLB entries to ensure stale entries aren't used to
to perform translation for the new process, which would result in at best
segfaults or alternatively just random memory being accessed.

Signed-off-by: Suraj Jitindar Singh <sjitindarsingh@gmail.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
[dwg: Fixed compile error for 32-bit targets]
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
target/ppc/helper.h
target/ppc/misc_helper.c
target/ppc/translate_init.c