Thread (20 messages) 20 messages, 4 authors, 2010-03-22

Re: [PATCH v2 1/6] hid: new driver for PicoLCD device

From: Jiri Kosina <hidden>
Date: 2010-03-22 08:54:21
Also in: linux-input, lkml

On Sun, 21 Mar 2010, Bruno Prémont wrote:
quoted
quoted
+	}
+	data->status |= PICOLCD_BUSY;
+	data->pending = work;
+	for (i = k = 0; i < report->maxfield; i++)
+		for (j = 0; j < report->field[i]->report_count; j++) {
+			hid_set_field(report->field[i], j, k < size ? raw_data[k] : 0);
+			k++;
+		}
+	usbhid_submit_report(data->hdev, report, USB_DIR_OUT);
+	complete_all(&data->ready);
+	INIT_COMPLETION(data->ready);
Umm, what does this do, exactly?
It wakes up anyone waiting on the completion and then resets the completion
as otherwise any future attempt to wait on it would succeed immediately.

The complete_all() instead of just complete() comes from the reset() function.
I can probably reduce it here.

Will check this combined with your mutex suggestion above.
I am afraid this code is racy as is. You can't be sure that whoever has 
been waiting on the completion has been notified already between 
complete_all() and INIT_COMPLETION(), can you?

Thanks for the driver!

-- 
Jiri Kosina
SUSE Labs, Novell Inc.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help