diff options
Diffstat (limited to 'drivers/hwtracing/coresight/coresight.c')
-rw-r--r-- | drivers/hwtracing/coresight/coresight.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c index 5443d03a1eec..d08d1ab9bba5 100644 --- a/drivers/hwtracing/coresight/coresight.c +++ b/drivers/hwtracing/coresight/coresight.c | |||
@@ -385,7 +385,6 @@ static int _coresight_build_path(struct coresight_device *csdev, | |||
385 | int i; | 385 | int i; |
386 | bool found = false; | 386 | bool found = false; |
387 | struct coresight_node *node; | 387 | struct coresight_node *node; |
388 | struct coresight_connection *conn; | ||
389 | 388 | ||
390 | /* An activated sink has been found. Enqueue the element */ | 389 | /* An activated sink has been found. Enqueue the element */ |
391 | if ((csdev->type == CORESIGHT_DEV_TYPE_SINK || | 390 | if ((csdev->type == CORESIGHT_DEV_TYPE_SINK || |
@@ -394,8 +393,9 @@ static int _coresight_build_path(struct coresight_device *csdev, | |||
394 | 393 | ||
395 | /* Not a sink - recursively explore each port found on this element */ | 394 | /* Not a sink - recursively explore each port found on this element */ |
396 | for (i = 0; i < csdev->nr_outport; i++) { | 395 | for (i = 0; i < csdev->nr_outport; i++) { |
397 | conn = &csdev->conns[i]; | 396 | struct coresight_device *child_dev = csdev->conns[i].child_dev; |
398 | if (_coresight_build_path(conn->child_dev, path) == 0) { | 397 | |
398 | if (child_dev && _coresight_build_path(child_dev, path) == 0) { | ||
399 | found = true; | 399 | found = true; |
400 | break; | 400 | break; |
401 | } | 401 | } |
@@ -425,6 +425,7 @@ out: | |||
425 | struct list_head *coresight_build_path(struct coresight_device *csdev) | 425 | struct list_head *coresight_build_path(struct coresight_device *csdev) |
426 | { | 426 | { |
427 | struct list_head *path; | 427 | struct list_head *path; |
428 | int rc; | ||
428 | 429 | ||
429 | path = kzalloc(sizeof(struct list_head), GFP_KERNEL); | 430 | path = kzalloc(sizeof(struct list_head), GFP_KERNEL); |
430 | if (!path) | 431 | if (!path) |
@@ -432,9 +433,10 @@ struct list_head *coresight_build_path(struct coresight_device *csdev) | |||
432 | 433 | ||
433 | INIT_LIST_HEAD(path); | 434 | INIT_LIST_HEAD(path); |
434 | 435 | ||
435 | if (_coresight_build_path(csdev, path)) { | 436 | rc = _coresight_build_path(csdev, path); |
437 | if (rc) { | ||
436 | kfree(path); | 438 | kfree(path); |
437 | path = NULL; | 439 | return ERR_PTR(rc); |
438 | } | 440 | } |
439 | 441 | ||
440 | return path; | 442 | return path; |
@@ -507,8 +509,9 @@ int coresight_enable(struct coresight_device *csdev) | |||
507 | goto out; | 509 | goto out; |
508 | 510 | ||
509 | path = coresight_build_path(csdev); | 511 | path = coresight_build_path(csdev); |
510 | if (!path) { | 512 | if (IS_ERR(path)) { |
511 | pr_err("building path(s) failed\n"); | 513 | pr_err("building path(s) failed\n"); |
514 | ret = PTR_ERR(path); | ||
512 | goto out; | 515 | goto out; |
513 | } | 516 | } |
514 | 517 | ||