Skip to contentSkip to conversation

removing sleep_on in

PATCH In review Domen Puncer 2 participants 5 messages Mar 20, 2004 – Mar 21, 2004

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 removing sleep_on in

Hi.

This is my first patch on sleep_on, so i'd really like some comments.

Is wait_event(wq, 0) fine, if we are just waiting for wake_up? Second one is just waiting 3 seconds, so i removed wq.

Domen

drivers/usb/media/usbvideo.c +3 -4
@@ -225,7 +225,7 @@
 static void RingQueue_InterruptibleSleepOn(struct RingQueue *rq)
 {
 	assert(rq != NULL);
-	interruptible_sleep_on(&rq->wqh);
+	wait_event_interruptible(&rq->wqh, 0);
 }
 
 void RingQueue_WakeUpInterruptible(struct RingQueue *rq)
@@ -705,10 +705,9 @@
 /* Debugging aid */
 void usbvideo_SayAndWait(const char *what)
 {
-	wait_queue_head_t wq;
-	init_waitqueue_head(&wq);
 	info("Say: %s", what);
-	interruptible_sleep_on_timeout (&wq, HZ*3); /* Timeout */
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ*3);
 }
 
 EXPORT_SYMBOL(usbvideo_SayAndWait);

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

#2 lore raw
In reply to Domen Puncer
Quoted 7 lines · Greg KH
Quoted 3 lines · Domen Puncer

Hi.

This is my first patch on sleep_on, so i'd really like some comments.

Please cc the linux-usb-devel list, they will help you out too (hopefully...)

Comments and patch again, for the linux-usb-devel people...

Is wait_event(wq, 0) fine, if we are just waiting for wake_up? Second one is just waiting 3 seconds, so i removed wq.

Domen

drivers/usb/media/usbvideo.c +3 -4
@@ -225,7 +225,7 @@
 static void RingQueue_InterruptibleSleepOn(struct RingQueue *rq)
 {
 	assert(rq != NULL);
-	interruptible_sleep_on(&rq->wqh);
+	wait_event_interruptible(&rq->wqh, 0);
 }
 
 void RingQueue_WakeUpInterruptible(struct RingQueue *rq)
@@ -705,10 +705,9 @@
 /* Debugging aid */
 void usbvideo_SayAndWait(const char *what)
 {
-	wait_queue_head_t wq;
-	init_waitqueue_head(&wq);
 	info("Say: %s", what);
-	interruptible_sleep_on_timeout (&wq, HZ*3); /* Timeout */
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ*3);
 }
 
 EXPORT_SYMBOL(usbvideo_SayAndWait);

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

#3 lore raw
In reply to Domen Puncer
Quoted 6 lines · Domen Puncer
Quoted 5 lines · Greg KH
Quoted 3 lines · Domen Puncer

Hi.

This is my first patch on sleep_on, so i'd really like some comments.

Quoted 7 lines
Quoted 2 lines

Please cc the linux-usb-devel list, they will help you out too (hopefully...)

Comments and patch again, for the linux-usb-devel people...

Is wait_event(wq, 0) fine, if we are just waiting for wake_up? Second one is just waiting 3 seconds, so i removed wq.

I'm really sorry for posting this again.
Forget to compile test it, and missed an error. Bad Domen

drivers/usb/media/usbvideo.c +3 -4
@@ -225,7 +225,7 @@
 static void RingQueue_InterruptibleSleepOn(struct RingQueue *rq)
 {
 	assert(rq != NULL);
-	interruptible_sleep_on(&rq->wqh);
+	wait_event_interruptible(rq->wqh, 0);
 }
 
 void RingQueue_WakeUpInterruptible(struct RingQueue *rq)
@@ -705,10 +705,9 @@
 /* Debugging aid */
 void usbvideo_SayAndWait(const char *what)
 {
-	wait_queue_head_t wq;
-	init_waitqueue_head(&wq);
 	info("Say: %s", what);
-	interruptible_sleep_on_timeout (&wq, HZ*3); /* Timeout */
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ*3);
 }
 
 EXPORT_SYMBOL(usbvideo_SayAndWait);

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

#4 lore raw

PATCH 1/1 removing sleep_on from

In reply to Domen Puncer

Hi.

Only compile tested. Any feedback welcome.

drivers/usb/serial/whiteheat.c +17 -5
@@ -1132,6 +1132,7 @@ static int firm_send_command (struct usb
 	__u8 *transfer_buffer;
 	int retval = 0;
 	unsigned long flags;
+	DECLARE_WAITQUEUE(wait, current);
 
 	dbg("%s - command %d", __FUNCTION__, command);
 
@@ -1146,7 +1147,6 @@ static int firm_send_command (struct usb
 	command_port->write_urb->transfer_buffer_length = datasize + 1;
 	command_port->write_urb->dev = port->serial->dev;
 	retval = usb_submit_urb (command_port->write_urb, GFP_KERNEL);
-	spin_unlock_irqrestore(&command_info->lock, flags);
 	if (retval) {
 		dbg("%s - submit urb failed", __FUNCTION__);
 		goto exit;
@@ -1154,11 +1154,23 @@ static int firm_send_command (struct usb
 
 	/* wait for the command to complete */
 	timeout = COMMAND_TIMEOUT;
-	while (timeout && (command_info->command_finished = FALSE)) {
-		timeout = interruptible_sleep_on_timeout (&command_info->wait_command, timeout);
+	add_wait_queue(&command_info->wait_command, &wait);
+	for (;;) {
+		set_task_state(current, TASK_INTERRUPTIBLE);
+		if (command_info->command_finished != FALSE)
+			break;
+		spin_unlock_irqrestore(&command_info->lock, flags);
+		timeout = schedule_timeout(timeout);
+		if (signal_pending(current)) {
+			remove_wait_queue(&command_info->wait_command, &wait);
+			return -EINTR;
+		}
+		spin_lock_irqsave(&command_info->lock, flags);
+		if (!timeout)
+			break;
 	}
-
-	spin_lock_irqsave(&command_info->lock, flags);
+	set_task_state(current, TASK_RUNNING);
+	remove_wait_queue(&command_info->wait_command, &wait);
 
 	if (command_info->command_finished = FALSE) {
 		dbg("%s - command timed out.", __FUNCTION__);

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