Thread (3 messages) 3 messages, 3 authors, 2017-08-11

Re: [PATCH] tty: serial: msm: Move request_irq to the end of startup

From: Stephen Boyd <hidden>
Date: 2017-08-11 00:04:56
Also in: linux-arm-msm

On 08/07, Neeraj Upadhyay wrote:
Move the request_irq() call to the end of the msm_startup(),
so that we don't handle interrupts while msm_startup() is
running. This avoids potential races while initialization
is in progress. 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>

Signed-off-by: Neeraj Upadhyay <redacted>
---
Or we can write the IMR register with 0 to mask all irqs before
requesting the irq handler be setup? We will unmask the
interrupts we care about anyway when we setup termios.

If not, this change is ok, but I would guess it doesn't fix
spurious irqs from happening while we keep configuring the
hardware.

Feel free to take my reviewed-by though.

Reviewed-by: Stephen Boyd <redacted>

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help