greybus: core: check for valid hcd callbacks

When registering a host controller, verify that all of the needed
callbacks are present, so we don't have to do the testing on any "hot"
paths when we want to send real data.

Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
Reviewed-by: Alex Elder <elder@linaro.org.
diff --git a/drivers/staging/greybus/core.c b/drivers/staging/greybus/core.c
index 853bfd6..1436b3d 100644
--- a/drivers/staging/greybus/core.c
+++ b/drivers/staging/greybus/core.c
@@ -208,6 +208,19 @@
 {
 	struct greybus_host_device *hd;
 
+	/*
+	 * Validate that the driver implements all of the callbacks
+	 * so that we don't have to every time we make them.
+	 */
+	if ((!driver->alloc_gbuf_data) ||
+	    (!driver->free_gbuf_data) ||
+	    (!driver->submit_svc) ||
+	    (!driver->submit_gbuf) ||
+	    (!driver->abort_gbuf)) {
+		pr_err("Must implement all greybus_host_driver callbacks!\n");
+		return NULL;
+	}
+
 	hd = kzalloc(sizeof(*hd) + driver->hd_priv_size, GFP_KERNEL);
 	if (!hd)
 		return NULL;