pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages); 
pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction); 
void pci_dma_sync_sg_for_cpu(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, int direction){	struct pcidev_cookie *pcp;	struct pci_iommu *iommu;	struct pci_strbuf *strbuf;	unsigned long flags, ctx, npages, i;	u32 bus_addr;	pcp = pdev->sysdata;	iommu = pcp->pbm->iommu;	strbuf = &pcp->pbm->stc;	if (!strbuf->strbuf_enabled)		return;	spin_lock_irqsave(&iommu->lock, flags);	/* Step 1: Record the context, if any. */	ctx = 0;	if (iommu->iommu_ctxflush &&	    strbuf->strbuf_ctxflush) {		iopte_t *iopte;		iopte = iommu->page_table +			((sglist[0].dma_address - iommu->page_table_map_base) >> IO_PAGE_SHIFT);		ctx = (iopte_val(*iopte) & IOPTE_CONTEXT) >> 47UL;	}	/* Step 2: Kick data out of streaming buffers. */	bus_addr = sglist[0].dma_address & IO_PAGE_MASK;	for(i = 1; i < nelems; i++)		if (!sglist[i].dma_length)			break;	i--;	npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length)		  - bus_addr) >> IO_PAGE_SHIFT;	pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages);	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