Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
caa97225
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,发现更多精彩内容 >>
提交
caa97225
编写于
4月 26, 2010
作者:
A
Anthony Liguori
浏览文件
操作
浏览文件
下载
差异文件
Merge remote branch 'qmp/for-anthony' into staging
上级
70ec48ef
e53f27b9
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
64 addition
and
41 deletion
+64
-41
monitor.c
monitor.c
+6
-11
qemu-char.c
qemu-char.c
+3
-6
qemu-options.hx
qemu-options.hx
+20
-15
qerror.c
qerror.c
+5
-1
qerror.h
qerror.h
+3
-0
sysemu.h
sysemu.h
+2
-0
vl.c
vl.c
+25
-8
未找到文件。
monitor.c
浏览文件 @
caa97225
...
...
@@ -1017,7 +1017,8 @@ static void do_info_cpu_stats(Monitor *mon)
*/
static
int
do_quit
(
Monitor
*
mon
,
const
QDict
*
qdict
,
QObject
**
ret_data
)
{
exit
(
0
);
monitor_suspend
(
mon
);
qemu_system_exit_request
();
return
0
;
}
...
...
@@ -2414,15 +2415,6 @@ static int do_getfd(Monitor *mon, const QDict *qdict, QObject **ret_data)
return
-
1
;
}
fd
=
dup
(
fd
);
if
(
fd
==
-
1
)
{
if
(
errno
==
EMFILE
)
qerror_report
(
QERR_TOO_MANY_FILES
);
else
qerror_report
(
QERR_UNDEFINED_ERROR
);
return
-
1
;
}
QLIST_FOREACH
(
monfd
,
&
mon
->
fds
,
next
)
{
if
(
strcmp
(
monfd
->
name
,
fdname
)
!=
0
)
{
continue
;
...
...
@@ -4404,7 +4396,7 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
qerror_report
(
QERR_QMP_BAD_INPUT_OBJECT
,
"execute"
);
goto
err_input
;
}
else
if
(
qobject_type
(
obj
)
!=
QTYPE_QSTRING
)
{
qerror_report
(
QERR_QMP_BAD_INPUT_OBJECT
,
"string"
);
qerror_report
(
QERR_QMP_BAD_INPUT_OBJECT
_MEMBER
,
"execute"
,
"string"
);
goto
err_input
;
}
...
...
@@ -4437,6 +4429,9 @@ static void handle_qmp_command(JSONMessageParser *parser, QList *tokens)
obj
=
qdict_get
(
input
,
"arguments"
);
if
(
!
obj
)
{
args
=
qdict_new
();
}
else
if
(
qobject_type
(
obj
)
!=
QTYPE_QDICT
)
{
qerror_report
(
QERR_QMP_BAD_INPUT_OBJECT_MEMBER
,
"arguments"
,
"object"
);
goto
err_input
;
}
else
{
args
=
qobject_to_qdict
(
obj
);
QINCREF
(
args
);
...
...
qemu-char.c
浏览文件 @
caa97225
...
...
@@ -2000,8 +2000,9 @@ static void tcp_chr_process_IAC_bytes(CharDriverState *chr,
static
int
tcp_get_msgfd
(
CharDriverState
*
chr
)
{
TCPCharDriver
*
s
=
chr
->
opaque
;
return
s
->
msgfd
;
int
fd
=
s
->
msgfd
;
s
->
msgfd
=
-
1
;
return
fd
;
}
#ifndef _WIN32
...
...
@@ -2089,10 +2090,6 @@ static void tcp_chr_read(void *opaque)
tcp_chr_process_IAC_bytes
(
chr
,
s
,
buf
,
&
size
);
if
(
size
>
0
)
qemu_chr_read
(
chr
,
buf
,
size
);
if
(
s
->
msgfd
!=
-
1
)
{
close
(
s
->
msgfd
);
s
->
msgfd
=
-
1
;
}
}
}
...
...
qemu-options.hx
浏览文件 @
caa97225
...
...
@@ -1175,32 +1175,33 @@ DEFHEADING()
DEFHEADING(Character device options:)
DEF("chardev", HAS_ARG, QEMU_OPTION_chardev,
"-chardev null,id=id\n"
"-chardev null,id=id
[,mux=on|off]
\n"
"-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]\n"
" [,server][,nowait][,telnet] (tcp)\n"
"-chardev socket,id=id,path=path[,server][,nowait][,telnet] (unix)\n"
" [,server][,nowait][,telnet]
[,mux=on|off]
(tcp)\n"
"-chardev socket,id=id,path=path[,server][,nowait][,telnet]
,[mux=on|off]
(unix)\n"
"-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]\n"
" [,localport=localport][,ipv4][,ipv6]\n"
"-chardev msmouse,id=id\n"
" [,localport=localport][,ipv4][,ipv6]
[,mux=on|off]
\n"
"-chardev msmouse,id=id
[,mux=on|off]
\n"
"-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]\n"
"-chardev file,id=id,path=path\n"
"-chardev pipe,id=id,path=path\n"
" [,mux=on|off]\n"
"-chardev file,id=id,path=path[,mux=on|off]\n"
"-chardev pipe,id=id,path=path[,mux=on|off]\n"
#ifdef _WIN32
"-chardev console,id=id\n"
"-chardev serial,id=id,path=path\n"
"-chardev console,id=id
[,mux=on|off]
\n"
"-chardev serial,id=id,path=path
[,mux=on|off]
\n"
#else
"-chardev pty,id=id\n"
"-chardev stdio,id=id\n"
"-chardev pty,id=id
[,mux=on|off]
\n"
"-chardev stdio,id=id
[,mux=on|off]
\n"
#endif
#ifdef CONFIG_BRLAPI
"-chardev braille,id=id\n"
"-chardev braille,id=id
[,mux=on|off]
\n"
#endif
#if defined(__linux__) || defined(__sun__) || defined(__FreeBSD__) \
|| defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
"-chardev tty,id=id,path=path\n"
"-chardev tty,id=id,path=path
[,mux=on|off]
\n"
#endif
#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__)
"-chardev parport,id=id,path=path\n"
"-chardev parport,id=id,path=path
[,mux=on|off]
\n"
#endif
, QEMU_ARCH_ALL
)
...
...
@@ -1210,7 +1211,7 @@ STEXI
The general form of a character device option is:
@table @option
@item -chardev @var{backend} ,id=@var{id} [,@var{options}]
@item -chardev @var{backend} ,id=@var{id} [,
mux=on|off] [,
@var{options}]
@findex -chardev
Backend is one of:
@option{null},
...
...
@@ -1232,6 +1233,10 @@ The specific backend will determine the applicable options.
All devices must have an id, which can be any string up to 127 characters long.
It is used to uniquely identify this device in other command line directives.
A character device may be used in multiplexing mode by multiple front-ends.
The key sequence of @key{Control-a} and @key{c} will rotate the input focus
between attached front-ends. Specify @option{mux=on} to enable this mode.
Options to each backend are described below.
@item -chardev null ,id=@var{id}
...
...
qerror.c
浏览文件 @
caa97225
...
...
@@ -170,7 +170,11 @@ static const QErrorStringTable qerror_table[] = {
},
{
.
error_fmt
=
QERR_QMP_BAD_INPUT_OBJECT
,
.
desc
=
"Bad QMP input object"
,
.
desc
=
"Expected '%(expected)' in QMP input"
,
},
{
.
error_fmt
=
QERR_QMP_BAD_INPUT_OBJECT_MEMBER
,
.
desc
=
"QMP input object member '%(member)' expects '%(expected)'"
,
},
{
.
error_fmt
=
QERR_SET_PASSWD_FAILED
,
...
...
qerror.h
浏览文件 @
caa97225
...
...
@@ -145,6 +145,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_QMP_BAD_INPUT_OBJECT \
"{ 'class': 'QMPBadInputObject', 'data': { 'expected': %s } }"
#define QERR_QMP_BAD_INPUT_OBJECT_MEMBER \
"{ 'class': 'QMPBadInputObjectMember', 'data': { 'member': %s, 'expected': %s } }"
#define QERR_SET_PASSWD_FAILED \
"{ 'class': 'SetPasswdFailed', 'data': {} }"
...
...
sysemu.h
浏览文件 @
caa97225
...
...
@@ -45,9 +45,11 @@ void cpu_disable_ticks(void);
void
qemu_system_reset_request
(
void
);
void
qemu_system_shutdown_request
(
void
);
void
qemu_system_powerdown_request
(
void
);
void
qemu_system_exit_request
(
void
);
int
qemu_shutdown_requested
(
void
);
int
qemu_reset_requested
(
void
);
int
qemu_powerdown_requested
(
void
);
int
qemu_exit_requested
(
void
);
extern
qemu_irq
qemu_system_powerdown
;
void
qemu_system_reset
(
void
);
...
...
vl.c
浏览文件 @
caa97225
...
...
@@ -1697,6 +1697,7 @@ static int shutdown_requested;
static
int
powerdown_requested
;
int
debug_requested
;
int
vmstop_requested
;
static
int
exit_requested
;
int
qemu_shutdown_requested
(
void
)
{
...
...
@@ -1719,6 +1720,12 @@ int qemu_powerdown_requested(void)
return
r
;
}
int
qemu_exit_requested
(
void
)
{
/* just return it, we'll exit() anyway */
return
exit_requested
;
}
static
int
qemu_debug_requested
(
void
)
{
int
r
=
debug_requested
;
...
...
@@ -1789,6 +1796,12 @@ void qemu_system_powerdown_request(void)
qemu_notify_event
();
}
void
qemu_system_exit_request
(
void
)
{
exit_requested
=
1
;
qemu_notify_event
();
}
#ifdef _WIN32
static
void
host_main_loop_wait
(
int
*
timeout
)
{
...
...
@@ -1925,6 +1938,8 @@ static int vm_can_run(void)
return
0
;
if
(
debug_requested
)
return
0
;
if
(
exit_requested
)
return
0
;
return
1
;
}
...
...
@@ -1977,6 +1992,9 @@ static void main_loop(void)
if
((
r
=
qemu_vmstop_requested
()))
{
vm_stop
(
r
);
}
if
(
qemu_exit_requested
())
{
exit
(
0
);
}
}
pause_all_vcpus
();
}
...
...
@@ -2330,11 +2348,9 @@ static void monitor_parse(const char *optarg, const char *mode)
if
(
strstart
(
optarg
,
"chardev:"
,
&
p
))
{
snprintf
(
label
,
sizeof
(
label
),
"%s"
,
p
);
}
else
{
if
(
monitor_device_index
)
{
snprintf
(
label
,
sizeof
(
label
),
"monitor%d"
,
monitor_device_index
);
}
else
{
snprintf
(
label
,
sizeof
(
label
),
"monitor"
);
snprintf
(
label
,
sizeof
(
label
),
"compat_monitor%d"
,
monitor_device_index
);
if
(
monitor_device_index
==
0
)
{
def
=
1
;
}
opts
=
qemu_chr_parse_compat
(
label
,
optarg
);
...
...
@@ -3602,6 +3618,10 @@ int main(int argc, char **argv, char **envp)
}
}
if
(
qemu_opts_foreach
(
&
qemu_mon_opts
,
mon_init_func
,
NULL
,
1
)
!=
0
)
{
exit
(
1
);
}
if
(
foreach_device_config
(
DEV_SERIAL
,
serial_parse
)
<
0
)
exit
(
1
);
if
(
foreach_device_config
(
DEV_PARALLEL
,
parallel_parse
)
<
0
)
...
...
@@ -3714,9 +3734,6 @@ int main(int argc, char **argv, char **envp)
text_consoles_set_display
(
ds
);
if
(
qemu_opts_foreach
(
&
qemu_mon_opts
,
mon_init_func
,
NULL
,
1
)
!=
0
)
exit
(
1
);
if
(
gdbstub_dev
&&
gdbserver_start
(
gdbstub_dev
)
<
0
)
{
fprintf
(
stderr
,
"qemu: could not open gdbserver on device '%s'
\n
"
,
gdbstub_dev
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录