simplify usb layer buffer allocation
Subsystems (2)
[email protected]
maintainercover simplify usb layer buffer allocation
From: Lorenzo Bianconi <[email protected]>
Simplify usb rx buffer allocation.
Simplify mt76u_tx_build_sg routine.
This series is based on 'mt76usb: allow mt76u_bulk_msg be used for reads'
https://patchwork.kernel.org/patch/10822469/
Lorenzo Bianconi (3):
mt76: usb: introduce mt76u_fill_bulk_urb routine
mt76: usb: simplify rx buffer allocation
mt76: usb: simplify mt76u_tx_build_sg routine
drivers/net/wireless/mediatek/mt76/mt76.h | 2 - drivers/net/wireless/mediatek/mt76/usb.c | 132 +++++++++------------- 2 files changed, 53 insertions(+), 81 deletions(-)
Signature · 1 line
2.20.1
[email protected]
maintainerPATCH 1/3 mt76: usb: introduce mt76u_fill_bulk_urb routine
From: Lorenzo Bianconi <[email protected]>
Add mt76u_fill_bulk_urb to initialize tx/rx urbs and remove duplicate code
--- drivers/net/wireless/mediatek/mt76/usb.c | 45 ++++++++++++++---------- 1 file changed, 26 insertions(+), 19 deletions(-)
drivers/net/wireless/mediatek/mt76/usb.c +26 -19
@@ -381,9 +381,10 @@ void mt76u_buf_free(struct mt76u_buf *buf) }EXPORT_SYMBOL_GPL (mt76u_buf_free); -int mt76u_submit_buf (struct mt76_dev *dev,int dir,int index, -struct mt76u_buf *buf,gfp_t gfp, -usb_complete_t complete_fn,void *context) +static void +mt76u_fill_bulk_urb (struct mt76_dev *dev,int dir,int index, +struct mt76u_buf *buf,usb_complete_t complete_fn, +void *context) {struct usb_interface *intf =to_usb_interface (dev->dev);struct usb_device *udev =interface_to_usbdev (intf);
@@ -397,6 +398,14 @@ int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index,usb_fill_bulk_urb (buf->urb, udev, pipe, data, buf->len, complete_fn, context); +} + +int mt76u_submit_buf (struct mt76_dev *dev,int dir,int index, +struct mt76u_buf *buf,gfp_t gfp, +usb_complete_t complete_fn,void *context) +{ +mt76u_fill_bulk_urb (dev, dir, index, buf, complete_fn, + context);trace_submit_urb (dev, buf->urb);return usb_submit_urb (buf->urb, gfp);
@@ -729,11 +738,16 @@ static void mt76u_complete_tx(struct urb *urb) }static int -mt76u_tx_build_sg (struct sk_buff *skb,struct urb *urb) +mt76u_tx_build_sg (struct mt76_dev *dev,struct sk_buff *skb, +struct urb *urb) { -int nsgs =1 +skb_shinfo (skb)->nr_frags;struct sk_buff *iter; +int nsgs; + +if (!dev->usb.sg_en) +return 0 ; + nsgs =1 +skb_shinfo (skb)->nr_frags;skb_walk_frags (skb, iter) nsgs += 1 + skb_shinfo(iter)->nr_frags;
@@ -751,12 +765,8 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_sta *sta) { - struct usb_interface *intf = to_usb_interface(dev->dev); -struct usb_device *udev =interface_to_usbdev (intf); -u8 *data =NULL , ep =q2ep (q->hw_idx); struct mt76u_buf *buf;u16 idx = q->tail; -unsigned int pipe;int err;if (q->queued == q->ndesc)
@@ -768,19 +778,16 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,return err; buf = &q->entry[idx].ubuf; + buf->buf = skb->data; + buf->len = skb->len; buf->done = false; -if (dev->usb.sg_en) { - err =mt76u_tx_build_sg (skb, buf->urb); -if (err <0 ) -return err; - }else { - data = skb->data; - } + err =mt76u_tx_build_sg (dev, skb, buf->urb); +if (err <0 ) +return err; - pipe =usb_sndbulkpipe (udev, dev->usb.out_ep[ep]); -usb_fill_bulk_urb (buf->urb, udev, pipe, data, skb->len, - mt76u_complete_tx, buf); +mt76u_fill_bulk_urb (dev,USB_DIR_OUT ,q2ep (q->hw_idx), + buf, mt76u_complete_tx, buf); q->tail = (q->tail +1 ) % q->ndesc; q->entry[idx].skb = skb;
Signature · 1 line
2.20.1
Felix Fietkau
maintainerRe: [PATCH 1/3] mt76: usb: introduce mt76u_fill_bulk_urb routine
Quoted 7 lines · On 2019-02-20 23:35, [email protected] wrote:
From: Lorenzo Bianconi <[email protected]>
Add
mt76u_fill_bulk_urbto initialize tx/rx urbs and remove duplicate codeSigned-off-by Stanislaw Gruszka <[email protected]>Signed-off-by Lorenzo Bianconi <[email protected]>
Series applied, thanks.
- Felix
[email protected]
maintainerPATCH 2/3 mt76: usb: simplify rx buffer allocation
In reply to [email protected]From: Lorenzo Bianconi <[email protected]>
Squash mt76u_buf_alloc_sg and mt76u_buf_alloc and remove duplicated code. Reuse mt76u_refill_rx in mt76u_buf_alloc
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 - drivers/net/wireless/mediatek/mt76/usb.c | 76 ++++++++--------------- 2 files changed, 27 insertions(+), 51 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +0 -2
@@ -751,8 +751,6 @@ void mt76u_single_wr(struct mt76_dev *dev, const u8 req, const u16 offset, const u32 val);int mt76u_init (struct mt76_dev *dev,struct usb_interface *intf);void mt76u_deinit (struct mt76_dev *dev); -int mt76u_buf_alloc (struct mt76_dev *dev,struct mt76u_buf *buf, -int len,int data_len,gfp_t gfp);void mt76u_buf_free (struct mt76u_buf *buf); int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index, struct mt76u_buf *buf, gfp_t gfp,
drivers/net/wireless/mediatek/mt76/usb.c +27 -49
111 lines not on this page · raw message
Signature · 1 line
2.20.1
[email protected]
maintainerPATCH 3/3 mt76: usb: simplify mt76u_tx_build_sg routine
In reply to [email protected]From: Lorenzo Bianconi <[email protected]>
Use skb_to_sgvec instad of skb_to_sgvec_nomark in mt76u_tx_build_sg. Remove nsgs check in mt76u_tx_build_sg since it is already performed by skb_to_sgvec
--- drivers/net/wireless/mediatek/mt76/usb.c | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-)
drivers/net/wireless/mediatek/mt76/usb.c +3 -14
@@ -719,23 +719,12 @@ static int mt76u_tx_build_sg(struct mt76_dev *dev, struct sk_buff *skb, struct urb *urb) { - struct sk_buff *iter; -int nsgs; - if (!dev->usb.sg_en) return 0; - nsgs =1 +skb_shinfo (skb)->nr_frags; -skb_walk_frags (skb, iter) - nsgs += 1 + skb_shinfo(iter)->nr_frags; - -memset (urb->sg,0 ,sizeof (*urb->sg) *MT_SG_MAX_SIZE ); - - nsgs =min_t (int,MT_SG_MAX_SIZE , nsgs); -sg_init_marker (urb->sg, nsgs); - urb->num_sgs = nsgs; - -return skb_to_sgvec_nomark (skb, urb->sg,0 , skb->len); + sg_init_table(urb->sg, MT_SG_MAX_SIZE); + urb->num_sgs =skb_to_sgvec (skb, urb->sg,0 , skb->len); +return urb->num_sgs; } static int
Signature · 1 line
2.20.1