Messages in this thread Patch in this message | | | From | Samuel Iglesias Gonsalvez <> | Subject | [PATCH 09/12] ipack/devices/ipoctal: protect the channel data processing with a spinlock | Date | Mon, 10 Dec 2012 11:50:05 +0100 |
| |
We protect important data such as TX buffer pointer, nb_bytes counter and status registers of the device, from accessing several times at the same time.
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com> --- drivers/ipack/devices/ipoctal.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/ipack/devices/ipoctal.c b/drivers/ipack/devices/ipoctal.c index d57ac61..8dff66e 100644 --- a/drivers/ipack/devices/ipoctal.c +++ b/drivers/ipack/devices/ipoctal.c @@ -191,6 +191,8 @@ static void ipoctal_irq_channel(struct ipoctal_channel *channel) tty = tty_port_tty_get(&channel->tty_port); if (!tty) return; + + spin_lock(&channel->lock); /* The HW is organized in pair of channels. See which register we need * to read from */ isr = ioread8(&channel->block_regs->r.isr); @@ -216,6 +218,7 @@ static void ipoctal_irq_channel(struct ipoctal_channel *channel) tty_flip_buffer_push(tty); tty_kref_put(tty); + spin_unlock(&channel->lock); } static irqreturn_t ipoctal_irq_handler(void *arg) -- 1.7.10.4
| |