> On 21 Sep 2020, at 10:23, Jan Kiszka <jan.kis...@siemens.com> wrote:
> 
> On 17.09.20 20:14, Oliver Schwartz wrote:
>>> On 17 Sep 2020, at 18:21, Ralf Ramsauer <ralf.ramsa...@oth-regensburg.de 
>>> <mailto:ralf.ramsa...@oth-regensburg.de>> wrote:
>>> 
>>> 
>>> On 9/17/20 8:26 AM, Jan Kiszka wrote:
>>>> Subject tag should be "arm64". And the patch should go over next first.
>>>> I can fix up both.
>>>> 
>>>> On 16.09.20 15:07, Oliver Schwartz wrote:
>>>>> SMC/HVC calls may modify registers x0 to x3. To make sure the compiler
>>>>> doesn't assume input registers to be constant, also mark these registers
>>>>> as output when used as input.
>>>>> 
>>>>> Signed-off-by: Oliver Schwartz <oliver.schwa...@gmx.de 
>>>>> <mailto:oliver.schwa...@gmx.de>>
>>>>> ---
>>>>> hypervisor/arch/arm64/include/asm/smc.h      | 13 ++++++-------
>>>>> include/arch/arm64/asm/jailhouse_hypercall.h | 20 +++++++++++---------
>>>>> 2 files changed, 17 insertions(+), 16 deletions(-)
>>>>> 
>>>>> diff --git a/hypervisor/arch/arm64/include/asm/smc.h
>>>>> b/hypervisor/arch/arm64/include/asm/smc.h
>>>>> index 1a5d5c8..c80fe15 100644
>>>>> --- a/hypervisor/arch/arm64/include/asm/smc.h
>>>>> +++ b/hypervisor/arch/arm64/include/asm/smc.h
>>>>> @@ -28,8 +28,8 @@ static inline long smc_arg1(unsigned long id,
>>>>> unsigned long par1)
>>>>> register unsigned long __par1 asm("r1") = par1;
>>>>> asm volatile ("smc #0\n\t"
>>>>> -        : "=r" (__id)
>>>>> -        : "r"(__id), "r"(__par1)
>>>>> +        : "+r" (__id), "+r"(__par1)
>>>>> +        :
>>>>> : "memory", "x2", "x3");
>>>>> 
>>>> 
>>>> For SMCCC, I'm considering to align fully with Linux, i.e. convert the
>>>> remaining register clobberings into early ones, but I also have no
>>>> strong argument for it.
>>>> 
>>>> Ralf, thoughts?
>>> 
>>> Just had a look at Linux's implementation. And now I recall why I didn't
>>> c&p it from Linux: it's an unreadable macro hell [1] that would benefit
>>> from being open-coded. But trying to follow Linux's __constraint macro,
>>> shouldn't we protect r2 and r3 as well?
>>> 
>>> Linux would unroll __constraint_read_1 and __constraint_write_1, and
>>> __constraint_read_1 would protect r2 and r3 as well. We protect x2 and
>>> x3 via the clobber list -- is that enough?
>> I’m by no means an expert on arm assembler. However, I’m quite positive that 
>> there are no physical registers r2 and r3 that can be protected in arm64. 
>> These are just placeholders that are translated by the compiler to x2 and 
>> x3. So protecting r2/r3 as dummy arguments or x2/x3 via clobber list is in 
>> effect the same, just more explicit.
> 
> I've merged both patches to next now using your pattern. I applied some 
> massaging though. Please have a look at the result.

Definitely looks good to me.

Oliver

> Some consolidation patch for the hypercalls will also follow.

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/525A4B24-2A65-4671-B45F-35F146C7C520%40gmx.de.

Reply via email to