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
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 | 134 +++++++++------------- 2 files changed, 55 insertions(+), 81 deletions(-)
Signature · 1 line
2.20.1
[email protected]
maintainerRFC 1/3 mt76: usb: introduce mt76u_fill_bulk_urb routine
From: Lorenzo Bianconi <[email protected]>
Add mt76u_fill_bulk_urb routine and remove duplicate code use to initialize tx/rx urb
--- 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);
@@ -732,11 +741,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;
@@ -754,12 +768,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)
@@ -771,19 +781,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
[email protected]
maintainerRFC 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
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 - drivers/net/wireless/mediatek/mt76/usb.c | 78 +++++++++-------------- 2 files changed, 29 insertions(+), 51 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +0 -2
@@ -754,8 +754,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 +29 -49
113 lines not on this page · raw message
Signature · 1 line
2.20.1
[email protected]
maintainerRFC 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. Moreover remove nsgs check since it is already performed in 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
@@ -724,23 +724,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