public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: David Woodhouse <david.woodhouse@intel.com>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Adrian Bunk <bunk@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Natalie Protasevich <protasnb@gmail.com>
Subject: Re: 2.6.32-rc4: Reported regressions from 2.6.31
Date: Mon, 12 Oct 2009 08:24:43 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LFD.2.01.0910120725350.3438@localhost.localdomain> (raw)
In-Reply-To: <1255342738.24732.265.camel@macbook.infradead.org>



On Mon, 12 Oct 2009, David Woodhouse wrote:
> 
> Well, according to the design, the IOMMU code is doing the right thing¹.
> 
> The theory is that the BIOS _tells_

There is no "theory". There is only crap BIOSes. Stop living in a dream 
world, and stop making arguments that are only relevant in that dream 
world.

> The only viable solution (short of an open source BIOS written by sober
> people)

Again, you're living in that dream world. Wake up, sheeple.

BIOS writers write crap, because it's a crap job. It's that simple. Yes, 
they're probably drunk or drugged up, but they need it to deal with the 
hand they have been dealt.

There are absolutely _zero_ incentives to write good firmware for any 
particular device (and nothing else matters), because the projects are all 
(a) largely "throw-over-the-fence-and-forget-about-it" for any particular 
machine (ie any fixes are mostly relevant for the _next_ generation of 
machines), and (b) they have no actual user incentives or feedback, since 
nobody really "runs" the firmware anyway - it's supposed to be invisible 
by design and just sets things up.

So outside of the testing that it gets (_before_ it ever hits any users 
hands) there is never _ever_ going to be any QA.  Once it is in user 
hands, it is what it is. Almost nobody upgrades their firmware in 
practice. Yeah, geeks may do. Normal people? Not so much.

And that would _not_ change even with an open source BIOS. Why? Because 
the _code_ generally isn't the problem. The problem tends to be all the 
localization for any particular machine.

Even if the code was open source and perfect, we'd still have trouble with 
firmware - because 99% of it is driven by tables that by design have to be 
changed for each machine (yes, yes, a BIOS is easily a megabyte of 
compressed code too, but a lot of it is the nice GUI for setup etc - the 
actual code that runs on _bootup_ is rather small, and is all about those 
tables).

We might have a few _fewer_ problems if the code was perfect, and maybe 
we'd have missed this particular issue (but I doubt it, it's still a 
localized table). But it wouldn't really change any of the fundamentals in 
the issue.

BTW, in this case, it's not even necessarily the firmware people who are 
to blame. It's a combination of (a) USB is crazy polled DMA and (b) IOMMU 
is a whole new thing and (c) ACPI is too f*cking complex so nobody will 
_ever_ get it right anyway, even if the firmware people didn't have 
everything against them.

So your arguments about RMRR tables and "should do" are POINTLESS. Just 
give it up.

The sane thing to do is to have a legacy IOMMU mapping until all devices 
are initialized, so that things work _despite_ the inevitable BIOS 
crapola. End of story.

So stop blaming the BIOS. We _know_ firmware is crap - there is no point 
in blaming it. The response to "firmware bug" should be "oh, of course - 
and our code was too fragile, since it didn't take that into account".

And stop saying these problems would magically go away with open-source 
firmware. That just shows that you don't understand the realities of the 
situation. Even an open-source bios would end up having buggy tables, and 
even with an opensource bios, users generally wouldn't upgrade it.

"If wishes were horses, beggars would ride"

> was to quiesce the USB controllers before enabling the IOMMU.

The other solution would be to just _enable_ (and do all the setup) of the 
IOMMU early. And then just leave a legacy mapping for the IOMMU, and then 
_after_all_devices_are_set_up_ can you then remove the legacy mapping.

I don't much care. Just as long as the DMA works for the whole bus setup.

> The final PCI quirks are currently run from pci_init() which is a
> device_initcall(), which is too late -- in fact, it could actually be
> _after_ some of the real device drivers have taken control of the same
> hardware.

Now, this I can certainly agree 100% with. We can and should move the 
final quirks up a bit. And yes, I absolutely think we should at least 
_guarantee_ that those quirks are run before any other device_initcalls, 
regardless of any IOMMU issues (ie now it looks like it depends on link 
ordering whether a built-in driver might run before or after pci_init()).

So I agree that we may well be able to fix this by changing the ordering. 
What I disagree with is your continual "I wish things were different". 
I've seen you make that "open source firmware" argument before. It's 
pointless. Stop doing it.

But your patch looks fine.

That said, I think your choice of initcall is odd, even if it is 
understandable. Right now we have, at least on x86:

	fs_initcall(pcibios_assign_resources);

and I assume you picked fs_initcall_sync() so that it happens after that 
one. No?

Which makes sense, but at the same time, it all looks just random. And 
different architectures actually do it in different places (some seem to 
do it inside pcibios_init() at subsys_initcall time). So I'm not even sure 
fs_initcall_sync() will do it for other architectures, although it looks 
like most others do their final PCI setup _earlier_ rather than later.

I'm wondering if we should not get _rid_ of that whole pci_init() (you 
renamed it, and I agree - it's clearly not really "pci_init()"), and move 
it to just be the last thing that pci_subsys_init() does, or perhaps all 
the way into pcibios_resource_survey().

But I guess there could be random ACPI initcalls etc involved too, and 
subtle ordering constraints with _those_. And we have way too many 
arch-specific details here. So your patch may be the simplest one, but I 
wish we could also make some of this be less of a jungle of different 
initcalls.

Basically, it seems silly to have this kind of subtlety for just the final 
quirk, when the _other_ quirks are all handled by generic code in very 
well-defined places.

For example, one of the effects of this mess is that as far as I can tell, 
PCI hotplug (or cardbus, which is a special case of PCI hotplug) will 
never run the pci_fixup_late fixups at all, even though it _will_ run the 
pci_fixup_header/early/enable ones (because those are done by generic 
code: pci_setup_device(), pci_device_add() and pci_enable_device()).

			Linus

  parent reply	other threads:[~2009-10-12 15:27 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-11 22:07 2.6.32-rc4: Reported regressions from 2.6.31 Rafael J. Wysocki
2009-10-11 22:15 ` [Bug #14277] Caught 8-bit read from freed memory in b43 driver at association Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14279] Suspend to RAM freeze totally since 2.6.32-rc1 - Acer Aspire 1511Lmi laptop Rafael J. Wysocki
2009-10-12  8:09   ` Jan Beulich
2009-10-12 21:50     ` Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14278] New message "NOHZ: local_softirq_pending 08" at each ping request Rafael J. Wysocki
2009-10-12 13:15   ` Michael Buesch
2009-10-12 21:49     ` Rafael J. Wysocki
2009-10-13 14:27       ` John W. Linville
2009-10-13 20:50         ` Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14296] spitz boots but suspend/resume is broken Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14299] oops in wireless, iwl3945 related? Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14334] pcmcia suspend regression from 2.6.31.1 to 2.6.31.2 - Dell Inspiron 600m Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14302] Kernel panic on i386 machine when booting with profile=2 Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14297] console resume broken since ba15ab0e8d Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14352] WARNING: at net/mac80211/scan.c:267 Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14298] warning at manage.c:361 (set_irq_wake), matrix-keypad related? Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14355] USB serial regression after 2.6.31.1 with Huawei E169 GSM modem Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14353] BUG: sleeping function called from invalid context at kernel/mutex.c:280 Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14354] Bad corruption with 2.6.32-rc1 and upwards Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14370] ext4 corruptions Rafael J. Wysocki
2009-10-12  6:50   ` Alexey Fisher
2009-10-12 21:53     ` Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14373] Task blocked for more than 120 seconds Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14372] Wireless not working after suspend-resume Rafael J. Wysocki
2009-10-12 18:48   ` Fabio Comolli
2009-10-12 21:55     ` Rafael J. Wysocki
2009-10-13  7:07     ` Maciej Rutecki
2009-10-11 22:22 ` [Bug #14374] MCEs caused by commit db8be50c4307dac2b37305fc59c8dc0f978d09ea Rafael J. Wysocki
2009-10-12 13:35   ` Mikael Pettersson
2009-10-12 21:56     ` Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14378] Problems with net/core/skbuff.c Rafael J. Wysocki
2009-10-12 10:42   ` David Miller
2009-10-12 15:07     ` Massimo "CtRiX" Cetra
2009-10-13  9:11     ` Massimo Cetra
2009-10-13  9:23       ` Massimo Cetra
2009-10-13 10:19       ` Eric Dumazet
2009-10-13 10:25         ` David Miller
2009-10-13 10:26         ` Massimo Cetra
2009-10-14 19:27           ` Massimo Cetra
2009-10-15  0:36             ` [PATCH] virtio_net: use dev_kfree_skb_any() in free_old_xmit_skbs() Eric Dumazet
2009-10-15  6:30               ` David Miller
2009-10-13 10:22       ` [Bug #14378] Problems with net/core/skbuff.c David Miller
2009-10-13 10:27         ` Massimo Cetra
2009-10-11 22:22 ` [Bug #14376] Kernel NULL pointer dereference/ kvm subsystem Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14375] Intel(R) I/OAT DMA Engine init failed Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14382] Transmit failure in et131x Rafael J. Wysocki
2009-10-11 22:30   ` Alan Cox
2009-10-11 22:22 ` [Bug #14379] ACPI Warning for _SB_.BAT0._BIF: Converted Buffer to expected String Rafael J. Wysocki
2009-10-12  3:14   ` Justin Mattock
2009-10-12  3:35     ` Lin Ming
2009-10-12  3:58       ` Justin P. Mattock
2009-10-12 21:58         ` Rafael J. Wysocki
2009-10-13  3:12           ` Justin P. Mattock
2009-10-11 22:22 ` [Bug #14380] Video tearing/glitching with T400 laptops Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14381] iwlagn lost connection after s2ram (with warnings) Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14383] hackbench regression with kernel 2.6.32-rc1 Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14386] GPF in snd_hda_intel Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14384] tbench regression with 2.6.32-rc1 Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14387] deadlock with fallocate Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14392] Touchpad "paste" stops working after suspend to RAM Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14389] Build system issue Rafael J. Wysocki
2009-10-13 18:53   ` Sam Ravnborg
2009-10-13 20:52     ` Rafael J. Wysocki
2009-10-11 22:22 ` [Bug #14390] "bind" a device to a driver doesn't not work anymore Rafael J. Wysocki
2009-10-11 23:07 ` 2.6.32-rc4: Reported regressions from 2.6.31 Linus Torvalds
2009-10-12 10:18   ` David Woodhouse
2009-10-12 12:06     ` [PATCH 1/4] Rename pci_init() to pci_apply_final_quirks(), move it to quirks.c David Woodhouse
2009-10-12 12:06     ` [PATCH 2/4] Mark pci_apply_final_quirks() __init rather than __devinit David Woodhouse
2009-10-12 12:06     ` [PATCH 3/4] Run pci_apply_final_quirks() sooner David Woodhouse
2009-10-12 12:06     ` [PATCH 4/4] x86: Move pci_iommu_init to rootfs_initcall() David Woodhouse
2009-10-12 14:26     ` 2.6.32-rc4: Reported regressions from 2.6.31 David Woodhouse
2009-10-12 15:24     ` Linus Torvalds [this message]
2009-10-12 15:56       ` David Woodhouse
2009-10-12 16:13         ` Alan Cox
2009-10-12 17:35         ` Linus Torvalds
2009-10-12 20:29           ` David Woodhouse
2009-10-11 23:11 ` Linus Torvalds
2009-10-12  0:02   ` Theodore Tso

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=alpine.LFD.2.01.0910120725350.3438@localhost.localdomain \
    --to=torvalds@linux-foundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=bunk@kernel.org \
    --cc=david.woodhouse@intel.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=protasnb@gmail.com \
    --cc=rjw@sisk.pl \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox