staging: r8188eu: remove shared buffer for USB requests
authorPavel Skripkin <paskripkin@gmail.com>
Fri, 24 Sep 2021 12:27:04 +0000 (14:27 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 27 Sep 2021 15:37:12 +0000 (17:37 +0200)
Remove the shared buffer for USB requests because it is not necessary
and use a local on stack variable since the new Core USB API does not
have the constraints of usb_control_msg().

Co-developed-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
Link: https://lore.kernel.org/r/20210924122705.3781-16-fmdefrancesco@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/r8188eu/hal/usb_ops_linux.c
drivers/staging/r8188eu/include/drv_types.h
drivers/staging/r8188eu/os_dep/usb_intf.c

index 88db7488b3a2c8819f0c0541c35408c415475479..3ede93cd68d6091e40f2e0879255cb91a7d6c993 100644 (file)
@@ -14,7 +14,7 @@ static int usb_read(struct intf_hdl *intf, u16 value, void *data, u8 size)
        struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
        struct usb_device *udev = dvobjpriv->pusbdev;
        int status;
-       u8 *io_buf; /* Pointer to I/O buffer */
+       u8 io_buf[4];
 
        mutex_lock(&dvobjpriv->usb_vendor_req_mutex);
 
@@ -23,9 +23,6 @@ static int usb_read(struct intf_hdl *intf, u16 value, void *data, u8 size)
                goto mutex_unlock;
        }
 
-       /*  Acquire IO memory for vendorreq */
-       io_buf = dvobjpriv->usb_vendor_req_buf;
-
        status = usb_control_msg_recv(udev, 0, REALTEK_USB_VENQT_CMD_REQ,
                                      REALTEK_USB_VENQT_READ, value,
                                      REALTEK_USB_VENQT_CMD_IDX, io_buf,
@@ -70,14 +67,14 @@ static int usb_write(struct intf_hdl *intf, u16 value, void *data, u8 size)
        struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
        struct usb_device *udev = dvobjpriv->pusbdev;
        int status;
-       u8 *io_buf; /* Pointer to I/O buffer */
+       u8 io_buf[VENDOR_CMD_MAX_DATA_LEN];
 
        mutex_lock(&dvobjpriv->usb_vendor_req_mutex);
 
-       if (adapt->bSurpriseRemoved || adapt->pwrctrlpriv.pnp_bstop_trx)
-               return -EPERM;
-
-       io_buf = dvobjpriv->usb_vendor_req_buf;
+       if (adapt->bSurpriseRemoved || adapt->pwrctrlpriv.pnp_bstop_trx) {
+               status = -EPERM;
+               goto mutex_unlock;
+       }
 
        memcpy(io_buf, data, size);
        status = usb_control_msg_send(udev, 0, REALTEK_USB_VENQT_CMD_REQ,
index c96a33c8c621ce625146500f83abf2c234a92d92..6d63429d06c601c4a907d56daeb07f14c9ad0429 100644 (file)
@@ -168,9 +168,6 @@ struct dvobj_priv {
        struct semaphore usb_suspend_sema;
        struct mutex  usb_vendor_req_mutex;
 
-       u8 *usb_alloc_vendor_req_buf;
-       u8 *usb_vendor_req_buf;
-
        struct usb_interface *pusbintf;
        struct usb_device *pusbdev;
 
index db312a674c9a78c875e9dc51491db1500ac05597..da0e703549a4fdaaf269705589998eb1ab67bd53 100644 (file)
@@ -75,24 +75,12 @@ static struct rtw_usb_drv *usb_drv = &rtl8188e_usb_drv;
 
 static u8 rtw_init_intf_priv(struct dvobj_priv *dvobj)
 {
-       u8 rst = _SUCCESS;
-
        mutex_init(&dvobj->usb_vendor_req_mutex);
-
-       dvobj->usb_alloc_vendor_req_buf = kzalloc(MAX_USB_IO_CTL_SIZE, GFP_KERNEL);
-       if (!dvobj->usb_alloc_vendor_req_buf) {
-               DBG_88E("alloc usb_vendor_req_buf failed... /n");
-               rst = _FAIL;
-               goto exit;
-       }
-       dvobj->usb_vendor_req_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(dvobj->usb_alloc_vendor_req_buf), ALIGNMENT_UNIT);
-exit:
-       return rst;
+       return _SUCCESS;
 }
 
 static void rtw_deinit_intf_priv(struct dvobj_priv *dvobj)
 {
-       kfree(dvobj->usb_alloc_vendor_req_buf);
        mutex_destroy(&dvobj->usb_vendor_req_mutex);
 }