Re: [PATCH 0/2] New fix for icache coherency race

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paul

I guess you have run into the limitation of __update_cache() not supporting highmem pages. That could be caused by an omission in my patch that forgets to clear the PG_dcache_dirty flag in flush_icache_page. I will submit an incremental patch for this.

- Lars

> 9 apr 2015 kl. 00:53 skrev Paul Burton <paul.burton@xxxxxxxxxx>:
> 
>> On Thu, Feb 26, 2015 at 02:16:01PM +0100, Lars Persson wrote:
>> This patch set proposes an improved fix for the race condition that
>> originally was fixed in commit 2a4a8b1e5d9d ("MIPS: Remove race window
>> in page fault handling").
>> 
>> I have used the flush_icache_page API that is marked as deprecated in
>> Documentation/cachetlb.txt. There are strong reasons to keep this API
>> because it is not possible to implement an efficient and race-free
>> lazy flushing using the other APIs.
>> 
>> You can refer to a discussion about the same issue in arch/arm where
>> they chose to implement the solution in set_pte_at. In arch/mips we
>> could not do this because we lack information about the executability
>> of the mapping in set_pte_at() and thus we would have to flush all
>> pages to be safe.
>> 
>> http://lists.infradead.org/pipermail/linux-arm-kernel/2010-November/030915.html
>> 
>> Lars Persson (2):
>>  Revert "MIPS: Remove race window in page fault handling"
>>  MIPS: Fix race condition in lazy cache flushing.
> 
> FYI these 2 patches prevent a linux-next based kernel booting on the
> Ingenic JZ4780-based CI20 board. I've not yet tried on the in-tree
> JZ4740-based qi_lb60 to see whether it's also affected, nor have I yet
> figured out what's going wrong. I'll hopefully dig into it tomorrow, but
> just a heads up!
> 
> The boot failure (using an initramfs, so no DMA or much I/O at all):
> 
>    [    4.618013] Freeing unused kernel memory: 5160K (803d6000 - 808e0000)
>    [    4.625211] CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 80027924, ra == 8001db10
>    [    4.635881] Oops[#1]:
>    [    4.638149] CPU: 0 PID: 1 Comm: init Not tainted 4.0.0-rc7-next-20150408+ #334
>    [    4.645354] task: 8dc39568 ti: 8dc3a000 task.ti: 8dc3a000
>    [    4.650736] $ 0   : 00000000 00000001 00000001 00001000
>    [    4.655965] $ 4   : 00000000 00000001 808e0000 8df0b610
>    [    4.639347] $ 8   : 00000000 8d8f8160 00000000 00000000
>    [    4.644575] $12   : 00000000 00000118 00000040 ffff0000
>    [    4.649802] $16   : 81c649fc 77984000 00000004 8df013f8
>    [    4.655030] $20   : 81c649fc 00000000 00000000 00040000
>    [    4.638413] $24   : ff000000 80027920
>    [    4.643642] $28   : 8dc3a000 8dc3bd38 ffffffbf 8001db10
>    [    4.648871] Hi    : 3036f946
>    [    4.651740] Lo    : eeea49fc
>    [    4.654620] epc   : 80027924 r4k_blast_dcache_page_dc32+0x4/0x9c
>    [    4.638763]     Not tainted
>    [    4.641550] ra    : 8001db10 __update_cache+0xa4/0xd0
>    [    4.646585] Status: 10000403 KERNEL EXL IE
>    [    4.650767] Cause : 00800008
>    [    4.653634] BadVA : 00000000
>    [    4.656503] PrId  : 3ee1024f (Ingenic JZRISC)
>    [    4.639002] Process init (pid: 1, threadinfo=8dc3a000, task=8dc39568, tls=00000000)
>    [    4.646636] Stack : 3f916478 67caba37 58047621 77984000 58047621 77984000 8df0b610 800b777c
>              00400000 00031ec0 00000001 00400000 8d8f8178 8ddae840 8de8fbdc 81c649fc
>              8df013f8 8dc3be00 8de8fbe0 8008f7ac 8df09e38 8de9be40 fffffff8 8deeb000
>              00000000 00000000 00000000 00000040 803b9924 8dcd9000 77984000 800e2200
>              803ca320 800e1474 8df013f8 00000610 77984b50 00000000 8df00778 8df0b610
>              ...
>    [    4.638523] Call Trace:
>    [    4.640962] [<80027924>] r4k_blast_dcache_page_dc32+0x4/0x9c
>    [    4.646608] [<8001db10>] __update_cache+0xa4/0xd0
>    [    4.651305] [<800b777c>] do_set_pte+0x14c/0x174
>    [    4.655826] [<8008f7ac>] filemap_map_pages+0x2ac/0x384
>    [    4.639107] [<800b7a54>] handle_mm_fault+0x2b0/0x1020
>    [    4.644148] [<8001f460>] __do_page_fault+0x160/0x470
>    [    4.649102] [<80013e24>] resume_userspace_check+0x0/0x10
>    [    4.654395]
>    [    4.655876]
>    Code: 03e00008  00000000  24831000 <bc950000> bc950020  bc950040  bc950060  bc950080  bc9500a0
>    [    4.643978] ---[ end trace 672ef517bf5944f0 ]---
>    [    4.648581] Fatal exception: panic in 5 seconds
> 
> The next-20140408 based CI20 branch (currently including reverts of
> these 2 patches) if anyone wants to reproduce:
> 
>    https://github.com/paulburton/linux/tree/wip-ci20-v4.1
> 
> Thanks,
>    Paul
> 
>> arch/mips/include/asm/cacheflush.h |   35 ++++++++++++++++++++---------------
>> arch/mips/include/asm/pgtable.h    |   10 ++++++----
>> arch/mips/mm/cache.c               |   27 ++++++++-------------------
>> 3 files changed, 34 insertions(+), 38 deletions(-)
>> 
>> -- 
>> 1.7.10.4
>> 





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux