diff options
Diffstat (limited to 'drivers/connector/connector.c')
-rw-r--r-- | drivers/connector/connector.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/connector/connector.c b/drivers/connector/connector.c index 5e7cd45d10ee..a44db75bc25b 100644 --- a/drivers/connector/connector.c +++ b/drivers/connector/connector.c | |||
@@ -135,17 +135,15 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v | |||
135 | spin_lock_bh(&dev->cbdev->queue_lock); | 135 | spin_lock_bh(&dev->cbdev->queue_lock); |
136 | list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) { | 136 | list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) { |
137 | if (cn_cb_equal(&__cbq->id.id, &msg->id)) { | 137 | if (cn_cb_equal(&__cbq->id.id, &msg->id)) { |
138 | if (likely(!test_bit(WORK_STRUCT_PENDING, | 138 | if (likely(!work_pending(&__cbq->work) && |
139 | &__cbq->work.work.management) && | ||
140 | __cbq->data.ddata == NULL)) { | 139 | __cbq->data.ddata == NULL)) { |
141 | __cbq->data.callback_priv = msg; | 140 | __cbq->data.callback_priv = msg; |
142 | 141 | ||
143 | __cbq->data.ddata = data; | 142 | __cbq->data.ddata = data; |
144 | __cbq->data.destruct_data = destruct_data; | 143 | __cbq->data.destruct_data = destruct_data; |
145 | 144 | ||
146 | if (queue_delayed_work( | 145 | if (queue_work(dev->cbdev->cn_queue, |
147 | dev->cbdev->cn_queue, | 146 | &__cbq->work)) |
148 | &__cbq->work, 0)) | ||
149 | err = 0; | 147 | err = 0; |
150 | } else { | 148 | } else { |
151 | struct cn_callback_data *d; | 149 | struct cn_callback_data *d; |
@@ -159,12 +157,11 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v | |||
159 | d->destruct_data = destruct_data; | 157 | d->destruct_data = destruct_data; |
160 | d->free = __cbq; | 158 | d->free = __cbq; |
161 | 159 | ||
162 | INIT_DELAYED_WORK(&__cbq->work, | 160 | INIT_WORK(&__cbq->work, |
163 | &cn_queue_wrapper); | 161 | &cn_queue_wrapper); |
164 | 162 | ||
165 | if (queue_delayed_work( | 163 | if (queue_work(dev->cbdev->cn_queue, |
166 | dev->cbdev->cn_queue, | 164 | &__cbq->work)) |
167 | &__cbq->work, 0)) | ||
168 | err = 0; | 165 | err = 0; |
169 | else { | 166 | else { |
170 | kfree(__cbq); | 167 | kfree(__cbq); |