1. 29 Sep, 2022 1 commit
    • Marc Zyngier's avatar
      KVM: Use acquire/release semantics when accessing dirty ring GFN state · 8929bc96
      Marc Zyngier authored
      The current implementation of the dirty ring has an implicit requirement
      that stores to the dirty ring from userspace must be:
      
      - be ordered with one another
      
      - visible from another CPU executing a ring reset
      
      While these implicit requirements work well for x86 (and any other
      TSO-like architecture), they do not work for more relaxed architectures
      such as arm64 where stores to different addresses can be freely
      reordered, and loads from these addresses not observing writes from
      another CPU unless the required barriers (or acquire/release semantics)
      are used.
      
      In order to start fixing this, upgrade the ring reset accesses:
      
      - the kvm_dirty_gfn_harvested() helper now uses acquire semantics
        so it is ordered after all previous writes, including that from
        userspace
      
      - the kvm_dirty_gfn_set_invalid() helper now uses release semantics
        so that the next_slot and next_offset reads don't drift past
        the entry invalidation
      
      This is only a partial fix as the userspace side also need upgrading.
      Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
      Reviewed-by: default avatarGavin Shan <gshan@redhat.com>
      Reviewed-by: default avatarPeter Xu <peterx@redhat.com>
      Link: https://lore.kernel.org/r/20220926145120.27974-2-maz@kernel.org
      8929bc96
  2. 28 Aug, 2022 25 commits
  3. 27 Aug, 2022 14 commits