Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 26 Feb 2008 15:42:28 GMT
From:      Steve Wise <swise@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 136263 for review
Message-ID:  <200802261542.m1QFgSGZ050702@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=136263

Change 136263 by swise@swise:vic10:iwarp on 2008/02/26 15:42:22

	Discover TOE capable devs via ifaddr events.
	
	- removed t3c_client registration.
	- register for ifaddr events.
	- when an addr is bound to a undiscovered TOE ifnet, then
	  register the device with the rdma core.

Affected files ...

.. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c#2 edit
.. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.c#2 edit
.. //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.h#2 edit

Differences ...

==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c#2 (text+ko) ====

@@ -52,6 +52,10 @@
 #include <sys/queue.h>
 #include <sys/taskqueue.h>
 #include <sys/proc.h>
+#include <sys/eventhandler.h>
+
+#include <net/if.h>
+#include <net/if_var.h>
 
 #include <netinet/in.h>
 
@@ -88,18 +92,10 @@
 static void open_rnic_dev(struct t3cdev *);
 static void close_rnic_dev(struct t3cdev *);
 
-struct cxgb_client t3c_client = {
-	.name = "iw_cxgb3",
-	.add = open_rnic_dev,
-	.remove = close_rnic_dev,
-	.handlers = t3c_handlers,
-#if 0
-	.redirect = iwch_ep_redirect
-#endif
-};
-
 static TAILQ_HEAD( ,iwch_dev) dev_list;
 static struct mtx dev_mutex;
+static eventhandler_tag event_tag;
+
 static void
 rnic_init(struct iwch_dev *rnicp)
 {
@@ -204,10 +200,24 @@
 	mtx_unlock(&dev_mutex);
 }
 
+static ifaddr_event_handler_t ifaddr_event_handler(void *arg, struct ifnet *ifp)
+{
+	printf("%s if name %s \n", __FUNCTION__, ifp->if_xname);
+	if (ifp->if_capabilities & IFCAP_TOE4) {
+		KASSERT(T3CDEV(ifp) != NULL, ("null t3cdev ptr!"));
+		if (cxio_hal_find_rdev_by_t3cdev(T3CDEV(ifp)) == NULL)
+			open_rnic_dev(T3CDEV(ifp));
+	}
+	return 0;
+}
+
+
 static int __init iwch_init_module(void)
 {
 	int err;
+	struct ifnet *ifp;
 
+	printf("%s enter\n", __FUNCTION__);
 	TAILQ_INIT(&dev_list);
 	mtx_init(&dev_mutex, "iwch dev_list lock", NULL, MTX_DEF);
 	
@@ -218,13 +228,23 @@
 	if (err)
 		return err;
 	cxio_register_ev_cb(iwch_ev_dispatch);
-	cxgb_register_client(&t3c_client);
+
+	/* Register for ifaddr events to dynamically add TOE devs */
+	event_tag = EVENTHANDLER_REGISTER(ifaddr_event, ifaddr_event_handler,
+			NULL, EVENTHANDLER_PRI_ANY);
+
+	/* Register existing TOE interfaces by walking the ifnet chain */
+	IFNET_RLOCK();
+	TAILQ_FOREACH(ifp, &ifnet, if_link) {
+		(void)ifaddr_event_handler(NULL, ifp);
+	}
+	IFNET_RUNLOCK();
 	return 0;
 }
 
 static void __exit iwch_exit_module(void)
 {
-	cxgb_unregister_client(&t3c_client);
+	EVENTHANDLER_DEREGISTER(ifaddr_event, event_tag);
 	cxio_unregister_ev_cb(iwch_ev_dispatch);
 	iwch_cm_term();
 	cxio_hal_exit();

==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.c#2 (text+ko) ====

@@ -95,7 +95,7 @@
 	return NULL;
 }
 
-static struct cxio_rdev *
+struct cxio_rdev *
 cxio_hal_find_rdev_by_t3cdev(struct t3cdev *tdev)
 {
 	struct cxio_rdev *rdev;

==== //depot/projects/iwarp/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_hal.h#2 (text+ko) ====

@@ -290,5 +290,6 @@
 	mtx_unlock_spin(lockp); \
 	__ret; \
 }) 
+extern struct cxio_rdev *cxio_hal_find_rdev_by_t3cdev(struct t3cdev *tdev);
 
 #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200802261542.m1QFgSGZ050702>