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

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

[CONNECTOR]: Initialize subsystem earlier.



Attached patch declares connector init function as subsys_init()
and returns -EAGAIN in case connector is not initialized yet.

Signed-off-by: default avatarEvgeniy Polyakov <johnpol@2ka.mipt.ru>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d3dcd4ef
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -308,6 +308,9 @@ int cn_add_callback(struct cb_id *id, char *name, void (*callback)(void *))
	int err;
	struct cn_dev *dev = &cdev;

	if (!cn_already_initialized)
		return -EAGAIN;

	err = cn_queue_add_callback(dev->cbdev, name, id, callback);
	if (err)
		return err;
@@ -435,7 +438,7 @@ static void cn_callback(void *data)
	mutex_unlock(&notify_lock);
}

static int __init cn_init(void)
static int __devinit cn_init(void)
{
	struct cn_dev *dev = &cdev;
	int err;
@@ -457,20 +460,21 @@ static int __init cn_init(void)
		return -EINVAL;
	}
	
	cn_already_initialized = 1;

	err = cn_add_callback(&dev->id, "connector", &cn_callback);
	if (err) {
		cn_already_initialized = 0;
		cn_queue_free_dev(dev->cbdev);
		if (dev->nls->sk_socket)
			sock_release(dev->nls->sk_socket);
		return -EINVAL;
	}

	cn_already_initialized = 1;

	return 0;
}

static void __exit cn_fini(void)
static void __devexit cn_fini(void)
{
	struct cn_dev *dev = &cdev;

@@ -482,7 +486,7 @@ static void __exit cn_fini(void)
		sock_release(dev->nls->sk_socket);
}

module_init(cn_init);
subsys_initcall(cn_init);
module_exit(cn_fini);

EXPORT_SYMBOL_GPL(cn_add_callback);