git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Freezer: make kernel threads nonfreezable by default
[safe/jmp/linux-2.6]
/
drivers
/
pcmcia
/
cs.c
diff --git
a/drivers/pcmcia/cs.c
b/drivers/pcmcia/cs.c
index
06e2cda
..
7c93a10
100644
(file)
--- a/
drivers/pcmcia/cs.c
+++ b/
drivers/pcmcia/cs.c
@@
-26,9
+26,9
@@
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/pm.h>
-#include <linux/pci.h>
#include <linux/device.h>
#include <linux/kthread.h>
#include <linux/device.h>
#include <linux/kthread.h>
+#include <linux/freezer.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/system.h>
#include <asm/irq.h>
@@
-109,7
+109,7
@@
int pcmcia_socket_dev_suspend(struct device *dev, pm_message_t state)
down_read(&pcmcia_socket_list_rwsem);
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
down_read(&pcmcia_socket_list_rwsem);
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
- if (socket->dev.
dev
!= dev)
+ if (socket->dev.
parent
!= dev)
continue;
mutex_lock(&socket->skt_mutex);
socket_suspend(socket);
continue;
mutex_lock(&socket->skt_mutex);
socket_suspend(socket);
@@
-127,7
+127,7
@@
int pcmcia_socket_dev_resume(struct device *dev)
down_read(&pcmcia_socket_list_rwsem);
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
down_read(&pcmcia_socket_list_rwsem);
list_for_each_entry(socket, &pcmcia_socket_list, socket_list) {
- if (socket->dev.
dev
!= dev)
+ if (socket->dev.
parent
!= dev)
continue;
mutex_lock(&socket->skt_mutex);
socket_resume(socket);
continue;
mutex_lock(&socket->skt_mutex);
socket_resume(socket);
@@
-142,12
+142,12
@@
EXPORT_SYMBOL(pcmcia_socket_dev_resume);
struct pcmcia_socket * pcmcia_get_socket(struct pcmcia_socket *skt)
{
struct pcmcia_socket * pcmcia_get_socket(struct pcmcia_socket *skt)
{
- struct
class_device *cl_dev = class_device_get
(&skt->dev);
- if (!
cl_
dev)
+ struct
device *dev = get_device
(&skt->dev);
+ if (!dev)
return NULL;
return NULL;
- skt =
class_get_devdata(cl_
dev);
+ skt =
dev_get_drvdata(
dev);
if (!try_module_get(skt->owner)) {
if (!try_module_get(skt->owner)) {
-
class_device_put
(&skt->dev);
+
put_device
(&skt->dev);
return NULL;
}
return (skt);
return NULL;
}
return (skt);
@@
-158,14
+158,14
@@
EXPORT_SYMBOL(pcmcia_get_socket);
void pcmcia_put_socket(struct pcmcia_socket *skt)
{
module_put(skt->owner);
void pcmcia_put_socket(struct pcmcia_socket *skt)
{
module_put(skt->owner);
-
class_device_put
(&skt->dev);
+
put_device
(&skt->dev);
}
EXPORT_SYMBOL(pcmcia_put_socket);
}
EXPORT_SYMBOL(pcmcia_put_socket);
-static void pcmcia_release_socket(struct
class_device *class_
dev)
+static void pcmcia_release_socket(struct
device *
dev)
{
{
- struct pcmcia_socket *socket =
class_get_devdata(class_
dev);
+ struct pcmcia_socket *socket =
dev_get_drvdata(
dev);
complete(&socket->socket_released);
}
complete(&socket->socket_released);
}
@@
-180,7
+180,7
@@
int pcmcia_register_socket(struct pcmcia_socket *socket)
struct task_struct *tsk;
int ret;
struct task_struct *tsk;
int ret;
- if (!socket || !socket->ops || !socket->dev.
dev
|| !socket->resource_ops)
+ if (!socket || !socket->ops || !socket->dev.
parent
|| !socket->resource_ops)
return -EINVAL;
cs_dbg(socket, 0, "pcmcia_register_socket(0x%p)\n", socket->ops);
return -EINVAL;
cs_dbg(socket, 0, "pcmcia_register_socket(0x%p)\n", socket->ops);
@@
-225,9
+225,9
@@
int pcmcia_register_socket(struct pcmcia_socket *socket)
#endif
/* set proper values in socket->dev */
#endif
/* set proper values in socket->dev */
-
socket->dev.class_data = socket
;
+
dev_set_drvdata(&socket->dev, socket)
;
socket->dev.class = &pcmcia_socket_class;
socket->dev.class = &pcmcia_socket_class;
- snprintf(socket->dev.
clas
s_id, BUS_ID_SIZE, "pcmcia_socket%u", socket->sock);
+ snprintf(socket->dev.
bu
s_id, BUS_ID_SIZE, "pcmcia_socket%u", socket->sock);
/* base address = 0, map = 0 */
socket->cis_mem.flags = 0;
/* base address = 0, map = 0 */
socket->cis_mem.flags = 0;
@@
-639,7
+639,7
@@
static int pccardd(void *__skt)
skt->ops->set_socket(skt, &skt->socket);
/* register with the device core */
skt->ops->set_socket(skt, &skt->socket);
/* register with the device core */
- ret =
class_
device_register(&skt->dev);
+ ret = device_register(&skt->dev);
if (ret) {
printk(KERN_WARNING "PCMCIA: unable to register socket 0x%p\n",
skt);
if (ret) {
printk(KERN_WARNING "PCMCIA: unable to register socket 0x%p\n",
skt);
@@
-651,6
+651,7
@@
static int pccardd(void *__skt)
add_wait_queue(&skt->thread_wait, &wait);
complete(&skt->thread_done);
add_wait_queue(&skt->thread_wait, &wait);
complete(&skt->thread_done);
+ set_freezable();
for (;;) {
unsigned long flags;
unsigned int events;
for (;;) {
unsigned long flags;
unsigned int events;
@@
-688,7
+689,7
@@
static int pccardd(void *__skt)
remove_wait_queue(&skt->thread_wait, &wait);
/* remove from the device core */
remove_wait_queue(&skt->thread_wait, &wait);
/* remove from the device core */
-
class_
device_unregister(&skt->dev);
+ device_unregister(&skt->dev);
return 0;
}
return 0;
}
@@
-699,11
+700,12
@@
static int pccardd(void *__skt)
*/
void pcmcia_parse_events(struct pcmcia_socket *s, u_int events)
{
*/
void pcmcia_parse_events(struct pcmcia_socket *s, u_int events)
{
+ unsigned long flags;
cs_dbg(s, 4, "parse_events: events %08x\n", events);
if (s->thread) {
cs_dbg(s, 4, "parse_events: events %08x\n", events);
if (s->thread) {
- spin_lock
(&s->thread_lock
);
+ spin_lock
_irqsave(&s->thread_lock, flags
);
s->thread_events |= events;
s->thread_events |= events;
- spin_unlock
(&s->thread_lock
);
+ spin_unlock
_irqrestore(&s->thread_lock, flags
);
wake_up(&s->thread_wait);
}
wake_up(&s->thread_wait);
}
@@
-902,7
+904,7
@@
int pcmcia_insert_card(struct pcmcia_socket *skt)
EXPORT_SYMBOL(pcmcia_insert_card);
EXPORT_SYMBOL(pcmcia_insert_card);
-static int pcmcia_socket_uevent(struct
class_
device *dev, char **envp,
+static int pcmcia_socket_uevent(struct device *dev, char **envp,
int num_envp, char *buffer, int buffer_size)
{
struct pcmcia_socket *s = container_of(dev, struct pcmcia_socket, dev);
int num_envp, char *buffer, int buffer_size)
{
struct pcmcia_socket *s = container_of(dev, struct pcmcia_socket, dev);
@@
-928,8
+930,8
@@
static void pcmcia_release_socket_class(struct class *data)
struct class pcmcia_socket_class = {
.name = "pcmcia_socket",
struct class pcmcia_socket_class = {
.name = "pcmcia_socket",
- .uevent = pcmcia_socket_uevent,
- .release = pcmcia_release_socket,
+ .
dev_
uevent = pcmcia_socket_uevent,
+ .
dev_
release = pcmcia_release_socket,
.class_release = pcmcia_release_socket_class,
};
EXPORT_SYMBOL(pcmcia_socket_class);
.class_release = pcmcia_release_socket_class,
};
EXPORT_SYMBOL(pcmcia_socket_class);