Lines Matching refs:lp
366 static int i460_alloc_large_page (struct lp_desc *lp) in i460_alloc_large_page() argument
371 lp->page = alloc_pages(GFP_KERNEL, order); in i460_alloc_large_page()
372 if (!lp->page) { in i460_alloc_large_page()
378 lp->alloced_map = kzalloc(map_size, GFP_KERNEL); in i460_alloc_large_page()
379 if (!lp->alloced_map) { in i460_alloc_large_page()
380 __free_pages(lp->page, order); in i460_alloc_large_page()
385 lp->paddr = page_to_phys(lp->page); in i460_alloc_large_page()
386 lp->refcount = 0; in i460_alloc_large_page()
391 static void i460_free_large_page (struct lp_desc *lp) in i460_free_large_page() argument
393 kfree(lp->alloced_map); in i460_free_large_page()
394 lp->alloced_map = NULL; in i460_free_large_page()
396 __free_pages(lp->page, I460_IO_PAGE_SHIFT - PAGE_SHIFT); in i460_free_large_page()
404 struct lp_desc *start, *end, *lp; in i460_insert_memory_large_io_page() local
425 for (lp = start; lp <= end; ++lp) { in i460_insert_memory_large_io_page()
426 if (!lp->alloced_map) in i460_insert_memory_large_io_page()
429 for (idx = ((lp == start) ? start_offset : 0); in i460_insert_memory_large_io_page()
430 idx < ((lp == end) ? (end_offset + 1) : I460_KPAGES_PER_IOPAGE); in i460_insert_memory_large_io_page()
433 if (test_bit(idx, lp->alloced_map)) in i460_insert_memory_large_io_page()
438 for (lp = start, i = 0; lp <= end; ++lp) { in i460_insert_memory_large_io_page()
439 if (!lp->alloced_map) { in i460_insert_memory_large_io_page()
441 if (i460_alloc_large_page(lp) < 0) in i460_insert_memory_large_io_page()
443 pg = lp - i460.lp_desc; in i460_insert_memory_large_io_page()
445 lp->paddr, 0)); in i460_insert_memory_large_io_page()
449 for (idx = ((lp == start) ? start_offset : 0); in i460_insert_memory_large_io_page()
450 idx < ((lp == end) ? (end_offset + 1) : I460_KPAGES_PER_IOPAGE); in i460_insert_memory_large_io_page()
453 mem->pages[i] = lp->page; in i460_insert_memory_large_io_page()
454 __set_bit(idx, lp->alloced_map); in i460_insert_memory_large_io_page()
455 ++lp->refcount; in i460_insert_memory_large_io_page()
465 struct lp_desc *start, *end, *lp; in i460_remove_memory_large_io_page() local
477 for (i = 0, lp = start; lp <= end; ++lp) { in i460_remove_memory_large_io_page()
478 for (idx = ((lp == start) ? start_offset : 0); in i460_remove_memory_large_io_page()
479 idx < ((lp == end) ? (end_offset + 1) : I460_KPAGES_PER_IOPAGE); in i460_remove_memory_large_io_page()
483 __clear_bit(idx, lp->alloced_map); in i460_remove_memory_large_io_page()
484 --lp->refcount; in i460_remove_memory_large_io_page()
488 if (lp->refcount == 0) { in i460_remove_memory_large_io_page()
489 pg = lp - i460.lp_desc; in i460_remove_memory_large_io_page()
492 i460_free_large_page(lp); in i460_remove_memory_large_io_page()