git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
w1
/
w1_family.c
diff --git
a/drivers/w1/w1_family.c
b/drivers/w1/w1_family.c
index
d1d56ec
..
a3c95bd
100644
(file)
--- a/
drivers/w1/w1_family.c
+++ b/
drivers/w1/w1_family.c
@@
-1,8
+1,8
@@
/*
/*
- * w1_family.c
+ * w1_family.c
*
* Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
*
* Copyright (c) 2004 Evgeniy Polyakov <johnpol@2ka.mipt.ru>
- *
+ *
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@
-21,30
+21,21
@@
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/list.h>
+#include <linux/sched.h> /* schedule_timeout() */
#include <linux/delay.h>
#include "w1_family.h"
#include <linux/delay.h>
#include "w1_family.h"
+#include "w1.h"
DEFINE_SPINLOCK(w1_flock);
static LIST_HEAD(w1_families);
DEFINE_SPINLOCK(w1_flock);
static LIST_HEAD(w1_families);
-static int w1_check_family(struct w1_family *f)
-{
- if (!f->fops->rname || !f->fops->rbin || !f->fops->rval || !f->fops->rvalname)
- return -EINVAL;
-
- return 0;
-}
-
int w1_register_family(struct w1_family *newf)
{
struct list_head *ent, *n;
struct w1_family *f;
int ret = 0;
int w1_register_family(struct w1_family *newf)
{
struct list_head *ent, *n;
struct w1_family *f;
int ret = 0;
- if (w1_check_family(newf))
- return -EINVAL;
-
spin_lock(&w1_flock);
list_for_each_safe(ent, n, &w1_families) {
f = list_entry(ent, struct w1_family, family_entry);
spin_lock(&w1_flock);
list_for_each_safe(ent, n, &w1_families) {
f = list_entry(ent, struct w1_family, family_entry);
@@
-60,9
+51,10
@@
int w1_register_family(struct w1_family *newf)
newf->need_exit = 0;
list_add_tail(&newf->family_entry, &w1_families);
}
newf->need_exit = 0;
list_add_tail(&newf->family_entry, &w1_families);
}
-
spin_unlock(&w1_flock);
spin_unlock(&w1_flock);
+ w1_reconnect_slaves(newf);
+
return ret;
}
return ret;
}
@@
-115,6
+107,12
@@
struct w1_family * w1_family_registered(u8 fid)
return (ret) ? f : NULL;
}
return (ret) ? f : NULL;
}
+static void __w1_family_put(struct w1_family *f)
+{
+ if (atomic_dec_and_test(&f->refcnt))
+ f->need_exit = 1;
+}
+
void w1_family_put(struct w1_family *f)
{
spin_lock(&w1_flock);
void w1_family_put(struct w1_family *f)
{
spin_lock(&w1_flock);
@@
-122,19
+120,14
@@
void w1_family_put(struct w1_family *f)
spin_unlock(&w1_flock);
}
spin_unlock(&w1_flock);
}
-void __w1_family_put(struct w1_family *f)
-{
- if (atomic_dec_and_test(&f->refcnt))
- f->need_exit = 1;
-}
-
+#if 0
void w1_family_get(struct w1_family *f)
{
spin_lock(&w1_flock);
__w1_family_get(f);
spin_unlock(&w1_flock);
void w1_family_get(struct w1_family *f)
{
spin_lock(&w1_flock);
__w1_family_get(f);
spin_unlock(&w1_flock);
-
}
}
+#endif /* 0 */
void __w1_family_get(struct w1_family *f)
{
void __w1_family_get(struct w1_family *f)
{
@@
-143,8
+136,5
@@
void __w1_family_get(struct w1_family *f)
smp_mb__after_atomic_inc();
}
smp_mb__after_atomic_inc();
}
-EXPORT_SYMBOL(w1_family_get);
-EXPORT_SYMBOL(w1_family_put);
-EXPORT_SYMBOL(w1_family_registered);
EXPORT_SYMBOL(w1_unregister_family);
EXPORT_SYMBOL(w1_register_family);
EXPORT_SYMBOL(w1_unregister_family);
EXPORT_SYMBOL(w1_register_family);