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

dax-dev.c (963B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Copyright (c) 2016, Intel Corporation.
      4 */
      5#include "test/nfit_test.h"
      6#include <linux/mm.h>
      7#include "../../../drivers/dax/dax-private.h"
      8
      9phys_addr_t dax_pgoff_to_phys(struct dev_dax *dev_dax, pgoff_t pgoff,
     10		unsigned long size)
     11{
     12	int i;
     13
     14	for (i = 0; i < dev_dax->nr_range; i++) {
     15		struct dev_dax_range *dax_range = &dev_dax->ranges[i];
     16		struct range *range = &dax_range->range;
     17		unsigned long long pgoff_end;
     18		phys_addr_t addr;
     19
     20		pgoff_end = dax_range->pgoff + PHYS_PFN(range_len(range)) - 1;
     21		if (pgoff < dax_range->pgoff || pgoff > pgoff_end)
     22			continue;
     23		addr = PFN_PHYS(pgoff - dax_range->pgoff) + range->start;
     24		if (addr + size - 1 <= range->end) {
     25			if (get_nfit_res(addr)) {
     26				struct page *page;
     27
     28				if (dev_dax->region->align > PAGE_SIZE)
     29					return -1;
     30
     31				page = vmalloc_to_page((void *)addr);
     32				return PFN_PHYS(page_to_pfn(page));
     33			}
     34			return addr;
     35		}
     36		break;
     37	}
     38	return -1;
     39}