mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-13 03:06:54 +07:00
iwlwifi: alloc memory dynamically also for DVM
For old firmwares the memory wasn't allocated, resulting in panic.
Make it dynamically allocated as well. Allow any order of functions
call.
Fixes: eef187a7b8
("iwlwifi: enlarge number of ucode sections")
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Tested-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
33e962c887
commit
d546530e56
@ -291,11 +291,33 @@ static struct fw_sec *get_sec(struct iwl_firmware_pieces *pieces,
|
||||
return &pieces->img[type].sec[sec];
|
||||
}
|
||||
|
||||
static void alloc_sec_data(struct iwl_firmware_pieces *pieces,
|
||||
enum iwl_ucode_type type,
|
||||
int sec)
|
||||
{
|
||||
struct fw_img_parsing *img = &pieces->img[type];
|
||||
struct fw_sec *sec_memory;
|
||||
int size = sec + 1;
|
||||
size_t alloc_size = sizeof(*img->sec) * size;
|
||||
|
||||
if (img->sec && img->sec_counter >= size)
|
||||
return;
|
||||
|
||||
sec_memory = krealloc(img->sec, alloc_size, GFP_KERNEL);
|
||||
if (!sec_memory)
|
||||
return;
|
||||
|
||||
img->sec = sec_memory;
|
||||
img->sec_counter = size;
|
||||
}
|
||||
|
||||
static void set_sec_data(struct iwl_firmware_pieces *pieces,
|
||||
enum iwl_ucode_type type,
|
||||
int sec,
|
||||
const void *data)
|
||||
{
|
||||
alloc_sec_data(pieces, type, sec);
|
||||
|
||||
pieces->img[type].sec[sec].data = data;
|
||||
}
|
||||
|
||||
@ -304,6 +326,8 @@ static void set_sec_size(struct iwl_firmware_pieces *pieces,
|
||||
int sec,
|
||||
size_t size)
|
||||
{
|
||||
alloc_sec_data(pieces, type, sec);
|
||||
|
||||
pieces->img[type].sec[sec].size = size;
|
||||
}
|
||||
|
||||
@ -319,6 +343,8 @@ static void set_sec_offset(struct iwl_firmware_pieces *pieces,
|
||||
int sec,
|
||||
u32 offset)
|
||||
{
|
||||
alloc_sec_data(pieces, type, sec);
|
||||
|
||||
pieces->img[type].sec[sec].offset = offset;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user