mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
dma: Introduce dma_aligned_pow2_mask()
Currently get_naturally_aligned_size() is used by the intel iommu to compute the maximum invalidation range based on @size which is a power of 2 while being aligned with the @start address and less than the maximum range defined by @gaw. This helper is also useful for other iommu devices (virtio-iommu, SMMUv3) to make sure IOMMU UNMAP notifiers only are called with power of 2 range sizes. Let's move this latter into dma-helpers.c and rename it into dma_aligned_pow2_mask(). Also rewrite the helper so that it accomodates UINT64_MAX values for the size mask and max mask. It now returns a mask instead of a size. Change the caller. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Message-id: 20210309102742.30442-3-eric.auger@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
41ce9a9126
commit
f14fb6c2db
3 changed files with 45 additions and 23 deletions
|
@ -296,4 +296,16 @@ uint64_t dma_buf_write(uint8_t *ptr, int32_t len, QEMUSGList *sg);
|
|||
void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie,
|
||||
QEMUSGList *sg, enum BlockAcctType type);
|
||||
|
||||
/**
|
||||
* dma_aligned_pow2_mask: Return the address bit mask of the largest
|
||||
* power of 2 size less or equal than @end - @start + 1, aligned with @start,
|
||||
* and bounded by 1 << @max_addr_bits bits.
|
||||
*
|
||||
* @start: range start address
|
||||
* @end: range end address (greater than @start)
|
||||
* @max_addr_bits: max address bits (<= 64)
|
||||
*/
|
||||
uint64_t dma_aligned_pow2_mask(uint64_t start, uint64_t end,
|
||||
int max_addr_bits);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue