In transfer_to_handler() (entry_32.S), we have:
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
...
#ifdef CONFIG_SMP
CURRENT_THREAD_INFO(r9, r1)
lwz r9,TI_CPU(r9)
slwi r9,r9,3
add r11,r11,r9
#endif
#endif
When running this piece of code, MMU translation is off. But r9 contains the virtual addr of current_thread_info, so unless I miss something, this cannot work on the 40x, can it ?
On CONFIG_BOOKE it works because phys addr = virt addr
Christophe
From: Michael Ellerman <mpe@ellerman.id.au> Date: 2019-01-30 11:45:32
Christophe Leroy [off-list ref] writes:
In transfer_to_handler() (entry_32.S), we have:
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
...
#ifdef CONFIG_SMP
CURRENT_THREAD_INFO(r9, r1)
lwz r9,TI_CPU(r9)
slwi r9,r9,3
add r11,r11,r9
#endif
#endif
When running this piece of code, MMU translation is off. But r9 contains
the virtual addr of current_thread_info, so unless I miss something,
this cannot work on the 40x, can it ?
On CONFIG_BOOKE it works because phys addr = virt addr
AFAIK 40x can't be SMP:
config SMP
depends on PPC_BOOK3S || PPC_BOOK3E || FSL_BOOKE || PPC_47x
But this stuff is all before my time.
The commit that added the SMP block was clearly only meant for BookE:
4eaddb4d7ec3 ("[POWERPC] Make Book-E debug handling SMP safe")
cheers
In transfer_to_handler() (entry_32.S), we have:
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
...
#ifdef CONFIG_SMP
CURRENT_THREAD_INFO(r9, r1)
lwz r9,TI_CPU(r9)
slwi r9,r9,3
add r11,r11,r9
#endif
#endif
When running this piece of code, MMU translation is off. But r9 contains
the virtual addr of current_thread_info, so unless I miss something,
this cannot work on the 40x, can it ?
On CONFIG_BOOKE it works because phys addr = virt addr
AFAIK 40x can't be SMP:
config SMP
depends on PPC_BOOK3S || PPC_BOOK3E || FSL_BOOKE || PPC_47x
But this stuff is all before my time.
The commit that added the SMP block was clearly only meant for BookE:
4eaddb4d7ec3 ("[POWERPC] Make Book-E debug handling SMP safe")
Ok, then no need to worry about it. It will implicitely get fixed with the THREAD_INFO_IN_TASK_STRUCT series.
Christophe
From: Benjamin Herrenschmidt <hidden> Date: 2019-02-01 07:44:42
On Wed, 2019-01-30 at 08:16 +0100, Christophe Leroy wrote:
In transfer_to_handler() (entry_32.S), we have:
#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
...
#ifdef CONFIG_SMP
CURRENT_THREAD_INFO(r9, r1)
lwz r9,TI_CPU(r9)
slwi r9,r9,3
add r11,r11,r9
#endif
#endif
When running this piece of code, MMU translation is off. But r9 contains
the virtual addr of current_thread_info, so unless I miss something,
this cannot work on the 40x, can it ?
On CONFIG_BOOKE it works because phys addr = virt addr
There is no 40x SMP that I am aware of.
Cheers,
Ben.