Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
547f7847
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
163
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
547f7847
编写于
16年前
作者:
L
Len Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'processor-256' into release
上级
f398778a
5b53ed69
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
51 addition
and
38 deletion
+51
-38
drivers/acpi/processor_core.c
drivers/acpi/processor_core.c
+49
-37
drivers/acpi/scan.c
drivers/acpi/scan.c
+1
-1
include/acpi/acpi_drivers.h
include/acpi/acpi_drivers.h
+1
-0
未找到文件。
drivers/acpi/processor_core.c
浏览文件 @
547f7847
...
...
@@ -88,6 +88,7 @@ static int acpi_processor_handle_eject(struct acpi_processor *pr);
static
const
struct
acpi_device_id
processor_device_ids
[]
=
{
{
ACPI_PROCESSOR_OBJECT_HID
,
0
},
{
ACPI_PROCESSOR_HID
,
0
},
{
""
,
0
},
};
...
...
@@ -408,7 +409,7 @@ static int acpi_processor_remove_fs(struct acpi_device *device)
/* Use the acpiid in MADT to map cpus in case of SMP */
#ifndef CONFIG_SMP
static
int
get_cpu_id
(
acpi_handle
handle
,
u32
acpi_id
)
{
return
-
1
;
}
static
int
get_cpu_id
(
acpi_handle
handle
,
int
type
,
u32
acpi_id
)
{
return
-
1
;
}
#else
static
struct
acpi_table_madt
*
madt
;
...
...
@@ -427,27 +428,35 @@ static int map_lapic_id(struct acpi_subtable_header *entry,
}
static
int
map_lsapic_id
(
struct
acpi_subtable_header
*
entry
,
u32
acpi_id
,
int
*
apic_id
)
int
device_declaration
,
u32
acpi_id
,
int
*
apic_id
)
{
struct
acpi_madt_local_sapic
*
lsapic
=
(
struct
acpi_madt_local_sapic
*
)
entry
;
u32
tmp
=
(
lsapic
->
id
<<
8
)
|
lsapic
->
eid
;
/* Only check enabled APICs*/
if
(
lsapic
->
lapic_flags
&
ACPI_MADT_ENABLED
)
{
/* First check against id */
if
(
lsapic
->
processor_id
==
acpi_id
)
{
*
apic_id
=
(
lsapic
->
id
<<
8
)
|
lsapic
->
eid
;
return
1
;
/* Check against optional uid */
}
else
if
(
entry
->
length
>=
16
&&
lsapic
->
uid
==
acpi_id
)
{
*
apic_id
=
lsapic
->
uid
;
return
1
;
}
}
if
(
!
(
lsapic
->
lapic_flags
&
ACPI_MADT_ENABLED
))
return
0
;
/* Device statement declaration type */
if
(
device_declaration
)
{
if
(
entry
->
length
<
16
)
printk
(
KERN_ERR
PREFIX
"Invalid LSAPIC with Device type processor (SAPIC ID %#x)
\n
"
,
tmp
);
else
if
(
lsapic
->
uid
==
acpi_id
)
goto
found
;
/* Processor statement declaration type */
}
else
if
(
lsapic
->
processor_id
==
acpi_id
)
goto
found
;
return
0
;
found:
*
apic_id
=
tmp
;
return
1
;
}
static
int
map_madt_entry
(
u32
acpi_id
)
static
int
map_madt_entry
(
int
type
,
u32
acpi_id
)
{
unsigned
long
madt_end
,
entry
;
int
apic_id
=
-
1
;
...
...
@@ -468,7 +477,7 @@ static int map_madt_entry(u32 acpi_id)
if
(
map_lapic_id
(
header
,
acpi_id
,
&
apic_id
))
break
;
}
else
if
(
header
->
type
==
ACPI_MADT_TYPE_LOCAL_SAPIC
)
{
if
(
map_lsapic_id
(
header
,
acpi_id
,
&
apic_id
))
if
(
map_lsapic_id
(
header
,
type
,
acpi_id
,
&
apic_id
))
break
;
}
entry
+=
header
->
length
;
...
...
@@ -476,7 +485,7 @@ static int map_madt_entry(u32 acpi_id)
return
apic_id
;
}
static
int
map_mat_entry
(
acpi_handle
handle
,
u32
acpi_id
)
static
int
map_mat_entry
(
acpi_handle
handle
,
int
type
,
u32
acpi_id
)
{
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
union
acpi_object
*
obj
;
...
...
@@ -499,7 +508,7 @@ static int map_mat_entry(acpi_handle handle, u32 acpi_id)
if
(
header
->
type
==
ACPI_MADT_TYPE_LOCAL_APIC
)
{
map_lapic_id
(
header
,
acpi_id
,
&
apic_id
);
}
else
if
(
header
->
type
==
ACPI_MADT_TYPE_LOCAL_SAPIC
)
{
map_lsapic_id
(
header
,
acpi_id
,
&
apic_id
);
map_lsapic_id
(
header
,
type
,
acpi_id
,
&
apic_id
);
}
exit:
...
...
@@ -508,14 +517,14 @@ static int map_mat_entry(acpi_handle handle, u32 acpi_id)
return
apic_id
;
}
static
int
get_cpu_id
(
acpi_handle
handle
,
u32
acpi_id
)
static
int
get_cpu_id
(
acpi_handle
handle
,
int
type
,
u32
acpi_id
)
{
int
i
;
int
apic_id
=
-
1
;
apic_id
=
map_mat_entry
(
handle
,
acpi_id
);
apic_id
=
map_mat_entry
(
handle
,
type
,
acpi_id
);
if
(
apic_id
==
-
1
)
apic_id
=
map_madt_entry
(
acpi_id
);
apic_id
=
map_madt_entry
(
type
,
acpi_id
);
if
(
apic_id
==
-
1
)
return
apic_id
;
...
...
@@ -531,15 +540,16 @@ static int get_cpu_id(acpi_handle handle, u32 acpi_id)
Driver Interface
-------------------------------------------------------------------------- */
static
int
acpi_processor_get_info
(
struct
acpi_
processor
*
pr
,
unsigned
has_uid
)
static
int
acpi_processor_get_info
(
struct
acpi_
device
*
device
)
{
acpi_status
status
=
0
;
union
acpi_object
object
=
{
0
};
struct
acpi_buffer
buffer
=
{
sizeof
(
union
acpi_object
),
&
object
};
int
cpu_index
;
struct
acpi_processor
*
pr
;
int
cpu_index
,
device_declaration
=
0
;
static
int
cpu0_initialized
;
pr
=
acpi_driver_data
(
device
);
if
(
!
pr
)
return
-
EINVAL
;
...
...
@@ -560,22 +570,23 @@ static int acpi_processor_get_info(struct acpi_processor *pr, unsigned has_uid)
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"No bus mastering arbitration control
\n
"
));
/* Check if it is a Device with HID and UID */
if
(
has_uid
)
{
if
(
!
strcmp
(
acpi_device_hid
(
device
),
ACPI_PROCESSOR_HID
))
{
/*
* Declared with "Device" statement; match _UID.
* Note that we don't handle string _UIDs yet.
*/
unsigned
long
long
value
;
status
=
acpi_evaluate_integer
(
pr
->
handle
,
METHOD_NAME__UID
,
NULL
,
&
value
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_ERR
PREFIX
"Evaluating processor _UID
\n
"
);
printk
(
KERN_ERR
PREFIX
"Evaluating processor _UID [%#x]
\n
"
,
status
);
return
-
ENODEV
;
}
device_declaration
=
1
;
pr
->
acpi_id
=
value
;
}
else
{
/*
* Evalute the processor object. Note that it is common on SMP to
* have the first (boot) processor with a valid PBLK address while
* all others have a NULL address.
*/
/* Declared with "Processor" statement; match ProcessorID */
status
=
acpi_evaluate_object
(
pr
->
handle
,
NULL
,
NULL
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
))
{
printk
(
KERN_ERR
PREFIX
"Evaluating processor object
\n
"
);
...
...
@@ -583,12 +594,13 @@ static int acpi_processor_get_info(struct acpi_processor *pr, unsigned has_uid)
}
/*
* TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP.
* >>> 'acpi_get_processor_id(acpi_id, &id)' in arch/xxx/acpi.c
*/
* TBD: Synch processor ID (via LAPIC/LSAPIC structures) on SMP.
* >>> 'acpi_get_processor_id(acpi_id, &id)' in
* arch/xxx/acpi.c
*/
pr
->
acpi_id
=
object
.
processor
.
proc_id
;
}
cpu_index
=
get_cpu_id
(
pr
->
handle
,
pr
->
acpi_id
);
cpu_index
=
get_cpu_id
(
pr
->
handle
,
device_declaration
,
pr
->
acpi_id
);
/* Handle UP system running SMP kernel, with no LAPIC in MADT */
if
(
!
cpu0_initialized
&&
(
cpu_index
==
-
1
)
&&
...
...
@@ -660,7 +672,7 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
pr
=
acpi_driver_data
(
device
);
result
=
acpi_processor_get_info
(
pr
,
device
->
flags
.
unique_id
);
result
=
acpi_processor_get_info
(
device
);
if
(
result
)
{
/* Processor is physically not present */
return
0
;
...
...
This diff is collapsed.
Click to expand it.
drivers/acpi/scan.c
浏览文件 @
547f7847
...
...
@@ -1013,7 +1013,7 @@ static void acpi_device_set_id(struct acpi_device *device,
hid
=
ACPI_POWER_HID
;
break
;
case
ACPI_BUS_TYPE_PROCESSOR
:
hid
=
ACPI_PROCESSOR_HID
;
hid
=
ACPI_PROCESSOR_
OBJECT_
HID
;
break
;
case
ACPI_BUS_TYPE_SYSTEM
:
hid
=
ACPI_SYSTEM_HID
;
...
...
This diff is collapsed.
Click to expand it.
include/acpi/acpi_drivers.h
浏览文件 @
547f7847
...
...
@@ -57,6 +57,7 @@
*/
#define ACPI_POWER_HID "LNXPOWER"
#define ACPI_PROCESSOR_OBJECT_HID "ACPI_CPU"
#define ACPI_PROCESSOR_HID "ACPI0007"
#define ACPI_SYSTEM_HID "LNXSYSTM"
#define ACPI_THERMAL_HID "LNXTHERM"
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
新手
引导
客服
返回
顶部