cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

iommu-helper.c (755B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * IOMMU helper functions for the free area management
      4 */
      5
      6#include <linux/bitmap.h>
      7#include <linux/iommu-helper.h>
      8
      9unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
     10			       unsigned long start, unsigned int nr,
     11			       unsigned long shift, unsigned long boundary_size,
     12			       unsigned long align_mask)
     13{
     14	unsigned long index;
     15
     16	/* We don't want the last of the limit */
     17	size -= 1;
     18again:
     19	index = bitmap_find_next_zero_area(map, size, start, nr, align_mask);
     20	if (index < size) {
     21		if (iommu_is_span_boundary(index, nr, shift, boundary_size)) {
     22			start = ALIGN(shift + index, boundary_size) - shift;
     23			goto again;
     24		}
     25		bitmap_set(map, index, nr);
     26		return index;
     27	}
     28	return -1;
     29}