On 28-Jun-19 1:46 PM, Bruce Richardson wrote:
On Thu, Jun 27, 2019 at 01:28:04PM +0100, Burakov, Anatoly wrote:
On 27-Jun-19 11:40 AM, Bruce Richardson wrote:
Add the create/destroy driver functions so that we can actually allocate
a rawdev and destroy it when done. No rawdev API functions are actually
implemented at this point.

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
---

<snip>

+       rawdev->driver_name = dev->device.driver->name;
+
+       ioat = rawdev->dev_private;
+       ioat->rawdev = rawdev;
+       ioat->regs = dev->mem_resource[0].addr;
+       ioat->ring_size = 0;
+       ioat->desc_ring = NULL;
+       ioat->status_addr = rte_malloc_virt2iova(ioat) +
+                       offsetof(struct rte_ioat_rawdev, status);

While reviewing other patch, i remembered that i've seen this here. You
can't make any guarantees about IOVA addresses in rte_malloc-allocated
memory. Are you sure you don't require IOVA-contiguous memory here?

Presumably we can guarantee that for structures less than 1 page in size,
this will work? I believe the device structure should be within that page
limit.


No, we can't. That would only be true if you were allocating IOVA-contiguous memory. Otherwise there's nothing stopping the allocator to allocate even a few kilobytes across page boundary.

You can only ever guarantee that *one cache line* will not cross the page boundary with rte_malloc. With rte_memzone and IOVA_CONTIG flag, you'll be able to guarantee IOVA-contiguousness in all cases (or allocation failure).

--
Thanks,
Anatoly

Reply via email to