[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <59423BFE.3060405@parkeon.com>
Date: Thu, 15 Jun 2017 09:49:18 +0200
From: Martin Fuzzey <mfuzzey@...keon.com>
To: "Luis R. Rodriguez" <mcgrof@...nel.org>, gregkh@...uxfoundation.org
Cc: ebiederm@...ssion.com, dmitry.torokhov@...il.com, wagi@...om.org,
dwmw2@...radead.org, jewalt@...innovations.com, rafal@...ecki.pl,
arend.vanspriel@...adcom.com, rjw@...ysocki.net,
yi1.li@...ux.intel.com, atull@...nel.org, moritz.fischer@...us.com,
pmladek@...e.com, johannes.berg@...el.com,
emmanuel.grumbach@...el.com, luciano.coelho@...el.com,
kvalo@...eaurora.org, luto@...nel.org,
torvalds@...ux-foundation.org, keescook@...omium.org,
takahiro.akashi@...aro.org, dhowells@...hat.com, pjones@...hat.com,
hdegoede@...hat.com, alan@...ux.intel.com, tytso@....edu,
mtk.manpages@...il.com, paul.gortmaker@...driver.com,
mtosatti@...hat.com, mawilcox@...rosoft.com,
linux-api@...r.kernel.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 0/4] firmware: fix fallback mechanism by ignoring SIGCHLD
On 15/06/17 00:20, Luis R. Rodriguez wrote:
> Martin reported an issue with Android where if sysfs is used to trigger a sync
> fw load which *relies* on the fallback mechanism and a background job completes
> while the trigger is ongoing in the foreground it will immediately fail the fw
> request. The issue can be observed in this simple test script using the
> test_firmware driver:
>
> set -e
> /etc/init.d/udev stop
> modprobe test_firmware
> DIR=/sys/devices/virtual/misc/test_firmware
> echo 10 >/sys/class/firmware/timeout
> sleep 2 &
> echo -n "does-not-exist-file.bin" > "$DIR"/trigger_request
>
> The background sleep triggers the SIGCHLD signal and we fail the firmware
> request on the fallback mechanism. This was due to the type of wait used which
> ...
>
> Note that although I *feared* this might implicate any use of non-killable waits
> on other system calls, such as finit_module(), initial testing confirms this to
> not be the case. For instance replacing the echo with modprobe on a module
> which does the same on init does not present the same issues. This could be due
> to the special SA_RESTART flag case on write() as noted above and sysfs...
> however, its not perfectly clear yet to me.
>
>
The reason the problem does not occur with modprobe is that in that case
the processes triggering the firmware load
(modprobe) and the process dying (sleep) are *siblings* rather than
father and child.
So the modprobe process does *not* receive a SIGCHLD when its' *brother*
dies.
echo is a shell built-in so the process triggering the firmware load
(the shell) and the process dying (sleep) *are* father and child.
Martin
Powered by blists - more mailing lists