On Sun, Oct 23, 2011 at 03:45:14PM +0000, KY Srinivasan wrote: > > > + > > > + t = wait_for_completion_timeout(&input_dev->wait_event, 5*HZ); > > > + if (t == 0) { > > > + ret = -ETIMEDOUT; > > > + goto cleanup; > > > + } > > > + > > > + response = &input_dev->protocol_resp; > > > + > > > + if (!response->response.approved) { > > > + pr_err("synthhid protocol request failed (version %d)", > > > + SYNTHHID_INPUT_VERSION); > > > + ret = -ENODEV; > > > + goto cleanup; > > > + } > > > + > > > + t = wait_for_completion_timeout(&input_dev->wait_event, 5*HZ); > > > > We just completed the wait for this completion, why are we waiting on > > the same completion again? > > In response to our initial query, we expect the host to respond back with two > distinct pieces of information; we wait for both these responses. I think you misunderstand how completion works in Linux. IIRC about Windows events they are different ;) You can not signal completion several times and then expect to wait corrsponding number of times. Once you signal completion is it, well, complete. > > > > > > + if (t == 0) { > > > + ret = -ETIMEDOUT; > > > + goto cleanup; > > > + } > > > + > > > + /* > > > + * We should have gotten the device attr, hid desc and report > > > + * desc at this point > > > + */ > > > + if (input_dev->dev_info_status) > > > + ret = -ENOMEM; > > > > -ENOMEM seems wrong. > > > There are many failures here and not being able to allocate memory is the > primary one; and so I chose to capture that. Any chance that these failures have their own exit paths? Thanks. -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html