Skip to content
  • Yasuaki Ishimatsu's avatar
    numa, cpu hotplug: change links of CPU and node when changing node number by onlining CPU · 34640468
    Yasuaki Ishimatsu authored
    
    
    When booting x86 system contains memoryless node, node numbers of CPUs
    on memoryless node were changed to nearest online node number by
    init_cpu_to_node() because the node is not online.
    
    In my system, node numbers of cpu#30-44 and 75-89 were changed from 2 to
    0 as follows:
    
      $ numactl --hardware
      available: 2 nodes (0-1)
      node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 30 31 32 33 34 35 36 37 38 39 40
      41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 75 76 77 78 79 80 81 82
      83 84 85 86 87 88 89
      node 0 size: 32394 MB
      node 0 free: 27898 MB
      node 1 cpus: 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 60 61 62 63 64 65 66
      67 68 69 70 71 72 73 74
      node 1 size: 32768 MB
      node 1 free: 30335 MB
    
    If we hot add memory to memoryless node and offine/online all CPUs on
    the node, node numbers of these CPUs are changed to correct node numbers
    by srat_detect_node() because the node become online.
    
    In this case, node numbers of cpu#30-44 and 75-89 were changed from 0 to
    2 in my system as follows:
    
      $ numactl --hardware
      available: 3 nodes (0-2)
      node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 45 46 47 48 49 50 51 52 53 54 55
      56 57 58 59
      node 0 size: 32394 MB
      node 0 free: 27218 MB
      node 1 cpus: 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 60 61 62 63 64 65 66
      67 68 69 70 71 72 73 74
      node 1 size: 32768 MB
      node 1 free: 30014 MB
      node 2 cpus: 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 75 76 77 78 79 80 81
      82 83 84 85 86 87 88 89
      node 2 size: 16384 MB
      node 2 free: 16384 MB
    
    But "cpu to node" and "node to cpu" links were not changed as follows:
    
      $ ls /sys/devices/system/cpu/cpu30/|grep node
      node0
      $ ls /sys/devices/system/node/node0/|grep cpu30
      cpu30
    
    "numactl --hardware" shows that cpu30 belongs to node 2.  But sysfs
    links does not change.
    
    This patch changes "cpu to node" and "node to cpu" links when node
    number changed by onlining CPU.
    
    Signed-off-by: default avatarYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
    Cc: Greg KH <greg@kroah.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    34640468