atomic_dec(&sp->isr_cnt); 
static irqreturn_t s2io_isr(int irq, void *dev_id, struct pt_regs *regs){	struct net_device *dev = (struct net_device *) dev_id;	nic_t *sp = dev->priv;	XENA_dev_config_t __iomem *bar0 = sp->bar0;	int i;	u64 reason = 0;	mac_info_t *mac_control;	struct config_param *config;	mac_control = &sp->mac_control;	config = &sp->config;	/*	 * Identify the cause for interrupt and call the appropriate	 * interrupt handler. Causes for the interrupt could be;	 * 1. Rx of packet.	 * 2. Tx complete.	 * 3. Link down.	 * 4. Error in any functional blocks of the NIC.	 */	reason = readq(&bar0->general_int_status);	if (!reason) {		/* The interrupt was not raised by Xena. */		return IRQ_NONE;	}	if (reason & (GEN_ERROR_INTR))		alarm_intr_handler(sp);#ifdef CONFIG_S2IO_NAPI	if (reason & GEN_INTR_RXTRAFFIC) {		if (netif_rx_schedule_prep(dev)) {			en_dis_able_nic_intrs(sp, RX_TRAFFIC_INTR,					      DISABLE_INTRS);			__netif_rx_schedule(dev);		}	}#else	/* If Intr is because of Rx Traffic */	if (reason & GEN_INTR_RXTRAFFIC) {		for (i = 0; i < config->rx_ring_num; i++) {			rx_intr_handler(&mac_control->rings[i]);		}	}#endif	/* If Intr is because of Tx Traffic */	if (reason & GEN_INTR_TXTRAFFIC) {		for (i = 0; i < config->tx_fifo_num; i++)			tx_intr_handler(&mac_control->fifos[i]);	}	/*	 * If the Rx buffer count is below the panic threshold then	 * reallocate the buffers from the interrupt handler itself,	 * else schedule a tasklet to reallocate the buffers.	 */#ifndef CONFIG_S2IO_NAPI	for (i = 0; i < config->rx_ring_num; i++) {		int ret;		int rxb_size = atomic_read(&sp->rx_bufs_left[i]);		int level = rx_buffer_level(sp, rxb_size, i);		if ((level == PANIC) && (!TASKLET_IN_USE)) {			DBG_PRINT(INTR_DBG, "%s: Rx BD hit ", dev->name);			DBG_PRINT(INTR_DBG, "PANIC levels\n");			if ((ret = fill_rx_buffers(sp, i)) == -ENOMEM) {				DBG_PRINT(ERR_DBG, "%s:Out of memory",					  dev->name);				DBG_PRINT(ERR_DBG, " in ISR!!\n");				clear_bit(0, (&sp->tasklet_status));				return IRQ_HANDLED;			}			clear_bit(0, (&sp->tasklet_status));		} else if (level == LOW) {			tasklet_schedule(&sp->task);		}	}#endif	return IRQ_HANDLED;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/7ba013ac029513eb4b70cfcd4b86e37c5f16c483/s2io.c/clean/drivers/net/s2io.c