On Wed, Nov 23, 2016 at 06:57:31PM +0800, Peter Xu wrote: > +void edu_dma(struct pci_edu_dev *dev, iova_t iova, > + size_t size, int dev_offset, bool from_device) > +{ > + uint64_t from, to; > + uint32_t cmd = EDU_CMD_DMA_START; > + > + assert(size <= EDU_DMA_SIZE_MAX); > + assert(dev_offset < EDU_DMA_SIZE_MAX && > + dev_offset >= 0); Any reason for dev_offset not to be unsigned? > + printf("edu device DMA start %s addr %p size 0x%lu off 0x%x\n", > + from_device ? "FROM" : "TO", > + (void *)iova, size, dev_offset); > + > + if (from_device) { > + from = dev_offset + EDU_DMA_START; > + to = iova; > + cmd |= EDU_CMD_DMA_FROM; > + } else { > + from = iova; > + to = EDU_DMA_START + dev_offset; > + cmd |= EDU_CMD_DMA_TO; > + } > + > + edu_reg_writeq(dev, EDU_REG_DMA_SRC, from); > + edu_reg_writeq(dev, EDU_REG_DMA_DST, to); > + edu_reg_writeq(dev, EDU_REG_DMA_COUNT, size); > + edu_reg_writel(dev, EDU_REG_DMA_CMD, cmd); > + > + /* Wait until DMA finished */ > + while (edu_reg_readl(dev, EDU_REG_DMA_CMD) & EDU_CMD_DMA_START) > + cpu_relax(); > +} -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html