s390/numa: add core infrastructure
Enable core NUMA support for s390 and add one simple default mode "plain" that creates one single NUMA node. This patch contains several changes from Michael Holzheu. Signed-off-by: Philipp Hachtmann <phacht@linux.vnet.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:

committed by
Martin Schwidefsky

parent
199071f108
commit
3a368f742d
@@ -62,6 +62,7 @@
|
||||
#include <asm/os_info.h>
|
||||
#include <asm/sclp.h>
|
||||
#include <asm/sysinfo.h>
|
||||
#include <asm/numa.h>
|
||||
#include "entry.h"
|
||||
|
||||
/*
|
||||
@@ -879,6 +880,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
setup_lowcore();
|
||||
smp_fill_possible_mask();
|
||||
cpu_init();
|
||||
numa_setup();
|
||||
|
||||
/*
|
||||
* Setup capabilities (ELF_HWCAP & ELF_PLATFORM).
|
||||
|
@@ -276,9 +276,9 @@ SYSCALL(sys_ni_syscall,compat_sys_s390_fadvise64_64)
|
||||
SYSCALL(sys_statfs64,compat_sys_statfs64)
|
||||
SYSCALL(sys_fstatfs64,compat_sys_fstatfs64)
|
||||
SYSCALL(sys_remap_file_pages,compat_sys_remap_file_pages)
|
||||
NI_SYSCALL /* 268 sys_mbind */
|
||||
NI_SYSCALL /* 269 sys_get_mempolicy */
|
||||
NI_SYSCALL /* 270 sys_set_mempolicy */
|
||||
SYSCALL(sys_mbind,compat_sys_mbind)
|
||||
SYSCALL(sys_get_mempolicy,compat_sys_get_mempolicy)
|
||||
SYSCALL(sys_set_mempolicy,compat_sys_set_mempolicy)
|
||||
SYSCALL(sys_mq_open,compat_sys_mq_open)
|
||||
SYSCALL(sys_mq_unlink,compat_sys_mq_unlink)
|
||||
SYSCALL(sys_mq_timedsend,compat_sys_mq_timedsend)
|
||||
@@ -295,7 +295,7 @@ SYSCALL(sys_ioprio_get,compat_sys_ioprio_get)
|
||||
SYSCALL(sys_inotify_init,sys_inotify_init)
|
||||
SYSCALL(sys_inotify_add_watch,compat_sys_inotify_add_watch) /* 285 */
|
||||
SYSCALL(sys_inotify_rm_watch,compat_sys_inotify_rm_watch)
|
||||
NI_SYSCALL /* 287 sys_migrate_pages */
|
||||
SYSCALL(sys_migrate_pages,compat_sys_migrate_pages)
|
||||
SYSCALL(sys_openat,compat_sys_openat)
|
||||
SYSCALL(sys_mkdirat,compat_sys_mkdirat)
|
||||
SYSCALL(sys_mknodat,compat_sys_mknodat) /* 290 */
|
||||
@@ -318,7 +318,7 @@ SYSCALL(sys_splice,compat_sys_splice)
|
||||
SYSCALL(sys_sync_file_range,compat_sys_s390_sync_file_range)
|
||||
SYSCALL(sys_tee,compat_sys_tee)
|
||||
SYSCALL(sys_vmsplice,compat_sys_vmsplice)
|
||||
NI_SYSCALL /* 310 sys_move_pages */
|
||||
SYSCALL(sys_move_pages,compat_sys_move_pages)
|
||||
SYSCALL(sys_getcpu,compat_sys_getcpu)
|
||||
SYSCALL(sys_epoll_pwait,compat_sys_epoll_pwait)
|
||||
SYSCALL(sys_utimes,compat_sys_utimes)
|
||||
|
@@ -18,7 +18,10 @@
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <linux/node.h>
|
||||
#include <asm/sysinfo.h>
|
||||
#include <asm/numa.h>
|
||||
|
||||
#define PTF_HORIZONTAL (0UL)
|
||||
#define PTF_VERTICAL (1UL)
|
||||
@@ -260,6 +263,7 @@ static void update_cpu_masks(void)
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&topology_lock, flags);
|
||||
numa_update_cpu_topology();
|
||||
}
|
||||
|
||||
void store_topology(struct sysinfo_15_1_x *info)
|
||||
@@ -274,21 +278,21 @@ int arch_update_cpu_topology(void)
|
||||
{
|
||||
struct sysinfo_15_1_x *info = tl_info;
|
||||
struct device *dev;
|
||||
int cpu;
|
||||
int cpu, rc = 0;
|
||||
|
||||
if (!MACHINE_HAS_TOPOLOGY) {
|
||||
update_cpu_masks();
|
||||
topology_update_polarization_simple();
|
||||
return 0;
|
||||
if (MACHINE_HAS_TOPOLOGY) {
|
||||
rc = 1;
|
||||
store_topology(info);
|
||||
tl_to_masks(info);
|
||||
}
|
||||
store_topology(info);
|
||||
tl_to_masks(info);
|
||||
update_cpu_masks();
|
||||
if (!MACHINE_HAS_TOPOLOGY)
|
||||
topology_update_polarization_simple();
|
||||
for_each_online_cpu(cpu) {
|
||||
dev = get_cpu_device(cpu);
|
||||
kobject_uevent(&dev->kobj, KOBJ_CHANGE);
|
||||
}
|
||||
return 1;
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void topology_work_fn(struct work_struct *work)
|
||||
@@ -450,7 +454,6 @@ static struct sched_domain_topology_level s390_topology[] = {
|
||||
{ cpu_thread_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
|
||||
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
|
||||
{ cpu_book_mask, SD_INIT_NAME(BOOK) },
|
||||
{ cpu_cpu_mask, SD_INIT_NAME(DIE) },
|
||||
{ NULL, },
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user