Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9916c5dc authored by Mitchel Humpherys's avatar Mitchel Humpherys Committed by Matt Wagantall
Browse files

iommu: io-pgtable: add .map_sg op to io_pgtable_ops



The default implementation of map_sg (provided by default_iommu_map_sg
from the IOMMU API layer) actually just calls iommu_map repeatedly.
Often times there are locks or other initial setup in the implementation
of iommu_map, so there's opportunity to drastically improve performance
by factoring that out of the loop.  For this reason, io-pgtable
providers might want to implement .map_sg.  Add the declaration to the
io_pgtable_ops structure.

Change-Id: I5aa5e4e24a68e303ce2c005dc1dd0b33d5635ab3
Signed-off-by: default avatarMitchel Humpherys <mitchelh@codeaurora.org>
parent 031e4daf
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
#ifndef __IO_PGTABLE_H
#define __IO_PGTABLE_H

#include <linux/scatterlist.h>

/*
 * Public API for use by IOMMU drivers
 */
@@ -78,6 +80,8 @@ struct io_pgtable_cfg {
struct io_pgtable_ops {
	int (*map)(struct io_pgtable_ops *ops, unsigned long iova,
		   phys_addr_t paddr, size_t size, int prot);
	int (*map_sg)(struct io_pgtable_ops *ops, unsigned long iova,
		      struct scatterlist *sg, unsigned int nents, int prot);
	int (*unmap)(struct io_pgtable_ops *ops, unsigned long iova,
		     size_t size);
	phys_addr_t (*iova_to_phys)(struct io_pgtable_ops *ops,