Skip to content

Commit

Permalink
[PATCH] USBATM: semaphore to mutex conversion
Browse files Browse the repository at this point in the history
This is the usbatm part of the Arjan, Jes and Ingo
mass semaphore to mutex conversion, reworked to apply on top
of the patches I just sent to you.  This time, with correct
attribution and signed-off lines.

Signed-off-by: Arjan van de Ven <arjan@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Duncan Sands <baldrick@free.fr>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Arjan van de Ven authored and Greg Kroah-Hartman committed Feb 1, 2006
1 parent a3673d3 commit ab3c81f
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 32 deletions.
9 changes: 5 additions & 4 deletions drivers/usb/atm/cxacru.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include <linux/init.h>
#include <linux/device.h> /* FIXME: linux/firmware.h should include it itself */
#include <linux/firmware.h>
#include <linux/mutex.h>

#include "usbatm.h"

Expand Down Expand Up @@ -160,7 +161,7 @@ struct cxacru_data {
struct work_struct poll_work;

/* contol handles */
struct semaphore cm_serialize;
struct mutex cm_serialize;
u8 *rcv_buf;
u8 *snd_buf;
struct urb *rcv_urb;
Expand Down Expand Up @@ -219,7 +220,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
goto fail;
}

down(&instance->cm_serialize);
mutex_lock(&instance->cm_serialize);

/* submit reading urb before the writing one */
init_completion(&instance->rcv_done);
Expand Down Expand Up @@ -288,7 +289,7 @@ static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
ret = offd;
dbg("cm %#x", cm);
fail:
up(&instance->cm_serialize);
mutex_unlock(&instance->cm_serialize);
return ret;
}

Expand Down Expand Up @@ -717,7 +718,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,
instance->snd_buf, PAGE_SIZE,
cxacru_blocking_completion, &instance->snd_done, 4);

init_MUTEX(&instance->cm_serialize);
mutex_init(&instance->cm_serialize);

INIT_WORK(&instance->poll_work, (void *)cxacru_poll_status, instance);

Expand Down
27 changes: 14 additions & 13 deletions drivers/usb/atm/ueagle-atm.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
#include <linux/ctype.h>
#include <linux/kthread.h>
#include <linux/version.h>
#include <linux/mutex.h>
#include <asm/unaligned.h>

#include "usbatm.h"
Expand Down Expand Up @@ -358,7 +359,7 @@ struct intr_pkt {
#define INTR_PKT_SIZE 28

static struct usb_driver uea_driver;
static DECLARE_MUTEX(uea_semaphore);
static DEFINE_MUTEX(uea_mutex);
static const char *chip_name[] = {"ADI930", "Eagle I", "Eagle II", "Eagle III"};

static int modem_index;
Expand Down Expand Up @@ -1418,13 +1419,13 @@ static ssize_t read_status(struct device *dev, struct device_attribute *attr,
int ret = -ENODEV;
struct uea_softc *sc;

down(&uea_semaphore);
mutex_lock(&uea_mutex);
sc = dev_to_uea(dev);
if (!sc)
goto out;
ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.state);
out:
up(&uea_semaphore);
mutex_unlock(&uea_mutex);
return ret;
}

Expand All @@ -1434,14 +1435,14 @@ static ssize_t reboot(struct device *dev, struct device_attribute *attr,
int ret = -ENODEV;
struct uea_softc *sc;

down(&uea_semaphore);
mutex_lock(&uea_mutex);
sc = dev_to_uea(dev);
if (!sc)
goto out;
sc->reset = 1;
ret = count;
out:
up(&uea_semaphore);
mutex_unlock(&uea_mutex);
return ret;
}

Expand All @@ -1453,7 +1454,7 @@ static ssize_t read_human_status(struct device *dev, struct device_attribute *at
int ret = -ENODEV;
struct uea_softc *sc;

down(&uea_semaphore);
mutex_lock(&uea_mutex);
sc = dev_to_uea(dev);
if (!sc)
goto out;
Expand All @@ -1473,7 +1474,7 @@ static ssize_t read_human_status(struct device *dev, struct device_attribute *at
break;
}
out:
up(&uea_semaphore);
mutex_unlock(&uea_mutex);
return ret;
}

Expand All @@ -1485,7 +1486,7 @@ static ssize_t read_delin(struct device *dev, struct device_attribute *attr,
int ret = -ENODEV;
struct uea_softc *sc;

down(&uea_semaphore);
mutex_lock(&uea_mutex);
sc = dev_to_uea(dev);
if (!sc)
goto out;
Expand All @@ -1497,7 +1498,7 @@ static ssize_t read_delin(struct device *dev, struct device_attribute *attr,
else
ret = sprintf(buf, "GOOD\n");
out:
up(&uea_semaphore);
mutex_unlock(&uea_mutex);
return ret;
}

Expand All @@ -1511,15 +1512,15 @@ static ssize_t read_##name(struct device *dev, \
int ret = -ENODEV; \
struct uea_softc *sc; \
\
down(&uea_semaphore); \
mutex_lock(&uea_mutex); \
sc = dev_to_uea(dev); \
if (!sc) \
goto out; \
ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.name); \
if (reset) \
sc->stats.phy.name = 0; \
out: \
up(&uea_semaphore); \
mutex_unlock(&uea_mutex); \
return ret; \
} \
\
Expand Down Expand Up @@ -1737,9 +1738,9 @@ static void uea_disconnect(struct usb_interface *intf)
* Pre-firmware device has one interface
*/
if (usb->config->desc.bNumInterfaces != 1 && ifnum == 0) {
down(&uea_semaphore);
mutex_lock(&uea_mutex);
usbatm_usb_disconnect(intf);
up(&uea_semaphore);
mutex_unlock(&uea_mutex);
uea_info(usb, "ADSL device removed\n");
}

Expand Down
28 changes: 14 additions & 14 deletions drivers/usb/atm/usbatm.c
Original file line number Diff line number Diff line change
Expand Up @@ -823,7 +823,7 @@ static int usbatm_atm_open(struct atm_vcc *vcc)
return -EINVAL;
}

down(&instance->serialize); /* vs self, usbatm_atm_close, usbatm_usb_disconnect */
mutex_lock(&instance->serialize); /* vs self, usbatm_atm_close, usbatm_usb_disconnect */

if (instance->disconnected) {
atm_dbg(instance, "%s: disconnected!\n", __func__);
Expand Down Expand Up @@ -867,15 +867,15 @@ static int usbatm_atm_open(struct atm_vcc *vcc)
set_bit(ATM_VF_PARTIAL, &vcc->flags);
set_bit(ATM_VF_READY, &vcc->flags);

up(&instance->serialize);
mutex_unlock(&instance->serialize);

atm_dbg(instance, "%s: allocated vcc data 0x%p\n", __func__, new);

return 0;

fail:
kfree(new);
up(&instance->serialize);
mutex_unlock(&instance->serialize);
return ret;
}

Expand All @@ -896,7 +896,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc)

usbatm_cancel_send(instance, vcc);

down(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */
mutex_lock(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */

tasklet_disable(&instance->rx_channel.tasklet);
if (instance->cached_vcc == vcc_data) {
Expand All @@ -919,7 +919,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc)
clear_bit(ATM_VF_PARTIAL, &vcc->flags);
clear_bit(ATM_VF_ADDR, &vcc->flags);

up(&instance->serialize);
mutex_unlock(&instance->serialize);

atm_dbg(instance, "%s successful\n", __func__);
}
Expand Down Expand Up @@ -1009,9 +1009,9 @@ static int usbatm_do_heavy_init(void *arg)
if (!ret)
ret = usbatm_atm_init(instance);

down(&instance->serialize);
mutex_lock(&instance->serialize);
instance->thread_pid = -1;
up(&instance->serialize);
mutex_unlock(&instance->serialize);

complete_and_exit(&instance->thread_exited, ret);
}
Expand All @@ -1025,9 +1025,9 @@ static int usbatm_heavy_init(struct usbatm_data *instance)
return ret;
}

down(&instance->serialize);
mutex_lock(&instance->serialize);
instance->thread_pid = ret;
up(&instance->serialize);
mutex_unlock(&instance->serialize);

wait_for_completion(&instance->thread_started);

Expand Down Expand Up @@ -1110,7 +1110,7 @@ int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id,
/* private fields */

kref_init(&instance->refcount); /* dropped in usbatm_usb_disconnect */
init_MUTEX(&instance->serialize);
mutex_init(&instance->serialize);

instance->thread_pid = -1;
init_completion(&instance->thread_started);
Expand Down Expand Up @@ -1273,18 +1273,18 @@ void usbatm_usb_disconnect(struct usb_interface *intf)

usb_set_intfdata(intf, NULL);

down(&instance->serialize);
mutex_lock(&instance->serialize);
instance->disconnected = 1;
if (instance->thread_pid >= 0)
kill_proc(instance->thread_pid, SIGTERM, 1);
up(&instance->serialize);
mutex_unlock(&instance->serialize);

wait_for_completion(&instance->thread_exited);

down(&instance->serialize);
mutex_lock(&instance->serialize);
list_for_each_entry(vcc_data, &instance->vcc_list, list)
vcc_release_async(vcc_data->vcc, -EPIPE);
up(&instance->serialize);
mutex_unlock(&instance->serialize);

tasklet_disable(&instance->rx_channel.tasklet);
tasklet_disable(&instance->tx_channel.tasklet);
Expand Down
3 changes: 2 additions & 1 deletion drivers/usb/atm/usbatm.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <linux/list.h>
#include <linux/stringify.h>
#include <linux/usb.h>
#include <linux/mutex.h>

/*
#define VERBOSE_DEBUG
Expand Down Expand Up @@ -171,7 +172,7 @@ struct usbatm_data {
********************************/

struct kref refcount;
struct semaphore serialize;
struct mutex serialize;
int disconnected;

/* heavy init */
Expand Down

0 comments on commit ab3c81f

Please sign in to comment.