Provide acpi_check_{mem_}region.
Drivers can additionally check against possible ACPI interference by also
invoking this shortly before they call request_region.
If -EBUSY is returned, the driver must not load.
Use acpi_enforce_resources=strict/lax/no options to:
- strict: let conflicting drivers fail to load with an error message
- lax: let conflicting driver work normal with a warning message
- no: no functional change at all
Signed-off-by: Thomas Renninger <[email protected]>
---
drivers/acpi/osl.c | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++-
include/linux/acpi.h | 13 +++
2 files changed, 186 insertions(+), 2 deletions(-)
Index: lenb/drivers/acpi/osl.c
===================================================================
--- lenb.orig/drivers/acpi/osl.c
+++ lenb/drivers/acpi/osl.c
@@ -44,6 +44,8 @@
#include <asm/uaccess.h>
#include <linux/efi.h>
+#include <linux/ioport.h>
+#include <linux/list.h>
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME("osl");
@@ -74,6 +76,18 @@ static void *acpi_irq_context;
static struct workqueue_struct *kacpid_wq;
static struct workqueue_struct *kacpi_notify_wq;
+struct acpi_res_list {
+ resource_size_t start;
+ resource_size_t end;
+ acpi_adr_space_type resource_type; /* IO port, System memory, ...*/
+ char name[5]; /* only can have a length of 4 chars, make use of this
+ one instead of res->name, no need to kalloc then */
+ struct list_head resource_list;
+};
+
+static LIST_HEAD(resource_list_head);
+static DEFINE_SPINLOCK(acpi_res_lock);
+
#define OSI_STRING_LENGTH_MAX 64 /* arbitrary */
static char osi_additional_string[OSI_STRING_LENGTH_MAX];
@@ -1042,6 +1056,127 @@ static int __init acpi_wake_gpes_always_
__setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
+/* Check of resource interference between native drivers and ACPI
+ * OperationRegions (SystemIO and System Memory only).
+ * IO ports and memory declared in ACPI might be used by the ACPI subsystem
+ * in arbitrary AML code and can interfere with legacy drivers.
+ * acpi_enforce_resources= can be set to:
+ *
+ * - strict (2)
+ * -> further driver trying to access the resources will not load
+ * - lax (default) (1)
+ * -> further driver trying to access the resources will load, but you
+ * get a system message that something might go wrong...
+ *
+ * - no (0)
+ * -> ACPI Operation Region resources will not be registered
+ *
+ */
+#define ENFORCE_RESOURCES_STRICT 2
+#define ENFORCE_RESOURCES_LAX 1
+#define ENFORCE_RESOURCES_NO 0
+
+static unsigned int acpi_enforce_resources = ENFORCE_RESOURCES_LAX;
+
+static int __init acpi_enforce_resources_setup(char *str)
+{
+ if (str == NULL || *str == '\0')
+ return 0;
+
+ if (!strcmp("strict", str))
+ acpi_enforce_resources = ENFORCE_RESOURCES_STRICT;
+ else if (!strcmp("lax", str))
+ acpi_enforce_resources = ENFORCE_RESOURCES_LAX;
+ else if (!strcmp("no", str))
+ acpi_enforce_resources = ENFORCE_RESOURCES_NO;
+
+ return 1;
+}
+
+__setup("acpi_enforce_resources=", acpi_enforce_resources_setup);
+
+/* Check for resource conflicts between ACPI OperationRegions and native
+ * drivers */
+static int acpi_check_resource_conflict(struct resource *res)
+{
+ struct acpi_res_list *res_list_elem;
+ int ioport;
+ int clash = 0;
+
+ if (acpi_enforce_resources == ENFORCE_RESOURCES_NO)
+ return 0;
+ if (!(res->flags & IORESOURCE_IO) && !(res->flags & IORESOURCE_MEM))
+ return 0;
+
+ ioport = res->flags & IORESOURCE_IO;
+
+ spin_lock(&acpi_res_lock);
+ list_for_each_entry(res_list_elem, &resource_list_head,
+ resource_list) {
+ if (ioport && (res_list_elem->resource_type
+ != ACPI_ADR_SPACE_SYSTEM_IO))
+ continue;
+ if (!ioport && (res_list_elem->resource_type
+ != ACPI_ADR_SPACE_SYSTEM_MEMORY))
+ continue;
+
+ if (res->end < res_list_elem->start
+ || res_list_elem->end < res->start)
+ continue;
+ clash = 1;
+ break;
+ }
+ spin_unlock(&acpi_res_lock);
+
+ if (clash) {
+ if (acpi_enforce_resources != ENFORCE_RESOURCES_NO) {
+ printk("%sACPI: %s resource %s [0x%llx-0x%llx]"
+ " conflicts with ACPI region %s"
+ " [0x%llx-0x%llx]\n",
+ acpi_enforce_resources == ENFORCE_RESOURCES_LAX
+ ? KERN_WARNING : KERN_ERR,
+ ioport ? "I/O" : "Memory", res->name,
+ (long long) res->start, (long long) res->end,
+ res_list_elem->name,
+ (long long) res_list_elem->start,
+ (long long) res_list_elem->end);
+ printk(KERN_INFO "ACPI: Device needs an ACPI driver\n");
+ }
+ if (acpi_enforce_resources == ENFORCE_RESOURCES_STRICT)
+ return -EBUSY;
+ }
+ return 0;
+}
+
+int acpi_check_region(resource_size_t start, resource_size_t n,
+ const char *name)
+{
+ struct resource res = {
+ .start = start,
+ .end = start + n - 1,
+ .name = name,
+ .flags = IORESOURCE_IO,
+ };
+
+ return acpi_check_resource_conflict(&res);
+}
+EXPORT_SYMBOL(acpi_check_region);
+
+int acpi_check_mem_region(resource_size_t start, resource_size_t n,
+ const char *name)
+{
+ struct resource res = {
+ .start = start,
+ .end = start + n - 1,
+ .name = name,
+ .flags = IORESOURCE_MEM,
+ };
+
+ return acpi_check_resource_conflict(&res);
+
+}
+EXPORT_SYMBOL(acpi_check_mem_region);
+
/*
* Acquire a spinlock.
*
@@ -1199,10 +1334,46 @@ acpi_status
acpi_os_validate_address (
u8 space_id,
acpi_physical_address address,
- acpi_size length)
+ acpi_size length,
+ char *name)
{
+ struct acpi_res_list *res;
+ if (acpi_enforce_resources == ENFORCE_RESOURCES_NO)
+ return AE_OK;
- return AE_OK;
+ switch (space_id) {
+ case ACPI_ADR_SPACE_SYSTEM_IO:
+ case ACPI_ADR_SPACE_SYSTEM_MEMORY:
+ /* Only interference checks against SystemIO and SytemMemory
+ are needed */
+ res = kzalloc(sizeof(struct acpi_res_list), GFP_KERNEL);
+ if (!res)
+ return AE_OK;
+ /* ACPI names are fixed to 4 bytes, still better use strlcpy */
+ strlcpy(res->name, name, 5);
+ res->start = address;
+ res->end = address + length - 1;
+ res->resource_type = space_id;
+ spin_lock(&acpi_res_lock);
+ list_add(&res->resource_list, &resource_list_head);
+ spin_unlock(&acpi_res_lock);
+ pr_debug("Added %s resource: start: 0x%llx, end: 0x%llx, "
+ "name: %s\n", (space_id == ACPI_ADR_SPACE_SYSTEM_IO)
+ ? "SystemIO" : "System Memory",
+ res->start,
+ (unsigned long)res->end,
+ (unsigned long)res->name);
+ break;
+ case ACPI_ADR_SPACE_PCI_CONFIG:
+ case ACPI_ADR_SPACE_EC:
+ case ACPI_ADR_SPACE_SMBUS:
+ case ACPI_ADR_SPACE_CMOS:
+ case ACPI_ADR_SPACE_PCI_BAR_TARGET:
+ case ACPI_ADR_SPACE_DATA_TABLE:
+ case ACPI_ADR_SPACE_FIXED_HARDWARE:
+ break;
+ }
+ return AE_OK;
}
#ifdef CONFIG_DMI
Index: lenb/include/linux/acpi.h
===================================================================
--- lenb.orig/include/linux/acpi.h
+++ lenb/include/linux/acpi.h
@@ -123,10 +123,23 @@ extern int pci_mmcfg_config_num;
extern int sbf_port;
extern unsigned long acpi_realmode_flags;
+int acpi_check_region(resource_size_t start, resource_size_t n,
+ const char *name);
+int acpi_check_mem_region(resource_size_t start, resource_size_t n,
+ const char *name);
+
#else /* !CONFIG_ACPI */
#define acpi_mp_config 0
+static inline int acpi_check_region(resource_size_t start, resource_size_t n,
+ const char *name)
+{ return 0; }
+
+static inline int acpi_check_mem_region(resource_size_t start,
+ resource_size_t n, const char *name)
+{ return 0; }
+
#endif /* !CONFIG_ACPI */
int acpi_register_gsi (u32 gsi, int triggering, int polarity);
On Wed, 24 Oct 2007 16:32:59 +0200 Thomas Renninger <[email protected]> wrote:
> Provide acpi_check_{mem_}region.
>
> Drivers can additionally check against possible ACPI interference by also
> invoking this shortly before they call request_region.
> If -EBUSY is returned, the driver must not load.
> Use acpi_enforce_resources=strict/lax/no options to:
> - strict: let conflicting drivers fail to load with an error message
> - lax: let conflicting driver work normal with a warning message
> - no: no functional change at all
>
>
OK, so Len has merged these into the acpi test tree. My understanding is
that once this work hits mainline, we can then merge
check-for-acpi-resource-conflicts-in-hwmon-drivers.patch.
My normal approach would be to send
check-for-acpi-resource-conflicts-in-hwmon-drivers.patch to Mark for
inclusion in git-hwmon one Len has merged the prerequisites into mainline.
Problem is, if Len merges late in the 2.6.26 merge window, Mark might not
have time to gets these changes into mainline before 2.6.27. Which is all
getting a bit dumb considering I first merged everything in October.
Fortunately things aren't mormally _this_ inefficient when one follows the
rules - this was an unusual patchset.
But still, I think we could afford to speed things up a bit more than that.
We could ask Len to consider merging this work into 2.6.25 and then if
Mark can ack check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
(below) for an akpm-merge, we're good to go. But I do recall that people
were a bit uncertain about it all back in October.
Please share your thoughts with us.
From: Jean Delvare <[email protected]>
Check for ACPI resource conflicts in hwmon drivers. I've included
all Super-I/O and PCI drivers.
I've voluntarily left out:
* Laptop specific and vendor-specific drivers: if they conflicted
on any system, this would pretty much mean that they conflict on all
systems, and we would know by now.
* Legacy ISA drivers (lm78 and w83781d): they only support chips found
on old designs were ACPI either wasn't supported or didn't deal with
thermal management.
* Drivers accessing the I/O resources indirectly (e.g. through SMBus):
the check will be added where it belongs, i.e. in the bus drivers.
Signed-off-by: Jean Delvare <[email protected]>
Signed-off-by: Thomas Renninger <[email protected]>
Cc: "Mark M. Hoffman" <[email protected]>
Cc: Len Brown <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
---
drivers/hwmon/dme1737.c | 5 +++++
drivers/hwmon/f71805f.c | 5 +++++
drivers/hwmon/f71882fg.c | 5 +++++
drivers/hwmon/it87.c | 5 +++++
drivers/hwmon/pc87360.c | 6 ++++++
drivers/hwmon/pc87427.c | 5 +++++
drivers/hwmon/sis5595.c | 5 +++++
drivers/hwmon/smsc47b397.c | 5 +++++
drivers/hwmon/smsc47m1.c | 5 +++++
drivers/hwmon/via686a.c | 5 +++++
drivers/hwmon/vt1211.c | 5 +++++
drivers/hwmon/vt8231.c | 5 +++++
drivers/hwmon/w83627ehf.c | 6 ++++++
drivers/hwmon/w83627hf.c | 5 +++++
14 files changed, 72 insertions(+)
diff -puN drivers/hwmon/dme1737.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/dme1737.c
--- a/drivers/hwmon/dme1737.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/dme1737.c
@@ -34,6 +34,7 @@
#include <linux/hwmon-vid.h>
#include <linux/err.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
/* ISA device, if found */
@@ -2238,6 +2239,10 @@ static int __init dme1737_isa_device_add
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
if (!(pdev = platform_device_alloc("dme1737", addr))) {
printk(KERN_ERR "dme1737: Failed to allocate device.\n");
err = -ENOMEM;
diff -puN drivers/hwmon/f71805f.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/f71805f.c
--- a/drivers/hwmon/f71805f.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/f71805f.c
@@ -39,6 +39,7 @@
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/ioport.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static unsigned short force_id;
@@ -1455,6 +1456,10 @@ static int __init f71805f_device_add(uns
}
res.name = pdev->name;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit_device_put;
+
err = platform_device_add_resources(pdev, &res, 1);
if (err) {
printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff -puN drivers/hwmon/f71882fg.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/f71882fg.c
--- a/drivers/hwmon/f71882fg.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/f71882fg.c
@@ -27,6 +27,7 @@
#include <linux/hwmon-sysfs.h>
#include <linux/err.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#define DRVNAME "f71882fg"
@@ -898,6 +899,10 @@ static int __init f71882fg_device_add(un
return -ENOMEM;
res.name = f71882fg_pdev->name;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ return err;
+
err = platform_device_add_resources(f71882fg_pdev, &res, 1);
if (err) {
printk(KERN_ERR DRVNAME ": Device resource addition failed\n");
diff -puN drivers/hwmon/it87.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/it87.c
--- a/drivers/hwmon/it87.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/it87.c
@@ -46,6 +46,7 @@
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#define DRVNAME "it87"
@@ -1487,6 +1488,10 @@ static int __init it87_device_add(unsign
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc(DRVNAME, address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/pc87360.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/pc87360.c
--- a/drivers/hwmon/pc87360.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/pc87360.c
@@ -43,6 +43,7 @@
#include <linux/hwmon-vid.h>
#include <linux/err.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static u8 devid;
@@ -1425,6 +1426,11 @@ static int __init pc87360_device_add(uns
continue;
res.start = extra_isa[i];
res.end = extra_isa[i] + PC87360_EXTENT - 1;
+
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit_device_put;
+
err = platform_device_add_resources(pdev, &res, 1);
if (err) {
printk(KERN_ERR "pc87360: Device resource[%d] "
diff -puN drivers/hwmon/pc87427.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/pc87427.c
--- a/drivers/hwmon/pc87427.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/pc87427.c
@@ -32,6 +32,7 @@
#include <linux/mutex.h>
#include <linux/sysfs.h>
#include <linux/ioport.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static unsigned short force_id;
@@ -524,6 +525,10 @@ static int __init pc87427_device_add(uns
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc(DRVNAME, address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/sis5595.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/sis5595.c
--- a/drivers/hwmon/sis5595.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/sis5595.c
@@ -62,6 +62,7 @@
#include <linux/jiffies.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
+#include <linux/acpi.h>
#include <asm/io.h>
@@ -727,6 +728,10 @@ static int __devinit sis5595_device_add(
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc("sis5595", address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/smsc47b397.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/smsc47b397.c
--- a/drivers/hwmon/smsc47b397.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/smsc47b397.c
@@ -36,6 +36,7 @@
#include <linux/err.h>
#include <linux/init.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static unsigned short force_id;
@@ -303,6 +304,10 @@ static int __init smsc47b397_device_add(
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc(DRVNAME, address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/smsc47m1.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/smsc47m1.c
--- a/drivers/hwmon/smsc47m1.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/smsc47m1.c
@@ -37,6 +37,7 @@
#include <linux/init.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static unsigned short force_id;
@@ -686,6 +687,10 @@ static int __init smsc47m1_device_add(un
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc(DRVNAME, address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/via686a.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/via686a.c
--- a/drivers/hwmon/via686a.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/via686a.c
@@ -41,6 +41,7 @@
#include <linux/init.h>
#include <linux/mutex.h>
#include <linux/sysfs.h>
+#include <linux/acpi.h>
#include <asm/io.h>
@@ -755,6 +756,10 @@ static int __devinit via686a_device_add(
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc("via686a", address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/vt1211.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/vt1211.c
--- a/drivers/hwmon/vt1211.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/vt1211.c
@@ -32,6 +32,7 @@
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/ioport.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static int uch_config = -1;
@@ -1259,6 +1260,10 @@ static int __init vt1211_device_add(unsi
}
res.name = pdev->name;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto EXIT;
+
err = platform_device_add_resources(pdev, &res, 1);
if (err) {
printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff -puN drivers/hwmon/vt8231.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/vt8231.c
--- a/drivers/hwmon/vt8231.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/vt8231.c
@@ -35,6 +35,7 @@
#include <linux/hwmon-vid.h>
#include <linux/err.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
static int force_addr;
@@ -858,6 +859,10 @@ static int __devinit vt8231_device_add(u
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc("vt8231", address);
if (!pdev) {
err = -ENOMEM;
diff -puN drivers/hwmon/w83627ehf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/w83627ehf.c
--- a/drivers/hwmon/w83627ehf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/w83627ehf.c
@@ -48,6 +48,7 @@
#include <linux/hwmon-vid.h>
#include <linux/err.h>
#include <linux/mutex.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#include "lm75.h"
@@ -1544,6 +1545,11 @@ static int __init sensors_w83627ehf_init
res.start = address + IOREGION_OFFSET;
res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
res.flags = IORESOURCE_IO;
+
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
err = platform_device_add_resources(pdev, &res, 1);
if (err) {
printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff -puN drivers/hwmon/w83627hf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/w83627hf.c
--- a/drivers/hwmon/w83627hf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
+++ a/drivers/hwmon/w83627hf.c
@@ -50,6 +50,7 @@
#include <linux/err.h>
#include <linux/mutex.h>
#include <linux/ioport.h>
+#include <linux/acpi.h>
#include <asm/io.h>
#include "lm75.h"
@@ -1746,6 +1747,10 @@ static int __init w83627hf_device_add(un
};
int err;
+ err = acpi_check_resource_conflict(&res);
+ if (err)
+ goto exit;
+
pdev = platform_device_alloc(DRVNAME, address);
if (!pdev) {
err = -ENOMEM;
_
On Thu, 2008-02-07 at 23:40 -0800, Andrew Morton wrote:
> On Wed, 24 Oct 2007 16:32:59 +0200 Thomas Renninger <[email protected]> wrote:
>
> > Provide acpi_check_{mem_}region.
> >
> > Drivers can additionally check against possible ACPI interference by also
> > invoking this shortly before they call request_region.
> > If -EBUSY is returned, the driver must not load.
> > Use acpi_enforce_resources=strict/lax/no options to:
> > - strict: let conflicting drivers fail to load with an error message
> > - lax: let conflicting driver work normal with a warning message
> > - no: no functional change at all
> >
> >
>
> OK, so Len has merged these into the acpi test tree. My understanding is
> that once this work hits mainline, we can then merge
> check-for-acpi-resource-conflicts-in-hwmon-drivers.patch.
>
> My normal approach would be to send
> check-for-acpi-resource-conflicts-in-hwmon-drivers.patch to Mark for
> inclusion in git-hwmon one Len has merged the prerequisites into mainline.
>
> Problem is, if Len merges late in the 2.6.26 merge window, Mark might not
> have time to gets these changes into mainline before 2.6.27. Which is all
> getting a bit dumb considering I first merged everything in October.
> Fortunately things aren't mormally _this_ inefficient when one follows the
> rules - this was an unusual patchset.
>
> But still, I think we could afford to speed things up a bit more than that.
> We could ask Len to consider merging this work into 2.6.25 and then if
> Mark can ack check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
> (below) for an akpm-merge, we're good to go. But I do recall that people
> were a bit uncertain about it all back in October.
The patch is totally unrisky, beside of an overseen typo that always can
slip in (if this should be a concern)...
About the mechanism and the fact that there is another instance to check
IO port and system memory resources?
IIRC Bjorn did not like that, but also wanted to integrated that into
pnp layer somehow. But I expect after fighting already that hard with
mainboard/system pnp resource conflicts and BIOS weirdness the last
weeks..., he also agrees that it makes not much sense that the
OperationRegion port/memory checks should get integrated into the pnp
layer now or at all (which could conflict as a third instance (driver
resources vs pnp resources vs ACPI OperationRegion declarations)
depending on how broken the BIOS is, even with overlapping!)
Thomas
> Please share your thoughts with us.
>
>
>
> From: Jean Delvare <[email protected]>
>
> Check for ACPI resource conflicts in hwmon drivers. I've included
> all Super-I/O and PCI drivers.
>
> I've voluntarily left out:
> * Laptop specific and vendor-specific drivers: if they conflicted
> on any system, this would pretty much mean that they conflict on all
> systems, and we would know by now.
> * Legacy ISA drivers (lm78 and w83781d): they only support chips found
> on old designs were ACPI either wasn't supported or didn't deal with
> thermal management.
> * Drivers accessing the I/O resources indirectly (e.g. through SMBus):
> the check will be added where it belongs, i.e. in the bus drivers.
>
> Signed-off-by: Jean Delvare <[email protected]>
> Signed-off-by: Thomas Renninger <[email protected]>
> Cc: "Mark M. Hoffman" <[email protected]>
> Cc: Len Brown <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>
> ---
>
> drivers/hwmon/dme1737.c | 5 +++++
> drivers/hwmon/f71805f.c | 5 +++++
> drivers/hwmon/f71882fg.c | 5 +++++
> drivers/hwmon/it87.c | 5 +++++
> drivers/hwmon/pc87360.c | 6 ++++++
> drivers/hwmon/pc87427.c | 5 +++++
> drivers/hwmon/sis5595.c | 5 +++++
> drivers/hwmon/smsc47b397.c | 5 +++++
> drivers/hwmon/smsc47m1.c | 5 +++++
> drivers/hwmon/via686a.c | 5 +++++
> drivers/hwmon/vt1211.c | 5 +++++
> drivers/hwmon/vt8231.c | 5 +++++
> drivers/hwmon/w83627ehf.c | 6 ++++++
> drivers/hwmon/w83627hf.c | 5 +++++
> 14 files changed, 72 insertions(+)
>
> diff -puN drivers/hwmon/dme1737.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/dme1737.c
> --- a/drivers/hwmon/dme1737.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/dme1737.c
> @@ -34,6 +34,7 @@
> #include <linux/hwmon-vid.h>
> #include <linux/err.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> /* ISA device, if found */
> @@ -2238,6 +2239,10 @@ static int __init dme1737_isa_device_add
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> if (!(pdev = platform_device_alloc("dme1737", addr))) {
> printk(KERN_ERR "dme1737: Failed to allocate device.\n");
> err = -ENOMEM;
> diff -puN drivers/hwmon/f71805f.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/f71805f.c
> --- a/drivers/hwmon/f71805f.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/f71805f.c
> @@ -39,6 +39,7 @@
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> #include <linux/ioport.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static unsigned short force_id;
> @@ -1455,6 +1456,10 @@ static int __init f71805f_device_add(uns
> }
>
> res.name = pdev->name;
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit_device_put;
> +
> err = platform_device_add_resources(pdev, &res, 1);
> if (err) {
> printk(KERN_ERR DRVNAME ": Device resource addition failed "
> diff -puN drivers/hwmon/f71882fg.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/f71882fg.c
> --- a/drivers/hwmon/f71882fg.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/f71882fg.c
> @@ -27,6 +27,7 @@
> #include <linux/hwmon-sysfs.h>
> #include <linux/err.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> #define DRVNAME "f71882fg"
> @@ -898,6 +899,10 @@ static int __init f71882fg_device_add(un
> return -ENOMEM;
>
> res.name = f71882fg_pdev->name;
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + return err;
> +
> err = platform_device_add_resources(f71882fg_pdev, &res, 1);
> if (err) {
> printk(KERN_ERR DRVNAME ": Device resource addition failed\n");
> diff -puN drivers/hwmon/it87.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/it87.c
> --- a/drivers/hwmon/it87.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/it87.c
> @@ -46,6 +46,7 @@
> #include <linux/err.h>
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> #define DRVNAME "it87"
> @@ -1487,6 +1488,10 @@ static int __init it87_device_add(unsign
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc(DRVNAME, address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/pc87360.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/pc87360.c
> --- a/drivers/hwmon/pc87360.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/pc87360.c
> @@ -43,6 +43,7 @@
> #include <linux/hwmon-vid.h>
> #include <linux/err.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static u8 devid;
> @@ -1425,6 +1426,11 @@ static int __init pc87360_device_add(uns
> continue;
> res.start = extra_isa[i];
> res.end = extra_isa[i] + PC87360_EXTENT - 1;
> +
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit_device_put;
> +
> err = platform_device_add_resources(pdev, &res, 1);
> if (err) {
> printk(KERN_ERR "pc87360: Device resource[%d] "
> diff -puN drivers/hwmon/pc87427.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/pc87427.c
> --- a/drivers/hwmon/pc87427.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/pc87427.c
> @@ -32,6 +32,7 @@
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> #include <linux/ioport.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static unsigned short force_id;
> @@ -524,6 +525,10 @@ static int __init pc87427_device_add(uns
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc(DRVNAME, address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/sis5595.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/sis5595.c
> --- a/drivers/hwmon/sis5595.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/sis5595.c
> @@ -62,6 +62,7 @@
> #include <linux/jiffies.h>
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
>
> @@ -727,6 +728,10 @@ static int __devinit sis5595_device_add(
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc("sis5595", address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/smsc47b397.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/smsc47b397.c
> --- a/drivers/hwmon/smsc47b397.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/smsc47b397.c
> @@ -36,6 +36,7 @@
> #include <linux/err.h>
> #include <linux/init.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static unsigned short force_id;
> @@ -303,6 +304,10 @@ static int __init smsc47b397_device_add(
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc(DRVNAME, address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/smsc47m1.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/smsc47m1.c
> --- a/drivers/hwmon/smsc47m1.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/smsc47m1.c
> @@ -37,6 +37,7 @@
> #include <linux/init.h>
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static unsigned short force_id;
> @@ -686,6 +687,10 @@ static int __init smsc47m1_device_add(un
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc(DRVNAME, address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/via686a.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/via686a.c
> --- a/drivers/hwmon/via686a.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/via686a.c
> @@ -41,6 +41,7 @@
> #include <linux/init.h>
> #include <linux/mutex.h>
> #include <linux/sysfs.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
>
> @@ -755,6 +756,10 @@ static int __devinit via686a_device_add(
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc("via686a", address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/vt1211.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/vt1211.c
> --- a/drivers/hwmon/vt1211.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/vt1211.c
> @@ -32,6 +32,7 @@
> #include <linux/err.h>
> #include <linux/mutex.h>
> #include <linux/ioport.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static int uch_config = -1;
> @@ -1259,6 +1260,10 @@ static int __init vt1211_device_add(unsi
> }
>
> res.name = pdev->name;
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto EXIT;
> +
> err = platform_device_add_resources(pdev, &res, 1);
> if (err) {
> printk(KERN_ERR DRVNAME ": Device resource addition failed "
> diff -puN drivers/hwmon/vt8231.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/vt8231.c
> --- a/drivers/hwmon/vt8231.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/vt8231.c
> @@ -35,6 +35,7 @@
> #include <linux/hwmon-vid.h>
> #include <linux/err.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
>
> static int force_addr;
> @@ -858,6 +859,10 @@ static int __devinit vt8231_device_add(u
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc("vt8231", address);
> if (!pdev) {
> err = -ENOMEM;
> diff -puN drivers/hwmon/w83627ehf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/w83627ehf.c
> --- a/drivers/hwmon/w83627ehf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/w83627ehf.c
> @@ -48,6 +48,7 @@
> #include <linux/hwmon-vid.h>
> #include <linux/err.h>
> #include <linux/mutex.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
> #include "lm75.h"
>
> @@ -1544,6 +1545,11 @@ static int __init sensors_w83627ehf_init
> res.start = address + IOREGION_OFFSET;
> res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
> res.flags = IORESOURCE_IO;
> +
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> err = platform_device_add_resources(pdev, &res, 1);
> if (err) {
> printk(KERN_ERR DRVNAME ": Device resource addition failed "
> diff -puN drivers/hwmon/w83627hf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers drivers/hwmon/w83627hf.c
> --- a/drivers/hwmon/w83627hf.c~check-for-acpi-resource-conflicts-in-hwmon-drivers
> +++ a/drivers/hwmon/w83627hf.c
> @@ -50,6 +50,7 @@
> #include <linux/err.h>
> #include <linux/mutex.h>
> #include <linux/ioport.h>
> +#include <linux/acpi.h>
> #include <asm/io.h>
> #include "lm75.h"
>
> @@ -1746,6 +1747,10 @@ static int __init w83627hf_device_add(un
> };
> int err;
>
> + err = acpi_check_resource_conflict(&res);
> + if (err)
> + goto exit;
> +
> pdev = platform_device_alloc(DRVNAME, address);
> if (!pdev) {
> err = -ENOMEM;
> _
>
Hi Andrew,
On Thu, 7 Feb 2008 23:40:02 -0800, Andrew Morton wrote:
> On Wed, 24 Oct 2007 16:32:59 +0200 Thomas Renninger <[email protected]> wrote:
>
> > Provide acpi_check_{mem_}region.
> >
> > Drivers can additionally check against possible ACPI interference by also
> > invoking this shortly before they call request_region.
> > If -EBUSY is returned, the driver must not load.
> > Use acpi_enforce_resources=strict/lax/no options to:
> > - strict: let conflicting drivers fail to load with an error message
> > - lax: let conflicting driver work normal with a warning message
> > - no: no functional change at all
> >
> >
>
> OK, so Len has merged these into the acpi test tree. My understanding is
> that once this work hits mainline, we can then merge
> check-for-acpi-resource-conflicts-in-hwmon-drivers.patch.
Correct. Same applies to a second patch:
check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
Both patches should be merged upstream at the same time.
> My normal approach would be to send
> check-for-acpi-resource-conflicts-in-hwmon-drivers.patch to Mark for
> inclusion in git-hwmon one Len has merged the prerequisites into mainline.
>
> Problem is, if Len merges late in the 2.6.26 merge window, Mark might not
> have time to gets these changes into mainline before 2.6.27. Which is all
> getting a bit dumb considering I first merged everything in October.
> Fortunately things aren't mormally _this_ inefficient when one follows the
> rules - this was an unusual patchset.
>
> But still, I think we could afford to speed things up a bit more than that.
> We could ask Len to consider merging this work into 2.6.25 and then if
> Mark can ack check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
> (below) for an akpm-merge, we're good to go. But I do recall that people
> were a bit uncertain about it all back in October.
>
> Please share your thoughts with us.
Len already merged all the acpi bits for 2.6.25 as far as I can see, so
all that is missing now is these two patches:
check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
Both have been in -mm for quite some time.
In the default mode (acpi_enforce_resources=lax) these patches simply
print warnings but still let the drivers load, so they are safe to
merge, and the sooner, the better. The idea is to get feedback on how
many systems out there have ACPI resource conflicts. Then we'll see how
we can address them (if at all.)
I don't remember anyone objecting to these patches, and anyway the
problem has been there for years and nobody took care, so if anyone
really isn't happy with the solution designed by Thomas, that person
will have to do the work and submit something better later. That
shouldn't delay the merge of what we have now.
Andrew, both patches are
Acked-by: Jean Delvare <[email protected]>
and I am totally fine with you pushing them to Linus now. But of course
having Mark's ack would be good too.
Thanks,
--
Jean Delvare
On Sun, 10 Feb 2008 13:25:36 +0100
Jean Delvare <[email protected]> wrote:
> Hi Andrew,
>
> On Thu, 7 Feb 2008 23:40:02 -0800, Andrew Morton wrote:
> > On Wed, 24 Oct 2007 16:32:59 +0200 Thomas Renninger <[email protected]> wrote:
> >
> > > Provide acpi_check_{mem_}region.
> > >
> > > Drivers can additionally check against possible ACPI interference by also
> > > invoking this shortly before they call request_region.
> > > If -EBUSY is returned, the driver must not load.
> > > Use acpi_enforce_resources=strict/lax/no options to:
> > > - strict: let conflicting drivers fail to load with an error message
> > > - lax: let conflicting driver work normal with a warning message
> > > - no: no functional change at all
> > >
> > >
> >
> > OK, so Len has merged these into the acpi test tree. My understanding is
> > that once this work hits mainline, we can then merge
> > check-for-acpi-resource-conflicts-in-hwmon-drivers.patch.
>
> Correct. Same applies to a second patch:
> check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
> Both patches should be merged upstream at the same time.
>
> > My normal approach would be to send
> > check-for-acpi-resource-conflicts-in-hwmon-drivers.patch to Mark for
> > inclusion in git-hwmon one Len has merged the prerequisites into mainline.
> >
> > Problem is, if Len merges late in the 2.6.26 merge window, Mark might not
> > have time to gets these changes into mainline before 2.6.27. Which is all
> > getting a bit dumb considering I first merged everything in October.
> > Fortunately things aren't mormally _this_ inefficient when one follows the
> > rules - this was an unusual patchset.
> >
> > But still, I think we could afford to speed things up a bit more than that.
> > We could ask Len to consider merging this work into 2.6.25 and then if
> > Mark can ack check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
> > (below) for an akpm-merge, we're good to go. But I do recall that people
> > were a bit uncertain about it all back in October.
> >
> > Please share your thoughts with us.
>
> Len already merged all the acpi bits for 2.6.25 as far as I can see, so
> all that is missing now is these two patches:
> check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
> check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
> Both have been in -mm for quite some time.
Yup, the prerequisites appear to be in mainline now.
> In the default mode (acpi_enforce_resources=lax) these patches simply
> print warnings but still let the drivers load, so they are safe to
> merge, and the sooner, the better. The idea is to get feedback on how
> many systems out there have ACPI resource conflicts. Then we'll see how
> we can address them (if at all.)
>
> I don't remember anyone objecting to these patches, and anyway the
> problem has been there for years and nobody took care, so if anyone
> really isn't happy with the solution designed by Thomas, that person
> will have to do the work and submit something better later. That
> shouldn't delay the merge of what we have now.
>
> Andrew, both patches are
>
> Acked-by: Jean Delvare <[email protected]>
We already have Signed-off-by:you, which I figure outranks acked-by: ;)
> and I am totally fine with you pushing them to Linus now. But of course
> having Mark's ack would be good too.
That would be nice. But I'll merge them mid-week anyway unless Mark actually
nacks them:
http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
Thanks.
On Mon, 11 Feb 2008 11:55:46 -0800, Andrew Morton wrote:
> On Sun, 10 Feb 2008 13:25:36 +0100 Jean Delvare wrote:
> > Andrew, both patches are
> >
> > Acked-by: Jean Delvare <[email protected]>
>
> We already have Signed-off-by:you, which I figure outranks acked-by: ;)
Yeah but that wasn't the same me. That was me-developer-at-suse,
who doesn't yet have the same aura as
me-maintainer-of-i2c-and-former-maintainer-of-hwmon ;)
> > and I am totally fine with you pushing them to Linus now. But of course
> > having Mark's ack would be good too.
>
> That would be nice. But I'll merge them mid-week anyway unless Mark actually
> nacks them:
>
> http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
>
> http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
Yeah, sounds like a good plan, thanks for taking care.
--
Jean Delvare
Hi Andrew, Jean:
* Jean Delvare <[email protected]> [2008-02-11 22:18:29 +0100]:
> On Mon, 11 Feb 2008 11:55:46 -0800, Andrew Morton wrote:
> > On Sun, 10 Feb 2008 13:25:36 +0100 Jean Delvare wrote:
> > > Andrew, both patches are
> > >
> > > Acked-by: Jean Delvare <[email protected]>
> >
> > We already have Signed-off-by:you, which I figure outranks acked-by: ;)
>
> Yeah but that wasn't the same me. That was me-developer-at-suse,
> who doesn't yet have the same aura as
> me-maintainer-of-i2c-and-former-maintainer-of-hwmon ;)
>
> > > and I am totally fine with you pushing them to Linus now. But of course
> > > having Mark's ack would be good too.
> >
> > That would be nice. But I'll merge them mid-week anyway unless Mark actually
> > nacks them:
> >
> > http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
> >
> > http://userweb.kernel.org/~akpm/mmotm/broken-out/check-for-acpi-resource-conflicts-in-i2c-bus-drivers.patch
>
> Yeah, sounds like a good plan, thanks for taking care.
OK, I pulled the first of those into my hwmon testing tree and merged
it, since there are trivial conflicts with some of the other patches
already there. I'll send it to Linus before -rc2.
Andrew: hopefully that makes your life .001% easier. ;)
Regards,
--
Mark M. Hoffman
[email protected]