pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages); 
pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction); 
void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, int direction){	struct pcidev_cookie *pcp;	struct pci_iommu *iommu;	struct pci_strbuf *strbuf;	iopte_t *base;	unsigned long flags, ctx, i, npages;	u32 bus_addr;	if (direction == PCI_DMA_NONE)		BUG();	pcp = pdev->sysdata;	iommu = pcp->pbm->iommu;	strbuf = &pcp->pbm->stc;		bus_addr = sglist->dma_address & IO_PAGE_MASK;	for (i = 1; i < nelems; i++)		if (sglist[i].dma_length == 0)			break;	i--;	npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length) - bus_addr) >> IO_PAGE_SHIFT;	base = iommu->page_table +		((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT);#ifdef DEBUG_PCI_IOMMU	if (IOPTE_IS_DUMMY(iommu, base))		printk("pci_unmap_sg called on non-mapped region %016lx,%d from %016lx\n", sglist->dma_address, nelems, __builtin_return_address(0));#endif	spin_lock_irqsave(&iommu->lock, flags);	/* Record the context, if any. */	ctx = 0;	if (iommu->iommu_ctxflush)		ctx = (iopte_val(*base) & IOPTE_CONTEXT) >> 47UL;	/* Step 1: Kick data out of streaming buffers if necessary. */	if (strbuf->strbuf_enabled)		pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages);	/* Step 2: Clear out first TSB entry. */	iopte_make_dummy(iommu, base);	free_streaming_cluster(iommu, bus_addr - iommu->page_table_map_base,			       npages, ctx);	spin_unlock_irqrestore(&iommu->lock, flags);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/7c963ad1d113790a8c723a178988b675868f3abe/pci_iommu.c/clean/arch/sparc64/kernel/pci_iommu.c