Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a240d9f1 authored by Evgeniy Polyakov's avatar Evgeniy Polyakov Committed by David S. Miller
Browse files

[CONNECTOR]: Replace delayed work with usual work queue.

parent 14fb8a76
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@
void cn_queue_wrapper(struct work_struct *work)
{
	struct cn_callback_entry *cbq =
		container_of(work, struct cn_callback_entry, work.work);
		container_of(work, struct cn_callback_entry, work);
	struct cn_callback_data *d = &cbq->data;

	d->callback(d->callback_priv);
@@ -59,13 +59,12 @@ static struct cn_callback_entry *cn_queue_alloc_callback_entry(char *name, struc
	memcpy(&cbq->id.id, id, sizeof(struct cb_id));
	cbq->data.callback = callback;
	
	INIT_DELAYED_WORK(&cbq->work, &cn_queue_wrapper);
	INIT_WORK(&cbq->work, &cn_queue_wrapper);
	return cbq;
}

static void cn_queue_free_callback(struct cn_callback_entry *cbq)
{
	cancel_delayed_work(&cbq->work);
	flush_workqueue(cbq->pdev->cn_queue);

	kfree(cbq);
+7 −9
Original line number Diff line number Diff line
@@ -135,16 +135,15 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
	spin_lock_bh(&dev->cbdev->queue_lock);
	list_for_each_entry(__cbq, &dev->cbdev->queue_list, callback_entry) {
		if (cn_cb_equal(&__cbq->id.id, &msg->id)) {
			if (likely(!work_pending(&__cbq->work.work) &&
			if (likely(!work_pending(&__cbq->work) &&
					__cbq->data.ddata == NULL)) {
				__cbq->data.callback_priv = msg;

				__cbq->data.ddata = data;
				__cbq->data.destruct_data = destruct_data;

				if (queue_delayed_work(
					    dev->cbdev->cn_queue,
					    &__cbq->work, 0))
				if (queue_work(dev->cbdev->cn_queue,
							&__cbq->work))
					err = 0;
			} else {
				struct cn_callback_data *d;
@@ -158,12 +157,11 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
					d->destruct_data = destruct_data;
					d->free = __cbq;

					INIT_DELAYED_WORK(&__cbq->work,
					INIT_WORK(&__cbq->work,
							&cn_queue_wrapper);
					
					if (queue_delayed_work(
						    dev->cbdev->cn_queue,
						    &__cbq->work, 0))
					if (queue_work(dev->cbdev->cn_queue,
						    &__cbq->work))
						err = 0;
					else {
						kfree(__cbq);
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ struct cn_callback_data {
struct cn_callback_entry {
	struct list_head callback_entry;
	struct cn_callback *cb;
	struct delayed_work work;
	struct work_struct work;
	struct cn_queue_dev *pdev;

	struct cn_callback_id id;