All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20190212093035.GB12906@redhat.com>

diff --git a/a/1.txt b/N1/1.txt
index 62f593e..a4fb20f 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -51,169 +51,3 @@ still use SG allocation. Attached patch do this, please check if it works
 on rpi. Patch is on top of your error path fixes.
 
 Stanislaw
-From f79ac0df967d406523d0a1c03a138d1394e7665a Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Tue, 12 Feb 2019 10:02:53 +0100
-Subject: [PATCH] mt76usb: do not set urb->num_sgs to 1 for non SG usb host
- drivers
-
-Track number of segments in mt76u_buf structure and do not
-submit urbs with urb->num_sgs = 1 if usb host driver
-sg_tablesize is zero.
-
-This suppose fix problem of mt76 not working with some usb
-host controllers like dwc2.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/mediatek/mt76/mt76.h |  1 +
- drivers/net/wireless/mediatek/mt76/usb.c  | 55 ++++++++++++++---------
- 2 files changed, 36 insertions(+), 20 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
-index 2e5bcb3fdff7..eadc913c37b6 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
-@@ -86,6 +86,7 @@ struct mt76_queue_buf {
- struct mt76u_buf {
- 	struct mt76_dev *dev;
- 	struct urb *urb;
-+	int num_sgs;
- 	size_t len;
- 	bool done;
- };
-diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
-index a1811c39415e..d82de59ec6dc 100644
---- a/drivers/net/wireless/mediatek/mt76/usb.c
-+++ b/drivers/net/wireless/mediatek/mt76/usb.c
-@@ -299,14 +299,14 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
- 	if (i < nsgs) {
- 		int j;
- 
--		for (j = nsgs; j < urb->num_sgs; j++)
-+		for (j = nsgs; j < buf->num_sgs; j++)
- 			skb_free_frag(sg_virt(&urb->sg[j]));
--		urb->num_sgs = i;
-+		buf->num_sgs = i;
- 	}
- 
--	urb->num_sgs = max_t(int, i, urb->num_sgs);
--	buf->len = urb->num_sgs * sglen,
--	sg_init_marker(urb->sg, urb->num_sgs);
-+	buf->num_sgs = max_t(int, i, buf->num_sgs);
-+	buf->len = buf->num_sgs * sglen,
-+	sg_init_marker(urb->sg, buf->num_sgs);
- 
- 	return i ? : -ENOMEM;
- }
-@@ -325,6 +325,7 @@ int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
- 
- 	sg_init_table(buf->urb->sg, nsgs);
- 	buf->dev = dev;
-+	buf->num_sgs = nsgs;
- 
- 	return mt76u_fill_rx_sg(dev, buf, nsgs, len, sglen);
- }
-@@ -336,7 +337,7 @@ void mt76u_buf_free(struct mt76u_buf *buf)
- 	struct scatterlist *sg;
- 	int i;
- 
--	for (i = 0; i < urb->num_sgs; i++) {
-+	for (i = 0; i < buf->num_sgs; i++) {
- 		sg = &urb->sg[i];
- 		if (!sg)
- 			continue;
-@@ -347,9 +348,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);
-@@ -360,9 +362,25 @@ int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index,
- 	else
- 		pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[index]);
- 
--	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len,
--			  complete_fn, context);
-+	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len, complete_fn,
-+			  context);
-+
-+	if (udev->bus->sg_tablesize > 0) {
-+		buf->urb->num_sgs = buf->num_sgs;
-+	} else {
-+		WARN_ON_ONCE(buf->num_sgs != 1);
-+		/* See usb_sg_init() */
-+		buf->urb->num_sgs = 0;
-+		if (!PageHighMem(sg_page(buf->urb->sg)))
-+			buf->urb->transfer_buffer = sg_virt(buf->urb->sg);
-+	}
-+}
- 
-+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);
- 	return usb_submit_urb(buf->urb, gfp);
- }
- EXPORT_SYMBOL_GPL(mt76u_submit_buf);
-@@ -672,10 +690,11 @@ 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 sk_buff *skb, struct mt76u_buf *buf)
- {
- 	int nsgs = 1 + skb_shinfo(skb)->nr_frags;
- 	struct sk_buff *iter;
-+	struct urb *urb = buf->urb;
- 
- 	skb_walk_frags(skb, iter)
- 		nsgs += 1 + skb_shinfo(iter)->nr_frags;
-@@ -684,7 +703,8 @@ mt76u_tx_build_sg(struct sk_buff *skb, struct urb *urb)
- 
- 	nsgs = min_t(int, MT_SG_MAX_SIZE, nsgs);
- 	sg_init_marker(urb->sg, nsgs);
--	urb->num_sgs = nsgs;
-+	buf->num_sgs = nsgs;
-+	buf->len = skb->len;
- 
- 	return skb_to_sgvec_nomark(skb, urb->sg, 0, skb->len);
- }
-@@ -694,12 +714,9 @@ 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 ep = q2ep(q->hw_idx);
- 	struct mt76u_buf *buf;
- 	u16 idx = q->tail;
--	unsigned int pipe;
- 	int err;
- 
- 	if (q->queued == q->ndesc)
-@@ -712,13 +729,11 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
- 	buf = &q->entry[idx].ubuf;
- 	buf->done = false;
- 
--	err = mt76u_tx_build_sg(skb, buf->urb);
-+	err = mt76u_tx_build_sg(skb, buf);
- 	if (err < 0)
- 		return err;
- 
--	pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[ep]);
--	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, skb->len,
--			  mt76u_complete_tx, buf);
-+	mt76u_fill_bulk_urb(dev, USB_DIR_OUT, ep, buf, mt76u_complete_tx, buf);
- 
- 	q->tail = (q->tail + 1) % q->ndesc;
- 	q->entry[idx].skb = skb;
diff --git a/N1/2.hdr b/N1/2.hdr
new file mode 100644
index 0000000..f97ea33
--- /dev/null
+++ b/N1/2.hdr
@@ -0,0 +1,2 @@
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename="0001-mt76usb-do-not-set-urb-num_sgs-to-1-for-non-SG-usb-h.patch"
diff --git a/N1/2.txt b/N1/2.txt
new file mode 100644
index 0000000..3f6491c
--- /dev/null
+++ b/N1/2.txt
@@ -0,0 +1,168 @@
+From f79ac0df967d406523d0a1c03a138d1394e7665a Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Tue, 12 Feb 2019 10:02:53 +0100
+Subject: [PATCH] mt76usb: do not set urb->num_sgs to 1 for non SG usb host
+ drivers
+
+Track number of segments in mt76u_buf structure and do not
+submit urbs with urb->num_sgs = 1 if usb host driver
+sg_tablesize is zero.
+
+This suppose fix problem of mt76 not working with some usb
+host controllers like dwc2.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+---
+ drivers/net/wireless/mediatek/mt76/mt76.h |  1 +
+ drivers/net/wireless/mediatek/mt76/usb.c  | 55 ++++++++++++++---------
+ 2 files changed, 36 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
+index 2e5bcb3fdff7..eadc913c37b6 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76.h
++++ b/drivers/net/wireless/mediatek/mt76/mt76.h
+@@ -86,6 +86,7 @@ struct mt76_queue_buf {
+ struct mt76u_buf {
+ 	struct mt76_dev *dev;
+ 	struct urb *urb;
++	int num_sgs;
+ 	size_t len;
+ 	bool done;
+ };
+diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
+index a1811c39415e..d82de59ec6dc 100644
+--- a/drivers/net/wireless/mediatek/mt76/usb.c
++++ b/drivers/net/wireless/mediatek/mt76/usb.c
+@@ -299,14 +299,14 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
+ 	if (i < nsgs) {
+ 		int j;
+ 
+-		for (j = nsgs; j < urb->num_sgs; j++)
++		for (j = nsgs; j < buf->num_sgs; j++)
+ 			skb_free_frag(sg_virt(&urb->sg[j]));
+-		urb->num_sgs = i;
++		buf->num_sgs = i;
+ 	}
+ 
+-	urb->num_sgs = max_t(int, i, urb->num_sgs);
+-	buf->len = urb->num_sgs * sglen,
+-	sg_init_marker(urb->sg, urb->num_sgs);
++	buf->num_sgs = max_t(int, i, buf->num_sgs);
++	buf->len = buf->num_sgs * sglen,
++	sg_init_marker(urb->sg, buf->num_sgs);
+ 
+ 	return i ? : -ENOMEM;
+ }
+@@ -325,6 +325,7 @@ int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
+ 
+ 	sg_init_table(buf->urb->sg, nsgs);
+ 	buf->dev = dev;
++	buf->num_sgs = nsgs;
+ 
+ 	return mt76u_fill_rx_sg(dev, buf, nsgs, len, sglen);
+ }
+@@ -336,7 +337,7 @@ void mt76u_buf_free(struct mt76u_buf *buf)
+ 	struct scatterlist *sg;
+ 	int i;
+ 
+-	for (i = 0; i < urb->num_sgs; i++) {
++	for (i = 0; i < buf->num_sgs; i++) {
+ 		sg = &urb->sg[i];
+ 		if (!sg)
+ 			continue;
+@@ -347,9 +348,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);
+@@ -360,9 +362,25 @@ int mt76u_submit_buf(struct mt76_dev *dev, int dir, int index,
+ 	else
+ 		pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[index]);
+ 
+-	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len,
+-			  complete_fn, context);
++	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, buf->len, complete_fn,
++			  context);
++
++	if (udev->bus->sg_tablesize > 0) {
++		buf->urb->num_sgs = buf->num_sgs;
++	} else {
++		WARN_ON_ONCE(buf->num_sgs != 1);
++		/* See usb_sg_init() */
++		buf->urb->num_sgs = 0;
++		if (!PageHighMem(sg_page(buf->urb->sg)))
++			buf->urb->transfer_buffer = sg_virt(buf->urb->sg);
++	}
++}
+ 
++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);
+ 	return usb_submit_urb(buf->urb, gfp);
+ }
+ EXPORT_SYMBOL_GPL(mt76u_submit_buf);
+@@ -672,10 +690,11 @@ 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 sk_buff *skb, struct mt76u_buf *buf)
+ {
+ 	int nsgs = 1 + skb_shinfo(skb)->nr_frags;
+ 	struct sk_buff *iter;
++	struct urb *urb = buf->urb;
+ 
+ 	skb_walk_frags(skb, iter)
+ 		nsgs += 1 + skb_shinfo(iter)->nr_frags;
+@@ -684,7 +703,8 @@ mt76u_tx_build_sg(struct sk_buff *skb, struct urb *urb)
+ 
+ 	nsgs = min_t(int, MT_SG_MAX_SIZE, nsgs);
+ 	sg_init_marker(urb->sg, nsgs);
+-	urb->num_sgs = nsgs;
++	buf->num_sgs = nsgs;
++	buf->len = skb->len;
+ 
+ 	return skb_to_sgvec_nomark(skb, urb->sg, 0, skb->len);
+ }
+@@ -694,12 +714,9 @@ 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 ep = q2ep(q->hw_idx);
+ 	struct mt76u_buf *buf;
+ 	u16 idx = q->tail;
+-	unsigned int pipe;
+ 	int err;
+ 
+ 	if (q->queued == q->ndesc)
+@@ -712,13 +729,11 @@ mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
+ 	buf = &q->entry[idx].ubuf;
+ 	buf->done = false;
+ 
+-	err = mt76u_tx_build_sg(skb, buf->urb);
++	err = mt76u_tx_build_sg(skb, buf);
+ 	if (err < 0)
+ 		return err;
+ 
+-	pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[ep]);
+-	usb_fill_bulk_urb(buf->urb, udev, pipe, NULL, skb->len,
+-			  mt76u_complete_tx, buf);
++	mt76u_fill_bulk_urb(dev, USB_DIR_OUT, ep, buf, mt76u_complete_tx, buf);
+ 
+ 	q->tail = (q->tail + 1) % q->ndesc;
+ 	q->entry[idx].skb = skb;
+-- 
+2.19.2
diff --git a/a/content_digest b/N1/content_digest
index 014f3f0..3e19668 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,5 +1,8 @@
+ "ref\020190211173315.GE6292@redhat.com\0"
+ "ref\0Pine.LNX.4.44L0.1902111246410.1543-100000@iolanthe.rowland.org\0"
+ "ref\0CAJ0CqmVFVBXi5E07-ZsYojC7mP4ogpwbcDkDTeebHwX+ayz2DQ@mail.gmail.com\0"
  "From\0Stanislaw Gruszka <sgruszka@redhat.com>\0"
- "Subject\0[BUG] mt76x0u: Probing issues on Raspberry Pi 3 B+\0"
+ "Subject\0Re: [BUG] mt76x0u: Probing issues on Raspberry Pi 3 B+\0"
  "Date\0Tue, 12 Feb 2019 10:30:36 +0100\0"
  "To\0Lorenzo Bianconi <lorenzo.bianconi@redhat.com>\0"
  "Cc\0Alan Stern <stern@rowland.harvard.edu>"
@@ -9,7 +12,7 @@
   Minas Harutyunyan <hminas@synopsys.com>
   USB list <linux-usb@vger.kernel.org>
  " linux-wireless <linux-wireless@vger.kernel.org>\0"
- "\00:1\0"
+ "\01:1\0"
  "b\0"
  "On Tue, Feb 12, 2019 at 01:06:00AM +0100, Lorenzo Bianconi wrote:\n"
  "> >\n"
@@ -63,7 +66,10 @@
  "still use SG allocation. Attached patch do this, please check if it works\n"
  "on rpi. Patch is on top of your error path fixes.\n"
  "\n"
- "Stanislaw\n"
+ Stanislaw
+ "\01:2\0"
+ "fn\00001-mt76usb-do-not-set-urb-num_sgs-to-1-for-non-SG-usb-h.patch\0"
+ "b\0"
  "From f79ac0df967d406523d0a1c03a138d1394e7665a Mon Sep 17 00:00:00 2001\n"
  "From: Stanislaw Gruszka <sgruszka@redhat.com>\n"
  "Date: Tue, 12 Feb 2019 10:02:53 +0100\n"
@@ -229,6 +235,8 @@
  "+\tmt76u_fill_bulk_urb(dev, USB_DIR_OUT, ep, buf, mt76u_complete_tx, buf);\n"
  " \n"
  " \tq->tail = (q->tail + 1) % q->ndesc;\n"
- " \tq->entry[idx].skb = skb;"
+ " \tq->entry[idx].skb = skb;\n"
+ "-- \n"
+ 2.19.2
 
-30ea9c8db47de5a1bc319c0ad8ff12b01c56ae7afeb87f32381d94b8bd038d39
+905f97b022e2ced8813e2feaaf4276eac8dd3b201d20d32e735e8090422f4bc2

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.