OSDN Git Service

wlcore: tidy up use of fw_log.actual_buff_size
authorRussell King <rmk+kernel@armlinux.org.uk>
Thu, 3 Jun 2021 11:54:14 +0000 (12:54 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 14 Jun 2021 15:49:41 +0000 (18:49 +0300)
Tidy up the use of fw_log.actual_buff_size - rather than reading it
multiple times and applying the endian conversion, read it once into
actual_len and use that instead.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/E1lolvS-0003Ql-NJ@rmk-PC.armlinux.org.uk
drivers/net/wireless/ti/wlcore/event.c

index a68bbad..a5c261a 100644 (file)
@@ -40,7 +40,7 @@ int wlcore_event_fw_logger(struct wl1271 *wl)
        buffer = kzalloc(WL18XX_LOGGER_SDIO_BUFF_MAX, GFP_KERNEL);
        if (!buffer) {
                wl1271_error("Fail to allocate fw logger memory");
-               fw_log.actual_buff_size = cpu_to_le32(0);
+               actual_len = 0;
                goto out;
        }
 
@@ -49,30 +49,30 @@ int wlcore_event_fw_logger(struct wl1271 *wl)
        if (ret < 0) {
                wl1271_error("Fail to read logger buffer, error_id = %d",
                             ret);
-               fw_log.actual_buff_size = cpu_to_le32(0);
+               actual_len = 0;
                goto free_out;
        }
 
        memcpy(&fw_log, buffer, sizeof(fw_log));
 
-       if (le32_to_cpu(fw_log.actual_buff_size) == 0)
+       actual_len = le32_to_cpu(fw_log.actual_buff_size);
+       if (actual_len == 0)
                goto free_out;
 
-       actual_len = le32_to_cpu(fw_log.actual_buff_size);
        start_loc = (le32_to_cpu(fw_log.buff_read_ptr) -
                        internal_fw_addrbase) - addr;
        end_buff_addr += le32_to_cpu(fw_log.max_buff_size);
        available_len = end_buff_addr -
                        (le32_to_cpu(fw_log.buff_read_ptr) -
                                 internal_fw_addrbase);
-       actual_len = min(actual_len, available_len);
-       len = actual_len;
 
+       /* Copy initial part from end of ring buffer */
+       len = min(actual_len, available_len);
        wl12xx_copy_fwlog(wl, &buffer[start_loc], len);
-       clear_addr = addr + start_loc + le32_to_cpu(fw_log.actual_buff_size) +
-                       internal_fw_addrbase;
+       clear_addr = addr + start_loc + actual_len + internal_fw_addrbase;
 
-       len = le32_to_cpu(fw_log.actual_buff_size) - len;
+       /* Copy any remaining part from beginning of ring buffer */
+       len = actual_len - len;
        if (len) {
                wl12xx_copy_fwlog(wl,
                                  &buffer[WL18XX_LOGGER_BUFF_OFFSET],
@@ -93,7 +93,7 @@ int wlcore_event_fw_logger(struct wl1271 *wl)
 free_out:
        kfree(buffer);
 out:
-       return le32_to_cpu(fw_log.actual_buff_size);
+       return actual_len;
 }
 EXPORT_SYMBOL_GPL(wlcore_event_fw_logger);