Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
81e34a24
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
81e34a24
编写于
8月 04, 2011
作者:
A
Anthony Liguori
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'mst/for_anthony' into staging
上级
e06516f5
cb4b4fde
变更
10
显示空白变更内容
内联
并排
Showing
10 changed file
with
79 addition
and
31 deletion
+79
-31
hw/pci.c
hw/pci.c
+2
-4
hw/pci_host.c
hw/pci_host.c
+20
-4
hw/pci_host.h
hw/pci_host.h
+6
-0
hw/pcie_host.c
hw/pcie_host.c
+24
-8
hw/vhost.c
hw/vhost.c
+0
-1
hw/virtio-blk.c
hw/virtio-blk.c
+1
-0
hw/virtio-net.c
hw/virtio-net.c
+1
-1
hw/virtio-pci.c
hw/virtio-pci.c
+9
-9
hw/virtio.c
hw/virtio.c
+1
-0
net.c
net.c
+15
-4
未找到文件。
hw/pci.c
浏览文件 @
81e34a24
...
...
@@ -1145,8 +1145,7 @@ uint32_t pci_default_read_config(PCIDevice *d,
uint32_t
address
,
int
len
)
{
uint32_t
val
=
0
;
assert
(
len
==
1
||
len
==
2
||
len
==
4
);
len
=
MIN
(
len
,
pci_config_size
(
d
)
-
address
);
memcpy
(
&
val
,
d
->
config
+
address
,
len
);
return
le32_to_cpu
(
val
);
}
...
...
@@ -1154,9 +1153,8 @@ uint32_t pci_default_read_config(PCIDevice *d,
void
pci_default_write_config
(
PCIDevice
*
d
,
uint32_t
addr
,
uint32_t
val
,
int
l
)
{
int
i
,
was_irq_disabled
=
pci_irq_disabled
(
d
);
uint32_t
config_size
=
pci_config_size
(
d
);
for
(
i
=
0
;
i
<
l
&&
addr
+
i
<
config_size
;
val
>>=
8
,
++
i
)
{
for
(
i
=
0
;
i
<
l
;
val
>>=
8
,
++
i
)
{
uint8_t
wmask
=
d
->
wmask
[
addr
+
i
];
uint8_t
w1cmask
=
d
->
w1cmask
[
addr
+
i
];
assert
(
!
(
wmask
&
w1cmask
));
...
...
hw/pci_host.c
浏览文件 @
81e34a24
...
...
@@ -47,17 +47,33 @@ static inline PCIDevice *pci_dev_find_by_addr(PCIBus *bus, uint32_t addr)
return
pci_find_device
(
bus
,
bus_num
,
devfn
);
}
void
pci_host_config_write_common
(
PCIDevice
*
pci_dev
,
uint32_t
addr
,
uint32_t
limit
,
uint32_t
val
,
uint32_t
len
)
{
assert
(
len
<=
4
);
pci_dev
->
config_write
(
pci_dev
,
addr
,
val
,
MIN
(
len
,
limit
-
addr
));
}
uint32_t
pci_host_config_read_common
(
PCIDevice
*
pci_dev
,
uint32_t
addr
,
uint32_t
limit
,
uint32_t
len
)
{
assert
(
len
<=
4
);
return
pci_dev
->
config_read
(
pci_dev
,
addr
,
MIN
(
len
,
limit
-
addr
));
}
void
pci_data_write
(
PCIBus
*
s
,
uint32_t
addr
,
uint32_t
val
,
int
len
)
{
PCIDevice
*
pci_dev
=
pci_dev_find_by_addr
(
s
,
addr
);
uint32_t
config_addr
=
addr
&
(
PCI_CONFIG_SPACE_SIZE
-
1
);
if
(
!
pci_dev
)
if
(
!
pci_dev
)
{
return
;
}
PCI_DPRINTF
(
"%s: %s: addr=%02"
PRIx32
" val=%08"
PRIx32
" len=%d
\n
"
,
__func__
,
pci_dev
->
name
,
config_addr
,
val
,
len
);
pci_dev
->
config_write
(
pci_dev
,
config_addr
,
val
,
len
);
pci_host_config_write_common
(
pci_dev
,
config_addr
,
PCI_CONFIG_SPACE_SIZE
,
val
,
len
);
}
uint32_t
pci_data_read
(
PCIBus
*
s
,
uint32_t
addr
,
int
len
)
...
...
@@ -66,12 +82,12 @@ uint32_t pci_data_read(PCIBus *s, uint32_t addr, int len)
uint32_t
config_addr
=
addr
&
(
PCI_CONFIG_SPACE_SIZE
-
1
);
uint32_t
val
;
assert
(
len
==
1
||
len
==
2
||
len
==
4
);
if
(
!
pci_dev
)
{
return
~
0x0
;
}
val
=
pci_dev
->
config_read
(
pci_dev
,
config_addr
,
len
);
val
=
pci_host_config_read_common
(
pci_dev
,
config_addr
,
PCI_CONFIG_SPACE_SIZE
,
len
);
PCI_DPRINTF
(
"%s: %s: addr=%02"
PRIx32
" val=%08"
PRIx32
" len=%d
\n
"
,
__func__
,
pci_dev
->
name
,
config_addr
,
val
,
len
);
...
...
hw/pci_host.h
浏览文件 @
81e34a24
...
...
@@ -40,6 +40,12 @@ struct PCIHostState {
PCIBus
*
bus
;
};
/* common internal helpers for PCI/PCIe hosts, cut off overflows */
void
pci_host_config_write_common
(
PCIDevice
*
pci_dev
,
uint32_t
addr
,
uint32_t
limit
,
uint32_t
val
,
uint32_t
len
);
uint32_t
pci_host_config_read_common
(
PCIDevice
*
pci_dev
,
uint32_t
addr
,
uint32_t
limit
,
uint32_t
len
);
void
pci_data_write
(
PCIBus
*
s
,
uint32_t
addr
,
uint32_t
val
,
int
len
);
uint32_t
pci_data_read
(
PCIBus
*
s
,
uint32_t
addr
,
int
len
);
...
...
hw/pcie_host.c
浏览文件 @
81e34a24
...
...
@@ -56,23 +56,39 @@ static void pcie_mmcfg_data_write(PCIBus *s,
uint32_t
mmcfg_addr
,
uint32_t
val
,
int
len
)
{
PCIDevice
*
pci_dev
=
pcie_dev_find_by_mmcfg_addr
(
s
,
mmcfg_addr
);
uint32_t
addr
;
uint32_t
limit
;
if
(
!
pci_dev
)
if
(
!
pci_dev
)
{
return
;
pci_dev
->
config_write
(
pci_dev
,
PCIE_MMCFG_CONFOFFSET
(
mmcfg_addr
),
val
,
len
);
}
addr
=
PCIE_MMCFG_CONFOFFSET
(
mmcfg_addr
);
limit
=
pci_config_size
(
pci_dev
);
if
(
limit
<=
addr
)
{
/* conventional pci device can be behind pcie-to-pci bridge.
256 <= addr < 4K has no effects. */
return
;
}
pci_host_config_write_common
(
pci_dev
,
addr
,
limit
,
val
,
len
);
}
static
uint32_t
pcie_mmcfg_data_read
(
PCIBus
*
s
,
uint32_t
addr
,
int
len
)
static
uint32_t
pcie_mmcfg_data_read
(
PCIBus
*
s
,
uint32_t
mmcfg_
addr
,
int
len
)
{
PCIDevice
*
pci_dev
=
pcie_dev_find_by_mmcfg_addr
(
s
,
addr
);
PCIDevice
*
pci_dev
=
pcie_dev_find_by_mmcfg_addr
(
s
,
mmcfg_addr
);
uint32_t
addr
;
uint32_t
limit
;
assert
(
len
==
1
||
len
==
2
||
len
==
4
);
if
(
!
pci_dev
)
{
return
~
0x0
;
}
return
pci_dev
->
config_read
(
pci_dev
,
PCIE_MMCFG_CONFOFFSET
(
addr
),
len
);
addr
=
PCIE_MMCFG_CONFOFFSET
(
mmcfg_addr
);
limit
=
pci_config_size
(
pci_dev
);
if
(
limit
<=
addr
)
{
/* conventional pci device can be behind pcie-to-pci bridge.
256 <= addr < 4K has no effects. */
return
~
0x0
;
}
return
pci_host_config_read_common
(
pci_dev
,
addr
,
limit
,
len
);
}
static
void
pcie_mmcfg_data_writeb
(
void
*
opaque
,
...
...
hw/vhost.c
浏览文件 @
81e34a24
...
...
@@ -120,7 +120,6 @@ static void vhost_dev_unassign_memory(struct vhost_dev *dev,
if
(
start_addr
<=
reg
->
guest_phys_addr
&&
memlast
>=
reglast
)
{
--
dev
->
mem
->
nregions
;
--
to
;
assert
(
to
>=
0
);
++
overlap_middle
;
continue
;
}
...
...
hw/virtio-blk.c
浏览文件 @
81e34a24
...
...
@@ -594,4 +594,5 @@ void virtio_blk_exit(VirtIODevice *vdev)
{
VirtIOBlock
*
s
=
to_virtio_blk
(
vdev
);
unregister_savevm
(
s
->
qdev
,
"virtio-blk"
,
s
);
virtio_cleanup
(
vdev
);
}
hw/virtio-net.c
浏览文件 @
81e34a24
...
...
@@ -1073,6 +1073,6 @@ void virtio_net_exit(VirtIODevice *vdev)
qemu_bh_delete
(
n
->
tx_bh
);
}
virtio_cleanup
(
&
n
->
vdev
);
qemu_del_vlan_client
(
&
n
->
nic
->
nc
);
virtio_cleanup
(
&
n
->
vdev
);
}
hw/virtio-pci.c
浏览文件 @
81e34a24
...
...
@@ -27,6 +27,7 @@
#include "kvm.h"
#include "blockdev.h"
#include "virtio-pci.h"
#include "range.h"
/* from Linux's linux/virtio_pci.h */
...
...
@@ -516,17 +517,16 @@ static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
{
VirtIOPCIProxy
*
proxy
=
DO_UPCAST
(
VirtIOPCIProxy
,
pci_dev
,
pci_dev
);
if
(
PCI_COMMAND
==
address
)
{
if
(
!
(
val
&
PCI_COMMAND_MASTER
))
{
if
(
!
(
proxy
->
flags
&
VIRTIO_PCI_FLAG_BUS_MASTER_BUG
))
{
pci_default_write_config
(
pci_dev
,
address
,
val
,
len
);
if
(
range_covers_byte
(
address
,
len
,
PCI_COMMAND
)
&&
!
(
pci_dev
->
config
[
PCI_COMMAND
]
&
PCI_COMMAND_MASTER
)
&&
!
(
proxy
->
flags
&
VIRTIO_PCI_FLAG_BUS_MASTER_BUG
))
{
virtio_pci_stop_ioeventfd
(
proxy
);
virtio_set_status
(
proxy
->
vdev
,
proxy
->
vdev
->
status
&
~
VIRTIO_CONFIG_S_DRIVER_OK
);
}
}
}
pci_default_write_config
(
pci_dev
,
address
,
val
,
len
);
msix_write_config
(
pci_dev
,
address
,
val
,
len
);
}
...
...
hw/virtio.c
浏览文件 @
81e34a24
...
...
@@ -834,6 +834,7 @@ void virtio_cleanup(VirtIODevice *vdev)
if
(
vdev
->
config
)
qemu_free
(
vdev
->
config
);
qemu_free
(
vdev
->
vq
);
qemu_free
(
vdev
);
}
static
void
virtio_vmstate_change
(
void
*
opaque
,
int
running
,
int
reason
)
...
...
net.c
浏览文件 @
81e34a24
...
...
@@ -150,12 +150,11 @@ void qemu_macaddr_default_if_unset(MACAddr *macaddr)
static
char
*
assign_name
(
VLANClientState
*
vc1
,
const
char
*
model
)
{
VLANState
*
vlan
;
VLANClientState
*
vc
;
char
buf
[
256
];
int
id
=
0
;
QTAILQ_FOREACH
(
vlan
,
&
vlans
,
next
)
{
VLANClientState
*
vc
;
QTAILQ_FOREACH
(
vc
,
&
vlan
->
clients
,
next
)
{
if
(
vc
!=
vc1
&&
strcmp
(
vc
->
model
,
model
)
==
0
)
{
id
++
;
...
...
@@ -163,6 +162,12 @@ static char *assign_name(VLANClientState *vc1, const char *model)
}
}
QTAILQ_FOREACH
(
vc
,
&
non_vlan_clients
,
next
)
{
if
(
vc
!=
vc1
&&
strcmp
(
vc
->
model
,
model
)
==
0
)
{
id
++
;
}
}
snprintf
(
buf
,
sizeof
(
buf
),
"%s.%d"
,
model
,
id
);
return
qemu_strdup
(
buf
);
...
...
@@ -653,6 +658,8 @@ VLANClientState *qemu_find_netdev(const char *id)
VLANClientState
*
vc
;
QTAILQ_FOREACH
(
vc
,
&
non_vlan_clients
,
next
)
{
if
(
vc
->
info
->
type
==
NET_CLIENT_TYPE_NIC
)
continue
;
if
(
!
strcmp
(
vc
->
name
,
id
))
{
return
vc
;
}
...
...
@@ -1212,7 +1219,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
VLANClientState
*
vc
;
vc
=
qemu_find_netdev
(
id
);
if
(
!
vc
||
vc
->
info
->
type
==
NET_CLIENT_TYPE_NIC
)
{
if
(
!
vc
)
{
qerror_report
(
QERR_DEVICE_NOT_FOUND
,
id
);
return
-
1
;
}
...
...
@@ -1270,7 +1277,11 @@ int do_set_link(Monitor *mon, const QDict *qdict, QObject **ret_data)
}
}
}
vc
=
qemu_find_netdev
(
name
);
QTAILQ_FOREACH
(
vc
,
&
non_vlan_clients
,
next
)
{
if
(
!
strcmp
(
vc
->
name
,
name
))
{
goto
done
;
}
}
done:
if
(
!
vc
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录