Loading io_uring/zcrx.c +6 −8 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ static inline struct page *io_zcrx_iov_page(const struct net_iov *niov) } static int io_populate_area_dma(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area, struct sg_table *sgt) struct io_zcrx_area *area) { struct sg_table *sgt = area->mem.sgt; struct scatterlist *sg; unsigned i, niov_idx = 0; Loading Loading @@ -197,6 +197,7 @@ static int io_import_umem(struct io_zcrx_ifq *ifq, if (ret < 0) mem->account_pages = 0; mem->sgt = &mem->page_sg_table; mem->pages = pages; mem->nr_folios = nr_pages; mem->size = area_reg->len; Loading @@ -211,7 +212,8 @@ static void io_release_area_mem(struct io_zcrx_mem *mem) } if (mem->pages) { unpin_user_pages(mem->pages, mem->nr_folios); sg_free_table(&mem->page_sg_table); sg_free_table(mem->sgt); mem->sgt = NULL; kvfree(mem->pages); } } Loading Loading @@ -263,7 +265,6 @@ static void io_zcrx_unmap_area(struct io_zcrx_ifq *ifq, static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) { struct sg_table *sgt; int ret; guard(mutex)(&ifq->dma_lock); Loading @@ -275,12 +276,9 @@ static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) DMA_FROM_DEVICE, IO_DMA_ATTR); if (ret < 0) return ret; sgt = &area->mem.page_sg_table; } else { sgt = area->mem.sgt; } ret = io_populate_area_dma(ifq, area, sgt); ret = io_populate_area_dma(ifq, area); if (ret == 0) area->is_mapped = true; return ret; Loading io_uring/zcrx.h +1 −1 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ struct io_zcrx_mem { unsigned long nr_folios; struct sg_table page_sg_table; unsigned long account_pages; struct sg_table *sgt; struct dma_buf_attachment *attach; struct dma_buf *dmabuf; struct sg_table *sgt; }; struct io_zcrx_area { Loading Loading
io_uring/zcrx.c +6 −8 Original line number Diff line number Diff line Loading @@ -52,9 +52,9 @@ static inline struct page *io_zcrx_iov_page(const struct net_iov *niov) } static int io_populate_area_dma(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area, struct sg_table *sgt) struct io_zcrx_area *area) { struct sg_table *sgt = area->mem.sgt; struct scatterlist *sg; unsigned i, niov_idx = 0; Loading Loading @@ -197,6 +197,7 @@ static int io_import_umem(struct io_zcrx_ifq *ifq, if (ret < 0) mem->account_pages = 0; mem->sgt = &mem->page_sg_table; mem->pages = pages; mem->nr_folios = nr_pages; mem->size = area_reg->len; Loading @@ -211,7 +212,8 @@ static void io_release_area_mem(struct io_zcrx_mem *mem) } if (mem->pages) { unpin_user_pages(mem->pages, mem->nr_folios); sg_free_table(&mem->page_sg_table); sg_free_table(mem->sgt); mem->sgt = NULL; kvfree(mem->pages); } } Loading Loading @@ -263,7 +265,6 @@ static void io_zcrx_unmap_area(struct io_zcrx_ifq *ifq, static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) { struct sg_table *sgt; int ret; guard(mutex)(&ifq->dma_lock); Loading @@ -275,12 +276,9 @@ static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) DMA_FROM_DEVICE, IO_DMA_ATTR); if (ret < 0) return ret; sgt = &area->mem.page_sg_table; } else { sgt = area->mem.sgt; } ret = io_populate_area_dma(ifq, area, sgt); ret = io_populate_area_dma(ifq, area); if (ret == 0) area->is_mapped = true; return ret; Loading
io_uring/zcrx.h +1 −1 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ struct io_zcrx_mem { unsigned long nr_folios; struct sg_table page_sg_table; unsigned long account_pages; struct sg_table *sgt; struct dma_buf_attachment *attach; struct dma_buf *dmabuf; struct sg_table *sgt; }; struct io_zcrx_area { Loading