wifi: brcm80211: fmac: Add error log in brcmf_usb_dl_cmd()
authorWentao Liang <vulab@iscas.ac.cn>
Tue, 22 Apr 2025 06:59:38 +0000 (14:59 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 23 Apr 2025 13:36:51 +0000 (15:36 +0200)
In brcmf_usb_dl_cmd(), the error logging is not enough to describe
the error state. And some caller of the brcmf_usb_dl_cmd() does not
handle its error. An error log in brcmf_usb_dl_cmd() is needed to
prevent silent failure.

Add error handling in brcmf_usb_dl_cmd() to log the command id and
error code in the brcmf_usb_dl_cmd() fails. In this way, every
invocation of the function logs a message upon failure.

Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Link: https://patch.msgid.link/20250422065938.2345-1-vulab@iscas.ac.cn
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c

index 2821c27..40c2a49 100644 (file)
@@ -741,15 +741,19 @@ static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd,
                            void *buffer, int buflen)
 {
        int ret;
-       char *tmpbuf;
+       char *tmpbuf = NULL;
        u16 size;
 
-       if ((!devinfo) || (devinfo->ctl_urb == NULL))
-               return -EINVAL;
+       if (!devinfo || !devinfo->ctl_urb) {
+               ret = -EINVAL;
+               goto err;
+       }
 
        tmpbuf = kmalloc(buflen, GFP_ATOMIC);
-       if (!tmpbuf)
-               return -ENOMEM;
+       if (!tmpbuf) {
+               ret = -ENOMEM;
+               goto err;
+       }
 
        size = buflen;
        devinfo->ctl_urb->transfer_buffer_length = size;
@@ -770,18 +774,23 @@ static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd,
        ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC);
        if (ret < 0) {
                brcmf_err("usb_submit_urb failed %d\n", ret);
-               goto finalize;
+               goto err;
        }
 
        if (!brcmf_usb_ioctl_resp_wait(devinfo)) {
                usb_kill_urb(devinfo->ctl_urb);
                ret = -ETIMEDOUT;
+               goto err;
        } else {
                memcpy(buffer, tmpbuf, buflen);
        }
 
-finalize:
        kfree(tmpbuf);
+       return 0;
+
+err:
+       kfree(tmpbuf);
+       brcmf_err("dl cmd %u failed: err=%d\n", cmd, ret);
        return ret;
 }