Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
3d440358
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3d440358
编写于
1月 12, 2011
作者:
J
Jiri Denemark
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qemu: Support per-device boot ordering
Support for this is included in qemu and seabios from upstream git.
上级
94234fa2
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
40 addition
and
10 deletion
+40
-10
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.c
+9
-0
src/qemu/qemu_capabilities.h
src/qemu/qemu_capabilities.h
+1
-0
src/qemu/qemu_command.c
src/qemu/qemu_command.c
+20
-4
src/qemu/qemu_command.h
src/qemu/qemu_command.h
+4
-2
src/qemu/qemu_driver.c
src/qemu/qemu_driver.c
+2
-0
src/qemu/qemu_hotplug.c
src/qemu/qemu_hotplug.c
+4
-4
未找到文件。
src/qemu/qemu_capabilities.c
浏览文件 @
3d440358
...
@@ -431,6 +431,7 @@ qemuCapsInitGuest(virCapsPtr caps,
...
@@ -431,6 +431,7 @@ qemuCapsInitGuest(virCapsPtr caps,
int
nmachines
=
0
;
int
nmachines
=
0
;
struct
stat
st
;
struct
stat
st
;
unsigned
int
ncpus
;
unsigned
int
ncpus
;
unsigned
long
long
qemuCmdFlags
;
int
ret
=
-
1
;
int
ret
=
-
1
;
/* Check for existance of base emulator, or alternate base
/* Check for existance of base emulator, or alternate base
...
@@ -546,6 +547,11 @@ qemuCapsInitGuest(virCapsPtr caps,
...
@@ -546,6 +547,11 @@ qemuCapsInitGuest(virCapsPtr caps,
!
virCapabilitiesAddGuestFeature
(
guest
,
"cpuselection"
,
1
,
0
))
!
virCapabilitiesAddGuestFeature
(
guest
,
"cpuselection"
,
1
,
0
))
goto
error
;
goto
error
;
if
(
qemuCapsExtractVersionInfo
(
binary
,
NULL
,
&
qemuCmdFlags
)
<
0
||
((
qemuCmdFlags
&
QEMUD_CMD_FLAG_BOOTINDEX
)
&&
!
virCapabilitiesAddGuestFeature
(
guest
,
"deviceboot"
,
1
,
0
)))
goto
error
;
if
(
hvm
)
{
if
(
hvm
)
{
if
(
virCapabilitiesAddGuestDomain
(
guest
,
if
(
virCapabilitiesAddGuestDomain
(
guest
,
"qemu"
,
"qemu"
,
...
@@ -1047,6 +1053,7 @@ qemuCapsExtractDeviceStr(const char *qemu,
...
@@ -1047,6 +1053,7 @@ qemuCapsExtractDeviceStr(const char *qemu,
* '-device ?'. */
* '-device ?'. */
cmd
=
virCommandNewArgList
(
qemu
,
cmd
=
virCommandNewArgList
(
qemu
,
"-device"
,
"pci-assign,?"
,
"-device"
,
"pci-assign,?"
,
"-device"
,
"virtio-blk-pci,?"
,
NULL
);
NULL
);
virCommandAddEnvPassCommon
(
cmd
);
virCommandAddEnvPassCommon
(
cmd
);
/* qemu -help goes to stdout, but qemu -device ? goes to stderr. */
/* qemu -help goes to stdout, but qemu -device ? goes to stderr. */
...
@@ -1070,6 +1077,8 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags)
...
@@ -1070,6 +1077,8 @@ qemuCapsParseDeviceStr(const char *str, unsigned long long *flags)
{
{
if
(
strstr
(
str
,
"pci-assign.configfd"
))
if
(
strstr
(
str
,
"pci-assign.configfd"
))
*
flags
|=
QEMUD_CMD_FLAG_PCI_CONFIGFD
;
*
flags
|=
QEMUD_CMD_FLAG_PCI_CONFIGFD
;
if
(
strstr
(
str
,
"virtio-blk-pci.bootindex"
))
*
flags
|=
QEMUD_CMD_FLAG_BOOTINDEX
;
return
0
;
return
0
;
}
}
...
...
src/qemu/qemu_capabilities.h
浏览文件 @
3d440358
...
@@ -83,6 +83,7 @@ enum qemuCapsFlags {
...
@@ -83,6 +83,7 @@ enum qemuCapsFlags {
QEMUD_CMD_FLAG_SPICE
=
(
1LL
<<
46
),
/* Is -spice avail */
QEMUD_CMD_FLAG_SPICE
=
(
1LL
<<
46
),
/* Is -spice avail */
QEMUD_CMD_FLAG_VGA_NONE
=
(
1LL
<<
47
),
/* The 'none' arg for '-vga' */
QEMUD_CMD_FLAG_VGA_NONE
=
(
1LL
<<
47
),
/* The 'none' arg for '-vga' */
QEMUD_CMD_FLAG_MIGRATE_QEMU_FD
=
(
1LL
<<
48
),
/* -incoming fd:n */
QEMUD_CMD_FLAG_MIGRATE_QEMU_FD
=
(
1LL
<<
48
),
/* -incoming fd:n */
QEMUD_CMD_FLAG_BOOTINDEX
=
(
1LL
<<
49
),
/* -device bootindex property */
};
};
virCapsPtr
qemuCapsInit
(
virCapsPtr
old_caps
);
virCapsPtr
qemuCapsInit
(
virCapsPtr
old_caps
);
...
...
src/qemu/qemu_command.c
浏览文件 @
3d440358
...
@@ -1342,7 +1342,8 @@ error:
...
@@ -1342,7 +1342,8 @@ error:
char
*
char
*
qemuBuildDriveDevStr
(
virDomainDiskDefPtr
disk
)
qemuBuildDriveDevStr
(
virDomainDiskDefPtr
disk
,
unsigned
long
long
qemuCmdFlags
)
{
{
virBuffer
opt
=
VIR_BUFFER_INITIALIZER
;
virBuffer
opt
=
VIR_BUFFER_INITIALIZER
;
const
char
*
bus
=
virDomainDiskQEMUBusTypeToString
(
disk
->
bus
);
const
char
*
bus
=
virDomainDiskQEMUBusTypeToString
(
disk
->
bus
);
...
@@ -1382,6 +1383,8 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk)
...
@@ -1382,6 +1383,8 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk)
}
}
virBufferVSprintf
(
&
opt
,
",drive=%s%s"
,
QEMU_DRIVE_HOST_PREFIX
,
disk
->
info
.
alias
);
virBufferVSprintf
(
&
opt
,
",drive=%s%s"
,
QEMU_DRIVE_HOST_PREFIX
,
disk
->
info
.
alias
);
virBufferVSprintf
(
&
opt
,
",id=%s"
,
disk
->
info
.
alias
);
virBufferVSprintf
(
&
opt
,
",id=%s"
,
disk
->
info
.
alias
);
if
(
disk
->
bootIndex
&&
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_BOOTINDEX
))
virBufferVSprintf
(
&
opt
,
",bootindex=%d"
,
disk
->
bootIndex
);
if
(
virBufferError
(
&
opt
))
{
if
(
virBufferError
(
&
opt
))
{
virReportOOMError
();
virReportOOMError
();
...
@@ -1538,7 +1541,9 @@ qemuBuildNicStr(virDomainNetDefPtr net,
...
@@ -1538,7 +1541,9 @@ qemuBuildNicStr(virDomainNetDefPtr net,
char
*
char
*
qemuBuildNicDevStr
(
virDomainNetDefPtr
net
,
int
vlan
)
qemuBuildNicDevStr
(
virDomainNetDefPtr
net
,
int
vlan
,
unsigned
long
long
qemuCmdFlags
)
{
{
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
virBuffer
buf
=
VIR_BUFFER_INITIALIZER
;
const
char
*
nic
;
const
char
*
nic
;
...
@@ -1563,6 +1568,8 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan)
...
@@ -1563,6 +1568,8 @@ qemuBuildNicDevStr(virDomainNetDefPtr net, int vlan)
net
->
mac
[
4
],
net
->
mac
[
5
]);
net
->
mac
[
4
],
net
->
mac
[
5
]);
if
(
qemuBuildDeviceAddressStr
(
&
buf
,
&
net
->
info
)
<
0
)
if
(
qemuBuildDeviceAddressStr
(
&
buf
,
&
net
->
info
)
<
0
)
goto
error
;
goto
error
;
if
(
net
->
bootIndex
&&
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_BOOTINDEX
))
virBufferVSprintf
(
&
buf
,
",bootindex=%d"
,
net
->
bootIndex
);
if
(
virBufferError
(
&
buf
))
{
if
(
virBufferError
(
&
buf
))
{
virReportOOMError
();
virReportOOMError
();
...
@@ -3125,10 +3132,19 @@ qemuBuildCommandLine(virConnectPtr conn,
...
@@ -3125,10 +3132,19 @@ qemuBuildCommandLine(virConnectPtr conn,
disk
->
info
.
addr
.
drive
.
unit
disk
->
info
.
addr
.
drive
.
unit
?
'B'
:
'A'
,
?
'B'
:
'A'
,
disk
->
info
.
alias
);
disk
->
info
.
alias
);
if
(
disk
->
bootIndex
&&
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_BOOTINDEX
))
{
virCommandAddArg
(
cmd
,
"-global"
);
virCommandAddArgFormat
(
cmd
,
"isa-fdc.bootindex%c=%d"
,
disk
->
info
.
addr
.
drive
.
unit
?
'B'
:
'A'
,
disk
->
bootIndex
);
}
}
else
{
}
else
{
virCommandAddArg
(
cmd
,
"-device"
);
virCommandAddArg
(
cmd
,
"-device"
);
if
(
!
(
optstr
=
qemuBuildDriveDevStr
(
disk
)))
if
(
!
(
optstr
=
qemuBuildDriveDevStr
(
disk
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
virCommandAddArg
(
cmd
,
optstr
);
virCommandAddArg
(
cmd
,
optstr
);
VIR_FREE
(
optstr
);
VIR_FREE
(
optstr
);
...
@@ -3352,7 +3368,7 @@ qemuBuildCommandLine(virConnectPtr conn,
...
@@ -3352,7 +3368,7 @@ qemuBuildCommandLine(virConnectPtr conn,
}
}
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
virCommandAddArg
(
cmd
,
"-device"
);
virCommandAddArg
(
cmd
,
"-device"
);
if
(
!
(
nic
=
qemuBuildNicDevStr
(
net
,
vlan
)))
if
(
!
(
nic
=
qemuBuildNicDevStr
(
net
,
vlan
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
virCommandAddArg
(
cmd
,
nic
);
virCommandAddArg
(
cmd
,
nic
);
VIR_FREE
(
nic
);
VIR_FREE
(
nic
);
...
...
src/qemu/qemu_command.h
浏览文件 @
3d440358
...
@@ -62,7 +62,8 @@ char * qemuBuildNicStr(virDomainNetDefPtr net,
...
@@ -62,7 +62,8 @@ char * qemuBuildNicStr(virDomainNetDefPtr net,
/* Current, best practice */
/* Current, best practice */
char
*
qemuBuildNicDevStr
(
virDomainNetDefPtr
net
,
char
*
qemuBuildNicDevStr
(
virDomainNetDefPtr
net
,
int
vlan
);
int
vlan
,
unsigned
long
long
qemuCmdFlags
);
char
*
qemuDeviceDriveHostAlias
(
virDomainDiskDefPtr
disk
,
char
*
qemuDeviceDriveHostAlias
(
virDomainDiskDefPtr
disk
,
unsigned
long
long
qemuCmdFlags
);
unsigned
long
long
qemuCmdFlags
);
...
@@ -75,7 +76,8 @@ char *qemuBuildFSStr(virDomainFSDefPtr fs,
...
@@ -75,7 +76,8 @@ char *qemuBuildFSStr(virDomainFSDefPtr fs,
unsigned
long
long
qemuCmdFlags
);
unsigned
long
long
qemuCmdFlags
);
/* Current, best practice */
/* Current, best practice */
char
*
qemuBuildDriveDevStr
(
virDomainDiskDefPtr
disk
);
char
*
qemuBuildDriveDevStr
(
virDomainDiskDefPtr
disk
,
unsigned
long
long
qemuCmdFlags
);
char
*
qemuBuildFSDevStr
(
virDomainFSDefPtr
fs
);
char
*
qemuBuildFSDevStr
(
virDomainFSDefPtr
fs
);
/* Current, best practice */
/* Current, best practice */
char
*
qemuBuildControllerDevStr
(
virDomainControllerDefPtr
def
);
char
*
qemuBuildControllerDevStr
(
virDomainControllerDefPtr
def
);
...
...
src/qemu/qemu_driver.c
浏览文件 @
3d440358
...
@@ -6050,6 +6050,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
...
@@ -6050,6 +6050,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
*/
*/
for
(
i
=
0
;
i
<
def
->
nnets
;
i
++
)
{
for
(
i
=
0
;
i
<
def
->
nnets
;
i
++
)
{
virDomainNetDefPtr
net
=
def
->
nets
[
i
];
virDomainNetDefPtr
net
=
def
->
nets
[
i
];
int
bootIndex
=
net
->
bootIndex
;
if
(
net
->
type
==
VIR_DOMAIN_NET_TYPE_NETWORK
||
if
(
net
->
type
==
VIR_DOMAIN_NET_TYPE_NETWORK
||
net
->
type
==
VIR_DOMAIN_NET_TYPE_DIRECT
)
{
net
->
type
==
VIR_DOMAIN_NET_TYPE_DIRECT
)
{
VIR_FREE
(
net
->
data
.
network
.
name
);
VIR_FREE
(
net
->
data
.
network
.
name
);
...
@@ -6072,6 +6073,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
...
@@ -6072,6 +6073,7 @@ static char *qemuDomainXMLToNative(virConnectPtr conn,
net
->
data
.
ethernet
.
script
=
script
;
net
->
data
.
ethernet
.
script
=
script
;
net
->
data
.
ethernet
.
ipaddr
=
ipaddr
;
net
->
data
.
ethernet
.
ipaddr
=
ipaddr
;
}
}
net
->
bootIndex
=
bootIndex
;
}
}
for
(
i
=
0
;
i
<
def
->
ngraphics
;
i
++
)
{
for
(
i
=
0
;
i
<
def
->
ngraphics
;
i
++
)
{
if
(
def
->
graphics
[
i
]
->
type
==
VIR_DOMAIN_GRAPHICS_TYPE_VNC
&&
if
(
def
->
graphics
[
i
]
->
type
==
VIR_DOMAIN_GRAPHICS_TYPE_VNC
&&
...
...
src/qemu/qemu_hotplug.c
浏览文件 @
3d440358
...
@@ -169,7 +169,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
...
@@ -169,7 +169,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
if
(
!
(
drivestr
=
qemuBuildDriveStr
(
disk
,
0
,
qemuCmdFlags
)))
if
(
!
(
drivestr
=
qemuBuildDriveStr
(
disk
,
0
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
)))
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
}
}
...
@@ -380,7 +380,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
...
@@ -380,7 +380,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
if
(
qemuAssignDeviceDiskAlias
(
disk
,
qemuCmdFlags
)
<
0
)
if
(
qemuAssignDeviceDiskAlias
(
disk
,
qemuCmdFlags
)
<
0
)
goto
error
;
goto
error
;
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
)))
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
}
}
...
@@ -493,7 +493,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
...
@@ -493,7 +493,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
goto
error
;
goto
error
;
if
(
!
(
drivestr
=
qemuBuildDriveStr
(
disk
,
0
,
qemuCmdFlags
)))
if
(
!
(
drivestr
=
qemuBuildDriveStr
(
disk
,
0
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
)))
if
(
!
(
devstr
=
qemuBuildDriveDevStr
(
disk
,
qemuCmdFlags
)))
goto
error
;
goto
error
;
}
}
...
@@ -675,7 +675,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
...
@@ -675,7 +675,7 @@ int qemuDomainAttachNetDevice(virConnectPtr conn,
}
}
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
if
(
qemuCmdFlags
&
QEMUD_CMD_FLAG_DEVICE
)
{
if
(
!
(
nicstr
=
qemuBuildNicDevStr
(
net
,
vlan
)))
if
(
!
(
nicstr
=
qemuBuildNicDevStr
(
net
,
vlan
,
qemuCmdFlags
)))
goto
try_remove
;
goto
try_remove
;
}
else
{
}
else
{
if
(
!
(
nicstr
=
qemuBuildNicStr
(
net
,
NULL
,
vlan
)))
if
(
!
(
nicstr
=
qemuBuildNicStr
(
net
,
NULL
,
vlan
)))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录