From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Add "targets" field to HMP command definition to select the targets
which would be supported by each command
Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
---
hmp-commands-info.hx | 10 ++++++++++
hmp-commands.hx | 20 ++++++++++++++++++++
scripts/hxtool | 44 ++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 72 insertions(+), 2 deletions(-)
mode change 100644 => 100755 scripts/hxtool
diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
index 257ee7d..631cc76 100644
--- a/hmp-commands-info.hx
+++ b/hmp-commands-info.hx
@@ -19,6 +19,7 @@ ETEXI
.params = "",
.help = "show the version of QEMU",
.cmd = hmp_info_version,
+ .targets = "scsi",
.flags = "p",
},
@@ -48,6 +49,7 @@ ETEXI
.params = "",
.help = "show the character devices",
.cmd = hmp_info_chardev,
+ .targets = "scsi",
.flags = "p",
},
@@ -64,6 +66,7 @@ ETEXI
.help = "show info of one block device or all block devices "
"(-n: show named nodes; -v: show details)",
.cmd = hmp_info_block,
+ .targets = "scsi",
},
STEXI
@@ -78,6 +81,7 @@ ETEXI
.params = "",
.help = "show block device statistics",
.cmd = hmp_info_blockstats,
+ .targets = "scsi",
},
STEXI
@@ -92,6 +96,7 @@ ETEXI
.params = "",
.help = "show progress of ongoing block device operations",
.cmd = hmp_info_block_jobs,
+ .targets = "scsi",
},
STEXI
@@ -167,6 +172,7 @@ ETEXI
.params = "",
.help = "show the command line history",
.cmd = hmp_info_history,
+ .targets = "scsi",
.flags = "p",
},
@@ -224,6 +230,7 @@ ETEXI
.params = "",
.help = "show PCI info",
.cmd = hmp_info_pci,
+ .targets = "scsi",
},
STEXI
@@ -630,6 +637,7 @@ ETEXI
.params = "",
.help = "show device tree",
.cmd = hmp_info_qtree,
+ .targets = "scsi",
},
STEXI
@@ -644,6 +652,7 @@ ETEXI
.params = "",
.help = "show qdev device model list",
.cmd = hmp_info_qdm,
+ .targets = "scsi",
},
STEXI
@@ -658,6 +667,7 @@ ETEXI
.params = "[path]",
.help = "show QOM composition tree",
.cmd = hmp_info_qom_tree,
+ .targets = "scsi",
.flags = "p",
},
diff --git a/hmp-commands.hx b/hmp-commands.hx
index dc23185..ecc6169 100644
--- a/hmp-commands.hx
+++ b/hmp-commands.hx
@@ -49,6 +49,7 @@ ETEXI
.params = "",
.help = "quit the emulator",
.cmd = hmp_quit,
+ .targets = "scsi",
},
STEXI
@@ -82,6 +83,7 @@ ETEXI
.params = "device size",
.help = "resize a block image",
.cmd = hmp_block_resize,
+ .targets = "scsi",
},
STEXI
@@ -99,6 +101,7 @@ ETEXI
.params = "device [speed [base]]",
.help = "copy data from a backing file into a block device",
.cmd = hmp_block_stream,
+ .targets = "scsi",
},
STEXI
@@ -113,6 +116,7 @@ ETEXI
.params = "device speed",
.help = "set maximum speed for a background block operation",
.cmd = hmp_block_job_set_speed,
+ .targets = "scsi",
},
STEXI
@@ -129,6 +133,7 @@ ETEXI
"\n\t\t\t if you want to abort the operation immediately"
"\n\t\t\t instead of keep running until data is in sync)",
.cmd = hmp_block_job_cancel,
+ .targets = "scsi",
},
STEXI
@@ -143,6 +148,7 @@ ETEXI
.params = "device",
.help = "stop an active background block operation",
.cmd = hmp_block_job_complete,
+ .targets = "scsi",
},
STEXI
@@ -158,6 +164,7 @@ ETEXI
.params = "device",
.help = "pause an active background block operation",
.cmd = hmp_block_job_pause,
+ .targets = "scsi",
},
STEXI
@@ -172,6 +179,7 @@ ETEXI
.params = "device",
.help = "resume a paused background block operation",
.cmd = hmp_block_job_resume,
+ .targets = "scsi",
},
STEXI
@@ -186,6 +194,7 @@ ETEXI
.params = "[-f] device",
.help = "eject a removable medium (use -f to force it)",
.cmd = hmp_eject,
+ .targets = "scsi",
},
STEXI
@@ -200,6 +209,7 @@ ETEXI
.params = "device",
.help = "remove host block device",
.cmd = hmp_drive_del,
+ .targets = "scsi",
},
STEXI
@@ -219,6 +229,7 @@ ETEXI
.params = "device filename [format [read-only-mode]]",
.help = "change a removable medium, optional format",
.cmd = hmp_change,
+ .targets = "scsi",
},
STEXI
@@ -732,6 +743,7 @@ ETEXI
.help = "add device, like -device on the command line",
.cmd = hmp_device_add,
.command_completion = device_add_completion,
+ .targets = "scsi",
},
STEXI
@@ -747,6 +759,7 @@ ETEXI
.help = "remove device",
.cmd = hmp_device_del,
.command_completion = device_del_completion,
+ .targets = "scsi",
},
STEXI
@@ -1351,6 +1364,7 @@ ETEXI
"The -c flag requests QEMU to compress backup data\n\t\t\t"
"(if the target format supports it).\n\t\t\t",
.cmd = hmp_drive_backup,
+ .targets = "scsi",
},
STEXI
@item drive_backup
@@ -1368,6 +1382,7 @@ ETEXI
"[,readonly=on|off][,copy-on-read=on|off]",
.help = "add drive to PCI storage controller",
.cmd = hmp_drive_add,
+ .targets = "scsi",
},
STEXI
@@ -1816,6 +1831,7 @@ ETEXI
.help = "add chardev",
.cmd = hmp_chardev_add,
.command_completion = chardev_add_completion,
+ .targets = "scsi",
},
STEXI
@@ -1831,6 +1847,7 @@ ETEXI
.params = "id args",
.help = "change chardev",
.cmd = hmp_chardev_change,
+ .targets = "scsi",
},
STEXI
@@ -1848,6 +1865,7 @@ ETEXI
.help = "remove chardev",
.cmd = hmp_chardev_remove,
.command_completion = chardev_remove_completion,
+ .targets = "scsi",
},
STEXI
@@ -1864,6 +1882,7 @@ ETEXI
.help = "send a break on chardev",
.cmd = hmp_chardev_send_break,
.command_completion = chardev_remove_completion,
+ .targets = "scsi",
},
STEXI
@@ -1940,6 +1959,7 @@ ETEXI
.params = "[subcommand]",
.help = "show various information about the system state",
.cmd = hmp_info_help,
+ .targets = "scsi",
.sub_table = hmp_info_cmds,
.flags = "p",
},
diff --git a/scripts/hxtool b/scripts/hxtool
old mode 100644
new mode 100755
index 0003e7b..802cbd4
--- a/scripts/hxtool
+++ b/scripts/hxtool
@@ -10,7 +10,14 @@ hxtoh()
STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
;;
*)
- test $flag -eq 1 && printf "%s\n" "$str"
+ # Skip line that has ".targets" as it is for multi-process targets based hmp
+ # commands generation.
+ echo $str | grep -q '.targets'
+ if [ $? -eq 0 ]; then
+ continue
+ else
+ test $flag -eq 1 && printf "%s\n" "$str"
+ fi
;;
esac
done
@@ -84,16 +91,49 @@ hxtotexi()
print_texi_heading "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")"
;;
*)
- test $flag -eq 1 && printf '%s\n' "$str"
+ # Skip line that has ".targets" as it is for multi-process targets based hmp
+ # commands generation.
+ echo $str | grep -q '.targetss'
+ if [ $? -eq 0 ]; then
+ continue
+ else
+ test $flag -eq 1 && printf '%s\n' "$str"
+ fi
;;
esac
line=$((line+1))
done
}
+hxtoh_tgt()
+{
+ section=""
+ flag=1
+ use_section=0
+ while read -r str; do
+ # Print section if it has ".targets" and the second argument passed to the
+ # script, such as "scsi".
+ echo "$str" | grep -q -E ".targets.*$1"
+ if [ $? -eq 0 ]; then
+ use_section=1
+ continue
+ fi
+ case $str in
+ HXCOMM*)
+ ;;
+ STEXI*|ETEXI*) flag=$(($flag^1)); test $use_section -eq 1 && printf '%s' "$section"; section=""; use_section=0
+ ;;
+ *)
+ test $flag -eq 1 && section="${section} ${str} ${IFS}"
+ ;;
+ esac
+ done
+}
+
case "$1" in
"-h") hxtoh ;;
"-t") hxtotexi ;;
+"-tgt") hxtoh_tgt $2 ;;
*) exit 1 ;;
esac
--
1.8.3.1
* Jagannathan Raman (jag.raman@oracle.com) wrote:
> From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
>
> Add "targets" field to HMP command definition to select the targets
> which would be supported by each command
>
> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> ---
> hmp-commands-info.hx | 10 ++++++++++
> hmp-commands.hx | 20 ++++++++++++++++++++
> scripts/hxtool | 44 ++++++++++++++++++++++++++++++++++++++++++--
> 3 files changed, 72 insertions(+), 2 deletions(-)
> mode change 100644 => 100755 scripts/hxtool
>
> diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> index 257ee7d..631cc76 100644
> --- a/hmp-commands-info.hx
> +++ b/hmp-commands-info.hx
> @@ -19,6 +19,7 @@ ETEXI
> .params = "",
> .help = "show the version of QEMU",
> .cmd = hmp_info_version,
> + .targets = "scsi",
> .flags = "p",
> },
>
> @@ -48,6 +49,7 @@ ETEXI
> .params = "",
> .help = "show the character devices",
> .cmd = hmp_info_chardev,
> + .targets = "scsi",
I'm a bit confused what this means; is this saying that the scsi-remote
will respond to 'info chardev' ? Why would it be interested in info
chardev?
> .flags = "p",
> },
>
> @@ -64,6 +66,7 @@ ETEXI
> .help = "show info of one block device or all block devices "
> "(-n: show named nodes; -v: show details)",
> .cmd = hmp_info_block,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -78,6 +81,7 @@ ETEXI
> .params = "",
> .help = "show block device statistics",
> .cmd = hmp_info_blockstats,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -92,6 +96,7 @@ ETEXI
> .params = "",
> .help = "show progress of ongoing block device operations",
> .cmd = hmp_info_block_jobs,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -167,6 +172,7 @@ ETEXI
> .params = "",
> .help = "show the command line history",
> .cmd = hmp_info_history,
> + .targets = "scsi",
> .flags = "p",
> },
>
> @@ -224,6 +230,7 @@ ETEXI
> .params = "",
> .help = "show PCI info",
> .cmd = hmp_info_pci,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -630,6 +637,7 @@ ETEXI
> .params = "",
> .help = "show device tree",
> .cmd = hmp_info_qtree,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -644,6 +652,7 @@ ETEXI
> .params = "",
> .help = "show qdev device model list",
> .cmd = hmp_info_qdm,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -658,6 +667,7 @@ ETEXI
> .params = "[path]",
> .help = "show QOM composition tree",
> .cmd = hmp_info_qom_tree,
> + .targets = "scsi",
> .flags = "p",
> },
>
> diff --git a/hmp-commands.hx b/hmp-commands.hx
> index dc23185..ecc6169 100644
> --- a/hmp-commands.hx
> +++ b/hmp-commands.hx
> @@ -49,6 +49,7 @@ ETEXI
> .params = "",
> .help = "quit the emulator",
> .cmd = hmp_quit,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -82,6 +83,7 @@ ETEXI
> .params = "device size",
> .help = "resize a block image",
> .cmd = hmp_block_resize,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -99,6 +101,7 @@ ETEXI
> .params = "device [speed [base]]",
> .help = "copy data from a backing file into a block device",
> .cmd = hmp_block_stream,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -113,6 +116,7 @@ ETEXI
> .params = "device speed",
> .help = "set maximum speed for a background block operation",
> .cmd = hmp_block_job_set_speed,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -129,6 +133,7 @@ ETEXI
> "\n\t\t\t if you want to abort the operation immediately"
> "\n\t\t\t instead of keep running until data is in sync)",
> .cmd = hmp_block_job_cancel,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -143,6 +148,7 @@ ETEXI
> .params = "device",
> .help = "stop an active background block operation",
> .cmd = hmp_block_job_complete,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -158,6 +164,7 @@ ETEXI
> .params = "device",
> .help = "pause an active background block operation",
> .cmd = hmp_block_job_pause,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -172,6 +179,7 @@ ETEXI
> .params = "device",
> .help = "resume a paused background block operation",
> .cmd = hmp_block_job_resume,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -186,6 +194,7 @@ ETEXI
> .params = "[-f] device",
> .help = "eject a removable medium (use -f to force it)",
> .cmd = hmp_eject,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -200,6 +209,7 @@ ETEXI
> .params = "device",
> .help = "remove host block device",
> .cmd = hmp_drive_del,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -219,6 +229,7 @@ ETEXI
> .params = "device filename [format [read-only-mode]]",
> .help = "change a removable medium, optional format",
> .cmd = hmp_change,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -732,6 +743,7 @@ ETEXI
> .help = "add device, like -device on the command line",
> .cmd = hmp_device_add,
> .command_completion = device_add_completion,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -747,6 +759,7 @@ ETEXI
> .help = "remove device",
> .cmd = hmp_device_del,
> .command_completion = device_del_completion,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1351,6 +1364,7 @@ ETEXI
> "The -c flag requests QEMU to compress backup data\n\t\t\t"
> "(if the target format supports it).\n\t\t\t",
> .cmd = hmp_drive_backup,
> + .targets = "scsi",
> },
> STEXI
> @item drive_backup
> @@ -1368,6 +1382,7 @@ ETEXI
> "[,readonly=on|off][,copy-on-read=on|off]",
> .help = "add drive to PCI storage controller",
> .cmd = hmp_drive_add,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1816,6 +1831,7 @@ ETEXI
> .help = "add chardev",
> .cmd = hmp_chardev_add,
> .command_completion = chardev_add_completion,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1831,6 +1847,7 @@ ETEXI
> .params = "id args",
> .help = "change chardev",
> .cmd = hmp_chardev_change,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1848,6 +1865,7 @@ ETEXI
> .help = "remove chardev",
> .cmd = hmp_chardev_remove,
> .command_completion = chardev_remove_completion,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1864,6 +1882,7 @@ ETEXI
> .help = "send a break on chardev",
> .cmd = hmp_chardev_send_break,
> .command_completion = chardev_remove_completion,
> + .targets = "scsi",
> },
>
> STEXI
> @@ -1940,6 +1959,7 @@ ETEXI
> .params = "[subcommand]",
> .help = "show various information about the system state",
> .cmd = hmp_info_help,
> + .targets = "scsi",
> .sub_table = hmp_info_cmds,
> .flags = "p",
> },
> diff --git a/scripts/hxtool b/scripts/hxtool
> old mode 100644
> new mode 100755
> index 0003e7b..802cbd4
> --- a/scripts/hxtool
> +++ b/scripts/hxtool
> @@ -10,7 +10,14 @@ hxtoh()
> STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
> ;;
> *)
> - test $flag -eq 1 && printf "%s\n" "$str"
> + # Skip line that has ".targets" as it is for multi-process targets based hmp
> + # commands generation.
> + echo $str | grep -q '.targets'
> + if [ $? -eq 0 ]; then
> + continue
> + else
> + test $flag -eq 1 && printf "%s\n" "$str"
> + fi
> ;;
> esac
> done
> @@ -84,16 +91,49 @@ hxtotexi()
> print_texi_heading "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")"
> ;;
> *)
> - test $flag -eq 1 && printf '%s\n' "$str"
> + # Skip line that has ".targets" as it is for multi-process targets based hmp
> + # commands generation.
> + echo $str | grep -q '.targetss'
One extra 's' ?
> + if [ $? -eq 0 ]; then
> + continue
> + else
> + test $flag -eq 1 && printf '%s\n' "$str"
> + fi
> ;;
> esac
> line=$((line+1))
> done
> }
>
> +hxtoh_tgt()
> +{
> + section=""
> + flag=1
> + use_section=0
> + while read -r str; do
> + # Print section if it has ".targets" and the second argument passed to the
> + # script, such as "scsi".
> + echo "$str" | grep -q -E ".targets.*$1"
> + if [ $? -eq 0 ]; then
> + use_section=1
> + continue
> + fi
> + case $str in
> + HXCOMM*)
> + ;;
> + STEXI*|ETEXI*) flag=$(($flag^1)); test $use_section -eq 1 && printf '%s' "$section"; section=""; use_section=0
> + ;;
> + *)
> + test $flag -eq 1 && section="${section} ${str} ${IFS}"
> + ;;
> + esac
> + done
> +}
> +
> case "$1" in
> "-h") hxtoh ;;
> "-t") hxtotexi ;;
> +"-tgt") hxtoh_tgt $2 ;;
> *) exit 1 ;;
> esac
>
> --
> 1.8.3.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On 3/5/2020 5:39 AM, Dr. David Alan Gilbert wrote:
> * Jagannathan Raman (jag.raman@oracle.com) wrote:
>> From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
>>
>> Add "targets" field to HMP command definition to select the targets
>> which would be supported by each command
>>
>> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
>> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
>> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
>> ---
>> hmp-commands-info.hx | 10 ++++++++++
>> hmp-commands.hx | 20 ++++++++++++++++++++
>> scripts/hxtool | 44 ++++++++++++++++++++++++++++++++++++++++++--
>> 3 files changed, 72 insertions(+), 2 deletions(-)
>> mode change 100644 => 100755 scripts/hxtool
>>
>> diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
>> index 257ee7d..631cc76 100644
>> --- a/hmp-commands-info.hx
>> +++ b/hmp-commands-info.hx
>> @@ -19,6 +19,7 @@ ETEXI
>> .params = "",
>> .help = "show the version of QEMU",
>> .cmd = hmp_info_version,
>> + .targets = "scsi",
>> .flags = "p",
>> },
>>
>> @@ -48,6 +49,7 @@ ETEXI
>> .params = "",
>> .help = "show the character devices",
>> .cmd = hmp_info_chardev,
>> + .targets = "scsi",
>
> I'm a bit confused what this means; is this saying that the scsi-remote
> will respond to 'info chardev' ? Why would it be interested in info
> chardev?
We found that QMP/HMP monitor is initialized as a chardev in QEMU. So we
could use this to get info about the monitors attached to the remote
process.
>
>> .flags = "p",
>> },
>>
>> @@ -64,6 +66,7 @@ ETEXI
>> .help = "show info of one block device or all block devices "
>> "(-n: show named nodes; -v: show details)",
>> .cmd = hmp_info_block,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -78,6 +81,7 @@ ETEXI
>> .params = "",
>> .help = "show block device statistics",
>> .cmd = hmp_info_blockstats,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -92,6 +96,7 @@ ETEXI
>> .params = "",
>> .help = "show progress of ongoing block device operations",
>> .cmd = hmp_info_block_jobs,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -167,6 +172,7 @@ ETEXI
>> .params = "",
>> .help = "show the command line history",
>> .cmd = hmp_info_history,
>> + .targets = "scsi",
>> .flags = "p",
>> },
>>
>> @@ -224,6 +230,7 @@ ETEXI
>> .params = "",
>> .help = "show PCI info",
>> .cmd = hmp_info_pci,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -630,6 +637,7 @@ ETEXI
>> .params = "",
>> .help = "show device tree",
>> .cmd = hmp_info_qtree,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -644,6 +652,7 @@ ETEXI
>> .params = "",
>> .help = "show qdev device model list",
>> .cmd = hmp_info_qdm,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -658,6 +667,7 @@ ETEXI
>> .params = "[path]",
>> .help = "show QOM composition tree",
>> .cmd = hmp_info_qom_tree,
>> + .targets = "scsi",
>> .flags = "p",
>> },
>>
>> diff --git a/hmp-commands.hx b/hmp-commands.hx
>> index dc23185..ecc6169 100644
>> --- a/hmp-commands.hx
>> +++ b/hmp-commands.hx
>> @@ -49,6 +49,7 @@ ETEXI
>> .params = "",
>> .help = "quit the emulator",
>> .cmd = hmp_quit,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -82,6 +83,7 @@ ETEXI
>> .params = "device size",
>> .help = "resize a block image",
>> .cmd = hmp_block_resize,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -99,6 +101,7 @@ ETEXI
>> .params = "device [speed [base]]",
>> .help = "copy data from a backing file into a block device",
>> .cmd = hmp_block_stream,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -113,6 +116,7 @@ ETEXI
>> .params = "device speed",
>> .help = "set maximum speed for a background block operation",
>> .cmd = hmp_block_job_set_speed,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -129,6 +133,7 @@ ETEXI
>> "\n\t\t\t if you want to abort the operation immediately"
>> "\n\t\t\t instead of keep running until data is in sync)",
>> .cmd = hmp_block_job_cancel,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -143,6 +148,7 @@ ETEXI
>> .params = "device",
>> .help = "stop an active background block operation",
>> .cmd = hmp_block_job_complete,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -158,6 +164,7 @@ ETEXI
>> .params = "device",
>> .help = "pause an active background block operation",
>> .cmd = hmp_block_job_pause,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -172,6 +179,7 @@ ETEXI
>> .params = "device",
>> .help = "resume a paused background block operation",
>> .cmd = hmp_block_job_resume,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -186,6 +194,7 @@ ETEXI
>> .params = "[-f] device",
>> .help = "eject a removable medium (use -f to force it)",
>> .cmd = hmp_eject,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -200,6 +209,7 @@ ETEXI
>> .params = "device",
>> .help = "remove host block device",
>> .cmd = hmp_drive_del,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -219,6 +229,7 @@ ETEXI
>> .params = "device filename [format [read-only-mode]]",
>> .help = "change a removable medium, optional format",
>> .cmd = hmp_change,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -732,6 +743,7 @@ ETEXI
>> .help = "add device, like -device on the command line",
>> .cmd = hmp_device_add,
>> .command_completion = device_add_completion,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -747,6 +759,7 @@ ETEXI
>> .help = "remove device",
>> .cmd = hmp_device_del,
>> .command_completion = device_del_completion,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1351,6 +1364,7 @@ ETEXI
>> "The -c flag requests QEMU to compress backup data\n\t\t\t"
>> "(if the target format supports it).\n\t\t\t",
>> .cmd = hmp_drive_backup,
>> + .targets = "scsi",
>> },
>> STEXI
>> @item drive_backup
>> @@ -1368,6 +1382,7 @@ ETEXI
>> "[,readonly=on|off][,copy-on-read=on|off]",
>> .help = "add drive to PCI storage controller",
>> .cmd = hmp_drive_add,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1816,6 +1831,7 @@ ETEXI
>> .help = "add chardev",
>> .cmd = hmp_chardev_add,
>> .command_completion = chardev_add_completion,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1831,6 +1847,7 @@ ETEXI
>> .params = "id args",
>> .help = "change chardev",
>> .cmd = hmp_chardev_change,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1848,6 +1865,7 @@ ETEXI
>> .help = "remove chardev",
>> .cmd = hmp_chardev_remove,
>> .command_completion = chardev_remove_completion,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1864,6 +1882,7 @@ ETEXI
>> .help = "send a break on chardev",
>> .cmd = hmp_chardev_send_break,
>> .command_completion = chardev_remove_completion,
>> + .targets = "scsi",
>> },
>>
>> STEXI
>> @@ -1940,6 +1959,7 @@ ETEXI
>> .params = "[subcommand]",
>> .help = "show various information about the system state",
>> .cmd = hmp_info_help,
>> + .targets = "scsi",
>> .sub_table = hmp_info_cmds,
>> .flags = "p",
>> },
>> diff --git a/scripts/hxtool b/scripts/hxtool
>> old mode 100644
>> new mode 100755
>> index 0003e7b..802cbd4
>> --- a/scripts/hxtool
>> +++ b/scripts/hxtool
>> @@ -10,7 +10,14 @@ hxtoh()
>> STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
>> ;;
>> *)
>> - test $flag -eq 1 && printf "%s\n" "$str"
>> + # Skip line that has ".targets" as it is for multi-process targets based hmp
>> + # commands generation.
>> + echo $str | grep -q '.targets'
>> + if [ $? -eq 0 ]; then
>> + continue
>> + else
>> + test $flag -eq 1 && printf "%s\n" "$str"
>> + fi
>> ;;
>> esac
>> done
>> @@ -84,16 +91,49 @@ hxtotexi()
>> print_texi_heading "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")"
>> ;;
>> *)
>> - test $flag -eq 1 && printf '%s\n' "$str"
>> + # Skip line that has ".targets" as it is for multi-process targets based hmp
>> + # commands generation.
>> + echo $str | grep -q '.targetss'
>
> One extra 's' ?
Thanks, we'll fix it.
--
Jag
>
>> + if [ $? -eq 0 ]; then
>> + continue
>> + else
>> + test $flag -eq 1 && printf '%s\n' "$str"
>> + fi
>> ;;
>> esac
>> line=$((line+1))
>> done
>> }
>>
>> +hxtoh_tgt()
>> +{
>> + section=""
>> + flag=1
>> + use_section=0
>> + while read -r str; do
>> + # Print section if it has ".targets" and the second argument passed to the
>> + # script, such as "scsi".
>> + echo "$str" | grep -q -E ".targets.*$1"
>> + if [ $? -eq 0 ]; then
>> + use_section=1
>> + continue
>> + fi
>> + case $str in
>> + HXCOMM*)
>> + ;;
>> + STEXI*|ETEXI*) flag=$(($flag^1)); test $use_section -eq 1 && printf '%s' "$section"; section=""; use_section=0
>> + ;;
>> + *)
>> + test $flag -eq 1 && section="${section} ${str} ${IFS}"
>> + ;;
>> + esac
>> + done
>> +}
>> +
>> case "$1" in
>> "-h") hxtoh ;;
>> "-t") hxtotexi ;;
>> +"-tgt") hxtoh_tgt $2 ;;
>> *) exit 1 ;;
>> esac
>>
>> --
>> 1.8.3.1
>>
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
>
* Jag Raman (jag.raman@oracle.com) wrote:
>
>
> On 3/5/2020 5:39 AM, Dr. David Alan Gilbert wrote:
> > * Jagannathan Raman (jag.raman@oracle.com) wrote:
> > > From: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> > >
> > > Add "targets" field to HMP command definition to select the targets
> > > which would be supported by each command
> > >
> > > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
> > > Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
> > > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
> > > ---
> > > hmp-commands-info.hx | 10 ++++++++++
> > > hmp-commands.hx | 20 ++++++++++++++++++++
> > > scripts/hxtool | 44 ++++++++++++++++++++++++++++++++++++++++++--
> > > 3 files changed, 72 insertions(+), 2 deletions(-)
> > > mode change 100644 => 100755 scripts/hxtool
> > >
> > > diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx
> > > index 257ee7d..631cc76 100644
> > > --- a/hmp-commands-info.hx
> > > +++ b/hmp-commands-info.hx
> > > @@ -19,6 +19,7 @@ ETEXI
> > > .params = "",
> > > .help = "show the version of QEMU",
> > > .cmd = hmp_info_version,
> > > + .targets = "scsi",
> > > .flags = "p",
> > > },
> > > @@ -48,6 +49,7 @@ ETEXI
> > > .params = "",
> > > .help = "show the character devices",
> > > .cmd = hmp_info_chardev,
> > > + .targets = "scsi",
> >
> > I'm a bit confused what this means; is this saying that the scsi-remote
> > will respond to 'info chardev' ? Why would it be interested in info
> > chardev?
>
> We found that QMP/HMP monitor is initialized as a chardev in QEMU. So we
> could use this to get info about the monitors attached to the remote
> process.
Ah OK.
> >
> > > .flags = "p",
> > > },
> > > @@ -64,6 +66,7 @@ ETEXI
> > > .help = "show info of one block device or all block devices "
> > > "(-n: show named nodes; -v: show details)",
> > > .cmd = hmp_info_block,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -78,6 +81,7 @@ ETEXI
> > > .params = "",
> > > .help = "show block device statistics",
> > > .cmd = hmp_info_blockstats,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -92,6 +96,7 @@ ETEXI
> > > .params = "",
> > > .help = "show progress of ongoing block device operations",
> > > .cmd = hmp_info_block_jobs,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -167,6 +172,7 @@ ETEXI
> > > .params = "",
> > > .help = "show the command line history",
> > > .cmd = hmp_info_history,
> > > + .targets = "scsi",
> > > .flags = "p",
> > > },
> > > @@ -224,6 +230,7 @@ ETEXI
> > > .params = "",
> > > .help = "show PCI info",
> > > .cmd = hmp_info_pci,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -630,6 +637,7 @@ ETEXI
> > > .params = "",
> > > .help = "show device tree",
> > > .cmd = hmp_info_qtree,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -644,6 +652,7 @@ ETEXI
> > > .params = "",
> > > .help = "show qdev device model list",
> > > .cmd = hmp_info_qdm,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -658,6 +667,7 @@ ETEXI
> > > .params = "[path]",
> > > .help = "show QOM composition tree",
> > > .cmd = hmp_info_qom_tree,
> > > + .targets = "scsi",
> > > .flags = "p",
> > > },
> > > diff --git a/hmp-commands.hx b/hmp-commands.hx
> > > index dc23185..ecc6169 100644
> > > --- a/hmp-commands.hx
> > > +++ b/hmp-commands.hx
> > > @@ -49,6 +49,7 @@ ETEXI
> > > .params = "",
> > > .help = "quit the emulator",
> > > .cmd = hmp_quit,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -82,6 +83,7 @@ ETEXI
> > > .params = "device size",
> > > .help = "resize a block image",
> > > .cmd = hmp_block_resize,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -99,6 +101,7 @@ ETEXI
> > > .params = "device [speed [base]]",
> > > .help = "copy data from a backing file into a block device",
> > > .cmd = hmp_block_stream,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -113,6 +116,7 @@ ETEXI
> > > .params = "device speed",
> > > .help = "set maximum speed for a background block operation",
> > > .cmd = hmp_block_job_set_speed,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -129,6 +133,7 @@ ETEXI
> > > "\n\t\t\t if you want to abort the operation immediately"
> > > "\n\t\t\t instead of keep running until data is in sync)",
> > > .cmd = hmp_block_job_cancel,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -143,6 +148,7 @@ ETEXI
> > > .params = "device",
> > > .help = "stop an active background block operation",
> > > .cmd = hmp_block_job_complete,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -158,6 +164,7 @@ ETEXI
> > > .params = "device",
> > > .help = "pause an active background block operation",
> > > .cmd = hmp_block_job_pause,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -172,6 +179,7 @@ ETEXI
> > > .params = "device",
> > > .help = "resume a paused background block operation",
> > > .cmd = hmp_block_job_resume,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -186,6 +194,7 @@ ETEXI
> > > .params = "[-f] device",
> > > .help = "eject a removable medium (use -f to force it)",
> > > .cmd = hmp_eject,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -200,6 +209,7 @@ ETEXI
> > > .params = "device",
> > > .help = "remove host block device",
> > > .cmd = hmp_drive_del,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -219,6 +229,7 @@ ETEXI
> > > .params = "device filename [format [read-only-mode]]",
> > > .help = "change a removable medium, optional format",
> > > .cmd = hmp_change,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -732,6 +743,7 @@ ETEXI
> > > .help = "add device, like -device on the command line",
> > > .cmd = hmp_device_add,
> > > .command_completion = device_add_completion,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -747,6 +759,7 @@ ETEXI
> > > .help = "remove device",
> > > .cmd = hmp_device_del,
> > > .command_completion = device_del_completion,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1351,6 +1364,7 @@ ETEXI
> > > "The -c flag requests QEMU to compress backup data\n\t\t\t"
> > > "(if the target format supports it).\n\t\t\t",
> > > .cmd = hmp_drive_backup,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @item drive_backup
> > > @@ -1368,6 +1382,7 @@ ETEXI
> > > "[,readonly=on|off][,copy-on-read=on|off]",
> > > .help = "add drive to PCI storage controller",
> > > .cmd = hmp_drive_add,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1816,6 +1831,7 @@ ETEXI
> > > .help = "add chardev",
> > > .cmd = hmp_chardev_add,
> > > .command_completion = chardev_add_completion,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1831,6 +1847,7 @@ ETEXI
> > > .params = "id args",
> > > .help = "change chardev",
> > > .cmd = hmp_chardev_change,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1848,6 +1865,7 @@ ETEXI
> > > .help = "remove chardev",
> > > .cmd = hmp_chardev_remove,
> > > .command_completion = chardev_remove_completion,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1864,6 +1882,7 @@ ETEXI
> > > .help = "send a break on chardev",
> > > .cmd = hmp_chardev_send_break,
> > > .command_completion = chardev_remove_completion,
> > > + .targets = "scsi",
> > > },
> > > STEXI
> > > @@ -1940,6 +1959,7 @@ ETEXI
> > > .params = "[subcommand]",
> > > .help = "show various information about the system state",
> > > .cmd = hmp_info_help,
> > > + .targets = "scsi",
> > > .sub_table = hmp_info_cmds,
> > > .flags = "p",
> > > },
> > > diff --git a/scripts/hxtool b/scripts/hxtool
> > > old mode 100644
> > > new mode 100755
> > > index 0003e7b..802cbd4
> > > --- a/scripts/hxtool
> > > +++ b/scripts/hxtool
> > > @@ -10,7 +10,14 @@ hxtoh()
> > > STEXI*|ETEXI*|SRST*|ERST*) flag=$(($flag^1))
> > > ;;
> > > *)
> > > - test $flag -eq 1 && printf "%s\n" "$str"
> > > + # Skip line that has ".targets" as it is for multi-process targets based hmp
> > > + # commands generation.
> > > + echo $str | grep -q '.targets'
> > > + if [ $? -eq 0 ]; then
> > > + continue
> > > + else
> > > + test $flag -eq 1 && printf "%s\n" "$str"
> > > + fi
> > > ;;
> > > esac
> > > done
> > > @@ -84,16 +91,49 @@ hxtotexi()
> > > print_texi_heading "$(expr "$str" : "ARCHHEADING(\(.*\),.*)")"
> > > ;;
> > > *)
> > > - test $flag -eq 1 && printf '%s\n' "$str"
> > > + # Skip line that has ".targets" as it is for multi-process targets based hmp
> > > + # commands generation.
> > > + echo $str | grep -q '.targetss'
> >
> > One extra 's' ?
>
> Thanks, we'll fix it.
>
> --
> Jag
>
> >
> > > + if [ $? -eq 0 ]; then
> > > + continue
> > > + else
> > > + test $flag -eq 1 && printf '%s\n' "$str"
> > > + fi
> > > ;;
> > > esac
> > > line=$((line+1))
> > > done
> > > }
> > > +hxtoh_tgt()
> > > +{
> > > + section=""
> > > + flag=1
> > > + use_section=0
> > > + while read -r str; do
> > > + # Print section if it has ".targets" and the second argument passed to the
> > > + # script, such as "scsi".
> > > + echo "$str" | grep -q -E ".targets.*$1"
> > > + if [ $? -eq 0 ]; then
> > > + use_section=1
> > > + continue
> > > + fi
> > > + case $str in
> > > + HXCOMM*)
> > > + ;;
> > > + STEXI*|ETEXI*) flag=$(($flag^1)); test $use_section -eq 1 && printf '%s' "$section"; section=""; use_section=0
> > > + ;;
> > > + *)
> > > + test $flag -eq 1 && section="${section} ${str} ${IFS}"
> > > + ;;
> > > + esac
> > > + done
> > > +}
> > > +
> > > case "$1" in
> > > "-h") hxtoh ;;
> > > "-t") hxtotexi ;;
> > > +"-tgt") hxtoh_tgt $2 ;;
> > > *) exit 1 ;;
> > > esac
> > > --
> > > 1.8.3.1
> > >
> > --
> > Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
> >
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
© 2016 - 2026 Red Hat, Inc.