On Wed, Mar 9, 2016 at 3:36 PM, Catalin Marinas <catalin.mari...@arm.com> wrote: > On Wed, Mar 09, 2016 at 10:32:48AM +0530, Ganapatrao Kulkarni wrote: >> Commit 2f4b829c625e ("arm64: Add support for hardware updates of the >> access and dirty pte bits") introduced support for handling hardware >> updates of the access flag and dirty status. >> >> ptep_set_wrprotect is setting PTR_DIRTY if !PTE_RDONLY, >> however by design it suppose to set PTE_DIRTY >> only if (PTE_DBM && !PTE_RDONLY). This patch addes code to >> test and set accordingly. > > The reasoning behind the original code is that if !PTE_RDONLY, you have > no way to tell whether the page was written or not since it is already > writable, independent of the DBM. So by clearing the DBM bit (making the > page read-only), we need to ensure that a potential dirty state is > transferred to the software PTE_DIRTY bit. > > By checking PTE_DBM && !PTE_RDONLY, you kind of imply that you can have > a page with !PTE_DBM && !PTE_RDONLY. Given that PTE_DBM is actually > PTE_WRITE, PTE_RDONLY must always be set when !PTE_DBM. The bug may be > elsewhere not setting these bits correctly.
but i do see this macro, #define pte_hw_dirty(pte) (pte_write(pte) && !(pte_val(pte) & PTE_RDONLY)) i dont see this issue, if i comment out arm64 implementation of ptep_set_wrprotect() > >> This patch fixes BUG, >> kernel BUG at /build/linux-StrpB2/linux-4.4.0/fs/ext4/inode.c:2394! >> Internal error: Oops - BUG: 0 [#1] SMP > > Which bug is this? It's a PageWriteback() check in the for-next/core > branch. What kernel version are you using? i am using 4.4.0 > > BTW, in 4.5-rc2 we pushed commit ac15bd63bbb2 ("arm64: Honour !PTE_WRITE > in set_pte_at() for kernel mappings"), though not sure that's what you > are hitting. i have tried this patch, but issue still exist. crash log below root@ubuntu:/home/ganapat/test# [ 733.853009] kernel BUG at fs/ext4/inode.c:2394! [ 733.857533] Internal error: Oops - BUG: 0 [#1] SMP [ 733.862313] Modules linked in: ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ipt_REJECT nf_reject_ipv4 xt _CHECKSUM iptable_mangle xt_tcpudp bridge stp llc ip6table_filter ip6_tables iptable_filter ip_tables ebtable_nat ebtables x_tables ghash_ce sha2_ce sha1_ce joydev input_leds ax88179_178a us bnet gpio_keys thunderx_edac_lmc thunderx_edac_ccpi edac_core i2c_octeon nicvf shpchp uio_pdrv_genirq uio rtc_efi nls_iso8859_1 nicpf thunder_bgx hid_generic usbhid hid ahci libahci mdio_oct eon [ 733.912389] CPU: 38 PID: 573 Comm: kworker/u192:1 Not tainted 4.4.0+ #15 [ 733.919076] Hardware name: www.cavium.com ThunderX Unknown/ThunderX Unknown, BIOS 0.3 Jan 21 2016 [ 733.927940] Workqueue: writeback wb_workfn (flush-8:0) [ 733.933071] task: ffff8000f9548000 ti: ffff8000f9550000 task.ti: ffff8000f9550000 [ 733.940543] PC is at mpage_prepare_extent_to_map+0x25c/0x264 [ 733.946190] LR is at mpage_prepare_extent_to_map+0x134/0x264 [ 733.951837] pc : [<ffff8000002c2d98>] lr : [<ffff8000002c2c70>] pstate: 60400145 [ 733.959218] sp : ffff8000f9553830 [ 733.962520] x29: ffff8000f9553830 x28: 0000000000000000 [ 733.967824] x27: ffff8000f9553a00 x26: ffff8000f95538b8 [ 733.973128] x25: 0000000000000000 x24: ffff801f6ae88a38 [ 733.978431] x23: ffff8000f95538c0 x22: ffffffffffffffff [ 733.983734] x21: 0000000000004800 x20: ffff8000f95538b8 [ 733.989037] x19: ffff7c03c001eac0 x18: 0000ffffcac831f0 [ 733.994340] x17: 0000ffffaf7a9040 x16: ffff8000000c0d68 [ 733.999643] x15: 000000002fd55332 x14: 0000000000000006 [ 734.004946] x13: ffff811f65be2da0 x12: 0000000000000000 [ 734.010250] x11: 0000000000000040 x10: 0000000000000000 [ 734.015553] x9 : 0000000000000220 x8 : 0000000000000100 [ 734.020856] x7 : 0000000000001000 x6 : 0000000000001000 [ 734.026158] x5 : 0000000000000000 x4 : 0000000000000001 [ 734.031461] x3 : 000000000000014a x2 : 5fffe0000001023d [ 734.036764] x1 : ffff7c03c001eac0 x0 : 5fffe0000001023d [ 734.549044] Call trace: [ 734.551481] [<ffff8000002c2d98>] mpage_prepare_extent_to_map+0x25c/0x264 [ 734.558171] [<ffff8000002c6c48>] ext4_writepages+0x2f8/0x9e4 [ 734.563820] [<ffff8000001c44ec>] do_writepages+0x40/0x6c [ 734.569120] [<ffff800000264ecc>] __writeback_single_inode+0x5c/0x2dc [ 734.575460] [<ffff800000265644>] writeback_sb_inodes+0x20c/0x3cc [ 734.581453] [<ffff8000002658a8>] __writeback_inodes_wb+0xa4/0xe8 [ 734.587447] [<ffff800000265ad4>] wb_writeback+0x1e8/0x278 [ 734.592833] [<ffff800000266348>] wb_workfn+0x2a4/0x394 [ 734.597960] [<ffff8000000d7470>] process_one_work+0x16c/0x390 [ 734.603693] [<ffff8000000d77d0>] worker_thread+0x13c/0x42c [ 734.609168] [<ffff8000000dddfc>] kthread+0xe8/0xfc [ 734.613948] [<ffff800000085c10>] ret_from_fork+0x10/0x40 [ 734.619248] Code: 17ffffdc aa1303e0 97fbd172 17ffffb8 (d4210000) [ 734.640344] ---[ end trace 0b4626b567403558 ]--- > > -- > Catalin thanks Ganapat