diff options
| -rw-r--r-- | drivers/atm/nicstar.c | 117 | ||||
| -rw-r--r-- | drivers/atm/nicstar.h | 12 |
2 files changed, 19 insertions, 110 deletions
diff --git a/drivers/atm/nicstar.c b/drivers/atm/nicstar.c index 0c205b000e8b..38c769f8d2b7 100644 --- a/drivers/atm/nicstar.c +++ b/drivers/atm/nicstar.c | |||
| @@ -125,85 +125,6 @@ | |||
| 125 | #define ATM_SKB(s) (&(s)->atm) | 125 | #define ATM_SKB(s) (&(s)->atm) |
| 126 | #endif | 126 | #endif |
| 127 | 127 | ||
| 128 | /* Spinlock debugging stuff */ | ||
| 129 | #ifdef NS_DEBUG_SPINLOCKS /* See nicstar.h */ | ||
| 130 | #define ns_grab_int_lock(card,flags) \ | ||
| 131 | do { \ | ||
| 132 | unsigned long nsdsf, nsdsf2; \ | ||
| 133 | local_irq_save(flags); \ | ||
| 134 | save_flags(nsdsf); cli();\ | ||
| 135 | if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ | ||
| 136 | (flags)&(1<<9)?"en":"dis"); \ | ||
| 137 | if (spin_is_locked(&(card)->int_lock) && \ | ||
| 138 | (card)->cpu_int == smp_processor_id()) { \ | ||
| 139 | printk("nicstar.c: line %d (cpu %d) int_lock already locked at line %d (cpu %d)\n", \ | ||
| 140 | __LINE__, smp_processor_id(), (card)->has_int_lock, \ | ||
| 141 | (card)->cpu_int); \ | ||
| 142 | printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ | ||
| 143 | } \ | ||
| 144 | if (spin_is_locked(&(card)->res_lock) && \ | ||
| 145 | (card)->cpu_res == smp_processor_id()) { \ | ||
| 146 | printk("nicstar.c: line %d (cpu %d) res_lock locked at line %d (cpu %d)(trying int)\n", \ | ||
| 147 | __LINE__, smp_processor_id(), (card)->has_res_lock, \ | ||
| 148 | (card)->cpu_res); \ | ||
| 149 | printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ | ||
| 150 | } \ | ||
| 151 | spin_lock_irq(&(card)->int_lock); \ | ||
| 152 | (card)->has_int_lock = __LINE__; \ | ||
| 153 | (card)->cpu_int = smp_processor_id(); \ | ||
| 154 | restore_flags(nsdsf); } while (0) | ||
| 155 | #define ns_grab_res_lock(card,flags) \ | ||
| 156 | do { \ | ||
| 157 | unsigned long nsdsf, nsdsf2; \ | ||
| 158 | local_irq_save(flags); \ | ||
| 159 | save_flags(nsdsf); cli();\ | ||
| 160 | if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ | ||
| 161 | (flags)&(1<<9)?"en":"dis"); \ | ||
| 162 | if (spin_is_locked(&(card)->res_lock) && \ | ||
| 163 | (card)->cpu_res == smp_processor_id()) { \ | ||
| 164 | printk("nicstar.c: line %d (cpu %d) res_lock already locked at line %d (cpu %d)\n", \ | ||
| 165 | __LINE__, smp_processor_id(), (card)->has_res_lock, \ | ||
| 166 | (card)->cpu_res); \ | ||
| 167 | printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ | ||
| 168 | } \ | ||
| 169 | spin_lock_irq(&(card)->res_lock); \ | ||
| 170 | (card)->has_res_lock = __LINE__; \ | ||
| 171 | (card)->cpu_res = smp_processor_id(); \ | ||
| 172 | restore_flags(nsdsf); } while (0) | ||
| 173 | #define ns_grab_scq_lock(card,scq,flags) \ | ||
| 174 | do { \ | ||
| 175 | unsigned long nsdsf, nsdsf2; \ | ||
| 176 | local_irq_save(flags); \ | ||
| 177 | save_flags(nsdsf); cli();\ | ||
| 178 | if (nsdsf & (1<<9)) printk ("nicstar.c: ints %sabled -> enabled.\n", \ | ||
| 179 | (flags)&(1<<9)?"en":"dis"); \ | ||
| 180 | if (spin_is_locked(&(scq)->lock) && \ | ||
| 181 | (scq)->cpu_lock == smp_processor_id()) { \ | ||
| 182 | printk("nicstar.c: line %d (cpu %d) this scq_lock already locked at line %d (cpu %d)\n", \ | ||
| 183 | __LINE__, smp_processor_id(), (scq)->has_lock, \ | ||
| 184 | (scq)->cpu_lock); \ | ||
| 185 | printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ | ||
| 186 | } \ | ||
| 187 | if (spin_is_locked(&(card)->res_lock) && \ | ||
| 188 | (card)->cpu_res == smp_processor_id()) { \ | ||
| 189 | printk("nicstar.c: line %d (cpu %d) res_lock locked at line %d (cpu %d)(trying scq)\n", \ | ||
| 190 | __LINE__, smp_processor_id(), (card)->has_res_lock, \ | ||
| 191 | (card)->cpu_res); \ | ||
| 192 | printk("nicstar.c: ints were %sabled.\n", ((flags)&(1<<9)?"en":"dis")); \ | ||
| 193 | } \ | ||
| 194 | spin_lock_irq(&(scq)->lock); \ | ||
| 195 | (scq)->has_lock = __LINE__; \ | ||
| 196 | (scq)->cpu_lock = smp_processor_id(); \ | ||
| 197 | restore_flags(nsdsf); } while (0) | ||
| 198 | #else /* !NS_DEBUG_SPINLOCKS */ | ||
| 199 | #define ns_grab_int_lock(card,flags) \ | ||
| 200 | spin_lock_irqsave(&(card)->int_lock,(flags)) | ||
| 201 | #define ns_grab_res_lock(card,flags) \ | ||
| 202 | spin_lock_irqsave(&(card)->res_lock,(flags)) | ||
| 203 | #define ns_grab_scq_lock(card,scq,flags) \ | ||
| 204 | spin_lock_irqsave(&(scq)->lock,flags) | ||
| 205 | #endif /* NS_DEBUG_SPINLOCKS */ | ||
| 206 | |||
| 207 | 128 | ||
| 208 | /* Function declarations ******************************************************/ | 129 | /* Function declarations ******************************************************/ |
| 209 | 130 | ||
| @@ -422,7 +343,7 @@ static u32 ns_read_sram(ns_dev *card, u32 sram_address) | |||
| 422 | sram_address <<= 2; | 343 | sram_address <<= 2; |
| 423 | sram_address &= 0x0007FFFC; /* address must be dword aligned */ | 344 | sram_address &= 0x0007FFFC; /* address must be dword aligned */ |
| 424 | sram_address |= 0x50000000; /* SRAM read command */ | 345 | sram_address |= 0x50000000; /* SRAM read command */ |
| 425 | ns_grab_res_lock(card, flags); | 346 | spin_lock_irqsave(&card->res_lock, flags); |
| 426 | while (CMD_BUSY(card)); | 347 | while (CMD_BUSY(card)); |
| 427 | writel(sram_address, card->membase + CMD); | 348 | writel(sram_address, card->membase + CMD); |
| 428 | while (CMD_BUSY(card)); | 349 | while (CMD_BUSY(card)); |
| @@ -440,7 +361,7 @@ static void ns_write_sram(ns_dev *card, u32 sram_address, u32 *value, int count) | |||
| 440 | count--; /* count range now is 0..3 instead of 1..4 */ | 361 | count--; /* count range now is 0..3 instead of 1..4 */ |
| 441 | c = count; | 362 | c = count; |
| 442 | c <<= 2; /* to use increments of 4 */ | 363 | c <<= 2; /* to use increments of 4 */ |
| 443 | ns_grab_res_lock(card, flags); | 364 | spin_lock_irqsave(&card->res_lock, flags); |
| 444 | while (CMD_BUSY(card)); | 365 | while (CMD_BUSY(card)); |
| 445 | for (i = 0; i <= c; i += 4) | 366 | for (i = 0; i <= c; i += 4) |
| 446 | writel(*(value++), card->membase + i); | 367 | writel(*(value++), card->membase + i); |
| @@ -1166,7 +1087,7 @@ static void push_rxbufs(ns_dev *card, struct sk_buff *skb) | |||
| 1166 | card->lbfqc += 2; | 1087 | card->lbfqc += 2; |
| 1167 | } | 1088 | } |
| 1168 | 1089 | ||
| 1169 | ns_grab_res_lock(card, flags); | 1090 | spin_lock_irqsave(&card->res_lock, flags); |
| 1170 | 1091 | ||
| 1171 | while (CMD_BUSY(card)); | 1092 | while (CMD_BUSY(card)); |
| 1172 | writel(addr2, card->membase + DR3); | 1093 | writel(addr2, card->membase + DR3); |
| @@ -1206,7 +1127,7 @@ static irqreturn_t ns_irq_handler(int irq, void *dev_id) | |||
| 1206 | 1127 | ||
| 1207 | PRINTK("nicstar%d: NICStAR generated an interrupt\n", card->index); | 1128 | PRINTK("nicstar%d: NICStAR generated an interrupt\n", card->index); |
| 1208 | 1129 | ||
| 1209 | ns_grab_int_lock(card, flags); | 1130 | spin_lock_irqsave(&card->int_lock, flags); |
| 1210 | 1131 | ||
| 1211 | stat_r = readl(card->membase + STAT); | 1132 | stat_r = readl(card->membase + STAT); |
| 1212 | 1133 | ||
| @@ -1585,7 +1506,7 @@ static void ns_close(struct atm_vcc *vcc) | |||
| 1585 | unsigned long flags; | 1506 | unsigned long flags; |
| 1586 | 1507 | ||
| 1587 | addr = NS_RCT + (vcc->vpi << card->vcibits | vcc->vci) * NS_RCT_ENTRY_SIZE; | 1508 | addr = NS_RCT + (vcc->vpi << card->vcibits | vcc->vci) * NS_RCT_ENTRY_SIZE; |
| 1588 | ns_grab_res_lock(card, flags); | 1509 | spin_lock_irqsave(&card->res_lock, flags); |
| 1589 | while(CMD_BUSY(card)); | 1510 | while(CMD_BUSY(card)); |
| 1590 | writel(NS_CMD_CLOSE_CONNECTION | addr << 2, card->membase + CMD); | 1511 | writel(NS_CMD_CLOSE_CONNECTION | addr << 2, card->membase + CMD); |
| 1591 | spin_unlock_irqrestore(&card->res_lock, flags); | 1512 | spin_unlock_irqrestore(&card->res_lock, flags); |
| @@ -1607,7 +1528,7 @@ static void ns_close(struct atm_vcc *vcc) | |||
| 1607 | NS_SKB(iovb)->iovcnt); | 1528 | NS_SKB(iovb)->iovcnt); |
| 1608 | NS_SKB(iovb)->iovcnt = 0; | 1529 | NS_SKB(iovb)->iovcnt = 0; |
| 1609 | NS_SKB(iovb)->vcc = NULL; | 1530 | NS_SKB(iovb)->vcc = NULL; |
| 1610 | ns_grab_int_lock(card, flags); | 1531 | spin_lock_irqsave(&card->int_lock, flags); |
| 1611 | recycle_iov_buf(card, iovb); | 1532 | recycle_iov_buf(card, iovb); |
| 1612 | spin_unlock_irqrestore(&card->int_lock, flags); | 1533 | spin_unlock_irqrestore(&card->int_lock, flags); |
| 1613 | vc->rx_iov = NULL; | 1534 | vc->rx_iov = NULL; |
| @@ -1629,7 +1550,7 @@ static void ns_close(struct atm_vcc *vcc) | |||
| 1629 | 1550 | ||
| 1630 | for (;;) | 1551 | for (;;) |
| 1631 | { | 1552 | { |
| 1632 | ns_grab_scq_lock(card, scq, flags); | 1553 | spin_lock_irqsave(&scq->lock, flags); |
| 1633 | scqep = scq->next; | 1554 | scqep = scq->next; |
| 1634 | if (scqep == scq->base) | 1555 | if (scqep == scq->base) |
| 1635 | scqep = scq->last; | 1556 | scqep = scq->last; |
| @@ -1691,7 +1612,7 @@ static void ns_close(struct atm_vcc *vcc) | |||
| 1691 | unsigned long flags; | 1612 | unsigned long flags; |
| 1692 | scq_info *scq = card->scq0; | 1613 | scq_info *scq = card->scq0; |
| 1693 | 1614 | ||
| 1694 | ns_grab_scq_lock(card, scq, flags); | 1615 | spin_lock_irqsave(&scq->lock, flags); |
| 1695 | 1616 | ||
| 1696 | for(i = 0; i < scq->num_entries; i++) { | 1617 | for(i = 0; i < scq->num_entries; i++) { |
| 1697 | if(scq->skb[i] && ATM_SKB(scq->skb[i])->vcc == vcc) { | 1618 | 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, | |||
| 1892 | u32 data; | 1813 | u32 data; |
| 1893 | int index; | 1814 | int index; |
| 1894 | 1815 | ||
| 1895 | ns_grab_scq_lock(card, scq, flags); | 1816 | spin_lock_irqsave(&scq->lock, flags); |
| 1896 | while (scq->tail == scq->next) | 1817 | while (scq->tail == scq->next) |
| 1897 | { | 1818 | { |
| 1898 | if (in_interrupt()) { | 1819 | if (in_interrupt()) { |
| @@ -1904,7 +1825,7 @@ static int push_scqe(ns_dev *card, vc_map *vc, scq_info *scq, ns_scqe *tbd, | |||
| 1904 | scq->full = 1; | 1825 | scq->full = 1; |
| 1905 | spin_unlock_irqrestore(&scq->lock, flags); | 1826 | spin_unlock_irqrestore(&scq->lock, flags); |
| 1906 | interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); | 1827 | interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); |
| 1907 | ns_grab_scq_lock(card, scq, flags); | 1828 | spin_lock_irqsave(&scq->lock, flags); |
| 1908 | 1829 | ||
| 1909 | if (scq->full) { | 1830 | if (scq->full) { |
| 1910 | spin_unlock_irqrestore(&scq->lock, flags); | 1831 | 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, | |||
| 1953 | if (has_run++) break; | 1874 | if (has_run++) break; |
| 1954 | spin_unlock_irqrestore(&scq->lock, flags); | 1875 | spin_unlock_irqrestore(&scq->lock, flags); |
| 1955 | interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); | 1876 | interruptible_sleep_on_timeout(&scq->scqfull_waitq, SCQFULL_TIMEOUT); |
| 1956 | ns_grab_scq_lock(card, scq, flags); | 1877 | spin_lock_irqsave(&scq->lock, flags); |
| 1957 | } | 1878 | } |
| 1958 | 1879 | ||
| 1959 | if (!scq->full) | 1880 | if (!scq->full) |
| @@ -2090,7 +2011,7 @@ static void drain_scq(ns_dev *card, scq_info *scq, int pos) | |||
| 2090 | return; | 2011 | return; |
| 2091 | } | 2012 | } |
| 2092 | 2013 | ||
| 2093 | ns_grab_scq_lock(card, scq, flags); | 2014 | spin_lock_irqsave(&scq->lock, flags); |
| 2094 | i = (int) (scq->tail - scq->base); | 2015 | i = (int) (scq->tail - scq->base); |
| 2095 | if (++i == scq->num_entries) | 2016 | if (++i == scq->num_entries) |
| 2096 | i = 0; | 2017 | i = 0; |
| @@ -2898,7 +2819,7 @@ static int ns_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg) | |||
| 2898 | { | 2819 | { |
| 2899 | struct sk_buff *hb; | 2820 | struct sk_buff *hb; |
| 2900 | 2821 | ||
| 2901 | ns_grab_int_lock(card, flags); | 2822 | spin_lock_irqsave(&card->int_lock, flags); |
| 2902 | hb = skb_dequeue(&card->hbpool.queue); | 2823 | hb = skb_dequeue(&card->hbpool.queue); |
| 2903 | card->hbpool.count--; | 2824 | card->hbpool.count--; |
| 2904 | spin_unlock_irqrestore(&card->int_lock, flags); | 2825 | 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) | |||
| 2917 | if (hb == NULL) | 2838 | if (hb == NULL) |
| 2918 | return -ENOMEM; | 2839 | return -ENOMEM; |
| 2919 | NS_SKB_CB(hb)->buf_type = BUF_NONE; | 2840 | NS_SKB_CB(hb)->buf_type = BUF_NONE; |
| 2920 | ns_grab_int_lock(card, flags); | 2841 | spin_lock_irqsave(&card->int_lock, flags); |
| 2921 | skb_queue_tail(&card->hbpool.queue, hb); | 2842 | skb_queue_tail(&card->hbpool.queue, hb); |
| 2922 | card->hbpool.count++; | 2843 | card->hbpool.count++; |
| 2923 | spin_unlock_irqrestore(&card->int_lock, flags); | 2844 | 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) | |||
| 2929 | { | 2850 | { |
| 2930 | struct sk_buff *iovb; | 2851 | struct sk_buff *iovb; |
| 2931 | 2852 | ||
| 2932 | ns_grab_int_lock(card, flags); | 2853 | spin_lock_irqsave(&card->int_lock, flags); |
| 2933 | iovb = skb_dequeue(&card->iovpool.queue); | 2854 | iovb = skb_dequeue(&card->iovpool.queue); |
| 2934 | card->iovpool.count--; | 2855 | card->iovpool.count--; |
| 2935 | spin_unlock_irqrestore(&card->int_lock, flags); | 2856 | 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) | |||
| 2948 | if (iovb == NULL) | 2869 | if (iovb == NULL) |
| 2949 | return -ENOMEM; | 2870 | return -ENOMEM; |
| 2950 | NS_SKB_CB(iovb)->buf_type = BUF_NONE; | 2871 | NS_SKB_CB(iovb)->buf_type = BUF_NONE; |
| 2951 | ns_grab_int_lock(card, flags); | 2872 | spin_lock_irqsave(&card->int_lock, flags); |
| 2952 | skb_queue_tail(&card->iovpool.queue, iovb); | 2873 | skb_queue_tail(&card->iovpool.queue, iovb); |
| 2953 | card->iovpool.count++; | 2874 | card->iovpool.count++; |
| 2954 | spin_unlock_irqrestore(&card->int_lock, flags); | 2875 | spin_unlock_irqrestore(&card->int_lock, flags); |
| @@ -2995,7 +2916,7 @@ static void ns_poll(unsigned long arg) | |||
| 2995 | /* Probably it isn't worth spinning */ | 2916 | /* Probably it isn't worth spinning */ |
| 2996 | continue; | 2917 | continue; |
| 2997 | } | 2918 | } |
| 2998 | ns_grab_int_lock(card, flags); | 2919 | spin_lock_irqsave(&card->int_lock, flags); |
| 2999 | 2920 | ||
| 3000 | stat_w = 0; | 2921 | stat_w = 0; |
| 3001 | stat_r = readl(card->membase + STAT); | 2922 | stat_r = readl(card->membase + STAT); |
| @@ -3062,7 +2983,7 @@ static void ns_phy_put(struct atm_dev *dev, unsigned char value, | |||
| 3062 | unsigned long flags; | 2983 | unsigned long flags; |
| 3063 | 2984 | ||
| 3064 | card = dev->dev_data; | 2985 | card = dev->dev_data; |
| 3065 | ns_grab_res_lock(card, flags); | 2986 | spin_lock_irqsave(&card->res_lock, flags); |
| 3066 | while(CMD_BUSY(card)); | 2987 | while(CMD_BUSY(card)); |
| 3067 | writel((unsigned long) value, card->membase + DR0); | 2988 | writel((unsigned long) value, card->membase + DR0); |
| 3068 | writel(NS_CMD_WRITE_UTILITY | 0x00000200 | (addr & 0x000000FF), | 2989 | 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) | |||
| 3079 | unsigned long data; | 3000 | unsigned long data; |
| 3080 | 3001 | ||
| 3081 | card = dev->dev_data; | 3002 | card = dev->dev_data; |
| 3082 | ns_grab_res_lock(card, flags); | 3003 | spin_lock_irqsave(&card->res_lock, flags); |
| 3083 | while(CMD_BUSY(card)); | 3004 | while(CMD_BUSY(card)); |
| 3084 | writel(NS_CMD_READ_UTILITY | 0x00000200 | (addr & 0x000000FF), | 3005 | writel(NS_CMD_READ_UTILITY | 0x00000200 | (addr & 0x000000FF), |
| 3085 | card->membase + CMD); | 3006 | 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 @@ | |||
| 28 | 28 | ||
| 29 | /* Options ********************************************************************/ | 29 | /* Options ********************************************************************/ |
| 30 | 30 | ||
| 31 | #undef NS_DEBUG_SPINLOCKS | ||
| 32 | |||
| 33 | #define NS_MAX_CARDS 4 /* Maximum number of NICStAR based cards | 31 | #define NS_MAX_CARDS 4 /* Maximum number of NICStAR based cards |
| 34 | controlled by the device driver. Must | 32 | controlled by the device driver. Must |
| 35 | be <= 5 */ | 33 | be <= 5 */ |
| @@ -721,10 +719,6 @@ typedef struct scq_info | |||
| 721 | wait_queue_head_t scqfull_waitq; | 719 | wait_queue_head_t scqfull_waitq; |
| 722 | volatile char full; /* SCQ full indicator */ | 720 | volatile char full; /* SCQ full indicator */ |
| 723 | spinlock_t lock; /* SCQ spinlock */ | 721 | spinlock_t lock; /* SCQ spinlock */ |
| 724 | #ifdef NS_DEBUG_SPINLOCKS | ||
| 725 | volatile long has_lock; | ||
| 726 | volatile int cpu_lock; | ||
| 727 | #endif /* NS_DEBUG_SPINLOCKS */ | ||
| 728 | } scq_info; | 722 | } scq_info; |
| 729 | 723 | ||
| 730 | 724 | ||
| @@ -810,12 +804,6 @@ typedef struct ns_dev | |||
| 810 | unsigned intcnt; /* Interrupt counter */ | 804 | unsigned intcnt; /* Interrupt counter */ |
| 811 | spinlock_t int_lock; /* Interrupt lock */ | 805 | spinlock_t int_lock; /* Interrupt lock */ |
| 812 | spinlock_t res_lock; /* Card resource lock */ | 806 | spinlock_t res_lock; /* Card resource lock */ |
| 813 | #ifdef NS_DEBUG_SPINLOCKS | ||
| 814 | volatile long has_int_lock; | ||
| 815 | volatile int cpu_int; | ||
| 816 | volatile long has_res_lock; | ||
| 817 | volatile int cpu_res; | ||
| 818 | #endif /* NS_DEBUG_SPINLOCKS */ | ||
| 819 | } ns_dev; | 807 | } ns_dev; |
| 820 | 808 | ||
| 821 | 809 | ||
