Merge remote-tracking branch 'sstabellini/xen-2012-10-03' into staging
authorAnthony Liguori <aliguori@us.ibm.com>
Fri, 5 Oct 2012 00:56:26 +0000 (19:56 -0500)
committerAnthony Liguori <aliguori@us.ibm.com>
Fri, 5 Oct 2012 00:56:26 +0000 (19:56 -0500)
* sstabellini/xen-2012-10-03:
  xen: Set the vram dirty when an error occur.
  exec, memory: Call to xen_modified_memory.
  exec: Introduce helper to set dirty flags.
  xen: Introduce xen_modified_memory.
  QMP, Introduce xen-set-global-dirty-log command.
  qemu/xen: Add 64 bits big bar support on qemu
  xen: Fix, no unplug of pt device by platform device.

1  2 
qapi-schema.json
qmp-commands.hx

diff --combined qapi-schema.json
              'MigrationExpected' ] }
  
  ##
 +# @add_client
 +#
 +# Allow client connections for VNC, Spice and socket based
 +# character devices to be passed in to QEMU via SCM_RIGHTS.
 +#
 +# @protocol: protocol name. Valid names are "vnc", "spice" or the
 +#            name of a character device (eg. from -chardev id=XXXX)
 +#
 +# @fdname: file descriptor name previously passed via 'getfd' command
 +#
 +# @skipauth: #optional whether to skip authentication. Only applies
 +#            to "vnc" and "spice" protocols
 +#
 +# @tls: #optional whether to perform TLS. Only applies to the "spice"
 +#       protocol
 +#
 +# Returns: nothing on success.
 +#
 +# Since: 0.14.0
 +##
 +{ 'command': 'add_client',
 +  'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
 +            '*tls': 'bool' } }
 +
 +##
  # @NameInfo:
  #
  # Guest name information.
  { 'command': 'query-pci', 'returns': ['PciInfo'] }
  
  ##
 +# @BlockdevOnError:
 +#
 +# An enumeration of possible behaviors for errors on I/O operations.
 +# The exact meaning depends on whether the I/O was initiated by a guest
 +# or by a block job
 +#
 +# @report: for guest operations, report the error to the guest;
 +#          for jobs, cancel the job
 +#
 +# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR
 +#          or BLOCK_JOB_ERROR)
 +#
 +# @enospc: same as @stop on ENOSPC, same as @report otherwise.
 +#
 +# @stop: for guest operations, stop the virtual machine;
 +#        for jobs, pause the job
 +#
 +# Since: 1.3
 +##
 +{ 'enum': 'BlockdevOnError',
 +  'data': ['report', 'ignore', 'enospc', 'stop'] }
 +
 +##
  # @BlockJobInfo:
  #
  # Information about a long-running block device operation.
  #
  # @len: the maximum progress value
  #
 +# @busy: false if the job is known to be in a quiescent state, with
 +#        no pending I/O.  Since 1.3.
 +#
 +# @paused: whether the job is paused or, if @busy is true, will
 +#          pause itself as soon as possible.  Since 1.3.
 +#
  # @offset: the current progress value
  #
  # @speed: the rate limit, bytes per second
  #
 +# @io-status: the status of the job (since 1.3)
 +#
  # Since: 1.1
  ##
  { 'type': 'BlockJobInfo',
    'data': {'type': 'str', 'device': 'str', 'len': 'int',
 -           'offset': 'int', 'speed': 'int'} }
 +           'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int',
 +           'io-status': 'BlockDeviceIoStatus'} }
  
  ##
  # @query-block-jobs:
  # @format: #optional the format of the snapshot image, default is 'qcow2'.
  #
  # @mode: #optional whether and how QEMU should create a new image, default is
 -# 'absolute-paths'.
 +#        'absolute-paths'.
  ##
  { 'type': 'BlockdevSnapshot',
    'data': { 'device': 'str', 'snapshot-file': 'str', '*format': 'str',
  # @format: #optional the format of the snapshot image, default is 'qcow2'.
  #
  # @mode: #optional whether and how QEMU should create a new image, default is
 -# 'absolute-paths'.
 +#        'absolute-paths'.
  #
  # Returns: nothing on success
  #          If @device is not a valid block device, DeviceNotFound
    'returns': 'str' }
  
  ##
 +# @block-commit
 +#
 +# Live commit of data from overlay image nodes into backing nodes - i.e.,
 +# writes data between 'top' and 'base' into 'base'.
 +#
 +# @device:  the name of the device
 +#
 +# @base:   #optional The file name of the backing image to write data into.
 +#                    If not specified, this is the deepest backing image
 +#
 +# @top:              The file name of the backing image within the image chain,
 +#                    which contains the topmost data to be committed down.
 +#                    Note, the active layer as 'top' is currently unsupported.
 +#
 +#                    If top == base, that is an error.
 +#
 +#
 +# @speed:  #optional the maximum speed, in bytes per second
 +#
 +# Returns: Nothing on success
 +#          If commit or stream is already active on this device, DeviceInUse
 +#          If @device does not exist, DeviceNotFound
 +#          If image commit is not supported by this device, NotSupported
 +#          If @base or @top is invalid, a generic error is returned
 +#          If @top is the active layer, or omitted, a generic error is returned
 +#          If @speed is invalid, InvalidParameter
 +#
 +# Since: 1.3
 +#
 +##
 +{ 'command': 'block-commit',
 +  'data': { 'device': 'str', '*base': 'str', 'top': 'str',
 +            '*speed': 'int' } }
 +
  # @migrate_cancel
  #
  # Cancel the current executing migration process.
  #
  # @speed:  #optional the maximum speed, in bytes per second
  #
 +# @on-error: #optional the action to take on an error (default report).
 +#            'stop' and 'enospc' can only be used if the block device
 +#            supports io-status (see BlockInfo).  Since 1.3.
 +#
  # Returns: Nothing on success
  #          If @device does not exist, DeviceNotFound
  #
  # Since: 1.1
  ##
 -{ 'command': 'block-stream', 'data': { 'device': 'str', '*base': 'str',
 -                                       '*speed': 'int' } }
 +{ 'command': 'block-stream',
 +  'data': { 'device': 'str', '*base': 'str', '*speed': 'int',
 +            '*on-error': 'BlockdevOnError' } }
  
  ##
  # @block-job-set-speed:
  #
  # @device: the device name
  #
 +# @force: #optional whether to allow cancellation of a paused job (default
 +#         false).  Since 1.3.
 +#
  # Returns: Nothing on success
  #          If no background operation is active on this device, DeviceNotActive
  #
  # Since: 1.1
  ##
 -{ 'command': 'block-job-cancel', 'data': { 'device': 'str' } }
 +{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' } }
 +
 +##
 +# @block-job-pause:
 +#
 +# Pause an active background block operation.
 +#
 +# This command returns immediately after marking the active background block
 +# operation for pausing.  It is an error to call this command if no
 +# operation is in progress.  Pausing an already paused job has no cumulative
 +# effect; a single block-job-resume command will resume the job.
 +#
 +# The operation will pause as soon as possible.  No event is emitted when
 +# the operation is actually paused.  Cancelling a paused job automatically
 +# resumes it.
 +#
 +# @device: the device name
 +#
 +# Returns: Nothing on success
 +#          If no background operation is active on this device, DeviceNotActive
 +#
 +# Since: 1.3
 +##
 +{ 'command': 'block-job-pause', 'data': { 'device': 'str' } }
 +
 +##
 +# @block-job-resume:
 +#
 +# Resume an active background block operation.
 +#
 +# This command returns immediately after resuming a paused background block
 +# operation.  It is an error to call this command if no operation is in
 +# progress.  Resuming an already running job is not an error.
 +#
 +# This command also clears the error status of the job.
 +#
 +# @device: the device name
 +#
 +# Returns: Nothing on success
 +#          If no background operation is active on this device, DeviceNotActive
 +#
 +# Since: 1.3
 +##
 +{ 'command': 'block-job-resume', 'data': { 'device': 'str' } }
  
  ##
  # @ObjectTypeInfo:
  { 'command': 'xen-save-devices-state', 'data': {'filename': 'str'} }
  
  ##
+ # @xen-set-global-dirty-log
+ #
+ # Enable or disable the global dirty log mode.
+ #
+ # @enable: true to enable, false to disable.
+ #
+ # Returns: nothing
+ #
+ # Since: 1.3
+ ##
+ { 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }
+ ##
  # @device_del:
  #
  # Remove a device from a guest
  # supported on i386 and x86_64.
  #
  # @paging: if true, do paging to get guest's memory mapping. This allows
 -# using gdb to process the core file. However, setting @paging to false
 -# may be desirable because of two reasons:
 +#          using gdb to process the core file.
 +#
 +#          IMPORTANT: this option can make QEMU allocate several gigabytes
 +#                     of RAM. This can happen for a large guest, or a
 +#                     malicious guest pretending to be large.
  #
 -#   1. The guest may be in a catastrophic state or can have corrupted
 -#      memory, which cannot be trusted
 -#   2. The guest can be in real-mode even if paging is enabled. For example,
 -#      the guest uses ACPI to sleep, and ACPI sleep state goes in real-mode
 +#          Also, paging=true has the following limitations:
 +#
 +#             1. The guest may be in a catastrophic state or can have corrupted
 +#                memory, which cannot be trusted
 +#             2. The guest can be in real-mode even if paging is enabled. For
 +#                example, the guest uses ACPI to sleep, and ACPI sleep state
 +#                goes in real-mode
  #
  # @protocol: the filename or file descriptor of the vmcore. The supported
 -# protocols are:
 +#            protocols are:
  #
 -#   1. file: the protocol starts with "file:", and the following string is
 -#      the file's path.
 -#   2. fd: the protocol starts with "fd:", and the following string is the
 -#      fd's name.
 +#            1. file: the protocol starts with "file:", and the following
 +#               string is the file's path.
 +#            2. fd: the protocol starts with "fd:", and the following string
 +#               is the fd's name.
  #
  # @begin: #optional if specified, the starting physical address.
  #
  # @length: #optional if specified, the memory size, in bytes. If you don't
 -# want to dump all guest's memory, please specify the start @begin and @length
 +#          want to dump all guest's memory, please specify the start @begin
 +#          and @length
  #
  # Returns: nothing on success
  #
  { 'command': 'dump-guest-memory',
    'data': { 'paging': 'bool', 'protocol': 'str', '*begin': 'int',
              '*length': 'int' } }
 +
  ##
  # @netdev_add:
  #
               'lf', 'help', 'meta_l', 'meta_r', 'compose' ] }
  
  ##
 +# @KeyValue
 +#
 +# Represents a keyboard key.
 +#
 +# Since: 1.3.0
 +##
 +{ 'union': 'KeyValue',
 +  'data': {
 +    'number': 'int',
 +    'qcode': 'QKeyCode' } }
 +
 +##
  # @send-key:
  #
  # Send keys to guest.
  #
 -# @keys: key sequence. 'keys' is the name of the key. Use a JSON array to
 -#        press several keys simultaneously.
 +# @keys: An array of @KeyValue elements. All @KeyValues in this array are
 +#        simultaneously sent to the guest. A @KeyValue.number value is sent
 +#        directly to the guest, while @KeyValue.qcode must be a valid
 +#        @QKeyCode value
  #
  # @hold-time: #optional time to delay key up events, milliseconds. Defaults
  #             to 100
  #
  ##
  { 'command': 'send-key',
 -  'data': { 'keys': ['QKeyCode'], '*hold-time': 'int' } }
 +  'data': { 'keys': ['KeyValue'], '*hold-time': 'int' } }
  
  ##
  # @screendump:
diff --combined qmp-commands.hx
@@@ -493,6 -493,30 +493,30 @@@ Example
  EQMP
  
      {
+         .name       = "xen-set-global-dirty-log",
+         .args_type  = "enable:b",
+         .mhandler.cmd_new = qmp_marshal_input_xen_set_global_dirty_log,
+     },
+ SQMP
+ xen-set-global-dirty-log
+ -------
+ Enable or disable the global dirty log mode.
+ Arguments:
+ - "enable": Enable it or disable it.
+ Example:
+ -> { "execute": "xen-set-global-dirty-log",
+      "arguments": { "enable": true } }
+ <- { "return": {} }
+ EQMP
+     {
          .name       = "migrate",
          .args_type  = "detach:-d,blk:-b,inc:-i,uri:s",
          .mhandler.cmd_new = qmp_marshal_input_migrate,
@@@ -787,17 -811,11 +811,17 @@@ EQM
  
      {
          .name       = "block-stream",
 -        .args_type  = "device:B,base:s?,speed:o?",
 +        .args_type  = "device:B,base:s?,speed:o?,on-error:s?",
          .mhandler.cmd_new = qmp_marshal_input_block_stream,
      },
  
      {
 +        .name       = "block-commit",
 +        .args_type  = "device:B,base:s?,top:s,speed:o?",
 +        .mhandler.cmd_new = qmp_marshal_input_block_commit,
 +    },
 +
 +    {
          .name       = "block-job-set-speed",
          .args_type  = "device:B,speed:o",
          .mhandler.cmd_new = qmp_marshal_input_block_job_set_speed,
  
      {
          .name       = "block-job-cancel",
 -        .args_type  = "device:B",
 +        .args_type  = "device:B,force:b?",
          .mhandler.cmd_new = qmp_marshal_input_block_job_cancel,
      },
      {
 +        .name       = "block-job-pause",
 +        .args_type  = "device:B",
 +        .mhandler.cmd_new = qmp_marshal_input_block_job_pause,
 +    },
 +    {
 +        .name       = "block-job-resume",
 +        .args_type  = "device:B",
 +        .mhandler.cmd_new = qmp_marshal_input_block_job_resume,
 +    },
 +    {
          .name       = "transaction",
          .args_type  = "actions:q",
          .mhandler.cmd_new = qmp_marshal_input_transaction,
@@@ -1247,7 -1255,10 +1271,7 @@@ EQM
      {
          .name       = "add_client",
          .args_type  = "protocol:s,fdname:s,skipauth:b?,tls:b?",
 -        .params     = "protocol fdname skipauth tls",
 -        .help       = "add a graphics client",
 -        .user_print = monitor_user_noop,
 -        .mhandler.cmd_new = add_graphics_client,
 +        .mhandler.cmd_new = qmp_marshal_input_add_client,
      },
  
  SQMP