OSDN Git Service

greybus: rename HOST_DEV_CPORT_ID_MAX
authorAlex Elder <elder@linaro.org>
Sat, 13 Jun 2015 16:02:09 +0000 (11:02 -0500)
committerGreg Kroah-Hartman <gregkh@google.com>
Mon, 15 Jun 2015 23:49:00 +0000 (16:49 -0700)
We limit the number of host-side CPorts to a fixed maximum (which
is less than the 4096 that UniPro allows).  This patch imposes a
similar limit on the CPort IDs defined by modules (signaling an
error if one too large is found in a manifest).

It seems reasonable to use the same value for both limits.  Change
the name of the constant that defines the host limit and use it for
both.  Update cport_id_valid() to enforce the maximum.

(Ultimately we should impose a limit like this; this change is being
made in preparation for supporting multiple connections over a
single CPort.)

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c
drivers/staging/greybus/core.c
drivers/staging/greybus/greybus.h
drivers/staging/greybus/manifest.c

index 7236e47..9467aab 100644 (file)
@@ -158,7 +158,7 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
        if (!connection)
                return NULL;
 
-       retval = ida_simple_get(id_map, 0, HOST_DEV_CPORT_ID_MAX, GFP_KERNEL);
+       retval = ida_simple_get(id_map, 0, CPORT_ID_MAX, GFP_KERNEL);
        if (retval < 0) {
                kfree(connection);
                return NULL;
index 18b5d5f..d4fffec 100644 (file)
@@ -246,7 +246,7 @@ static int __init gb_init(void)
        if (greybus_disabled())
                return -ENODEV;
 
-       BUILD_BUG_ON(HOST_DEV_CPORT_ID_MAX >= (long)CPORT_ID_BAD);
+       BUILD_BUG_ON(CPORT_ID_MAX >= (long)CPORT_ID_BAD);
 
        gb_debugfs_init();
 
index 518f142..5c6f960 100644 (file)
        .serial_number  = (s),
 
 /* XXX I couldn't get my Kconfig file to be noticed for out-of-tree build */
-#ifndef CONFIG_HOST_DEV_CPORT_ID_MAX
-#define CONFIG_HOST_DEV_CPORT_ID_MAX 128
-#endif /* !CONFIG_HOST_DEV_CPORT_ID_MAX */
+#ifndef CONFIG_CPORT_ID_MAX
+#define CONFIG_CPORT_ID_MAX 128
+#endif /* !CONFIG_CPORT_ID_MAX */
 
 /* Maximum number of CPorts usable by a host device */
 /* XXX This should really be determined by the AP module manifest */
-#define HOST_DEV_CPORT_ID_MAX  CONFIG_HOST_DEV_CPORT_ID_MAX
-#define CPORT_ID_BAD           U16_MAX         /* UniPro max id is 4095 */
+#define CPORT_ID_MAX   CONFIG_CPORT_ID_MAX
+#define CPORT_ID_BAD   U16_MAX         /* UniPro max id is 4095 */
 
 /* For SP1 hardware, we are going to "hardcode" each device to have all logical
  * blocks in order to be able to address them as one unified "unit".  Then
@@ -198,7 +198,7 @@ static inline int is_gb_connection(const struct device *dev)
 
 static inline bool cport_id_valid(u16 cport_id)
 {
-       return cport_id != CPORT_ID_BAD;
+       return cport_id != CPORT_ID_BAD && cport_id <= CPORT_ID_MAX;
 }
 
 #endif /* __KERNEL__ */
index e329f37..ad55a73 100644 (file)
@@ -224,9 +224,12 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
                if (desc_cport->bundle != bundle_id)
                        continue;
 
+               cport_id = le16_to_cpu(desc_cport->id);
+               if (cport_id > CPORT_ID_MAX)
+                       goto cleanup;
+
                /* Found one.  Set up its function structure */
                protocol_id = desc_cport->protocol_id;
-               cport_id = le16_to_cpu(desc_cport->id);
                if (!gb_connection_create(bundle, cport_id, protocol_id))
                        goto cleanup;