Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
035d81b1
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
035d81b1
编写于
2月 02, 2017
作者:
J
Jiri Denemark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
cpu_x86: Drop virCPUx86MakeData and use virCPUDataNew
Signed-off-by:
N
Jiri Denemark
<
jdenemar@redhat.com
>
上级
390a1e2b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
90 addition
and
108 deletion
+90
-108
src/cpu/cpu_x86.c
src/cpu/cpu_x86.c
+63
-80
src/cpu/cpu_x86.h
src/cpu/cpu_x86.h
+0
-3
src/libvirt_private.syms
src/libvirt_private.syms
+0
-1
src/libxl/libxl_capabilities.c
src/libxl/libxl_capabilities.c
+10
-8
src/qemu/qemu_monitor_json.c
src/qemu/qemu_monitor_json.c
+17
-16
未找到文件。
src/cpu/cpu_x86.c
浏览文件 @
035d81b1
...
...
@@ -303,22 +303,6 @@ virCPUx86DataClear(virCPUx86Data *data)
}
virCPUDataPtr
virCPUx86MakeData
(
virArch
arch
,
virCPUx86Data
*
data
)
{
virCPUDataPtr
cpuData
;
if
(
VIR_ALLOC
(
cpuData
)
<
0
)
return
NULL
;
cpuData
->
arch
=
arch
;
cpuData
->
data
.
x86
=
*
data
;
data
->
len
=
0
;
data
->
data
=
NULL
;
return
cpuData
;
}
static
void
x86FreeCPUData
(
virCPUDataPtr
data
)
{
...
...
@@ -1441,7 +1425,6 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
{
xmlNodePtr
*
nodes
=
NULL
;
virCPUDataPtr
cpuData
=
NULL
;
virCPUx86Data
data
=
VIR_CPU_X86_DATA_INIT
;
virCPUx86CPUID
cpuid
;
size_t
i
;
int
n
;
...
...
@@ -1450,26 +1433,31 @@ virCPUx86DataParse(xmlXPathContextPtr ctxt)
if
(
n
<=
0
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"no x86 CPU data found"
));
goto
cleanup
;
goto
error
;
}
if
(
!
(
cpuData
=
virCPUDataNew
(
VIR_ARCH_X86_64
)))
goto
error
;
for
(
i
=
0
;
i
<
n
;
i
++
)
{
ctxt
->
node
=
nodes
[
i
];
if
(
x86ParseCPUID
(
ctxt
,
&
cpuid
)
<
0
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
_
(
"failed to parse cpuid[%zu]"
),
i
);
goto
cleanup
;
goto
error
;
}
if
(
virCPUx86DataAddCPUID
(
&
data
,
&
cpuid
)
<
0
)
goto
cleanup
;
if
(
virCPUx86DataAddCPUID
(
&
cpuData
->
data
.
x86
,
&
cpuid
)
<
0
)
goto
error
;
}
cpuData
=
virCPUx86MakeData
(
VIR_ARCH_X86_64
,
&
data
);
cleanup:
VIR_FREE
(
nodes
);
virCPUx86DataClear
(
&
data
);
return
cpuData
;
error:
x86FreeCPUData
(
cpuData
);
cpuData
=
NULL
;
goto
cleanup
;
}
...
...
@@ -1514,7 +1502,7 @@ x86Compute(virCPUDefPtr host,
virCPUx86ModelPtr
cpu_forbid
=
NULL
;
virCPUx86ModelPtr
diff
=
NULL
;
virCPUx86ModelPtr
guest_model
=
NULL
;
virCPU
x86Data
guestData
=
VIR_CPU_X86_DATA_INIT
;
virCPU
DataPtr
guestData
=
NULL
;
virCPUCompareResult
ret
;
virCPUx86CompareResult
result
;
virArch
arch
;
...
...
@@ -1633,9 +1621,11 @@ x86Compute(virCPUDefPtr host,
x86DataSubtract
(
&
guest_model
->
data
,
&
cpu_disable
->
data
);
if
(
x86DataCopy
(
&
guestData
,
&
guest_model
->
data
)
<
0
||
!
(
*
guest
=
virCPUx86MakeData
(
arch
,
&
guestData
))
)
if
(
!
(
guestData
=
virCPUDataNew
(
arch
))
||
x86DataCopy
(
&
guestData
->
data
.
x86
,
&
guest_model
->
data
)
<
0
)
goto
error
;
*
guest
=
guestData
;
}
cleanup:
...
...
@@ -1647,11 +1637,11 @@ x86Compute(virCPUDefPtr host,
x86ModelFree
(
cpu_disable
);
x86ModelFree
(
cpu_forbid
);
x86ModelFree
(
guest_model
);
virCPUx86DataClear
(
&
guestData
);
return
ret
;
error:
x86FreeCPUData
(
guestData
);
ret
=
VIR_CPU_COMPARE_ERROR
;
goto
cleanup
;
}
...
...
@@ -1958,12 +1948,12 @@ x86Encode(virArch arch,
virCPUDataPtr
*
vendor
)
{
virCPUx86MapPtr
map
=
NULL
;
virCPU
x86Data
data_forced
=
VIR_CPU_X86_DATA_INIT
;
virCPU
x86Data
data_required
=
VIR_CPU_X86_DATA_INIT
;
virCPU
x86Data
data_optional
=
VIR_CPU_X86_DATA_INIT
;
virCPU
x86Data
data_disabled
=
VIR_CPU_X86_DATA_INIT
;
virCPU
x86Data
data_forbidden
=
VIR_CPU_X86_DATA_INIT
;
virCPU
x86Data
data_vendor
=
VIR_CPU_X86_DATA_INIT
;
virCPU
DataPtr
data_forced
=
NULL
;
virCPU
DataPtr
data_required
=
NULL
;
virCPU
DataPtr
data_optional
=
NULL
;
virCPU
DataPtr
data_disabled
=
NULL
;
virCPU
DataPtr
data_forbidden
=
NULL
;
virCPU
DataPtr
data_vendor
=
NULL
;
if
(
forced
)
*
forced
=
NULL
;
...
...
@@ -1982,23 +1972,33 @@ x86Encode(virArch arch,
goto
error
;
if
(
forced
&&
x86EncodePolicy
(
&
data_forced
,
cpu
,
map
,
VIR_CPU_FEATURE_FORCE
)
<
0
)
(
!
(
data_forced
=
virCPUDataNew
(
arch
))
||
x86EncodePolicy
(
&
data_forced
->
data
.
x86
,
cpu
,
map
,
VIR_CPU_FEATURE_FORCE
)
<
0
))
goto
error
;
if
(
required
&&
x86EncodePolicy
(
&
data_required
,
cpu
,
map
,
VIR_CPU_FEATURE_REQUIRE
)
<
0
)
(
!
(
data_required
=
virCPUDataNew
(
arch
))
||
x86EncodePolicy
(
&
data_required
->
data
.
x86
,
cpu
,
map
,
VIR_CPU_FEATURE_REQUIRE
)
<
0
))
goto
error
;
if
(
optional
&&
x86EncodePolicy
(
&
data_optional
,
cpu
,
map
,
VIR_CPU_FEATURE_OPTIONAL
)
<
0
)
(
!
(
data_optional
=
virCPUDataNew
(
arch
))
||
x86EncodePolicy
(
&
data_optional
->
data
.
x86
,
cpu
,
map
,
VIR_CPU_FEATURE_OPTIONAL
)
<
0
))
goto
error
;
if
(
disabled
&&
x86EncodePolicy
(
&
data_disabled
,
cpu
,
map
,
VIR_CPU_FEATURE_DISABLE
)
<
0
)
(
!
(
data_disabled
=
virCPUDataNew
(
arch
))
||
x86EncodePolicy
(
&
data_disabled
->
data
.
x86
,
cpu
,
map
,
VIR_CPU_FEATURE_DISABLE
)
<
0
))
goto
error
;
if
(
forbidden
&&
x86EncodePolicy
(
&
data_forbidden
,
cpu
,
map
,
VIR_CPU_FEATURE_FORBID
)
<
0
)
(
!
(
data_forbidden
=
virCPUDataNew
(
arch
))
||
x86EncodePolicy
(
&
data_forbidden
->
data
.
x86
,
cpu
,
map
,
VIR_CPU_FEATURE_FORBID
)
<
0
))
goto
error
;
if
(
vendor
)
{
...
...
@@ -2010,50 +2010,35 @@ x86Encode(virArch arch,
goto
error
;
}
if
(
v
&&
virCPUx86DataAddCPUID
(
&
data_vendor
,
&
v
->
cpuid
)
<
0
)
if
(
!
(
data_vendor
=
virCPUDataNew
(
arch
))
)
goto
error
;
}
if
(
forced
&&
!
(
*
forced
=
virCPUx86MakeData
(
arch
,
&
data_forced
)))
goto
error
;
if
(
required
&&
!
(
*
required
=
virCPUx86MakeData
(
arch
,
&
data_required
)))
goto
error
;
if
(
optional
&&
!
(
*
optional
=
virCPUx86MakeData
(
arch
,
&
data_optional
)))
goto
error
;
if
(
disabled
&&
!
(
*
disabled
=
virCPUx86MakeData
(
arch
,
&
data_disabled
)))
goto
error
;
if
(
forbidden
&&
!
(
*
forbidden
=
virCPUx86MakeData
(
arch
,
&
data_forbidden
)))
goto
error
;
if
(
vendor
&&
!
(
*
vendor
=
virCPUx86MakeData
(
arch
,
&
data_vendor
)))
goto
error
;
return
0
;
if
(
v
&&
virCPUx86DataAddCPUID
(
&
data_vendor
->
data
.
x86
,
&
v
->
cpuid
)
<
0
)
goto
error
;
}
error:
virCPUx86DataClear
(
&
data_forced
);
virCPUx86DataClear
(
&
data_required
);
virCPUx86DataClear
(
&
data_optional
);
virCPUx86DataClear
(
&
data_disabled
);
virCPUx86DataClear
(
&
data_forbidden
);
virCPUx86DataClear
(
&
data_vendor
);
if
(
forced
)
x86FreeCPUData
(
*
forced
)
;
*
forced
=
data_forced
;
if
(
required
)
x86FreeCPUData
(
*
required
)
;
*
required
=
data_required
;
if
(
optional
)
x86FreeCPUData
(
*
optional
)
;
*
optional
=
data_optional
;
if
(
disabled
)
x86FreeCPUData
(
*
disabled
)
;
*
disabled
=
data_disabled
;
if
(
forbidden
)
x86FreeCPUData
(
*
forbidden
)
;
*
forbidden
=
data_forbidden
;
if
(
vendor
)
x86FreeCPUData
(
*
vendor
);
*
vendor
=
data_vendor
;
return
0
;
error:
x86FreeCPUData
(
data_forced
);
x86FreeCPUData
(
data_required
);
x86FreeCPUData
(
data_optional
);
x86FreeCPUData
(
data_disabled
);
x86FreeCPUData
(
data_forbidden
);
x86FreeCPUData
(
data_vendor
);
return
-
1
;
}
...
...
@@ -2382,22 +2367,20 @@ static virCPUDataPtr
x86NodeData
(
virArch
arch
)
{
virCPUDataPtr
cpuData
=
NULL
;
virCPUx86Data
data
=
VIR_CPU_X86_DATA_INIT
;
if
(
cpuidSet
(
CPUX86_BASIC
,
&
data
)
<
0
)
if
(
!
(
cpuData
=
virCPUDataNew
(
arch
))
)
goto
error
;
if
(
cpuidSet
(
CPUX86_
EXTENDED
,
&
data
)
<
0
)
if
(
cpuidSet
(
CPUX86_
BASIC
,
&
cpuData
->
data
.
x86
)
<
0
)
goto
error
;
if
(
!
(
cpuData
=
virCPUx86MakeData
(
arch
,
&
data
))
)
if
(
cpuidSet
(
CPUX86_EXTENDED
,
&
cpuData
->
data
.
x86
)
<
0
)
goto
error
;
return
cpuData
;
error:
virCPUx86DataClear
(
&
data
);
x86FreeCPUData
(
cpuData
);
return
NULL
;
}
#endif
...
...
src/cpu/cpu_x86.h
浏览文件 @
035d81b1
...
...
@@ -34,7 +34,4 @@ int virCPUx86DataAddCPUID(virCPUx86Data *data,
void
virCPUx86DataClear
(
virCPUx86Data
*
data
);
virCPUDataPtr
virCPUx86MakeData
(
virArch
arch
,
virCPUx86Data
*
data
);
#endif
/* __VIR_CPU_X86_H__ */
src/libvirt_private.syms
浏览文件 @
035d81b1
...
...
@@ -1004,7 +1004,6 @@ virCPUUpdate;
# cpu/cpu_x86.h
virCPUx86DataAddCPUID;
virCPUx86DataClear;
virCPUx86MakeData;
# datatypes.h
...
...
src/libxl/libxl_capabilities.c
浏览文件 @
035d81b1
...
...
@@ -65,14 +65,14 @@ struct guest_arch {
#define XEN_CAP_REGEX "(xen|hvm)-[[:digit:]]+\\.[[:digit:]]+-(aarch64|armv7l|x86_32|x86_64|ia64|powerpc64)(p|be)?"
static
int
libxlCapsAddCPUID
(
virCPU
x86Data
*
data
,
virCPUx86CPUID
*
cpuid
,
ssize_t
ncaps
)
libxlCapsAddCPUID
(
virCPU
DataPtr
data
,
virCPUx86CPUID
*
cpuid
,
ssize_t
ncaps
)
{
size_t
i
;
for
(
i
=
0
;
i
<
ncaps
;
i
++
)
{
virCPUx86CPUID
*
c
=
&
cpuid
[
i
];
if
(
virCPUx86DataAddCPUID
(
data
,
c
)
<
0
)
{
if
(
virCPUx86DataAddCPUID
(
&
data
->
data
.
x86
,
c
)
<
0
)
{
VIR_DEBUG
(
"Failed to add CPUID(%x,%x)"
,
c
->
eax_in
,
c
->
ecx_in
);
return
-
1
;
}
...
...
@@ -112,7 +112,6 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap,
{
ssize_t
ncaps
;
virCPUDataPtr
cpudata
=
NULL
;
virCPUx86Data
data
=
VIR_CPU_X86_DATA_INIT
;
virCPUx86CPUID
cpuid
[]
=
{
{
.
eax_in
=
0x00000001
,
.
edx
=
hwcap
[
0
]
},
...
...
@@ -131,20 +130,23 @@ libxlCapsNodeData(virCPUDefPtr cpu, libxl_hwcap hwcap,
{
.
eax_in
=
0x80000007
,
.
ecx_in
=
0U
,
.
edx
=
hwcap
[
7
]
},
};
if
(
!
(
cpudata
=
virCPUDataNew
(
cpu
->
arch
)))
goto
error
;
ncaps
=
ARRAY_CARDINALITY
(
cpuid
);
if
(
libxlCapsAddCPUID
(
&
data
,
cpuid
,
ncaps
)
<
0
)
if
(
libxlCapsAddCPUID
(
cpu
data
,
cpuid
,
ncaps
)
<
0
)
goto
error
;
ncaps
=
ARRAY_CARDINALITY
(
cpuid_ver1
);
if
(
version
>
LIBXL_HWCAP_V0
&&
libxlCapsAddCPUID
(
&
data
,
cpuid_ver1
,
ncaps
)
<
0
)
libxlCapsAddCPUID
(
cpu
data
,
cpuid_ver1
,
ncaps
)
<
0
)
goto
error
;
cpudata
=
virCPUx86MakeData
(
cpu
->
arch
,
&
data
)
;
return
cpudata
;
error:
virCPUx86DataClear
(
&
data
);
return
cpudata
;
cpuDataFree
(
cpu
data
);
return
NULL
;
}
/* hw_caps is an array of 32-bit words whose meaning is listed in
...
...
src/qemu/qemu_monitor_json.c
浏览文件 @
035d81b1
...
...
@@ -6544,37 +6544,35 @@ qemuMonitorJSONParseCPUx86FeatureWord(virJSONValuePtr data,
}
static
int
qemuMonitorJSONParseCPUx86Features
(
virJSONValuePtr
data
,
virCPUDataPtr
*
cpudata
)
static
virCPUDataPtr
qemuMonitorJSONParseCPUx86Features
(
virJSONValuePtr
data
)
{
virCPU
x86Data
x86Data
=
VIR_CPU_X86_DATA_INIT
;
virCPU
DataPtr
cpudata
=
NULL
;
virCPUx86CPUID
cpuid
;
size_t
i
;
ssize_t
n
;
int
ret
=
-
1
;
if
(
!
data
||
(
n
=
virJSONValueArraySize
(
data
))
<
0
)
{
virReportError
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"invalid array of CPUID features"
));
return
-
1
;
goto
error
;
}
if
(
!
(
cpudata
=
virCPUDataNew
(
VIR_ARCH_X86_64
)))
goto
error
;
for
(
i
=
0
;
i
<
n
;
i
++
)
{
if
(
qemuMonitorJSONParseCPUx86FeatureWord
(
virJSONValueArrayGet
(
data
,
i
),
&
cpuid
)
<
0
||
virCPUx86DataAddCPUID
(
&
x86Data
,
&
cpuid
)
<
0
)
goto
cleanup
;
virCPUx86DataAddCPUID
(
&
cpudata
->
data
.
x86
,
&
cpuid
)
<
0
)
goto
error
;
}
if
(
!
(
*
cpudata
=
virCPUx86MakeData
(
VIR_ARCH_X86_64
,
&
x86Data
)))
goto
cleanup
;
ret
=
0
;
return
cpudata
;
cleanup
:
virCPUx86DataClear
(
&
x86D
ata
);
return
ret
;
error
:
cpuDataFree
(
cpud
ata
);
return
NULL
;
}
...
...
@@ -6601,7 +6599,10 @@ qemuMonitorJSONGetCPUx86Data(qemuMonitorPtr mon,
goto
cleanup
;
data
=
virJSONValueObjectGetArray
(
reply
,
"return"
);
ret
=
qemuMonitorJSONParseCPUx86Features
(
data
,
cpudata
);
if
(
!
(
*
cpudata
=
qemuMonitorJSONParseCPUx86Features
(
data
)))
goto
cleanup
;
ret
=
0
;
cleanup:
virJSONValueFree
(
cmd
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录