BUG_ON(mp->tx_ring_skbs == 0); mp->tx_ring_skbs--;  
static ETH_FUNC_RET_STATUS eth_tx_return_desc(struct mv643xx_private *mp,						struct pkt_info *p_pkt_info){	int tx_desc_used;#ifdef MV643XX_CHECKSUM_OFFLOAD_TX	int tx_busy_desc = mp->tx_first_desc_q;#else	int tx_busy_desc = mp->tx_curr_desc_q;#endif	struct eth_tx_desc *p_tx_desc_used;	unsigned int command_status;	/* Get the Tx Desc ring indexes */	tx_desc_used = mp->tx_used_desc_q;	p_tx_desc_used = &mp->p_tx_desc_area[tx_desc_used];	/* Sanity check */	if (p_tx_desc_used == NULL)		return ETH_ERROR;	/* Stop release. About to overlap the current available Tx descriptor */	if (tx_desc_used == tx_busy_desc && !mp->tx_resource_err)		return ETH_END_OF_JOB;	command_status = p_tx_desc_used->cmd_sts;	/* Still transmitting... */	if (command_status & (ETH_BUFFER_OWNED_BY_DMA))		return ETH_RETRY;	/* Pass the packet information to the caller */	p_pkt_info->cmd_sts = command_status;	p_pkt_info->return_info = mp->tx_skb[tx_desc_used];	mp->tx_skb[tx_desc_used] = NULL;	/* Update the next descriptor to release. */	mp->tx_used_desc_q = (tx_desc_used + 1) % mp->tx_ring_size;	/* Any Tx return cancels the Tx resource error status */	mp->tx_resource_err = 0;	return ETH_OK;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b111ceb68ac4c44d1a6fa697c55f267fa09b1058/mv643xx_eth.c/buggy/drivers/net/mv643xx_eth.c