Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/sound/pcm/sound.h
Show First 20 Lines • Show All 513 Lines • ▼ Show 20 Lines | #define PCM_GIANT_EXIT(x) do { \ | ||||
if (_pcm_giant != 0) { \ | if (_pcm_giant != 0) { \ | ||||
if (mtx_owned(&Giant) == 0) \ | if (mtx_owned(&Giant) == 0) \ | ||||
panic("%s(%d): [GIANT EXIT] Giant not owned!", \ | panic("%s(%d): [GIANT EXIT] Giant not owned!", \ | ||||
__func__, __LINE__); \ | __func__, __LINE__); \ | ||||
_pcm_giant = 0; \ | _pcm_giant = 0; \ | ||||
mtx_unlock(&Giant); \ | mtx_unlock(&Giant); \ | ||||
} \ | } \ | ||||
} while (0) | } while (0) | ||||
#else /* SND_DIAGNOSTIC */ | #else /* !SND_DIAGNOSTIC */ | ||||
#define PCM_WAIT(x) do { \ | #define PCM_WAIT(x) do { \ | ||||
PCM_LOCKASSERT(x); \ | PCM_LOCKASSERT(x); \ | ||||
while ((x)->flags & SD_F_BUSY) \ | while ((x)->flags & SD_F_BUSY) \ | ||||
cv_wait(&(x)->cv, (x)->lock); \ | cv_wait(&(x)->cv, (x)->lock); \ | ||||
} while (0) | } while (0) | ||||
#define PCM_ACQUIRE(x) do { \ | #define PCM_ACQUIRE(x) do { \ | ||||
PCM_LOCKASSERT(x); \ | PCM_LOCKASSERT(x); \ | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | KASSERT(!((x)->flags & SD_F_MPSAFE) || \ | ||||
("%s(%d): [GIANT EXIT] MPSAFE Giant?", \ | ("%s(%d): [GIANT EXIT] MPSAFE Giant?", \ | ||||
__func__, __LINE__)); \ | __func__, __LINE__)); \ | ||||
if (_pcm_giant != 0) { \ | if (_pcm_giant != 0) { \ | ||||
mtx_assert(&Giant, MA_OWNED); \ | mtx_assert(&Giant, MA_OWNED); \ | ||||
_pcm_giant = 0; \ | _pcm_giant = 0; \ | ||||
mtx_unlock(&Giant); \ | mtx_unlock(&Giant); \ | ||||
} \ | } \ | ||||
} while (0) | } while (0) | ||||
#endif /* !SND_DIAGNOSTIC */ | #endif /* SND_DIAGNOSTIC */ | ||||
#define PCM_GIANT_LEAVE(x) \ | #define PCM_GIANT_LEAVE(x) \ | ||||
PCM_GIANT_EXIT(x); \ | PCM_GIANT_EXIT(x); \ | ||||
} while (0) | } while (0) | ||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
#endif /* _OS_H_ */ | #endif /* _OS_H_ */ |