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

Commit 5cd9194a authored by David S. Miller's avatar David S. Miller Committed by Linus Torvalds
Browse files

[PATCH] sparc: convert IO remapping to VM_PFNMAP



Here are the Sparc bits.

Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 6aab341e
Loading
Loading
Loading
Loading
+5 −5
Original line number Original line Diff line number Diff line
@@ -32,9 +32,7 @@ static inline void io_remap_pte_range(struct mm_struct *mm, pte_t * pte, unsigne
	if (end > PMD_SIZE)
	if (end > PMD_SIZE)
		end = PMD_SIZE;
		end = PMD_SIZE;
	do {
	do {
		pte_t oldpage = *pte;
		set_pte_at(mm, address, pte, mk_pte_io(offset, prot, space));
		pte_clear(mm, address, pte);
		set_pte(pte, mk_pte_io(offset, prot, space));
		address += PAGE_SIZE;
		address += PAGE_SIZE;
		offset += PAGE_SIZE;
		offset += PAGE_SIZE;
		pte++;
		pte++;
@@ -74,7 +72,9 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
	unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
	unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;


	/* See comment in mm/memory.c remap_pfn_range */
	/* See comment in mm/memory.c remap_pfn_range */
	vma->vm_flags |= VM_IO | VM_RESERVED | VM_UNPAGED;
	vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
	vma->vm_pgoff = (offset >> PAGE_SHIFT) |
		((unsigned long)space << 28UL);


	prot = __pgprot(pg_iobits);
	prot = __pgprot(pg_iobits);
	offset -= from;
	offset -= from;
+14 −1
Original line number Original line Diff line number Diff line
@@ -15,6 +15,15 @@
#include <asm/page.h>
#include <asm/page.h>
#include <asm/tlbflush.h>
#include <asm/tlbflush.h>


static inline pte_t mk_pte_io(unsigned long page, pgprot_t prot, int space)
{
	pte_t pte;
	pte_val(pte) = (((page) | pgprot_val(prot) | _PAGE_E) &
			~(unsigned long)_PAGE_CACHE);
	pte_val(pte) |= (((unsigned long)space) << 32);
	return pte;
}

/* Remap IO memory, the same way as remap_pfn_range(), but use
/* Remap IO memory, the same way as remap_pfn_range(), but use
 * the obio memory space.
 * the obio memory space.
 *
 *
@@ -126,9 +135,13 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
	struct mm_struct *mm = vma->vm_mm;
	struct mm_struct *mm = vma->vm_mm;
	int space = GET_IOSPACE(pfn);
	int space = GET_IOSPACE(pfn);
	unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
	unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
	unsigned long phys_base;

	phys_base = offset | (((unsigned long) space) << 32UL);


	/* See comment in mm/memory.c remap_pfn_range */
	/* See comment in mm/memory.c remap_pfn_range */
	vma->vm_flags |= VM_IO | VM_RESERVED | VM_UNPAGED;
	vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
	vma->vm_pgoff = phys_base >> PAGE_SHIFT;


	prot = __pgprot(pg_iobits);
	prot = __pgprot(pg_iobits);
	offset -= from;
	offset -= from;
+0 −10
Original line number Original line Diff line number Diff line
@@ -348,16 +348,6 @@ extern unsigned long find_ecache_flush_span(unsigned long size);
struct vm_area_struct;
struct vm_area_struct;
extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t);
extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t);


/* Make a non-present pseudo-TTE. */
static inline pte_t mk_pte_io(unsigned long page, pgprot_t prot, int space)
{
	pte_t pte;
	pte_val(pte) = (((page) | pgprot_val(prot) | _PAGE_E) &
			~(unsigned long)_PAGE_CACHE);
	pte_val(pte) |= (((unsigned long)space) << 32);
	return pte;
}

/* Encode and de-code a swap entry */
/* Encode and de-code a swap entry */
#define __swp_type(entry)	(((entry).val >> PAGE_SHIFT) & 0xffUL)
#define __swp_type(entry)	(((entry).val >> PAGE_SHIFT) & 0xffUL)
#define __swp_offset(entry)	((entry).val >> (PAGE_SHIFT + 8UL))
#define __swp_offset(entry)	((entry).val >> (PAGE_SHIFT + 8UL))