Hi Leonardo, Leonardo Bras <leona...@linux.ibm.com> writes: > Hello Nathan, thanks for the feedback! > > On Fri, 2020-04-10 at 14:28 -0500, Nathan Lynch wrote: >> Leonardo Bras <leona...@linux.ibm.com> writes: >> > Implement rtas_call_reentrant() for reentrant rtas-calls: >> > "ibm,int-on", "ibm,int-off",ibm,get-xive" and "ibm,set-xive". >> > >> > On LoPAPR Version 1.1 (March 24, 2016), from 7.3.10.1 to 7.3.10.4, >> > items 2 and 3 say: >> > >> > 2 - For the PowerPC External Interrupt option: The * call must be >> > reentrant to the number of processors on the platform. >> > 3 - For the PowerPC External Interrupt option: The * argument call >> > buffer for each simultaneous call must be physically unique. >> > >> > So, these rtas-calls can be called in a lockless way, if using >> > a different buffer for each call. >> > > >> From the language in the spec it's clear that these calls are intended >> to be reentrant with respect to themselves, but it's less clear to me >> that they are safe to call simultaneously with respect to each other or >> arbitrary other RTAS methods. > > In my viewpoint, being reentrant to themselves, without being reentrant > to others would be very difficult to do, considering the way the > rtas_call is crafted to work. > > I mean, I have no experience in rtas code, it's my viewpoint. In my > thoughts there is something like this: > > common_path -> selects function by token -> reentrant function > |-> non-reentrant function > > If there is one function that is reentrant, it means the common_path > and function selection by token would need to be reentrant too.
I checked with partition firmware development and these calls can be used concurrently with arbitrary other RTAS calls, which confirms your interpretation. Thanks for bearing with me.