OSDN Git Service

tty: serial: msm: fix potential race b/w startup and irq handling
authorNeeraj Upadhyay <neeraju@codeaurora.org>
Wed, 26 Apr 2017 05:07:15 +0000 (10:37 +0530)
committerNeeraj Upadhyay <neeraju@codeaurora.org>
Tue, 2 May 2017 11:11:48 +0000 (16:41 +0530)
commitbeaa060bcc86f1bad00d6d3bb16a918bd8e57d15
tree8a5d62b3f45e85b271f45c2ce764be37f27435dd
parent048c70075fecb8f92d923fc5595efa00f2a00082
tty: serial: msm: fix potential race b/w startup and irq handling

There is a potential race for tx/rx dma requests between
msm_startup() and irq handling, for cases where dmas are not
available. This results in irq path trying to do dma mapping,
resulting in data abort. For example, consider below scenario
where rx handler reads the intermediate value of dma->chan,
set in msm_request_rx_dma(), and tries to do dma mapping,
which results in data abort.

uart_port_startup()
  msm_startup()
   request_irq()
   ...
   msm_request_rx_dma()
    ...
    dma->chan = dma_request_slave_channel_reason(dev, "rx");
    <UART RX IRQ>
     msm_uart_irq()
      msm_handle_rx_dm()
       msm_start_rx_dma()
        dma->desc = dma_map_single()
         <data abort>

Change-Id: Icf5d48f2718c3c6a855ffd3d10988a93f8281d78
Signed-off-by: Neeraj Upadhyay <neeraju@codeaurora.org>
drivers/tty/serial/msm_serial.c