mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
powerpc32: refactor x_mapped_by_bats() and x_mapped_by_tlbcam() together
x_mapped_by_bats() and x_mapped_by_tlbcam() serve the same kind of purpose, and are never defined at the same time. So rename them x_block_mapped() and define them in the relevant places Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Scott Wood <oss@buserror.net>
This commit is contained in:
parent
be00ed728c
commit
3084cdb7cd
@ -72,10 +72,11 @@ unsigned long tlbcam_sz(int idx)
|
||||
return tlbcam_addrs[idx].limit - tlbcam_addrs[idx].start + 1;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FSL_BOOKE
|
||||
/*
|
||||
* Return PA for this VA if it is mapped by a CAM, or 0
|
||||
*/
|
||||
phys_addr_t v_mapped_by_tlbcam(unsigned long va)
|
||||
phys_addr_t v_block_mapped(unsigned long va)
|
||||
{
|
||||
int b;
|
||||
for (b = 0; b < tlbcam_index; ++b)
|
||||
@ -87,7 +88,7 @@ phys_addr_t v_mapped_by_tlbcam(unsigned long va)
|
||||
/*
|
||||
* Return VA for a given PA or 0 if not mapped
|
||||
*/
|
||||
unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
|
||||
unsigned long p_block_mapped(phys_addr_t pa)
|
||||
{
|
||||
int b;
|
||||
for (b = 0; b < tlbcam_index; ++b)
|
||||
@ -97,6 +98,7 @@ unsigned long p_mapped_by_tlbcam(phys_addr_t pa)
|
||||
return tlbcam_addrs[b].start+(pa-tlbcam_addrs[b].phys);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set up a variable-size TLB entry (tlbcam). The parameters are not checked;
|
||||
|
@ -159,3 +159,13 @@ struct tlbcam {
|
||||
u32 MAS7;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_6xx) || defined(CONFIG_FSL_BOOKE)
|
||||
/* 6xx have BATS */
|
||||
/* FSL_BOOKE have TLBCAM */
|
||||
phys_addr_t v_block_mapped(unsigned long va);
|
||||
unsigned long p_block_mapped(phys_addr_t pa);
|
||||
#else
|
||||
static inline phys_addr_t v_block_mapped(unsigned long va) { return 0; }
|
||||
static inline unsigned long p_block_mapped(phys_addr_t pa) { return 0; }
|
||||
#endif
|
||||
|
@ -41,32 +41,8 @@ unsigned long ioremap_base;
|
||||
unsigned long ioremap_bot;
|
||||
EXPORT_SYMBOL(ioremap_bot); /* aka VMALLOC_END */
|
||||
|
||||
#ifdef CONFIG_6xx
|
||||
#define HAVE_BATS 1
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FSL_BOOKE)
|
||||
#define HAVE_TLBCAM 1
|
||||
#endif
|
||||
|
||||
extern char etext[], _stext[];
|
||||
|
||||
#ifdef HAVE_BATS
|
||||
extern phys_addr_t v_mapped_by_bats(unsigned long va);
|
||||
extern unsigned long p_mapped_by_bats(phys_addr_t pa);
|
||||
#else /* !HAVE_BATS */
|
||||
#define v_mapped_by_bats(x) (0UL)
|
||||
#define p_mapped_by_bats(x) (0UL)
|
||||
#endif /* HAVE_BATS */
|
||||
|
||||
#ifdef HAVE_TLBCAM
|
||||
extern phys_addr_t v_mapped_by_tlbcam(unsigned long va);
|
||||
extern unsigned long p_mapped_by_tlbcam(phys_addr_t pa);
|
||||
#else /* !HAVE_TLBCAM */
|
||||
#define v_mapped_by_tlbcam(x) (0UL)
|
||||
#define p_mapped_by_tlbcam(x) (0UL)
|
||||
#endif /* HAVE_TLBCAM */
|
||||
|
||||
#define PGDIR_ORDER (32 + PGD_T_LOG2 - PGDIR_SHIFT)
|
||||
|
||||
#ifndef CONFIG_PPC_4K_PAGES
|
||||
@ -228,19 +204,10 @@ __ioremap_caller(phys_addr_t addr, unsigned long size, unsigned long flags,
|
||||
|
||||
/*
|
||||
* Is it already mapped? Perhaps overlapped by a previous
|
||||
* BAT mapping. If the whole area is mapped then we're done,
|
||||
* otherwise remap it since we want to keep the virt addrs for
|
||||
* each request contiguous.
|
||||
*
|
||||
* We make the assumption here that if the bottom and top
|
||||
* of the range we want are mapped then it's mapped to the
|
||||
* same virt address (and this is contiguous).
|
||||
* -- Cort
|
||||
* mapping.
|
||||
*/
|
||||
if ((v = p_mapped_by_bats(p)) /*&& p_mapped_by_bats(p+size-1)*/ )
|
||||
goto out;
|
||||
|
||||
if ((v = p_mapped_by_tlbcam(p)))
|
||||
v = p_block_mapped(p);
|
||||
if (v)
|
||||
goto out;
|
||||
|
||||
if (slab_is_available()) {
|
||||
@ -278,7 +245,8 @@ void iounmap(volatile void __iomem *addr)
|
||||
* If mapped by BATs then there is nothing to do.
|
||||
* Calling vfree() generates a benign warning.
|
||||
*/
|
||||
if (v_mapped_by_bats((unsigned long)addr)) return;
|
||||
if (v_block_mapped((unsigned long)addr))
|
||||
return;
|
||||
|
||||
if (addr > high_memory && (unsigned long) addr < ioremap_bot)
|
||||
vunmap((void *) (PAGE_MASK & (unsigned long)addr));
|
||||
@ -403,7 +371,7 @@ static int __change_page_attr(struct page *page, pgprot_t prot)
|
||||
BUG_ON(PageHighMem(page));
|
||||
address = (unsigned long)page_address(page);
|
||||
|
||||
if (v_mapped_by_bats(address) || v_mapped_by_tlbcam(address))
|
||||
if (v_block_mapped(address))
|
||||
return 0;
|
||||
if (!get_pteptr(&init_mm, address, &kpte, &kpmd))
|
||||
return -EINVAL;
|
||||
|
@ -49,7 +49,7 @@ struct batrange { /* stores address ranges mapped by BATs */
|
||||
/*
|
||||
* Return PA for this VA if it is mapped by a BAT, or 0
|
||||
*/
|
||||
phys_addr_t v_mapped_by_bats(unsigned long va)
|
||||
phys_addr_t v_block_mapped(unsigned long va)
|
||||
{
|
||||
int b;
|
||||
for (b = 0; b < 4; ++b)
|
||||
@ -61,7 +61,7 @@ phys_addr_t v_mapped_by_bats(unsigned long va)
|
||||
/*
|
||||
* Return VA for a given PA or 0 if not mapped
|
||||
*/
|
||||
unsigned long p_mapped_by_bats(phys_addr_t pa)
|
||||
unsigned long p_block_mapped(phys_addr_t pa)
|
||||
{
|
||||
int b;
|
||||
for (b = 0; b < 4; ++b)
|
||||
|
Loading…
Reference in New Issue
Block a user