diff options
Diffstat (limited to 'drivers/atm')
-rw-r--r-- | drivers/atm/ambassador.c | 41 | ||||
-rw-r--r-- | drivers/atm/ambassador.h | 2 | ||||
-rw-r--r-- | drivers/atm/horizon.c | 24 | ||||
-rw-r--r-- | drivers/atm/iphase.c | 7 | ||||
-rw-r--r-- | drivers/atm/nicstar.c | 119 | ||||
-rw-r--r-- | drivers/atm/nicstar.h | 12 |
6 files changed, 58 insertions, 147 deletions
diff --git a/drivers/atm/ambassador.c b/drivers/atm/ambassador.c index 7b44a5965155..6adb72a2f876 100644 --- a/drivers/atm/ambassador.c +++ b/drivers/atm/ambassador.c @@ -33,6 +33,7 @@ #include <linux/interrupt.h> #include <linux/poison.h> #include <linux/bitrev.h> +#include <linux/mutex.h> #include <asm/atomic.h> #include <asm/io.h> @@ -437,7 +438,7 @@ static inline void dump_skb (char * prefix, unsigned int vc, struct sk_buff * sk /* see limitations under Hardware Features */ -static inline int check_area (void * start, size_t length) { +static int check_area (void * start, size_t length) { // assumes length > 0 const u32 fourmegmask = -1 << 22; const u32 twofivesixmask = -1 << 8; @@ -456,7 +457,7 @@ static inline int check_area (void * start, size_t length) { /********** free an skb (as per ATM device driver documentation) **********/ -static inline void amb_kfree_skb (struct sk_buff * skb) { +static void amb_kfree_skb (struct sk_buff * skb) { if (ATM_SKB(skb)->vcc->pop) { ATM_SKB(skb)->vcc->pop (ATM_SKB(skb)->vcc, skb); } else { @@ -466,7 +467,7 @@ static inline void amb_kfree_skb (struct sk_buff * skb) { /********** TX completion **********/ -static inline void tx_complete (amb_dev * dev, tx_out * tx) { +static void tx_complete (amb_dev * dev, tx_out * tx) { tx_simple * tx_descr = bus_to_virt (tx->handle); struct sk_buff * skb = tx_descr->skb; @@ -643,7 +644,7 @@ static int command_do (amb_dev * dev, command * cmd) { /********** TX queue pair **********/ -static inline int tx_give (amb_dev * dev, tx_in * tx) { +static int tx_give (amb_dev * dev, tx_in * tx) { amb_txq * txq = &dev->txq; unsigned long flags; @@ -675,7 +676,7 @@ static inline int tx_give (amb_dev * dev, tx_in * tx) { } } -static inline int tx_take (amb_dev * dev) { +static int tx_take (amb_dev * dev) { amb_txq * txq = &dev->txq; unsigned long flags; @@ -703,7 +704,7 @@ static inline int tx_take (amb_dev * dev) { /********** RX queue pairs **********/ -static inline int rx_give (amb_dev * dev, rx_in * rx, unsigned char pool) { +static int rx_give (amb_dev * dev, rx_in * rx, unsigned char pool) { amb_rxq * rxq = &dev->rxq[pool]; unsigned long flags; @@ -728,7 +729,7 @@ static inline int rx_give (amb_dev * dev, rx_in * rx, unsigned char pool) { } } -static inline int rx_take (amb_dev * dev, unsigned char pool) { +static int rx_take (amb_dev * dev, unsigned char pool) { amb_rxq * rxq = &dev->rxq[pool]; unsigned long flags; @@ -761,7 +762,7 @@ static inline int rx_take (amb_dev * dev, unsigned char pool) { /********** RX Pool handling **********/ /* pre: buffers_wanted = 0, post: pending = 0 */ -static inline void drain_rx_pool (amb_dev * dev, unsigned char pool) { +static void drain_rx_pool (amb_dev * dev, unsigned char pool) { amb_rxq * rxq = &dev->rxq[pool]; PRINTD (DBG_FLOW|DBG_POOL, "drain_rx_pool %p %hu", dev, pool); @@ -796,7 +797,7 @@ static void drain_rx_pools (amb_dev * dev) { drain_rx_pool (dev, pool); } -static inline void fill_rx_pool (amb_dev * dev, unsigned char pool, +static void fill_rx_pool (amb_dev * dev, unsigned char pool, gfp_t priority) { rx_in rx; @@ -846,7 +847,7 @@ static void fill_rx_pools (amb_dev * dev) { /********** enable host interrupts **********/ -static inline void interrupts_on (amb_dev * dev) { +static void interrupts_on (amb_dev * dev) { wr_plain (dev, offsetof(amb_mem, interrupt_control), rd_plain (dev, offsetof(amb_mem, interrupt_control)) | AMB_INTERRUPT_BITS); @@ -854,7 +855,7 @@ static inline void interrupts_on (amb_dev * dev) { /********** disable host interrupts **********/ -static inline void interrupts_off (amb_dev * dev) { +static void interrupts_off (amb_dev * dev) { wr_plain (dev, offsetof(amb_mem, interrupt_control), rd_plain (dev, offsetof(amb_mem, interrupt_control)) &~ AMB_INTERRUPT_BITS); @@ -1177,7 +1178,7 @@ static int amb_open (struct atm_vcc * atm_vcc) vcc->tx_frame_bits = tx_frame_bits; - down (&dev->vcc_sf); + mutex_lock(&dev->vcc_sf); if (dev->rxer[vci]) { // RXer on the channel already, just modify rate... cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); @@ -1203,7 +1204,7 @@ static int amb_open (struct atm_vcc * atm_vcc) schedule(); } dev->txer[vci].tx_present = 1; - up (&dev->vcc_sf); + mutex_unlock(&dev->vcc_sf); } if (rxtp->traffic_class != ATM_NONE) { @@ -1211,7 +1212,7 @@ static int amb_open (struct atm_vcc * atm_vcc) vcc->rx_info.pool = pool; - down (&dev->vcc_sf); + mutex_lock(&dev->vcc_sf); /* grow RX buffer pool */ if (!dev->rxq[pool].buffers_wanted) dev->rxq[pool].buffers_wanted = rx_lats; @@ -1237,7 +1238,7 @@ static int amb_open (struct atm_vcc * atm_vcc) schedule(); // this link allows RX frames through dev->rxer[vci] = atm_vcc; - up (&dev->vcc_sf); + mutex_unlock(&dev->vcc_sf); } // indicate readiness @@ -1262,7 +1263,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { if (atm_vcc->qos.txtp.traffic_class != ATM_NONE) { command cmd; - down (&dev->vcc_sf); + mutex_lock(&dev->vcc_sf); if (dev->rxer[vci]) { // RXer still on the channel, just modify rate... XXX not really needed cmd.request = cpu_to_be32 (SRB_MODIFY_VC_RATE); @@ -1277,7 +1278,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { dev->txer[vci].tx_present = 0; while (command_do (dev, &cmd)) schedule(); - up (&dev->vcc_sf); + mutex_unlock(&dev->vcc_sf); } // disable RXing @@ -1287,7 +1288,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { // this is (the?) one reason why we need the amb_vcc struct unsigned char pool = vcc->rx_info.pool; - down (&dev->vcc_sf); + mutex_lock(&dev->vcc_sf); if (dev->txer[vci].tx_present) { // TXer still on the channel, just go to pool zero XXX not really needed cmd.request = cpu_to_be32 (SRB_MODIFY_VC_FLAGS); @@ -1314,7 +1315,7 @@ static void amb_close (struct atm_vcc * atm_vcc) { dev->rxq[pool].buffers_wanted = 0; drain_rx_pool (dev, pool); } - up (&dev->vcc_sf); + mutex_unlock(&dev->vcc_sf); } // free our structure @@ -2188,7 +2189,7 @@ static void setup_dev(amb_dev *dev, struct pci_dev *pci_dev) // semaphore for txer/rxer modifications - we cannot use a // spinlock as the critical region needs to switch processes - init_MUTEX (&dev->vcc_sf); + mutex_init(&dev->vcc_sf); // queue manipulation spinlocks; we want atomic reads and // writes to the queue descriptors (handles IRQ and SMP) // consider replacing "int pending" -> "atomic_t available" diff --git a/drivers/atm/ambassador.h b/drivers/atm/ambassador.h index ff2a303cbe00..df55fa8387dc 100644 --- a/drivers/atm/ambassador.h +++ b/drivers/atm/ambassador.h @@ -638,7 +638,7 @@ struct amb_dev { amb_txq txq; amb_rxq rxq[NUM_RX_POOLS]; - struct semaphore vcc_sf; + struct mutex vcc_sf; amb_tx_info txer[NUM_VCS]; struct atm_vcc * rxer[NUM_VCS]; unsigned int tx_avail; diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c index 9b2cf253f02f..c0ac728dc564 100644 --- a/drivers/atm/horizon.c +++ b/drivers/atm/horizon.c @@ -424,7 +424,7 @@ static inline void FLUSH_RX_CHANNEL (hrz_dev * dev, u16 channel) { return; } -static inline void WAIT_FLUSH_RX_COMPLETE (hrz_dev * dev) { +static void WAIT_FLUSH_RX_COMPLETE (hrz_dev * dev) { while (rd_regw (dev, RX_CHANNEL_PORT_OFF) & FLUSH_CHANNEL) ; return; @@ -435,7 +435,7 @@ static inline void SELECT_RX_CHANNEL (hrz_dev * dev, u16 channel) { return; } -static inline void WAIT_UPDATE_COMPLETE (hrz_dev * dev) { +static void WAIT_UPDATE_COMPLETE (hrz_dev * dev) { while (rd_regw (dev, RX_CHANNEL_PORT_OFF) & RX_CHANNEL_UPDATE_IN_PROGRESS) ; return; @@ -796,7 +796,7 @@ static void hrz_change_vc_qos (ATM_RXER * rxer, MAAL_QOS * qos) { /********** free an skb (as per ATM device driver documentation) **********/ -static inline void hrz_kfree_skb (struct sk_buff * skb) { +static void hrz_kfree_skb (struct sk_buff * skb) { if (ATM_SKB(skb)->vcc->pop) { ATM_SKB(skb)->vcc->pop (ATM_SKB(skb)->vcc, skb); } else { @@ -1076,7 +1076,7 @@ static void rx_schedule (hrz_dev * dev, int irq) { /********** handle RX bus master complete events **********/ -static inline void rx_bus_master_complete_handler (hrz_dev * dev) { +static void rx_bus_master_complete_handler (hrz_dev * dev) { if (test_bit (rx_busy, &dev->flags)) { rx_schedule (dev, 1); } else { @@ -1089,7 +1089,7 @@ static inline void rx_bus_master_complete_handler (hrz_dev * dev) { /********** (queue to) become the next TX thread **********/ -static inline int tx_hold (hrz_dev * dev) { +static int tx_hold (hrz_dev * dev) { PRINTD (DBG_TX, "sleeping at tx lock %p %lu", dev, dev->flags); wait_event_interruptible(dev->tx_queue, (!test_and_set_bit(tx_busy, &dev->flags))); PRINTD (DBG_TX, "woken at tx lock %p %lu", dev, dev->flags); @@ -1232,7 +1232,7 @@ static void tx_schedule (hrz_dev * const dev, int irq) { /********** handle TX bus master complete events **********/ -static inline void tx_bus_master_complete_handler (hrz_dev * dev) { +static void tx_bus_master_complete_handler (hrz_dev * dev) { if (test_bit (tx_busy, &dev->flags)) { tx_schedule (dev, 1); } else { @@ -1246,7 +1246,7 @@ static inline void tx_bus_master_complete_handler (hrz_dev * dev) { /********** move RX Q pointer to next item in circular buffer **********/ // called only from IRQ sub-handler -static inline u32 rx_queue_entry_next (hrz_dev * dev) { +static u32 rx_queue_entry_next (hrz_dev * dev) { u32 rx_queue_entry; spin_lock (&dev->mem_lock); rx_queue_entry = rd_mem (dev, &dev->rx_q_entry->entry); @@ -1270,7 +1270,7 @@ static inline void rx_disabled_handler (hrz_dev * dev) { /********** handle RX data received by device **********/ // called from IRQ handler -static inline void rx_data_av_handler (hrz_dev * dev) { +static void rx_data_av_handler (hrz_dev * dev) { u32 rx_queue_entry; u32 rx_queue_entry_flags; u16 rx_len; @@ -1394,7 +1394,7 @@ static irqreturn_t interrupt_handler(int irq, void *dev_id) irq_ok = 0; while ((int_source = rd_regl (dev, INT_SOURCE_REG_OFF) & INTERESTING_INTERRUPTS)) { - // In the interests of fairness, the (inline) handlers below are + // In the interests of fairness, the handlers below are // called in sequence and without immediate return to the head of // the while loop. This is only of issue for slow hosts (or when // debugging messages are on). Really slow hosts may find a fast @@ -1458,7 +1458,7 @@ static void do_housekeeping (unsigned long arg) { /********** find an idle channel for TX and set it up **********/ // called with tx_busy set -static inline short setup_idle_tx_channel (hrz_dev * dev, hrz_vcc * vcc) { +static short setup_idle_tx_channel (hrz_dev * dev, hrz_vcc * vcc) { unsigned short idle_channels; short tx_channel = -1; unsigned int spin_count; @@ -1777,13 +1777,13 @@ static void hrz_reset (const hrz_dev * dev) { /********** read the burnt in address **********/ -static inline void WRITE_IT_WAIT (const hrz_dev *dev, u32 ctrl) +static void WRITE_IT_WAIT (const hrz_dev *dev, u32 ctrl) { wr_regl (dev, CONTROL_0_REG, ctrl); udelay (5); } -static inline void CLOCK_IT (const hrz_dev *dev, u32 ctrl) +static void CLOCK_IT (const hrz_dev *dev, u32 ctrl) { // DI must be valid around rising SK edge WRITE_IT_WAIT(dev, ctrl & ~SEEPROM_SK); diff --git a/drivers/atm/iphase.c b/drivers/atm/iphase.c index 670c093ed25f..5c28ca7380ff 100644 --- a/drivers/atm/iphase.c +++ b/drivers/atm/iphase.c @@ -60,7 +60,8 @@ #include <asm/uaccess.h> #include <asm/string.h> #include <asm/byteorder.h> -#include <linux/vmalloc.h> +#include <linux/vmalloc.h> +#include <linux/jiffies.h> #include "iphase.h" #include "suni.h" #define swap(x) (((x & 0xff) << 8) | ((x & 0xff00) >> 8)) @@ -189,7 +190,7 @@ static u16 get_desc (IADEV *dev, struct ia_vcc *iavcc) { int ltimeout; ia_hack_tcq (dev); - if(((jiffies - timer)>50)||((dev->ffL.tcq_rd==dev->host_tcq_wr))){ + if((time_after(jiffies,timer+50)) || ((dev->ffL.tcq_rd==dev->host_tcq_wr))) { timer = jiffies; i=0; while (i < dev->num_tx_desc) { @@ -1225,7 +1226,7 @@ static void rx_intr(struct atm_dev *dev) iadev->rx_tmp_jif = jiffies; iadev->rxing = 0; } - else if (((jiffies - iadev->rx_tmp_jif) > 50) && + else if ((time_after(jiffies, iadev->rx_tmp_jif + 50)) && ((iadev->rx_pkt_cnt - iadev->rx_tmp_cnt) == 0)) { for (i = 1; i <= iadev->num_rx_desc; i++) free_desc(dev, i); diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c index 0c205b000e8b..3da804b1627d 100644 --- a/drivers/atm/nicstar.c +++ b/drivers/atm/nicstar.c @@ -125,85 +125,6 @@ #define ATM_SKB(s) (&(s)->atm) #endif - /* Spinlock debugging stuff */ -#ifdef NS_DEBUG_SPINLOCKS /* See nicstar.h */ -#define ns_grab_int_lock(card,flags) \ - do { \ - unsigned long nsdsf, nsdsf2; \ - local_irq_save(flags); \ - save_flags(nsdsf); cli();\ - if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ - (flags)&(1<<9)?"en":"dis"); \ - if (spin_is_locked(&(card)->int_lock) && \ - (card)->cpu_int == smp_processor_id()) { \ - printk("nicstar.c: line %d (cpu %d) int_lock already locked at line %d (cpu %d)\n", \ - __LINE__, smp_processor_id(), (card)->has_int_lock, \ - (card)->cpu_int); \ - printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ - } \ - if (spin_is_locked(&(card)->res_lock) && \ - (card)->cpu_res == smp_processor_id()) { \ - printk("nicstar.c: line %d (cpu %d) res_lock locked at line %d (cpu %d)(trying int)\n", \ - __LINE__, smp_processor_id(), (card)->has_res_lock, \ - (card)->cpu_res); \ - printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ - } \ - spin_lock_irq(&(card)->int_lock); \ - (card)->has_int_lock = __LINE__; \ - (card)->cpu_int = smp_processor_id(); \ - restore_flags(nsdsf); } while (0) -#define ns_grab_res_lock(card,flags) \ - do { \ - unsigned long nsdsf, nsdsf2; \ - local_irq_save(flags); \ - save_flags(nsdsf); cli();\ - if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ - (flags)&(1<<9)?"en":"dis"); \ - if (spin_is_locked(&(card)->res_lock) && \ - (card)->cpu_res == smp_processor_id()) { \ - printk("nicstar.c: line %d (cpu %d) res_lock already locked at line %d (cpu %d)\n", \ - __LINE__, smp_processor_id(), (card)->has_res_lock, \ - (card)->cpu_res); \ - printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ - } \ - spin_lock_irq(&(card)->res_lock); \ - (card)->has_res_lock = __LINE__; \ - (card)->cpu_res = smp_processor_id(); \ - restore_flags(nsdsf); } while (0) -#define ns_grab_scq_lock(card,scq,flags) \ - do { \ - unsigned long nsdsf, nsdsf2; \ - local_irq_save(flags); \ - save_flags(nsdsf); cli();\ - if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ - (flags)&(1<<9)?"en":"dis"); \ - if (spin_is_locked(&(scq)->lock) && \ - (scq)->cpu_lock == smp_processor_id()) { \ - printk("nicstar.c: line %d (cpu %d) this scq_lock already locked at line %d (cpu %d)\n", \ - __LINE__, smp_processor_id(), (scq)->has_lock, \ - (scq)->cpu_lock); \ - printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ - } \ - if (spin_is_locked(&(card)->res_lock) && \ - (card)->cpu_res == smp_processor_id()) { \ - printk("nicstar.c: line %d (cpu %d) res_lock locked at line %d (cpu %d)(trying scq)\n", \ - __LINE__, smp_processor_id(), (card)->has_res_lock, \ - (card)->cpu_res); \ - printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ - } \ - spin_lock_irq(&(scq)->lock); \ - (scq)->has_lock = __LINE__; \ - (scq)->cpu_lock = smp_processor_id(); \ - restore_flags(nsdsf); } while (0) -#else /* !NS_DEBUG_SPINLOCKS */ -#define ns_grab_int_lock(card,flags) \ - spin_lock_irqsave(&(card)->int_lock,(flags)) -#define ns_grab_res_lock(card,flags) \ - spin_lock_irqsave(&(card)->res_lock,(flags)) -#define ns_grab_scq_lock(card,scq,flags) \ - spin_lock_irqsave(&(scq)->lock,flags) -#endif /* NS_DEBUG_SPINLOCKS */ - /* Function declarations ******************************************************/ @@ -422,7 +343,7 @@ static u32 ns_read_sram(ns_dev *card, u32 sram_address) sram_address <<= 2; sram_address &= 0x0007FFFC; /* address must be dword aligned */ sram_address |= 0x50000000; /* SRAM read command */ - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while (CMD_BUSY(card)); writel(sram_address, card->membase + CMD); while (CMD_BUSY(card)); @@ -440,7 +361,7 @@ static void ns_write_sram(ns_dev *card, u32 sram_address, u32 *value, int count) count--; /* count range now is 0..3 instead of 1..4 */ c = count; c <<= 2; /* to use increments of 4 */ - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while (CMD_BUSY(card)); for (i = 0; i <= c; i += 4) writel(*(value++), card->membase + i); @@ -494,7 +415,7 @@ static int __devinit ns_init_card(int i, struct pci_dev *pcidev) card->pcidev = pcidev; membase = pci_resource_start(pcidev, 1); card->membase = ioremap(membase, NS_IOREMAP_SIZE); - if (card->membase == 0) + if (!card->membase) { printk("nicstar%d: can't ioremap() membase.\n",i); error = 3; @@ -1166,7 +1087,7 @@ static void push_rxbufs(ns_dev *card, struct sk_buff *skb) card->lbfqc += 2; } - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while (CMD_BUSY(card)); writel(addr2, card->membase + DR3); @@ -1206,7 +1127,7 @@ static irqreturn_t ns_irq_handler(int irq, void *dev_id) PRINTK("nicstar%d: NICStAR generated an interrupt\n", card->index); - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); stat_r = readl(card->membase + STAT); @@ -1585,7 +1506,7 @@ static void ns_close(struct atm_vcc *vcc) unsigned long flags; addr = NS_RCT + (vcc->vpi << card->vcibits | vcc->vci) * NS_RCT_ENTRY_SIZE; - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while(CMD_BUSY(card)); writel(NS_CMD_CLOSE_CONNECTION | addr << 2, card->membase + CMD); spin_unlock_irqrestore(&card->res_lock, flags); @@ -1607,7 +1528,7 @@ static void ns_close(struct atm_vcc *vcc) NS_SKB(iovb)->iovcnt); NS_SKB(iovb)->iovcnt = 0; NS_SKB(iovb)->vcc = NULL; - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); recycle_iov_buf(card, iovb); spin_unlock_irqrestore(&card->int_lock, flags); vc->rx_iov = NULL; @@ -1629,7 +1550,7 @@ static void ns_close(struct atm_vcc *vcc) for (;;) { - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); scqep = scq->next; if (scqep == scq->base) scqep = scq->last; @@ -1691,7 +1612,7 @@ static void ns_close(struct atm_vcc *vcc) unsigned long flags; scq_info *scq = card->scq0; - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); for(i = 0; i < scq->num_entries; i++) { if(scq->skb[i] && ATM_SKB(scq->skb[i])->vcc == vcc) { @@ -1892,7 +1813,7 @@ static int push_scqe(ns_dev *card, vc_map *vc, scq_info *scq, ns_scqe *tbd, u32 data; int index; - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); while (scq->tail == scq->next) { if (in_interrupt()) { @@ -1904,7 +1825,7 @@ static int push_scqe(ns_dev *card, vc_map *vc, scq_info *scq, ns_scqe *tbd, scq->full = 1; spin_unlock_irqrestore(&scq->lock, flags); interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); if (scq->full) { spin_unlock_irqrestore(&scq->lock, flags); @@ -1953,7 +1874,7 @@ static int push_scqe(ns_dev *card, vc_map *vc, scq_info *scq, ns_scqe *tbd, if (has_run++) break; spin_unlock_irqrestore(&scq->lock, flags); interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); } if (!scq->full) @@ -2090,7 +2011,7 @@ static void drain_scq(ns_dev *card, scq_info *scq, int pos) return; } - ns_grab_scq_lock(card, scq, flags); + spin_lock_irqsave(&scq->lock, flags); i = (int) (scq->tail - scq->base); if (++i == scq->num_entries) i = 0; @@ -2898,7 +2819,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg) { struct sk_buff *hb; - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); hb = skb_dequeue(&card->hbpool.queue); card->hbpool.count--; spin_unlock_irqrestore(&card->int_lock, flags); @@ -2917,7 +2838,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg) if (hb == NULL) return -ENOMEM; NS_SKB_CB(hb)->buf_type = BUF_NONE; - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); skb_queue_tail(&card->hbpool.queue, hb); card->hbpool.count++; spin_unlock_irqrestore(&card->int_lock, flags); @@ -2929,7 +2850,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg) { struct sk_buff *iovb; - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); iovb = skb_dequeue(&card->iovpool.queue); card->iovpool.count--; spin_unlock_irqrestore(&card->int_lock, flags); @@ -2948,7 +2869,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg) if (iovb == NULL) return -ENOMEM; NS_SKB_CB(iovb)->buf_type = BUF_NONE; - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); skb_queue_tail(&card->iovpool.queue, iovb); card->iovpool.count++; spin_unlock_irqrestore(&card->int_lock, flags); @@ -2995,7 +2916,7 @@ static void ns_poll(unsigned long arg) /* Probably it isn't worth spinning */ continue; } - ns_grab_int_lock(card, flags); + spin_lock_irqsave(&card->int_lock, flags); stat_w = 0; stat_r = readl(card->membase + STAT); @@ -3062,7 +2983,7 @@ static void ns_phy_put(struct atm_dev *dev, unsigned char value, unsigned long flags; card = dev->dev_data; - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while(CMD_BUSY(card)); writel((unsigned long) value, card->membase + DR0); writel(NS_CMD_WRITE_UTILITY | 0x00000200 | (addr & 0x000000FF), @@ -3079,7 +3000,7 @@ static unsigned char ns_phy_get(struct atm_dev *dev, unsigned long addr) unsigned long data; card = dev->dev_data; - ns_grab_res_lock(card, flags); + spin_lock_irqsave(&card->res_lock, flags); while(CMD_BUSY(card)); writel(NS_CMD_READ_UTILITY | 0x00000200 | (addr & 0x000000FF), card->membase + CMD); diff --git a/drivers/atm/nicstar.h b/drivers/atm/nicstar.h index 5997bcb45b59..6010e3daa6a2 100644 --- a/drivers/atm/nicstar.h +++ b/drivers/atm/nicstar.h @@ -28,8 +28,6 @@ /* Options ********************************************************************/ -#undef NS_DEBUG_SPINLOCKS - #define NS_MAX_CARDS 4 /* Maximum number of NICStAR based cards controlled by the device driver. Must be <= 5 */ @@ -721,10 +719,6 @@ typedef struct scq_info wait_queue_head_t scqfull_waitq; volatile char full; /* SCQ full indicator */ spinlock_t lock; /* SCQ spinlock */ -#ifdef NS_DEBUG_SPINLOCKS - volatile long has_lock; - volatile int cpu_lock; -#endif /* NS_DEBUG_SPINLOCKS */ } scq_info; @@ -810,12 +804,6 @@ typedef struct ns_dev unsigned intcnt; /* Interrupt counter */ spinlock_t int_lock; /* Interrupt lock */ spinlock_t res_lock; /* Card resource lock */ -#ifdef NS_DEBUG_SPINLOCKS - volatile long has_int_lock; - volatile int cpu_int; - volatile long has_res_lock; - volatile int cpu_res; -#endif /* NS_DEBUG_SPINLOCKS */ } ns_dev; |