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
History
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

README.rst

back to top