Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 161395
b: refs/heads/master
c: 9fd126b
h: refs/heads/master
i:
  161393: a0eca4f
  161391: 4ae8980
v: v3
  • Loading branch information
Venkatesh Pallipadi authored and H. Peter Anvin committed Aug 26, 2009
1 parent 4e9bf60 commit 61beea9
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 279e669b3fc0068cc3509e8e53036999e1e86588
refs/heads/master: 9fd126bc742f74a95d2ba610247712ff05da02fe
5 changes: 5 additions & 0 deletions trunk/arch/x86/include/asm/pat.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,9 @@ extern int free_memtype(u64 start, u64 end);
extern int kernel_map_sync_memtype(u64 base, unsigned long size,
unsigned long flag);

int io_reserve_memtype(resource_size_t start, resource_size_t end,
unsigned long *type);

void io_free_memtype(resource_size_t start, resource_size_t end);

#endif /* _ASM_X86_PAT_H */
49 changes: 49 additions & 0 deletions trunk/arch/x86/mm/pat.c
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,55 @@ int free_memtype(u64 start, u64 end)
}


/**
* io_reserve_memtype - Request a memory type mapping for a region of memory
* @start: start (physical address) of the region
* @end: end (physical address) of the region
* @type: A pointer to memtype, with requested type. On success, requested
* or any other compatible type that was available for the region is returned
*
* On success, returns 0
* On failure, returns non-zero
*/
int io_reserve_memtype(resource_size_t start, resource_size_t end,
unsigned long *type)
{
unsigned long req_type = *type;
unsigned long new_type;
int ret;

WARN_ON_ONCE(iomem_map_sanity_check(start, end - start));

ret = reserve_memtype(start, end, req_type, &new_type);
if (ret)
goto out_err;

if (!is_new_memtype_allowed(req_type, new_type))
goto out_free;

if (kernel_map_sync_memtype(start, end - start, new_type) < 0)
goto out_free;

*type = new_type;
return 0;

out_free:
free_memtype(start, end);
ret = -EBUSY;
out_err:
return ret;
}

/**
* io_free_memtype - Release a memory type mapping for a region of memory
* @start: start (physical address) of the region
* @end: end (physical address) of the region
*/
void io_free_memtype(resource_size_t start, resource_size_t end)
{
free_memtype(start, end);
}

pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
unsigned long size, pgprot_t vma_prot)
{
Expand Down

0 comments on commit 61beea9

Please sign in to comment.