/** * kvm_mips_walk_pgd() - Walk page table with optional allocation. * @pgd: Page directory pointer. * @addr: Address to index page table using. * @cache: MMU page cache to allocate new page tables from, or NULL. * * Walk the page tables pointed to by @pgd to find the PTE corresponding to the * address @addr. If page tables don't exist for @addr, they will be created * from the MMU cache if @cache is not NULL. * * Returns: Pointer to pte_t corresponding to @addr. * NULL if a page table doesn't exist for @addr and !@cache. * NULL if a page table allocation failed. */ static pte_t *kvm_mips_walk_pgd(pgd_t *pgd, struct kvm_mmu_memory_cache *cache, unsigned long addr) { pud_t *pud; pmd_t *pmd; pgd += pgd_index(addr); if (pgd_none(*pgd)) { /* Not used on MIPS yet */ BUG(); return NULL; } pud = pud_offset(pgd, addr); if (pud_none(*pud)) { pmd_t *new_pmd; if (!cache) return NULL; new_pmd = mmu_memory_cache_alloc(cache); pmd_init((unsigned long)new_pmd, (unsigned long)invalid_pte_table); pud_populate(NULL, pud, new_pmd); } pmd = pmd_offset(pud, addr); if (pmd_none(*pmd)) { pte_t *new_pte; if (!cache) return NULL; new_pte = mmu_memory_cache_alloc(cache); clear_page(new_pte); pmd_populate_kernel(NULL, pmd, new_pte); } return pte_offset(pmd, addr); }
void __init pagetable_init(void) { unsigned long vaddr; pgd_t *pgd_base; pgd_init((unsigned long)swapper_pg_dir); #ifndef __PAGETABLE_PMD_FOLDED pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); #endif pgd_base = swapper_pg_dir; vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; fixrange_init(vaddr, vaddr + FIXADDR_SIZE, pgd_base); }
void __init pagetable_init(void) { unsigned long vaddr; pgd_t *pgd_base; /* Initialize the entire pgd. */ pgd_init((unsigned long)swapper_pg_dir); pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); pgd_base = swapper_pg_dir; /* * Fixed mappings: */ vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; fixrange_init(vaddr, 0, pgd_base); }
void __init pagetable_init(void) { unsigned long vaddr; pgd_t *pgd_base; #ifdef CONFIG_HIGHMEM pgd_t *pgd; pud_t *pud; pmd_t *pmd; pte_t *pte; #endif /* Initialize the entire pgd. */ pgd_init((unsigned long)swapper_pg_dir); pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table); pgd_base = swapper_pg_dir; /* * Fixed mappings: */ vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK; fixrange_init(vaddr, 0, pgd_base); #ifdef CONFIG_HIGHMEM /* * Permanent kmaps: */ vaddr = PKMAP_BASE; fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base); pgd = swapper_pg_dir + __pgd_offset(vaddr); pud = pud_offset(pgd, vaddr); pmd = pmd_offset(pud, vaddr); pte = pte_offset_kernel(pmd, vaddr); pkmap_page_table = pte; #endif }
JNIEXPORT jboolean JNICALL Java_com_bkc_android_mdxplayer_PCMRender_sdrv_1open (JNIEnv *env, jobject obj, jstring path) { int err; // kick double if ( op_mode ) return JNI_TRUE; if ( !pmdinit_flag ) { pmd_init(); pmdinit_flag = 1; } const char *file = (*env)->GetStringUTFChars( env , path , NULL ); if ( pmd_is_pmd( file ) ) { op_mode = MODE_PMD; pmd_setrate ( freq ); err = pmd_play ( file , pcmdir ); } else { op_mode = MODE_MDX; mdx_set_rate ( freq ); err = mdx_open( &mdx_data , (char *)file , pcmdir ); } output_log("freq = %d MAX_SIZE=%d", freq, MAX_SIZE); output_log("Library : DATE:%s TIME:%s", __DATE__, __TIME__); (*env)->ReleaseStringUTFChars( env , path , file ); if ( op_mode == MODE_MDX ) { song_len = mdx_get_length( &mdx_data ); mdx_set_max_loop( &mdx_data , 0 ); } if ( op_mode == MODE_PMD ) song_len = ( pmd_length_sec() + pmd_loop_sec() ); fade_init(); if (err) { op_mode = MODE_NONE; return JNI_TRUE; } return JNI_FALSE; }