static int omap_crypto_check_sg(struct scatterlist *sg, int total, int bs, u16 flags) { int len = 0; int num_sg = 0; if (!IS_ALIGNED(total, bs)) return OMAP_CRYPTO_NOT_ALIGNED; while (sg) { num_sg++; if (!IS_ALIGNED(sg->offset, 4)) return OMAP_CRYPTO_NOT_ALIGNED; if (!IS_ALIGNED(sg->length, bs)) return OMAP_CRYPTO_NOT_ALIGNED; #ifdef CONFIG_ZONE_DMA if (page_zonenum(sg_page(sg)) != ZONE_DMA) return OMAP_CRYPTO_NOT_ALIGNED; #endif len += sg->length; sg = sg_next(sg); if (len >= total) break; } if ((flags & OMAP_CRYPTO_FORCE_SINGLE_ENTRY) && num_sg > 1) return OMAP_CRYPTO_NOT_ALIGNED; if (len != total) return OMAP_CRYPTO_BAD_DATA_LENGTH; return 0; }
void test_alloc(void) { struct page *page = NULL; int i; printk("mem_map address is:%x\n", mem_map); printk("PAGE_SHIFT is:%x, PAGE_OFFSITE is:%x, ARCH_PFN_OFFSET is:%x\n", PAGE_SHIFT, PAGE_OFFSET, ARCH_PFN_OFFSET); printk("mding_mm:VMALLOC_START:%x VMALLOC_END:%x\n", VMALLOC_START, VMALLOC_END); for(i=0;i<100;i++){ page = alloc_page(GFP_KERNEL ); //__GFP_HIGHMEM printk("mding_mm:alloc_page addr:%x pfn:%x page_address:%x flag:%x zone_type:%x\n", page, page-mem_map, page_address(page), page->flags, page_zonenum(page)); // printk("mding_mm:__get_free_page addr:%x\n", __get_free_page(GFP_KERNEL | __GFP_HIGHMEM)); // __free_page(page); } printk("mding_mm:ZONE_NORMAL is:%x", ZONE_NORMAL); return ; }