From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Abbott Subject: Re: [Nios2-dev] [PATCH 2/2] serial: Add driver for the Altera UART Date: Thu, 6 May 2010 12:09:00 +0100 Message-ID: <4BE2A34C.1040301@mev.co.uk> References: <095aab012b2a6b3bbf4c7bc04294bb9c19316318.1273048151.git.tklauser@distanz.ch> <1273142684.3477.22.camel@gentoo-ija64.mev.local> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Return-path: Received: from mail.mev.co.uk ([62.49.15.74]:53069 "EHLO mail.mev.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751165Ab0EFLJP (ORCPT ); Thu, 6 May 2010 07:09:15 -0400 In-Reply-To: <1273142684.3477.22.camel@gentoo-ija64.mev.local> Sender: linux-serial-owner@vger.kernel.org List-Id: linux-serial@vger.kernel.org To: "nios2-dev@sopc.et.ntust.edu.tw" Cc: "sfr@canb.auug.org.au" , "gregkh@suse.de" , "linux-kernel@vger.kernel.org" , "linux-serial@vger.kernel.org" , "akpm@linux-foundation.org" , "alan@lxorguk.ukuu.org.uk" On 06/05/10 11:44, Ian Abbott wrote: > On Wed, 2010-05-05 at 09:35 +0100, Tobias Klauser wrote: >> Add an UART driver for the UART component available as a SOPC (System on >> Programmable Chip) component for Altera FPGAs. > [...] > >> +static void altera_uart_start_tx(struct uart_port *port) >> +{ >> + struct altera_uart *pp = container_of(port, struct altera_uart, port); >> + unsigned long flags; >> + >> + spin_lock_irqsave(&port->lock, flags); >> + pp->imr |= ALTERA_UART_CONTROL_TRDY_MSK; >> + writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); >> + spin_unlock_irqrestore(&port->lock, flags); >> +} >> + >> +static void altera_uart_stop_tx(struct uart_port *port) >> +{ >> + struct altera_uart *pp = container_of(port, struct altera_uart, port); >> + unsigned long flags; >> + >> + spin_lock_irqsave(&port->lock, flags); >> + pp->imr &= ~ALTERA_UART_CONTROL_TRDY_MSK; >> + writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); >> + spin_unlock_irqrestore(&port->lock, flags); >> +} >> + >> +static void altera_uart_stop_rx(struct uart_port *port) >> +{ >> + struct altera_uart *pp = container_of(port, struct altera_uart, port); >> + unsigned long flags; >> + >> + spin_lock_irqsave(&port->lock, flags); >> + pp->imr &= ~ALTERA_UART_CONTROL_RRDY_MSK; >> + writel(pp->imr, port->membase + ALTERA_UART_CONTROL_REG); >> + spin_unlock_irqrestore(&port->lock, flags); >> +} > > Those four functions shouldn't grab port->lock because the caller in > serial_core.c grabs it before calling them. Oh, and that also applies to altera_uart_set_mctrl() - the caller grabs port->lock before calling it. -- -=( Ian Abbott @ MEV Ltd. E-mail: )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=-