linux_dsm_epyc7002/arch/openrisc/include/asm
Stafford Horne 560b423dd9 openrisc: Call destructor during __pte_free_tlb
This fixes an issue uncovered when a recent change to add the "page
table" flag was merged.  During bootup we see many errors like the
following:

    BUG: Bad page state in process mkdir  pfn:00bae
    page:c1ff15c0 count:0 mapcount:-1024 mapping:00000000 index:0x0
    flags: 0x0()
    raw: 00000000 00000000 00000000 fffffbff 00000000 00000100 00000200 00000000
    page dumped because: nonzero mapcount
    Modules linked in:
    CPU: 0 PID: 46 Comm: mkdir Tainted: G    B             4.17.0-simple-smp-07461-g1d40a5ea01d5-dirty #993
    Call trace:
    [<(ptrval)>] show_stack+0x44/0x54
    [<(ptrval)>] dump_stack+0xb0/0xe8
    [<(ptrval)>] bad_page+0x138/0x174
    [<(ptrval)>] ? cpumask_next+0x24/0x34
    [<(ptrval)>] free_pages_check_bad+0x6c/0xd0
    [<(ptrval)>] free_pcppages_bulk+0x174/0x42c
    [<(ptrval)>] free_unref_page_commit.isra.17+0xb8/0xc8
    [<(ptrval)>] free_unref_page_list+0x10c/0x190
    [<(ptrval)>] ? set_reset_devices+0x0/0x2c
    [<(ptrval)>] release_pages+0x3a0/0x414
    [<(ptrval)>] tlb_flush_mmu_free+0x5c/0x90
    [<(ptrval)>] tlb_flush_mmu+0x90/0xa4
    [<(ptrval)>] arch_tlb_finish_mmu+0x50/0x94
    [<(ptrval)>] tlb_finish_mmu+0x30/0x64
    [<(ptrval)>] exit_mmap+0x110/0x1e0
    [<(ptrval)>] mmput+0x50/0xf0
    [<(ptrval)>] do_exit+0x274/0xa94
    [<(ptrval)>] do_group_exit+0x50/0x110
    [<(ptrval)>] __wake_up_parent+0x0/0x38
    [<(ptrval)>] _syscall_return+0x0/0x4

During the __pte_free_tlb path openrisc fails to call the page
destructor which would clear the new bits that were introduced.
To fix this we are calling the destructor.

It seem openrisc was the only architecture missing this,  all other
architectures either call the destructor like we are doing here or use
pte_free.

Note: failing to call the destructor was also messing up the zone stats
(and will be cause other problems if you were using SPLIT_PTE_PTLOCKS,
which we are not yet).

Fixes: 1d40a5ea01 ("mm: mark pages in use for page tables")
Acked-by: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Stafford Horne <shorne@gmail.com>
2018-06-25 21:49:10 +09:00
..
bitops openrisc: add atomic bitops 2017-02-25 04:12:38 +09:00
asm-offsets.h OpenRISC: Headers 2011-07-22 18:46:39 +02:00
atomic.h openrisc: add optimized atomic operations 2017-02-25 04:14:06 +09:00
bitops.h openrisc: add atomic bitops 2017-02-25 04:12:38 +09:00
cache.h openrisc: Define __ro_after_init to avoid crash 2016-11-06 08:01:12 -08:00
cacheflush.h openrisc: add cacheflush support to fix icache aliasing 2017-11-03 14:01:15 +09:00
cmpxchg.h openrisc: add 1 and 2 byte cmpxchg support 2017-11-03 14:01:12 +09:00
cpuinfo.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
delay.h OpenRISC: Headers 2011-07-22 18:46:39 +02:00
dma-mapping.h kmemcheck: remove annotations 2017-11-15 18:21:04 -08:00
elf.h default SET_PERSONALITY() in linux/elf.h 2013-02-26 02:46:08 -05:00
fixmap.h openrisc: explicitly include linux/bug.h in asm/fixmap.h 2017-07-08 04:35:17 +09:00
futex.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
io.h openrisc: add ioremap_nocache declaration before include asm-generic/io.h and sync ioremap prototype with it. 2018-02-22 10:44:30 +08:00
irq.h openrisc: Get rid of handle_IRQ 2014-09-03 13:11:02 +00:00
irqflags.h OpenRISC: IRQ 2011-07-22 18:46:33 +02:00
Kbuild time: Add an asm-generic/compat.h file 2018-04-19 13:28:51 +02:00
linkage.h OpenRISC: Headers 2011-07-22 18:46:39 +02:00
mmu_context.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
mmu.h
page.h openrisc: drop wrongly typed definition of page_to_virt() 2016-04-22 10:08:34 +01:00
pgalloc.h openrisc: Call destructor during __pte_free_tlb 2018-06-25 21:49:10 +09:00
pgtable.h openrisc: add cacheflush support to fix icache aliasing 2017-11-03 14:01:15 +09:00
processor.h Construct init thread stack in the linker script rather than by union 2018-01-09 23:21:02 +00:00
ptrace.h UAPI: (Scripted) Disintegrate arch/openrisc/include/asm 2012-10-09 09:47:18 +01:00
serial.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
smp.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
spinlock_types.h openrisc: use qspinlocks and qrwlocks 2017-11-03 14:01:12 +09:00
spinlock.h openrisc: use qspinlocks and qrwlocks 2017-11-03 14:01:12 +09:00
spr_defs.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
spr.h OpenRISC: Headers 2011-07-22 18:46:39 +02:00
string.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
syscall.h ARCH: AUDIT: implement syscall_get_arch for all arches 2014-09-23 16:20:10 -04:00
syscalls.h openrisc: switch to use of generic fork and clone 2012-11-28 23:43:40 -05:00
thread_info.h Construct init thread stack in the linker script rather than by union 2018-01-09 23:21:02 +00:00
time.h openrisc: add tick timer multi-core sync logic 2017-11-03 14:01:16 +09:00
timex.h OpenRISC: Timekeeping 2011-07-22 18:46:32 +02:00
tlb.h
tlbflush.h openrisc: initial SMP support 2017-11-03 14:01:13 +09:00
uaccess.h kill strlen_user() 2017-05-15 23:40:22 -04:00
unaligned.h OpenRISC: Headers 2011-07-22 18:46:39 +02:00
unwinder.h openrisc: support framepointers and STACKTRACE_SUPPORT 2017-11-03 14:01:15 +09:00