| /* | 
 |  * 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 |