[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160610135904.GA19958@wunner.de>
Date: Fri, 10 Jun 2016 15:59:04 +0200
From: Lukas Wunner <lukas@...ner.de>
To: Ingo Molnar <mingo@...nel.org>
Cc: Bjorn Helgaas <helgaas@...nel.org>,
Yinghai Lu <yinghai@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>, cmilsted@...hat.com,
Rafa?? Mi??ecki <zajec5@...il.com>,
Bjorn Helgaas <bhelgaas@...gle.com>,
"H. Peter Anvin" <hpa@...or.com>,
Matt Fleming <matt@...eblueprint.co.uk>,
Peter Zijlstra <peterz@...radead.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Matthew Garrett <mjg59@...f.ucam.org>, m@...s.ch,
"linux-tip-commits@...r.kernel.org"
<linux-tip-commits@...r.kernel.org>
Subject: Re: [tip:x86/urgent] x86/quirks: Add early quirk to reset Apple
AirPort card
On Fri, Jun 10, 2016 at 02:59:57PM +0200, Ingo Molnar wrote:
> * Lukas Wunner <lukas@...ner.de> wrote:
> > On Fri, Jun 10, 2016 at 01:58:45PM +0200, Ingo Molnar wrote:
> > > * Yinghai Lu <yinghai@...nel.org> wrote:
> > > > On 6/9/16, Lukas Wunner <lukas@...ner.de> wrote:
> > > > > Well, the PCI core would also scan such a bus twice AFAICS.
> > > > > And the performance penalty of scanning it twice seems negligible.
> > > > > Early quirks can prevent double execution by setting QFLAG_APPLY_ONCE.
> > > > > (Three quirks have set that flag already.)
> > > > >
> > > > > So I think this shouldn't be a concern.
> > > >
> > > > I don't know. I would like see sth like following, and that is simple
> > > > enough.
> > > >
> > > > --- linux-2.6.orig/arch/x86/kernel/early-quirks.c
> > > > +++ linux-2.6/arch/x86/kernel/early-quirks.c
> > > > @@ -755,10 +755,16 @@ static int __init check_dev_quirk(int nu
> > > > return 0;
> > > > }
> > > >
> > > > +static unsigned char __initdata scanned[256];
> > > > static void __init early_pci_scan_bus(int bus)
> > > > {
> > > > int slot, func;
> > > >
> > > > + if (scanned[bus])
> > > > + return;
> > > > +
> > > > + scanned[bus] = 1;
> > > > +
> > > > /* Poor man's PCI discovery */
> > > > for (slot = 0; slot < 32; slot++)
> > > > for (func = 0; func < 8; func++) {
> > >
> > > Ok, I removed the fix from tip:x86/urgent from the time being - could you
> > > guys please send a full version once a final approach is agreed upon?
> >
> > IMHO the above patch to prevent double scanning isn't needed
> > and less code is usually better. So my suggestion would be the
> > patch as originally sent plus the delta fix I sent yesterday,
> > either squashed or applied separately.
> >
> > Since Yinghai Lu seems to disagree I guess you as the maintainer
> > will have to make a decision. :-)
>
> So I'd lean towards lower complexity, but since this is essentially
> PCI code I'd like to defer to Bjorn on that detail.
If I may add some additional information:
drivers/pci/probe.c contains the following comment:
/*
* The bus might already exist for two reasons: Either we are
* rescanning the bus or the bus is reachable through more than
* one bridge. The second case can happen with the i450NX
* chipset.
*/
So buses reachable through more than one bridge do exist, albeit they're
assumedly rare. The question is, what are the consequences?
(1) A minimal performance hit from scanning the bus multiple times.
(2) Quirks for devices on that bus are executed multiple times.
As said quirks can set QFLAG_APPLY_ONCE to prevent that. If it turns
out this patch regresses because quirks are executed multiple times
but shouldn't, that's a bug in those quirks and they need to be
amended to set QFLAG_APPLY_ONCE. If we avoid scanning the bus
multiple times, we'd essentially be papering over those bugs.
Best regards,
Lukas
Powered by blists - more mailing lists