#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/kernel.h>
+#include <linux/config.h>
#include <linux/string.h>
#include <linux/major.h>
#include <linux/errno.h>
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
if (socket->dev.dev != dev)
continue;
- mutex_lock(&socket->skt_mutex);
+ down(&socket->skt_sem);
socket_suspend(socket);
- mutex_unlock(&socket->skt_mutex);
+ up(&socket->skt_sem);
}
up_read(&pcmcia_socket_list_rwsem);
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
if (socket->dev.dev != dev)
continue;
- mutex_lock(&socket->skt_mutex);
+ down(&socket->skt_sem);
socket_resume(socket);
- mutex_unlock(&socket->skt_mutex);
+ up(&socket->skt_sem);
}
up_read(&pcmcia_socket_list_rwsem);
init_completion(&socket->socket_released);
init_completion(&socket->thread_done);
init_waitqueue_head(&socket->thread_wait);
- mutex_init(&socket->skt_mutex);
+ init_MUTEX(&socket->skt_sem);
spin_lock_init(&socket->thread_lock);
ret = kernel_thread(pccardd, socket, CLONE_KERNEL);
cb_free(s);
#endif
s->functions = 0;
+ kfree(s->config);
+ s->config = NULL;
s->ops->get_status(s, &status);
if (status & SS_POWERON) {
spin_unlock_irqrestore(&skt->thread_lock, flags);
if (events) {
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
if (events & SS_DETECT)
socket_detect_change(skt);
if (events & SS_BATDEAD)
send_event(skt, CS_EVENT_BATTERY_LOW, CS_EVENT_PRI_LOW);
if (events & SS_READY)
send_event(skt, CS_EVENT_READY_CHANGE, CS_EVENT_PRI_LOW);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
continue;
}
{
int ret = 0;
- /* s->skt_mutex also protects s->callback */
- mutex_lock(&s->skt_mutex);
+ /* s->skt_sem also protects s->callback */
+ down(&s->skt_sem);
if (c) {
/* registration */
} else
s->callback = NULL;
err:
- mutex_unlock(&s->skt_mutex);
+ up(&s->skt_sem);
return ret;
}
cs_dbg(skt, 1, "resetting socket\n");
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
do {
if (!(skt->state & SOCKET_PRESENT)) {
ret = CS_NO_CARD;
ret = CS_SUCCESS;
} while (0);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
return ret;
} /* reset_card */
cs_dbg(skt, 1, "suspending socket\n");
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
do {
if (!(skt->state & SOCKET_PRESENT)) {
ret = CS_NO_CARD;
}
ret = socket_suspend(skt);
} while (0);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
return ret;
} /* suspend_card */
cs_dbg(skt, 1, "waking up socket\n");
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
do {
if (!(skt->state & SOCKET_PRESENT)) {
ret = CS_NO_CARD;
if (!ret && skt->callback)
skt->callback->resume(skt);
} while (0);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
return ret;
} /* resume_card */
cs_dbg(skt, 1, "user eject request\n");
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
do {
if (!(skt->state & SOCKET_PRESENT)) {
ret = -ENODEV;
socket_remove(skt);
ret = 0;
} while (0);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
return ret;
} /* eject_card */
cs_dbg(skt, 1, "user insert request\n");
- mutex_lock(&skt->skt_mutex);
+ down(&skt->skt_sem);
do {
if (skt->state & SOCKET_PRESENT) {
ret = -EBUSY;
}
ret = 0;
} while (0);
- mutex_unlock(&skt->skt_mutex);
+ up(&skt->skt_sem);
return ret;
} /* insert_card */