Re: [PATCH] firmware: Allow release-specific firmware dir

Previous thread: [PATCH] Fix memmap=exactmap boot argument by Prarit Bhargava on Tuesday, September 9, 2008 - 6:56 am. (2 messages)

Next thread: OOPS: getting an ACPI interrupt while in an ACPI interrupt hangs my box by Holger Schurig on Tuesday, September 9, 2008 - 7:05 am. (3 messages)
From: Jeff Mahoney
Date: Tuesday, September 9, 2008 - 7:15 am

Every kernel package trying to provide files under /lib/firmware runs
 into problems really quickly with multiple kernels installed, especially
 with respect to distribution package tracking of the files.

 This patch moves them to /lib/firmware/$KERNELRELEASE. udev v127's
 firmware.sh looks there first before falling back to /lib/firmware.

Signed-off-by: Jeff Mahoney <jeffm@suse.com>
---
 Makefile |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/Makefile
+++ b/Makefile
@@ -1025,7 +1025,7 @@ depend dep:
 
 # ---------------------------------------------------------------------------
 # Firmware install
-INSTALL_FW_PATH=$(INSTALL_MOD_PATH)/lib/firmware
+INSTALL_FW_PATH=$(INSTALL_MOD_PATH)/lib/firmware/$(KERNELRELEASE)
 export INSTALL_FW_PATH
 
 PHONY += firmware_install

-- 
Jeff Mahoney
SUSE Labs
--

From: Andrew Morton
Date: Wednesday, September 10, 2008 - 3:35 pm

On Tue, 09 Sep 2008 10:15:35 -0400


--

From: Greg KH
Date: Thursday, September 11, 2008 - 6:37 am

Since the firmware target got added to the kernel, so it's a 2.6.27
thing, no need for -stable here, older kernels do not have this problem.

thanks,

greg k-h
--

From: David Woodhouse
Date: Wednesday, September 10, 2008 - 4:01 pm

NAK.

This isn't compatible with the version of udev that people actually have
installed, today. And it's also the _wrong_ thing to do.

Firmware really _isn't_ version-specific. If the firmware changes in
some incompatible way, then the filename given to request_firmware() has
to change too. Think of it like an soname on a library.

Besides, incompatible changes are fairly uncommon; firmware changes
rarely change the host<->device ABI in a way which breaks older drivers.
And that's _especially_ true for the firmwares which were present in the
kernel tree, which is all that you're moving around with this patch.

You shouldn't need more than one firmware package installed at a time --
if you are trying to do so, then that's a bug in your packaging.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: David Miller
Date: Wednesday, September 10, 2008 - 4:05 pm

From: David Woodhouse <dwmw2@infradead.org>

Tell that to every Debian and Debian derived system on the planet.

To my knowledge, it is only fedora and possibly one or two other dists
that put the firmware files in a unary /lib/firmware location, rather
than a versioned /lib/firmware/$KERNELRELASE one.


--

From: David Woodhouse
Date: Wednesday, September 10, 2008 - 4:15 pm

So every time they upgrade from one kernel to the next, do they
automatically run b43-fwcutter again to make a new copy of the firmware,
for the new kernel?

Or if they use QLogic SCSI cards, do they download a new (but identical)
version of the firmware each time they upgrade their kernel?

It sounds like a daft arrangement to me -- although of course it's
possible for the packager to do whatever they like, by overriding
$(INSTALL_FW_PATH) in their package build.

It's definitely not something we should be doing upstream though.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Andrew Morton
Date: Wednesday, September 10, 2008 - 4:24 pm

On Wed, 10 Sep 2008 16:15:11 -0700

It all seems a bit academic.  Breaking pre-v127 udev is a showstopper.

A suitable approach might be to copy the files to both /lib/firmware
and to /lib/firmware/$KERNELRELEASE, and to stop copying the files to
/lib/firmware in, oh, 2018 or so..

--

From: Theodore Tso
Date: Wednesday, September 10, 2008 - 7:55 pm

Or make it be a KCONFIG build option, so that people who are building
kernels using the distribution-specific kernel packaging tool can pass
in whatever is right for their distribution....

							- Ted
--

From: David Miller
Date: Wednesday, September 10, 2008 - 4:24 pm

From: David Woodhouse <dwmw2@infradead.org>

So you think it's ok that every Debian user has to learn this
magic incantation just to use current kernels?

I don't think it's nice to break things like this on people,
especially such a large group.  Getting this stuff to work is hard
enough, and we're just putting yet another barrier into the situation
and that can only mean less testers and contributors.

I do know several people who aren't testing and contributing because
the whole firmware shakeup is so bolixed and they really are exasperated
after spending hours trying to get it to work.

This costs people's time, which is valuable.

I hate to say it, but this kind of attitude seems to be pervasive
every time some negative ramification of the firmware changes shows
up.
--

From: David Woodhouse
Date: Wednesday, September 10, 2008 - 4:36 pm

They don't. Debian uses firmware from /lib/firmware if it doesn't exist
in /lib/firmware/$(version) -- so they can install to the normal
location quite happily, and it should work just fine.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: David Miller
Date: Wednesday, September 10, 2008 - 4:42 pm

From: David Woodhouse <dwmw2@infradead.org>

That's not what I've heard from people more clueful from me.

For example, Herbert Xu (CC:'d) told me that because of this directory
usage, his wireless card couldn't find it's firmware with current
kernels.
--

From: Herbert Xu
Date: Wednesday, September 10, 2008 - 5:23 pm

Actually my complaint is still theoretical.

It's about firmware that's closely tied to the driver and where a
driver may not operate at all with a firmware of the wrong version.
There are wireless drivers which have version dependencies, e.g.,
newer ipw2200 drivers often require newer firmware which may not
be backwards compatible.

So I don't want to be in a situation where I install a new kernel,
find that its wireless driver doesn't function correctly for
whatever reason (which has happened to me previously at an airport),
and then not be able to boot back into my old kernel to fix it
because the firmware has now been overwritten.

I appreciate the thought on saving disk space.  However, I think
the safest default is to install firmware (at least those from the
kernel) into a version-specific directory.  Alternatively we should
ensure that all firmware have version strings embedded in their
names (e.g., ipw2200 versions their firmware so they would be OK),
and that they're kept up-to-date whenever the firmware changes.

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--

From: David Woodhouse
Date: Wednesday, September 10, 2008 - 5:39 pm

Absolutely -- nobody should ever find themselves in that situation.
If a firmware changes in an incompatible way, its filename needs to

Even safer would be to have content-addressed firmware. Instead of
requesting it by filename, you request it by its md5sum. That way,
you're _guaranteed_ to have precisely what you expected.

But I think that's a bad idea too. As a general rule firmware isn't, and
shouldn't be, tied intimately to one particular version of the kernel.

That's what we are doing already, as you say -- and what we should
always be doing.

And remember, ipw2200 isn't a particularly good example, because it's a
relatively recent driver and thus has always had its firmware shipped
_separately_ from the kernel.

All we're talking about here is the behaviour for the handful of older
drivers which I've recently dragged into this century by converting them
to use request_firmware(). Those drivers, by virtue of their age, are
mostly quite unlikely to receive _any_ kind of firmware update --
especially an update which changes their ABI.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 12:44 am

it is that the Debian maintainer screwed this up. Upstream never
promoted kernel versioned directories for the firmware. I had a long
discussion with Dave about it at OLS and using the kernel version is
just plain wrong. The driver maintainers should version the firmware if
they break it in an API incompatible way.

To shed some light into the problem with Debian/Ubuntu. They install the
firmware in /lib/firmware/`uname -r`/ and everytime they bump their ABI
number, they have to install all the firmware again. This is just
braindead. Their udev script actually checks /lib/firmware first and
then the kernel versioned directory. So that is just fine.

Problem comes when installing let say 2.6.27 since then the firmware
will be looked up in /lib/firmware/ and /lib/firmware/2.6.27/ and
actually it will not be found. Since it is in /lib/firmware/2.6.26-xx/
or something similar.

So having the kernel install everything in /lib/firmware works just fine
with every distro. However looking for firmware that is not shipped with
the kernel, we have a problem since Debian/Ubuntu just not installs it
in the right directory. And there is nothing the kernel can do about it
since it will not touch firmware it doesn't ship. The distro has to fix
their firmware or the users have to place a copy in /lib/firmware/ where
it actually should have been in the first place.

Regards

Marcel


--

From: Jeff Mahoney
Date: Thursday, September 11, 2008 - 1:13 am

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


They "should," but is that happening now? Out of all the firmware blobs
installed with 2.6.27-rcX, only the edgeport drier actually versions
them - and they're versioned because the driver requires different

Well, what we're doing is including the firmware blobs inside the kernel
packages. So, yeah, we install all the firmware blobs again, but they're
installed with the modules that we're installing all over again anyway.
All the firmware blobs currently included in 2.6.27-rcs total about
540k, so the wasted disk space is largely negligible when compared to
the size of installing an additional kernel and module set.

We check /lib/firmware/$(uname -r) /lib/firmware

In what case? After you install a new kernel and then reboot? You have

It works just fine until the user wants to install an additional, newer,
kernel and the blob has changed but the filename hasn't.

- -Jeff


- --
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iEYEARECAAYFAkjI0z8ACgkQLPWxlyuTD7LPkQCeOGxTOsUivMmjabTrkHd7ssJ3
OBIAnidEMgduuQ4WCXN8JSEhJ4Gij7Iv
=3Lng
-----END PGP SIGNATURE-----
--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:09 am

let me repeat this, if a driver depends on newer firmware version, then
it should make sure that the firmware itself is versioned. Everything
else will break eventually.

The Intel wireless drivers started to version their firmware a long time
ago. That is the way to go. How will a user tell different firmwares

Checking /lib/firmware/$(uname -r) is not the issue. The issue is that
when installing a self-compiled kernel, the firmware is not present

If the firmware is not in /lib/firmware (especially external firmware)
it will not be found and the module will be useless if it depends on
that firmware. And the biggest part of the firmware is not distributed
with the kernel because of GPL restrictions. So whatever we decide for
the kernel right now helps nothing if the user needs external firmware
for their devices.

Just take the Intel wireless drivers as an example. If I boot my own
kernel, I have to make sure I either copied or linked them from the
distro directory to /lib/firmware or downloaded them. Whatever the

That is the whole point and Dave and I discussed this deeply. If the
blob changes in an incompatible way or if a driver needs a newer
firmware, the firmware filename should change.

Regards

Marcel


--

From: Faidon Liambotis
Date: Thursday, September 11, 2008 - 1:29 am

I could not find any packages in Debian that contain a
/lib/firmware/$(KERNELRELEASE) directory.

Perhaps this is just an Ubuntu issue?

Regards,
Faidon

--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:12 am

I looked through my Debian boxes and you are right. Sorry for this. I
was under the assumption Ubuntu took the Debian package, but it seems
that they even modified that one. So this issue is than distros derived
from Ubuntu and _not_ Debian (unless udev is unmodified).

Regards

Marcel


--

From: Frans Pop
Date: Thursday, September 11, 2008 - 1:58 am

WRONG! NOT TRUE! FUD!

Debian does no such thing! It may be that Ubuntu does this, but that does 
NOT mean that Debian does too.

Feel free to examine any of the packages here and check where they install 
their firmware files:
http://packages.debian.org/search?suite=sid&searchon=names&keywords=firmware

Examples:
http://packages.debian.org/sid/all/firmware-qlogic/filelist

This is a ridiculously simplified view of the issue. Why can't you at 
least acknowledge that people were faced with a real problem _without_ 
proper guidance, support or transition path from their upstream source 
and made their best effort to solve that issue.

Note that this thread was started by someone from Suse, not Debian or 
Ubuntu.

Cheers,
FJP
--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:16 am

I apologize for this. You are absolute right. Debian does the correct

That is just plain naive on the package maintainer side. If the package
maintainer has to solve problems, then contacting upstream should be the
first thing to do. I might be wrong here, but I don't recall any
requests like this on LKML or linux-hotplug. They just did it their way
without contacting either kernel guys or udev people.

Regards

Marcel


--

From: Frans Pop
Date: Thursday, September 11, 2008 - 1:43 am

I have to correct David M. here: *official* Debian packages _do_ have 
firmware in /lib/firmware and not in versioned subdirs.

The problem for Debian users is NOT official Debian kernel packages.
The problem is for people, like me, building their own kernels directly 
from upstream source *in the form of Debian packages*. More about this 
later.

It is also about the firmware change breaking *existing* tools used to 
this and *that* has always been the main argument from people like David 

David, you clearly fail to see the problem and it seems to me that you 
don't know the first thing about package management.

First let me get something off my chest, and sorry for shouting:
                 !!! THIS IS NOT ABOUT DEBIAN !!!

This has never been about Debian. It is about package management and 
backwards compatibility with existing tools be it package creation, 
package management or udev.

Let me start with a statement about package management.
    Software packages should not overwrite files installed by other
    software packages. Any package management system that allows a
    package to do that without complaining loudly is fundamentally
    broken.

This is a hard requirement in Debian. It is also the main reason why there 
are systems running Debian that have been installed 10 years ago, have 
been upgraded with each new Debian release (i.e. have never been 
reinstalled from scratch) and are still "clean" (without any file or 
library conflicts). In most cases Debian even allows you to _downgrade_ 
packages without any problem.

This is the "raison the existance" for distributions: to ensure software 
from different sources can be co-installed without conflicts. It also 
creates some limitations how packages are to be put together.

Problem description
===================
Premise: different kernel versions should be co-installable.

Consequence of this that different kernel versions will be different 
packages, not versions of the same ...
From: Frans Pop
Date: Thursday, September 11, 2008 - 2:52 am

As mentioned in my previous mail Debian currently uses 2) for its kernel 
packages up to and including 2.6.26. I expect the Debian kernel team to 
also use 2) for 2.6.27, but that's in the future. Debian is currently 
concentrating on 2.6.26 as that's the kernel targeted for the soon-to-be- 
released Lenny release.

From what I understand from this list (I'm a Debian person and don't 
really follow Ubuntu), Ubuntu seems to have chosen 1).

There are pros and cons to both these solutions and given the different 
philosophies of Debian and Ubuntu those do help explain the different 
choices.

Solution 1:
a) keeps kernel, modules and firmware firmly together
b) ensures there will never be mismatches, even if a firmware file "ABI"
   changes without being properly versioned
c) makes system installation simple: firmware is always just "there"

Solution 2:
a) naturally allows firmware to be split between "free" and "non-free"
b) places a burden on the end-user to install/upgrade the firmware he
   needs separately from the kernel
c) makes system installation more complex as the right additional firmware
   package(s) need to be retrieved and installed
d) will break installed systems on upgrades (unless special measures are
   taken): users may need to install additional firmware packages on a
   kernel upgrade to keep a driver working

Ubuntu has a "things should just work" philosophy. Choosing 1) keeps 
things simple from a user PoV and is a logical choice from that 
perspective.

Debian has strict licencing rules and has never shirked from placing some 
responsibility in the hands of users. Especially 2a) makes 2) the more 
natural choice for Debian.


Note that with 2) you cannot just create one big "linux-firmware" package. 
You will need to package all firmware separately which means that users 
will need to somehow select the specific firmware packages they need for 
their hardware.
The reason for this is the possibility that a driver and its firmware may 
be ...
From: David Woodhouse
Date: Thursday, September 11, 2008 - 7:50 am

(separate firmware package)

This is what we're doing in Fedora, and what I think makes most sense.

At the moment, Fedora's package is still taken from the kernel source --
but fairly shortly, we'll move to building it from the linux-firmware
repository on kernel.org. That repository contains everything that's in
the kernel tree, and more -- now that we have it completely separate,
more companies are willing to allow us to include their firmware. We've
already rounded up some which were previously separate, and we'll
shortly be adding more firmware files which weren't previously available

Indeed. So it allows the 'free software or nothing' nutters to have
their own replacement firmware package with none of the nasty stuff they

Not really. The new kernel package can just require the firmware

It's a simple dependency, handled just like dependencies normally are --

I have yet to see reports of it breaking Fedora. You upgrade the kernel,
the firmware package is automatically installed to satisfy the
dependency. And it just works.

Really, people seem to be imagining problems where they don't exist. I
don't want to just dismiss real problems -- but I don't _see_ real
problems either. Just people like Dave screaming "you broke it for real
users, like Herbert"... and Herbert saying "er, no you didn't really."
So I have to take it with a pinch of salt.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Frans Pop
Date: Thursday, September 11, 2008 - 8:24 am

Did you read the second part of the mail explaining why having a 
single "firmware" package is not a good idea?
Also, if some firmware is assigned to non-free in Debian the kernel 



You have completely ignored my point in my other mail about 'make deb-pkg' 
being demonstrably broken as it results in packages that are guaranteed 
to produce file conflicts.
You have completely ignored my point about other existing packaging 
utilities being similarly broken.

Let me repeat again:
            THIS IS NOT ABOUT THE OFFICIAL DEBIAN PACKAGES

The Debian kernel team _will_ find a way to make this work properly. As 
far as separate firmware packages and upgrading is an issue the Debian 
project will deal with it, maybe using a userland "firmware-installer" 
tool or even if it is just by documenting the need to install firmware 
packages in the Release Notes.

This is about users, LIKE ME, being unable *NOW* to build correct custom 
kernel packages from upstream source *using existing tools*.
I am confronted with the broken packages as a result of your changes 
*every time I build/install a kernel* currently.

As you can see in other mail I'm currently working around it by using an 
extra option when installing the packages, but it's an option I should 
not have to use! And I'll probably change to just not building any 
drivers that need firmware at all as luckily none of my hardware needs 
in-tree firmware.

Sorry for all the emphasis, but it looks like you need it.
Your comments about how everything works for official Fedora package are 
completely irrelevant. Please try to look a bit further than your own 
narrow use-case.

I'm seriously disappointed with your reply.

Cheers,
FJP
--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 8:31 am

Yes, but it was nonsense, so I ignored it. "The reason for this is the
possibility that a driver and its firmware may be dropped from the
upstream kernel source." That doesn't happen very often, and you
_certainly_ don't need to immediately drop the firmware if it does.

It's another reason why it's better to be shipping from the external
linux-firmware repository at
git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git
-- because if a driver _does_ go away, that repository would continue to
carry the firmware files. But since that's such an infrequent
occurrence, there's no massive rush. Using the firmware in the kernel
tree is fine for now.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Frans Pop
Date: Thursday, September 11, 2008 - 8:49 am

Fine. Again you are concentrating on the bright and shiny future and 
magically wishing into existence tools to support the new situation.

Just keep on ignoring current issues. As I've said, I can work around 
them. However, I seriously expect others will have stopped their kernel 
testing and I also expect "real users" to run into problems building 
custom kernels.

I think I've made my point and will (try to) keep out of the discussion. 
It's way too much like discussing religion anyway: people who "believe" 
are rarely able to listen properly.
--

From: Linus Torvalds
Date: Thursday, September 11, 2008 - 8:57 am

Aren't _you_ the one who are ignoring current issues?

The fact is, _currently_ everybody looks in /lib/firmware. The fact is, 
most people don't want millions of copies of the firmware (one copy for 
each kernel they compile - think about those of us who compile kernels 
every day).

I actually like a release-specific firmware directory, but I think it's 
the *vendor* kernel that should do it, not the normal kernel. The _vendor_ 
should put its firmware files in some vendor-specific place, and then add 
that to the end of the firmware loading path. 

Notice? The vendor can do that. The generic kernel can NOT - since the 
generic kernel cannot impact the firmware loading paths of all the various 
distros. 

So all of the noise in this whole discussion has been totally inane and 
idiotic. 

		Linus
--

From: Frans Pop
Date: Thursday, September 11, 2008 - 9:32 am

I don't think so.
_The_ current issue for me is that I can no longer build Debian kernel 
packages using 'make deb-pkg', which is part of _your_ tree, and install 

Right, I totally agree. I did about 40 kernel builds the past two days.
(Yes, I know, there are people doing way more builds than that.)
I regularly have 5 kernels installed simultaneously, and sometimes more if 

Hey, I'm NOT propagating versioned dirs in this thread! I've only 
mentioned them as one of the two options and explained why I think it's a 
valid choice in some scenario's.
I've also explained that I don't think Debian will go that way, but that 
is irrelevant. I basically don't care what Debian does for its official 

Please explain what is idiotic about mentioning that 'make deb-pkg' 
produces broken packages solely because of the separate firmware and that 
that is *not* something that is easily solvable because of the way 
package management works?
Please explain why it is idiotic to say that having a compatibility option 
that would allow me to build firmware _inside_ modules, just like we 
always used to, would solve that problem?

That has nothing to do with vendors or distros. It has to do with me (and 
others like me, as a kernel tester, having to live with broken tools NOW.

I like 'make dep-pkg' because it very quickly produces a solid, *single* 
Debian package I can install and use for kernel testing. I'd like to keep 
using that as I have been, but the separation of firmware essentially 
kills my current workflow.
--

From: Linus Torvalds
Date: Thursday, September 11, 2008 - 10:49 am

Well, complain to the right people then. The patch that started this all 
is wrong. The people you are complaining to are not the rigth people. We 
can't do anything about debian packaging.

		Linus
--

From: Frans Pop
Date: Thursday, September 11, 2008 - 11:24 am

I totally agree with that.

What I would still like to see instead is the *option* to just include 
firmware inside modules, where it's always been.

Either that, or stop building firmware as part of the kernel build process 

This isn't about Debian packaging or Debian tools. I'm not using a Debian 
tool [1]! Why is that so hard to understand?

I'm using an option in *your* kernel tree that produces a broken Debian 
package. Please have a look in scripts/package/builddeb.
That offers the option to just do 'make deb-pkg' to build a kernel package 
in Debian package format.

The other part of my complaint is that this simple example proves that the 
firmware split *has* broken existing tools while you and others have been 
maintaining that everything would continue to work fine "because everyone 
has been using /lib/firmware for ages". The reason things have broken 
because we never used to generate files as a basically inseparable part 
of a kernel build before.


[1] I abandoned make-kpkg about a year ago because it was terminally 
insane and broken. AFAIK it still does not support the unified x86 dir...
--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 9:01 am

No, the 'new' situation is just like the situation we've had for years
for most recent drivers anyway.

You've pulled this magic requirement that we split up firmware into
separate packages out of a hat, and it's nonsense. Please go away and
stop spreading FUD. If there _are_ real issues to deal with, I'd like to
deal with them. I believe I already have. But we'd be better off without
the pointless noise that some people are creating.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: David Newall
Date: Wednesday, September 10, 2008 - 9:00 pm

And a damned nuisance it is, too.  Firmware *really* isn't kernel
version-specific, and I'd like Debian to "get" that.
--

From: Faidon Liambotis
Date: Wednesday, September 10, 2008 - 11:35 pm

[not speaking on behalf of the project, the kernel team or the
respective maintainers]

Apparently and afaik you are misinformed:

$ dpkg -L firmware-bnx2 (or [1])
...
/lib/firmware/bnx2-06-4.0.5.fw
/lib/firmware/bnx2-09-4.0.5.fw
...

$ dpkg -L firmware-iwlwifi (or [2])
...
/lib/firmware/iwlwifi-3945-1.ucode
/lib/firmware/iwlwifi-4965-1.ucode
/lib/firmware/iwlwifi-4965-2.ucode
...

$ dpkg -L firmware-qlogic (or [3])
...
/lib/firmware/ql2100_fw.bin
/lib/firmware/ql2200_fw.bin
/lib/firmware/ql2300_fw.bin
/lib/firmware/ql2322_fw.bin
/lib/firmware/ql2400_fw.bin
/lib/firmware/ql2500_fw.bin
...

etc. for the other firmware packages[4].

Regards,
Faidon

1: http://packages.debian.org/sid/all/firmware-bnx2/filelist
2: http://packages.debian.org/sid/all/firmware-iwlwifi/filelist
3: http://packages.debian.org/sid/all/firmware-qlogic/filelist
4: http://packages.debian.org/firmware
--

From: Jeff Mahoney
Date: Thursday, September 11, 2008 - 12:15 am

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


Well that's the thing. These are specific firmware packages that exist
outside of those created by the kernel. My original patch wasn't
proposing using /lib/firmware/$KERNELRELEASE for *all* firmware blobs,
just those that are generated and installed by the kernel build process.

The problem occurs when you have multiple versions of the kernel
installed and they all want to put firmware blobs into /lib/firmware.
The firmware blobs created by the kernel aren't versioned liked those in
the examples you've provided, so you end up with a bunch of blobs with
potentially different contents, all with the same names.

I'm not suggesting killing /lib/firmware-located blobs at all. That's
where you look once you discover that /lib/firmware/$KERNELRELEASE
doesn't have the blob you're looking for. That's where firmware packages
like the examples below would still place their files. I see no reason
to change that. If the blobs are versioned so that a particular name
always contains the same contents, that's fine too. What we can't have
is files in the same location with different contents.

In the end, though, Andrew's right. We can't go breaking udev prior to
127 with this.



- --
Jeff Mahoney
SUSE Labs
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.9 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iEYEARECAAYFAkjIxYAACgkQLPWxlyuTD7LuSgCgmAOte+y8dU1TWODKPNwRnrCK
KO8An1VnOh+KvsfHrgtXZ1H/xSdCYuVL
=3/a7
-----END PGP SIGNATURE-----
--

From: Theodore Tso
Date: Thursday, September 11, 2008 - 6:38 am

But it's OK to break various distribution's kernel packaging tools?

    	       	     	     		    	   	     - Ted
--

From: Jeff Mahoney
Date: Thursday, September 11, 2008 - 7:36 am

[Empty message]
From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:29 am

no they don't depend on a kernel version. The firmware depends on a
specific driver version (and hardware in some cases). The kernel version


Making symlinks is just a workaround. It will not solve anything in the
long term.

Getting all the firmware out of the kernel and getting it into a
separate package is the solution. And to avoid any breakage or problems
the firmware files itself have to be versioned. Firmware like every
other software has its version numbers already. It is like any other API
and once you break it in an incompatible why, you should increase the
major version number. The kernel version has nothing to do with it.

Regards

Marcel


--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:20 am

that is different. It is the version of the firmware. It doesn't depend
on the version of the Linux kernel. Yes, there is a tiny dependency on
the kernel, but that comes from the driver requirements and we would
have MODULE_FIRMWARE to clearly indicate which drivers needs which
firmware.

Tying it to the kernel version is wrong. It depends on the version of
the driver.

Regards

Marcel


--

From: Thierry Vignaud
Date: Thursday, September 11, 2008 - 4:29 am

We (Mandriva Linux) do too.
Why other distro cannot package firmware separatly for all their kernel
flavors?

Firmware are not version-specific.
--

From: Greg KH
Date: Thursday, September 11, 2008 - 6:40 am

Yes it is, when it is bundled with the kernel source tree itself.

Why do people not realize this?

This is a real problem for distros, and for anyone who wants to have
multiple kernel versions on a single machine.  Jeff's patch fixes this.

thanks,

greg k-h
--

From: Marcel Holtmann
Date: Thursday, September 11, 2008 - 9:39 am

once you move the firmware into its own package built from a separate
source tree (and not the kernel) this is no longer a problem.

Nobody ever made the claim that the firmware depends on the kernel
version. It might depend on a specific version of the firmware, but that
is different from the kernel version. If you break the firmware or if a
driver requires a specific firmware version it should indicate this.

And yes, the in-kernel firmware versions should follow here at some
point, since the external firmware versions had to do it already for
quite some time, because otherwise more people would have complained
loudly when installing their own kernels.

What is wrong with moving the firmware into its own package with its own
version number?

Regards

Marcel


--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 9:45 am

Nothing. You can do this today, building from the linux-firmware
repository. That repository is starting to contain extra firmware that
vendors are now willing to let us distribute -- where they _weren't_
willing to let us distribute it as part of the kernel.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Greg KH
Date: Thursday, September 11, 2008 - 1:18 pm

That's great and wonderful and has absolutely nothing to do with the
real problem we have right now in 2.6.27-rc.

Jeff's patch is one proposed solution for the problem, what's the
objection to it?  Reliance on a udev change to catch this as well?  It
looks like SuSE and Ubuntu already handle this, and I'm sure Fedora can
as well, right?

If the udev script requirement is a problem, then how does anyone else
suggest to solve the problem that we currently have with the existing
code?

thanks,

greg k-h
--

From: Greg KH
Date: Thursday, September 11, 2008 - 1:15 pm

Agreed, but that's not what is going on here at all.

This is the firmware that is in the kernel source tree, that has been
moved to use request_firmware, and was originally tied tightly to the
kernel drivers themselves.

Now I can't install multiple kernel versions of a rpm package on my
machine at once.  Or even a single rpm package and then my own build,
without stomping on files owned by a different package.

That's unacceptable and can not work and is why Jeff made this patch.

thanks,

greg k-h
--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 1:38 pm

Not really. Most of it hasn't changed for years; it isn't _really_ tied
that closely to the kernel. 

You can just ignore what the kernel ships with, and install the firmware
from the linux-firmware.git repository instead.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Greg KH
Date: Thursday, September 11, 2008 - 1:57 pm

Some are and some aren't (I have two in my -staging tree that are

So you are now forcing distros to ship the linux-firmware.git repo
instead?  That's not nice and is a totally new dependancy for them to
handle.

What about the very basic fact that kernel versions will stomp on files
from other kernel versions if you install multiple kernels on the same
machine?  That's just bad and ripe for problems in any package
management system.

thanks,

greg k-h
--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 2:15 pm

That's fine. Just make sure the filename changes when an incompatible
change is made to the firmware -- just like you handle sonames in
libraries. It's not hard, and you should _always_ have been doing it.

And it's a completely bogus example _anyway_, because you're not adding
this extra firmware to the kernel tree.

Remember, all recent drivers have been using request_firmware() for
years anyway, and even the older drivers with active and on-the-ball
maintainers have been switching to request_firmware().

All I've done _recently_ is a bit of a sweep on the stragglers. And
because of the amount of stupid whining, I made it possible to keep it

Not at all; that's the ideal situation, but nobody's forced to do it

Only if you do stupid things in your packaging. So don't do that.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Greg KH
Date: Thursday, September 11, 2008 - 3:07 pm

But it was that "sweep" that has caused problems by having the kernel
put these files into the lib/firmware directory, without any version
information unlike any other file that our kernel installs.

That's the only point here.

It seems that the point that it is a bad thing for multiple kernel
packages to be installing into the same location, no matter if the file
has the same content or not (date will change which will cause
problems) isn't coming across here.  Why is that?

Think of the very real example here:

	rpm -Uhv kernel-2.6.27.1.rpm
	rpm -Uhv kernel-2.6.27.2.rpm
	rpm -e kernel-2.6.28.1

Now what just happened to the firmware that the 2.6.27.2 kernel package
had installed into lib/firmware?  It would be gone.  That is if rpm even
_allowed_ the second kernel package to be installed due to the
conflicting files.

So distros _HAVE_ to install the kernel-based firmware into
lib/firmware/uname-r/ to get their packaging to work, and to prevent bad
things from happening if a user installs their own kernel by hand and
then removes the kernel package.

That is why this patch was submitted, it is necessary.  If every distro
has to carry it on their own, due to packaging requirements, don't you

It's either use that package or add a patch that upstream seems to be

How do you expect anyone to package this up so that no conflicts occur?

thanks,

greg k-h
--

From: David Woodhouse
Date: Thursday, September 11, 2008 - 3:25 pm

For _new_ drivers.

Current drivers.

The ones which would be using request_firmware() anyway.

What is true for those is irrelevant to the discussion at hand. The only
drivers with firmware in the firmware/ directory of the kernel source
tree are the _old_, _unloved_ drivers which don't get updated. If they
had active and competent maintainers, they'd have been switched to
request_firmware() long ago _anyway_.


Yes. Except that it's nonsense because it's not really a problem, unless

Of _course_ it's coming across. So DON'T DO THAT THEN!


 < snip contrived bogus example >

Yeah, that would be broken. Don't do it like that. Or if you _must_ do
it that stupid way, feel free to override INSTALL_FW_PATH. But don't

Take a look at how Fedora does it. There is a 'kernel-firmware'
subpackage which is automatically generated with the kernel build, but
you don't have multiple such packages installed at the same time -- you
only have the _latest_ one.

This has a theoretical problem if drivers are removed from the tree, or
if firmware is removed from the tree (for example, because a newer
incompatible version supersedes it). That's fixed by packaging firmware
from the linux-firmware.git repository, in which the old firmware will
live on even after the current Linux kernel no longer has it. But since
it _is_ a purely theoretical problem, there's no particular rush for
that to happen. As I said, these ancient unloved drivers aren't getting
their firmware updated _anyway_.

Now, can we _please_ stop being bloody stupid? If there are _real_
problems, like the one I fixed with commit 1cede1af last week, then I'm
perfectly happy to deal with them. But stop making crap up.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Joseph Fannin
Date: Friday, September 12, 2008 - 1:39 am

I CAN'T INSTALL MORE THAN ONE KERNEL PACKAGE > v2.6.26.

IT'S NOT IMAGINARY.

IT USED TO WORK AND YOU BROKE IT.


--
Joseph Fannin
jfannin@gmail.com

--

From: Gene Heskett
Date: Friday, September 12, 2008 - 6:50 am

I've been building my own, and currently have about 10 kernels newer than 
2.6.26 sitting in my /boot partition, and they all work.  I'd suggest you 



-- 
Cheers, Gene
"There are four boxes to be used in defense of liberty:
 soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
You would if you could but you can't so you won't.
--

From: David Woodhouse
Date: Friday, September 12, 2008 - 7:32 am

Then your kernel packaging is broken. Fix it.

Or go an stand in the corner with the muppets who are whining that the
move from arch/i386 to arch/x86 also broke their kernel packaging....
and who refuse to fix that too.

Oh, wait...there weren't any of those; it wasn't even a _consideration_.

You're just being an idiot, because people like to whine about firmware.

-- 
David Woodhouse                            Open Source Technology Centre
David.Woodhouse@intel.com                              Intel Corporation

--

From: Kai Henningsen
Date: Friday, September 12, 2008 - 1:24 pm

I might be confused here, but my impression is that he complains about
packaging that is part of the kernel sources. That really makes it a
stretch to call it "his" packaging.

Let's see ... yes, scripts/packaging stuff ... assuming I parsed
MAINTAINERS correctly, that means it belongs to

KERNEL BUILD (kbuild: Makefile, scripts/Makefile.*)
P:      Sam Ravnborg
M:      sam@ravnborg.org
T:      git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-next.git
T:      git kernel.org:/pub/scm/linux/kernel/git/sam/kbuild-fixes.git
L:      linux-kbuild@vger.kernel.org
S:      Maintained

No?

I've never used that stuff myself. I prefer working with the (Debian)
kernel-package (make-kpkg) tool, which is also used to create the
distribution packages I believe, and which when I last used it
certainly had an active maintainer.
--

Previous thread: [PATCH] Fix memmap=exactmap boot argument by Prarit Bhargava on Tuesday, September 9, 2008 - 6:56 am. (2 messages)

Next thread: OOPS: getting an ACPI interrupt while in an ACPI interrupt hangs my box by