diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-03 15:45:18 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-03 15:45:18 -0700 |
commit | d39fbab34cc47f08bbc206ac10f5b61b32227da6 (patch) | |
tree | d1a84d7630dd1f795b3ab47db58bdc3e21c90f74 /i2c | |
parent | 645ef8413c0bcb7b3edcfb42f2d44f2151d2bd6e (diff) | |
download | patches-d39fbab34cc47f08bbc206ac10f5b61b32227da6.tar.gz |
new patches
Diffstat (limited to 'i2c')
-rw-r--r-- | i2c/w1-make-w1-connector-notifications-depend-on-connector.patch | 83 | ||||
-rw-r--r-- | i2c/w1-use-mutexes-instead-of-semaphores.patch | 630 |
2 files changed, 713 insertions, 0 deletions
diff --git a/i2c/w1-make-w1-connector-notifications-depend-on-connector.patch b/i2c/w1-make-w1-connector-notifications-depend-on-connector.patch new file mode 100644 index 0000000000000..05a4cf3974a0a --- /dev/null +++ b/i2c/w1-make-w1-connector-notifications-depend-on-connector.patch @@ -0,0 +1,83 @@ +From johnpol@2ka.mipt.ru Mon Apr 3 01:01:38 2006 +Date: Mon, 3 Apr 2006 12:01:12 +0400 +From: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +To: GregKH <greg@kroah.com> +Cc: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +Subject: [1/2] w1: Make w1 connector notifications depend on connector. +Message-ID: <20060403080112.GA14969@2ka.mipt.ru> +Content-Disposition: inline + +Make w1 connector notifications depend on connector. + +Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/w1/Kconfig | 14 +++++++++++++- + drivers/w1/Makefile | 4 ---- + drivers/w1/w1_netlink.c | 4 +--- + 3 files changed, 14 insertions(+), 8 deletions(-) + +--- gregkh-2.6.orig/drivers/w1/Kconfig ++++ gregkh-2.6/drivers/w1/Kconfig +@@ -3,7 +3,7 @@ menu "Dallas's 1-wire bus" + config W1 + tristate "Dallas's 1-wire support" + ---help--- +- Dallas's 1-wire bus is useful to connect slow 1-pin devices ++ Dallas' 1-wire bus is useful to connect slow 1-pin devices + such as iButtons and thermal sensors. + + If you want W1 support, you should say Y here. +@@ -11,6 +11,18 @@ config W1 + This W1 support can also be built as a module. If so, the module + will be called wire.ko. + ++config W1_CON ++ depends on CONNECTOR ++ bool "Userspace communication over connector" ++ default y ++ --- help --- ++ This allows to communicate with userspace using connector [Documentation/connector]. ++ There are three types of messages between w1 core and userspace: ++ 1. Events. They are generated each time new master or slave device found ++ either due to automatic or requested search. ++ 2. Userspace commands. Includes read/write and search/alarm search comamnds. ++ 3. Replies to userspace commands. ++ + source drivers/w1/masters/Kconfig + source drivers/w1/slaves/Kconfig + +--- gregkh-2.6.orig/drivers/w1/Makefile ++++ gregkh-2.6/drivers/w1/Makefile +@@ -2,10 +2,6 @@ + # Makefile for the Dallas's 1-wire bus. + # + +-ifeq ($(CONFIG_CONNECTOR), n) +-EXTRA_CFLAGS += -DNETLINK_DISABLED +-endif +- + ifeq ($(CONFIG_W1_DS2433_CRC), y) + EXTRA_CFLAGS += -DCONFIG_W1_F23_CRC + endif +--- gregkh-2.6.orig/drivers/w1/w1_netlink.c ++++ gregkh-2.6/drivers/w1/w1_netlink.c +@@ -27,7 +27,7 @@ + #include "w1_log.h" + #include "w1_netlink.h" + +-#ifndef NETLINK_DISABLED ++#if defined(CONFIG_W1_CON) && (defined(CONFIG_CONNECTOR) || (defined(CONFIG_CONNECTOR_MODULE) && defined(CONFIG_W1_MODULE))) + void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg) + { + char buf[sizeof(struct cn_msg) + sizeof(struct w1_netlink_msg)]; +@@ -230,8 +230,6 @@ void w1_fini_netlink(void) + cn_del_callback(&w1_id); + } + #else +-#warning Netlink support is disabled. Please compile with NET support enabled. +- + void w1_netlink_send(struct w1_master *dev, struct w1_netlink_msg *msg) + { + } diff --git a/i2c/w1-use-mutexes-instead-of-semaphores.patch b/i2c/w1-use-mutexes-instead-of-semaphores.patch new file mode 100644 index 0000000000000..87026d4474efe --- /dev/null +++ b/i2c/w1-use-mutexes-instead-of-semaphores.patch @@ -0,0 +1,630 @@ +From johnpol@2ka.mipt.ru Mon Apr 3 01:05:00 2006 +Date: Mon, 3 Apr 2006 12:04:27 +0400 +From: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +To: GregKH <greg@kroah.com> +Cc: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +Subject: [2/2] w1: Use mutexes instead of semaphores. +Message-ID: <20060403080425.GA18802@2ka.mipt.ru> +Content-Disposition: inline + +Use mutexes instead of semaphores. +Patch tested on x86_64 and i386 with test bus master driver. + +Signed-off-by: Evgeniy Polyakov <johnpol@2ka.mipt.ru> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/w1/masters/ds2482.c | 24 ++++---- + drivers/w1/masters/ds2490.c | 10 +-- + drivers/w1/slaves/w1_ds2433.c | 20 +------ + drivers/w1/slaves/w1_therm.c | 12 ---- + drivers/w1/w1.c | 114 ++++++++++++++---------------------------- + drivers/w1/w1.h | 5 - + drivers/w1/w1_int.c | 8 +- + drivers/w1/w1_netlink.c | 4 - + 8 files changed, 70 insertions(+), 127 deletions(-) + +--- gregkh-2.6.orig/drivers/w1/masters/ds2482.c ++++ gregkh-2.6/drivers/w1/masters/ds2482.c +@@ -125,7 +125,7 @@ struct ds2482_w1_chan { + + struct ds2482_data { + struct i2c_client client; +- struct semaphore access_lock; ++ struct mutex access_lock; + + /* 1-wire interface(s) */ + int w1_count; /* 1 or 8 */ +@@ -265,7 +265,7 @@ static u8 ds2482_w1_touch_bit(void *data + struct ds2482_data *pdev = pchan->pdev; + int status = -1; + +- down(&pdev->access_lock); ++ mutex_lock(&pdev->access_lock); + + /* Select the channel */ + ds2482_wait_1wire_idle(pdev); +@@ -277,7 +277,7 @@ static u8 ds2482_w1_touch_bit(void *data + bit ? 0xFF : 0)) + status = ds2482_wait_1wire_idle(pdev); + +- up(&pdev->access_lock); ++ mutex_unlock(&pdev->access_lock); + + return (status & DS2482_REG_STS_SBR) ? 1 : 0; + } +@@ -297,7 +297,7 @@ static u8 ds2482_w1_triplet(void *data, + struct ds2482_data *pdev = pchan->pdev; + int status = (3 << 5); + +- down(&pdev->access_lock); ++ mutex_lock(&pdev->access_lock); + + /* Select the channel */ + ds2482_wait_1wire_idle(pdev); +@@ -309,7 +309,7 @@ static u8 ds2482_w1_triplet(void *data, + dbit ? 0xFF : 0)) + status = ds2482_wait_1wire_idle(pdev); + +- up(&pdev->access_lock); ++ mutex_unlock(&pdev->access_lock); + + /* Decode the status */ + return (status >> 5); +@@ -326,7 +326,7 @@ static void ds2482_w1_write_byte(void *d + struct ds2482_w1_chan *pchan = data; + struct ds2482_data *pdev = pchan->pdev; + +- down(&pdev->access_lock); ++ mutex_lock(&pdev->access_lock); + + /* Select the channel */ + ds2482_wait_1wire_idle(pdev); +@@ -336,7 +336,7 @@ static void ds2482_w1_write_byte(void *d + /* Send the write byte command */ + ds2482_send_cmd_data(pdev, DS2482_CMD_1WIRE_WRITE_BYTE, byte); + +- up(&pdev->access_lock); ++ mutex_unlock(&pdev->access_lock); + } + + /** +@@ -351,7 +351,7 @@ static u8 ds2482_w1_read_byte(void *data + struct ds2482_data *pdev = pchan->pdev; + int result; + +- down(&pdev->access_lock); ++ mutex_lock(&pdev->access_lock); + + /* Select the channel */ + ds2482_wait_1wire_idle(pdev); +@@ -370,7 +370,7 @@ static u8 ds2482_w1_read_byte(void *data + /* Read the data byte */ + result = i2c_smbus_read_byte(&pdev->client); + +- up(&pdev->access_lock); ++ mutex_unlock(&pdev->access_lock); + + return result; + } +@@ -389,7 +389,7 @@ static u8 ds2482_w1_reset_bus(void *data + int err; + u8 retval = 1; + +- down(&pdev->access_lock); ++ mutex_lock(&pdev->access_lock); + + /* Select the channel */ + ds2482_wait_1wire_idle(pdev); +@@ -409,7 +409,7 @@ static u8 ds2482_w1_reset_bus(void *data + 0xF0); + } + +- up(&pdev->access_lock); ++ mutex_unlock(&pdev->access_lock); + + return retval; + } +@@ -482,7 +482,7 @@ static int ds2482_detect(struct i2c_adap + snprintf(new_client->name, sizeof(new_client->name), "ds2482-%d00", + data->w1_count); + +- init_MUTEX(&data->access_lock); ++ mutex_init(&data->access_lock); + + /* Tell the I2C layer a new client has arrived */ + if ((err = i2c_attach_client(new_client))) +--- gregkh-2.6.orig/drivers/w1/masters/ds2490.c ++++ gregkh-2.6/drivers/w1/masters/ds2490.c +@@ -169,7 +169,7 @@ static int ds_send_control(struct ds_dev + static int ds_send_control_cmd(struct ds_device *, u16, u16); + + static LIST_HEAD(ds_devices); +-static DECLARE_MUTEX(ds_mutex); ++static DEFINE_MUTEX(ds_mutex); + + static struct usb_driver ds_driver = { + .name = "DS9490R", +@@ -887,9 +887,9 @@ static int ds_probe(struct usb_interface + if (err) + goto err_out_clear; + +- down(&ds_mutex); ++ mutex_lock(&ds_mutex); + list_add_tail(&dev->ds_entry, &ds_devices); +- up(&ds_mutex); ++ mutex_unlock(&ds_mutex); + + return 0; + +@@ -909,9 +909,9 @@ static void ds_disconnect(struct usb_int + if (!dev) + return; + +- down(&ds_mutex); ++ mutex_lock(&ds_mutex); + list_del(&dev->ds_entry); +- up(&ds_mutex); ++ mutex_unlock(&ds_mutex); + + ds_w1_fini(dev); + +--- gregkh-2.6.orig/drivers/w1/slaves/w1_ds2433.c ++++ gregkh-2.6/drivers/w1/slaves/w1_ds2433.c +@@ -105,11 +105,7 @@ static ssize_t w1_f23_read_bin(struct ko + if ((count = w1_f23_fix_count(off, count, W1_EEPROM_SIZE)) == 0) + return 0; + +- atomic_inc(&sl->refcnt); +- if (down_interruptible(&sl->master->mutex)) { +- count = 0; +- goto out_dec; +- } ++ mutex_lock(&sl->master->mutex); + + #ifdef CONFIG_W1_F23_CRC + +@@ -140,9 +136,7 @@ static ssize_t w1_f23_read_bin(struct ko + #endif /* CONFIG_W1_F23_CRC */ + + out_up: +- up(&sl->master->mutex); +-out_dec: +- atomic_dec(&sl->refcnt); ++ mutex_unlock(&sl->master->mutex); + + return count; + } +@@ -231,11 +225,7 @@ static ssize_t w1_f23_write_bin(struct k + } + #endif /* CONFIG_W1_F23_CRC */ + +- atomic_inc(&sl->refcnt); +- if (down_interruptible(&sl->master->mutex)) { +- count = 0; +- goto out_dec; +- } ++ mutex_lock(&sl->master->mutex); + + /* Can only write data to one page at a time */ + idx = 0; +@@ -253,9 +243,7 @@ static ssize_t w1_f23_write_bin(struct k + } + + out_up: +- up(&sl->master->mutex); +-out_dec: +- atomic_dec(&sl->refcnt); ++ mutex_unlock(&sl->master->mutex); + + return count; + } +--- gregkh-2.6.orig/drivers/w1/slaves/w1_therm.c ++++ gregkh-2.6/drivers/w1/slaves/w1_therm.c +@@ -165,12 +165,7 @@ static ssize_t w1_therm_read_bin(struct + u8 rom[9], crc, verdict; + int i, max_trying = 10; + +- atomic_inc(&sl->refcnt); +- smp_mb__after_atomic_inc(); +- if (down_interruptible(&sl->master->mutex)) { +- count = 0; +- goto out_dec; +- } ++ mutex_lock(&sl->master->mutex); + + if (off > W1_SLAVE_DATA_SIZE) { + count = 0; +@@ -233,10 +228,7 @@ static ssize_t w1_therm_read_bin(struct + + count += sprintf(buf + count, "t=%d\n", w1_convert_temp(rom, sl->family->fid)); + out: +- up(&dev->mutex); +-out_dec: +- smp_mb__before_atomic_inc(); +- atomic_dec(&sl->refcnt); ++ mutex_unlock(&dev->mutex); + + return count; + } +--- gregkh-2.6.orig/drivers/w1/w1.c ++++ gregkh-2.6/drivers/w1/w1.c +@@ -54,7 +54,7 @@ module_param_named(control_timeout, w1_c + module_param_named(max_slave_count, w1_max_slave_count, int, 0); + module_param_named(slave_ttl, w1_max_slave_ttl, int, 0); + +-DECLARE_MUTEX(w1_mlock); ++DEFINE_MUTEX(w1_mlock); + LIST_HEAD(w1_masters); + + static struct task_struct *w1_control_thread; +@@ -139,11 +139,7 @@ static ssize_t w1_default_write(struct k + { + struct w1_slave *sl = kobj_to_w1_slave(kobj); + +- if (down_interruptible(&sl->master->mutex)) { +- count = 0; +- goto out; +- } +- ++ mutex_lock(&sl->master->mutex); + if (w1_reset_select_slave(sl)) { + count = 0; + goto out_up; +@@ -152,8 +148,7 @@ static ssize_t w1_default_write(struct k + w1_write_block(sl->master, buf, count); + + out_up: +- up(&sl->master->mutex); +-out: ++ mutex_unlock(&sl->master->mutex); + return count; + } + +@@ -161,15 +156,9 @@ static ssize_t w1_default_read(struct ko + { + struct w1_slave *sl = kobj_to_w1_slave(kobj); + +- if (down_interruptible(&sl->master->mutex)) { +- count = 0; +- goto out; +- } +- ++ mutex_lock(&sl->master->mutex); + w1_read_block(sl->master, buf, count); +- +- up(&sl->master->mutex); +-out: ++ mutex_unlock(&sl->master->mutex); + return count; + } + +@@ -243,12 +232,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible (&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "%s\n", md->name); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + + return count; + } +@@ -259,12 +245,9 @@ static ssize_t w1_master_attribute_store + { + struct w1_master *md = dev_to_w1_master(dev); + +- if (down_interruptible (&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + md->search_count = simple_strtol(buf, NULL, 0); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + + return count; + } +@@ -276,12 +259,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible (&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "%d\n", md->search_count); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + + return count; + } +@@ -291,12 +271,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible(&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "0x%p\n", md->bus_master); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + return count; + } + +@@ -312,12 +289,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible(&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "%d\n", md->max_slave_count); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + return count; + } + +@@ -326,12 +300,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible(&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "%lu\n", md->attempts); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + return count; + } + +@@ -340,12 +311,9 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + ssize_t count; + +- if (down_interruptible(&md->mutex)) +- return -EBUSY; +- ++ mutex_lock(&md->mutex); + count = sprintf(buf, "%d\n", md->slave_count); +- +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + return count; + } + +@@ -354,8 +322,7 @@ static ssize_t w1_master_attribute_show_ + struct w1_master *md = dev_to_w1_master(dev); + int c = PAGE_SIZE; + +- if (down_interruptible(&md->mutex)) +- return -EBUSY; ++ mutex_lock(&md->mutex); + + if (md->slave_count == 0) + c -= snprintf(buf + PAGE_SIZE - c, c, "not found.\n"); +@@ -370,7 +337,7 @@ static ssize_t w1_master_attribute_show_ + } + } + +- up(&md->mutex); ++ mutex_unlock(&md->mutex); + + return PAGE_SIZE - c; + } +@@ -620,7 +587,7 @@ static struct w1_master *w1_search_maste + struct w1_master *dev; + int found = 0; + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_for_each_entry(dev, &w1_masters, w1_master_entry) { + if (dev->bus_master->data == data) { + found = 1; +@@ -628,7 +595,7 @@ static struct w1_master *w1_search_maste + break; + } + } +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + + return (found)?dev:NULL; + } +@@ -638,7 +605,7 @@ struct w1_master *w1_search_master_id(u3 + struct w1_master *dev; + int found = 0; + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_for_each_entry(dev, &w1_masters, w1_master_entry) { + if (dev->id == id) { + found = 1; +@@ -646,7 +613,7 @@ struct w1_master *w1_search_master_id(u3 + break; + } + } +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + + return (found)?dev:NULL; + } +@@ -657,9 +624,9 @@ struct w1_slave *w1_search_slave(struct + struct w1_slave *sl = NULL; + int found = 0; + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_for_each_entry(dev, &w1_masters, w1_master_entry) { +- down(&dev->mutex); ++ mutex_lock(&dev->mutex); + list_for_each_entry(sl, &dev->slist, w1_slave_entry) { + if (sl->reg_num.family == id->family && + sl->reg_num.id == id->id && +@@ -670,12 +637,12 @@ struct w1_slave *w1_search_slave(struct + break; + } + } +- up(&dev->mutex); ++ mutex_unlock(&dev->mutex); + + if (found) + break; + } +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + + return (found)?sl:NULL; + } +@@ -684,13 +651,13 @@ void w1_reconnect_slaves(struct w1_famil + { + struct w1_master *dev; + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_for_each_entry(dev, &w1_masters, w1_master_entry) { + dev_dbg(&dev->dev, "Reconnecting slaves in %s into new family %02x.\n", + dev->name, f->fid); + set_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); + } +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + } + + static void w1_slave_found(void *data, u64 rn) +@@ -845,23 +812,23 @@ static int w1_control(void *data) + if (kthread_should_stop() || test_bit(W1_MASTER_NEED_EXIT, &dev->flags)) { + set_bit(W1_MASTER_NEED_EXIT, &dev->flags); + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_del(&dev->w1_master_entry); +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + +- down(&dev->mutex); ++ mutex_lock(&dev->mutex); + list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { + w1_slave_detach(sl); + } + w1_destroy_master_attributes(dev); +- up(&dev->mutex); ++ mutex_unlock(&dev->mutex); + atomic_dec(&dev->refcnt); + continue; + } + + if (test_bit(W1_MASTER_NEED_RECONNECT, &dev->flags)) { + dev_dbg(&dev->dev, "Reconnecting slaves in device %s.\n", dev->name); +- down(&dev->mutex); ++ mutex_lock(&dev->mutex); + list_for_each_entry_safe(sl, sln, &dev->slist, w1_slave_entry) { + if (sl->family->fid == W1_FAMILY_DEFAULT) { + struct w1_reg_num rn; +@@ -874,7 +841,7 @@ static int w1_control(void *data) + } + dev_dbg(&dev->dev, "Reconnecting slaves in device %s has been finished.\n", dev->name); + clear_bit(W1_MASTER_NEED_RECONNECT, &dev->flags); +- up(&dev->mutex); ++ mutex_unlock(&dev->mutex); + } + } + } +@@ -921,12 +888,9 @@ int w1_process(void *data) + if (dev->search_count == 0) + continue; + +- if (down_interruptible(&dev->mutex)) +- continue; +- ++ mutex_lock(&dev->mutex); + w1_search_process(dev, W1_SEARCH); +- +- up(&dev->mutex); ++ mutex_unlock(&dev->mutex); + } + + atomic_dec(&dev->refcnt); +--- gregkh-2.6.orig/drivers/w1/w1.h ++++ gregkh-2.6/drivers/w1/w1.h +@@ -41,8 +41,7 @@ struct w1_reg_num + + #include <linux/completion.h> + #include <linux/device.h> +- +-#include <asm/semaphore.h> ++#include <linux/mutex.h> + + #include "w1_family.h" + +@@ -171,7 +170,7 @@ struct w1_master + long flags; + + struct task_struct *thread; +- struct semaphore mutex; ++ struct mutex mutex; + + struct device_driver *driver; + struct device dev; +--- gregkh-2.6.orig/drivers/w1/w1_int.c ++++ gregkh-2.6/drivers/w1/w1_int.c +@@ -36,7 +36,7 @@ extern struct device w1_master_device; + extern int w1_max_slave_count; + extern int w1_max_slave_ttl; + extern struct list_head w1_masters; +-extern struct semaphore w1_mlock; ++extern struct mutex w1_mlock; + + extern int w1_process(void *); + +@@ -74,7 +74,7 @@ static struct w1_master * w1_alloc_dev(u + atomic_set(&dev->refcnt, 2); + + INIT_LIST_HEAD(&dev->slist); +- init_MUTEX(&dev->mutex); ++ mutex_init(&dev->mutex); + + memcpy(&dev->dev, device, sizeof(struct device)); + snprintf(dev->dev.bus_id, sizeof(dev->dev.bus_id), +@@ -135,9 +135,9 @@ int w1_add_master_device(struct w1_bus_m + + dev->initialized = 1; + +- down(&w1_mlock); ++ mutex_lock(&w1_mlock); + list_add(&dev->w1_master_entry, &w1_masters); +- up(&w1_mlock); ++ mutex_unlock(&w1_mlock); + + memset(&msg, 0, sizeof(msg)); + msg.id.mst.id = dev->id; +--- gregkh-2.6.orig/drivers/w1/w1_netlink.c ++++ gregkh-2.6/drivers/w1/w1_netlink.c +@@ -171,7 +171,7 @@ static void w1_cn_callback(void *data) + goto out_cont; + } + +- down(&dev->mutex); ++ mutex_lock(&dev->mutex); + + if (sl && w1_reset_select_slave(sl)) { + err = -ENODEV; +@@ -198,7 +198,7 @@ out_up: + atomic_dec(&dev->refcnt); + if (sl) + atomic_dec(&sl->refcnt); +- up(&dev->mutex); ++ mutex_unlock(&dev->mutex); + out_cont: + msg->len -= sizeof(struct w1_netlink_msg) + m->len; + m = (struct w1_netlink_msg *)(((u8 *)m) + sizeof(struct w1_netlink_msg) + m->len); |