diff mbox

[v2,1/1] pc-dimm: Change PCDIMMDevice->node from UINT32 to INT32, and initialize it as -1.

Message ID 1408413327-31868-1-git-send-email-tangchen@cn.fujitsu.com
State New
Headers show

Commit Message

Tang Chen Aug. 19, 2014, 1:55 a.m. UTC
If user doesn't specify numa options, nb_numa_nodes will be 0. But PCDIMMDevice->node
is also initialized to 0. As a result, the following check will fail:

pc_dimm_realize()
{
	......
	if (dimm->node >= nb_numa_nodes) {
            error_setg(errp, "'DIMM property " PC_DIMM_NODE_PROP " has value %"
                       PRIu32 "' which exceeds the number of numa nodes: %d",
                       dimm->node, nb_numa_nodes);
            return;
	}
	......
}

But this is not an error.

PCDIMMDevice->node should be initialized to -1. This is for users who do not use
NUMA.

Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
---

Change log v1 -> v2:
1. Simplify the comment.
2. Move the definition of NO_NODE_ID near where it is used.

 hw/mem/pc-dimm.c         | 7 ++++++-
 include/hw/mem/pc-dimm.h | 2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Tang Chen Aug. 26, 2014, 9:32 a.m. UTC | #1
Hi ,

Would anybody help to review this patch ?

Thanks. :)

On 08/19/2014 09:55 AM, Tang Chen wrote:
> If user doesn't specify numa options, nb_numa_nodes will be 0. But PCDIMMDevice->node
> is also initialized to 0. As a result, the following check will fail:
>
> pc_dimm_realize()
> {
> 	......
> 	if (dimm->node >= nb_numa_nodes) {
>              error_setg(errp, "'DIMM property " PC_DIMM_NODE_PROP " has value %"
>                         PRIu32 "' which exceeds the number of numa nodes: %d",
>                         dimm->node, nb_numa_nodes);
>              return;
> 	}
> 	......
> }
>
> But this is not an error.
>
> PCDIMMDevice->node should be initialized to -1. This is for users who do not use
> NUMA.
>
> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
> ---
>
> Change log v1 -> v2:
> 1. Simplify the comment.
> 2. Move the definition of NO_NODE_ID near where it is used.
>
>   hw/mem/pc-dimm.c         | 7 ++++++-
>   include/hw/mem/pc-dimm.h | 2 +-
>   2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
> index ec8b1a3..34109a2 100644
> --- a/hw/mem/pc-dimm.c
> +++ b/hw/mem/pc-dimm.c
> @@ -195,9 +195,14 @@ out:
>       return ret;
>   }
>   
> +/* Default value for PCDIMMDevice->node (unless specified by user).
> + * In this case, SRAT won't be created.
> + */
> +#define NO_NODE_ID -1
> +
>   static Property pc_dimm_properties[] = {
>       DEFINE_PROP_UINT64(PC_DIMM_ADDR_PROP, PCDIMMDevice, addr, 0),
> -    DEFINE_PROP_UINT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, 0),
> +    DEFINE_PROP_INT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, NO_NODE_ID),
>       DEFINE_PROP_INT32(PC_DIMM_SLOT_PROP, PCDIMMDevice, slot,
>                         PC_DIMM_UNASSIGNED_SLOT),
>       DEFINE_PROP_END_OF_LIST(),
> diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h
> index 761eeef..82abb2f 100644
> --- a/include/hw/mem/pc-dimm.h
> +++ b/include/hw/mem/pc-dimm.h
> @@ -53,7 +53,7 @@ typedef struct PCDIMMDevice {
>   
>       /* public */
>       uint64_t addr;
> -    uint32_t node;
> +    int32_t node;
>       int32_t slot;
>       HostMemoryBackend *hostmem;
>   } PCDIMMDevice;
Andrey Korolyov Aug. 26, 2014, 2:24 p.m. UTC | #2
On Tue, Aug 26, 2014 at 1:32 PM, tangchen <tangchen@cn.fujitsu.com> wrote:
> Hi ,
>
> Would anybody help to review this patch ?
>
> Thanks. :)
>
>
> On 08/19/2014 09:55 AM, Tang Chen wrote:
>>
>> If user doesn't specify numa options, nb_numa_nodes will be 0. But
>> PCDIMMDevice->node
>> is also initialized to 0. As a result, the following check will fail:
>>
>> pc_dimm_realize()
>> {
>>         ......
>>         if (dimm->node >= nb_numa_nodes) {
>>              error_setg(errp, "'DIMM property " PC_DIMM_NODE_PROP " has
>> value %"
>>                         PRIu32 "' which exceeds the number of numa nodes:
>> %d",
>>                         dimm->node, nb_numa_nodes);
>>              return;
>>         }
>>         ......
>> }
>>
>> But this is not an error.
>>
>> PCDIMMDevice->node should be initialized to -1. This is for users who do
>> not use
>> NUMA.
>>
>> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
>> ---
>>
>> Change log v1 -> v2:
>> 1. Simplify the comment.
>> 2. Move the definition of NO_NODE_ID near where it is used.
>>
>>   hw/mem/pc-dimm.c         | 7 ++++++-
>>   include/hw/mem/pc-dimm.h | 2 +-
>>   2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
>> index ec8b1a3..34109a2 100644
>> --- a/hw/mem/pc-dimm.c
>> +++ b/hw/mem/pc-dimm.c
>> @@ -195,9 +195,14 @@ out:
>>       return ret;
>>   }
>>   +/* Default value for PCDIMMDevice->node (unless specified by user).
>> + * In this case, SRAT won't be created.
>> + */
>> +#define NO_NODE_ID -1
>> +
>>   static Property pc_dimm_properties[] = {
>>       DEFINE_PROP_UINT64(PC_DIMM_ADDR_PROP, PCDIMMDevice, addr, 0),
>> -    DEFINE_PROP_UINT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, 0),
>> +    DEFINE_PROP_INT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, NO_NODE_ID),
>>       DEFINE_PROP_INT32(PC_DIMM_SLOT_PROP, PCDIMMDevice, slot,
>>                         PC_DIMM_UNASSIGNED_SLOT),
>>       DEFINE_PROP_END_OF_LIST(),
>> diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h
>> index 761eeef..82abb2f 100644
>> --- a/include/hw/mem/pc-dimm.h
>> +++ b/include/hw/mem/pc-dimm.h
>> @@ -53,7 +53,7 @@ typedef struct PCDIMMDevice {
>>         /* public */
>>       uint64_t addr;
>> -    uint32_t node;
>> +    int32_t node;
>>       int32_t slot;
>>       HostMemoryBackend *hostmem;
>>   } PCDIMMDevice;
>
>
>

Just to remind - Windows will not add pc dimms without populated SRAT,
so imho forcing NUMA topology to be set (and whose support is required
anyway from guest linux kernel in order to support ACPI hotplug) is
better than approach proposed by this patch.
Tang Chen Aug. 27, 2014, 8:39 a.m. UTC | #3
On 08/26/2014 10:24 PM, Andrey Korolyov wrote:
> ......
> Just to remind - Windows will not add pc dimms without populated SRAT,
> so imho forcing NUMA topology to be set (and whose support is required
> anyway from guest linux kernel in order to support ACPI hotplug) is
> better than approach proposed by this patch.
> .
Hi Andrey,

Sorry, I don't quite understand. If Windows won't add pc-dimm without SRAT,
why is this approach not enough ?  If there is no SRAT, there is no NUMA 
topology.
Why do we need to set a NUMA topology ?

Thanks.
Tang Chen Aug. 27, 2014, 8:39 a.m. UTC | #4
On 08/26/2014 10:24 PM, Andrey Korolyov wrote:
> ......
> Just to remind - Windows will not add pc dimms without populated SRAT,
> so imho forcing NUMA topology to be set (and whose support is required
> anyway from guest linux kernel in order to support ACPI hotplug) is
> better than approach proposed by this patch.
> .
Hi Andrey,

Sorry, I don't quite understand. If Windows won't add pc-dimm without SRAT,
why is this approach not enough ?  If there is no SRAT, there is no NUMA 
topology.
Why do we need to set a NUMA topology ?

Thanks.
Andrey Korolyov Aug. 27, 2014, 8:51 a.m. UTC | #5
On Wed, Aug 27, 2014 at 12:39 PM, tangchen <tangchen@cn.fujitsu.com> wrote:
>
> On 08/26/2014 10:24 PM, Andrey Korolyov wrote:
>>
>> ......
>>
>> Just to remind - Windows will not add pc dimms without populated SRAT,
>> so imho forcing NUMA topology to be set (and whose support is required
>> anyway from guest linux kernel in order to support ACPI hotplug) is
>> better than approach proposed by this patch.
>> .
>
> Hi Andrey,
>
> Sorry, I don't quite understand. If Windows won't add pc-dimm without SRAT,
> why is this approach not enough ?  If there is no SRAT, there is no NUMA
> topology.
> Why do we need to set a NUMA topology ?
>
> Thanks.

Sorry, probably it was a bit unclear. I thnk that there should be no
cases when dimm is plugged (and check from patch is fired up) without
actually populated NUMA, because not every OS will workaround this by
faking the node.
diff mbox

Patch

diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
index ec8b1a3..34109a2 100644
--- a/hw/mem/pc-dimm.c
+++ b/hw/mem/pc-dimm.c
@@ -195,9 +195,14 @@  out:
     return ret;
 }
 
+/* Default value for PCDIMMDevice->node (unless specified by user).
+ * In this case, SRAT won't be created.
+ */
+#define NO_NODE_ID -1
+
 static Property pc_dimm_properties[] = {
     DEFINE_PROP_UINT64(PC_DIMM_ADDR_PROP, PCDIMMDevice, addr, 0),
-    DEFINE_PROP_UINT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, 0),
+    DEFINE_PROP_INT32(PC_DIMM_NODE_PROP, PCDIMMDevice, node, NO_NODE_ID),
     DEFINE_PROP_INT32(PC_DIMM_SLOT_PROP, PCDIMMDevice, slot,
                       PC_DIMM_UNASSIGNED_SLOT),
     DEFINE_PROP_END_OF_LIST(),
diff --git a/include/hw/mem/pc-dimm.h b/include/hw/mem/pc-dimm.h
index 761eeef..82abb2f 100644
--- a/include/hw/mem/pc-dimm.h
+++ b/include/hw/mem/pc-dimm.h
@@ -53,7 +53,7 @@  typedef struct PCDIMMDevice {
 
     /* public */
     uint64_t addr;
-    uint32_t node;
+    int32_t node;
     int32_t slot;
     HostMemoryBackend *hostmem;
 } PCDIMMDevice;