ALSA: snd-usb-caiaq: only warn once on streaming errors
Daniel Mack [Wed, 18 Mar 2009 10:03:53 +0000 (11:03 +0100)]
Limit the number of printed warnings to one in case of streaming errors.
printk() happens to be expensive, especially in code called as often as
here.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

sound/usb/caiaq/caiaq-audio.c
sound/usb/caiaq/caiaq-device.h

index fc6d571..577b112 100644 (file)
@@ -114,6 +114,7 @@ static int stream_start(struct snd_usb_caiaqdev *dev)
        dev->output_panic = 0;
        dev->first_packet = 1;
        dev->streaming = 1;
+       dev->warned = 0;
 
        for (i = 0; i < N_URBS; i++) {
                ret = usb_submit_urb(dev->data_urbs_in[i], GFP_ATOMIC);
@@ -406,10 +407,11 @@ static void read_in_urb(struct snd_usb_caiaqdev *dev,
                break;
        }
 
-       if (dev->input_panic || dev->output_panic) {
+       if ((dev->input_panic || dev->output_panic) && !dev->warned) {
                debug("streaming error detected %s %s\n", 
                                dev->input_panic ? "(input)" : "",
                                dev->output_panic ? "(output)" : "");
+               dev->warned = 1;
        }
 }
 
index 0560c32..098b194 100644 (file)
@@ -89,7 +89,7 @@ struct snd_usb_caiaqdev {
        int audio_out_buf_pos[MAX_STREAMS];
        int period_in_count[MAX_STREAMS];
        int period_out_count[MAX_STREAMS];
-       int input_panic, output_panic;
+       int input_panic, output_panic, warned;
        char *audio_in_buf, *audio_out_buf;
        unsigned int samplerates;