All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jack Stone <jwjstone@fastmail.fm>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Dave Jones <davej@redhat.com>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	Larry Finger <Larry.Finger@lwfinger.net>,
	Chaoming Li <chaoming_li@realsil.com.cn>,
	"John W. Linville" <linville@tuxdriver.com>,
	Matthew Garrett <mjg@redhat.com>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	USB list <linux-usb@vger.kernel.org>,
	Linux Wireless List <linux-wireless@vger.kernel.org>
Subject: Re: loading firmware while usermodehelper disabled.
Date: Sun, 01 Jan 2012 22:45:15 +0000	[thread overview]
Message-ID: <4F00E1FB.9060507@fastmail.fm> (raw)
In-Reply-To: <CA+55aFyqm4FbW=--7U4ULk1EBb6RLP0sRgtokODBYnZNiJXWew@mail.gmail.com>

On 31/12/11 00:22, Linus Torvalds wrote:
> It's also possible that we should blame the firmware code, which is
> expressly written to encourage these kinds of bugs. It may be that i
> tshould be the firmware code that has a "get_firmware()" +
> "put_firmware()" model, and it should cache the firmware explicitly if
> the config supports suspend, so that a firmware read at resume time
> would actually work. The whole "request_firmware()" interface really
> is very prone to these kinds of bugs.

How about these semantics for get_firmware / put_firmware:

get_firmware -> checks for a cached copy of the firmware and returns
that if it exists otherwise calls _get_firmware (i.e.
_request_firmware). Either way we get a refcount to the firmware blob.
This requires adding 3 members to struct firmware: the refcount, the
name of the firmware (see @name in request_firmware) and a list head to
cache with. We could also add and async version of this to match
request_firmware_nowait.

put_firmware -> Removes a refcount from the firmware and frees if there
are no more users.

put_firmware is called when we are sure that we no longer need to reload
the firmware for that device - device close time for most drivers.

USB is a more difficult case as devices can change ID but the firmware
blob still needs to be associated with them. I don't know USB at all so
I have no idea if we can track this. Some PCI devices may also suffer
the same problem.

Hope this is useful,

Jack

  parent reply	other threads:[~2012-01-01 22:45 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-30 23:54 loading firmware while usermodehelper disabled Dave Jones
2011-12-31  0:22 ` Linus Torvalds
2011-12-31  0:40   ` Matthew Garrett
2011-12-31 15:33     ` Alan Stern
2011-12-31 15:59       ` Oliver Neukum
2012-01-01  2:21         ` Alan Stern
2012-01-01 12:22           ` Oliver Neukum
2012-01-01 16:17             ` Alan Stern
2012-01-01 16:25               ` Michael Büsch
2012-01-01 20:30               ` Linus Torvalds
2012-01-01 21:27                 ` Oliver Neukum
2012-01-01 21:39                   ` Michael Büsch
2012-01-02  3:33                     ` Matthew Garrett
2012-01-02  7:56                     ` Oliver Neukum
2012-01-02  4:17                 ` Marek Vasut
2012-01-02  5:35                   ` Gábor Stefanik
2012-01-02  8:38                     ` Marek Vasut
2012-01-02 16:54                 ` Alan Stern
2012-01-02 20:41                   ` Jack Stone
2012-01-02 20:48                     ` Linus Torvalds
2012-01-02 20:55                       ` Jack Stone
2012-01-02 21:00                         ` Linus Torvalds
2012-01-02 21:09                           ` Jack Stone
2012-01-02 21:23                             ` Linus Torvalds
2012-01-02 21:31                               ` Jack Stone
2012-01-02 21:52                                 ` Marek Vasut
2012-01-02 21:57                                   ` Jack Stone
2012-01-02 22:31                                     ` Marek Vasut
2012-01-02 23:25                                       ` Jack Stone
2012-01-03  0:31                                         ` Marek Vasut
2012-01-03  0:44                                           ` Jack Stone
2012-01-03  0:58                                             ` Alan Cox
2012-01-03  7:17                                               ` Marek Vasut
2012-01-03  7:41                                             ` Oliver Neukum
2012-01-03  0:35                                 ` Alan Cox
2012-01-03  0:50                           ` Alan Cox
2012-01-02 21:19                       ` Matthew Garrett
2012-01-02 21:26                         ` Jack Stone
2012-01-03  0:42                           ` Alan Cox
2012-01-03 11:57                             ` Oliver Neukum
2012-01-03 12:19                               ` Jack Stone
2012-01-03 13:20                                 ` Alan Cox
2012-01-03 13:30                                   ` Oliver Neukum
2012-01-03 13:36                                     ` Alan Cox
2012-01-02 21:27                         ` Linus Torvalds
2012-01-02 21:50                           ` Matthew Garrett
2012-01-02 22:03                             ` Linus Torvalds
2012-01-02 22:12                               ` Matthew Garrett
2012-01-02 22:19                                 ` Linus Torvalds
2012-01-02 22:29                                   ` Matthew Garrett
2012-01-02 22:46                                     ` Linus Torvalds
2012-01-02 23:00                                       ` Matthew Garrett
2012-01-02 23:31                                         ` Jack Stone
2012-01-03  0:13                                           ` Matthew Garrett
2012-01-03  0:20                                             ` Alan Cox
2012-01-03  0:37                                               ` Matthew Garrett
2012-01-03  0:22                                             ` Jack Stone
2012-01-03  0:31                                               ` Alan Cox
2012-01-03  0:41                                                 ` Jack Stone
2012-01-03  0:38                                               ` Matthew Garrett
2012-01-03  0:47                                                 ` Alan Cox
2012-01-03  0:18                                           ` Alan Cox
2012-01-03  8:26                                             ` Ingo Molnar
2012-01-03  2:45                             ` Alan Stern
2012-01-03  3:25                               ` Matthew Garrett
2012-01-03  5:53                                 ` Linus Torvalds
2012-01-03 11:50                                   ` Oliver Neukum
2012-01-03 15:16                                     ` Alan Stern
2012-01-03 12:24                                   ` Matthew Garrett
2012-01-03 16:29                                     ` Linus Torvalds
2012-01-03 15:09                                 ` Alan Stern
2012-01-03  9:16                             ` Alexander E. Patrakov
2012-01-03  9:16                               ` Alexander E. Patrakov
2012-01-03  9:24                               ` david
2012-01-03 13:43                               ` Alan Cox
2012-01-03 14:12                               ` Bernd Petrovitsch
2012-01-03  0:00                           ` Alan Cox
2012-01-02 23:50                       ` Alan Cox
2012-01-02 23:53                     ` Alan Cox
2011-12-31 16:27       ` Matthew Garrett
2011-12-31 14:20   ` Martin Schleier
2011-12-31 18:39   ` Marek Vasut
2012-01-01  9:48     ` Oliver Neukum
2012-01-01  9:54       ` Marek Vasut
2012-01-01 12:28         ` Oliver Neukum
2012-01-01 16:32           ` Marek Vasut
2012-01-01 17:06             ` Marek Vasut
2012-01-01 20:39             ` Alan Cox
2012-01-01 20:50               ` Michael Büsch
2012-01-02  3:24                 ` Marek Vasut
2012-01-02  3:29               ` Marek Vasut
2012-01-01  3:49   ` Larry Finger
2012-01-01 22:45   ` Jack Stone [this message]
  -- strict thread matches above, loose matches on Subject: below --
2011-12-31 15:01 drahemmaps
2011-12-31 19:29 ` Linus Torvalds
2011-12-31 20:15   ` Matthew Garrett
2011-12-31 20:26     ` Linus Torvalds

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=4F00E1FB.9060507@fastmail.fm \
    --to=jwjstone@fastmail.fm \
    --cc=Larry.Finger@lwfinger.net \
    --cc=chaoming_li@realsil.com.cn \
    --cc=davej@redhat.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=mjg@redhat.com \
    --cc=torvalds@linux-foundation.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.