Patch "parisc: Handle vma's whose context is not current in flush_cache_range" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
parisc: Handle vma's whose context is not current in flush_cache_range
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
parisc-handle-vma-s-whose-context-is-not-current-in-flush_cache_range.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
13d57093c141db2036364d6be35e394fc5b64728Mon Sep 17 00:00:00 2001
From: John David Anglin <[email protected]>
Date: Sun, 30 Jul 2017 16:20:19 -0400
Subject: parisc: Handle vma's whose context is not current in flush_cache_range
From: John David Anglin <[email protected]>
commit 13d57093c141db2036364d6be35e394fc5b64728 upstream.
In testing James' patch to drivers/parisc/pdc_stable.c, I hit the BUG statement in flush_cache_range() during a system shutdown:
kernel BUG at arch/parisc/kernel/cache.c:595!
CPU: 2 PID: 6532 Comm: kworker/2:0 Not tainted 4.13.0-rc2+ #1 Workqueue: events free_ioctx
IAOQ[0]: flush_cache_range+0x144/0x148
IAOQ[1]: flush_cache_page+0x0/0x1a8
RP(r2): flush_cache_range+0xec/0x148
Backtrace: [<00000000402910ac>] unmap_page_range+0x84/0x880 [<00000000402918f4>] unmap_single_vma+0x4c/0x60 [<0000000040291a18>] zap_page_range_single+0x110/0x160 [<0000000040291c34>] unmap_mapping_range+0x174/0x1a8 [<000000004026ccd8>] truncate_pagecache+0x50/0xa8 [<000000004026cd84>] truncate_setsize+0x54/0x70 [<000000004033d534>] put_aio_ring_file+0x44/0xb0 [<000000004033d5d8>] aio_free_ring+0x38/0x140 [<000000004033d714>] free_ioctx+0x34/0xa8 [<00000000401b0028>] process_one_work+0x1b8/0x4d0 [<00000000401b04f4>] worker_thread+0x1b4/0x648 [<00000000401b9128>] kthread+0x1b0/0x208 [<0000000040150020>] end_fault_vector+0x20/0x28 [<0000000040639518>] nf_ip_reroute+0x50/0xa8 [<0000000040638ed0>] nf_ip_route+0x10/0x78 [<0000000040638c90>] xfrm4_mode_tunnel_input+0x180/0x1f8 CPU: 2 PID: 6532 Comm: kworker/2:0 Not tainted 4.13.0-rc2+ #1 Workqueue: events free_ioctx Backtrace: [<0000000040163bf0>] show_stack+0x20/0x38 [<0000000040688480>] dump_stack+0xa8/0x120 [<0000000040163dc4>] die_if_kernel+0x19c/0x2b0 [<0000000040164d0c>] handle_interruption+0xa24/0xa48
This patch modifies flush_cache_range() to handle non current contexts. In as much as this occurs infrequently, the simplest approach is to flush the entire cache when this happens.
--- arch/parisc/kernel/cache.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
arch/parisc/kernel/cache.c +2 -3
@@ -604,13 +604,12 @@ void flush_cache_range(struct vm_area_stif (parisc_requires_coherency ())flush_tlb_range (vma, start, end); -if ((end - start) >= parisc_cache_flush_threshold) { +if ((end - start) >= parisc_cache_flush_threshold + || vma->vm_mm->context !=mfsp (3 )) {flush_cache_all ();return ; } -BUG_ON (vma->vm_mm->context !=mfsp (3 )); -flush_user_dcache_range_asm (start, end);if (vma->vm_flags &VM_EXEC )flush_user_icache_range_asm (start, end);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/parisc-handle-vma-s-whose-context-is-not-current-in-flush_cache_range.patch