예제 #1
0
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;
}
예제 #2
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 ;
}