kernel-fxtec-pro1x/arch/x86/mm
Pekka Paalanen 340430c572 x86 mmiotrace: fix race with release_kmmio_fault_page()
There was a theoretical possibility to a race between arming a page in
post_kmmio_handler() and disarming the page in
release_kmmio_fault_page():

cpu0                             cpu1
------------------------------------------------------------------
mmiotrace shutdown
enter release_kmmio_fault_page
                                 fault on the page
                                 disarm the page
disarm the page
                                 handle the MMIO access
                                 re-arm the page
put the page on release list
remove_kmmio_fault_pages()
                                 fault on the page
                                 page not known to mmiotrace
                                 fall back to do_page_fault()
                                 *KABOOM*

(This scenario also shows the double disarm case which is allowed.)

Fixed by acquiring kmmio_lock in post_kmmio_handler() and checking
if the page is being released from mmiotrace.

Signed-off-by: Pekka Paalanen <pq@iki.fi>
Cc: Stuart Bennett <stuart@freedesktop.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-03-02 10:20:37 +01:00
..
dump_pagetables.c x86: another user of PTE_FLAGS_MASK 2008-08-20 12:38:41 +02:00
extable.c x86: unify extable_{32|64}.c 2008-01-30 13:31:41 +01:00
fault.c prevent kprobes from catching spurious page faults 2009-02-05 17:01:50 -08:00
gup.c x86: two trivial sparse annotations 2008-10-29 08:02:28 +01:00
highmem_32.c Export kmap_atomic_pfn for DRM-GEM. 2008-10-18 07:10:12 +10:00
hugetlbpage.c x86: add hugepagesz option on 64-bit 2008-07-24 10:47:19 -07:00
init_32.c x86: fix assumed to be contiguous leaf page tables for kmap_atomic region (take 2) 2009-01-16 13:47:04 +01:00
init_64.c x86: remove kernel_physical_mapping_init() from init section 2009-01-20 00:31:43 +01:00
iomap_32.c gpu/drm, x86, PAT: io_mapping_create_wc and resource_size_t 2009-02-25 13:09:51 +01:00
ioremap.c x86, pat: fix warn_on_once() while mapping 0-1MB range with /dev/mem 2009-02-12 08:27:27 +01:00
k8topology_64.c x86: k8 numa register active regions later 2009-01-06 13:21:21 +01:00
kmmio.c x86 mmiotrace: fix race with release_kmmio_fault_page() 2009-03-02 10:20:37 +01:00
Makefile Merge branches 'tracing/ftrace', 'tracing/fastboot', 'tracing/nmisafe' and 'tracing/urgent' into tracing/core 2008-11-08 09:34:35 +01:00
memtest.c x86: memtest fix use of reserve_early() 2008-10-22 17:08:06 +02:00
mmap.c x86: unify mmap_{32|64}.c 2008-01-30 13:31:10 +01:00
mmio-mod.c mmiotrace: remove left-over marker cruft 2008-10-14 10:37:17 +02:00
numa_32.c trivial: replace last usages of __FUNCTION__ in kernel 2009-01-07 15:48:54 -08:00
numa_64.c mm: clean up for early_pfn_to_nid() 2009-02-18 15:37:55 -08:00
pageattr-test.c x86: make sure the CPA test code's use of _PAGE_UNUSED1 is obvious 2008-09-05 17:09:57 +02:00
pageattr.c x86: use the right protections for split-up pagetables 2009-02-20 08:35:03 +01:00
pat.c x86, pat: fix warn_on_once() while mapping 0-1MB range with /dev/mem 2009-02-12 08:27:27 +01:00
pf_in.c x86: fix mmiotrace 8-bit register decoding 2008-10-14 10:33:50 +02:00
pf_in.h x86 mmiotrace: move files into arch/x86/mm/. 2008-05-24 11:25:37 +02:00
pgtable.c x86: pgd_{c,d}tor() cleanup 2008-09-06 19:47:09 +02:00
pgtable_32.c i386: vmalloc size fix 2008-08-21 10:13:21 +02:00
srat_32.c x86: don't call e820_regiter_active_regions if out of range on node 2008-08-14 11:35:52 +02:00
srat_64.c x86: prepare for cpumask iterators to only go to nr_cpu_ids 2008-12-16 17:40:58 -08:00
testmmiotrace.c x86: add far read test to testmmiotrace 2009-03-02 10:20:35 +01:00