Merge remote-tracking branch 'char-misc/char-misc-next'
[deliverable/linux.git] / drivers / hwtracing / coresight / coresight.c
index d08d1ab9bba5d7e1c0772d48b6d43802057e323d..7bf00a0beb6f14b4c69cdaf619a2d981e58f612a 100644 (file)
@@ -257,7 +257,7 @@ static void coresight_disable_source(struct coresight_device *csdev)
 {
        if (atomic_dec_return(csdev->refcnt) == 0) {
                if (source_ops(csdev)->disable) {
-                       source_ops(csdev)->disable(csdev);
+                       source_ops(csdev)->disable(csdev, NULL);
                        csdev->enable = false;
                }
        }
@@ -429,7 +429,7 @@ struct list_head *coresight_build_path(struct coresight_device *csdev)
 
        path = kzalloc(sizeof(struct list_head), GFP_KERNEL);
        if (!path)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        INIT_LIST_HEAD(path);
 
@@ -725,7 +725,8 @@ static int coresight_orphan_match(struct device *dev, void *data)
                /* We have found at least one orphan connection */
                if (conn->child_dev == NULL) {
                        /* Does it match this newly added device? */
-                       if (!strcmp(dev_name(&csdev->dev), conn->child_name)) {
+                       if (conn->child_name &&
+                           !strcmp(dev_name(&csdev->dev), conn->child_name)) {
                                conn->child_dev = csdev;
                        } else {
                                /* This component still has an orphan */
@@ -893,7 +894,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
        int nr_refcnts = 1;
        atomic_t *refcnts = NULL;
        struct coresight_device *csdev;
-       struct coresight_connection *conns;
+       struct coresight_connection *conns = NULL;
 
        csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
        if (!csdev) {
@@ -921,16 +922,20 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
 
        csdev->nr_inport = desc->pdata->nr_inport;
        csdev->nr_outport = desc->pdata->nr_outport;
-       conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
-       if (!conns) {
-               ret = -ENOMEM;
-               goto err_kzalloc_conns;
-       }
 
-       for (i = 0; i < csdev->nr_outport; i++) {
-               conns[i].outport = desc->pdata->outports[i];
-               conns[i].child_name = desc->pdata->child_names[i];
-               conns[i].child_port = desc->pdata->child_ports[i];
+       /* Initialise connections if there is at least one outport */
+       if (csdev->nr_outport) {
+               conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
+               if (!conns) {
+                       ret = -ENOMEM;
+                       goto err_kzalloc_conns;
+               }
+
+               for (i = 0; i < csdev->nr_outport; i++) {
+                       conns[i].outport = desc->pdata->outports[i];
+                       conns[i].child_name = desc->pdata->child_names[i];
+                       conns[i].child_port = desc->pdata->child_ports[i];
+               }
        }
 
        csdev->conns = conns;
This page took 0.036582 seconds and 5 git commands to generate.