for (i = 0, cpages = 0; i < count; ++i) {
p = alloc_page(gfp_flags);
+#ifdef CONFIG_XEN
+ if (p && (gfp_flags & __GFP_DMA32)) {
+ r = xen_limit_pages_to_max_mfn(p, 0, 32);
+ if (r) {
+ __free_page(p);
+ printk(KERN_ERR TTM_PFX
+ "Cannot restrict page (%d).", r);
+ p = NULL;
+ } else if (gfp_flags & __GFP_ZERO)
+ clear_page(page_address(p));
+ }
+#endif
+
if (!p) {
printk(KERN_ERR TTM_PFX "Unable to get page %u.\n", i);
return -ENOMEM;
}
+#ifdef CONFIG_XEN
+ if (flags & TTM_PAGE_FLAG_DMA32) {
+ int rc = xen_limit_pages_to_max_mfn(p, 0, 32);
+
+ if (rc) {
+ __free_page(p);
+ printk(KERN_ERR TTM_PFX
+ "Unable to restrict page (%d).",
+ rc);
+ return rc;
+ }
+ if (flags & TTM_PAGE_FLAG_ZERO_ALLOC)
+ clear_page(page_address(p));
+ }
+#endif
+
pages[r] = p;
}
return 0;