Messages in this thread Patch in this message | | | Subject | Re: ACPI blacklisting: move year blacklist into acpi/blacklist.c | From | Len Brown <> | Date | 08 Oct 2003 02:39:41 -0400 |
| |
Re: dmi_check_blacklist()
Something like MATCH(DMI_BOARD_NAME, "P2B-DS") boils down to a strstr(a, b) -- probably something that can be fooled by substring, say "PB2-D"...
But more to the point, there is no way to compare before/after dates, say BEFORE(DMI_BIOS_DATE, "1/3/2002")
This is needed to blacklist things like the Toshiba Tecra 8100 which supplies a DMI date, but no other useful version info.
If we such a date comparison function, we could also use it to make the year-compare code below somewhat cleaner.
Re: externs looks like using externs in the function protos in include/linux is common practice, so acpi.h should probably do it too -- even if it is just for consistent style.
Re: diffs I couldn't get patch to digest this format w/o manual intervention --- /usr/src/tmp/linux/arch/... +++ /usr/src/linux/arch/...
and had to edit it into
--- a/arch/... +++ b/arch/...
for patch -Np1
Re: acpi_bios_year() definition note that CONFIG_ACPI_BOOT may be defined when CONFIG_ACPI is not. Ie. in the case where just the ACPI boot code is used to enumerate LAPICs, say for HT, but ACPI_INTERPRETER is not even built in.
In this case, blacklist.c is not built into the kernel, but dmi_scan.c always is.
thanks, -Len
On Wed, 2003-10-01 at 06:18, Pavel Machek wrote: > Hi! > > This moves year-based blacklisting to blacklist.c, where it belongs > AFAICS. It also adds some externs to include/linux/acpi.h, but I > believe *way* more externs are needed. Please apply, > > Pavel > > --- /usr/src/tmp/linux/arch/i386/kernel/dmi_scan.c 2003-09-28 22:05:29.000000000 +0200 > +++ /usr/src/linux/arch/i386/kernel/dmi_scan.c 2003-10-01 11:55:21.000000000 +0200 > @@ -997,24 +998,10 @@ > int i; > > #ifdef CONFIG_ACPI_BOOT > -#define ACPI_BLACKLIST_CUTOFF_YEAR 2001 > - > if (dmi_ident[DMI_BIOS_DATE]) { > char *s = strrchr(dmi_ident[DMI_BIOS_DATE], '/'); > - if (s) { > - int year, disable = 0; > - s++; > - year = simple_strtoul(s,NULL,0); > - if (year >= 1000) > - disable = year < ACPI_BLACKLIST_CUTOFF_YEAR; > - else if (year < 1 || (year > 90 && year <= 99)) > - disable = 1; > - if (disable && !acpi_force) { > - printk(KERN_NOTICE "ACPI disabled because your bios is from %s and too old\n", s); > - printk(KERN_NOTICE "You can enable it with acpi=force\n"); > - acpi_disabled = 1; > - } > - } > + if (s && !acpi_force) > + acpi_bios_year(s+1); > } > #endif > > --- /usr/src/tmp/linux/drivers/acpi/blacklist.c 2003-02-15 18:51:16.000000000 +0100 > +++ /usr/src/linux/drivers/acpi/blacklist.c 2003-10-01 11:55:19.000000000 +0200 > @@ -83,6 +83,27 @@ > {""} > }; > > +#define ACPI_BLACKLIST_CUTOFF_YEAR 2001 > + > +/* > + * Notice: this is called from dmi_scan.c, which contains second (!) blacklist > + */ > +void __init > +acpi_bios_year(char *s) > +{ > + int year, disable = 0; > + > + year = simple_strtoul(s,NULL,0); > + if (year >= 1000) > + disable = year < ACPI_BLACKLIST_CUTOFF_YEAR; > + else if (year < 1 || (year > 90 && year <= 99)) > + disable = 1; > + if (disable) { > + printk(KERN_NOTICE "ACPI disabled because your bios is from %s and too old\n", s); > + printk(KERN_NOTICE "You can enable it with acpi=force\n"); > + acpi_disabled = 1; > + } > +} > > int __init > acpi_blacklisted(void) > --- /usr/src/tmp/linux/include/linux/acpi.h 2003-08-27 12:00:48.000000000 +0200 > +++ /usr/src/linux/include/linux/acpi.h 2003-10-01 11:53:51.000000000 +0200 > @@ -403,8 +403,8 @@ > > struct pci_dev; > > -int acpi_pci_irq_enable (struct pci_dev *dev); > -int acpi_pci_irq_init (void); > +extern int acpi_pci_irq_enable (struct pci_dev *dev); > +extern int acpi_pci_irq_init (void); > > struct acpi_pci_driver { > struct acpi_pci_driver *next; > @@ -412,21 +412,22 @@ > void (*remove)(acpi_handle handle); > }; > > -int acpi_pci_register_driver(struct acpi_pci_driver *driver); > -void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); > +extern int acpi_pci_register_driver(struct acpi_pci_driver *driver); > +extern void acpi_pci_unregister_driver(struct acpi_pci_driver *driver); > > #endif /*CONFIG_ACPI_PCI*/ > > #ifdef CONFIG_ACPI_EC > > -int ec_read(u8 addr, u8 *val); > -int ec_write(u8 addr, u8 val); > +extern int ec_read(u8 addr, u8 *val); > +extern int ec_write(u8 addr, u8 val); > > #endif /*CONFIG_ACPI_EC*/ > > #ifdef CONFIG_ACPI > > -int acpi_blacklisted(void); > +extern int acpi_blacklisted(void); > +extern void acpi_bios_year(char *s); > > #else >
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |