This series fixes and extends the determination of whether or not an address is executable for LPAE translations. The main patch is 3/3, and describes the details in its commit message. Patch 1/3 prepares for patch 2/3, which is prep for 3/3, and also fixes a potential problem with checking access permissions on v6 processors when they use the simple AP format.
Changes since v3: * Remove a useless is_aa64/case1/is_user code setting wxn=0 [Peter] Changes since v2: * Collect NSTable bits into ns * Explicitly check {prot,user}_rw against PAGE_READ. !{prot,user}_rw means no read or write, but, since we can't have write without read, it also means !({prot,user}_rw & PAGE_READ). Making this explicit can reduce confusion when trying to determine with prot flag we actually care about. [Peter Maydell] Changes since v1: * There are now 3 patches instead of 5. This is due to approaching the prep patches in a different way. Most notably, simple AP format is now handled with its own function. [Peter Maydell] * A check of SCTLR_AFE is guarded with ARM_FEATURE_V6K [Peter Maydell] * All other cleanups suggested by Peter Maydell. Tested by booting Linux on mach-virt with cortex-a15 and cortex-a57 (just up to 'Unable to mount root fs'), and also with a kvm-unit-tests test. The curious can check out the unit test here [1]. Thanks in advance for reviews! drew [1] https://github.com/rhdrjones/kvm-unit-tests/commit/ee553e4bb795b0150e31c794bf8953dfb08d619a Andrew Jones (3): target-arm: convert check_ap to ap_to_rw_prot target-arm: fix get_phys_addr_v6/SCTLR_AFE access check target-arm: get_phys_addr_lpae: more xn control target-arm/helper.c | 214 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 154 insertions(+), 60 deletions(-) -- 1.9.3