diff mbox series

[kernel,v2] powerpc/mm: Flush radix process translations when setting MMU type

Message ID 20180201050944.30332-1-aik@ozlabs.ru
State Accepted
Commit 62e984ddfd6b056d399e24113f5e6a7145e579d8
Headers show
Series [kernel,v2] powerpc/mm: Flush radix process translations when setting MMU type | expand

Commit Message

Alexey Kardashevskiy Feb. 1, 2018, 5:09 a.m. UTC
Radix guests do normally invalidate process-scoped translations when
a new pid is allocated but migrated guests do not invalidate these so
migrated guests crash sometime, especially easy to reproduce with
migration happening within first 10 seconds after the guest boot start on
the same machine.

This adds the "Invalidate process-scoped translations" flush to fix
radix guests migration.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
---
Changes:
v2:
* removed PPC_TLBIE_5() from the !(old&PATH_HR) case as it is pointless
on hash

---


Not so sure that "process-scoped translations" only require flushing
at pid allocation and migration.

---
 arch/powerpc/mm/pgtable_64.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Laurent Vivier Feb. 7, 2018, 2:33 p.m. UTC | #1
On 01/02/2018 06:09, Alexey Kardashevskiy wrote:
> Radix guests do normally invalidate process-scoped translations when
> a new pid is allocated but migrated guests do not invalidate these so
> migrated guests crash sometime, especially easy to reproduce with
> migration happening within first 10 seconds after the guest boot start on
> the same machine.
> 
> This adds the "Invalidate process-scoped translations" flush to fix
> radix guests migration.
> 
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> ---
> Changes:
> v2:
> * removed PPC_TLBIE_5() from the !(old&PATH_HR) case as it is pointless
> on hash
> 
> ---
> 
> 
> Not so sure that "process-scoped translations" only require flushing
> at pid allocation and migration.
> 
> ---
>  arch/powerpc/mm/pgtable_64.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
> index c9a623c..d75dd52 100644
> --- a/arch/powerpc/mm/pgtable_64.c
> +++ b/arch/powerpc/mm/pgtable_64.c
> @@ -471,6 +471,8 @@ void mmu_partition_table_set_entry(unsigned int lpid, unsigned long dw0,
>  	if (old & PATB_HR) {
>  		asm volatile(PPC_TLBIE_5(%0,%1,2,0,1) : :
>  			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
> +		asm volatile(PPC_TLBIE_5(%0,%1,2,1,1) : :
> +			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
>  		trace_tlbie(lpid, 0, TLBIEL_INVAL_SET_LPID, lpid, 2, 0, 1);
>  	} else {
>  		asm volatile(PPC_TLBIE_5(%0,%1,2,0,0) : :
> 

This patch fixes for me a VM migration crash on POWER9.

Tested-by: Laurent Vivier <lvivier@redhat.com>

Thanks,
Laurent
Daniel Henrique Barboza Feb. 7, 2018, 5:49 p.m. UTC | #2
On 02/07/2018 12:33 PM, Laurent Vivier wrote:
> On 01/02/2018 06:09, Alexey Kardashevskiy wrote:
>> Radix guests do normally invalidate process-scoped translations when
>> a new pid is allocated but migrated guests do not invalidate these so
>> migrated guests crash sometime, especially easy to reproduce with
>> migration happening within first 10 seconds after the guest boot start on
>> the same machine.
>>
>> This adds the "Invalidate process-scoped translations" flush to fix
>> radix guests migration.
>>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> ---
>> Changes:
>> v2:
>> * removed PPC_TLBIE_5() from the !(old&PATH_HR) case as it is pointless
>> on hash
>>
>> ---
>>
>>
>> Not so sure that "process-scoped translations" only require flushing
>> at pid allocation and migration.
>>
>> ---
>>   arch/powerpc/mm/pgtable_64.c | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
>> index c9a623c..d75dd52 100644
>> --- a/arch/powerpc/mm/pgtable_64.c
>> +++ b/arch/powerpc/mm/pgtable_64.c
>> @@ -471,6 +471,8 @@ void mmu_partition_table_set_entry(unsigned int lpid, unsigned long dw0,
>>   	if (old & PATB_HR) {
>>   		asm volatile(PPC_TLBIE_5(%0,%1,2,0,1) : :
>>   			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
>> +		asm volatile(PPC_TLBIE_5(%0,%1,2,1,1) : :
>> +			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
>>   		trace_tlbie(lpid, 0, TLBIEL_INVAL_SET_LPID, lpid, 2, 0, 1);
>>   	} else {
>>   		asm volatile(PPC_TLBIE_5(%0,%1,2,0,0) : :
>>
> This patch fixes for me a VM migration crash on POWER9.

Same here.

Tested-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>

>
> Tested-by: Laurent Vivier <lvivier@redhat.com>
>
> Thanks,
> Laurent
>
Laurent Vivier Feb. 13, 2018, 11:25 a.m. UTC | #3
On 07/02/2018 18:49, Daniel Henrique Barboza wrote:
> 
> 
> On 02/07/2018 12:33 PM, Laurent Vivier wrote:
>> On 01/02/2018 06:09, Alexey Kardashevskiy wrote:
>>> Radix guests do normally invalidate process-scoped translations when
>>> a new pid is allocated but migrated guests do not invalidate these so
>>> migrated guests crash sometime, especially easy to reproduce with
>>> migration happening within first 10 seconds after the guest boot
>>> start on
>>> the same machine.
>>>
>>> This adds the "Invalidate process-scoped translations" flush to fix
>>> radix guests migration.
>>>
>>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>>> ---
>>> Changes:
>>> v2:
>>> * removed PPC_TLBIE_5() from the !(old&PATH_HR) case as it is pointless
>>> on hash
>>>
>>> ---
>>>
>>>
>>> Not so sure that "process-scoped translations" only require flushing
>>> at pid allocation and migration.
>>>
>>> ---
>>>   arch/powerpc/mm/pgtable_64.c | 2 ++
>>>   1 file changed, 2 insertions(+)
>>>
>>> diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
>>> index c9a623c..d75dd52 100644
>>> --- a/arch/powerpc/mm/pgtable_64.c
>>> +++ b/arch/powerpc/mm/pgtable_64.c
>>> @@ -471,6 +471,8 @@ void mmu_partition_table_set_entry(unsigned int
>>> lpid, unsigned long dw0,
>>>       if (old & PATB_HR) {
>>>           asm volatile(PPC_TLBIE_5(%0,%1,2,0,1) : :
>>>                    "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
>>> +        asm volatile(PPC_TLBIE_5(%0,%1,2,1,1) : :
>>> +                 "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
>>>           trace_tlbie(lpid, 0, TLBIEL_INVAL_SET_LPID, lpid, 2, 0, 1);
>>>       } else {
>>>           asm volatile(PPC_TLBIE_5(%0,%1,2,0,0) : :
>>>
>> This patch fixes for me a VM migration crash on POWER9.
> 
> Same here.
> 
> Tested-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
> 
>>
>> Tested-by: Laurent Vivier <lvivier@redhat.com>

Any hope to have this patch merged soon?

It fixes a real problem and migration of VM is not reliable without it.

Thanks,
Laurent
Michael Ellerman Feb. 14, 2018, 5:43 a.m. UTC | #4
On Thu, 2018-02-01 at 05:09:44 UTC, Alexey Kardashevskiy wrote:
> Radix guests do normally invalidate process-scoped translations when
> a new pid is allocated but migrated guests do not invalidate these so
> migrated guests crash sometime, especially easy to reproduce with
> migration happening within first 10 seconds after the guest boot start on
> the same machine.
> 
> This adds the "Invalidate process-scoped translations" flush to fix
> radix guests migration.
> 
> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> Tested-by: Laurent Vivier <lvivier@redhat.com>
> Tested-by: Daniel Henrique Barboza <danielhb@linux.vnet.ibm.com>

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/62e984ddfd6b056d399e24113f5e6a

cheers
Michael Ellerman Feb. 14, 2018, 1:36 p.m. UTC | #5
Laurent Vivier <lvivier@redhat.com> writes:
> On 07/02/2018 18:49, Daniel Henrique Barboza wrote:
>> On 02/07/2018 12:33 PM, Laurent Vivier wrote:
>>> On 01/02/2018 06:09, Alexey Kardashevskiy wrote:
>>>> Radix guests do normally invalidate process-scoped translations when
>>>> a new pid is allocated but migrated guests do not invalidate these so
>>>> migrated guests crash sometime, especially easy to reproduce with
>>>> migration happening within first 10 seconds after the guest boot
>>>> start on
>>>> the same machine.
>>>>
>>>> This adds the "Invalidate process-scoped translations" flush to fix
>>>> radix guests migration.
>>>>
>>>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
...
>>>
>>> Tested-by: Laurent Vivier <lvivier@redhat.com>
>
> Any hope to have this patch merged soon?
>
> It fixes a real problem and migration of VM is not reliable without it.

Sorry it got lost in the merge window / rc1 madness. It's in my fixes
branch now and heading to Linus.

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/mm/pgtable_64.c b/arch/powerpc/mm/pgtable_64.c
index c9a623c..d75dd52 100644
--- a/arch/powerpc/mm/pgtable_64.c
+++ b/arch/powerpc/mm/pgtable_64.c
@@ -471,6 +471,8 @@  void mmu_partition_table_set_entry(unsigned int lpid, unsigned long dw0,
 	if (old & PATB_HR) {
 		asm volatile(PPC_TLBIE_5(%0,%1,2,0,1) : :
 			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
+		asm volatile(PPC_TLBIE_5(%0,%1,2,1,1) : :
+			     "r" (TLBIEL_INVAL_SET_LPID), "r" (lpid));
 		trace_tlbie(lpid, 0, TLBIEL_INVAL_SET_LPID, lpid, 2, 0, 1);
 	} else {
 		asm volatile(PPC_TLBIE_5(%0,%1,2,0,0) : :