This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 0bfb850b52 drivers/serial/uart_rpmsg: simplify initialization process of uart_rpmsg 0bfb850b52 is described below commit 0bfb850b5266c408f278a0b7b59362f4f1074a1b Author: chao an <anchao.arc...@bytedance.com> AuthorDate: Wed Apr 2 14:36:49 2025 +0800 drivers/serial/uart_rpmsg: simplify initialization process of uart_rpmsg Merge multiple heap allocate into one Signed-off-by: chao an <anchao.arc...@bytedance.com> --- drivers/serial/uart_rpmsg.c | 66 ++++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 43 deletions(-) diff --git a/drivers/serial/uart_rpmsg.c b/drivers/serial/uart_rpmsg.c index 7a8e2e828a..2fc7d273f3 100644 --- a/drivers/serial/uart_rpmsg.c +++ b/drivers/serial/uart_rpmsg.c @@ -417,43 +417,30 @@ int uart_rpmsg_init(FAR const char *cpuname, FAR const char *devname, { FAR struct uart_rpmsg_priv_s *priv; FAR struct uart_dev_s *dev; - char dev_name[32]; - int ret = -ENOMEM; + char name[32]; + int ret; - dev = kmm_zalloc(sizeof(struct uart_dev_s)); - if (!dev) + dev = kmm_zalloc(sizeof(struct uart_dev_s) + + sizeof(struct uart_rpmsg_priv_s) + + buf_size * 2); + if (dev == NULL) { - return ret; - } - - dev->ops = &g_uart_rpmsg_ops; - dev->isconsole = isconsole; - dev->recv.size = buf_size; - dev->xmit.size = buf_size; - - dev->recv.buffer = kmm_malloc(dev->recv.size); - if (!dev->recv.buffer) - { - goto fail; - } - - dev->xmit.buffer = kmm_malloc(dev->xmit.size); - if (!dev->xmit.buffer) - { - goto fail; + return -ENOMEM; } - priv = kmm_zalloc(sizeof(struct uart_rpmsg_priv_s)); - if (!priv) - { - goto fail; - } + dev->ops = &g_uart_rpmsg_ops; + dev->isconsole = isconsole; + dev->recv.size = buf_size; + dev->xmit.size = buf_size; + dev->priv = dev + 1; + dev->recv.buffer = (FAR char *)dev->priv + + sizeof(struct uart_rpmsg_priv_s); + dev->xmit.buffer = dev->recv.buffer + buf_size; + priv = dev->priv; + priv->cpuname = cpuname; + priv->devname = devname; nxmutex_init(&priv->lock); - priv->cpuname = cpuname; - priv->devname = devname; - - dev->priv = priv; ret = rpmsg_register_callback(dev, uart_rpmsg_device_created, @@ -463,25 +450,18 @@ int uart_rpmsg_init(FAR const char *cpuname, FAR const char *devname, if (ret < 0) { nxmutex_destroy(&priv->lock); - goto fail; + kmm_free(dev); + return ret; } - snprintf(dev_name, sizeof(dev_name), "%s%s", + snprintf(name, sizeof(name), "%s%s", UART_RPMSG_DEV_PREFIX, devname); - uart_register(dev_name, dev); + uart_register(name, dev); if (dev->isconsole) { uart_register(UART_RPMSG_DEV_CONSOLE, dev); } - return OK; - -fail: - kmm_free(dev->recv.buffer); - kmm_free(dev->xmit.buffer); - kmm_free(dev->priv); - kmm_free(dev); - - return ret; + return 0; }