35 #include <linux/device.h>
36 #include <linux/slab.h>
37 #include <linux/sched.h>
41 static void __ipath_release_user_pages(
struct page **
p,
size_t num_pages,
47 ipath_cdbg(
MM,
"%lu/%lu put_page %p\n", (
unsigned long) i,
48 (
unsigned long) num_pages, p[i]);
56 static int __ipath_get_user_pages(
unsigned long start_page,
size_t num_pages,
59 unsigned long lock_limit;
65 if (num_pages > lock_limit) {
71 (
unsigned long) num_pages, start_page);
76 num_pages - got, 1, 1,
88 __ipath_release_user_pages(p, got, 0);
111 phys = pci_map_page(hwdev, page, offset, size, direction);
114 pci_unmap_page(hwdev, phys, size, direction);
115 phys = pci_map_page(hwdev, page, offset, size, direction);
135 phys = pci_map_single(hwdev, ptr, size, direction);
138 pci_unmap_single(hwdev, phys, size, direction);
139 phys = pci_map_single(hwdev, ptr, size, direction);
168 ret = __ipath_get_user_pages(start_page, num_pages, p,
NULL);
179 __ipath_release_user_pages(p, num_pages, 1);
192 static void user_pages_account(
struct work_struct *_work)
209 __ipath_release_user_pages(p, num_pages, 1);