diff options
Diffstat (limited to 'drivers/isdn/capi/kcapi_proc.c')
-rw-r--r-- | drivers/isdn/capi/kcapi_proc.c | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/drivers/isdn/capi/kcapi_proc.c b/drivers/isdn/capi/kcapi_proc.c index 09d4db764d22..ea2dff602e49 100644 --- a/drivers/isdn/capi/kcapi_proc.c +++ b/drivers/isdn/capi/kcapi_proc.c | |||
@@ -15,13 +15,12 @@ | |||
15 | #include <linux/seq_file.h> | 15 | #include <linux/seq_file.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | 17 | ||
18 | static char * | 18 | static char *state2str(unsigned short state) |
19 | cardstate2str(unsigned short cardstate) | ||
20 | { | 19 | { |
21 | switch (cardstate) { | 20 | switch (state) { |
22 | case CARD_DETECTED: return "detected"; | 21 | case CAPI_CTR_DETECTED: return "detected"; |
23 | case CARD_LOADING: return "loading"; | 22 | case CAPI_CTR_LOADING: return "loading"; |
24 | case CARD_RUNNING: return "running"; | 23 | case CAPI_CTR_RUNNING: return "running"; |
25 | default: return "???"; | 24 | default: return "???"; |
26 | } | 25 | } |
27 | } | 26 | } |
@@ -36,9 +35,12 @@ cardstate2str(unsigned short cardstate) | |||
36 | // --------------------------------------------------------------------------- | 35 | // --------------------------------------------------------------------------- |
37 | 36 | ||
38 | static void *controller_start(struct seq_file *seq, loff_t *pos) | 37 | static void *controller_start(struct seq_file *seq, loff_t *pos) |
38 | __acquires(capi_controller_lock) | ||
39 | { | 39 | { |
40 | mutex_lock(&capi_controller_lock); | ||
41 | |||
40 | if (*pos < CAPI_MAXCONTR) | 42 | if (*pos < CAPI_MAXCONTR) |
41 | return &capi_cards[*pos]; | 43 | return &capi_controller[*pos]; |
42 | 44 | ||
43 | return NULL; | 45 | return NULL; |
44 | } | 46 | } |
@@ -47,13 +49,15 @@ static void *controller_next(struct seq_file *seq, void *v, loff_t *pos) | |||
47 | { | 49 | { |
48 | ++*pos; | 50 | ++*pos; |
49 | if (*pos < CAPI_MAXCONTR) | 51 | if (*pos < CAPI_MAXCONTR) |
50 | return &capi_cards[*pos]; | 52 | return &capi_controller[*pos]; |
51 | 53 | ||
52 | return NULL; | 54 | return NULL; |
53 | } | 55 | } |
54 | 56 | ||
55 | static void controller_stop(struct seq_file *seq, void *v) | 57 | static void controller_stop(struct seq_file *seq, void *v) |
58 | __releases(capi_controller_lock) | ||
56 | { | 59 | { |
60 | mutex_unlock(&capi_controller_lock); | ||
57 | } | 61 | } |
58 | 62 | ||
59 | static int controller_show(struct seq_file *seq, void *v) | 63 | static int controller_show(struct seq_file *seq, void *v) |
@@ -65,7 +69,7 @@ static int controller_show(struct seq_file *seq, void *v) | |||
65 | 69 | ||
66 | seq_printf(seq, "%d %-10s %-8s %-16s %s\n", | 70 | seq_printf(seq, "%d %-10s %-8s %-16s %s\n", |
67 | ctr->cnr, ctr->driver_name, | 71 | ctr->cnr, ctr->driver_name, |
68 | cardstate2str(ctr->cardstate), | 72 | state2str(ctr->state), |
69 | ctr->name, | 73 | ctr->name, |
70 | ctr->procinfo ? ctr->procinfo(ctr) : ""); | 74 | ctr->procinfo ? ctr->procinfo(ctr) : ""); |
71 | 75 | ||
@@ -135,9 +139,11 @@ static const struct file_operations proc_contrstats_ops = { | |||
135 | // applid nrecvctlpkt nrecvdatapkt nsentctlpkt nsentdatapkt | 139 | // applid nrecvctlpkt nrecvdatapkt nsentctlpkt nsentdatapkt |
136 | // --------------------------------------------------------------------------- | 140 | // --------------------------------------------------------------------------- |
137 | 141 | ||
138 | static void * | 142 | static void *applications_start(struct seq_file *seq, loff_t *pos) |
139 | applications_start(struct seq_file *seq, loff_t *pos) | 143 | __acquires(capi_controller_lock) |
140 | { | 144 | { |
145 | mutex_lock(&capi_controller_lock); | ||
146 | |||
141 | if (*pos < CAPI_MAXAPPL) | 147 | if (*pos < CAPI_MAXAPPL) |
142 | return &capi_applications[*pos]; | 148 | return &capi_applications[*pos]; |
143 | 149 | ||
@@ -154,9 +160,10 @@ applications_next(struct seq_file *seq, void *v, loff_t *pos) | |||
154 | return NULL; | 160 | return NULL; |
155 | } | 161 | } |
156 | 162 | ||
157 | static void | 163 | static void applications_stop(struct seq_file *seq, void *v) |
158 | applications_stop(struct seq_file *seq, void *v) | 164 | __releases(capi_controller_lock) |
159 | { | 165 | { |
166 | mutex_unlock(&capi_controller_lock); | ||
160 | } | 167 | } |
161 | 168 | ||
162 | static int | 169 | static int |
@@ -239,9 +246,9 @@ static const struct file_operations proc_applstats_ops = { | |||
239 | // --------------------------------------------------------------------------- | 246 | // --------------------------------------------------------------------------- |
240 | 247 | ||
241 | static void *capi_driver_start(struct seq_file *seq, loff_t *pos) | 248 | static void *capi_driver_start(struct seq_file *seq, loff_t *pos) |
242 | __acquires(&capi_drivers_list_lock) | 249 | __acquires(&capi_drivers_lock) |
243 | { | 250 | { |
244 | read_lock(&capi_drivers_list_lock); | 251 | mutex_lock(&capi_drivers_lock); |
245 | return seq_list_start(&capi_drivers, *pos); | 252 | return seq_list_start(&capi_drivers, *pos); |
246 | } | 253 | } |
247 | 254 | ||
@@ -251,9 +258,9 @@ static void *capi_driver_next(struct seq_file *seq, void *v, loff_t *pos) | |||
251 | } | 258 | } |
252 | 259 | ||
253 | static void capi_driver_stop(struct seq_file *seq, void *v) | 260 | static void capi_driver_stop(struct seq_file *seq, void *v) |
254 | __releases(&capi_drivers_list_lock) | 261 | __releases(&capi_drivers_lock) |
255 | { | 262 | { |
256 | read_unlock(&capi_drivers_list_lock); | 263 | mutex_unlock(&capi_drivers_lock); |
257 | } | 264 | } |
258 | 265 | ||
259 | static int capi_driver_show(struct seq_file *seq, void *v) | 266 | static int capi_driver_show(struct seq_file *seq, void *v) |