Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6: [SPARC64]: Add a secondary TSB for hugepage mappings. [SPARC]: Respect vm_page_prot in io_remap_page_range().
This commit is contained in:
@@ -76,7 +76,6 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
||||
vma->vm_pgoff = (offset >> PAGE_SHIFT) |
|
||||
((unsigned long)space << 28UL);
|
||||
|
||||
prot = __pgprot(pg_iobits);
|
||||
offset -= from;
|
||||
dir = pgd_offset(mm, from);
|
||||
flush_cache_range(vma, beg, end);
|
||||
|
@@ -22,8 +22,6 @@ struct ctx_list *ctx_list_pool;
|
||||
struct ctx_list ctx_free;
|
||||
struct ctx_list ctx_used;
|
||||
|
||||
unsigned int pg_iobits;
|
||||
|
||||
extern void ld_mmu_sun4c(void);
|
||||
extern void ld_mmu_srmmu(void);
|
||||
|
||||
|
@@ -2130,6 +2130,13 @@ static unsigned long srmmu_pte_to_pgoff(pte_t pte)
|
||||
return pte_val(pte) >> SRMMU_PTE_FILE_SHIFT;
|
||||
}
|
||||
|
||||
static pgprot_t srmmu_pgprot_noncached(pgprot_t prot)
|
||||
{
|
||||
prot &= ~__pgprot(SRMMU_CACHE);
|
||||
|
||||
return prot;
|
||||
}
|
||||
|
||||
/* Load up routines and constants for sun4m and sun4d mmu */
|
||||
void __init ld_mmu_srmmu(void)
|
||||
{
|
||||
@@ -2150,9 +2157,9 @@ void __init ld_mmu_srmmu(void)
|
||||
BTFIXUPSET_INT(page_readonly, pgprot_val(SRMMU_PAGE_RDONLY));
|
||||
BTFIXUPSET_INT(page_kernel, pgprot_val(SRMMU_PAGE_KERNEL));
|
||||
page_kernel = pgprot_val(SRMMU_PAGE_KERNEL);
|
||||
pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF;
|
||||
|
||||
/* Functions */
|
||||
BTFIXUPSET_CALL(pgprot_noncached, srmmu_pgprot_noncached, BTFIXUPCALL_NORM);
|
||||
#ifndef CONFIG_SMP
|
||||
BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2);
|
||||
#endif
|
||||
|
@@ -1589,7 +1589,10 @@ static void sun4c_flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
|
||||
|
||||
static inline void sun4c_mapioaddr(unsigned long physaddr, unsigned long virt_addr)
|
||||
{
|
||||
unsigned long page_entry;
|
||||
unsigned long page_entry, pg_iobits;
|
||||
|
||||
pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE |
|
||||
_SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE;
|
||||
|
||||
page_entry = ((physaddr >> PAGE_SHIFT) & SUN4C_PFN_MASK);
|
||||
page_entry |= ((pg_iobits | _SUN4C_PAGE_PRIV) & ~(_SUN4C_PAGE_PRESENT));
|
||||
@@ -2134,6 +2137,13 @@ void __init sun4c_paging_init(void)
|
||||
printk("SUN4C: %d mmu entries for the kernel\n", cnt);
|
||||
}
|
||||
|
||||
static pgprot_t sun4c_pgprot_noncached(pgprot_t prot)
|
||||
{
|
||||
prot |= __pgprot(_SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE);
|
||||
|
||||
return prot;
|
||||
}
|
||||
|
||||
/* Load up routines and constants for sun4c mmu */
|
||||
void __init ld_mmu_sun4c(void)
|
||||
{
|
||||
@@ -2156,10 +2166,9 @@ void __init ld_mmu_sun4c(void)
|
||||
BTFIXUPSET_INT(page_readonly, pgprot_val(SUN4C_PAGE_READONLY));
|
||||
BTFIXUPSET_INT(page_kernel, pgprot_val(SUN4C_PAGE_KERNEL));
|
||||
page_kernel = pgprot_val(SUN4C_PAGE_KERNEL);
|
||||
pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE |
|
||||
_SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE;
|
||||
|
||||
/* Functions */
|
||||
BTFIXUPSET_CALL(pgprot_noncached, sun4c_pgprot_noncached, BTFIXUPCALL_NORM);
|
||||
BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM);
|
||||
BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM);
|
||||
|
||||
|
Reference in New Issue
Block a user