diff options
| -rw-r--r-- | drivers/rpmsg/qcom_glink_native.c | 3 | ||||
| -rw-r--r-- | drivers/rpmsg/qcom_glink_smem.c | 14 | ||||
| -rw-r--r-- | drivers/rpmsg/qcom_smd.c | 9 | ||||
| -rw-r--r-- | drivers/rpmsg/rpmsg_char.c | 27 |
4 files changed, 27 insertions, 26 deletions
diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c index e2ce4e638258..f46c787733e8 100644 --- a/drivers/rpmsg/qcom_glink_native.c +++ b/drivers/rpmsg/qcom_glink_native.c | |||
| @@ -792,9 +792,6 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail) | |||
| 792 | return -EAGAIN; | 792 | return -EAGAIN; |
| 793 | } | 793 | } |
| 794 | 794 | ||
| 795 | if (WARN(chunk_size % 4, "Incoming data must be word aligned\n")) | ||
| 796 | return -EINVAL; | ||
| 797 | |||
| 798 | rcid = le16_to_cpu(hdr.msg.param1); | 795 | rcid = le16_to_cpu(hdr.msg.param1); |
| 799 | spin_lock_irqsave(&glink->idr_lock, flags); | 796 | spin_lock_irqsave(&glink->idr_lock, flags); |
| 800 | channel = idr_find(&glink->rcids, rcid); | 797 | channel = idr_find(&glink->rcids, rcid); |
diff --git a/drivers/rpmsg/qcom_glink_smem.c b/drivers/rpmsg/qcom_glink_smem.c index 2b5cf2790954..64a5ce324c7f 100644 --- a/drivers/rpmsg/qcom_glink_smem.c +++ b/drivers/rpmsg/qcom_glink_smem.c | |||
| @@ -89,15 +89,11 @@ static void glink_smem_rx_peak(struct qcom_glink_pipe *np, | |||
| 89 | tail -= pipe->native.length; | 89 | tail -= pipe->native.length; |
| 90 | 90 | ||
| 91 | len = min_t(size_t, count, pipe->native.length - tail); | 91 | len = min_t(size_t, count, pipe->native.length - tail); |
| 92 | if (len) { | 92 | if (len) |
| 93 | __ioread32_copy(data, pipe->fifo + tail, | 93 | memcpy_fromio(data, pipe->fifo + tail, len); |
| 94 | len / sizeof(u32)); | ||
| 95 | } | ||
| 96 | 94 | ||
| 97 | if (len != count) { | 95 | if (len != count) |
| 98 | __ioread32_copy(data + len, pipe->fifo, | 96 | memcpy_fromio(data + len, pipe->fifo, (count - len)); |
| 99 | (count - len) / sizeof(u32)); | ||
| 100 | } | ||
| 101 | } | 97 | } |
| 102 | 98 | ||
| 103 | static void glink_smem_rx_advance(struct qcom_glink_pipe *np, | 99 | static void glink_smem_rx_advance(struct qcom_glink_pipe *np, |
| @@ -205,7 +201,7 @@ struct qcom_glink *qcom_glink_smem_register(struct device *parent, | |||
| 205 | dev->parent = parent; | 201 | dev->parent = parent; |
| 206 | dev->of_node = node; | 202 | dev->of_node = node; |
| 207 | dev->release = qcom_glink_smem_release; | 203 | dev->release = qcom_glink_smem_release; |
| 208 | dev_set_name(dev, "%s:%s", node->parent->name, node->name); | 204 | dev_set_name(dev, "%pOFn:%pOFn", node->parent, node); |
| 209 | ret = device_register(dev); | 205 | ret = device_register(dev); |
| 210 | if (ret) { | 206 | if (ret) { |
| 211 | pr_err("failed to register glink edge\n"); | 207 | pr_err("failed to register glink edge\n"); |
diff --git a/drivers/rpmsg/qcom_smd.c b/drivers/rpmsg/qcom_smd.c index 8da83a4ebadc..4abbeea782fa 100644 --- a/drivers/rpmsg/qcom_smd.c +++ b/drivers/rpmsg/qcom_smd.c | |||
| @@ -1122,8 +1122,10 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed | |||
| 1122 | 1122 | ||
| 1123 | channel->edge = edge; | 1123 | channel->edge = edge; |
| 1124 | channel->name = kstrdup(name, GFP_KERNEL); | 1124 | channel->name = kstrdup(name, GFP_KERNEL); |
| 1125 | if (!channel->name) | 1125 | if (!channel->name) { |
| 1126 | return ERR_PTR(-ENOMEM); | 1126 | ret = -ENOMEM; |
| 1127 | goto free_channel; | ||
| 1128 | } | ||
| 1127 | 1129 | ||
| 1128 | spin_lock_init(&channel->tx_lock); | 1130 | spin_lock_init(&channel->tx_lock); |
| 1129 | spin_lock_init(&channel->recv_lock); | 1131 | spin_lock_init(&channel->recv_lock); |
| @@ -1173,6 +1175,7 @@ static struct qcom_smd_channel *qcom_smd_create_channel(struct qcom_smd_edge *ed | |||
| 1173 | 1175 | ||
| 1174 | free_name_and_channel: | 1176 | free_name_and_channel: |
| 1175 | kfree(channel->name); | 1177 | kfree(channel->name); |
| 1178 | free_channel: | ||
| 1176 | kfree(channel); | 1179 | kfree(channel); |
| 1177 | 1180 | ||
| 1178 | return ERR_PTR(ret); | 1181 | return ERR_PTR(ret); |
| @@ -1454,7 +1457,7 @@ struct qcom_smd_edge *qcom_smd_register_edge(struct device *parent, | |||
| 1454 | edge->dev.release = qcom_smd_edge_release; | 1457 | edge->dev.release = qcom_smd_edge_release; |
| 1455 | edge->dev.of_node = node; | 1458 | edge->dev.of_node = node; |
| 1456 | edge->dev.groups = qcom_smd_edge_groups; | 1459 | edge->dev.groups = qcom_smd_edge_groups; |
| 1457 | dev_set_name(&edge->dev, "%s:%s", dev_name(parent), node->name); | 1460 | dev_set_name(&edge->dev, "%s:%pOFn", dev_name(parent), node); |
| 1458 | ret = device_register(&edge->dev); | 1461 | ret = device_register(&edge->dev); |
| 1459 | if (ret) { | 1462 | if (ret) { |
| 1460 | pr_err("failed to register smd edge\n"); | 1463 | pr_err("failed to register smd edge\n"); |
diff --git a/drivers/rpmsg/rpmsg_char.c b/drivers/rpmsg/rpmsg_char.c index a76b963a7e50..eea5ebbb5119 100644 --- a/drivers/rpmsg/rpmsg_char.c +++ b/drivers/rpmsg/rpmsg_char.c | |||
| @@ -167,9 +167,9 @@ static int rpmsg_eptdev_release(struct inode *inode, struct file *filp) | |||
| 167 | return 0; | 167 | return 0; |
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | static ssize_t rpmsg_eptdev_read(struct file *filp, char __user *buf, | 170 | static ssize_t rpmsg_eptdev_read_iter(struct kiocb *iocb, struct iov_iter *to) |
| 171 | size_t len, loff_t *f_pos) | ||
| 172 | { | 171 | { |
| 172 | struct file *filp = iocb->ki_filp; | ||
| 173 | struct rpmsg_eptdev *eptdev = filp->private_data; | 173 | struct rpmsg_eptdev *eptdev = filp->private_data; |
| 174 | unsigned long flags; | 174 | unsigned long flags; |
| 175 | struct sk_buff *skb; | 175 | struct sk_buff *skb; |
| @@ -205,8 +205,8 @@ static ssize_t rpmsg_eptdev_read(struct file *filp, char __user *buf, | |||
| 205 | if (!skb) | 205 | if (!skb) |
| 206 | return -EFAULT; | 206 | return -EFAULT; |
| 207 | 207 | ||
| 208 | use = min_t(size_t, len, skb->len); | 208 | use = min_t(size_t, iov_iter_count(to), skb->len); |
| 209 | if (copy_to_user(buf, skb->data, use)) | 209 | if (copy_to_iter(skb->data, use, to) != use) |
| 210 | use = -EFAULT; | 210 | use = -EFAULT; |
| 211 | 211 | ||
| 212 | kfree_skb(skb); | 212 | kfree_skb(skb); |
| @@ -214,16 +214,21 @@ static ssize_t rpmsg_eptdev_read(struct file *filp, char __user *buf, | |||
| 214 | return use; | 214 | return use; |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | static ssize_t rpmsg_eptdev_write(struct file *filp, const char __user *buf, | 217 | static ssize_t rpmsg_eptdev_write_iter(struct kiocb *iocb, |
| 218 | size_t len, loff_t *f_pos) | 218 | struct iov_iter *from) |
| 219 | { | 219 | { |
| 220 | struct file *filp = iocb->ki_filp; | ||
| 220 | struct rpmsg_eptdev *eptdev = filp->private_data; | 221 | struct rpmsg_eptdev *eptdev = filp->private_data; |
| 222 | size_t len = iov_iter_count(from); | ||
| 221 | void *kbuf; | 223 | void *kbuf; |
| 222 | int ret; | 224 | int ret; |
| 223 | 225 | ||
| 224 | kbuf = memdup_user(buf, len); | 226 | kbuf = kzalloc(len, GFP_KERNEL); |
| 225 | if (IS_ERR(kbuf)) | 227 | if (!kbuf) |
| 226 | return PTR_ERR(kbuf); | 228 | return -ENOMEM; |
| 229 | |||
| 230 | if (!copy_from_iter_full(kbuf, len, from)) | ||
| 231 | return -EFAULT; | ||
| 227 | 232 | ||
| 228 | if (mutex_lock_interruptible(&eptdev->ept_lock)) { | 233 | if (mutex_lock_interruptible(&eptdev->ept_lock)) { |
| 229 | ret = -ERESTARTSYS; | 234 | ret = -ERESTARTSYS; |
| @@ -281,8 +286,8 @@ static const struct file_operations rpmsg_eptdev_fops = { | |||
| 281 | .owner = THIS_MODULE, | 286 | .owner = THIS_MODULE, |
| 282 | .open = rpmsg_eptdev_open, | 287 | .open = rpmsg_eptdev_open, |
| 283 | .release = rpmsg_eptdev_release, | 288 | .release = rpmsg_eptdev_release, |
| 284 | .read = rpmsg_eptdev_read, | 289 | .read_iter = rpmsg_eptdev_read_iter, |
| 285 | .write = rpmsg_eptdev_write, | 290 | .write_iter = rpmsg_eptdev_write_iter, |
| 286 | .poll = rpmsg_eptdev_poll, | 291 | .poll = rpmsg_eptdev_poll, |
| 287 | .unlocked_ioctl = rpmsg_eptdev_ioctl, | 292 | .unlocked_ioctl = rpmsg_eptdev_ioctl, |
| 288 | .compat_ioctl = rpmsg_eptdev_ioctl, | 293 | .compat_ioctl = rpmsg_eptdev_ioctl, |
