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.

Reply via email to