|
@@ -217,7 +217,7 @@ int rproc_alloc_vring(struct rproc_vdev *rvdev, int i)
|
|
|
* TODO: support predefined notifyids (via resource table)
|
|
|
*/
|
|
|
ret = idr_alloc(&rproc->notifyids, rvring, 0, 0, GFP_KERNEL);
|
|
|
- if (ret) {
|
|
|
+ if (ret < 0) {
|
|
|
dev_err(dev, "idr_alloc failed: %d\n", ret);
|
|
|
dma_free_coherent(dev->parent, size, va, dma);
|
|
|
return ret;
|
|
@@ -366,10 +366,12 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
|
|
|
/* it is now safe to add the virtio device */
|
|
|
ret = rproc_add_virtio_dev(rvdev, rsc->id);
|
|
|
if (ret)
|
|
|
- goto free_rvdev;
|
|
|
+ goto remove_rvdev;
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+remove_rvdev:
|
|
|
+ list_del(&rvdev->node);
|
|
|
free_rvdev:
|
|
|
kfree(rvdev);
|
|
|
return ret;
|