提交 ad8c48ad 编写于 作者: C Catalin(ux aka Dino) BOIE 提交者: Jeff Garzik

Fix io ordering problems in e100

Checking e100.c code against Documentation/io_ordering.txt I found the
following problem:

spin_lock_irq...
write
spin-unlock
e100_write_flush

The attached patch fix the code like this:

spin_lock_irq...
write
e100_write_flush
spin-unlock
Signed-off-by: NCatalin BOIE <catab@umbrella.ro>
Signed-off-by: NJeff Garzik <jeff@garzik.org>
上级 e72fd96e
...@@ -598,8 +598,8 @@ static void e100_enable_irq(struct nic *nic) ...@@ -598,8 +598,8 @@ static void e100_enable_irq(struct nic *nic)
spin_lock_irqsave(&nic->cmd_lock, flags); spin_lock_irqsave(&nic->cmd_lock, flags);
writeb(irq_mask_none, &nic->csr->scb.cmd_hi); writeb(irq_mask_none, &nic->csr->scb.cmd_hi);
spin_unlock_irqrestore(&nic->cmd_lock, flags);
e100_write_flush(nic); e100_write_flush(nic);
spin_unlock_irqrestore(&nic->cmd_lock, flags);
} }
static void e100_disable_irq(struct nic *nic) static void e100_disable_irq(struct nic *nic)
...@@ -608,8 +608,8 @@ static void e100_disable_irq(struct nic *nic) ...@@ -608,8 +608,8 @@ static void e100_disable_irq(struct nic *nic)
spin_lock_irqsave(&nic->cmd_lock, flags); spin_lock_irqsave(&nic->cmd_lock, flags);
writeb(irq_mask_all, &nic->csr->scb.cmd_hi); writeb(irq_mask_all, &nic->csr->scb.cmd_hi);
spin_unlock_irqrestore(&nic->cmd_lock, flags);
e100_write_flush(nic); e100_write_flush(nic);
spin_unlock_irqrestore(&nic->cmd_lock, flags);
} }
static void e100_hw_reset(struct nic *nic) static void e100_hw_reset(struct nic *nic)
...@@ -1582,8 +1582,8 @@ static void e100_watchdog(unsigned long data) ...@@ -1582,8 +1582,8 @@ static void e100_watchdog(unsigned long data)
* interrupt mask bit and the SW Interrupt generation bit */ * interrupt mask bit and the SW Interrupt generation bit */
spin_lock_irq(&nic->cmd_lock); spin_lock_irq(&nic->cmd_lock);
writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi); writeb(readb(&nic->csr->scb.cmd_hi) | irq_sw_gen,&nic->csr->scb.cmd_hi);
spin_unlock_irq(&nic->cmd_lock);
e100_write_flush(nic); e100_write_flush(nic);
spin_unlock_irq(&nic->cmd_lock);
e100_update_stats(nic); e100_update_stats(nic);
e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex); e100_adjust_adaptive_ifs(nic, cmd.speed, cmd.duplex);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册