Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
4a1cc680
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看板
提交
4a1cc680
编写于
12月 19, 2011
作者:
A
Anthony Liguori
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'qemu-kvm/memory/xen' into staging
上级
cde7fc31
ce76b8a8
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
42 addition
and
31 deletion
+42
-31
cpu-common.h
cpu-common.h
+5
-2
exec.c
exec.c
+6
-4
hw/xen.h
hw/xen.h
+3
-1
memory.c
memory.c
+3
-3
xen-all.c
xen-all.c
+23
-20
xen-stub.c
xen-stub.c
+2
-1
未找到文件。
cpu-common.h
浏览文件 @
4a1cc680
...
...
@@ -61,9 +61,12 @@ static inline void cpu_register_physical_memory(target_phys_addr_t start_addr,
}
ram_addr_t
cpu_get_physical_page_desc
(
target_phys_addr_t
addr
);
struct
MemoryRegion
;
ram_addr_t
qemu_ram_alloc_from_ptr
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
,
void
*
host
);
ram_addr_t
qemu_ram_alloc
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
);
ram_addr_t
size
,
void
*
host
,
struct
MemoryRegion
*
mr
);
ram_addr_t
qemu_ram_alloc
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
,
struct
MemoryRegion
*
mr
);
void
qemu_ram_free
(
ram_addr_t
addr
);
void
qemu_ram_free_from_ptr
(
ram_addr_t
addr
);
void
qemu_ram_remap
(
ram_addr_t
addr
,
ram_addr_t
length
);
...
...
exec.c
浏览文件 @
4a1cc680
...
...
@@ -2916,7 +2916,8 @@ static ram_addr_t last_ram_offset(void)
}
ram_addr_t
qemu_ram_alloc_from_ptr
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
,
void
*
host
)
ram_addr_t
size
,
void
*
host
,
MemoryRegion
*
mr
)
{
RAMBlock
*
new_block
,
*
block
;
...
...
@@ -2972,7 +2973,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
}
#else
if
(
xen_enabled
())
{
xen_ram_alloc
(
new_block
->
offset
,
size
);
xen_ram_alloc
(
new_block
->
offset
,
size
,
mr
);
}
else
{
new_block
->
host
=
qemu_vmalloc
(
size
);
}
...
...
@@ -2995,9 +2996,10 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
return
new_block
->
offset
;
}
ram_addr_t
qemu_ram_alloc
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
)
ram_addr_t
qemu_ram_alloc
(
DeviceState
*
dev
,
const
char
*
name
,
ram_addr_t
size
,
MemoryRegion
*
mr
)
{
return
qemu_ram_alloc_from_ptr
(
dev
,
name
,
size
,
NULL
);
return
qemu_ram_alloc_from_ptr
(
dev
,
name
,
size
,
NULL
,
mr
);
}
void
qemu_ram_free_from_ptr
(
ram_addr_t
addr
)
...
...
hw/xen.h
浏览文件 @
4a1cc680
...
...
@@ -44,7 +44,9 @@ void xen_vcpu_init(void);
void
xenstore_store_pv_console_info
(
int
i
,
struct
CharDriverState
*
chr
);
#if defined(NEED_CPU_H) && !defined(CONFIG_USER_ONLY)
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
);
struct
MemoryRegion
;
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
,
struct
MemoryRegion
*
mr
);
#endif
#if defined(CONFIG_XEN) && CONFIG_XEN_CTRL_INTERFACE_VERSION < 400
...
...
memory.c
浏览文件 @
4a1cc680
...
...
@@ -997,7 +997,7 @@ void memory_region_init_ram(MemoryRegion *mr,
memory_region_init
(
mr
,
name
,
size
);
mr
->
terminates
=
true
;
mr
->
destructor
=
memory_region_destructor_ram
;
mr
->
ram_addr
=
qemu_ram_alloc
(
dev
,
name
,
size
);
mr
->
ram_addr
=
qemu_ram_alloc
(
dev
,
name
,
size
,
mr
);
mr
->
backend_registered
=
true
;
}
...
...
@@ -1010,7 +1010,7 @@ void memory_region_init_ram_ptr(MemoryRegion *mr,
memory_region_init
(
mr
,
name
,
size
);
mr
->
terminates
=
true
;
mr
->
destructor
=
memory_region_destructor_ram_from_ptr
;
mr
->
ram_addr
=
qemu_ram_alloc_from_ptr
(
dev
,
name
,
size
,
ptr
);
mr
->
ram_addr
=
qemu_ram_alloc_from_ptr
(
dev
,
name
,
size
,
ptr
,
mr
);
mr
->
backend_registered
=
true
;
}
...
...
@@ -1037,7 +1037,7 @@ void memory_region_init_rom_device(MemoryRegion *mr,
mr
->
opaque
=
opaque
;
mr
->
terminates
=
true
;
mr
->
destructor
=
memory_region_destructor_rom_device
;
mr
->
ram_addr
=
qemu_ram_alloc
(
dev
,
name
,
size
);
mr
->
ram_addr
=
qemu_ram_alloc
(
dev
,
name
,
size
,
mr
);
mr
->
ram_addr
|=
cpu_register_io_memory
(
memory_region_read_thunk
,
memory_region_write_thunk
,
mr
,
...
...
xen-all.c
浏览文件 @
4a1cc680
...
...
@@ -16,6 +16,7 @@
#include "range.h"
#include "xen-mapcache.h"
#include "trace.h"
#include "exec-memory.h"
#include <xen/hvm/ioreq.h>
#include <xen/hvm/params.h>
...
...
@@ -31,6 +32,8 @@
do { } while (0)
#endif
static
MemoryRegion
ram_memory
,
ram_640k
,
ram_lo
,
ram_hi
;
/* Compatibility with older version */
#if __XEN_LATEST_INTERFACE_VERSION__ < 0x0003020a
static
inline
uint32_t
xen_vcpu_eport
(
shared_iopage_t
*
shared_page
,
int
i
)
...
...
@@ -137,27 +140,18 @@ qemu_irq *xen_interrupt_controller_init(void)
static
void
xen_ram_init
(
ram_addr_t
ram_size
)
{
RAMBlock
*
new_block
;
MemoryRegion
*
sysmem
=
get_system_memory
()
;
ram_addr_t
below_4g_mem_size
,
above_4g_mem_size
=
0
;
ram_addr_t
block_len
;
new_block
=
g_malloc0
(
sizeof
(
*
new_block
));
pstrcpy
(
new_block
->
idstr
,
sizeof
(
new_block
->
idstr
),
"xen.ram"
);
new_block
->
host
=
NULL
;
new_block
->
offset
=
0
;
new_block
->
length
=
ram_size
;
block_len
=
ram_size
;
if
(
ram_size
>=
HVM_BELOW_4G_RAM_END
)
{
/* Xen does not allocate the memory continuously, and keep a hole at
* HVM_BELOW_4G_MMIO_START of HVM_BELOW_4G_MMIO_LENGTH
*/
new_block
->
length
+=
HVM_BELOW_4G_MMIO_LENGTH
;
block_len
+=
HVM_BELOW_4G_MMIO_LENGTH
;
}
QLIST_INSERT_HEAD
(
&
ram_list
.
blocks
,
new_block
,
next
);
ram_list
.
phys_dirty
=
g_realloc
(
ram_list
.
phys_dirty
,
new_block
->
length
>>
TARGET_PAGE_BITS
);
memset
(
ram_list
.
phys_dirty
+
(
new_block
->
offset
>>
TARGET_PAGE_BITS
),
0xff
,
new_block
->
length
>>
TARGET_PAGE_BITS
);
memory_region_init_ram
(
&
ram_memory
,
NULL
,
"xen.ram"
,
block_len
);
if
(
ram_size
>=
HVM_BELOW_4G_RAM_END
)
{
above_4g_mem_size
=
ram_size
-
HVM_BELOW_4G_RAM_END
;
...
...
@@ -166,27 +160,36 @@ static void xen_ram_init(ram_addr_t ram_size)
below_4g_mem_size
=
ram_size
;
}
cpu_register_physical_memory
(
0
,
0xa0000
,
0
);
memory_region_init_alias
(
&
ram_640k
,
"xen.ram.640k"
,
&
ram_memory
,
0
,
0xa0000
);
memory_region_add_subregion
(
sysmem
,
0
,
&
ram_640k
);
/* Skip of the VGA IO memory space, it will be registered later by the VGA
* emulated device.
*
* The area between 0xc0000 and 0x100000 will be used by SeaBIOS to load
* the Options ROM, so it is registered here as RAM.
*/
cpu_register_physical_memory
(
0xc0000
,
below_4g_mem_size
-
0xc0000
,
0xc0000
);
memory_region_init_alias
(
&
ram_lo
,
"xen.ram.lo"
,
&
ram_memory
,
0xc0000
,
below_4g_mem_size
-
0xc0000
);
memory_region_add_subregion
(
sysmem
,
0xc0000
,
&
ram_lo
);
if
(
above_4g_mem_size
>
0
)
{
cpu_register_physical_memory
(
0x100000000ULL
,
above_4g_mem_size
,
0x100000000ULL
);
memory_region_init_alias
(
&
ram_hi
,
"xen.ram.hi"
,
&
ram_memory
,
0x100000000ULL
,
above_4g_mem_size
);
memory_region_add_subregion
(
sysmem
,
0x100000000ULL
,
&
ram_hi
);
}
}
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
)
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
,
MemoryRegion
*
mr
)
{
unsigned
long
nr_pfn
;
xen_pfn_t
*
pfn_list
;
int
i
;
if
(
mr
==
&
ram_memory
)
{
return
;
}
trace_xen_ram_alloc
(
ram_addr
,
size
);
nr_pfn
=
size
>>
TARGET_PAGE_BITS
;
...
...
xen-stub.c
浏览文件 @
4a1cc680
...
...
@@ -8,6 +8,7 @@
#include "qemu-common.h"
#include "hw/xen.h"
#include "memory.h"
void
xenstore_store_pv_console_info
(
int
i
,
CharDriverState
*
chr
)
{
...
...
@@ -30,7 +31,7 @@ void xen_cmos_set_s3_resume(void *opaque, int irq, int level)
{
}
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
)
void
xen_ram_alloc
(
ram_addr_t
ram_addr
,
ram_addr_t
size
,
MemoryRegion
*
mr
)
{
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录