Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 102532
b: refs/heads/master
c: 3f8cb09
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Garzik authored and Jeff Garzik committed May 13, 2008
1 parent b1c6be9 commit cc08949
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 94f9d298ce215dada7ceaeb03e62f61d754d5705
refs/heads/master: 3f8cb098859bbea29d7b3765a3102e4a6bf81b85
26 changes: 12 additions & 14 deletions trunk/drivers/net/lib8390.c
Original file line number Diff line number Diff line change
Expand Up @@ -150,42 +150,42 @@ static void __NS8390_init(struct net_device *dev, int startp);
* card means that approach caused horrible problems like losing serial data
* at 38400 baud on some chips. Remember many 8390 nics on PCI were ISA
* chips with FPGA front ends.
*
*
* Ok the logic behind the 8390 is very simple:
*
*
* Things to know
* - IRQ delivery is asynchronous to the PCI bus
* - Blocking the local CPU IRQ via spin locks was too slow
* - The chip has register windows needing locking work
*
*
* So the path was once (I say once as people appear to have changed it
* in the mean time and it now looks rather bogus if the changes to use
* disable_irq_nosync_irqsave are disabling the local IRQ)
*
*
*
*
* Take the page lock
* Mask the IRQ on chip
* Disable the IRQ (but not mask locally- someone seems to have
* broken this with the lock validator stuff)
* [This must be _nosync as the page lock may otherwise
* deadlock us]
* Drop the page lock and turn IRQs back on
*
*
* At this point an existing IRQ may still be running but we can't
* get a new one
*
*
* Take the lock (so we know the IRQ has terminated) but don't mask
* the IRQs on the processor
* Set irqlock [for debug]
*
*
* Transmit (slow as ****)
*
*
* re-enable the IRQ
*
*
*
*
* We have to use disable_irq because otherwise you will get delayed
* interrupts on the APIC bus deadlocking the transmit path.
*
*
* Quite hairy but the chip simply wasn't designed for SMP and you can't
* even ACK an interrupt without risking corrupting other parallel
* activities on the chip." [lkml, 25 Jul 2007]
Expand Down Expand Up @@ -553,7 +553,6 @@ static void __ei_poll(struct net_device *dev)
static void ei_tx_err(struct net_device *dev)
{
unsigned long e8390_base = dev->base_addr;
struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
unsigned char txsr = ei_inb_p(e8390_base+EN0_TSR);
unsigned char tx_was_aborted = txsr & (ENTSR_ABT+ENTSR_FU);

Expand Down Expand Up @@ -816,7 +815,6 @@ static void ei_rx_overrun(struct net_device *dev)
{
unsigned long e8390_base = dev->base_addr;
unsigned char was_txing, must_resend = 0;
struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);

/*
* Record whether a Tx was in progress and then issue the
Expand Down

0 comments on commit cc08949

Please sign in to comment.