Patchwork monitor: convert do_device_del() to QObject, QError

login
register
mail settings
Submitter Markus Armbruster
Date March 17, 2010, 4:46 p.m.
Message ID <1268844367-31961-1-git-send-email-armbru@redhat.com>
Download mbox | patch
Permalink /patch/47960/
State New
Headers show

Comments

Markus Armbruster - March 17, 2010, 4:46 p.m.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 hw/qdev.c       |    7 ++++---
 hw/qdev.h       |    2 +-
 qemu-monitor.hx |    3 ++-
 3 files changed, 7 insertions(+), 5 deletions(-)
Luiz Capitulino - March 18, 2010, 9:27 p.m.
On Wed, 17 Mar 2010 17:46:07 +0100
Markus Armbruster <armbru@redhat.com> wrote:

> 
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
>  hw/qdev.c       |    7 ++++---
>  hw/qdev.h       |    2 +-
>  qemu-monitor.hx |    3 ++-
>  3 files changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/hw/qdev.c b/hw/qdev.c
> index 17a46a7..35460eb 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -800,15 +800,16 @@ int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
>      return 0;
>  }
>  
> -void do_device_del(Monitor *mon, const QDict *qdict)
> +int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>  {
>      const char *id = qdict_get_str(qdict, "id");
>      DeviceState *dev;
>  
>      dev = qdev_find_recursive(main_system_bus, id);
>      if (NULL == dev) {
> -        error_report("Device '%s' not found", id);
> -        return;
> +        qerror_report(QERR_DEVICE_NOT_FOUND, id);
> +        return -1;
>      }
>      qdev_unplug(dev);

 This function can fail, otherwise looks good.


> +    return 0;
>  }
> diff --git a/hw/qdev.h b/hw/qdev.h
> index 9475705..40373c8 100644
> --- a/hw/qdev.h
> +++ b/hw/qdev.h
> @@ -176,7 +176,7 @@ void qbus_free(BusState *bus);
>  void do_info_qtree(Monitor *mon);
>  void do_info_qdm(Monitor *mon);
>  int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
> -void do_device_del(Monitor *mon, const QDict *qdict);
> +int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
>  
>  /*** qdev-properties.c ***/
>  
> diff --git a/qemu-monitor.hx b/qemu-monitor.hx
> index 5308f36..d290b4b 100644
> --- a/qemu-monitor.hx
> +++ b/qemu-monitor.hx
> @@ -589,7 +589,8 @@ ETEXI
>          .args_type  = "id:s",
>          .params     = "device",
>          .help       = "remove device",
> -        .mhandler.cmd = do_device_del,
> +        .user_print = monitor_user_noop,
> +        .mhandler.cmd_new = do_device_del,
>      },
>  
>  STEXI
Markus Armbruster - March 19, 2010, 9:35 p.m.
Luiz Capitulino <lcapitulino@redhat.com> writes:

> On Wed, 17 Mar 2010 17:46:07 +0100
> Markus Armbruster <armbru@redhat.com> wrote:
>
>> 
>> Signed-off-by: Markus Armbruster <armbru@redhat.com>
>> ---
>>  hw/qdev.c       |    7 ++++---
>>  hw/qdev.h       |    2 +-
>>  qemu-monitor.hx |    3 ++-
>>  3 files changed, 7 insertions(+), 5 deletions(-)
>> 
>> diff --git a/hw/qdev.c b/hw/qdev.c
>> index 17a46a7..35460eb 100644
>> --- a/hw/qdev.c
>> +++ b/hw/qdev.c
>> @@ -800,15 +800,16 @@ int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>      return 0;
>>  }
>>  
>> -void do_device_del(Monitor *mon, const QDict *qdict)
>> +int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>  {
>>      const char *id = qdict_get_str(qdict, "id");
>>      DeviceState *dev;
>>  
>>      dev = qdev_find_recursive(main_system_bus, id);
>>      if (NULL == dev) {
>> -        error_report("Device '%s' not found", id);
>> -        return;
>> +        qerror_report(QERR_DEVICE_NOT_FOUND, id);
>> +        return -1;
>>      }
>>      qdev_unplug(dev);
>
>  This function can fail, otherwise looks good.

Thanks, will fix.

[...]

Patch

diff --git a/hw/qdev.c b/hw/qdev.c
index 17a46a7..35460eb 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -800,15 +800,16 @@  int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
     return 0;
 }
 
-void do_device_del(Monitor *mon, const QDict *qdict)
+int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data)
 {
     const char *id = qdict_get_str(qdict, "id");
     DeviceState *dev;
 
     dev = qdev_find_recursive(main_system_bus, id);
     if (NULL == dev) {
-        error_report("Device '%s' not found", id);
-        return;
+        qerror_report(QERR_DEVICE_NOT_FOUND, id);
+        return -1;
     }
     qdev_unplug(dev);
+    return 0;
 }
diff --git a/hw/qdev.h b/hw/qdev.h
index 9475705..40373c8 100644
--- a/hw/qdev.h
+++ b/hw/qdev.h
@@ -176,7 +176,7 @@  void qbus_free(BusState *bus);
 void do_info_qtree(Monitor *mon);
 void do_info_qdm(Monitor *mon);
 int do_device_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
-void do_device_del(Monitor *mon, const QDict *qdict);
+int do_device_del(Monitor *mon, const QDict *qdict, QObject **ret_data);
 
 /*** qdev-properties.c ***/
 
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 5308f36..d290b4b 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -589,7 +589,8 @@  ETEXI
         .args_type  = "id:s",
         .params     = "device",
         .help       = "remove device",
-        .mhandler.cmd = do_device_del,
+        .user_print = monitor_user_noop,
+        .mhandler.cmd_new = do_device_del,
     },
 
 STEXI