Commit bdcdb4e7 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: line6: Use guard() for spin locks



Clean up the code using guard() for spin locks.

Merely code refactoring, and no behavior change.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent d20cce1c
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -145,8 +145,6 @@ void line6_capture_check_period(struct snd_line6_pcm *line6pcm, int length)
static void audio_in_callback(struct urb *urb)
{
	int i, index, length = 0, shutdown = 0;
	unsigned long flags;

	struct snd_line6_pcm *line6pcm = (struct snd_line6_pcm *)urb->context;

	line6pcm->in.last_frame = urb->start_frame;
@@ -156,7 +154,7 @@ static void audio_in_callback(struct urb *urb)
		if (urb == line6pcm->in.urbs[index])
			break;

	spin_lock_irqsave(&line6pcm->in.lock, flags);
	guard(spinlock_irqsave)(&line6pcm->in.lock);

	for (i = 0; i < LINE6_ISO_PACKETS; ++i) {
		char *fbuf;
@@ -211,8 +209,6 @@ static void audio_in_callback(struct urb *urb)
		    test_bit(LINE6_STREAM_PCM, &line6pcm->in.running))
			line6_capture_check_period(line6pcm, length);
	}

	spin_unlock_irqrestore(&line6pcm->in.lock, flags);
}

/* open capture callback */
+15 −16
Original line number Diff line number Diff line
@@ -286,14 +286,13 @@ static void line6_data_received(struct urb *urb)
{
	struct usb_line6 *line6 = (struct usb_line6 *)urb->context;
	struct midi_buffer *mb = &line6->line6midi->midibuf_in;
	unsigned long flags;
	int done;

	if (urb->status == -ESHUTDOWN)
		return;

	if (line6->properties->capabilities & LINE6_CAP_CONTROL_MIDI) {
		spin_lock_irqsave(&line6->line6midi->lock, flags);
		scoped_guard(spinlock_irqsave, &line6->line6midi->lock) {
			done =
				line6_midibuf_write(mb, urb->transfer_buffer, urb->actual_length);

@@ -302,15 +301,15 @@ static void line6_data_received(struct urb *urb)
				dev_dbg(line6->ifcdev, "%d %d buffer overflow - message skipped\n",
					done, urb->actual_length);
			}
		spin_unlock_irqrestore(&line6->line6midi->lock, flags);
		}

		for (;;) {
			spin_lock_irqsave(&line6->line6midi->lock, flags);
			scoped_guard(spinlock_irqsave, &line6->line6midi->lock) {
				done =
					line6_midibuf_read(mb, line6->buffer_message,
							   LINE6_MIDI_MESSAGE_MAXLEN,
							   LINE6_MIDIBUF_READ_RX);
			spin_unlock_irqrestore(&line6->line6midi->lock, flags);
			}

			if (done <= 0)
				break;
+2 −8
Original line number Diff line number Diff line
@@ -72,7 +72,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream)
*/
static void midi_sent(struct urb *urb)
{
	unsigned long flags;
	int status;
	int num;
	struct usb_line6 *line6 = (struct usb_line6 *)urb->context;
@@ -84,7 +83,7 @@ static void midi_sent(struct urb *urb)
	if (status == -ESHUTDOWN)
		return;

	spin_lock_irqsave(&line6->line6midi->lock, flags);
	guard(spinlock_irqsave)(&line6->line6midi->lock);
	num = --line6->line6midi->num_active_send_urbs;

	if (num == 0) {
@@ -94,8 +93,6 @@ static void midi_sent(struct urb *urb)

	if (num == 0)
		wake_up(&line6->line6midi->send_wait);

	spin_unlock_irqrestore(&line6->line6midi->lock, flags);
}

/*
@@ -158,17 +155,14 @@ static int line6_midi_output_close(struct snd_rawmidi_substream *substream)
static void line6_midi_output_trigger(struct snd_rawmidi_substream *substream,
				      int up)
{
	unsigned long flags;
	struct usb_line6 *line6 =
	    line6_rawmidi_substream_midi(substream)->line6;

	line6->line6midi->substream_transmit = substream;
	spin_lock_irqsave(&line6->line6midi->lock, flags);
	guard(spinlock_irqsave)(&line6->line6midi->lock);

	if (line6->line6midi->num_active_send_urbs == 0)
		line6_midi_transmit(substream);

	spin_unlock_irqrestore(&line6->line6midi->lock, flags);
}

static void line6_midi_output_drain(struct snd_rawmidi_substream *substream)
+12 −15
Original line number Diff line number Diff line
@@ -182,11 +182,10 @@ static void line6_buffer_release(struct snd_line6_pcm *line6pcm,
static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,
			      int type)
{
	unsigned long flags;
	struct line6_pcm_stream *pstr = get_stream(line6pcm, direction);
	int ret = 0;

	spin_lock_irqsave(&pstr->lock, flags);
	guard(spinlock_irqsave)(&pstr->lock);
	if (!test_and_set_bit(type, &pstr->running) &&
	    !(pstr->active_urbs || pstr->unlink_urbs)) {
		pstr->count = 0;
@@ -199,7 +198,6 @@ static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,

	if (ret < 0)
		clear_bit(type, &pstr->running);
	spin_unlock_irqrestore(&pstr->lock, flags);
	return ret;
}

@@ -207,22 +205,21 @@ static int line6_stream_start(struct snd_line6_pcm *line6pcm, int direction,
static void line6_stream_stop(struct snd_line6_pcm *line6pcm, int direction,
			  int type)
{
	unsigned long flags;
	struct line6_pcm_stream *pstr = get_stream(line6pcm, direction);

	spin_lock_irqsave(&pstr->lock, flags);
	scoped_guard(spinlock_irqsave, &pstr->lock) {
		clear_bit(type, &pstr->running);
	if (!pstr->running) {
		spin_unlock_irqrestore(&pstr->lock, flags);
		if (pstr->running)
			return;
	}

	line6_unlink_audio_urbs(line6pcm, pstr);
		spin_lock_irqsave(&pstr->lock, flags);
	if (direction == SNDRV_PCM_STREAM_CAPTURE) {
		guard(spinlock_irqsave)(&pstr->lock);
		line6pcm->prev_fbuf = NULL;
		line6pcm->prev_fsize = 0;
	}
}
	spin_unlock_irqrestore(&pstr->lock, flags);
}

/* common PCM trigger callback */
int snd_line6_trigger(struct snd_pcm_substream *substream, int cmd)