On Fri, May 17, 2019 at 07:53:49AM +0000, Quentin Deslandes wrote: > Returns error code from 'vnt_int_start_interrupt()' so the device's private > buffers will be correctly freed and 'struct ieee80211_hw' start function > will return an error code. > > Signed-off-by: Quentin Deslandes <quentin.deslandes@xxxxxxxxxxx> > --- > v2: returns 'status' value to caller instead of removing it. > v3: add patch version details. Thanks to Greg K-H for his help. Looking better! But a few minor things below: > > drivers/staging/vt6656/int.c | 4 +++- > drivers/staging/vt6656/int.h | 2 +- > drivers/staging/vt6656/main_usb.c | 12 +++++++++--- > 3 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c > index 504424b19fcf..f3ee2198e1b3 100644 > --- a/drivers/staging/vt6656/int.c > +++ b/drivers/staging/vt6656/int.c > @@ -39,7 +39,7 @@ static const u8 fallback_rate1[5][5] = { > {RATE_54M, RATE_54M, RATE_36M, RATE_18M, RATE_18M} > }; > > -void vnt_int_start_interrupt(struct vnt_private *priv) > +int vnt_int_start_interrupt(struct vnt_private *priv) > { > unsigned long flags; > int status; > @@ -51,6 +51,8 @@ void vnt_int_start_interrupt(struct vnt_private *priv) > status = vnt_start_interrupt_urb(priv); > > spin_unlock_irqrestore(&priv->lock, flags); > + > + return status; > } > > static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr) > diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h > index 987c454e99e9..8a6d60569ceb 100644 > --- a/drivers/staging/vt6656/int.h > +++ b/drivers/staging/vt6656/int.h > @@ -41,7 +41,7 @@ struct vnt_interrupt_data { > u8 sw[2]; > } __packed; > > -void vnt_int_start_interrupt(struct vnt_private *priv); > +int vnt_int_start_interrupt(struct vnt_private *priv); > void vnt_int_process_data(struct vnt_private *priv); > > #endif /* __INT_H__ */ > diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c > index ccafcc2c87ac..71e10b9ae253 100644 > --- a/drivers/staging/vt6656/main_usb.c > +++ b/drivers/staging/vt6656/main_usb.c > @@ -483,6 +483,7 @@ static void vnt_tx_80211(struct ieee80211_hw *hw, > > static int vnt_start(struct ieee80211_hw *hw) > { > + int err = 0; > struct vnt_private *priv = hw->priv; > > priv->rx_buf_sz = MAX_TOTAL_SIZE_WITH_ALL_HEADERS; > @@ -496,15 +497,20 @@ static int vnt_start(struct ieee80211_hw *hw) > > if (vnt_init_registers(priv) == false) { > dev_dbg(&priv->usb->dev, " init register fail\n"); > + err = -ENOMEM; Why ENOMEM? vnt_init_registers() should return a proper error code, based on what went wrong, not true/false. So fix that up first, and then you can do this patch. See, your one tiny coding style fix is turning into real cleanups, nice! > goto free_all; > } > > - if (vnt_key_init_table(priv)) > + if (vnt_key_init_table(priv)) { > + err = -ENOMEM; Same here, vnt_key_init_table() should return a real error value, and then just return that here. > goto free_all; > + } > > priv->int_interval = 1; /* bInterval is set to 1 */ > > - vnt_int_start_interrupt(priv); > + err = vnt_int_start_interrupt(priv); > + if (err) > + goto free_all; Like this, that is the correct thing. So, this is now going to be a patch series, fixing up those two functions (and any functions they call possibly), and then this can be the last patch of the series. thanks, greg k-h _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel