Skip to contentSkip to conversation

ieee1394/video1394: replace

PATCH New Nishanth Aravamudan 1 participant 1 message Mar 3, 2005 Kernel janitors

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ieee1394/video1394: replace

Quoted 9 lines · Jody McIntyre
Quoted 5 lines · Nishanth Aravamudan
Quoted 1 line · Jody McIntyre

Please add a Signed-off-by: line.

Will do, I just wanted to get you a patch to test first. If it works, I'll send an "official" one :)

It's been over a week and nobody's reported any problems with your patch. Please send an "official" one and I will apply it.

Description: Use wait_event_interruptible() instead of the deprecated interruptible_sleep_on(). Add a helper function to make the condition for wait_event_interruptible() sane and lock-safe. Patch is compile-tested.

drivers/ieee1394/video1394.c +16 -17
@@ -699,6 +699,17 @@ static void initialize_dma_it_ctx(struct
 	reg_write(ohci, OHCI1394_IsoXmitIntMaskSet, 1<<d->ctx);
 }
 
+static inline unsigned video1394_buffer_state(struct dma_iso_ctx *d,
+					      unsigned int buffer)
+{
+	unsigned long flags;
+	unsigned int ret;
+	spin_lock_irqsave(&d->lock, flags);
+	ret = d->buffer_status[buffer];
+	spin_unlock_irqrestore(&d->lock, flags);
+	return ret;
+}
+
 static int __video1394_ioctl(struct file *file,
 			     unsigned int cmd, unsigned long arg)
 {
@@ -952,24 +963,12 @@ static int __video1394_ioctl(struct file
 			    return -EINTR;
 			}
 
-#if 1
-			while (d->buffer_status[v.buffer]!=
-			      VIDEO1394_BUFFER_READY) {
-				spin_unlock_irqrestore(&d->lock, flags);
-				interruptible_sleep_on(&d->waitq);
-				spin_lock_irqsave(&d->lock, flags);
-				if (signal_pending(current)) {
-					spin_unlock_irqrestore(&d->lock,flags);
-					return -EINTR;
-				}
-			}
-#else
-			if (wait_event_interruptible(d->waitq,
-						     d->buffer_status[v.buffer]
-						     == VIDEO1394_BUFFER_READY)
-			    == -ERESTARTSYS)
+			spin_unlock_irqrestore(&d->lock, flags);
+			wait_event_interruptible(d->waitq,
+					video1394_buffer_state(d, v.buffer) == VIDEO1394_BUFFER_READY);
+			if (signal_pending(current))
 				return -EINTR;
-#endif
+			spin_lock_irqsave(&d->lock, flags);
 			d->buffer_status[v.buffer]=VIDEO1394_BUFFER_FREE;
 			break;
 		default:

_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors