android_kernel_xiaomi_sm8350/include/asm-powerpc
Paul Mackerras fa28237cfc [POWERPC] Provide a way to protect 4k subpages when using 64k pages
Using 64k pages on 64-bit PowerPC systems makes life difficult for
emulators that are trying to emulate an ISA, such as x86, which use a
smaller page size, since the emulator can no longer use the MMU and
the normal system calls for controlling page protections.  Of course,
the emulator can emulate the MMU by checking and possibly remapping
the address for each memory access in software, but that is pretty
slow.

This provides a facility for such programs to control the access
permissions on individual 4k sub-pages of 64k pages.  The idea is
that the emulator supplies an array of protection masks to apply to a
specified range of virtual addresses.  These masks are applied at the
level where hardware PTEs are inserted into the hardware page table
based on the Linux PTEs, so the Linux PTEs are not affected.  Note
that this new mechanism does not allow any access that would otherwise
be prohibited; it can only prohibit accesses that would otherwise be
allowed.  This new facility is only available on 64-bit PowerPC and
only when the kernel is configured for 64k pages.

The masks are supplied using a new subpage_prot system call, which
takes a starting virtual address and length, and a pointer to an array
of protection masks in memory.  The array has a 32-bit word per 64k
page to be protected; each 32-bit word consists of 16 2-bit fields,
for which 0 allows any access (that is otherwise allowed), 1 prevents
write accesses, and 2 or 3 prevent any access.

Implicit in this is that the regions of the address space that are
protected are switched to use 4k hardware pages rather than 64k
hardware pages (on machines with hardware 64k page support).  In fact
the whole process is switched to use 4k hardware pages when the
subpage_prot system call is used, but this could be improved in future
to switch only the affected segments.

The subpage protection bits are stored in a 3 level tree akin to the
page table tree.  The top level of this tree is stored in a structure
that is appended to the top level of the page table tree, i.e., the
pgd array.  Since it will often only be 32-bit addresses (below 4GB)
that are protected, the pointers to the first four bottom level pages
are also stored in this structure (each bottom level page contains the
protection bits for 1GB of address space), so the protection bits for
addresses below 4GB can be accessed with one fewer loads than those
for higher addresses.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-01-24 10:06:01 +11:00
..
iseries [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
8xx_immap.h [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
8253pit.h
a.out.h arch: personality independent stack top 2007-07-19 10:04:45 -07:00
abs_addr.h
agp.h
asm-compat.h
atomic.h [POWERPC] Implement atomic{, 64}_{read, write}() without volatile 2007-08-17 11:01:58 +10:00
auxvec.h
backlight.h
bitops.h forbid asm/bitops.h direct inclusion 2007-10-19 11:53:41 -07:00
bootx.h
btext.h
bug.h Fix WARN_ON() on bitfield ops 2007-07-31 21:12:07 -07:00
bugs.h
byteorder.h
cache.h [POWERPC] Add __read_mostly support for powerpc 2007-07-10 22:00:56 +10:00
cacheflush.h
cell-pmu.h
cell-regs.h [POWERPC] cell: Add Cell memory controller register defs and expose it 2007-10-09 21:01:56 +10:00
checksum.h
clk_interface.h [POWERPC] clk.h interface for platforms 2007-10-03 09:11:56 +10:00
commproc.h Merge branch 'linux-2.6' 2007-12-21 22:21:08 +11:00
compat.h Introduce compat_u64 and compat_s64 types 2007-07-16 09:05:48 -07:00
cpm2.h [POWERPC] 85xx: Killed <asm/mpc85xx.h> 2007-10-11 09:14:31 -05:00
cpm.h [POWERPC] Move CPM command handling into the cpm drivers 2007-12-13 22:47:16 -06:00
cputable.h [POWERPC] Reworking machine check handling and Fix 440/440A 2007-12-23 13:11:59 -06:00
cputhreads.h [POWERPC] Cleanup SMT thread handling 2007-12-03 13:56:25 +11:00
cputime.h
current.h
dbdma.h
dcr-mmio.h Use dcr_host_t.base in dcr_unmap() 2007-10-15 14:29:49 -04:00
dcr-native.h [POWERPC] 4xx: Improve support for 4xx indirect DCRs 2007-12-23 13:12:11 -06:00
dcr-regs.h [POWERPC] 4xx: Improve support for 4xx indirect DCRs 2007-12-23 13:12:11 -06:00
dcr.h
delay.h
device.h
div64.h
dma-mapping.h [POWERPC] Implement pci_set_dma_mask() in terms of the dma_ops 2007-12-20 16:15:49 +11:00
dma.h
edac.h
eeh_event.h
eeh.h
elf.h increase AT_VECTOR_SIZE to terminate saved_auxv properly 2007-10-17 08:43:00 -07:00
emergency-restart.h
errno.h
exception.h [POWERPC] Move lowlevel runlatch calls under cpu feature control 2007-09-14 01:33:22 +10:00
fb.h fbdev: detect primary display device 2007-07-17 10:23:11 -07:00
fcntl.h
firmware.h [POWERPC] celleb: Add support for native CBE 2007-12-11 13:34:40 +11:00
floppy.h cleanup floppy.h 2007-10-17 08:42:55 -07:00
fs_pd.h [POWERPC] 85xx: Killed <asm/mpc85xx.h> 2007-10-11 09:14:31 -05:00
futex.h
grackle.h
hardirq.h
heathrow.h
highmem.h [POWERPC] Copy over headers from arch/ppc to arch/powerpc that we need 2007-08-22 22:43:29 -05:00
hvcall.h [POWERPC] Add H_ILLAN_ATTRIBUTES hcall number 2007-07-11 13:24:40 +10:00
hvconsole.h
hvcserver.h
hw_irq.h powerpc: fixup hard_irq_disable semantics 2007-05-11 08:29:34 -07:00
hydra.h [POWERPC] Copy over headers from arch/ppc to arch/powerpc that we need 2007-08-22 22:43:29 -05:00
i8259.h
ibmebus.h [POWERPC] ibmebus: Move to of_device and of_platform_driver, match eHCA and eHEA drivers 2007-10-17 22:30:08 +10:00
ide.h ide: add hwif->ack_intr hook 2007-10-20 00:32:32 +02:00
immap_86xx.h [POWERPC] 86xx: fix guts_set_dmacr() and add guts_set_pmuxcr_dma() to immap_86xx.h 2007-12-11 13:57:18 -06:00
immap_cpm2.h [POWERPC] cpm2: Infrastructure code cleanup. 2007-10-04 11:02:04 -05:00
immap_qe.h [POWERPC] qe: miscellaneous code improvements and fixes to the QE library 2007-10-08 08:38:15 -05:00
io-defs.h
io.h [POWERPC] Make isa_mem_base common to 32 and 64 bits 2007-12-11 15:43:34 +11:00
ioctl.h
ioctls.h
iommu.h [POWERPC] iommu_free_table doesn't need the device_node 2007-12-11 13:41:33 +11:00
ipcbuf.h
ipic.h [POWERPC] ipic: add new interrupts introduced by new chip 2007-12-11 13:57:18 -06:00
irq_regs.h
irq.h [POWERPC] Add an optional device_node pointer to the irq_host 2007-09-14 01:33:20 +10:00
irqflags.h
Kbuild remove include/asm-*/ipc.h 2007-10-17 08:42:55 -07:00
kdebug.h x86: optimize page faults like all other achitectures and kill notifier cruft 2007-10-16 09:42:50 -07:00
kdump.h
kexec.h
keylargo.h
kgdb.h [POWERPC] Copy over headers from arch/ppc to arch/powerpc that we need 2007-08-22 22:43:29 -05:00
kmap_types.h
kprobes.h kprobes: support kretprobe blacklist 2007-10-16 09:43:10 -07:00
libata-portmap.h
linkage.h
lmb.h [POWERPC] Update lmb.h include protection to ASM_POWERPC 2007-08-17 11:01:58 +10:00
local.h
lppaca.h [POWERPC] Donate idle CPU cycles on dedicated partitions 2007-06-14 22:29:58 +10:00
lv1call.h [POWERPC] PS3: System-bus rework 2007-06-28 19:16:38 +10:00
machdep.h [POWERPC] Implement arch disable/enable irq hooks. 2007-12-21 22:13:35 +11:00
macio.h
mc146818rtc.h
mediabay.h
mman.h
mmu_context.h remove asm/bitops.h includes 2007-10-19 11:53:41 -07:00
mmu-8xx.h [POWERPC] Split out asm-ppc/mmu.h portions for PowerPC 8xx 2007-07-03 03:00:28 -05:00
mmu-40x.h [POWERPC] 40x MMU 2007-08-20 07:28:48 -05:00
mmu-44x.h [POWERPC] Remove fixup_bigphys_addr() for arch/powerpc to avoid link error 2007-05-17 21:11:13 +10:00
mmu-fsl-booke.h [POWERPC] Split out asm-ppc/mmu.h portions for Freescale Book-E 2007-07-03 03:00:16 -05:00
mmu-hash32.h [POWERPC] Kill typedef-ed structs for hash PTEs and BATs 2007-06-14 22:30:16 +10:00
mmu-hash64.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
mmu.h [POWERPC] 40x MMU 2007-08-20 07:28:48 -05:00
mmzone.h [POWERPC] We don't define CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID 2007-05-10 21:28:13 +10:00
module.h
mpc8xx.h [POWERPC] 8xx: mpc885ads pcmcia support 2007-07-10 00:33:51 -05:00
mpc52xx_psc.h [POWERPC] Separate MPC52xx PSC FIFO registers from rest of PSC 2008-01-21 11:01:32 -07:00
mpc52xx.h [POWERPC] mpc5200: eliminate mpc52xx_*_map_*() functions. 2008-01-18 09:30:37 -07:00
mpc86xx.h [POWERPC] kill isa_{io,mem}_base definitions for !PCI 2007-06-29 01:56:43 -05:00
mpc8260.h [POWERPC] Change include protections to ASM_POWERPC 2007-05-17 21:10:15 +10:00
mpic.h [POWERPC] pasemi: Distribute interrupts evenly across cpus 2007-12-28 09:22:25 -06:00
msgbuf.h
mutex.h
namei.h
nvram.h [POWERPC] Cleanup calling mmio_nvram_init 2007-12-20 16:15:27 +11:00
of_device.h [POWERPC] Move of_device allocation into of_device.[ch] 2007-10-17 22:30:07 +10:00
of_platform.h [POWERPC] Constify the of_device_id passed to of_platform_bus_probe 2007-12-21 22:14:07 +11:00
ohare.h
oprofile_impl.h [CELL] oprofile: add support to OProfile for profiling CELL BE SPUs 2007-07-20 21:42:24 +02:00
paca.h powerpc: Remove obsolete prototype 2007-10-20 00:36:33 +02:00
page_32.h [POWERPC] Fix kmalloc alignment on non-coherent DMA platforms 2007-11-20 11:37:43 +11:00
page_64.h [POWERPC] Use 1TB segments 2007-10-12 14:05:17 +10:00
page.h fix 'dynreloc miscount' link error on Powerpc 2007-07-26 11:35:18 -07:00
param.h
parport.h
pci-bridge.h [POWERPC] iSeries: eliminate pci_dn bussubno 2008-01-17 14:57:05 +11:00
pci.h [POWERPC] Merge PCI resource allocation & assignment 2007-12-20 16:18:09 +11:00
percpu.h [POWERPC] ppc64: support CONFIG_DEBUG_PREEMPT 2007-10-03 11:48:44 +10:00
pgalloc-32.h
pgalloc-64.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
pgalloc.h
pgtable-4k.h [POWERPC] Size swapper_pg_dir correctly 2007-09-19 15:25:34 +10:00
pgtable-64k.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
pgtable-ppc32.h [POWERPC] Fix swapper_pg_dir size when CONFIG_PTE_64BIT=y on FSL_BOOKE 2007-12-06 13:11:04 -06:00
pgtable-ppc64.h ppc64: SPARSEMEM_VMEMMAP support 2007-10-16 09:42:51 -07:00
pgtable.h [POWERPC] Start factoring pgtable-ppc32.h and pgtable-ppc64.h 2007-06-14 22:30:15 +10:00
pmac_feature.h [POWERPC] Change include protections to ASM_POWERPC 2007-05-17 21:10:15 +10:00
pmac_low_i2c.h
pmac_pfunc.h
pmc.h
pmi.h [CELL] pmi: remove support for mutiple devices. 2007-07-20 21:41:34 +02:00
poll.h Consolidate asm/poll.h 2007-05-11 08:29:34 -07:00
posix_types.h
ppc_asm.h [POWERPC] Fix modpost warnings from head*.S on ppc32 2007-09-14 08:53:36 -05:00
ppc-pci.h [POWERPC] iSeries: Call iSeries_pcibios_init from setup_arch 2007-12-11 13:42:32 +11:00
processor.h [POWERPC] Use __attribute__ in asm-powerpc 2007-09-22 14:49:21 +10:00
prom.h [POWERPC] Add of_translate_dma_address 2007-12-11 15:43:35 +11:00
ps3.h [POWERPC] PS3: Add new LV1 error codes 2007-09-14 01:33:25 +10:00
ps3av.h ps3av: dont distinguish between boot' and non-boot' autodetection 2007-10-16 09:43:21 -07:00
ps3fb.h [POWERPC] PS3: Frame buffer system-bus rework 2007-06-28 19:16:42 +10:00
ps3stor.h [POWERPC] PS3: Storage Driver Core 2007-06-28 19:19:20 +10:00
pSeries_reconfig.h
ptrace.h [POWERPC] Reworking machine check handling and Fix 440/440A 2007-12-23 13:11:59 -06:00
qe_ic.h [POWERPC] QEIC: Implement pluggable handlers, fix MPIC cascading 2007-10-08 08:38:57 -05:00
qe.h [POWERPC] qe: add function qe_clock_source() 2007-12-13 22:59:27 -06:00
reg_8xx.h
reg_booke.h [POWERPC] Reworking machine check handling and Fix 440/440A 2007-12-23 13:11:59 -06:00
reg.h [POWERPC] Use SLB size from the device tree 2007-12-11 13:45:56 +11:00
resource.h
rheap.h [POWERPC] User rheap from arch/powerpc/lib 2007-05-09 23:28:17 -05:00
rtas.h Revert "[POWERPC] Fix RTAS os-term usage on kernel panic" 2007-12-03 09:39:45 +11:00
rtc.h
rwsem.h [POWERPC] Prevent direct inclusion of <asm/rwsem.h>. 2007-09-22 14:49:21 +10:00
scatterlist.h Add CONFIG_DEBUG_SG sg validation 2007-10-22 21:20:03 +02:00
seccomp.h
sections.h
semaphore.h kill DECLARE_MUTEX_LOCKED 2007-10-17 08:42:47 -07:00
sembuf.h
serial.h
setup.h
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h
smp.h Convert cpu_sibling_map to be a per cpu variable 2007-10-16 09:42:50 -07:00
smu.h [POWERPC] include/asm-powerpc/: Spelling fixes 2007-12-20 16:17:44 +11:00
socket.h
sockios.h
sparsemem.h
spinlock_types.h
spinlock.h
spu_csa.h [POWERPC] spufs: rework class 0 and 1 interrupt handling 2007-12-21 19:46:20 +11:00
spu_info.h
spu_priv1.h [POWERPC] cell: wrap master run control bit 2007-12-21 19:45:05 +11:00
spu.h [POWERPC] spufs: don't set reserved bits in spu interrupt status 2007-12-21 19:46:20 +11:00
sstep.h
stat.h
statfs.h
string.h
suspend.h
synch.h
syscalls.h [POWERPC] Consolidate sys_sigaltstack 2007-06-14 22:29:57 +10:00
systbl.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
system.h increase AT_VECTOR_SIZE to terminate saved_auxv properly 2007-10-17 08:43:00 -07:00
tce.h
termbits.h [POWERPC] Enable arbitary speed tty ioctls and split input/output speed 2007-07-10 22:03:29 +10:00
termios.h
thread_info.h remove unused TIF_NOTIFY_RESUME flag 2007-07-31 15:39:38 -07:00
time.h [POWERPC] Fix hardware IRQ time accounting problem. 2007-12-06 16:08:59 +11:00
timex.h
tlb.h [POWERPC] Include pagemap.h in asm/powerpc/tlb.h 2007-10-03 12:02:43 +10:00
tlbflush.h [POWERPC] Fix oops related to 4xx flush_tlb_page modification 2007-11-09 03:51:14 -06:00
topology.h Convert cpu_sibling_map to be a per cpu variable 2007-10-16 09:42:50 -07:00
tsi108_irq.h [POWERPC] Change include protections to ASM_POWERPC 2007-05-17 21:10:15 +10:00
tsi108_pci.h [POWERPC] Change include protections to ASM_POWERPC 2007-05-17 21:10:15 +10:00
tsi108.h
types.h remove strict ansi check from __u64 in asm/types.h 2007-10-17 08:42:53 -07:00
uaccess.h
ucc_fast.h
ucc_slow.h [POWERPC] qe: miscellaneous code improvements and fixes to the QE library 2007-10-08 08:38:15 -05:00
ucc.h [POWERPC] qe: miscellaneous code improvements and fixes to the QE library 2007-10-08 08:38:15 -05:00
ucontext.h
udbg.h [POWERPC] 4xx: Add early udbg support for 40x processors 2007-12-23 13:13:03 -06:00
uic.h
unaligned.h
uninorth.h
unistd.h [POWERPC] Provide a way to protect 4k subpages when using 64k pages 2008-01-24 10:06:01 +11:00
user.h
vdso_datapage.h [POWERPC] vdso: Fixes for cache block sizes 2007-11-20 13:56:31 +11:00
vdso.h
vga.h
vio.h [POWERPC] Clean up vio.h 2007-10-11 20:40:44 +10:00
xilinx_intc.h [POWERPC] Virtex: add xilinx interrupt controller driver 2007-10-03 07:23:14 -05:00
xmon.h
xor.h