I think the megaraid fusion code has a deeper problem here. Instead of playing weird games with get_free_pages and vmalloc the structure just needs to shrink by moving all the arrays of MAX_MSIX_QUEUES_FUSION size into a separate allocation for each, and then we have normall, small kmalloc allocations.