申请memory的鲁棒性建议(物理连续失败后用虚拟连续memory替代)

code中我们的驱动如果不一定要求是物理连续的memory的话,在申请memory的时候,可以先向伙伴系统要物理连续的memory,如果失败的话,可以通过vzalloc来申请虚拟连续的memory。这样在	__get_free_pages失败后,可以通过vzalloc来申请memory。虽然使用vzalloc申请的memory使用性能可能会差一下,但是总比__get_free_pages失败后直接返回强,至少driver可以整个工作。

instance->ctrl_context_pages = get_order(sizeof(struct fusion_context));
	instance->ctrl_context = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
		instance->ctrl_context_pages);
	if (!instance->ctrl_context) {
		/* fall back to using vmalloc for fusion_context */
		instance->ctrl_context = vzalloc(sizeof(struct fusion_context));
		if (!instance->ctrl_context) {
			dev_err(&instance->pdev->dev, "Failed from %s %d\n", __func__, __LINE__);
			return -ENOMEM;
		}
	}


你可能感兴趣的:(Linux,源码分析)