Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
7b468488
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7b468488
编写于
3月 26, 2009
作者:
M
Martin Schwidefsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[S390] eliminate cpuinfo_S390 structure
Signed-off-by:
N
Martin Schwidefsky
<
schwidefsky@de.ibm.com
>
上级
2938af53
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
52 addition
and
75 deletion
+52
-75
arch/s390/include/asm/lowcore.h
arch/s390/include/asm/lowcore.h
+8
-7
arch/s390/include/asm/processor.h
arch/s390/include/asm/processor.h
+1
-15
arch/s390/include/asm/smp.h
arch/s390/include/asm/smp.h
+1
-6
arch/s390/kernel/processor.c
arch/s390/kernel/processor.c
+34
-35
arch/s390/kernel/setup.c
arch/s390/kernel/setup.c
+3
-7
arch/s390/kernel/smp.c
arch/s390/kernel/smp.c
+4
-4
drivers/s390/cio/css.c
drivers/s390/cio/css.c
+1
-1
未找到文件。
arch/s390/include/asm/lowcore.h
浏览文件 @
7b468488
...
...
@@ -80,7 +80,6 @@
#define __LC_USER_ASCE 0xC50
#define __LC_PANIC_STACK 0xC54
#define __LC_CPUID 0xC60
#define __LC_CPUADDR 0xC68
#define __LC_IPLDEV 0xC7C
#define __LC_CURRENT 0xC90
#define __LC_INT_CLOCK 0xC98
...
...
@@ -102,7 +101,6 @@
#define __LC_USER_ASCE 0xD60
#define __LC_PANIC_STACK 0xD68
#define __LC_CPUID 0xD80
#define __LC_CPUADDR 0xD88
#define __LC_IPLDEV 0xDB8
#define __LC_CURRENT 0xDD8
#define __LC_INT_CLOCK 0xDE8
...
...
@@ -273,8 +271,10 @@ struct _lowcore
__u32
user_exec_asce
;
/* 0xc58 */
__u8
pad10
[
0xc60
-
0xc5c
];
/* 0xc5c */
/* entry.S sensitive area start */
struct
cpuinfo_S390
cpu_data
;
/* 0xc60 */
__u32
ipl_device
;
/* 0xc7c */
cpuid_t
cpu_id
;
/* 0xc60 */
__u32
cpu_nr
;
/* 0xc68 */
__u32
ipl_device
;
/* 0xc6c */
__u8
pad_0xc70
[
0xc80
-
0xc70
];
/* 0xc70 */
/* entry.S sensitive area end */
/* SMP info area: defined by DJB */
...
...
@@ -366,9 +366,10 @@ struct _lowcore
__u64
user_exec_asce
;
/* 0xd70 */
__u8
pad10
[
0xd80
-
0xd78
];
/* 0xd78 */
/* entry.S sensitive area start */
struct
cpuinfo_S390
cpu_data
;
/* 0xd80 */
__u32
ipl_device
;
/* 0xdb8 */
__u32
pad11
;
/* 0xdbc */
cpuid_t
cpu_id
;
/* 0xd80 */
__u32
cpu_nr
;
/* 0xd88 */
__u32
ipl_device
;
/* 0xd8c */
__u8
pad_0xd90
[
0xdc0
-
0xd90
];
/* 0xd90 */
/* entry.S sensitive area end */
/* SMP info area: defined by DJB */
...
...
arch/s390/include/asm/processor.h
浏览文件 @
7b468488
...
...
@@ -42,22 +42,8 @@ static inline void get_cpu_id(cpuid_t *ptr)
asm
volatile
(
"stidp 0(%1)"
:
"=m"
(
*
ptr
)
:
"a"
(
ptr
));
}
struct
cpuinfo_S390
{
cpuid_t
cpu_id
;
__u16
cpu_addr
;
__u16
cpu_nr
;
unsigned
long
loops_per_jiffy
;
unsigned
long
*
pgd_quick
;
#ifdef __s390x__
unsigned
long
*
pmd_quick
;
#endif
/* __s390x__ */
unsigned
long
*
pte_quick
;
unsigned
long
pgtable_cache_sz
;
};
extern
void
s390_adjust_jiffies
(
void
);
extern
void
print_cpu_info
(
struct
cpuinfo_S390
*
);
extern
void
print_cpu_info
(
void
);
extern
int
get_cpu_capability
(
unsigned
int
*
);
/*
...
...
arch/s390/include/asm/smp.h
浏览文件 @
7b468488
...
...
@@ -50,12 +50,7 @@ extern void machine_power_off_smp(void);
#define PROC_CHANGE_PENALTY 20
/* Schedule penalty */
#define raw_smp_processor_id() (S390_lowcore.cpu_data.cpu_nr)
static
inline
__u16
hard_smp_processor_id
(
void
)
{
return
stap
();
}
#define raw_smp_processor_id() (S390_lowcore.cpu_nr)
/*
* returns 1 if cpu is in stopped/check stopped state or not operational
...
...
arch/s390/kernel/processor.c
浏览文件 @
7b468488
...
...
@@ -18,10 +18,11 @@
#include <asm/lowcore.h>
#include <asm/param.h>
void
__cpuinit
print_cpu_info
(
struct
cpuinfo_S390
*
cpuinfo
)
void
__cpuinit
print_cpu_info
(
void
)
{
pr_info
(
"Processor %d started, address %d, identification %06X
\n
"
,
cpuinfo
->
cpu_nr
,
cpuinfo
->
cpu_addr
,
cpuinfo
->
cpu_id
.
ident
);
S390_lowcore
.
cpu_nr
,
S390_lowcore
.
cpu_addr
,
S390_lowcore
.
cpu_id
.
ident
);
}
/*
...
...
@@ -34,44 +35,42 @@ static int show_cpuinfo(struct seq_file *m, void *v)
"esan3"
,
"zarch"
,
"stfle"
,
"msa"
,
"ldisp"
,
"eimm"
,
"dfp"
,
"edat"
};
struct
cpuinfo_S390
*
cpuinfo
;
unsigned
long
n
=
(
unsigned
long
)
v
-
1
;
int
i
;
struct
_lowcore
*
lc
;
unsigned
long
n
=
(
unsigned
long
)
v
-
1
;
int
i
;
s390_adjust_jiffies
();
preempt_disable
();
if
(
!
n
)
{
seq_printf
(
m
,
"vendor_id : IBM/S390
\n
"
"# processors : %i
\n
"
"bogomips per cpu: %lu.%02lu
\n
"
,
num_online_cpus
(),
loops_per_jiffy
/
(
500000
/
HZ
),
(
loops_per_jiffy
/
(
5000
/
HZ
))
%
100
);
seq_puts
(
m
,
"features
\t
: "
);
for
(
i
=
0
;
i
<
8
;
i
++
)
if
(
hwcap_str
[
i
]
&&
(
elf_hwcap
&
(
1UL
<<
i
)))
seq_printf
(
m
,
"%s "
,
hwcap_str
[
i
]);
seq_puts
(
m
,
"
\n
"
);
}
s390_adjust_jiffies
();
preempt_disable
();
if
(
!
n
)
{
seq_printf
(
m
,
"vendor_id : IBM/S390
\n
"
"# processors : %i
\n
"
"bogomips per cpu: %lu.%02lu
\n
"
,
num_online_cpus
(),
loops_per_jiffy
/
(
500000
/
HZ
),
(
loops_per_jiffy
/
(
5000
/
HZ
))
%
100
);
seq_puts
(
m
,
"features
\t
: "
);
for
(
i
=
0
;
i
<
8
;
i
++
)
if
(
hwcap_str
[
i
]
&&
(
elf_hwcap
&
(
1UL
<<
i
)))
seq_printf
(
m
,
"%s "
,
hwcap_str
[
i
]);
seq_puts
(
m
,
"
\n
"
);
}
if
(
cpu_online
(
n
))
{
if
(
cpu_online
(
n
))
{
#ifdef CONFIG_SMP
if
(
smp_processor_id
()
==
n
)
cpuinfo
=
&
S390_lowcore
.
cpu_data
;
else
cpuinfo
=
&
lowcore_ptr
[
n
]
->
cpu_data
;
lc
=
(
smp_processor_id
()
==
n
)
?
&
S390_lowcore
:
lowcore_ptr
[
n
];
#else
cpuinfo
=
&
S390_lowcore
.
cpu_data
;
lc
=
&
S390_lowcore
;
#endif
seq_printf
(
m
,
"processor %li: "
"version = %02X, "
"identification = %06X, "
"machine = %04X
\n
"
,
n
,
cpuinfo
->
cpu_id
.
version
,
cpuinfo
->
cpu_id
.
ident
,
cpuinfo
->
cpu_id
.
machine
);
}
preempt_enable
();
return
0
;
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
);
}
preempt_enable
();
return
0
;
}
static
void
*
c_start
(
struct
seq_file
*
m
,
loff_t
*
pos
)
...
...
arch/s390/kernel/setup.c
浏览文件 @
7b468488
...
...
@@ -121,13 +121,10 @@ static struct resource data_resource = {
*/
void
__cpuinit
cpu_init
(
void
)
{
int
addr
=
hard_smp_processor_id
();
/*
* Store processor id in lowcore (used e.g. in timer_interrupt)
*/
get_cpu_id
(
&
S390_lowcore
.
cpu_data
.
cpu_id
);
S390_lowcore
.
cpu_data
.
cpu_addr
=
addr
;
get_cpu_id
(
&
S390_lowcore
.
cpu_id
);
/*
* Force FPU initialization:
...
...
@@ -686,7 +683,6 @@ setup_memory(void)
static
void
__init
setup_hwcaps
(
void
)
{
static
const
int
stfl_bits
[
6
]
=
{
0
,
2
,
7
,
17
,
19
,
21
};
struct
cpuinfo_S390
*
cpuinfo
=
&
S390_lowcore
.
cpu_data
;
unsigned
long
long
facility_list_extended
;
unsigned
int
facility_list
;
int
i
;
...
...
@@ -732,7 +728,7 @@ static void __init setup_hwcaps(void)
if
(
MACHINE_HAS_HPAGE
)
elf_hwcap
|=
1UL
<<
7
;
switch
(
cpuinfo
->
cpu_id
.
machine
)
{
switch
(
S390_lowcore
.
cpu_id
.
machine
)
{
case
0x9672
:
#if !defined(CONFIG_64BIT)
default:
/* Use "g5" as default for 31 bit kernels. */
...
...
@@ -825,7 +821,7 @@ setup_arch(char **cmdline_p)
setup_lowcore
();
cpu_init
();
__cpu_logical_map
[
0
]
=
S390_lowcore
.
cpu_data
.
cpu_addr
;
__cpu_logical_map
[
0
]
=
stap
()
;
s390_init_cpu_topology
();
/*
...
...
arch/s390/kernel/smp.c
浏览文件 @
7b468488
...
...
@@ -372,7 +372,7 @@ static void __init smp_detect_cpus(void)
c_cpus
=
1
;
s_cpus
=
0
;
boot_cpu_addr
=
S390_lowcore
.
cpu_data
.
cpu_addr
;
boot_cpu_addr
=
__cpu_logical_map
[
0
]
;
info
=
kmalloc
(
sizeof
(
*
info
),
GFP_KERNEL
);
if
(
!
info
)
panic
(
"smp_detect_cpus failed to allocate memory
\n
"
);
...
...
@@ -446,7 +446,7 @@ int __cpuinit start_secondary(void *cpuvoid)
/* Switch on interrupts */
local_irq_enable
();
/* Print info about this processor */
print_cpu_info
(
&
S390_lowcore
.
cpu_data
);
print_cpu_info
();
/* cpu_idle will call schedule for us */
cpu_idle
();
return
0
;
...
...
@@ -564,7 +564,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
:
:
"a"
(
&
cpu_lowcore
->
access_regs_save_area
)
:
"memory"
);
cpu_lowcore
->
percpu_offset
=
__per_cpu_offset
[
cpu
];
cpu_lowcore
->
current_task
=
(
unsigned
long
)
idle
;
cpu_lowcore
->
cpu_
data
.
cpu_
nr
=
cpu
;
cpu_lowcore
->
cpu_nr
=
cpu
;
cpu_lowcore
->
kernel_asce
=
S390_lowcore
.
kernel_asce
;
cpu_lowcore
->
ipl_device
=
S390_lowcore
.
ipl_device
;
eieio
();
...
...
@@ -656,7 +656,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
/* request the 0x1201 emergency signal external interrupt */
if
(
register_external_interrupt
(
0x1201
,
do_ext_call_interrupt
)
!=
0
)
panic
(
"Couldn't request external interrupt 0x1201"
);
print_cpu_info
(
&
S390_lowcore
.
cpu_data
);
print_cpu_info
();
/* Reallocate current lowcore, but keep its contents. */
lc_order
=
sizeof
(
long
)
==
8
?
1
:
0
;
...
...
drivers/s390/cio/css.c
浏览文件 @
7b468488
...
...
@@ -655,7 +655,7 @@ css_generate_pgid(struct channel_subsystem *css, u32 tod_high)
css
->
global_pgid
.
pgid_high
.
ext_cssid
.
cssid
=
css
->
cssid
;
}
else
{
#ifdef CONFIG_SMP
css
->
global_pgid
.
pgid_high
.
cpu_addr
=
hard_smp_processor_id
();
css
->
global_pgid
.
pgid_high
.
cpu_addr
=
stap
();
#else
css
->
global_pgid
.
pgid_high
.
cpu_addr
=
0
;
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录