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 853bfd6..1436b3d 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;