Thread (12 messages) 12 messages, 3 authors, 2021-06-11

Re: [PATCH v4 2/6] x86/sev-es: Disable IRQs while GHCB is active

From: Joerg Roedel <joro@8bytes.org>
Date: 2021-06-11 14:20:43
Also in: kvm, lkml, virtualization

On Fri, Jun 11, 2021 at 04:05:15PM +0200, Borislav Petkov wrote:
On Thu, Jun 10, 2021 at 11:11:37AM +0200, Joerg Roedel wrote:
Why not simply "sandwich" them:

	local_irq_save()
	sev_es_get_ghcb()

	...blablabla

	sev_es_put_ghcb()
	local_irq_restore();

in every call site?
I am not a fan of this, because its easily forgotten to add
local_irq_save()/local_irq_restore() calls around those. Yes, we can add
irqs_disabled() assertions to the functions, but we can as well just
disable/enable IRQs in them. Only the previous value of EFLAGS.IF needs
to be carried from one function to the other.
Hmm, so why aren't you accessing/setting data->ghcb_active and
data->backup_ghcb_active safely using cmpxchg() if this path can be
interrupted by an NMI?
Using cmpxchg is not necessary here. It is all per-cpu data, so local to
the current cpu. If an NMI happens anywhere in sev_es_get_ghcb() it can
still use the GHCB, because the interrupted #VC handler will not start
writing to it before sev_es_get_ghcb() returned.

Problems only come up when one path starts writing to the GHCB, but that
happens long after it is marked active.

Regards,

	Joerg
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help