diff mbox

powerpc/hotplug-mem: Fix aa_index match bug for hotplug

Message ID b284d6be-ff37-4e5c-7357-446b4e1ea8ad@linux.vnet.ibm.com (mailing list archive)
State Accepted
Commit dc421b200f91930c9c6a9586810ff8c232cf10fc
Headers show

Commit Message

Michael Bringmann May 22, 2017, 8:44 p.m. UTC
When adding or removing memory, the aa_index (affinity value) for the
memblock must also be converted to match the endianness of the rest
of the 'ibm,dynamic-memory' property.  Otherwise, subsequent retrieval
of the attribute will likely lead to non-existent nodes, followed by
using the default node in the code inappropriately.

Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/pseries/hotplug-memory.c |    2 ++
 1 file changed, 2 insertions(+)

Comments

Michael Ellerman May 30, 2017, 11:41 a.m. UTC | #1
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> When adding or removing memory, the aa_index (affinity value) for the
> memblock must also be converted to match the endianness of the rest
> of the 'ibm,dynamic-memory' property.  Otherwise, subsequent retrieval
> of the attribute will likely lead to non-existent nodes, followed by
> using the default node in the code inappropriately.
>
> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
>
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index e104c71..1fb162b 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -124,6 +124,7 @@ static struct property *dlpar_clone_drconf_property(struct device_node *dn)
>  	for (i = 0; i < num_lmbs; i++) {
>  		lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
>  		lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
> +		lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
>  		lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
>  	}
>  

AFAICS this code was added in commit 5f97b2a0d176 ("powerpc/pseries:
Implement memory hotplug add in the kernel").

So this should probably be marked:

  Fixes: 5f97b2a0d176 ("powerpc/pseries: Implement memory hotplug add in the kernel")

And it seems like a bug we'd want fixed in stable, so:

  Cc: stable@vger.kernel.org # v4.1+


Am I right?

cheers
Nathan Fontenot May 30, 2017, 5:35 p.m. UTC | #2
On 05/30/2017 06:41 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> When adding or removing memory, the aa_index (affinity value) for the
>> memblock must also be converted to match the endianness of the rest
>> of the 'ibm,dynamic-memory' property.  Otherwise, subsequent retrieval
>> of the attribute will likely lead to non-existent nodes, followed by
>> using the default node in the code inappropriately.
>>
>> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
>>
>> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
>> index e104c71..1fb162b 100644
>> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
>> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
>> @@ -124,6 +124,7 @@ static struct property *dlpar_clone_drconf_property(struct device_node *dn)
>>  	for (i = 0; i < num_lmbs; i++) {
>>  		lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
>>  		lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
>> +		lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
>>  		lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
>>  	}
>>  
> 
> AFAICS this code was added in commit 5f97b2a0d176 ("powerpc/pseries:
> Implement memory hotplug add in the kernel").
> 
> So this should probably be marked:
> 
>   Fixes: 5f97b2a0d176 ("powerpc/pseries: Implement memory hotplug add in the kernel")
> 
> And it seems like a bug we'd want fixed in stable, so:
> 
>   Cc: stable@vger.kernel.org # v4.1+
> 
> 
> Am I right?

Yes, that is correct.

-Nathan
Michael Ellerman May 31, 2017, 4:03 a.m. UTC | #3
Nathan Fontenot <nfont@linux.vnet.ibm.com> writes:
> On 05/30/2017 06:41 AM, Michael Ellerman wrote:
>> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>>> When adding or removing memory, the aa_index (affinity value) for the
>>> memblock must also be converted to match the endianness of the rest
>>> of the 'ibm,dynamic-memory' property.  Otherwise, subsequent retrieval
>>> of the attribute will likely lead to non-existent nodes, followed by
>>> using the default node in the code inappropriately.
>>>
>>> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
>>>
>>> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
>>> index e104c71..1fb162b 100644
>>> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
>>> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
>>> @@ -124,6 +124,7 @@ static struct property *dlpar_clone_drconf_property(struct device_node *dn)
>>>  	for (i = 0; i < num_lmbs; i++) {
>>>  		lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
>>>  		lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
>>> +		lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
>>>  		lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
>>>  	}
>>>  
>> 
>> AFAICS this code was added in commit 5f97b2a0d176 ("powerpc/pseries:
>> Implement memory hotplug add in the kernel").
>> 
>> So this should probably be marked:
>> 
>>   Fixes: 5f97b2a0d176 ("powerpc/pseries: Implement memory hotplug add in the kernel")
>> 
>> And it seems like a bug we'd want fixed in stable, so:
>> 
>>   Cc: stable@vger.kernel.org # v4.1+
>> 
>> Am I right?
>
> Yes, that is correct.

Thanks.

cheers
Michael Ellerman June 1, 2017, 1:31 p.m. UTC | #4
On Mon, 2017-05-22 at 20:44:37 UTC, Michael Bringmann wrote:
> When adding or removing memory, the aa_index (affinity value) for the
> memblock must also be converted to match the endianness of the rest
> of the 'ibm,dynamic-memory' property.  Otherwise, subsequent retrieval
> of the attribute will likely lead to non-existent nodes, followed by
> using the default node in the code inappropriately.
> 
> Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/dc421b200f91930c9c6a9586810ff8

cheers
diff mbox

Patch

diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
index e104c71..1fb162b 100644
--- a/arch/powerpc/platforms/pseries/hotplug-memory.c
+++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
@@ -124,6 +124,7 @@  static struct property *dlpar_clone_drconf_property(struct device_node *dn)
 	for (i = 0; i < num_lmbs; i++) {
 		lmbs[i].base_addr = be64_to_cpu(lmbs[i].base_addr);
 		lmbs[i].drc_index = be32_to_cpu(lmbs[i].drc_index);
+		lmbs[i].aa_index = be32_to_cpu(lmbs[i].aa_index);
 		lmbs[i].flags = be32_to_cpu(lmbs[i].flags);
 	}
 
@@ -147,6 +148,7 @@  static void dlpar_update_drconf_property(struct device_node *dn,
 	for (i = 0; i < num_lmbs; i++) {
 		lmbs[i].base_addr = cpu_to_be64(lmbs[i].base_addr);
 		lmbs[i].drc_index = cpu_to_be32(lmbs[i].drc_index);
+		lmbs[i].aa_index = cpu_to_be32(lmbs[i].aa_index);
 		lmbs[i].flags = cpu_to_be32(lmbs[i].flags);
 	}