/* * Internal memory barrier helpers for QEMU (target agnostic) * * Copyright (c) 2003 Fabrice Bellard * * SPDX-License-Identifier: LGPL-2.1-or-later */ #ifndef ACCEL_TCG_BACKEND_LDST_H #define ACCEL_TCG_BACKEND_LDST_H #include "tcg-target-mo.h" /** * tcg_req_mo: * @guest_mo: Guest default memory order * @type: TCGBar * * Filter @type to the barrier that is required for the guest * memory ordering vs the host memory ordering. A non-zero * result indicates that some barrier is required. */ #define tcg_req_mo(guest_mo, type) \ ((type) & guest_mo & ~TCG_TARGET_DEFAULT_MO) /** * cpu_req_mo: * @cpu: CPUState * @type: TCGBar * * If tcg_req_mo indicates a barrier for @type is required * for the guest memory model, issue a host memory barrier. */ #define cpu_req_mo(cpu, type) \ do { \ if (tcg_req_mo(cpu->cc->tcg_ops->guest_default_memory_order, type)) { \ smp_mb(); \ } \ } while (0) #endif