• Michael S. Tsirkin's avatar
    asm-generic: implement virt_xxx memory barriers · 6a65d263
    Michael S. Tsirkin authored
    Guests running within virtual machines might be affected by SMP effects even if
    the guest itself is compiled without SMP support.  This is an artifact of
    interfacing with an SMP host while running an UP kernel.  Using mandatory
    barriers for this use-case would be possible but is often suboptimal.
    
    In particular, virtio uses a bunch of confusing ifdefs to work around
    this, while xen just uses the mandatory barriers.
    
    To better handle this case, low-level virt_mb() etc macros are made available.
    These are implemented trivially using the low-level __smp_xxx macros,
    the purpose of these wrappers is to annotate those specific cases.
    
    These have the same effect as smp_mb() etc when SMP is enabled, but generate
    identical code for SMP and non-SMP systems. For example, virtual machine guests
    should use virt_mb() rather than smp_mb() when synchronizing against a
    (possibly SMP) host.
    Suggested-by: default avatarDavid Miller <davem@davemloft.net>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    6a65d263
barrier.h 4.39 KB