greybus: core: check for valid hcd callbacks
authorGreg Kroah-Hartman <greg@kroah.com>
Mon, 27 Oct 2014 05:32:27 +0000 (13:32 +0800)
committerGreg Kroah-Hartman <greg@kroah.com>
Mon, 27 Oct 2014 05:45:24 +0000 (13:45 +0800)
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.
drivers/staging/greybus/core.c

index 853bfd6503f62ddb94649934d7169435159a8853..1436b3d9427dbfc496424a69e43dd6632761d60e 100644 (file)
@@ -208,6 +208,19 @@ struct greybus_host_device *greybus_create_hd(struct greybus_host_driver *driver
 {
        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;