From patchwork Thu Mar 23 07:45:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 95886 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp618933qgd; Thu, 23 Mar 2017 00:46:08 -0700 (PDT) X-Received: by 10.99.232.5 with SMTP id s5mr1389472pgh.66.1490255168290; Thu, 23 Mar 2017 00:46:08 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a15si4633091pln.61.2017.03.23.00.46.08; Thu, 23 Mar 2017 00:46:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752509AbdCWHp5 (ORCPT + 5 others); Thu, 23 Mar 2017 03:45:57 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:35915 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752224AbdCWHpy (ORCPT ); Thu, 23 Mar 2017 03:45:54 -0400 Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0ON900AVMC8E3Y40@mailout3.w1.samsung.com>; Thu, 23 Mar 2017 07:45:50 +0000 (GMT) Received: from eusmges4.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20170323074549eucas1p2e91e11e08a01097f7b2db9f4eef0e29a~ucymmXxgL2940529405eucas1p2L; Thu, 23 Mar 2017 07:45:49 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges4.samsung.com (EUCPMTA) with SMTP id D5.1A.28517.D2D73D85; Thu, 23 Mar 2017 07:45:49 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170323074548eucas1p142511884e12d6211bebd9cbabde2f9c9~ucyl4Rgd11228512285eucas1p1o; Thu, 23 Mar 2017 07:45:48 +0000 (GMT) X-AuditID: cbfec7f4-f79716d000006f65-c3-58d37d2d68ab Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 8D.23.06687.89D73D85; Thu, 23 Mar 2017 07:47:36 +0000 (GMT) Received: from AMDC2765.digital.local ([106.116.147.25]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0ON9006HQC88AT50@eusync2.samsung.com>; Thu, 23 Mar 2017 07:45:48 +0000 (GMT) From: Marek Szyprowski To: linux-samsung-soc@vger.kernel.org, linux-serial@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz , Greg Kroah-Hartman , Seung-Woo Kim , Joonyoung Shim , Inki Dae , stable@vger.kernel.org Subject: [PATCH 1/2] serial: samsung: Use right device for DMA-mapping calls Date: Thu, 23 Mar 2017 08:45:21 +0100 Message-id: <1490255131-9597-1-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFIsWRmVeSWpSXmKPExsWy7djP87q6tZcjDC695LTYOGM9q0Xz4vVs FpPuT2CxeHHvIovF+fMb2C1mnN/HZHFmcS+7xdojd9ktDr9pZ7VYsPERo8WMyS/ZHLg9Nq3q ZPPYP3cNu0ffllWMHp83yQWwRHHZpKTmZJalFunbJXBlXPh/nb3gNn/FmhvzWBoYd/F2MXJy SAiYSHTufcoOYYtJXLi3nq2LkYtDSGApo8Tre2uZQBJCAp8ZJf688oFpePfxJCNEfBmjxMQD shANDUwSt+7NYQFJsAkYSnS97WIDsUUEnCVmn13IBFLELPCfSWLBp0Ng64QFfCRWbJwJNolF QFXieecbZhCbV8BdYmFHLxPENjmJk8cms4I0Swi8Z5O4cHIP0FQOIEdWYtMBZogaF4mOO80s ELawxKvjW6DekZHo7DgINaefUaKpVRvCnsEoce4t1PvWEoePX2QFsZkF+CQmbZvODDGeV6Kj TQiixEPi/PNeVgjbUWLRnF6o52Mllk66yDiBUXoBI8MqRpHU0uLc9NRiE73ixNzi0rx0veT8 3E2MwBg+/e/4lx2Mi49ZHWIU4GBU4uHdUHcpQog1say4MvcQowQHs5IIr23h5Qgh3pTEyqrU ovz4otKc1OJDjNIcLErivHsWXAkXEkhPLEnNTk0tSC2CyTJxcEo1MPY71acYrbhvr5K540Z5 2iLhF6lzKmfK3DHYuTjY1yBmj0j/YU4fkdPSfp09Hyu59Od3f1jcrOMf8DDlzgnTTUH/V301 jFJ8wa2/ZPqkV8+cDeVVrKZk290oauHc7HpknkK68d9mgyvsBzoW3Jj/Xibo2n8XTpunZqeM w+Q2fnxaw/+aw+RSvhJLcUaioRZzUXEiAAEaRFPdAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrILMWRmVeSWpSXmKPExsVy+t/xK7ozai9HGDy+pGuxccZ6VovmxevZ LCbdn8Bi8eLeRRaL8+c3sFvMOL+PyeLM4l52i7VH7rJbHH7TzmqxYOMjRosZk1+yOXB7bFrV yeaxf+4ado++LasYPT5vkgtgiXKzyUhNTEktUkjNS85PycxLt1UKDXHTtVBSyEvMTbVVitD1 DQlSUihLzCkF8owM0ICDc4B7sJK+XYJbxoX/19kLbvNXrLkxj6WBcRdvFyMnh4SAicS7jycZ IWwxiQv31rN1MXJxCAksYZRYdu0CK4TTxCTR9vM6E0gVm4ChRNfbLjYQW0TAWWL22YVMIEXM As3MEjv3vgYrEhbwkVixcSbYWBYBVYnnnW+YQWxeAXeJhR29TBDr5CROHpvMOoGRewEjwypG kdTS4tz03GJDveLE3OLSvHS95PzcTYzA4N127OfmHYyXNgYfYhTgYFTi4Y2ouRQhxJpYVlyZ e4hRgoNZSYTXtvByhBBvSmJlVWpRfnxRaU5q8SFGU6DlE5mlRJPzgZGVVxJvaGJobmloZGxh YW5kpCTOW/LhSriQQHpiSWp2ampBahFMHxMHp1QDY2btp1df7m/WPdm6a8Oqn/fk4906+UuS ru5dvCJiZcadN7Efbhw7tSHX5EFkj1Zi+oPc45PDBTM7U/beE+u6lu3f9zWv4qnlx/XXrswI 5//ipLpeK5cnuXm5vKz0h5mx8iXMm5/ol1vviNA3uhy4137mJ4X86IbWNs5H1QZZNvPYtfeY H6gOVGIpzkg01GIuKk4EAKPy5qd0AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170323074548eucas1p142511884e12d6211bebd9cbabde2f9c9 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1B?= =?utf-8?b?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1BSam?= =?utf-8?q?sung_Electronics=1BSenior_Software_Engineer?= X-Sender-Code: =?utf-8?q?C10=1BEHQ=1BC10CD02CD027392?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170323074548eucas1p142511884e12d6211bebd9cbabde2f9c9 X-RootMTR: 20170323074548eucas1p142511884e12d6211bebd9cbabde2f9c9 References: Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org Driver should provide its own struct device for all DMA-mapping calls instead of extracting device pointer from DMA engine channel. Reported-by: Seung-Woo Kim Fixes: 2c37eedb74c8 ("serial: samsung: add dma reqest/release functions") CC: stable@vger.kernel.org # v4.0+ Signed-off-by: Marek Szyprowski --- drivers/tty/serial/samsung.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) -- 1.9.1 diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index 7a17aedbf902..9f3759bdb44f 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -901,14 +901,13 @@ static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p) return -ENOMEM; } - dma->rx_addr = dma_map_single(dma->rx_chan->device->dev, dma->rx_buf, + dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf, dma->rx_size, DMA_FROM_DEVICE); spin_lock_irqsave(&p->port.lock, flags); /* TX buffer */ - dma->tx_addr = dma_map_single(dma->tx_chan->device->dev, - p->port.state->xmit.buf, + dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf, UART_XMIT_SIZE, DMA_TO_DEVICE); spin_unlock_irqrestore(&p->port.lock, flags); @@ -922,7 +921,7 @@ static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p) if (dma->rx_chan) { dmaengine_terminate_all(dma->rx_chan); - dma_unmap_single(dma->rx_chan->device->dev, dma->rx_addr, + dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size, DMA_FROM_DEVICE); kfree(dma->rx_buf); dma_release_channel(dma->rx_chan); @@ -931,7 +930,7 @@ static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p) if (dma->tx_chan) { dmaengine_terminate_all(dma->tx_chan); - dma_unmap_single(dma->tx_chan->device->dev, dma->tx_addr, + dma_unmap_single(p->port.dev, dma->tx_addr, UART_XMIT_SIZE, DMA_TO_DEVICE); dma_release_channel(dma->tx_chan); dma->tx_chan = NULL; From patchwork Thu Mar 23 07:45:22 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 95887 Delivered-To: patch@linaro.org Received: by 10.140.89.233 with SMTP id v96csp618942qgd; Thu, 23 Mar 2017 00:46:09 -0700 (PDT) X-Received: by 10.84.130.2 with SMTP id 2mr1704386plc.24.1490255168947; Thu, 23 Mar 2017 00:46:08 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a15si4633091pln.61.2017.03.23.00.46.08; Thu, 23 Mar 2017 00:46:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752516AbdCWHqA (ORCPT + 5 others); Thu, 23 Mar 2017 03:46:00 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:41015 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752435AbdCWHp5 (ORCPT ); Thu, 23 Mar 2017 03:45:57 -0400 Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0ON900800C8IKD50@mailout1.w1.samsung.com>; Thu, 23 Mar 2017 07:45:54 +0000 (GMT) Received: from eusmges2.samsung.com (unknown [203.254.199.241]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170323074553eucas1p19a09e6447e650590e3bf2460c136c4b8~ucyqyrEDt0878108781eucas1p1y; Thu, 23 Mar 2017 07:45:53 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2.samsung.com (EUCPMTA) with SMTP id E2.DA.30614.13D73D85; Thu, 23 Mar 2017 07:45:53 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20170323074553eucas1p110829c4ad1570104297df39c02cc59e5~ucyqCK9BG0879408794eucas1p1y; Thu, 23 Mar 2017 07:45:53 +0000 (GMT) X-AuditID: cbfec7f1-f793f6d000007796-43-58d37d31ee53 Received: from eusync2.samsung.com ( [203.254.199.212]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 21.33.06687.C9D73D85; Thu, 23 Mar 2017 07:47:40 +0000 (GMT) Received: from AMDC2765.digital.local ([106.116.147.25]) by eusync2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0ON9006HQC88AT50@eusync2.samsung.com>; Thu, 23 Mar 2017 07:45:52 +0000 (GMT) From: Marek Szyprowski To: linux-samsung-soc@vger.kernel.org, linux-serial@vger.kernel.org Cc: Marek Szyprowski , Sylwester Nawrocki , Krzysztof Kozlowski , Bartlomiej Zolnierkiewicz , Greg Kroah-Hartman , Seung-Woo Kim , Joonyoung Shim , Inki Dae , stable@vger.kernel.org Subject: [PATCH 2/2] serial: samsung: Add missing checks for dma_map_single failure Date: Thu, 23 Mar 2017 08:45:22 +0100 Message-id: <1490255131-9597-2-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1490255131-9597-1-git-send-email-m.szyprowski@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOIsWRmVeSWpSXmKPExsWy7djPc7qGtZcjDJ4v0LDYOGM9q0Xz4vVs FpPuT2CxeHHvIovF+fMb2C1mnN/HZHFmcS+7xdojd9ktDr9pZ7VYsPERo8WMyS/ZHLg9Nq3q ZPPYP3cNu0ffllWMHp83yQWwRHHZpKTmZJalFunbJXBlfP9ynrWgXbyid/pk5gbGjcJdjJwc EgImEucvnmOBsMUkLtxbzwZiCwksZZQ4vEO0i5ELyP7MKPHu9BcmmIbXk+ayQSSWMUrcebIe ymlgkvi0/BMjSBWbgKFE19susFEiAs4Ss88uZAIpYhb4zySx4NMhdpCEsECoxP21S8AaWARU JU7/eMEKYvMKuEt8f7adGWKdnMTJY5PB4pwCHhJHP6yFOqOdXWL5Jc4uRg4gW1Zi0wGocheJ 9nfbWCFsYYlXx7ewQ9gyEp0dB6Fa+xklmlq1IewZjBLn3vJC2NYSh49fBOtlFuCTmLRtOjPE eF6JjjYhiBIPiVWdl9ggbEeJXx0g74L8PptR4vrLa+wTGGUWMDKsYhRJLS3OTU8tNtIrTswt Ls1L10vOz93ECIzu0/+Of9zB+P6E1SFGAQ5GJR7eiJpLEUKsiWXFlbmHGCU4mJVEeG0LL0cI 8aYkVlalFuXHF5XmpBYfYpTmYFES592z4Eq4kEB6YklqdmpqQWoRTJaJg1OqgTHpgk+F/9I5 nSldU8ympO+Zb8B+J8+g6E/e+34P2wftjw2vStgf6pxu3X1IM0Zs2spEmdIMFqV81m+d4UVf jJgblnI2Z8bukPvtEJIc9aLQl9tUYnNtg+Xbre+zHzGubms+vij8fMrdmPLZtwVuxJ+8fj16 Tsis2ZxrY0In3DU+5nXk1wLPZCWW4oxEQy3mouJEAN9WqzDqAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBLMWRmVeSWpSXmKPExsVy+t/xK7pzai9HGCy7am2xccZ6VovmxevZ LCbdn8Bi8eLeRRaL8+c3sFvMOL+PyeLM4l52i7VH7rJbHH7TzmqxYOMjRosZk1+yOXB7bFrV yeaxf+4ado++LasYPT5vkgtgiXKzyUhNTEktUkjNS85PycxLt1UKDXHTtVBSyEvMTbVVitD1 DQlSUihLzCkF8owM0ICDc4B7sJK+XYJbxvcv51kL2sUreqdPZm5g3CjcxcjJISFgIvF60lw2 CFtM4sK99UA2F4eQwBJGidcfbjOCJIQEmpgkZv4PArHZBAwlut52gTWICDhLzD67kAmkgVmg mVli597XTCAJYYFQiftrl4A1swioSpz+8YIVxOYVcJf4/mw7M8Q2OYmTxyaDxTkFPCSOfljL BLHMXeLly3PsExh5FzAyrGIUSS0tzk3PLTbUK07MLS7NS9dLzs/dxAgM9W3Hfm7ewXhpY/Ah RgEORiUe3oiaSxFCrIllxZW5hxglOJiVRHhtCy9HCPGmJFZWpRblxxeV5qQWH2I0BTpqIrOU aHI+MA7zSuINTQzNLQ2NjC0szI2MlMR5Sz5cCRcSSE8sSc1OTS1ILYLpY+LglGpg9BK3WrWB 41Le1u0Vlb3OyX9XFEedeWCRfSe16N0v/WUZR33UPDJbjjmmsbXt3P7aq/r58szaj8fP917z uuP3w3X6eu4fp/44HHsptq5i6SPfO0VfDr46vTnk6pdUx+AN0jnua22mS86Ocf3Oz+XbIJXl Uhsruv/qtbuOq//NvRfma3X6RWXeaSWW4oxEQy3mouJEALXMpgaLAgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170323074553eucas1p110829c4ad1570104297df39c02cc59e5 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1B?= =?utf-8?b?7IK87ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?utf-8?q?Marek_Szyprowski=1BSRPOL-Kernel_=28TP=29=1BSam?= =?utf-8?q?sung_Electronics=1BSenior_Software_Engineer?= X-Sender-Code: =?utf-8?q?C10=1BEHQ=1BC10CD02CD027392?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20170323074553eucas1p110829c4ad1570104297df39c02cc59e5 X-RootMTR: 20170323074553eucas1p110829c4ad1570104297df39c02cc59e5 References: <1490255131-9597-1-git-send-email-m.szyprowski@samsung.com> Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org This patch adds missing checks for dma_map_single() failure and proper error reporting. While touching this part of the code, it also removes unnecessary spinlock calls around dma_map_single() for TX buffer. This finally solves all the issues reported by DMA API debug framework. Reported-by: Seung-Woo Kim Fixes: 2c37eedb74c8 ("serial: samsung: add dma reqest/release functions") CC: stable@vger.kernel.org # v4.10+ Signed-off-by: Marek Szyprowski --- This issue was there since adding DMA support, but this patch applies cleanly only to v4.10+ kernels due to other changes in the surrounding code. --- drivers/tty/serial/samsung.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) -- 1.9.1 Reviewed-by: Bartlomiej Zolnierkiewicz diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c index 9f3759bdb44f..8aca18c4cdea 100644 --- a/drivers/tty/serial/samsung.c +++ b/drivers/tty/serial/samsung.c @@ -859,7 +859,7 @@ static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state) static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p) { struct s3c24xx_uart_dma *dma = p->dma; - unsigned long flags; + int ret; /* Default slave configuration parameters */ dma->rx_conf.direction = DMA_DEV_TO_MEM; @@ -884,8 +884,8 @@ static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p) dma->tx_chan = dma_request_chan(p->port.dev, "tx"); if (IS_ERR(dma->tx_chan)) { - dma_release_channel(dma->rx_chan); - return PTR_ERR(dma->tx_chan); + ret = PTR_ERR(dma->tx_chan); + goto err_release_rx; } dmaengine_slave_config(dma->tx_chan, &dma->tx_conf); @@ -894,25 +894,38 @@ static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p) dma->rx_size = PAGE_SIZE; dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL); - if (!dma->rx_buf) { - dma_release_channel(dma->rx_chan); - dma_release_channel(dma->tx_chan); - return -ENOMEM; + ret = -ENOMEM; + goto err_release_tx; } dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf, dma->rx_size, DMA_FROM_DEVICE); - - spin_lock_irqsave(&p->port.lock, flags); + if (dma_mapping_error(p->port.dev, dma->rx_addr)) { + ret = -EIO; + goto err_free_rx; + } /* TX buffer */ dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf, UART_XMIT_SIZE, DMA_TO_DEVICE); - - spin_unlock_irqrestore(&p->port.lock, flags); + if (dma_mapping_error(p->port.dev, dma->tx_addr)) { + ret = -EIO; + goto err_unmap_rx; + } return 0; + +err_unmap_rx: + dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size, + DMA_FROM_DEVICE); +err_free_rx: + kfree(dma->rx_buf); +err_release_tx: + dma_release_channel(dma->tx_chan); +err_release_rx: + dma_release_channel(dma->rx_chan); + return ret; } static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p)