On Wed, 9 Apr 2008 17:42:34 +0200 NoWhereMan <uncommonnonsense@xxxxxxxxx> wrote: > >From : Edoardo Vacchi <uncommonnonsense@xxxxxxxxx> > > When acpi_pci_link_crs_ignore is passed at boot to the kernel, > ignores the error about the _CRS method of LINK device and selects > IRQ from possible IRQ list returned by _PRS method. > > Signed-off-by: Edoardo Vacchi <uncommonnonsense@xxxxxxxxx> > Let's add some cc's. > > This is nothing more than the patch on comment #127 on bug #8896 > http://bugzilla.kernel.org/show_bug.cgi?id=8896#c127 > > originally by Zhao Yakui <yakui.zhao@xxxxxxxxx> > > ported to 2.6.25 and wrapped into an additional check for the kernel parameter > (plus of course the defintion of the kernel param itself) > > The patch provides a workaround for some buggy BIOSes such as Insyde > in Packard Bell EasyNote r1938 (of which I'm an unfortunate owner), > while still keeping boot safe for people not suffering from this bug > That patch is about four months old. Hopefully there was a reason why we dodn't proceed with it? > diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c > index 233c40c..ed54c63 100644 > --- a/drivers/acpi/pci_link.c > +++ b/drivers/acpi/pci_link.c > @@ -297,6 +297,16 @@ static int acpi_pci_link_get_current(struct > acpi_pci_link *link) > return result; > } > > + > +/* > + * this is set when acpi_pci_link_crs_ignore is passed on boot > + * it will ignore the -ENODEV error on buggy BIOSes > + * > + * workaround for bug #8896 > + * > + */ > +static int acpi_pci_link_crs_ignore; /* 0 or 1*/ > + > static int acpi_pci_link_set(struct acpi_pci_link *link, int irq) > { > int result = 0; > @@ -385,9 +395,16 @@ static int acpi_pci_link_set(struct acpi_pci_link > *link, int irq) > > /* Query _CRS, set link->irq.active */ > result = acpi_pci_link_get_current(link); > - if (result) { > - goto end; > - } > + if (acpi_pci_link_crs_ignore && result == -ENODEV) { > + /* > + * Ignore the error about the _CRS method of Link device and > + * select IRQ from the Possible IRQ list > + * returned by _PRS method. > + */ > + printk(KERN_WARNING "Ignore error LINK CRS method.\n"); > + link->irq.active = irq; > + result = 0; > + } > > /* > * Is current setting not what we set? > @@ -412,7 +429,16 @@ static int acpi_pci_link_set(struct acpi_pci_link > *link, int irq) > return result; > } > > -/* -------------------------------------------------------------------------- > +int __init acpi_pci_link_crs_ignore_set(char *str) > +{ > + acpi_pci_link_crs_ignore = 1; > + return 1; > +} > + > +__setup("acpi_pci_link_crs_ignore", acpi_pci_link_crs_ignore_set); > + > + > + /* -------------------------------------------------------------------------- > PCI Link IRQ Management > -------------------------------------------------------------------------- > */ > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html