monitor.c mixes a lot of different things in a single file: The core monitor infrastructure, HMP infrastrcture, QMP infrastructure, and the implementation of several HMP and QMP commands. Almost worse, struct Monitor mixes state for HMP, for QMP, and state actually shared between all monitors. monitor.c must be linked with a system emulator and even requires per-target compilation because some of the commands it implements access system emulator state.
The reason why I care about this is that I'm working on a protoype for a storage daemon, which wants to use QMP (but probably not HMP) and obviously doesn't have any system emulator state. So I'm interested in some core monitor parts that can be linked to non-system-emulator tools. This series first creates separate structs MonitorQMP and MonitorHMP which inherit from Monitor, and then moves the associated infrastructure code into separate source files. While the split is probably not perfect, I think it's an improvement of the current state even for QEMU proper, and it's good enough so I can link my storage daemon against just monitor/core.o and monitor/qmp.o and get a useless QMP monitor that parses the JSON input and rejects everything as an unknown command. Next I'll try to teach it a subset of QMP commands that can actually be supported in a tool, but while there will be a few follow-up patches to achieve this, I don't expect that this work will bring up much that needs to be changed in the splitting process done in this series. v3: - Assert monitor_is_qmp() before casting to MonitorQMP in two places - Added note that HMP doesn't currently use iothread to the documentation of MonitorHMP - Removed unnecessary memset() in monitor_data_init() - Removed Monitor.cmd_table instead of moving it to MonitorHMP. Renamed the tables to have an hmp_ prefix. - monitor_int.h of v2 becomes monitor-internal.h now - Cleaned up #include directives in new files - Moved some more functions between files - Removed monitor_init() in favour of public monitor_init_hmp/qmp() - Deprecate -mon control=readline,pretty=on|off - Improved several commit messages v2: - Fix coding style while moving files to make checkpatch happier - Updated file name references in docs/devel/writing-qmp-commands.txt - Updated MAINTAINERS for moved and newly created files - Created monitor/trace-events instead of using the root directory one - Move {hmp,qmp}.c to monitor/{hmp,qmp}-cmds.c Kevin Wolf (15): monitor: Remove unused password prompting fields monitor: Split monitor_init in HMP and QMP function monitor: Make MonitorQMP a child class of Monitor monitor: Create MonitorHMP with readline state monitor: Remove Monitor.cmd_table indirection monitor: Rename HMP command type and tables Move monitor.c to monitor/misc.c monitor: Move {hmp,qmp}.c to monitor/{hmp,qmp}-cmds.c monitor: Create monitor-internal.h with common definitions monitor: Split out monitor/qmp.c monitor: Split out monitor/hmp.c monitor: Split out monitor/monitor.c monitor: Split Monitor.flags into separate bools monitor: Replace monitor_init() with monitor_init_{hmp,qmp}() vl: Deprecate -mon pretty=... for HMP monitors docs/devel/writing-qmp-commands.txt | 11 +- include/monitor/monitor.h | 15 +- monitor/monitor-internal.h | 187 ++ chardev/char.c | 2 +- gdbstub.c | 2 +- monitor.c | 4729 --------------------------- hmp.c => monitor/hmp-cmds.c | 6 +- monitor/hmp.c | 1415 ++++++++ monitor/misc.c | 2368 ++++++++++++++ monitor/monitor.c | 632 ++++ qmp.c => monitor/qmp-cmds.c | 2 +- monitor/qmp.c | 403 +++ stubs/monitor.c | 6 +- tests/test-util-sockets.c | 3 +- vl.c | 28 +- MAINTAINERS | 13 +- Makefile.objs | 4 +- Makefile.target | 3 +- hmp-commands.hx | 2 +- monitor/Makefile.objs | 3 + monitor/trace-events | 15 + qemu-deprecated.texi | 6 + trace-events | 10 - 23 files changed, 5091 insertions(+), 4774 deletions(-) create mode 100644 monitor/monitor-internal.h delete mode 100644 monitor.c rename hmp.c => monitor/hmp-cmds.c (99%) create mode 100644 monitor/hmp.c create mode 100644 monitor/misc.c create mode 100644 monitor/monitor.c rename qmp.c => monitor/qmp-cmds.c (99%) create mode 100644 monitor/qmp.c create mode 100644 monitor/Makefile.objs create mode 100644 monitor/trace-events -- 2.20.1