Lines Matching refs:pt

223 static void psb_mmu_free_pt(struct psb_mmu_pt *pt)
225 __free_page(pt->p);
226 kfree(pt);
234 struct psb_mmu_pt *pt;
247 pt = pd->tables[i];
248 if (pt)
249 psb_mmu_free_pt(pt);
262 struct psb_mmu_pt *pt = kmalloc(sizeof(*pt), GFP_KERNEL);
271 if (!pt)
274 pt->p = alloc_page(GFP_DMA32);
275 if (!pt->p) {
276 kfree(pt);
282 v = kmap_atomic(pt->p);
299 pt->count = 0;
300 pt->pd = pd;
301 pt->index = 0;
303 return pt;
310 struct psb_mmu_pt *pt;
315 pt = pd->tables[index];
316 while (!pt) {
318 pt = psb_mmu_alloc_pt(pd);
319 if (!pt)
325 psb_mmu_free_pt(pt);
327 pt = pd->tables[index];
332 pd->tables[index] = pt;
333 v[index] = (page_to_pfn(pt->p) << 12) | pd->pd_mask;
334 pt->index = index;
342 pt->v = kmap_atomic(pt->p);
343 return pt;
350 struct psb_mmu_pt *pt;
354 pt = pd->tables[index];
355 if (!pt) {
359 pt->v = kmap_atomic(pt->p);
360 return pt;
363 static void psb_mmu_pt_unmap_unlock(struct psb_mmu_pt *pt)
365 struct psb_mmu_pd *pd = pt->pd;
368 kunmap_atomic(pt->v);
369 if (pt->count == 0) {
371 v[pt->index] = pd->invalid_pde;
372 pd->tables[pt->index] = NULL;
375 psb_mmu_clflush(pd->driver, (void *)&v[pt->index]);
380 psb_mmu_free_pt(pt);
386 static inline void psb_mmu_set_pte(struct psb_mmu_pt *pt, unsigned long addr,
389 pt->v[psb_mmu_pt_index(addr)] = pte;
392 static inline void psb_mmu_invalidate_pte(struct psb_mmu_pt *pt,
395 pt->v[psb_mmu_pt_index(addr)] = pt->pd->invalid_pte;
481 struct psb_mmu_pt *pt;
510 pt = psb_mmu_pt_map_lock(pd, addr);
511 if (!pt)
514 psb_clflush(&pt->v[psb_mmu_pt_index(addr)]);
518 psb_mmu_pt_unmap_unlock(pt);
528 struct psb_mmu_pt *pt;
541 pt = psb_mmu_pt_alloc_map_lock(pd, addr);
542 if (!pt)
545 psb_mmu_invalidate_pte(pt, addr);
546 --pt->count;
548 psb_mmu_pt_unmap_unlock(pt);
568 struct psb_mmu_pt *pt;
597 pt = psb_mmu_pt_map_lock(pd, addr);
598 if (!pt)
601 psb_mmu_invalidate_pte(pt, addr);
602 --pt->count;
605 psb_mmu_pt_unmap_unlock(pt);
624 struct psb_mmu_pt *pt;
639 pt = psb_mmu_pt_alloc_map_lock(pd, addr);
640 if (!pt) {
646 psb_mmu_set_pte(pt, addr, pte);
647 pt->count++;
649 psb_mmu_pt_unmap_unlock(pt);
671 struct psb_mmu_pt *pt;
703 pt = psb_mmu_pt_alloc_map_lock(pd, addr);
704 if (!pt)
709 psb_mmu_set_pte(pt, addr, pte);
710 pt->count++;
712 psb_mmu_pt_unmap_unlock(pt);
737 struct psb_mmu_pt *pt;
742 pt = psb_mmu_pt_map_lock(pd, virtual);
743 if (!pt) {
761 tmp = pt->v[psb_mmu_pt_index(virtual)];
768 psb_mmu_pt_unmap_unlock(pt);