sba_unmap_single(struct device *dev, dma_addr_t iova, size_t size,		 enum dma_data_direction direction){	struct ioc *ioc;#if DELAYED_RESOURCE_CNT > 0	struct sba_dma_pair *d;#endif	unsigned long flags; 	dma_addr_t offset;	DBG_RUN("%s() iovp 0x%lx/%x\n", __FUNCTION__, (long) iova, size);	ioc = GET_IOC(dev);	offset = iova & ~IOVP_MASK;	iova ^= offset;        /* clear offset bits */	size += offset;	size = ROUNDUP(size, IOVP_SIZE);	spin_lock_irqsave(&ioc->res_lock, flags);#ifdef SBA_COLLECT_STATS	ioc->usingle_calls++;	ioc->usingle_pages += size >> IOVP_SHIFT;#endif	sba_mark_invalid(ioc, iova, size);#if DELAYED_RESOURCE_CNT > 0	/* Delaying when we re-use a IO Pdir entry reduces the number	 * of MMIO reads needed to flush writes to the PCOM register.	 */	d = &(ioc->saved[ioc->saved_cnt]);	d->iova = iova;	d->size = size;	if (++(ioc->saved_cnt) >= DELAYED_RESOURCE_CNT) {		int cnt = ioc->saved_cnt;		while (cnt--) {			sba_free_range(ioc, d->iova, d->size);			d--;		}		ioc->saved_cnt = 0;		READ_REG(ioc->ioc_hpa+IOC_PCOM);	/* flush purges */	}#else /* DELAYED_RESOURCE_CNT == 0 */	sba_free_range(ioc, iova, size);	READ_REG(ioc->ioc_hpa+IOC_PCOM);	/* flush purges */#endif /* DELAYED_RESOURCE_CNT == 0 */	spin_unlock_irqrestore(&ioc->res_lock, flags);	/* XXX REVISIT for 2.5 Linux - need syncdma for zero-copy support.	** For Astro based systems this isn't a big deal WRT performance.	** As long as 2.4 kernels copyin/copyout data from/to userspace,	** we don't need the syncdma. The issue here is I/O MMU cachelines	** are *not* coherent in all cases.  May be hwrev dependent.	** Need to investigate more.	asm volatile("syncdma");		*/}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/64908ad95c34f25849412d6d4735ac10f8fb6575/sba_iommu.c/buggy/drivers/parisc/sba_iommu.c