Browse Source

rmnet_ctl: re-arrange ipa registration

Re-arrange ipa registration sequence to handle cases where rmnet_ctl
is being initialized before ipa is ready.

Change-Id: Ic8416ad8f96f818e32f1320e997287ebfe755d03
Acked-by: Weiyi Chen <[email protected]>
Signed-off-by: Subash Abhinov Kasiviswanathan <[email protected]>
Subash Abhinov Kasiviswanathan 5 năm trước cách đây
mục cha
commit
2a1b9716b1
1 tập tin đã thay đổi với 14 bổ sung15 xóa
  1. 14 15
      core/rmnet_ctl_ipa.c

+ 14 - 15
core/rmnet_ctl_ipa.c

@@ -18,6 +18,7 @@ struct rmnet_ctl_ipa_dev {
 };
 
 static struct rmnet_ctl_ipa_dev ctl_ipa_dev;
+static bool rmnet_ctl_ipa_registered;
 
 static int rmnet_ctl_send_ipa(struct rmnet_ctl_dev *dev, struct sk_buff *skb)
 {
@@ -78,33 +79,31 @@ static void rmnet_ctl_ipa_ready(void *user_data)
 			rmnet_ctl_dl_callback,
 			&ctl_ipa_dev);
 
-	pr_info("%s: %d\n", __func__, rc);
+	if (rc)
+		pr_err("%s: %d\n", __func__, rc);
+	else
+		rmnet_ctl_ipa_registered = true;
 }
 
 static int __init rmnet_ctl_init(void)
 {
 	int rc;
 
-	rc = ipa_register_rmnet_ctl_cb(
-			rmnet_ctl_probe,
-			&ctl_ipa_dev,
-			rmnet_ctl_remove,
-			&ctl_ipa_dev,
-			rmnet_ctl_dl_callback,
-			&ctl_ipa_dev);
-
-	if (rc == -EAGAIN)
-		rc = ipa_register_ipa_ready_cb(
-			rmnet_ctl_ipa_ready, NULL);
-
-	pr_info("%s: %d\n", __func__, rc);
+	rc = ipa_register_ipa_ready_cb(rmnet_ctl_ipa_ready, NULL);
+	if (rc == -EEXIST)
+		rmnet_ctl_ipa_ready(NULL);
+	else if (rc)
+		pr_err("%s: %d\n", __func__, rc);
 
 	return 0;
 }
 
 static void __exit rmnet_ctl_exit(void)
 {
-	ipa_unregister_rmnet_ctl_cb();
+	if (rmnet_ctl_ipa_registered) {
+		ipa_unregister_rmnet_ctl_cb();
+		rmnet_ctl_ipa_registered = false;
+	}
 }
 
 module_init(rmnet_ctl_init)