diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/common/ethosu_buffer.c | 19 | ||||
-rw-r--r-- | kernel/common/ethosu_dma_mem.c | 13 | ||||
-rw-r--r-- | kernel/rpmsg/ethosu_rpmsg_cancel_inference.c | 5 | ||||
-rw-r--r-- | kernel/rpmsg/ethosu_rpmsg_inference.c | 25 | ||||
-rw-r--r-- | kernel/rpmsg/ethosu_rpmsg_network.c | 34 | ||||
-rw-r--r-- | kernel/rpmsg/ethosu_rpmsg_network_info.c | 6 |
6 files changed, 83 insertions, 19 deletions
diff --git a/kernel/common/ethosu_buffer.c b/kernel/common/ethosu_buffer.c index cf41b8d..519e270 100644 --- a/kernel/common/ethosu_buffer.c +++ b/kernel/common/ethosu_buffer.c @@ -139,12 +139,18 @@ int ethosu_buffer_create(struct device *dev, struct ethosu_buffer *buf; int ret = -ENOMEM; - if (!size) + if (!size) { + dev_err(dev, "Buffer create. Invalid zero size"); + return -EINVAL; + } buf = devm_kzalloc(dev, sizeof(*buf), GFP_KERNEL); - if (!buf) + if (!buf) { + dev_err(dev, "Buffer create. Failed to allocate struct"); + return -ENOMEM; + } buf->dev = dev; kref_init(&buf->kref); @@ -152,13 +158,20 @@ int ethosu_buffer_create(struct device *dev, buf->dma_mem = ethosu_dma_mem_alloc(dev, size); if (IS_ERR(buf->dma_mem)) { ret = PTR_ERR(buf->dma_mem); + dev_err(dev, + "Buffer create. Failed to allocate DMA memory. ret=%d", + ret); goto free_buf; } ret = anon_inode_getfd("ethosu-buffer", ðosu_buffer_fops, buf, O_RDWR | O_CLOEXEC); - if (ret < 0) + if (ret < 0) { + dev_err(dev, + "Buffer create. Failed to get file descriptor. ret=%d", + ret); goto free_dma; + } buf->file = fget(ret); buf->file->f_mode |= FMODE_LSEEK; diff --git a/kernel/common/ethosu_dma_mem.c b/kernel/common/ethosu_dma_mem.c index 0e05978..fd444d2 100644 --- a/kernel/common/ethosu_dma_mem.c +++ b/kernel/common/ethosu_dma_mem.c @@ -35,18 +35,27 @@ struct ethosu_dma_mem *ethosu_dma_mem_alloc(struct device *dev, { struct ethosu_dma_mem *dma_mem; - if (!size) + if (!size) { + dev_err(dev, "DMA mem alloc. Invalid zero size"); + return ERR_PTR(-EINVAL); + } dma_mem = devm_kzalloc(dev, sizeof(*dma_mem), GFP_KERNEL); - if (!dma_mem) + if (!dma_mem) { + dev_err(dev, + "DMA mem alloc. Failed to allocate struct"); + return ERR_PTR(-ENOMEM); + } dma_mem->dev = dev; dma_mem->size = size; dma_mem->cpu_addr = dma_alloc_coherent(dev, size, &dma_mem->dma_addr, GFP_KERNEL); if (!dma_mem->cpu_addr) { + dev_err(dev, "DMA mem alloc. Failed to allocate 0x%02zx bytes", + size); memset(dma_mem, 0, sizeof(*dma_mem)); devm_kfree(dev, dma_mem); diff --git a/kernel/rpmsg/ethosu_rpmsg_cancel_inference.c b/kernel/rpmsg/ethosu_rpmsg_cancel_inference.c index 5fa7515..b07c0ec 100644 --- a/kernel/rpmsg/ethosu_rpmsg_cancel_inference.c +++ b/kernel/rpmsg/ethosu_rpmsg_cancel_inference.c @@ -83,8 +83,11 @@ int ethosu_rpmsg_cancel_inference_request(struct device *dev, devm_kzalloc(dev, sizeof(struct ethosu_rpmsg_cancel_inference), GFP_KERNEL); - if (!cancellation) + if (!cancellation) { + dev_err(dev, "Cancel inference. Failed to allocate struct"); + return -ENOMEM; + } /* increase ref count on the inference we are refering to */ ethosu_rpmsg_inference_get(inf); diff --git a/kernel/rpmsg/ethosu_rpmsg_inference.c b/kernel/rpmsg/ethosu_rpmsg_inference.c index b6288ef..dd88a8a 100644 --- a/kernel/rpmsg/ethosu_rpmsg_inference.c +++ b/kernel/rpmsg/ethosu_rpmsg_inference.c @@ -278,16 +278,20 @@ int ethosu_rpmsg_inference_create(struct device *dev, if (uapi->ifm_count > ETHOSU_FD_MAX || uapi->ofm_count > ETHOSU_FD_MAX) { - dev_warn(dev, - "Too many IFM and/or OFM buffers for inference. ifm_count=%u, ofm_count=%u", - uapi->ifm_count, uapi->ofm_count); + dev_err(dev, + "Inference create. Too many IFM and/or OFM buffers for inference. ifm_count=%u, ofm_count=%u", + uapi->ifm_count, uapi->ofm_count); return -EFAULT; } inf = devm_kzalloc(dev, sizeof(*inf), GFP_KERNEL); - if (!inf) + if (!inf) { + dev_err(dev, + "Inference create. Failed to allocate struct"); + return -ENOMEM; + } inf->dev = dev; inf->mailbox = mailbox; @@ -308,6 +312,9 @@ int ethosu_rpmsg_inference_create(struct device *dev, inf->ifm[i] = ethosu_buffer_get_from_fd(uapi->ifm_fd[i]); if (IS_ERR(inf->ifm[i])) { ret = PTR_ERR(inf->ifm[i]); + dev_err(dev, + "Inference create. Failed to get IFM buffer%u ret=%d", + i, ret); goto put_ifm; } @@ -319,6 +326,9 @@ int ethosu_rpmsg_inference_create(struct device *dev, inf->ofm[i] = ethosu_buffer_get_from_fd(uapi->ofm_fd[i]); if (IS_ERR(inf->ofm[i])) { ret = PTR_ERR(inf->ofm[i]); + dev_err(dev, + "Inference create. Failed to get OFM buffer%u ret=%d", + i, ret); goto put_ofm; } @@ -353,8 +363,13 @@ int ethosu_rpmsg_inference_create(struct device *dev, ret = fd = anon_inode_getfd("ethosu-inference", ðosu_rpmsg_inference_fops, inf, O_RDWR | O_CLOEXEC); - if (ret < 0) + if (ret < 0) { + dev_err(dev, + "Inference create. Failed to get file descriptor. ret=%d", + ret); + goto put_net; + } /* Store pointer to file structure */ inf->file = fget(ret); diff --git a/kernel/rpmsg/ethosu_rpmsg_network.c b/kernel/rpmsg/ethosu_rpmsg_network.c index 38d7db2..cf36f2d 100644 --- a/kernel/rpmsg/ethosu_rpmsg_network.c +++ b/kernel/rpmsg/ethosu_rpmsg_network.c @@ -108,7 +108,7 @@ static long ethosu_rpmsg_network_ioctl(struct file *file, case ETHOSU_IOCTL_NETWORK_INFO: { struct ethosu_uapi_network_info uapi = { 0 }; - dev_dbg(dev, "Network ioctl: Network info. net=0x%pK\n", net); + dev_dbg(dev, "Network ioctl: Network info. net=0x%pK", net); ret = ethosu_rpmsg_network_info_request(dev, net->mailbox, net, &uapi); @@ -122,12 +122,14 @@ static long ethosu_rpmsg_network_ioctl(struct file *file, struct ethosu_uapi_inference_create uapi; if (copy_from_user(&uapi, udata, sizeof(uapi))) { + dev_err(dev, + "Network ioctl: Failed to copy inference request"); ret = -EFAULT; break; } dev_dbg(dev, - "Network ioctl: Inference. ifm_fd=%u, ofm_fd=%u\n", + "Network ioctl: Inference. ifm_fd=%u, ofm_fd=%u", uapi.ifm_fd[0], uapi.ofm_fd[0]); ret = ethosu_rpmsg_inference_create(dev, net->mailbox, net, @@ -156,8 +158,11 @@ int ethosu_rpmsg_network_create(struct device *dev, int ret; net = devm_kzalloc(dev, sizeof(*net), GFP_KERNEL); - if (!net) + if (!net) { + dev_err(dev, "Network create. Failed to allocate struct"); + return -ENOMEM; + } net->dev = dev; net->mailbox = mailbox; @@ -166,13 +171,15 @@ int ethosu_rpmsg_network_create(struct device *dev, switch (uapi->type) { case ETHOSU_UAPI_NETWORK_USER_BUFFER: if (!uapi->network.data_ptr) { - dev_err(dev, "Invalid network data ptr\n"); + dev_err(dev, + "Network create. Invalid network data ptr"); ret = -EINVAL; goto free_net; } if (!uapi->network.size) { - dev_err(dev, "Invalid network data size\n"); + dev_err(dev, + "Network create. Invalid network data size"); ret = -EINVAL; goto free_net; } @@ -180,20 +187,29 @@ int ethosu_rpmsg_network_create(struct device *dev, net->dma_mem = ethosu_dma_mem_alloc(dev, uapi->network.size); if (IS_ERR(net->dma_mem)) { ret = PTR_ERR(net->dma_mem); + dev_err(dev, + "Network create. Failed to allocate DMA memory. ret=%d", + ret); goto free_net; } data = u64_to_user_ptr(uapi->network.data_ptr); ret = copy_from_user(net->dma_mem->cpu_addr, data, uapi->network.size); - if (ret) + if (ret) { + dev_err(dev, + "Network create. Failed to copy network data from user buffer. ret=%d", + ret); goto free_dma_mem; + } break; case ETHOSU_UAPI_NETWORK_INDEX: net->index = uapi->index; break; default: + dev_err(dev, "Network create. Invalid buffer type. type=%u", + uapi->type); ret = -EINVAL; goto free_net; } @@ -201,8 +217,12 @@ int ethosu_rpmsg_network_create(struct device *dev, ret = anon_inode_getfd("ethosu-network", ðosu_rpmsg_network_fops, net, O_RDWR | O_CLOEXEC); - if (ret < 0) + if (ret < 0) { + dev_err(dev, + "Network create. Failed to get file descriptor. ret=%d", + ret); goto free_dma_mem; + } net->file = fget(ret); fput(net->file); diff --git a/kernel/rpmsg/ethosu_rpmsg_network_info.c b/kernel/rpmsg/ethosu_rpmsg_network_info.c index 36b6290..2445a09 100644 --- a/kernel/rpmsg/ethosu_rpmsg_network_info.c +++ b/kernel/rpmsg/ethosu_rpmsg_network_info.c @@ -73,8 +73,12 @@ int ethosu_rpmsg_network_info_request(struct device *dev, info->msg.fail = ethosu_rpmsg_network_info_fail; ret = ethosu_rpmsg_mailbox_register(mailbox, &info->msg); - if (ret < 0) + if (ret < 0) { + dev_err(dev, + "Network info create. Failed to register message in mailbox. ret=%d", + ret); goto kfree; + } /* Get reference to network */ ethosu_rpmsg_network_get(info->net); |