diff mbox series

[v5,34/50] multi-process/mon: choose HMP commands based on target

Message ID bf5c4efc14dc27a778509ff31190c82862af9fa1.1582576372.git.jag.raman@oracle.com
State New
Headers show
Series Initial support for multi-process qemu | expand

Commit Message

Jag Raman Feb. 24, 2020, 8:55 p.m. UTC
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

Comments

Dr. David Alan Gilbert March 5, 2020, 10:39 a.m. UTC | #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
Jag Raman March 5, 2020, 3:38 p.m. UTC | #2
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
>
Dr. David Alan Gilbert March 5, 2020, 3:50 p.m. UTC | #3
* 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
diff mbox series

Patch

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