static int wait_for_avail_min(struct snd_pcm_substream *substream,
snd_pcm_uframes_t *availp)
{
struct snd_pcm_runtime *runtime = substream->runtime;
int is_playback = substream->stream == SNDRV_PCM_STREAM_PLAYBACK;
wait_queue_t wait; //定义一个等待队列
int err = 0;
snd_pcm_uframes_t avail = 0;
long tout;
init_waitqueue_entry(&wait, current); //动态初始化一个等待队列入口项,将其和当前进程关联起来,以便唤醒当前进程
add_wait_queue(&runtime->tsleep, &wait); //向等待队列头中添加等待队列
for (;;) {
if (signal_pending(current)) {
// 检查当前进程是否有待处理的信号,返回不为0表示有信号需要处理。
err = -ERESTARTSYS;<