#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>
+#include <linux/vmalloc.h>
#include <asm/hardirq.h>
#include <linux/firmware.h>
if (min_size <= fw_priv->alloc_size)
return 0;
- new_data = kmalloc(fw_priv->alloc_size + PAGE_SIZE, GFP_KERNEL);
+ new_data = vmalloc(fw_priv->alloc_size + PAGE_SIZE);
if (!new_data) {
printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
/* Make sure that we don't keep incomplete data */
fw_priv->alloc_size += PAGE_SIZE;
if (fw_priv->fw->data) {
memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
- kfree(fw_priv->fw->data);
+ vfree(fw_priv->fw->data);
}
fw_priv->fw->data = new_data;
BUG_ON(min_size > fw_priv->alloc_size);
*firmware = fw_priv->fw;
} else {
retval = -ENOENT;
- kfree(fw_priv->fw->data);
+ vfree(fw_priv->fw->data);
kfree(fw_priv->fw);
}
kfree(fw_priv);
release_firmware(const struct firmware *fw)
{
if (fw) {
- kfree(fw->data);
+ vfree(fw->data);
kfree(fw);
}
}