Revision 18e19f195cd888f65643a77a0c6aee8f5be6439a authored by Wei Yang on 21 February 2020, 04:04:27 UTC, committed by Linus Torvalds on 21 February 2020, 19:22:15 UTC
When we use SPARSEMEM instead of SPARSEMEM_VMEMMAP, pfn_to_page() doesn't work before sparse_init_one_section() is called. This leads to a crash when hotplug memory: BUG: unable to handle page fault for address: 0000000006400000 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page PGD 0 P4D 0 Oops: 0002 [#1] SMP PTI CPU: 3 PID: 221 Comm: kworker/u16:1 Tainted: G W 5.5.0-next-20200205+ #343 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015 Workqueue: kacpi_hotplug acpi_hotplug_work_fn RIP: 0010:__memset+0x24/0x30 Code: cc cc cc cc cc cc 0f 1f 44 00 00 49 89 f9 48 89 d1 83 e2 07 48 c1 e9 03 40 0f b6 f6 48 b8 01 01 01 01 01 01 01 01 48 0f af c6 <f3> 48 ab 89 d1 f3 aa 4c 89 c8 c3 90 49 89 f9 40 88 f0 48 89 d1 f3 RSP: 0018:ffffb43ac0373c80 EFLAGS: 00010a87 RAX: ffffffffffffffff RBX: ffff8a1518800000 RCX: 0000000000050000 RDX: 0000000000000000 RSI: 00000000000000ff RDI: 0000000006400000 RBP: 0000000000140000 R08: 0000000000100000 R09: 0000000006400000 R10: 0000000000000000 R11: 0000000000000002 R12: 0000000000000000 R13: 0000000000000028 R14: 0000000000000000 R15: ffff8a153ffd9280 FS: 0000000000000000(0000) GS:ffff8a153ab00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000006400000 CR3: 0000000136fca000 CR4: 00000000000006e0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: sparse_add_section+0x1c9/0x26a __add_pages+0xbf/0x150 add_pages+0x12/0x60 add_memory_resource+0xc8/0x210 __add_memory+0x62/0xb0 acpi_memory_device_add+0x13f/0x300 acpi_bus_attach+0xf6/0x200 acpi_bus_scan+0x43/0x90 acpi_device_hotplug+0x275/0x3d0 acpi_hotplug_work_fn+0x1a/0x30 process_one_work+0x1a7/0x370 worker_thread+0x30/0x380 kthread+0x112/0x130 ret_from_fork+0x35/0x40 We should use memmap as it did. On x86 the impact is limited to x86_32 builds, or x86_64 configurations that override the default setting for SPARSEMEM_VMEMMAP. Other memory hotplug archs (arm64, ia64, and ppc) also default to SPARSEMEM_VMEMMAP=y. [dan.j.williams@intel.com: changelog update] {rppt@linux.ibm.com: changelog update] Link: http://lkml.kernel.org/r/20200219030454.4844-1-bhe@redhat.com Fixes: ba72b4c8cf60 ("mm/sparsemem: support sub-section hotplug") Signed-off-by: Wei Yang <richardw.yang@linux.intel.com> Signed-off-by: Baoquan He <bhe@redhat.com> Acked-by: David Hildenbrand <david@redhat.com> Reviewed-by: Baoquan He <bhe@redhat.com> Reviewed-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 76073c6
File | Mode | Size |
---|---|---|
.gitignore | -rw-r--r-- | 643 bytes |
Makefile | -rw-r--r-- | 10.5 KB |
Makefile.target | -rw-r--r-- | 2.5 KB |
README.rst | -rw-r--r-- | 3.1 KB |
asm_goto_workaround.h | -rw-r--r-- | 725 bytes |
bpf_insn.h | -rw-r--r-- | 5.4 KB |
bpf_load.c | -rw-r--r-- | 16.3 KB |
bpf_load.h | -rw-r--r-- | 1.6 KB |
cookie_uid_helper_example.c | -rw-r--r-- | 9.2 KB |
cpustat_kern.c | -rw-r--r-- | 7.0 KB |
cpustat_user.c | -rw-r--r-- | 4.7 KB |
do_hbm_test.sh | -rwxr-xr-x | 12.1 KB |
fds_example.c | -rw-r--r-- | 4.2 KB |
hash_func01.h | -rw-r--r-- | 1.3 KB |
hbm.c | -rw-r--r-- | 13.2 KB |
hbm.h | -rw-r--r-- | 1.2 KB |
hbm_edt_kern.c | -rw-r--r-- | 5.3 KB |
hbm_kern.h | -rw-r--r-- | 5.7 KB |
hbm_out_kern.c | -rw-r--r-- | 5.5 KB |
ibumad_kern.c | -rw-r--r-- | 3.0 KB |
ibumad_user.c | -rw-r--r-- | 2.5 KB |
lathist_kern.c | -rw-r--r-- | 2.1 KB |
lathist_user.c | -rw-r--r-- | 1.8 KB |
lwt_len_hist.sh | -rw-r--r-- | 956 bytes |
lwt_len_hist_kern.c | -rw-r--r-- | 1.9 KB |
lwt_len_hist_user.c | -rw-r--r-- | 1.7 KB |
map_perf_test_kern.c | -rw-r--r-- | 6.3 KB |
map_perf_test_user.c | -rw-r--r-- | 10.4 KB |
offwaketime_kern.c | -rw-r--r-- | 3.5 KB |
offwaketime_user.c | -rw-r--r-- | 2.4 KB |
parse_ldabs.c | -rw-r--r-- | 1.2 KB |
parse_simple.c | -rw-r--r-- | 1.3 KB |
parse_varlen.c | -rw-r--r-- | 3.4 KB |
run_cookie_uid_helper_example.sh | -rwxr-xr-x | 341 bytes |
sampleip_kern.c | -rw-r--r-- | 957 bytes |
sampleip_user.c | -rw-r--r-- | 4.2 KB |
sock_example.c | -rw-r--r-- | 2.9 KB |
sock_example.h | -rw-r--r-- | 814 bytes |
sock_flags_kern.c | -rw-r--r-- | 1.2 KB |
sockex1_kern.c | -rw-r--r-- | 661 bytes |
sockex1_user.c | -rw-r--r-- | 1.1 KB |
sockex2_kern.c | -rw-r--r-- | 4.8 KB |
sockex2_user.c | -rw-r--r-- | 1.2 KB |
sockex3_kern.c | -rw-r--r-- | 6.1 KB |
sockex3_user.c | -rw-r--r-- | 1.9 KB |
spintest_kern.c | -rw-r--r-- | 2.1 KB |
spintest_user.c | -rw-r--r-- | 1.2 KB |
syscall_nrs.c | -rw-r--r-- | 337 bytes |
syscall_tp_kern.c | -rw-r--r-- | 1.4 KB |
syscall_tp_user.c | -rw-r--r-- | 2.4 KB |
task_fd_query_kern.c | -rw-r--r-- | 416 bytes |
task_fd_query_user.c | -rw-r--r-- | 10.5 KB |
tc_l2_redirect.sh | -rwxr-xr-x | 4.9 KB |
tc_l2_redirect_kern.c | -rw-r--r-- | 6.0 KB |
tc_l2_redirect_user.c | -rw-r--r-- | 1.3 KB |
tcbpf1_kern.c | -rw-r--r-- | 2.6 KB |
tcp_basertt_kern.c | -rw-r--r-- | 1.7 KB |
tcp_bpf.readme | -rw-r--r-- | 1.1 KB |
tcp_bufs_kern.c | -rw-r--r-- | 2.1 KB |
tcp_clamp_kern.c | -rw-r--r-- | 2.7 KB |
tcp_cong_kern.c | -rw-r--r-- | 1.9 KB |
tcp_dumpstats_kern.c | -rw-r--r-- | 1.3 KB |
tcp_iw_kern.c | -rw-r--r-- | 2.2 KB |
tcp_rwnd_kern.c | -rw-r--r-- | 1.7 KB |
tcp_synrto_kern.c | -rw-r--r-- | 1.7 KB |
tcp_tos_reflect_kern.c | -rw-r--r-- | 1.8 KB |
test_cgrp2_array_pin.c | -rw-r--r-- | 2.1 KB |
test_cgrp2_attach.c | -rw-r--r-- | 4.6 KB |
test_cgrp2_sock.c | -rw-r--r-- | 6.2 KB |
test_cgrp2_sock.sh | -rwxr-xr-x | 2.9 KB |
test_cgrp2_sock2.c | -rw-r--r-- | 1.4 KB |
test_cgrp2_sock2.sh | -rwxr-xr-x | 1.5 KB |
test_cgrp2_tc.sh | -rwxr-xr-x | 4.2 KB |
test_cgrp2_tc_kern.c | -rw-r--r-- | 1.8 KB |
test_cls_bpf.sh | -rwxr-xr-x | 915 bytes |
test_current_task_under_cgroup_kern.c | -rw-r--r-- | 1.1 KB |
test_current_task_under_cgroup_user.c | -rw-r--r-- | 1.5 KB |
test_ipip.sh | -rwxr-xr-x | 5.6 KB |
test_lru_dist.c | -rw-r--r-- | 12.0 KB |
test_lwt_bpf.c | -rw-r--r-- | 6.0 KB |
test_lwt_bpf.sh | -rw-r--r-- | 9.0 KB |
test_map_in_map_kern.c | -rw-r--r-- | 3.9 KB |
test_map_in_map_user.c | -rw-r--r-- | 3.0 KB |
test_overhead_kprobe_kern.c | -rw-r--r-- | 1.1 KB |
test_overhead_raw_tp_kern.c | -rw-r--r-- | 361 bytes |
test_overhead_tp_kern.c | -rw-r--r-- | 832 bytes |
test_overhead_user.c | -rw-r--r-- | 3.6 KB |
test_override_return.sh | -rwxr-xr-x | 263 bytes |
test_probe_write_user_kern.c | -rw-r--r-- | 1.7 KB |
test_probe_write_user_user.c | -rw-r--r-- | 2.5 KB |
trace_event_kern.c | -rw-r--r-- | 2.3 KB |
trace_event_user.c | -rw-r--r-- | 7.0 KB |
trace_output_kern.c | -rw-r--r-- | 613 bytes |
trace_output_user.c | -rw-r--r-- | 1.7 KB |
tracex1_kern.c | -rw-r--r-- | 1.5 KB |
tracex1_user.c | -rw-r--r-- | 440 bytes |
tracex2_kern.c | -rw-r--r-- | 2.3 KB |
tracex2_user.c | -rw-r--r-- | 3.3 KB |
tracex3_kern.c | -rw-r--r-- | 2.1 KB |
tracex3_user.c | -rw-r--r-- | 3.1 KB |
tracex4_kern.c | -rw-r--r-- | 1.3 KB |
tracex4_user.c | -rw-r--r-- | 1.5 KB |
tracex5_kern.c | -rw-r--r-- | 2.2 KB |
tracex5_user.c | -rw-r--r-- | 1.1 KB |
tracex6_kern.c | -rw-r--r-- | 1.5 KB |
tracex6_user.c | -rw-r--r-- | 4.6 KB |
tracex7_kern.c | -rw-r--r-- | 339 bytes |
tracex7_user.c | -rw-r--r-- | 484 bytes |
xdp1_kern.c | -rw-r--r-- | 2.1 KB |
xdp1_user.c | -rw-r--r-- | 3.4 KB |
xdp2_kern.c | -rw-r--r-- | 2.4 KB |
xdp2skb_meta.sh | -rwxr-xr-x | 4.5 KB |
xdp2skb_meta_kern.c | -rw-r--r-- | 3.0 KB |
xdp_adjust_tail_kern.c | -rw-r--r-- | 3.8 KB |
xdp_adjust_tail_user.c | -rw-r--r-- | 4.7 KB |
xdp_fwd_kern.c | -rw-r--r-- | 4.5 KB |
xdp_fwd_user.c | -rw-r--r-- | 3.8 KB |
xdp_monitor_kern.c | -rw-r--r-- | 6.6 KB |
xdp_monitor_user.c | -rw-r--r-- | 17.1 KB |
xdp_redirect_cpu_kern.c | -rw-r--r-- | 16.9 KB |
xdp_redirect_cpu_user.c | -rw-r--r-- | 20.7 KB |
xdp_redirect_kern.c | -rw-r--r-- | 2.1 KB |
xdp_redirect_map_kern.c | -rw-r--r-- | 2.2 KB |
xdp_redirect_map_user.c | -rw-r--r-- | 5.4 KB |
xdp_redirect_user.c | -rw-r--r-- | 5.4 KB |
xdp_router_ipv4_kern.c | -rw-r--r-- | 4.4 KB |
xdp_router_ipv4_user.c | -rw-r--r-- | 18.4 KB |
xdp_rxq_info_kern.c | -rw-r--r-- | 3.2 KB |
xdp_rxq_info_user.c | -rw-r--r-- | 14.1 KB |
xdp_sample_pkts_kern.c | -rw-r--r-- | 1.6 KB |
xdp_sample_pkts_user.c | -rw-r--r-- | 4.1 KB |
xdp_tx_iptunnel_common.h | -rw-r--r-- | 485 bytes |
xdp_tx_iptunnel_kern.c | -rw-r--r-- | 5.6 KB |
xdp_tx_iptunnel_user.c | -rw-r--r-- | 7.5 KB |
xdpsock.h | -rw-r--r-- | 167 bytes |
xdpsock_kern.c | -rw-r--r-- | 593 bytes |
xdpsock_user.c | -rw-r--r-- | 27.8 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...