LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: "Fabio M. De Francesco" <fmdefrancesco@gmail.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Larry Finger <Larry.Finger@lwfinger.net>, Phillip Potter <phil@philpotter.co.uk>, Pavel Skripkin <paskripkin@gmail.com>, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org, David Laight <david.Laight@aculab.com>, Dan Carpenter <dan.carpenter@oracle.com> Subject: Re: [PATCH v7 17/19] staging: r8188eu: shorten calls chain of rtw_read{8,16,32}() Date: Sat, 18 Sep 2021 14:19:38 +0200 [thread overview] Message-ID: <14193957.S5bSOd67d6@localhost.localdomain> (raw) In-Reply-To: <YUSrIqW5WSYuoa14@kroah.com> On Friday, September 17, 2021 4:50:10 PM CEST Greg Kroah-Hartman wrote: > On Fri, Sep 17, 2021 at 09:18:35AM +0200, Fabio M. De Francesco wrote: > > Shorten the calls chain of rtw_read8/16/32() down to the actual reads. > > For this purpose unify the three usb_read8/16/32 into the new > > usb_read(); make the latter parameterizable with 'size'; embed most of > > the code of usbctrl_vendorreq() into usb_read() and use in it the new > > usb_control_msg_recv() API of USB Core. > > > > Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Co-developed-by: Pavel Skripkin <paskripkin@gmail.com> > > Signed-off-by: Pavel Skripkin <paskripkin@gmail.com> > > Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> > > --- > > drivers/staging/r8188eu/hal/usb_ops_linux.c | 59 +++++++++++++++++++-- > > 1 file changed, 56 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/staging/r8188eu/hal/usb_ops_linux.c b/drivers/ staging/r8188eu/hal/usb_ops_linux.c > > index 2d5e9b3ba538..ef35358cf2d3 100644 > > --- a/drivers/staging/r8188eu/hal/usb_ops_linux.c > > +++ b/drivers/staging/r8188eu/hal/usb_ops_linux.c > > @@ -89,6 +89,59 @@ static int usbctrl_vendorreq(struct intf_hdl *intfhdl, u16 value, void *data, u1 > > return status; > > } > > > > +static int usb_read(struct intf_hdl *intfhdl, u16 addr, void *data, u8 size) > > +{ > > + struct adapter *adapt = intfhdl->padapter; > > + struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt); > > + struct usb_device *udev = dvobjpriv->pusbdev; > > + int status; > > + u8 *io_buf; /* Pointer to I/O buffer */ > > As you "know" size is not going to be larger than 4 (hint, you should > probably check it), just use bytes off of the stack here, and you can > ignore this buffer entirely. That will hopefully allow you in the > future to get rid of that buffer as odds are it will not be needed > anymore. Dear Greg, Yes we know that in fact, for the rtw_read*() cases, we only have 1,2,4 bytes size embedded in the calls. It's different for rtw_write*() where we have a version, that is rtw_writeN(), that could pass larger sizes (checked by the caller to not be larger than VENDOR_CMD_MAX_DATA_LEN). Said that, we already get rid of the buffer in 19/19. As far as 17/19 and 18/19 are regarded we prefer to leave the code as-is, because we have many other changes in this 17/19 and in the next 18/19. > > > + > > + if (adapt->bSurpriseRemoved || adapt->pwrctrlpriv.pnp_bstop_trx) > > + return -EPERM; > > How is it ok to check this outside of the lock? What happens if these > values change right _after_ you check them? Yes, this is a mistake that was in the original code and we didn't noticed. Anyway, we guess that moving the acquire of he mutex soon before this check is all that is required. I hope it is the correct fix. Isn't it? > > Why check them at all, is this something that we even care about? > > I know you are trying to make this just the same logic at is there > today, but why not just do it right the first time? > Yes, we are trying to make the same logic that is there today: we already changed a lot of other logic that was in this code. I see that bSurpriseRemoved is set in error cases, so for the moment we don't feel like removing anything related to this variable. With a high degree of probability we'll do this task later in future patches. Do you agree with the argument above? For instance, we got rid of that while loop around the control messages sending/receiving API calls and we got rid of some plainly useless 'if' tests (such as "if ((value >= FW_8188E_START_ADDRESS && value <= FW_8188E_END_ADDRESS) || status == len) break;"), and much more. > > + > > + mutex_lock(&dvobjpriv->usb_vendor_req_mutex); > > + > > + io_buf = dvobjpriv->usb_vendor_req_buf; > > + > > + status = usb_control_msg_recv(udev, 0, REALTEK_USB_VENQT_CMD_REQ, > > + REALTEK_USB_VENQT_READ, addr, > > + REALTEK_USB_VENQT_CMD_IDX, io_buf, > > + size, RTW_USB_CONTROL_MSG_TIMEOUT, > > + GFP_KERNEL); > > + > > + if (status == -ESHUTDOWN || > > + status == -ENODEV || > > + status == -ENOENT) { > > + /* > > + * device or controller has been disabled due to > > + * some problem that could not be worked around, > > + * device or bus doesn’t exist, endpoint does not > > + * exist or is not enabled. > > + */ > > + adapt->bSurpriseRemoved = true; > > + goto mutex_unlock; > > + } > > + > > + if (status < 0) { > > + GET_HAL_DATA(adapt)->srestpriv.wifi_error_status = > > + USB_VEN_REQ_CMD_FAIL; > > + > > + if (rtw_inc_and_chk_continual_urb_error(dvobjpriv)) > > + adapt->bSurpriseRemoved = true; > > + > > + goto mutex_unlock; > > + } > > + > > + rtw_reset_continual_urb_error(dvobjpriv); > > + memcpy(data, io_buf, size); > > + > > +mutex_unlock: > > + mutex_unlock(&dvobjpriv->usb_vendor_req_mutex); > > + > > + return status; > > No one cares about this value, is that ok? I'm aware of Pavel's work on changing all the callers up to the top of the chains in order to do proper error checking. That's why we return status here. > > thanks, > > greg k-h >
next prev parent reply other threads:[~2021-09-18 12:19 UTC|newest] Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-17 7:18 [PATCH v7 00/19] staging: r8188eu: shorten and simplify calls chains Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 01/19] staging: r8188eu: remove usb_{read,write}_mem() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 02/19] staging: r8188eu: remove the helpers of rtw_read8() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 03/19] staging: r8188eu: remove the helpers of rtw_read16() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 04/19] staging: r8188eu: remove the helpers of rtw_read32() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 05/19] staging: r8188eu: remove the helpers of usb_write8() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 06/19] staging: r8188eu: remove the helpers of usb_write16() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 07/19] staging: r8188eu: remove the helpers of usb_write32() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 08/19] staging: r8188eu: remove the helpers of usb_writeN() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 09/19] staging: r8188eu: remove the helpers of usb_read_port() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 10/19] staging: r8188eu: remove the helpers of usb_write_port() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 11/19] staging: r8188eu: remove the helpers of usb_read_port_cancel() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 12/19] staging: r8188eu: remove the helpers of usb_write_port_cancel() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 13/19] staging: r8188eu: remove core/rtw_io.c Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 14/19] staging: r8188eu: remove struct _io_ops Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 15/19] staging: r8188eu: clean up usbctrl_vendorreq() Fabio M. De Francesco 2021-09-17 14:44 ` Greg Kroah-Hartman 2021-09-18 11:13 ` Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 16/19] staging: r8188eu: clean up rtw_read*() and rtw_write*() Fabio M. De Francesco 2021-09-17 14:44 ` Greg Kroah-Hartman 2021-09-17 14:45 ` Greg Kroah-Hartman 2021-09-18 11:41 ` Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 17/19] staging: r8188eu: shorten calls chain of rtw_read{8,16,32}() Fabio M. De Francesco 2021-09-17 14:50 ` Greg Kroah-Hartman 2021-09-17 15:01 ` David Laight 2021-09-17 15:17 ` 'Greg Kroah-Hartman' 2021-09-18 12:19 ` Fabio M. De Francesco [this message] 2021-09-17 7:18 ` [PATCH v7 18/19] staging: r8188eu: shorten calls chain of rtw_write{8,16,32,N}() Fabio M. De Francesco 2021-09-17 7:18 ` [PATCH v7 19/19] staging: r8188eu: remove shared buffer for usb requests Fabio M. De Francesco 2021-09-17 14:55 ` Greg Kroah-Hartman 2021-09-17 15:03 ` Pavel Skripkin 2021-09-17 15:06 ` Pavel Skripkin 2021-09-17 15:18 ` Greg Kroah-Hartman 2021-09-17 15:23 ` Pavel Skripkin 2021-09-17 11:07 ` [PATCH v7 00/19] staging: r8188eu: shorten and simplify calls chains Dan Carpenter
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=14193957.S5bSOd67d6@localhost.localdomain \ --to=fmdefrancesco@gmail.com \ --cc=Larry.Finger@lwfinger.net \ --cc=dan.carpenter@oracle.com \ --cc=david.Laight@aculab.com \ --cc=gregkh@linuxfoundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-staging@lists.linux.dev \ --cc=paskripkin@gmail.com \ --cc=phil@philpotter.co.uk \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).