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 @@
 	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 @@
 	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", &ethosu_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 *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 @@
 		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 @@
 
 	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 @@
 		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 @@
 		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 @@
 	ret = fd = anon_inode_getfd("ethosu-inference",
 				    &ethosu_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 @@
 	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 @@
 		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 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 @@
 	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 @@
 		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 @@
 	ret = anon_inode_getfd("ethosu-network", &ethosu_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 @@
 	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);
