Re: [PATCH 1/1] powerpc/rtas: Implement reentrant rtas call
From: Nathan Lynch <hidden>
Date: 2020-05-14 19:05:33
Also in:
lkml
Hi Leonardo, Leonardo Bras [off-list ref] writes:
Hello Nathan, thanks for the feedback! On Fri, 2020-04-10 at 14:28 -0500, Nathan Lynch wrote:quoted
Leonardo Bras [off-list ref] writes:quoted
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.quoted
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.