On 8/14/19 3:34 PM, Segher Boessenkool wrote: > On Wed, Aug 14, 2019 at 08:46:15PM +1000, Michael Ellerman wrote: >> Claudio Carvalho <cclaudio@xxxxxxxxxxxxx> writes: >>> +_GLOBAL(ucall_norets) >>> +EXPORT_SYMBOL_GPL(ucall_norets) >>> + mfcr r0 >>> + stw r0,8(r1) >>> + >>> + sc 2 /* Invoke the ultravisor */ >>> + >>> + lwz r0,8(r1) >>> + mtcrf 0xff,r0 >>> + blr /* Return r3 = status */ >> Paulus points that we shouldn't need to save CR here. Our caller will >> have already saved it if it needed to, and we don't use CR in this >> function so we don't need to save it. >> >> That's assuming the Ultravisor follows the hcall ABI in which CR2-4 are >> non-volatile (PAPR § 14.5.3). > And assuming the ultravisor already clears (or sets, or whatever) all CR > fields it does not want to leak the contents of (which it also should, > of course). Thanks Segher. We are working on that in the ultravisor source code. Claudio. > >> I know plpar_hcall_norets() does save CR, but it shouldn't need to, that >> seems to be historical. aka. no one knows why it does it but it always >> has. > > Segher >