All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Wagner <daniel.wagner@bmw-carit.de>
To: "Luis R. Rodriguez" <mcgrof@kernel.org>,
	Daniel Wagner <wagi@monom.org>, Takashi Iwai <tiwai@suse.de>
Cc: <linux-kernel@vger.kernel.org>, Ming Lei <ming.lei@canonical.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH v4 2/4] firmware: encapsulate firmware loading status
Date: Thu, 8 Sep 2016 10:05:19 +0200	[thread overview]
Message-ID: <1aae9991-0fc2-3da7-b60b-001548f36daa@bmw-carit.de> (raw)
In-Reply-To: <20160908013940.GA3296@wotan.suse.de>

On 09/08/2016 03:39 AM, Luis R. Rodriguez wrote:
> On Wed, Sep 07, 2016 at 10:45:06AM +0200, Daniel Wagner wrote:
>> From: Daniel Wagner <daniel.wagner@bmw-carit.de>
>>  		timeout = MAX_JIFFY_OFFSET;
>>  	}
>>
>> -	retval = wait_for_completion_interruptible_timeout(&buf->completion,
>> -			timeout);
>> +	retval = fw_status_wait_timeout(&buf->fw_st, timeout);
>
> Note this is one of the users for fw_status_wait_timeout(). This makes sense
> for this fw_status_wait_timeout, as its umh related.
>
>>  	if (retval == -ERESTARTSYS || !retval) {
>>  		mutex_lock(&fw_lock);
>>  		fw_load_abort(fw_priv);
>> @@ -965,7 +1022,7 @@ static int _request_firmware_load(struct firmware_priv *fw_priv,
>>  		retval = 0;
>>  	}
>>
>> -	if (is_fw_load_aborted(buf))
>> +	if (fw_status_is_aborted(&buf->fw_st))
>>  		retval = -EAGAIN;
>>  	else if (buf->is_paged_buf && !buf->data)
>>  		retval = -ENOMEM;
>> @@ -1040,29 +1097,25 @@ fw_load_from_user_helper(struct firmware *firmware, const char *name,
>>  	return -ENOENT;
>>  }
>>
>> -/* No abort during direct loading */
>> -#define is_fw_load_aborted(buf) false
>> -
>>  #ifdef CONFIG_PM_SLEEP
>>  static inline void kill_requests_without_uevent(void) { }
>>  #endif
>>
>>  #endif /* CONFIG_FW_LOADER_USER_HELPER */
>>
>> -
>>  /* wait until the shared firmware_buf becomes ready (or error) */
>>  static int sync_cached_firmware_buf(struct firmware_buf *buf)
>>  {
>>  	int ret = 0;
>>
>>  	mutex_lock(&fw_lock);
>> -	while (!test_bit(FW_STATUS_DONE, &buf->status)) {
>> -		if (is_fw_load_aborted(buf)) {
>> +	while (!fw_status_is_done(&buf->fw_st)) {
>> +		if (fw_status_is_aborted(&buf->fw_st)) {
>>  			ret = -ENOENT;
>>  			break;
>>  		}
>>  		mutex_unlock(&fw_lock);
>> -		ret = wait_for_completion_interruptible(&buf->completion);
>> +		ret = fw_status_wait_timeout(&buf->fw_st, 0);
>
> Now this one -- I am not sure of. That it, it is not clear why we would
> need fw_status_wait_timeout() here, and the code history does not reveal
> that either. Obviously this is a no-op for for non UMH kenrels *but*
> even for UMH -- why do we need it?


This while loop was originally a goto loop:

1f2b79599ee8 ("firmware loader: always let firmware_buf own the pages 
buffer")

I don't think the code doesn't do what it was indented to do. The reason 
is that calling complete_all() the wait_for_completion() will not block 
again until it has 'eaten up' the done counter. That is around UMAX/2 
loops. So there is an reinit_completion() missing in this case.

Before the above commit, the completion was used to wait inside
_request_firmware_load() till the UML had done its job. The answer for 
your question is probably in 1f2b79599ee8 ("firmware loader: always let 
firmware_buf own the pages buffer").

/me starts reading.

cheers,
daniel

  reply	other threads:[~2016-09-08  8:05 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-07  8:45 [PATCH v4 0/4] firmware: encapsulate firmware loading status Daniel Wagner
2016-09-07  8:45 ` [PATCH v4 1/4] firmware: Move umh locking code into fw_load_from_user_helper() Daniel Wagner
2016-09-07 23:33   ` Luis R. Rodriguez
2016-09-08 12:41     ` Daniel Wagner
2016-09-08 14:55       ` Luis R. Rodriguez
2016-09-08 15:37   ` Ming Lei
2016-09-08 20:11     ` Luis R. Rodriguez
2016-09-09  1:22       ` Ming Lei
     [not found]         ` <CAB=NE6XK9g9muQ8p5+VaVGt2t0E_4K0wiavacQGqt_S4PyN28A@mail.gmail.com>
2016-09-09  4:19           ` Ming Lei
2016-09-09 22:10             ` Luis R. Rodriguez
     [not found]               ` <efba9730-d3bc-1fd4-2511-e509a4c60971@bmw-carit.de>
2016-09-15 15:43                 ` Luis R. Rodriguez
2016-09-07  8:45 ` [PATCH v4 2/4] firmware: encapsulate firmware loading status Daniel Wagner
2016-09-08  1:39   ` Luis R. Rodriguez
2016-09-08  8:05     ` Daniel Wagner [this message]
2016-09-08  9:45       ` Daniel Wagner
2016-09-08 11:26   ` Ming Lei
2016-09-08 12:26     ` Daniel Wagner
2016-09-08 15:49       ` Ming Lei
2016-09-09 11:43         ` Daniel Wagner
2016-09-08 12:32   ` Daniel Wagner
2016-09-07  8:45 ` [PATCH v4 3/4] firmware: Drop bit ops in favor of simple state machine Daniel Wagner
2016-09-08  1:45   ` Luis R. Rodriguez
2016-09-08 12:44     ` Daniel Wagner
2016-09-07  8:45 ` [PATCH v4 4/4] firmware: Do not use fw_lock for fw_status protection Daniel Wagner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1aae9991-0fc2-3da7-b60b-001548f36daa@bmw-carit.de \
    --to=daniel.wagner@bmw-carit.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=ming.lei@canonical.com \
    --cc=tiwai@suse.de \
    --cc=wagi@monom.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.