From: Greg Kroah-Hartman <gregkh@suse.de>
To: linux-serial@vger.kernel.org
Cc: Tomoya MORINAGA <tomoya.rohm@gmail.com>,
stable <stable@vger.kernel.org>,
Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 08/13] pch_uart: Fix DMA resource leak issue
Date: Mon, 21 Nov 2011 17:11:38 -0800 [thread overview]
Message-ID: <1321924303-26475-8-git-send-email-gregkh@suse.de> (raw)
In-Reply-To: <1321924303-26475-1-git-send-email-gregkh@suse.de>
From: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Changing UART mode PIO->DMA->PIO->DMA like below, pch_uart driver can't get
DMA channel resource.
setserial /dev/ttyPCH0 ^low_latency
setserial /dev/ttyPCH0 low_latency
CAUSE:
Changing mode using setserial command, ".startup" function which gets DMA
channel is called before ".verify_port" function which sets
dma-flag(use_dma/use_dma_flag) as 1.
PIO->DMA
.startup: Since dma-flag is 0, DMA channel is not requested.
.verify_port: dma-flag is set as 1.
.shutdown: N/A
DMA->PIO
.startup: Since dma-flag is 1, DMA channel is requested.
.verify_port: dma-flag is set as 0.
.shutdown: Since dma-flag is 0, DMA channel is not released.
This means DMA channel resource leak occurs.
Next time, this driver can't get DMA channel resource forever.
MODIFICATION:
Currently, when release DMA channel resource, this driver checks dma-flag.
However, this specification occurs the above issue.
This driver must check whether dma_request_channel is executed or not.
The values are saved in private data variable "chan_tx/chan_tx".
These variables mean if the value is NULL, DMA channel is not requested,
if not NULL, DMA channel is requested.
This patch fixes the issue.
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/tty/serial/pch_uart.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index ac852b5..d6aba8c 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -632,6 +632,7 @@ static void pch_request_dma(struct uart_port *port)
dev_err(priv->port.dev, "%s:dma_request_channel FAILS(Rx)\n",
__func__);
dma_release_channel(priv->chan_tx);
+ priv->chan_tx = NULL;
return;
}
@@ -1219,8 +1220,7 @@ static void pch_uart_shutdown(struct uart_port *port)
dev_err(priv->port.dev,
"pch_uart_hal_set_fifo Failed(ret=%d)\n", ret);
- if (priv->use_dma_flag)
- pch_free_dma(port);
+ pch_free_dma(port);
free_irq(priv->port.irq, priv);
}
--
1.7.7.3
next prev parent reply other threads:[~2011-11-22 1:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-22 0:59 [GIT PATCH] TTY/serial driver fixes for 3.2 Greg KH
2011-11-22 1:11 ` [PATCH 01/13] jsm: Change maintainership Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 02/13] tty: hvc_dcc: Fix duplicate character inputs Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 03/13] pch_uart: Fix hw-flow control issue Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 04/13] pch_uart: Support new device LAPIS Semiconductor ML7831 IOH Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 05/13] pch_uart: Change company name OKI SEMICONDUCTOR to LAPIS Semiconductor Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 06/13] tty/serial: Prevent drop of DCD on suspend for Tegra UARTs Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 07/13] serial,mfd: Fix CMSPAR setup Greg Kroah-Hartman
2011-11-22 1:11 ` Greg Kroah-Hartman [this message]
2011-11-22 1:11 ` [PATCH 09/13] RS485: fix inconsistencies in the meaning of some variables Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 10/13] Revert "tty/serial: Prevent drop of DCD on suspend for Tegra UARTs" Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 11/13] TTY: ldisc, allow waiting for ldisc arbitrarily long Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 12/13] TTY: ldisc, move wait idle to caller Greg Kroah-Hartman
2011-11-22 1:11 ` [PATCH 13/13] TTY: ldisc, wait for ldisc infinitely in hangup Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1321924303-26475-8-git-send-email-gregkh@suse.de \
--to=gregkh@suse.de \
--cc=linux-serial@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tomoya.rohm@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).