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.