diff options
Diffstat (limited to 'drivers/s390/cio')
-rw-r--r-- | drivers/s390/cio/eadm_sch.c | 10 | ||||
-rw-r--r-- | drivers/s390/cio/scm.c | 45 |
2 files changed, 2 insertions, 53 deletions
diff --git a/drivers/s390/cio/eadm_sch.c b/drivers/s390/cio/eadm_sch.c index aca7bfc113aa..3a2ee4a740b4 100644 --- a/drivers/s390/cio/eadm_sch.c +++ b/drivers/s390/cio/eadm_sch.c | |||
@@ -190,7 +190,7 @@ static struct subchannel *eadm_get_idle_sch(void) | |||
190 | return NULL; | 190 | return NULL; |
191 | } | 191 | } |
192 | 192 | ||
193 | static int eadm_start_aob(struct aob *aob) | 193 | int eadm_start_aob(struct aob *aob) |
194 | { | 194 | { |
195 | struct eadm_private *private; | 195 | struct eadm_private *private; |
196 | struct subchannel *sch; | 196 | struct subchannel *sch; |
@@ -218,6 +218,7 @@ out_unlock: | |||
218 | 218 | ||
219 | return ret; | 219 | return ret; |
220 | } | 220 | } |
221 | EXPORT_SYMBOL_GPL(eadm_start_aob); | ||
221 | 222 | ||
222 | static int eadm_subchannel_probe(struct subchannel *sch) | 223 | static int eadm_subchannel_probe(struct subchannel *sch) |
223 | { | 224 | { |
@@ -380,11 +381,6 @@ static struct css_driver eadm_subchannel_driver = { | |||
380 | .restore = eadm_subchannel_restore, | 381 | .restore = eadm_subchannel_restore, |
381 | }; | 382 | }; |
382 | 383 | ||
383 | static struct eadm_ops eadm_ops = { | ||
384 | .eadm_start = eadm_start_aob, | ||
385 | .owner = THIS_MODULE, | ||
386 | }; | ||
387 | |||
388 | static int __init eadm_sch_init(void) | 384 | static int __init eadm_sch_init(void) |
389 | { | 385 | { |
390 | int ret; | 386 | int ret; |
@@ -404,7 +400,6 @@ static int __init eadm_sch_init(void) | |||
404 | if (ret) | 400 | if (ret) |
405 | goto cleanup; | 401 | goto cleanup; |
406 | 402 | ||
407 | register_eadm_ops(&eadm_ops); | ||
408 | return ret; | 403 | return ret; |
409 | 404 | ||
410 | cleanup: | 405 | cleanup: |
@@ -415,7 +410,6 @@ cleanup: | |||
415 | 410 | ||
416 | static void __exit eadm_sch_exit(void) | 411 | static void __exit eadm_sch_exit(void) |
417 | { | 412 | { |
418 | unregister_eadm_ops(&eadm_ops); | ||
419 | css_driver_unregister(&eadm_subchannel_driver); | 413 | css_driver_unregister(&eadm_subchannel_driver); |
420 | isc_unregister(EADM_SCH_ISC); | 414 | isc_unregister(EADM_SCH_ISC); |
421 | debug_unregister(eadm_debug); | 415 | debug_unregister(eadm_debug); |
diff --git a/drivers/s390/cio/scm.c b/drivers/s390/cio/scm.c index 46ec25632e8b..15268edc54ae 100644 --- a/drivers/s390/cio/scm.c +++ b/drivers/s390/cio/scm.c | |||
@@ -15,8 +15,6 @@ | |||
15 | #include "chsc.h" | 15 | #include "chsc.h" |
16 | 16 | ||
17 | static struct device *scm_root; | 17 | static struct device *scm_root; |
18 | static struct eadm_ops *eadm_ops; | ||
19 | static DEFINE_MUTEX(eadm_ops_mutex); | ||
20 | 18 | ||
21 | #define to_scm_dev(n) container_of(n, struct scm_device, dev) | 19 | #define to_scm_dev(n) container_of(n, struct scm_device, dev) |
22 | #define to_scm_drv(d) container_of(d, struct scm_driver, drv) | 20 | #define to_scm_drv(d) container_of(d, struct scm_driver, drv) |
@@ -73,49 +71,6 @@ void scm_driver_unregister(struct scm_driver *scmdrv) | |||
73 | } | 71 | } |
74 | EXPORT_SYMBOL_GPL(scm_driver_unregister); | 72 | EXPORT_SYMBOL_GPL(scm_driver_unregister); |
75 | 73 | ||
76 | int scm_get_ref(void) | ||
77 | { | ||
78 | int ret = 0; | ||
79 | |||
80 | mutex_lock(&eadm_ops_mutex); | ||
81 | if (!eadm_ops || !try_module_get(eadm_ops->owner)) | ||
82 | ret = -ENOENT; | ||
83 | mutex_unlock(&eadm_ops_mutex); | ||
84 | |||
85 | return ret; | ||
86 | } | ||
87 | EXPORT_SYMBOL_GPL(scm_get_ref); | ||
88 | |||
89 | void scm_put_ref(void) | ||
90 | { | ||
91 | mutex_lock(&eadm_ops_mutex); | ||
92 | module_put(eadm_ops->owner); | ||
93 | mutex_unlock(&eadm_ops_mutex); | ||
94 | } | ||
95 | EXPORT_SYMBOL_GPL(scm_put_ref); | ||
96 | |||
97 | void register_eadm_ops(struct eadm_ops *ops) | ||
98 | { | ||
99 | mutex_lock(&eadm_ops_mutex); | ||
100 | eadm_ops = ops; | ||
101 | mutex_unlock(&eadm_ops_mutex); | ||
102 | } | ||
103 | EXPORT_SYMBOL_GPL(register_eadm_ops); | ||
104 | |||
105 | void unregister_eadm_ops(struct eadm_ops *ops) | ||
106 | { | ||
107 | mutex_lock(&eadm_ops_mutex); | ||
108 | eadm_ops = NULL; | ||
109 | mutex_unlock(&eadm_ops_mutex); | ||
110 | } | ||
111 | EXPORT_SYMBOL_GPL(unregister_eadm_ops); | ||
112 | |||
113 | int scm_start_aob(struct aob *aob) | ||
114 | { | ||
115 | return eadm_ops->eadm_start(aob); | ||
116 | } | ||
117 | EXPORT_SYMBOL_GPL(scm_start_aob); | ||
118 | |||
119 | void scm_irq_handler(struct aob *aob, int error) | 74 | void scm_irq_handler(struct aob *aob, int error) |
120 | { | 75 | { |
121 | struct aob_rq_header *aobrq = (void *) aob->request.data; | 76 | struct aob_rq_header *aobrq = (void *) aob->request.data; |