#define guest_bitop(name) \
static inline void guest_##name(struct domain *d, int nr, volatile void *p) \
{ \
+ perfc_incr(atomics_guest); \
+ \
if ( name##_timeout(nr, p, this_cpu(guest_safe_atomic_max)) ) \
return; \
\
+ perfc_incr(atomics_guest_paused); \
+ \
domain_pause_nosync(d); \
name(nr, p); \
domain_unpause(d); \
bool succeed; \
int oldbit; \
\
+ perfc_incr(atomics_guest); \
+ \
succeed = name##_timeout(nr, p, &oldbit, \
this_cpu(guest_safe_atomic_max)); \
if ( succeed ) \
return oldbit; \
\
+ perfc_incr(atomics_guest_paused); \
+ \
domain_pause_nosync(d); \
oldbit = name(nr, p); \
domain_unpause(d); \
{
unsigned long oldval = old;
+ perfc_incr(atomics_guest);
+
if ( __cmpxchg_mb_timeout(ptr, &oldval, new, size,
this_cpu(guest_safe_atomic_max)) )
return oldval;
+ perfc_incr(atomics_guest_paused);
+
domain_pause_nosync(d);
oldval = __cmpxchg_mb(ptr, old, new, size);
domain_unpause(d);
PERFCOUNTER(virt_timer_irqs, "Virtual timer interrupts")
PERFCOUNTER(maintenance_irqs, "Maintenance interrupts")
+PERFCOUNTER(atomics_guest, "atomics: guest access")
+PERFCOUNTER(atomics_guest_paused, "atomics: guest paused")
+
/*#endif*/ /* __XEN_PERFC_DEFN_H__ */
/*