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

diff --git a/a/1.txt b/N1/1.txt
index e750bfa..f5bf9ac 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -25,141 +25,3 @@ Attached patch should fix this, plese test, thanks in advance.
 You ment 'no working wifi' or 'working wifi'?
 
 Stanislaw
-From 35dadd09bd3193b33b10f56e0210da680c6d915f Mon Sep 17 00:00:00 2001
-From: Stanislaw Gruszka <sgruszka@redhat.com>
-Date: Sat, 16 Feb 2019 14:53:19 +0100
-Subject: [PATCH] mt76usb: allocate page contained rx buffers
-
-If we first allocate 1024 bytes buffer and then 4096 bytes
-buffer via page_frag_alloc() the second buffer will be crossing
-page boundaries what is most likely not appropriate for
-dma_map_{sg/page} and make buffer split misalign issues on
-dwc2 usb host driver.
-
-Since patch changed arguments of mt76u_buf_alloc() function I also
-changed name to indicate it is only used for RX allocation.
-
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- drivers/net/wireless/mediatek/mt76/mt76.h    |  5 ++---
- drivers/net/wireless/mediatek/mt76/usb.c     | 24 ++++++++++--------------
- drivers/net/wireless/mediatek/mt76/usb_mcu.c |  4 +---
- 3 files changed, 13 insertions(+), 20 deletions(-)
-
-diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
-index 364f3571c033..9e24f603664a 100644
---- a/drivers/net/wireless/mediatek/mt76/mt76.h
-+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
-@@ -364,7 +364,6 @@ enum mt76u_out_ep {
- #define MT_SG_MAX_SIZE		8
- #define MT_NUM_TX_ENTRIES	256
- #define MT_NUM_RX_ENTRIES	128
--#define MCU_RESP_URB_SIZE	1024
- struct mt76_usb {
- 	struct mutex usb_ctrl_mtx;
- 	u8 data[32];
-@@ -753,8 +752,8 @@ 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 nsgs, int len, int sglen, gfp_t gfp);
-+int mt76u_rx_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf, int nsgs,
-+		       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,
-diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
-index de906f07e85a..472642ef25a4 100644
---- a/drivers/net/wireless/mediatek/mt76/usb.c
-+++ b/drivers/net/wireless/mediatek/mt76/usb.c
-@@ -271,11 +271,11 @@ mt76u_set_endpoints(struct usb_interface *intf,
- }
- 
- static int
--mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
--		 int nsgs, int len, int sglen)
-+mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf, int nsgs)
- {
- 	struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN];
- 	struct urb *urb = buf->urb;
-+	int sglen = SKB_WITH_OVERHEAD(q->buf_size);
- 	int i;
- 
- 	spin_lock_bh(&q->rx_page_lock);
-@@ -284,7 +284,7 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
- 		void *data;
- 		int offset;
- 
--		data = page_frag_alloc(&q->rx_page, len, GFP_ATOMIC);
-+		data = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
- 		if (!data)
- 			break;
- 
-@@ -309,8 +309,8 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
- 	return i ? : -ENOMEM;
- }
- 
--int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
--		    int nsgs, int len, int sglen, gfp_t gfp)
-+int mt76u_rx_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
-+		       int nsgs, gfp_t gfp)
- {
- 	buf->urb = usb_alloc_urb(0, gfp);
- 	if (!buf->urb)
-@@ -325,7 +325,7 @@ int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
- 	buf->dev = dev;
- 	buf->num_sgs = nsgs;
- 
--	return mt76u_fill_rx_sg(dev, buf, nsgs, len, sglen);
-+	return mt76u_fill_rx_sg(dev, buf, nsgs);
- }
- 
- void mt76u_buf_free(struct mt76u_buf *buf)
-@@ -485,7 +485,7 @@ static void mt76u_rx_tasklet(unsigned long data)
- {
- 	struct mt76_dev *dev = (struct mt76_dev *)data;
- 	struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN];
--	int err, nsgs, buf_len = q->buf_size;
-+	int err, nsgs;
- 	struct mt76u_buf *buf;
- 
- 	rcu_read_lock();
-@@ -497,9 +497,7 @@ static void mt76u_rx_tasklet(unsigned long data)
- 
- 		nsgs = mt76u_process_rx_entry(dev, buf->urb);
- 		if (nsgs > 0) {
--			err = mt76u_fill_rx_sg(dev, buf, nsgs,
--					       buf_len,
--					       SKB_WITH_OVERHEAD(buf_len));
-+			err = mt76u_fill_rx_sg(dev, buf, nsgs);
- 			if (err < 0)
- 				break;
- 		}
-@@ -556,10 +554,8 @@ static int mt76u_alloc_rx(struct mt76_dev *dev)
- 	}
- 
- 	for (i = 0; i < MT_NUM_RX_ENTRIES; i++) {
--		err = mt76u_buf_alloc(dev, &q->entry[i].ubuf,
--				      nsgs, q->buf_size,
--				      SKB_WITH_OVERHEAD(q->buf_size),
--				      GFP_KERNEL);
-+		err = mt76u_rx_buf_alloc(dev, &q->entry[i].ubuf, nsgs,
-+					 GFP_KERNEL);
- 		if (err < 0)
- 			return err;
- 	}
-diff --git a/drivers/net/wireless/mediatek/mt76/usb_mcu.c b/drivers/net/wireless/mediatek/mt76/usb_mcu.c
-index 036be4163e69..7c43738f5a6e 100644
---- a/drivers/net/wireless/mediatek/mt76/usb_mcu.c
-+++ b/drivers/net/wireless/mediatek/mt76/usb_mcu.c
-@@ -29,9 +29,7 @@ int mt76u_mcu_init_rx(struct mt76_dev *dev)
- 	struct mt76_usb *usb = &dev->usb;
- 	int err;
- 
--	err = mt76u_buf_alloc(dev, &usb->mcu.res, 1,
--			      MCU_RESP_URB_SIZE, MCU_RESP_URB_SIZE,
--			      GFP_KERNEL);
-+	err = mt76u_rx_buf_alloc(dev, &usb->mcu.res, 1, GFP_KERNEL);
- 	if (err < 0)
- 		return err;
diff --git a/N1/2.hdr b/N1/2.hdr
new file mode 100644
index 0000000..2de0fcc
--- /dev/null
+++ b/N1/2.hdr
@@ -0,0 +1,2 @@
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: attachment; filename="0004-mt76usb-allocate-page-contained-rx-buffers.patch"
diff --git a/N1/2.txt b/N1/2.txt
new file mode 100644
index 0000000..e24006e
--- /dev/null
+++ b/N1/2.txt
@@ -0,0 +1,141 @@
+From 35dadd09bd3193b33b10f56e0210da680c6d915f Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Sat, 16 Feb 2019 14:53:19 +0100
+Subject: [PATCH] mt76usb: allocate page contained rx buffers
+
+If we first allocate 1024 bytes buffer and then 4096 bytes
+buffer via page_frag_alloc() the second buffer will be crossing
+page boundaries what is most likely not appropriate for
+dma_map_{sg/page} and make buffer split misalign issues on
+dwc2 usb host driver.
+
+Since patch changed arguments of mt76u_buf_alloc() function I also
+changed name to indicate it is only used for RX allocation.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+---
+ drivers/net/wireless/mediatek/mt76/mt76.h    |  5 ++---
+ drivers/net/wireless/mediatek/mt76/usb.c     | 24 ++++++++++--------------
+ drivers/net/wireless/mediatek/mt76/usb_mcu.c |  4 +---
+ 3 files changed, 13 insertions(+), 20 deletions(-)
+
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
+index 364f3571c033..9e24f603664a 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76.h
++++ b/drivers/net/wireless/mediatek/mt76/mt76.h
+@@ -364,7 +364,6 @@ enum mt76u_out_ep {
+ #define MT_SG_MAX_SIZE		8
+ #define MT_NUM_TX_ENTRIES	256
+ #define MT_NUM_RX_ENTRIES	128
+-#define MCU_RESP_URB_SIZE	1024
+ struct mt76_usb {
+ 	struct mutex usb_ctrl_mtx;
+ 	u8 data[32];
+@@ -753,8 +752,8 @@ 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 nsgs, int len, int sglen, gfp_t gfp);
++int mt76u_rx_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf, int nsgs,
++		       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,
+diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
+index de906f07e85a..472642ef25a4 100644
+--- a/drivers/net/wireless/mediatek/mt76/usb.c
++++ b/drivers/net/wireless/mediatek/mt76/usb.c
+@@ -271,11 +271,11 @@ mt76u_set_endpoints(struct usb_interface *intf,
+ }
+ 
+ static int
+-mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
+-		 int nsgs, int len, int sglen)
++mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf, int nsgs)
+ {
+ 	struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN];
+ 	struct urb *urb = buf->urb;
++	int sglen = SKB_WITH_OVERHEAD(q->buf_size);
+ 	int i;
+ 
+ 	spin_lock_bh(&q->rx_page_lock);
+@@ -284,7 +284,7 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
+ 		void *data;
+ 		int offset;
+ 
+-		data = page_frag_alloc(&q->rx_page, len, GFP_ATOMIC);
++		data = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
+ 		if (!data)
+ 			break;
+ 
+@@ -309,8 +309,8 @@ mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76u_buf *buf,
+ 	return i ? : -ENOMEM;
+ }
+ 
+-int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
+-		    int nsgs, int len, int sglen, gfp_t gfp)
++int mt76u_rx_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
++		       int nsgs, gfp_t gfp)
+ {
+ 	buf->urb = usb_alloc_urb(0, gfp);
+ 	if (!buf->urb)
+@@ -325,7 +325,7 @@ int mt76u_buf_alloc(struct mt76_dev *dev, struct mt76u_buf *buf,
+ 	buf->dev = dev;
+ 	buf->num_sgs = nsgs;
+ 
+-	return mt76u_fill_rx_sg(dev, buf, nsgs, len, sglen);
++	return mt76u_fill_rx_sg(dev, buf, nsgs);
+ }
+ 
+ void mt76u_buf_free(struct mt76u_buf *buf)
+@@ -485,7 +485,7 @@ static void mt76u_rx_tasklet(unsigned long data)
+ {
+ 	struct mt76_dev *dev = (struct mt76_dev *)data;
+ 	struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN];
+-	int err, nsgs, buf_len = q->buf_size;
++	int err, nsgs;
+ 	struct mt76u_buf *buf;
+ 
+ 	rcu_read_lock();
+@@ -497,9 +497,7 @@ static void mt76u_rx_tasklet(unsigned long data)
+ 
+ 		nsgs = mt76u_process_rx_entry(dev, buf->urb);
+ 		if (nsgs > 0) {
+-			err = mt76u_fill_rx_sg(dev, buf, nsgs,
+-					       buf_len,
+-					       SKB_WITH_OVERHEAD(buf_len));
++			err = mt76u_fill_rx_sg(dev, buf, nsgs);
+ 			if (err < 0)
+ 				break;
+ 		}
+@@ -556,10 +554,8 @@ static int mt76u_alloc_rx(struct mt76_dev *dev)
+ 	}
+ 
+ 	for (i = 0; i < MT_NUM_RX_ENTRIES; i++) {
+-		err = mt76u_buf_alloc(dev, &q->entry[i].ubuf,
+-				      nsgs, q->buf_size,
+-				      SKB_WITH_OVERHEAD(q->buf_size),
+-				      GFP_KERNEL);
++		err = mt76u_rx_buf_alloc(dev, &q->entry[i].ubuf, nsgs,
++					 GFP_KERNEL);
+ 		if (err < 0)
+ 			return err;
+ 	}
+diff --git a/drivers/net/wireless/mediatek/mt76/usb_mcu.c b/drivers/net/wireless/mediatek/mt76/usb_mcu.c
+index 036be4163e69..7c43738f5a6e 100644
+--- a/drivers/net/wireless/mediatek/mt76/usb_mcu.c
++++ b/drivers/net/wireless/mediatek/mt76/usb_mcu.c
+@@ -29,9 +29,7 @@ int mt76u_mcu_init_rx(struct mt76_dev *dev)
+ 	struct mt76_usb *usb = &dev->usb;
+ 	int err;
+ 
+-	err = mt76u_buf_alloc(dev, &usb->mcu.res, 1,
+-			      MCU_RESP_URB_SIZE, MCU_RESP_URB_SIZE,
+-			      GFP_KERNEL);
++	err = mt76u_rx_buf_alloc(dev, &usb->mcu.res, 1, GFP_KERNEL);
+ 	if (err < 0)
+ 		return err;
+ 
+-- 
+2.7.5
diff --git a/a/content_digest b/N1/content_digest
index 0c5f68f..5d12309 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,5 +1,14 @@
+ "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"
+ "ref\020190212093035.GB12906@redhat.com\0"
+ "ref\0404607590.373282.1550126997144@email.ionos.de\0"
+ "ref\020190214092530.GA17273@redhat.com\0"
+ "ref\0878a7160-2e91-d057-6d27-c6b9d85f700e@i2se.com\0"
+ "ref\020190215071226.GA2372@redhat.com\0"
+ "ref\01411983628.668277.1550315118443@email.ionos.de\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\0Sat, 16 Feb 2019 15:07:40 +0100\0"
  "To\0Stefan Wahren <stefan.wahren@i2se.com>\0"
  "Cc\0Lorenzo Bianconi <lorenzo.bianconi@redhat.com>"
@@ -9,7 +18,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 Sat, Feb 16, 2019 at 12:05:18PM +0100, Stefan Wahren wrote:\n"
  "> sorry for the delay, but i do this all in my spare time.\n"
@@ -37,7 +46,10 @@
  "\n"
  "You ment 'no working wifi' or 'working wifi'?\n"
  "\n"
- "Stanislaw\n"
+ Stanislaw
+ "\01:2\0"
+ "fn\00004-mt76usb-allocate-page-contained-rx-buffers.patch\0"
+ "b\0"
  "From 35dadd09bd3193b33b10f56e0210da680c6d915f Mon Sep 17 00:00:00 2001\n"
  "From: Stanislaw Gruszka <sgruszka@redhat.com>\n"
  "Date: Sat, 16 Feb 2019 14:53:19 +0100\n"
@@ -175,6 +187,9 @@
  "-\t\t\t      GFP_KERNEL);\n"
  "+\terr = mt76u_rx_buf_alloc(dev, &usb->mcu.res, 1, GFP_KERNEL);\n"
  " \tif (err < 0)\n"
- " \t\treturn err;"
+ " \t\treturn err;\n"
+ " \n"
+ "-- \n"
+ 2.7.5
 
-73e70f7dd60494bfba70228c296ac5cb23e0e82a01276473a1b85f8492442e2c
+300f34d9d0c30a7bdfd99b5642746a6777a1517d42328ae6820f780d30085ab6

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.