diff mbox

[v3,02/10] acpi, mem-hotplug: Add acpi_memory_slot_status() to get MemStatus.

Message ID 26bd642f7692697d24cc6c8ffae8bb4b2cc94e7b.1424912878.git.zhugh.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Zhu Guihua Feb. 26, 2015, 1:16 a.m. UTC
From: Tang Chen <tangchen@cn.fujitsu.com>

Add a new API named acpi_memory_slot_status() to obtain a single memory
slot status. Doing this is because this procedure will be used by other
functions in the next coming patches.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
---
 hw/acpi/memory_hotplug.c | 26 +++++++++++++++++++-------
 1 file changed, 19 insertions(+), 7 deletions(-)

Comments

Michael S. Tsirkin March 1, 2015, 5:31 p.m. UTC | #1
On Thu, Feb 26, 2015 at 09:16:44AM +0800, Zhu Guihua wrote:
> From: Tang Chen <tangchen@cn.fujitsu.com>
> 
> Add a new API named acpi_memory_slot_status() to obtain a single memory
> slot status. Doing this is because this procedure will be used by other
> functions in the next coming patches.
> 
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>

Same comments as everywhere: include implementation with
users.
In this case, I can't tell whether error_setg is
appropriate since I don't know whether the error
ever comes from user.


> ---
>  hw/acpi/memory_hotplug.c | 26 +++++++++++++++++++-------
>  1 file changed, 19 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
> index c6580da..6d91a0d 100644
> --- a/hw/acpi/memory_hotplug.c
> +++ b/hw/acpi/memory_hotplug.c
> @@ -163,29 +163,41 @@ void acpi_memory_hotplug_init(MemoryRegion *as, Object *owner,
>      memory_region_add_subregion(as, ACPI_MEMORY_HOTPLUG_BASE, &state->io);
>  }
>  
> -void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
> -                         DeviceState *dev, Error **errp)
> +static MemStatus *
> +acpi_memory_slot_status(MemHotplugState *mem_st,
> +                        DeviceState *dev, Error **errp)
>  {
> -    MemStatus *mdev;
>      Error *local_err = NULL;
>      int slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP,
>                                         &local_err);
>  
>      if (local_err) {
>          error_propagate(errp, local_err);
> -        return;
> +        return NULL;
>      }
>  
>      if (slot >= mem_st->dev_count) {
>          char *dev_path = object_get_canonical_path(OBJECT(dev));
> -        error_setg(errp, "acpi_memory_plug_cb: "
> +        error_setg(errp, "acpi_memory_get_slot_status_descriptor: "
>                     "device [%s] returned invalid memory slot[%d]",
> -                    dev_path, slot);
> +                   dev_path, slot);
>          g_free(dev_path);
> +        return NULL;
> +    }
> +
> +    return &mem_st->devs[slot];
> +}
> +
> +void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
> +                         DeviceState *dev, Error **errp)
> +{
> +    MemStatus *mdev;
> +
> +    mdev = acpi_memory_slot_status(mem_st, dev, errp);
> +    if (!mdev) {
>          return;
>      }
>  
> -    mdev = &mem_st->devs[slot];
>      mdev->dimm = dev;
>      mdev->is_enabled = true;
>      mdev->is_inserting = true;
> -- 
> 1.9.3
Zhu Guihua March 3, 2015, 2:18 a.m. UTC | #2
On 03/02/2015 01:31 AM, Michael S. Tsirkin wrote:
> On Thu, Feb 26, 2015 at 09:16:44AM +0800, Zhu Guihua wrote:
>> From: Tang Chen <tangchen@cn.fujitsu.com>
>>
>> Add a new API named acpi_memory_slot_status() to obtain a single memory
>> slot status. Doing this is because this procedure will be used by other
>> functions in the next coming patches.
>>
>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> Same comments as everywhere: include implementation with
> users.
> In this case, I can't tell whether error_setg is
> appropriate since I don't know whether the error
> ever comes from user.

Do you have any suggestions about this error_setg?

Thanks,
Zhu

>
>> ---
>>   hw/acpi/memory_hotplug.c | 26 +++++++++++++++++++-------
>>   1 file changed, 19 insertions(+), 7 deletions(-)
>>
>> diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
>> index c6580da..6d91a0d 100644
>> --- a/hw/acpi/memory_hotplug.c
>> +++ b/hw/acpi/memory_hotplug.c
>> @@ -163,29 +163,41 @@ void acpi_memory_hotplug_init(MemoryRegion *as, Object *owner,
>>       memory_region_add_subregion(as, ACPI_MEMORY_HOTPLUG_BASE, &state->io);
>>   }
>>   
>> -void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
>> -                         DeviceState *dev, Error **errp)
>> +static MemStatus *
>> +acpi_memory_slot_status(MemHotplugState *mem_st,
>> +                        DeviceState *dev, Error **errp)
>>   {
>> -    MemStatus *mdev;
>>       Error *local_err = NULL;
>>       int slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP,
>>                                          &local_err);
>>   
>>       if (local_err) {
>>           error_propagate(errp, local_err);
>> -        return;
>> +        return NULL;
>>       }
>>   
>>       if (slot >= mem_st->dev_count) {
>>           char *dev_path = object_get_canonical_path(OBJECT(dev));
>> -        error_setg(errp, "acpi_memory_plug_cb: "
>> +        error_setg(errp, "acpi_memory_get_slot_status_descriptor: "
>>                      "device [%s] returned invalid memory slot[%d]",
>> -                    dev_path, slot);
>> +                   dev_path, slot);
>>           g_free(dev_path);
>> +        return NULL;
>> +    }
>> +
>> +    return &mem_st->devs[slot];
>> +}
>> +
>> +void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
>> +                         DeviceState *dev, Error **errp)
>> +{
>> +    MemStatus *mdev;
>> +
>> +    mdev = acpi_memory_slot_status(mem_st, dev, errp);
>> +    if (!mdev) {
>>           return;
>>       }
>>   
>> -    mdev = &mem_st->devs[slot];
>>       mdev->dimm = dev;
>>       mdev->is_enabled = true;
>>       mdev->is_inserting = true;
>> -- 
>> 1.9.3
> .
>
Michael S. Tsirkin March 3, 2015, 1:43 p.m. UTC | #3
On Tue, Mar 03, 2015 at 10:18:12AM +0800, Zhu Guihua wrote:
> 
> On 03/02/2015 01:31 AM, Michael S. Tsirkin wrote:
> >On Thu, Feb 26, 2015 at 09:16:44AM +0800, Zhu Guihua wrote:
> >>From: Tang Chen <tangchen@cn.fujitsu.com>
> >>
> >>Add a new API named acpi_memory_slot_status() to obtain a single memory
> >>slot status. Doing this is because this procedure will be used by other
> >>functions in the next coming patches.
> >>
> >>Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> >>Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> >Same comments as everywhere: include implementation with
> >users.
> >In this case, I can't tell whether error_setg is
> >appropriate since I don't know whether the error
> >ever comes from user.
> 
> Do you have any suggestions about this error_setg?
> 
> Thanks,
> Zhu

If it's guest triggered, it probably shouldn't
print to monitor. If it's user triggered, then it should.

> >
> >>---
> >>  hw/acpi/memory_hotplug.c | 26 +++++++++++++++++++-------
> >>  1 file changed, 19 insertions(+), 7 deletions(-)
> >>
> >>diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
> >>index c6580da..6d91a0d 100644
> >>--- a/hw/acpi/memory_hotplug.c
> >>+++ b/hw/acpi/memory_hotplug.c
> >>@@ -163,29 +163,41 @@ void acpi_memory_hotplug_init(MemoryRegion *as, Object *owner,
> >>      memory_region_add_subregion(as, ACPI_MEMORY_HOTPLUG_BASE, &state->io);
> >>  }
> >>-void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
> >>-                         DeviceState *dev, Error **errp)
> >>+static MemStatus *
> >>+acpi_memory_slot_status(MemHotplugState *mem_st,
> >>+                        DeviceState *dev, Error **errp)
> >>  {
> >>-    MemStatus *mdev;
> >>      Error *local_err = NULL;
> >>      int slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP,
> >>                                         &local_err);
> >>      if (local_err) {
> >>          error_propagate(errp, local_err);
> >>-        return;
> >>+        return NULL;
> >>      }
> >>      if (slot >= mem_st->dev_count) {
> >>          char *dev_path = object_get_canonical_path(OBJECT(dev));
> >>-        error_setg(errp, "acpi_memory_plug_cb: "
> >>+        error_setg(errp, "acpi_memory_get_slot_status_descriptor: "
> >>                     "device [%s] returned invalid memory slot[%d]",
> >>-                    dev_path, slot);
> >>+                   dev_path, slot);
> >>          g_free(dev_path);
> >>+        return NULL;
> >>+    }
> >>+
> >>+    return &mem_st->devs[slot];
> >>+}
> >>+
> >>+void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
> >>+                         DeviceState *dev, Error **errp)
> >>+{
> >>+    MemStatus *mdev;
> >>+
> >>+    mdev = acpi_memory_slot_status(mem_st, dev, errp);
> >>+    if (!mdev) {
> >>          return;
> >>      }
> >>-    mdev = &mem_st->devs[slot];
> >>      mdev->dimm = dev;
> >>      mdev->is_enabled = true;
> >>      mdev->is_inserting = true;
> >>-- 
> >>1.9.3
> >.
> >
Zhu Guihua March 4, 2015, 3:03 a.m. UTC | #4
On 03/03/2015 09:43 PM, Michael S. Tsirkin wrote:
> On Tue, Mar 03, 2015 at 10:18:12AM +0800, Zhu Guihua wrote:
>> On 03/02/2015 01:31 AM, Michael S. Tsirkin wrote:
>>> On Thu, Feb 26, 2015 at 09:16:44AM +0800, Zhu Guihua wrote:
>>>> From: Tang Chen <tangchen@cn.fujitsu.com>
>>>>
>>>> Add a new API named acpi_memory_slot_status() to obtain a single memory
>>>> slot status. Doing this is because this procedure will be used by other
>>>> functions in the next coming patches.
>>>>
>>>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>>>> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
>>> Same comments as everywhere: include implementation with
>>> users.
>>> In this case, I can't tell whether error_setg is
>>> appropriate since I don't know whether the error
>>> ever comes from user.
>> Do you have any suggestions about this error_setg?
>>
>> Thanks,
>> Zhu
> If it's guest triggered, it probably shouldn't
> print to monitor. If it's user triggered, then it should.

Oh, I understand.
In this case, the error is not triggered by guest.

Thanks,
Zhu
>>>> ---
>>>>   hw/acpi/memory_hotplug.c | 26 +++++++++++++++++++-------
>>>>   1 file changed, 19 insertions(+), 7 deletions(-)
>>>>
>>>> diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
>>>> index c6580da..6d91a0d 100644
>>>> --- a/hw/acpi/memory_hotplug.c
>>>> +++ b/hw/acpi/memory_hotplug.c
>>>> @@ -163,29 +163,41 @@ void acpi_memory_hotplug_init(MemoryRegion *as, Object *owner,
>>>>       memory_region_add_subregion(as, ACPI_MEMORY_HOTPLUG_BASE, &state->io);
>>>>   }
>>>> -void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
>>>> -                         DeviceState *dev, Error **errp)
>>>> +static MemStatus *
>>>> +acpi_memory_slot_status(MemHotplugState *mem_st,
>>>> +                        DeviceState *dev, Error **errp)
>>>>   {
>>>> -    MemStatus *mdev;
>>>>       Error *local_err = NULL;
>>>>       int slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP,
>>>>                                          &local_err);
>>>>       if (local_err) {
>>>>           error_propagate(errp, local_err);
>>>> -        return;
>>>> +        return NULL;
>>>>       }
>>>>       if (slot >= mem_st->dev_count) {
>>>>           char *dev_path = object_get_canonical_path(OBJECT(dev));
>>>> -        error_setg(errp, "acpi_memory_plug_cb: "
>>>> +        error_setg(errp, "acpi_memory_get_slot_status_descriptor: "
>>>>                      "device [%s] returned invalid memory slot[%d]",
>>>> -                    dev_path, slot);
>>>> +                   dev_path, slot);
>>>>           g_free(dev_path);
>>>> +        return NULL;
>>>> +    }
>>>> +
>>>> +    return &mem_st->devs[slot];
>>>> +}
>>>> +
>>>> +void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
>>>> +                         DeviceState *dev, Error **errp)
>>>> +{
>>>> +    MemStatus *mdev;
>>>> +
>>>> +    mdev = acpi_memory_slot_status(mem_st, dev, errp);
>>>> +    if (!mdev) {
>>>>           return;
>>>>       }
>>>> -    mdev = &mem_st->devs[slot];
>>>>       mdev->dimm = dev;
>>>>       mdev->is_enabled = true;
>>>>       mdev->is_inserting = true;
>>>> -- 
>>>> 1.9.3
>>> .
>>>
> .
>
diff mbox

Patch

diff --git a/hw/acpi/memory_hotplug.c b/hw/acpi/memory_hotplug.c
index c6580da..6d91a0d 100644
--- a/hw/acpi/memory_hotplug.c
+++ b/hw/acpi/memory_hotplug.c
@@ -163,29 +163,41 @@  void acpi_memory_hotplug_init(MemoryRegion *as, Object *owner,
     memory_region_add_subregion(as, ACPI_MEMORY_HOTPLUG_BASE, &state->io);
 }
 
-void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
-                         DeviceState *dev, Error **errp)
+static MemStatus *
+acpi_memory_slot_status(MemHotplugState *mem_st,
+                        DeviceState *dev, Error **errp)
 {
-    MemStatus *mdev;
     Error *local_err = NULL;
     int slot = object_property_get_int(OBJECT(dev), PC_DIMM_SLOT_PROP,
                                        &local_err);
 
     if (local_err) {
         error_propagate(errp, local_err);
-        return;
+        return NULL;
     }
 
     if (slot >= mem_st->dev_count) {
         char *dev_path = object_get_canonical_path(OBJECT(dev));
-        error_setg(errp, "acpi_memory_plug_cb: "
+        error_setg(errp, "acpi_memory_get_slot_status_descriptor: "
                    "device [%s] returned invalid memory slot[%d]",
-                    dev_path, slot);
+                   dev_path, slot);
         g_free(dev_path);
+        return NULL;
+    }
+
+    return &mem_st->devs[slot];
+}
+
+void acpi_memory_plug_cb(ACPIREGS *ar, qemu_irq irq, MemHotplugState *mem_st,
+                         DeviceState *dev, Error **errp)
+{
+    MemStatus *mdev;
+
+    mdev = acpi_memory_slot_status(mem_st, dev, errp);
+    if (!mdev) {
         return;
     }
 
-    mdev = &mem_st->devs[slot];
     mdev->dimm = dev;
     mdev->is_enabled = true;
     mdev->is_inserting = true;