On Mon, Oct 21, 2013 at 5:35 AM, Prarit Bhargava <pra...@redhat.com> wrote: > If request_firmware_nowait() is called with uevent == NULL, the firmware > completion is never marked complete resulting in a hang in the process. > > If uevent is undefined, that means we're not waiting on anything and the > process should just clean up and complete. While we're at it, add a > debug dev_dbg() to indicate that the FW has not been found. > > Signed-off-by: Prarit Bhargava <pra...@redhat.com> > Cc: x...@kernel.org > Cc: herrmann.der.u...@googlemail.com > Cc: ming....@canonical.com > Cc: tig...@aivazian.fsnet.co.uk > --- > drivers/base/firmware_class.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c > index 10a4467..95778dc 100644 > --- a/drivers/base/firmware_class.c > +++ b/drivers/base/firmware_class.c > @@ -335,7 +335,8 @@ static bool fw_get_filesystem_firmware(struct device > *device, > set_bit(FW_STATUS_DONE, &buf->status); > complete_all(&buf->completion); > mutex_unlock(&fw_lock); > - } > + } else > + dev_dbg(device, "firmware: %s not found\n", buf->fw_id); > > return success; > } > @@ -886,6 +887,9 @@ static int _request_firmware_load(struct firmware_priv > *fw_priv, bool uevent, > schedule_delayed_work(&fw_priv->timeout_work, > timeout); > > kobject_uevent(&fw_priv->dev.kobj, KOBJ_ADD); > + } else { > + /* if there is no uevent then just cleanup */ > + schedule_delayed_work(&fw_priv->timeout_work, 0); > }
This may not a good idea and might break current NOHOTPLUG users, and how can you make sure the user space application can complete the request during the timeout time? Thanks, -- Ming Lei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/