Hi, there. I'm using Opatne DC memory to use it a volatile memory. Recently, I found that if sizeof(struct page) is above 64 bytes (e.g. 128 byes), `device_dax` cannot be initialized when system boots. I am aware that for some reason there is a function, `__mm_zero_struct_page`, which limits the size of struct page when it exceeds 80 bytes. However, due to the research purpose, I do not use that constraint and I'm quite certain that using different page size is usable in main memory. So, I'm wondering why this is not possible in persistent memory and which patches are related to this problem.
I will attach the system log for clarification. The test is run in linux-5.3.9 and linuxt-5.3-rc5 [ 23.493230] WARNING: CPU: 23 PID: 890 at arch/x86/mm/init_64.c:852 add_pages+0x5d/0x70 [ 23.493231] Modules linked in: device_dax(+) nd_pmem dax_pmem nd_btt dax_pmem_core skx_edac(+) rpcsec_gss_krb5 auth_rpcgss nfsv4 nfs lockd grace fscache ipmi_ssif x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm nls_iso8859_1 irqbypass intel_cstate intel_rapl_perf input_leds joydev ioatdma mei_me lpc_ich mei dca ipmi_si ipmi_devintf ipmi_msghandler nfit acpi_power_meter acpi_pad mac_hid sch _fq_codel ib_iser rdma_cm iw_cm ib_cm ib_core sunrpc iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi ip_tables x_tables autofs4 btrfs zstd_compress raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear hid_generic usbhid hid ast i2c_algo_bit drm_vram_helper ttm drm_kms_helper crct10dif_pclmul crc32_pclmul ghash_clmulni_intel syscopyarea sysfillrect aesni_intel sysimgblt fb_sys_fops aes_x86_64 crypto_simd drm i40e nvme cryptd ptp glue_helper nvme_core ahci pps_core libahci wmi [ 23.493271] CPU: 23 PID: 890 Comm: systemd-udevd Not tainted 5.3.9 #1 [ 23.493272] Hardware name: Supermicro Super Server/X11DPH-T, BIOS 3.1 05/22/2019 [ 23.493275] RIP: 0010:add_pages+0x5d/0x70 [ 23.493277] Code: 2e c0 01 76 20 48 89 15 69 2e c0 01 48 89 15 72 2e c0 01 48 c1 e2 0c 48 03 15 8f 5a 36 01 48 89 15 18 09 c0 01 5b 41 5c 5d c3 <0f> 0b eb ba 0f 1f 44 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 [ 23.493278] RSP: 0018:ffff9d75c7d73a18 EFLAGS: 00010282 [ 23.493280] RAX: 00000000fffffff4 RBX: 0000000000880000 RCX: 0000000000000000 [ 23.493281] RDX: 0000000000000020 RSI: 0000000000000020 RDI: 0000000000000282 [ 23.493282] RBP: ffff9d75c7d73a28 R08: ffff91c7c0200000 R09: 0000000000000000 [ 23.493283] R10: ffff9d75c7d73830 R11: 0000000000000000 R12: 0000000003f00000 [ 23.493283] R13: 0000000000000000 R14: ffff9d75c7d73a78 R15: 000000000000003e [ 23.493285] FS: 00007fb03c99b680(0000) GS:ffff920ebfbc0000(0000) knlGS:0000000000000000 [ 23.493286] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 23.493287] CR2: 000000c420be7010 CR3: 000000083fd82002 CR4: 00000000007606e0 [ 23.493288] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 23.493289] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 23.493289] PKRU: 55555554 [ 23.493290] Call Trace: [ 23.493295] arch_add_memory+0x41/0x50 [ 23.493300] devm_memremap_pages+0x460/0x600 [ 23.493304] dev_dax_probe+0x6a/0x180 [device_dax] [ 23.493307] really_probe+0xf5/0x3e0 [ 23.493309] driver_probe_device+0x11b/0x130 [ 23.493311] device_driver_attach+0x58/0x60 [ 23.493312] __driver_attach+0xa3/0x140 [ 23.493314] ? device_driver_attach+0x60/0x60 [ 23.493315] ? device_driver_attach+0x60/0x60 [ 23.493320] bus_for_each_dev+0x74/0xb0 [ 23.493322] ? kmem_cache_alloc_trace+0x1ff/0x210 [ 23.493324] driver_attach+0x1e/0x20 [ 23.493325] bus_add_driver+0x147/0x220 [ 23.493327] ? 0xffffffffc0e36000 [ 23.493329] driver_register+0x60/0x100 [ 23.493330] ? 0xffffffffc0e36000 [ 23.493333] __dax_driver_register+0x6c/0xa0 [ 23.493336] dax_init+0x23/0x1000 [device_dax] [ 23.493343] do_one_initcall+0x4a/0x1fa [ 23.493347] ? _cond_resched+0x19/0x40 [ 23.493349] ? kmem_cache_alloc_trace+0x3f/0x210 [ 23.493352] do_init_module+0x5f/0x227 [ 23.493360] load_module+0x244f/0x2c10 [ 23.493365] __do_sys_finit_module+0xfc/0x120 [ 23.493367] ? __do_sys_finit_module+0xfc/0x120 [ 23.493370] __x64_sys_finit_module+0x1a/0x20 [ 23.493372] do_syscall_64+0x5a/0x130 [ 23.493377] entry_SYSCALL_64_after_hwframe+0x44/0xa9 [ 23.493378] RIP: 0033:0x7fb03c4b1839 [ 23.493380] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 1f f6 2c 00 f7 d8 64 89 01 48 [ 23.493381] RSP: 002b:00007ffe4422f458 EFLAGS: 00000246 ORIG_RAX: 0000000000000139 [ 23.493382] RAX: ffffffffffffffda RBX: 000055fcfc92b130 RCX: 00007fb03c4b1839 [ 23.493383] RDX: 0000000000000000 RSI: 00007fb03c190145 RDI: 0000000000000007 [ 23.493384] RBP: 00007fb03c190145 R08: 0000000000000000 R09: 00007ffe4422f570 [ 23.493385] R10: 0000000000000007 R11: 0000000000000246 R12: 0000000000000000 [ 23.493386] R13: 000055fcfc91a830 R14: 0000000000020000 R15: 000055fcfc92b130 [ 23.493388] ---[ end trace 0a14fa412f3d5c6d ]--- [ 23.542919] device_dax: probe of dax0.0 failed with error -12 ... [ 23.564220] [ffffdbb6a7680000-ffffdbb6a77fffff] potential offnode page_structs [ 23.564230] [ffffdbb6a7d80000-ffffdbb6a7dfffff] potential offnode page_structs [ 23.564235] [ffffdbb6a8100000-ffffdbb6a81fffff] potential offnode page_structs [ 23.564240] [ffffdbb6a8480000-ffffdbb6a85fffff] potential offnode page_structs [ 23.598937] device_dax: probe of dax1.0 failed with error -12 Thanks, Won-Kyo Choe _______________________________________________ Linux-nvdimm mailing list -- linux-nvdimm@lists.01.org To unsubscribe send an email to linux-nvdimm-le...@lists.01.org