Loading arch/s390/include/asm/lowcore.h +23 −25 Original line number Diff line number Diff line Loading @@ -126,16 +126,15 @@ struct _lowcore { __u32 user_exec_asce; /* 0x02ac */ /* SMP info area */ struct cpuid cpu_id; /* 0x02b0 */ __u32 cpu_nr; /* 0x02b8 */ __u32 softirq_pending; /* 0x02bc */ __u32 percpu_offset; /* 0x02c0 */ __u32 ext_call_fast; /* 0x02c4 */ __u64 int_clock; /* 0x02c8 */ __u64 clock_comparator; /* 0x02d0 */ __u32 machine_flags; /* 0x02d8 */ __u32 ftrace_func; /* 0x02dc */ __u8 pad_0x02e0[0x0300-0x02e0]; /* 0x02e0 */ __u32 cpu_nr; /* 0x02b0 */ __u32 softirq_pending; /* 0x02b4 */ __u32 percpu_offset; /* 0x02b8 */ __u32 ext_call_fast; /* 0x02bc */ __u64 int_clock; /* 0x02c0 */ __u64 clock_comparator; /* 0x02c8 */ __u32 machine_flags; /* 0x02d0 */ __u32 ftrace_func; /* 0x02d4 */ __u8 pad_0x02d8[0x0300-0x02d8]; /* 0x02d8 */ /* Interrupt response block */ __u8 irb[64]; /* 0x0300 */ Loading Loading @@ -189,14 +188,14 @@ struct _lowcore { __u32 data_exc_code; /* 0x0090 */ __u16 mon_class_num; /* 0x0094 */ __u16 per_perc_atmid; /* 0x0096 */ addr_t per_address; /* 0x0098 */ __u64 per_address; /* 0x0098 */ __u8 exc_access_id; /* 0x00a0 */ __u8 per_access_id; /* 0x00a1 */ __u8 op_access_id; /* 0x00a2 */ __u8 ar_access_id; /* 0x00a3 */ __u8 pad_0x00a4[0x00a8-0x00a4]; /* 0x00a4 */ addr_t trans_exc_code; /* 0x00a8 */ addr_t monitor_code; /* 0x00b0 */ __u64 trans_exc_code; /* 0x00a8 */ __u64 monitor_code; /* 0x00b0 */ __u16 subchannel_id; /* 0x00b8 */ __u16 subchannel_nr; /* 0x00ba */ __u32 io_int_parm; /* 0x00bc */ Loading @@ -207,7 +206,7 @@ struct _lowcore { __u32 mcck_interruption_code[2]; /* 0x00e8 */ __u8 pad_0x00f0[0x00f4-0x00f0]; /* 0x00f0 */ __u32 external_damage_code; /* 0x00f4 */ addr_t failing_storage_address; /* 0x00f8 */ __u64 failing_storage_address; /* 0x00f8 */ __u8 pad_0x0100[0x0110-0x0100]; /* 0x0100 */ __u64 breaking_event_addr; /* 0x0110 */ __u8 pad_0x0118[0x0120-0x0118]; /* 0x0118 */ Loading Loading @@ -255,17 +254,16 @@ struct _lowcore { __u64 user_exec_asce; /* 0x0318 */ /* SMP info area */ struct cpuid cpu_id; /* 0x0320 */ __u32 cpu_nr; /* 0x0328 */ __u32 softirq_pending; /* 0x032c */ __u64 percpu_offset; /* 0x0330 */ __u64 ext_call_fast; /* 0x0338 */ __u64 int_clock; /* 0x0340 */ __u64 clock_comparator; /* 0x0348 */ __u64 vdso_per_cpu_data; /* 0x0350 */ __u64 machine_flags; /* 0x0358 */ __u64 ftrace_func; /* 0x0360 */ __u8 pad_0x0368[0x0380-0x0368]; /* 0x0368 */ __u32 cpu_nr; /* 0x0320 */ __u32 softirq_pending; /* 0x0324 */ __u64 percpu_offset; /* 0x0328 */ __u64 ext_call_fast; /* 0x0330 */ __u64 int_clock; /* 0x0338 */ __u64 clock_comparator; /* 0x0340 */ __u64 vdso_per_cpu_data; /* 0x0348 */ __u64 machine_flags; /* 0x0350 */ __u64 ftrace_func; /* 0x0358 */ __u8 pad_0x0368[0x0380-0x0360]; /* 0x0360 */ /* Interrupt response block. */ __u8 irb[64]; /* 0x0380 */ Loading arch/s390/kernel/asm-offsets.c +0 −1 Original line number Diff line number Diff line Loading @@ -126,7 +126,6 @@ int main(void) DEFINE(__LC_KERNEL_ASCE, offsetof(struct _lowcore, kernel_asce)); DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); DEFINE(__LC_USER_EXEC_ASCE, offsetof(struct _lowcore, user_exec_asce)); DEFINE(__LC_CPUID, offsetof(struct _lowcore, cpu_id)); DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); DEFINE(__LC_MACHINE_FLAGS, offsetof(struct _lowcore, machine_flags)); DEFINE(__LC_FTRACE_FUNC, offsetof(struct _lowcore, ftrace_func)); Loading arch/s390/kernel/head.S +2 −2 Original line number Diff line number Diff line Loading @@ -328,8 +328,8 @@ iplstart: # # reset files in VM reader # stidp __LC_CPUID # store cpuid tm __LC_CPUID,0xff # running VM ? stidp __LC_SAVE_AREA # store cpuid tm __LC_SAVE_AREA,0xff # running VM ? bno .Lnoreset la %r2,.Lreset lhi %r3,26 Loading arch/s390/kernel/processor.c +24 −13 Original line number Diff line number Diff line Loading @@ -18,24 +18,42 @@ #include <asm/lowcore.h> #include <asm/param.h> static DEFINE_PER_CPU(struct cpuid, cpu_id); /* * cpu_init - initializes state that is per-CPU. */ void __cpuinit cpu_init(void) { struct cpuid *id = &per_cpu(cpu_id, smp_processor_id()); get_cpu_id(id); atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; BUG_ON(current->mm); enter_lazy_tlb(&init_mm, current); } /* * print_cpu_info - print basic information about a cpu */ void __cpuinit print_cpu_info(void) { struct cpuid *id = &per_cpu(cpu_id, smp_processor_id()); pr_info("Processor %d started, address %d, identification %06X\n", S390_lowcore.cpu_nr, S390_lowcore.cpu_addr, S390_lowcore.cpu_id.ident); S390_lowcore.cpu_nr, S390_lowcore.cpu_addr, id->ident); } /* * show_cpuinfo - Get information on one CPU for use by procfs. */ static int show_cpuinfo(struct seq_file *m, void *v) { static const char *hwcap_str[10] = { "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", "edat", "etf3eh", "highgprs" }; struct _lowcore *lc; unsigned long n = (unsigned long) v - 1; int i; Loading @@ -55,19 +73,12 @@ static int show_cpuinfo(struct seq_file *m, void *v) } if (cpu_online(n)) { #ifdef CONFIG_SMP lc = (smp_processor_id() == n) ? &S390_lowcore : lowcore_ptr[n]; #else lc = &S390_lowcore; #endif struct cpuid *id = &per_cpu(cpu_id, n); seq_printf(m, "processor %li: " "version = %02X, " "identification = %06X, " "machine = %04X\n", n, lc->cpu_id.version, lc->cpu_id.ident, lc->cpu_id.machine); n, id->version, id->ident, id->machine); } preempt_enable(); return 0; Loading arch/s390/kernel/setup.c +3 −17 Original line number Diff line number Diff line Loading @@ -112,22 +112,6 @@ static struct resource data_resource = { .flags = IORESOURCE_BUSY | IORESOURCE_MEM, }; /* * cpu_init() initializes state that is per-CPU. */ void __cpuinit cpu_init(void) { /* * Store processor id in lowcore (used e.g. in timer_interrupt) */ get_cpu_id(&S390_lowcore.cpu_id); atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; BUG_ON(current->mm); enter_lazy_tlb(&init_mm, current); } /* * condev= and conmode= setup parameter. */ Loading Loading @@ -695,6 +679,7 @@ static void __init setup_hwcaps(void) static const int stfl_bits[6] = { 0, 2, 7, 17, 19, 21 }; unsigned long long facility_list_extended; unsigned int facility_list; struct cpuid cpu_id; int i; facility_list = stfl(); Loading Loading @@ -756,7 +741,8 @@ static void __init setup_hwcaps(void) */ elf_hwcap |= HWCAP_S390_HIGH_GPRS; switch (S390_lowcore.cpu_id.machine) { get_cpu_id(&cpu_id); switch (cpu_id.machine) { case 0x9672: #if !defined(CONFIG_64BIT) default: /* Use "g5" as default for 31 bit kernels. */ Loading Loading
arch/s390/include/asm/lowcore.h +23 −25 Original line number Diff line number Diff line Loading @@ -126,16 +126,15 @@ struct _lowcore { __u32 user_exec_asce; /* 0x02ac */ /* SMP info area */ struct cpuid cpu_id; /* 0x02b0 */ __u32 cpu_nr; /* 0x02b8 */ __u32 softirq_pending; /* 0x02bc */ __u32 percpu_offset; /* 0x02c0 */ __u32 ext_call_fast; /* 0x02c4 */ __u64 int_clock; /* 0x02c8 */ __u64 clock_comparator; /* 0x02d0 */ __u32 machine_flags; /* 0x02d8 */ __u32 ftrace_func; /* 0x02dc */ __u8 pad_0x02e0[0x0300-0x02e0]; /* 0x02e0 */ __u32 cpu_nr; /* 0x02b0 */ __u32 softirq_pending; /* 0x02b4 */ __u32 percpu_offset; /* 0x02b8 */ __u32 ext_call_fast; /* 0x02bc */ __u64 int_clock; /* 0x02c0 */ __u64 clock_comparator; /* 0x02c8 */ __u32 machine_flags; /* 0x02d0 */ __u32 ftrace_func; /* 0x02d4 */ __u8 pad_0x02d8[0x0300-0x02d8]; /* 0x02d8 */ /* Interrupt response block */ __u8 irb[64]; /* 0x0300 */ Loading Loading @@ -189,14 +188,14 @@ struct _lowcore { __u32 data_exc_code; /* 0x0090 */ __u16 mon_class_num; /* 0x0094 */ __u16 per_perc_atmid; /* 0x0096 */ addr_t per_address; /* 0x0098 */ __u64 per_address; /* 0x0098 */ __u8 exc_access_id; /* 0x00a0 */ __u8 per_access_id; /* 0x00a1 */ __u8 op_access_id; /* 0x00a2 */ __u8 ar_access_id; /* 0x00a3 */ __u8 pad_0x00a4[0x00a8-0x00a4]; /* 0x00a4 */ addr_t trans_exc_code; /* 0x00a8 */ addr_t monitor_code; /* 0x00b0 */ __u64 trans_exc_code; /* 0x00a8 */ __u64 monitor_code; /* 0x00b0 */ __u16 subchannel_id; /* 0x00b8 */ __u16 subchannel_nr; /* 0x00ba */ __u32 io_int_parm; /* 0x00bc */ Loading @@ -207,7 +206,7 @@ struct _lowcore { __u32 mcck_interruption_code[2]; /* 0x00e8 */ __u8 pad_0x00f0[0x00f4-0x00f0]; /* 0x00f0 */ __u32 external_damage_code; /* 0x00f4 */ addr_t failing_storage_address; /* 0x00f8 */ __u64 failing_storage_address; /* 0x00f8 */ __u8 pad_0x0100[0x0110-0x0100]; /* 0x0100 */ __u64 breaking_event_addr; /* 0x0110 */ __u8 pad_0x0118[0x0120-0x0118]; /* 0x0118 */ Loading Loading @@ -255,17 +254,16 @@ struct _lowcore { __u64 user_exec_asce; /* 0x0318 */ /* SMP info area */ struct cpuid cpu_id; /* 0x0320 */ __u32 cpu_nr; /* 0x0328 */ __u32 softirq_pending; /* 0x032c */ __u64 percpu_offset; /* 0x0330 */ __u64 ext_call_fast; /* 0x0338 */ __u64 int_clock; /* 0x0340 */ __u64 clock_comparator; /* 0x0348 */ __u64 vdso_per_cpu_data; /* 0x0350 */ __u64 machine_flags; /* 0x0358 */ __u64 ftrace_func; /* 0x0360 */ __u8 pad_0x0368[0x0380-0x0368]; /* 0x0368 */ __u32 cpu_nr; /* 0x0320 */ __u32 softirq_pending; /* 0x0324 */ __u64 percpu_offset; /* 0x0328 */ __u64 ext_call_fast; /* 0x0330 */ __u64 int_clock; /* 0x0338 */ __u64 clock_comparator; /* 0x0340 */ __u64 vdso_per_cpu_data; /* 0x0348 */ __u64 machine_flags; /* 0x0350 */ __u64 ftrace_func; /* 0x0358 */ __u8 pad_0x0368[0x0380-0x0360]; /* 0x0360 */ /* Interrupt response block. */ __u8 irb[64]; /* 0x0380 */ Loading
arch/s390/kernel/asm-offsets.c +0 −1 Original line number Diff line number Diff line Loading @@ -126,7 +126,6 @@ int main(void) DEFINE(__LC_KERNEL_ASCE, offsetof(struct _lowcore, kernel_asce)); DEFINE(__LC_USER_ASCE, offsetof(struct _lowcore, user_asce)); DEFINE(__LC_USER_EXEC_ASCE, offsetof(struct _lowcore, user_exec_asce)); DEFINE(__LC_CPUID, offsetof(struct _lowcore, cpu_id)); DEFINE(__LC_INT_CLOCK, offsetof(struct _lowcore, int_clock)); DEFINE(__LC_MACHINE_FLAGS, offsetof(struct _lowcore, machine_flags)); DEFINE(__LC_FTRACE_FUNC, offsetof(struct _lowcore, ftrace_func)); Loading
arch/s390/kernel/head.S +2 −2 Original line number Diff line number Diff line Loading @@ -328,8 +328,8 @@ iplstart: # # reset files in VM reader # stidp __LC_CPUID # store cpuid tm __LC_CPUID,0xff # running VM ? stidp __LC_SAVE_AREA # store cpuid tm __LC_SAVE_AREA,0xff # running VM ? bno .Lnoreset la %r2,.Lreset lhi %r3,26 Loading
arch/s390/kernel/processor.c +24 −13 Original line number Diff line number Diff line Loading @@ -18,24 +18,42 @@ #include <asm/lowcore.h> #include <asm/param.h> static DEFINE_PER_CPU(struct cpuid, cpu_id); /* * cpu_init - initializes state that is per-CPU. */ void __cpuinit cpu_init(void) { struct cpuid *id = &per_cpu(cpu_id, smp_processor_id()); get_cpu_id(id); atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; BUG_ON(current->mm); enter_lazy_tlb(&init_mm, current); } /* * print_cpu_info - print basic information about a cpu */ void __cpuinit print_cpu_info(void) { struct cpuid *id = &per_cpu(cpu_id, smp_processor_id()); pr_info("Processor %d started, address %d, identification %06X\n", S390_lowcore.cpu_nr, S390_lowcore.cpu_addr, S390_lowcore.cpu_id.ident); S390_lowcore.cpu_nr, S390_lowcore.cpu_addr, id->ident); } /* * show_cpuinfo - Get information on one CPU for use by procfs. */ static int show_cpuinfo(struct seq_file *m, void *v) { static const char *hwcap_str[10] = { "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp", "edat", "etf3eh", "highgprs" }; struct _lowcore *lc; unsigned long n = (unsigned long) v - 1; int i; Loading @@ -55,19 +73,12 @@ static int show_cpuinfo(struct seq_file *m, void *v) } if (cpu_online(n)) { #ifdef CONFIG_SMP lc = (smp_processor_id() == n) ? &S390_lowcore : lowcore_ptr[n]; #else lc = &S390_lowcore; #endif struct cpuid *id = &per_cpu(cpu_id, n); seq_printf(m, "processor %li: " "version = %02X, " "identification = %06X, " "machine = %04X\n", n, lc->cpu_id.version, lc->cpu_id.ident, lc->cpu_id.machine); n, id->version, id->ident, id->machine); } preempt_enable(); return 0; Loading
arch/s390/kernel/setup.c +3 −17 Original line number Diff line number Diff line Loading @@ -112,22 +112,6 @@ static struct resource data_resource = { .flags = IORESOURCE_BUSY | IORESOURCE_MEM, }; /* * cpu_init() initializes state that is per-CPU. */ void __cpuinit cpu_init(void) { /* * Store processor id in lowcore (used e.g. in timer_interrupt) */ get_cpu_id(&S390_lowcore.cpu_id); atomic_inc(&init_mm.mm_count); current->active_mm = &init_mm; BUG_ON(current->mm); enter_lazy_tlb(&init_mm, current); } /* * condev= and conmode= setup parameter. */ Loading Loading @@ -695,6 +679,7 @@ static void __init setup_hwcaps(void) static const int stfl_bits[6] = { 0, 2, 7, 17, 19, 21 }; unsigned long long facility_list_extended; unsigned int facility_list; struct cpuid cpu_id; int i; facility_list = stfl(); Loading Loading @@ -756,7 +741,8 @@ static void __init setup_hwcaps(void) */ elf_hwcap |= HWCAP_S390_HIGH_GPRS; switch (S390_lowcore.cpu_id.machine) { get_cpu_id(&cpu_id); switch (cpu_id.machine) { case 0x9672: #if !defined(CONFIG_64BIT) default: /* Use "g5" as default for 31 bit kernels. */ Loading