From: Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
To: Julien Grall <julien.grall@arm.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
Andrii Anisov <Andrii_Anisov@epam.com>,
Andre Przywara <andre.przywara@arm.com>,
"andrii.anisov@gmail.com" <andrii.anisov@gmail.com>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: Re: [Xen-devel] [PATCH RFC for-4.13 04/10] xen/arm: Ensure the SSBD workaround is re-enabled right after exiting a guest
Date: Fri, 27 Sep 2019 17:58:56 +0000 [thread overview]
Message-ID: <87sgoh4o4f.fsf@epam.com> (raw)
In-Reply-To: <4c8524cc-7186-c4f4-d09d-20c7a534c900@arm.com>
Julien Grall writes:
> Hi,
>
> On 27/09/2019 15:21, Volodymyr Babchuk wrote:
>>
>> Julien Grall writes:
>>
>>> On 27/09/2019 14:33, Volodymyr Babchuk wrote:
>>>> Julien Grall writes:
>>>>> On 27/09/2019 13:39, Volodymyr Babchuk wrote:
>>>>>> Julien Grall writes:
>>>>>>> On 27/09/2019 12:56, Volodymyr Babchuk wrote:
>>>>>>>> Julien Grall writes:
>>>>>> Or maybe, we should not split the function at all? Instead, we enable
>>>>>> interrupts right in the middle of it.
>>>>>
>>>>> I thought about this but I didn't much like the resulting code.
>>>>>
>>>>> The instruction to unmask interrupts requires to take an immediate
>>>>> (indicates which interrupts to unmask). As not all the traps require
>>>>> to unmask the same interrupts, we would end up to have to a bunch of
>>>>> if in the code to select the right unmasking.
>>>> Ah, yes, this is the problem. We can provide callback to
>>>> enter_hypervisor_from_guest().
>>>
>>> I am not sure what you mean by this. Do you mean a callback that will
>>> unmask the interrupts?
>> Yes. You can pass function pointer to enter_hypervisor_from_guest(). To
>> a function, that will unmask the interrupts. I'm sure that guest_vector
>> macro can generate it for you. Something like this:
>>
>> .macro guest_vector compat, iflags, trap, save_x0_x1=1
>> entry hyp=0, compat=\compat, save_x0_x1=\save_x0_x1
>> /*
>> * The vSError will be checked while SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT
>> * is not set. If a vSError took place, the initial exception will be
>> * skipped. Exit ASAP
>> */
>> ALTERNATIVE("bl check_pending_vserror; cbnz x0, 1f",
>> "nop; nop",
>> SKIP_SYNCHRONIZE_SERROR_ENTRY_EXIT)
>> ldr x0, =1f
>> bl enter_hypervisor_from_guest
>> mov x0, sp
>> bl do_trap_\trap
>> b 1f
>> 2:
>> msr daifclr, \iflags
>> ret
>> 1:
>> exit hyp=0, compat=\compat
>> .endm
>
> TBH, I don't see what's the point you are trying to make here. Yes,
> there are many way to write a code and possibility to make one
> function. You could also create a skeleton macro for
> enter_hypervisor_from_guest and generate N of them (one per set of
> unmask interrupts) and call them.
>
> But are they really worth it?
The point is that you are trying to split one entity into two.
As I see it: semantically we have one function:
enter_hypervisor_from_guest(). The purpose of this function is clear:
finish transition from guest mode to hypervisor mode.
But because of some architectural limitation (daifclr requires only
immediate argument) you are forced to divide this function in two.
I don't like this, because entry path now is more complex. To follow
what is going you need to bounce between head.S and traps.c one extra time.
Anyways, this is only my opinion. I'm not forcing you to implement
enter_hypervisor_from_guest() in this way.
I'm okay with enter_hypervisor_from_guest_preirq() as well.
--
Volodymyr Babchuk at EPAM
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2019-09-27 18:00 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-26 18:37 [Xen-devel] [PATCH RFC for-4.13 00/10] xen/arm: XSA-201 and XSA-263 fixes Julien Grall
2019-09-26 18:37 ` [Xen-devel] [PATCH RFC for-4.13 01/10] xen/arm64: entry: Introduce a macro to generate guest vector and use it Julien Grall
2019-09-27 11:34 ` Volodymyr Babchuk
2019-10-01 19:53 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 02/10] xen/arm64: head: Check if an SError is pending when receiving a vSError Julien Grall
2019-09-27 11:35 ` Volodymyr Babchuk
2019-10-01 19:58 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 03/10] xen/arm: traps: Rework entry/exit from the guest path Julien Grall
2019-09-27 11:45 ` Volodymyr Babchuk
2019-09-27 12:16 ` Julien Grall
2019-09-27 12:27 ` Volodymyr Babchuk
2019-09-27 12:44 ` Julien Grall
2019-09-27 12:49 ` Volodymyr Babchuk
2019-10-01 20:12 ` Stefano Stabellini
2019-10-01 21:06 ` Julien Grall
2019-10-02 0:16 ` Stefano Stabellini
2019-10-02 9:12 ` Julien Grall
2019-10-02 12:41 ` Stefano Stabellini
2019-10-02 12:47 ` Julien Grall
2019-10-02 22:26 ` Stefano Stabellini
2019-10-03 10:24 ` Julien Grall
2019-10-03 17:48 ` Stefano Stabellini
2019-10-03 17:53 ` Julien Grall
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 04/10] xen/arm: Ensure the SSBD workaround is re-enabled right after exiting a guest Julien Grall
2019-09-27 11:56 ` Volodymyr Babchuk
2019-09-27 12:22 ` Julien Grall
2019-09-27 12:39 ` Volodymyr Babchuk
2019-09-27 13:16 ` Julien Grall
2019-09-27 13:33 ` Volodymyr Babchuk
2019-09-27 14:11 ` Julien Grall
2019-09-27 14:21 ` Volodymyr Babchuk
2019-09-27 16:24 ` Julien Grall
2019-09-27 17:58 ` Volodymyr Babchuk [this message]
2019-09-27 20:31 ` Julien Grall
2019-09-30 12:14 ` Volodymyr Babchuk
2019-09-30 12:15 ` Julien Grall
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 05/10] xen/arm: alternative: Remove unused parameter for alternative_if_not_cap Julien Grall
2019-09-27 11:50 ` Volodymyr Babchuk
2019-10-01 20:55 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 06/10] xen/arm: Move ARCH_PATCH_INSN_SIZE out of the header livepatch.h Julien Grall
2019-09-27 11:51 ` Volodymyr Babchuk
2019-09-27 11:59 ` Ross Lagerwall
2019-10-01 20:57 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 07/10] xen/arm: Allow insn.h to be called from assembly Julien Grall
2019-09-27 11:52 ` Volodymyr Babchuk
2019-10-01 21:00 ` Stefano Stabellini
2019-10-21 16:43 ` Julien Grall
2019-10-21 17:23 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 08/10] xen/arm: alternative: add auto-nop infrastructure Julien Grall
2019-09-27 15:34 ` Volodymyr Babchuk
2019-10-01 22:08 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 09/10] xen/arm: asm: Replace use of ALTERNATIVE with alternative_if Julien Grall
2019-09-27 12:11 ` Volodymyr Babchuk
2019-09-27 12:34 ` Julien Grall
2019-09-27 12:46 ` Volodymyr Babchuk
2019-10-01 22:19 ` Stefano Stabellini
2019-10-01 22:44 ` Julien Grall
2019-10-01 22:52 ` Stefano Stabellini
2019-09-26 18:38 ` [Xen-devel] [PATCH RFC for-4.13 10/10] xen/arm64: entry: Ensure the guest state is synced when receiving a vSError Julien Grall
2019-09-27 15:30 ` Volodymyr Babchuk
2019-10-02 0:50 ` Stefano Stabellini
2019-09-27 4:17 ` [Xen-devel] [PATCH RFC for-4.13 00/10] xen/arm: XSA-201 and XSA-263 fixes Jürgen Groß
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sgoh4o4f.fsf@epam.com \
--to=volodymyr_babchuk@epam.com \
--cc=Andrii_Anisov@epam.com \
--cc=andre.przywara@arm.com \
--cc=andrii.anisov@gmail.com \
--cc=julien.grall@arm.com \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.