Hi Marek
Marek Vasut 於 2025/9/22 上午 06:40 寫道:
On 9/15/25 4:35 PM, Lucien.Jheng wrote:
Hi,
sorry for the late reply.
+__weak int en8811h_read_fw(void **addr)
Does this still have to be a __weak function, now that it uses
generic fw loader ?
+{
+ void *buffer;
+ int ret;
+
+ if (!IS_ENABLED(CONFIG_FS_LOADER))
+ return -EOPNOTSUPP;
+
+ buffer = malloc(EN8811H_MD32_DM_SIZE + EN8811H_MD32_DSP_SIZE);
+ if (!buffer) {
+ printf("Failed to allocate memory for firmware\n");
+ return -ENOMEM;
+ }
+
+ ret = request_firmware_into_buf_via_script(&buffer,
I think 'buffer' without the & should be used here.
Regarding buffer,
I've reviewed the function definition for
request_firmware_into_buf_via_script.
The first parameter is void **buf, which is a pointer to a pointer.
I think passing &buffer is the correct way to call this function.
If we were to pass just buffer (a void *), the function would receive
a copy of the pointer's value, and any memory allocation inside the
function would not be reflected in our original buffer variable.
Please let me know if my understanding is incorrect, as I want to
ensure I'm using the function as intended.
I was confused by the current request_firmware_into_buf_via_script()
interface.
In the current design, passing pointer to pointer into
request_firmware_into_buf_via_script() is not necessary, because the
request_firmware_into_buf_via_script() function internally does
memcpy() into the 'buf' buffer, and for that to work, pointer to
pointer is not necessary, plain pointer to buffer would do just fine.
I think this current interface which does memcpy() is actually better
than the one I originally suggested which would use memdup(), so let's
keep it.
I now sent an update patch to remove the pointer to pointer:
[PATCH] misc: fs_loader: Use buffer pointer in
request_firmware_into_buf_via_script()
That should be all I hope.
Thank you for sharing.
After your patch commit, I will update the driver again.