kernel: bump 5.15 to 5.15.108
Removed upstreamed: backport-5.15/430-v6.3-ubi-Fix-failure-attaching-when-vid_hdr-offset-equals.patch[1] backport-5.15/612-v6.3-skbuff-Fix-a-race-between-coalescing-and-releasing-S.patch[2] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.108&id=85d7a7044b759d865d10395a357632af00de5867 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.108&id=906a6689bb0191ad2a44131a3377006aa098af59 Build system: x86_64 Build-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3, filogic/xiaomi_redmi-router-ax6000-ubootmod Run-tested: bcm2711/RPi4B, ramips/tplink_archer-a6-v3, filogic/xiaomi_redmi-router-ax6000-ubootmod Signed-off-by: John Audia <therealgraysky@proton.me>
This commit is contained in:
parent
28ce677fa7
commit
3887a55909
26 changed files with 43 additions and 197 deletions
|
@ -1,2 +1,2 @@
|
||||||
LINUX_VERSION-5.15 = .107
|
LINUX_VERSION-5.15 = .108
|
||||||
LINUX_KERNEL_HASH-5.15.107 = 19370e769045681f52cceedb14ecda97e89b1b058133a0c8ad45d35ffbc5afa8
|
LINUX_KERNEL_HASH-5.15.108 = 8beb69ada46f1cbca2f4cf901ec078846035c1cd925d9471422f65aff74243ba
|
||||||
|
|
|
@ -283,7 +283,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||||
void __user *argp = (void __user *)arg;
|
void __user *argp = (void __user *)arg;
|
||||||
long ret = 0;
|
long ret = 0;
|
||||||
|
|
||||||
@@ -1182,6 +1207,15 @@ static long do_fb_ioctl(struct fb_info *
|
@@ -1184,6 +1209,15 @@ static long do_fb_ioctl(struct fb_info *
|
||||||
unlock_fb_info(info);
|
unlock_fb_info(info);
|
||||||
console_unlock();
|
console_unlock();
|
||||||
break;
|
break;
|
||||||
|
@ -299,7 +299,7 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
||||||
default:
|
default:
|
||||||
lock_fb_info(info);
|
lock_fb_info(info);
|
||||||
fb = info->fbops;
|
fb = info->fbops;
|
||||||
@@ -1321,6 +1355,7 @@ static long fb_compat_ioctl(struct file
|
@@ -1323,6 +1357,7 @@ static long fb_compat_ioctl(struct file
|
||||||
case FBIOPAN_DISPLAY:
|
case FBIOPAN_DISPLAY:
|
||||||
case FBIOGET_CON2FBMAP:
|
case FBIOGET_CON2FBMAP:
|
||||||
case FBIOPUT_CON2FBMAP:
|
case FBIOPUT_CON2FBMAP:
|
||||||
|
|
|
@ -25,7 +25,7 @@ Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -17538,6 +17538,14 @@ T: git git://linuxtv.org/media_tree.git
|
@@ -17537,6 +17537,14 @@ T: git git://linuxtv.org/media_tree.git
|
||||||
F: Documentation/devicetree/bindings/media/i2c/sony,imx412.yaml
|
F: Documentation/devicetree/bindings/media/i2c/sony,imx412.yaml
|
||||||
F: drivers/media/i2c/imx412.c
|
F: drivers/media/i2c/imx412.c
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
|
||||||
+...
|
+...
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -17552,6 +17552,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
@@ -17551,6 +17551,7 @@ M: Raspberry Pi Kernel Maintenance <kern
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
T: git git://linuxtv.org/media_tree.git
|
T: git git://linuxtv.org/media_tree.git
|
||||||
|
|
|
@ -132,7 +132,7 @@ Signed-off-by: Lee Jackson <info@arducam.com>
|
||||||
+...
|
+...
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -17556,6 +17556,14 @@ F: Documentation/devicetree/bindings/med
|
@@ -17555,6 +17555,14 @@ F: Documentation/devicetree/bindings/med
|
||||||
F: Documentation/devicetree/bindings/media/i2c/imx477.yaml
|
F: Documentation/devicetree/bindings/media/i2c/imx477.yaml
|
||||||
F: drivers/media/i2c/imx477.c
|
F: drivers/media/i2c/imx477.c
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20220227124713.39766-6-noral
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -5981,6 +5981,14 @@ T: git git://anongit.freedesktop.org/drm
|
@@ -5980,6 +5980,14 @@ T: git git://anongit.freedesktop.org/drm
|
||||||
F: Documentation/devicetree/bindings/display/multi-inno,mi0283qt.txt
|
F: Documentation/devicetree/bindings/display/multi-inno,mi0283qt.txt
|
||||||
F: drivers/gpu/drm/tiny/mi0283qt.c
|
F: drivers/gpu/drm/tiny/mi0283qt.c
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ This reverts commit 2388f826cdc9af2651991adc0feb79de9bdf2232.
|
||||||
|
|
||||||
--- a/drivers/video/fbdev/core/fbmem.c
|
--- a/drivers/video/fbdev/core/fbmem.c
|
||||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||||
@@ -1629,14 +1629,7 @@ static void do_remove_conflicting_frameb
|
@@ -1631,14 +1631,7 @@ static void do_remove_conflicting_frameb
|
||||||
* If it's not a platform device, at least print a warning. A
|
* If it's not a platform device, at least print a warning. A
|
||||||
* fix would add code to remove the device from the system.
|
* fix would add code to remove the device from the system.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,7 +20,7 @@ This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a.
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <linux/console.h>
|
#include <linux/console.h>
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
@@ -1606,36 +1605,18 @@ static void do_remove_conflicting_frameb
|
@@ -1608,36 +1607,18 @@ static void do_remove_conflicting_frameb
|
||||||
/* check all firmware fbs and kick off if the base addr overlaps */
|
/* check all firmware fbs and kick off if the base addr overlaps */
|
||||||
for_each_registered_fb(i) {
|
for_each_registered_fb(i) {
|
||||||
struct apertures_struct *gen_aper;
|
struct apertures_struct *gen_aper;
|
||||||
|
@ -58,7 +58,7 @@ This reverts commit c894ac44786cfed383a6c6b20c1bfb12eb96018a.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1973,13 +1954,9 @@ EXPORT_SYMBOL(register_framebuffer);
|
@@ -1975,13 +1956,9 @@ EXPORT_SYMBOL(register_framebuffer);
|
||||||
void
|
void
|
||||||
unregister_framebuffer(struct fb_info *fb_info)
|
unregister_framebuffer(struct fb_info *fb_info)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
From 1e020e1b96afdecd20680b5b5be2a6ffc3d27628 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zhihao Cheng <chengzhihao1@huawei.com>
|
|
||||||
Date: Mon, 6 Mar 2023 09:33:08 +0800
|
|
||||||
Subject: [PATCH] ubi: Fix failure attaching when vid_hdr offset equals to
|
|
||||||
(sub)page size
|
|
||||||
|
|
||||||
Following process will make ubi attaching failed since commit
|
|
||||||
1b42b1a36fc946 ("ubi: ensure that VID header offset ... size"):
|
|
||||||
|
|
||||||
ID="0xec,0xa1,0x00,0x15" # 128M 128KB 2KB
|
|
||||||
modprobe nandsim id_bytes=$ID
|
|
||||||
flash_eraseall /dev/mtd0
|
|
||||||
modprobe ubi mtd="0,2048" # set vid_hdr offset as 2048 (one page)
|
|
||||||
(dmesg):
|
|
||||||
ubi0 error: ubi_attach_mtd_dev [ubi]: VID header offset 2048 too large.
|
|
||||||
UBI error: cannot attach mtd0
|
|
||||||
UBI error: cannot initialize UBI, error -22
|
|
||||||
|
|
||||||
Rework original solution, the key point is making sure
|
|
||||||
'vid_hdr_shift + UBI_VID_HDR_SIZE < ubi->vid_hdr_alsize',
|
|
||||||
so we should check vid_hdr_shift rather not vid_hdr_offset.
|
|
||||||
Then, ubi still support (sub)page aligined VID header offset.
|
|
||||||
|
|
||||||
Fixes: 1b42b1a36fc946 ("ubi: ensure that VID header offset ... size")
|
|
||||||
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
|
|
||||||
Tested-by: Nicolas Schichan <nschichan@freebox.fr>
|
|
||||||
Tested-by: Miquel Raynal <miquel.raynal@bootlin.com> # v5.10, v4.19
|
|
||||||
Signed-off-by: Richard Weinberger <richard@nod.at>
|
|
||||||
---
|
|
||||||
drivers/mtd/ubi/build.c | 21 +++++++++++++++------
|
|
||||||
1 file changed, 15 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/mtd/ubi/build.c
|
|
||||||
+++ b/drivers/mtd/ubi/build.c
|
|
||||||
@@ -664,12 +664,6 @@ static int io_init(struct ubi_device *ub
|
|
||||||
ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
|
|
||||||
ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
|
|
||||||
|
|
||||||
- if (ubi->vid_hdr_offset && ((ubi->vid_hdr_offset + UBI_VID_HDR_SIZE) >
|
|
||||||
- ubi->vid_hdr_alsize)) {
|
|
||||||
- ubi_err(ubi, "VID header offset %d too large.", ubi->vid_hdr_offset);
|
|
||||||
- return -EINVAL;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
dbg_gen("min_io_size %d", ubi->min_io_size);
|
|
||||||
dbg_gen("max_write_size %d", ubi->max_write_size);
|
|
||||||
dbg_gen("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
|
|
||||||
@@ -687,6 +681,21 @@ static int io_init(struct ubi_device *ub
|
|
||||||
ubi->vid_hdr_aloffset;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Memory allocation for VID header is ubi->vid_hdr_alsize
|
|
||||||
+ * which is described in comments in io.c.
|
|
||||||
+ * Make sure VID header shift + UBI_VID_HDR_SIZE not exceeds
|
|
||||||
+ * ubi->vid_hdr_alsize, so that all vid header operations
|
|
||||||
+ * won't access memory out of bounds.
|
|
||||||
+ */
|
|
||||||
+ if ((ubi->vid_hdr_shift + UBI_VID_HDR_SIZE) > ubi->vid_hdr_alsize) {
|
|
||||||
+ ubi_err(ubi, "Invalid VID header offset %d, VID header shift(%d)"
|
|
||||||
+ " + VID header size(%zu) > VID header aligned size(%d).",
|
|
||||||
+ ubi->vid_hdr_offset, ubi->vid_hdr_shift,
|
|
||||||
+ UBI_VID_HDR_SIZE, ubi->vid_hdr_alsize);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Similar for the data offset */
|
|
||||||
ubi->leb_start = ubi->vid_hdr_offset + UBI_VID_HDR_SIZE;
|
|
||||||
ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
|
|
|
@ -1,85 +0,0 @@
|
||||||
From: Liang Chen <liangchen.linux@gmail.com>
|
|
||||||
Date: Thu, 13 Apr 2023 17:03:53 +0800
|
|
||||||
Subject: [PATCH] skbuff: Fix a race between coalescing and releasing SKBs
|
|
||||||
|
|
||||||
Commit 1effe8ca4e34 ("skbuff: fix coalescing for page_pool fragment
|
|
||||||
recycling") allowed coalescing to proceed with non page pool page and page
|
|
||||||
pool page when @from is cloned, i.e.
|
|
||||||
|
|
||||||
to->pp_recycle --> false
|
|
||||||
from->pp_recycle --> true
|
|
||||||
skb_cloned(from) --> true
|
|
||||||
|
|
||||||
However, it actually requires skb_cloned(@from) to hold true until
|
|
||||||
coalescing finishes in this situation. If the other cloned SKB is
|
|
||||||
released while the merging is in process, from_shinfo->nr_frags will be
|
|
||||||
set to 0 toward the end of the function, causing the increment of frag
|
|
||||||
page _refcount to be unexpectedly skipped resulting in inconsistent
|
|
||||||
reference counts. Later when SKB(@to) is released, it frees the page
|
|
||||||
directly even though the page pool page is still in use, leading to
|
|
||||||
use-after-free or double-free errors. So it should be prohibited.
|
|
||||||
|
|
||||||
The double-free error message below prompted us to investigate:
|
|
||||||
BUG: Bad page state in process swapper/1 pfn:0e0d1
|
|
||||||
page:00000000c6548b28 refcount:-1 mapcount:0 mapping:0000000000000000
|
|
||||||
index:0x2 pfn:0xe0d1
|
|
||||||
flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
|
|
||||||
raw: 000fffffc0000000 0000000000000000 ffffffff00000101 0000000000000000
|
|
||||||
raw: 0000000000000002 0000000000000000 ffffffffffffffff 0000000000000000
|
|
||||||
page dumped because: nonzero _refcount
|
|
||||||
|
|
||||||
CPU: 1 PID: 0 Comm: swapper/1 Tainted: G E 6.2.0+
|
|
||||||
Call Trace:
|
|
||||||
<IRQ>
|
|
||||||
dump_stack_lvl+0x32/0x50
|
|
||||||
bad_page+0x69/0xf0
|
|
||||||
free_pcp_prepare+0x260/0x2f0
|
|
||||||
free_unref_page+0x20/0x1c0
|
|
||||||
skb_release_data+0x10b/0x1a0
|
|
||||||
napi_consume_skb+0x56/0x150
|
|
||||||
net_rx_action+0xf0/0x350
|
|
||||||
? __napi_schedule+0x79/0x90
|
|
||||||
__do_softirq+0xc8/0x2b1
|
|
||||||
__irq_exit_rcu+0xb9/0xf0
|
|
||||||
common_interrupt+0x82/0xa0
|
|
||||||
</IRQ>
|
|
||||||
<TASK>
|
|
||||||
asm_common_interrupt+0x22/0x40
|
|
||||||
RIP: 0010:default_idle+0xb/0x20
|
|
||||||
|
|
||||||
Fixes: 53e0961da1c7 ("page_pool: add frag page recycling support in page pool")
|
|
||||||
Signed-off-by: Liang Chen <liangchen.linux@gmail.com>
|
|
||||||
Reviewed-by: Eric Dumazet <edumazet@google.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230413090353.14448-1-liangchen.linux@gmail.com
|
|
||||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
--- a/net/core/skbuff.c
|
|
||||||
+++ b/net/core/skbuff.c
|
|
||||||
@@ -5397,18 +5397,18 @@ bool skb_try_coalesce(struct sk_buff *to
|
|
||||||
if (skb_cloned(to))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
- /* In general, avoid mixing slab allocated and page_pool allocated
|
|
||||||
- * pages within the same SKB. However when @to is not pp_recycle and
|
|
||||||
- * @from is cloned, we can transition frag pages from page_pool to
|
|
||||||
- * reference counted.
|
|
||||||
- *
|
|
||||||
- * On the other hand, don't allow coalescing two pp_recycle SKBs if
|
|
||||||
- * @from is cloned, in case the SKB is using page_pool fragment
|
|
||||||
+ /* In general, avoid mixing page_pool and non-page_pool allocated
|
|
||||||
+ * pages within the same SKB. Additionally avoid dealing with clones
|
|
||||||
+ * with page_pool pages, in case the SKB is using page_pool fragment
|
|
||||||
* references (PP_FLAG_PAGE_FRAG). Since we only take full page
|
|
||||||
* references for cloned SKBs at the moment that would result in
|
|
||||||
* inconsistent reference counts.
|
|
||||||
+ * In theory we could take full references if @from is cloned and
|
|
||||||
+ * !@to->pp_recycle but its tricky (due to potential race with
|
|
||||||
+ * the clone disappearing) and rare, so not worth dealing with.
|
|
||||||
*/
|
|
||||||
- if (to->pp_recycle != (from->pp_recycle && !skb_cloned(from)))
|
|
||||||
+ if (to->pp_recycle != from->pp_recycle ||
|
|
||||||
+ (from->pp_recycle && skb_cloned(from)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (len <= skb_tailroom(to)) {
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -11790,6 +11790,14 @@ L: netdev@vger.kernel.org
|
@@ -11789,6 +11789,14 @@ L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/mediatek/
|
F: drivers/net/ethernet/mediatek/
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -234,6 +234,7 @@ struct sfp {
|
@@ -240,6 +240,7 @@ struct sfp {
|
||||||
bool need_poll;
|
bool need_poll;
|
||||||
|
|
||||||
struct mutex st_mutex; /* Protects state */
|
struct mutex st_mutex; /* Protects state */
|
||||||
|
@ -28,7 +28,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
unsigned int state_soft_mask;
|
unsigned int state_soft_mask;
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
struct delayed_work poll;
|
struct delayed_work poll;
|
||||||
@@ -499,17 +500,18 @@ static void sfp_soft_set_state(struct sf
|
@@ -505,17 +506,18 @@ static void sfp_soft_set_state(struct sf
|
||||||
static void sfp_soft_start_poll(struct sfp *sfp)
|
static void sfp_soft_start_poll(struct sfp *sfp)
|
||||||
{
|
{
|
||||||
const struct sfp_eeprom_id *id = &sfp->id;
|
const struct sfp_eeprom_id *id = &sfp->id;
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
|
if (sfp->state_soft_mask & (SFP_F_LOS | SFP_F_TX_FAULT) &&
|
||||||
!sfp->need_poll)
|
!sfp->need_poll)
|
||||||
@@ -523,10 +525,11 @@ static void sfp_soft_stop_poll(struct sf
|
@@ -529,10 +531,11 @@ static void sfp_soft_stop_poll(struct sf
|
||||||
|
|
||||||
static unsigned int sfp_get_state(struct sfp *sfp)
|
static unsigned int sfp_get_state(struct sfp *sfp)
|
||||||
{
|
{
|
||||||
|
@ -71,7 +71,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
state |= sfp_soft_get_state(sfp);
|
state |= sfp_soft_get_state(sfp);
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
@@ -1940,6 +1943,15 @@ static int sfp_sm_mod_probe(struct sfp *
|
@@ -1942,6 +1945,15 @@ static int sfp_sm_mod_probe(struct sfp *
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
if (!memcmp(id.base.vendor_name, "ALCATELLUCENT ", 16) &&
|
if (!memcmp(id.base.vendor_name, "ALCATELLUCENT ", 16) &&
|
||||||
!memcmp(id.base.vendor_pn, "3FE46541AA ", 16))
|
!memcmp(id.base.vendor_pn, "3FE46541AA ", 16))
|
||||||
sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
||||||
@@ -2565,6 +2577,8 @@ static int sfp_probe(struct platform_dev
|
@@ -2568,6 +2580,8 @@ static int sfp_probe(struct platform_dev
|
||||||
return PTR_ERR(sfp->gpio[i]);
|
return PTR_ERR(sfp->gpio[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -142,7 +142,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
ret = ops->module_insert(bus->upstream, id);
|
ret = ops->module_insert(bus->upstream, id);
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -253,6 +253,8 @@ struct sfp {
|
@@ -259,6 +259,8 @@ struct sfp {
|
||||||
unsigned int module_t_start_up;
|
unsigned int module_t_start_up;
|
||||||
bool tx_fault_ignore;
|
bool tx_fault_ignore;
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
#if IS_ENABLED(CONFIG_HWMON)
|
#if IS_ENABLED(CONFIG_HWMON)
|
||||||
struct sfp_diag diag;
|
struct sfp_diag diag;
|
||||||
struct delayed_work hwmon_probe;
|
struct delayed_work hwmon_probe;
|
||||||
@@ -309,6 +311,93 @@ static const struct of_device_id sfp_of_
|
@@ -315,6 +317,93 @@ static const struct of_device_id sfp_of_
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, sfp_of_match);
|
MODULE_DEVICE_TABLE(of, sfp_of_match);
|
||||||
|
|
||||||
|
@ -245,7 +245,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
static unsigned long poll_jiffies;
|
static unsigned long poll_jiffies;
|
||||||
|
|
||||||
static unsigned int sfp_gpio_get_state(struct sfp *sfp)
|
static unsigned int sfp_gpio_get_state(struct sfp *sfp)
|
||||||
@@ -1964,6 +2053,8 @@ static int sfp_sm_mod_probe(struct sfp *
|
@@ -1966,6 +2055,8 @@ static int sfp_sm_mod_probe(struct sfp *
|
||||||
else
|
else
|
||||||
sfp->tx_fault_ignore = false;
|
sfp->tx_fault_ignore = false;
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2075,7 +2166,8 @@ static void sfp_sm_module(struct sfp *sf
|
@@ -2077,7 +2168,8 @@ static void sfp_sm_module(struct sfp *sf
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Report the module insertion to the upstream device */
|
/* Report the module insertion to the upstream device */
|
||||||
|
|
|
@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -311,6 +311,11 @@ static const struct of_device_id sfp_of_
|
@@ -317,6 +317,11 @@ static const struct of_device_id sfp_of_
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, sfp_of_match);
|
MODULE_DEVICE_TABLE(of, sfp_of_match);
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
||||||
unsigned long *modes)
|
unsigned long *modes)
|
||||||
{
|
{
|
||||||
@@ -341,6 +346,7 @@ static const struct sfp_quirk sfp_quirks
|
@@ -347,6 +352,7 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.vendor = "ALCATELLUCENT",
|
.vendor = "ALCATELLUCENT",
|
||||||
.part = "3FE46541AA",
|
.part = "3FE46541AA",
|
||||||
.modes = sfp_quirk_2500basex,
|
.modes = sfp_quirk_2500basex,
|
||||||
|
@ -35,7 +35,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
}, {
|
}, {
|
||||||
// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
||||||
// NRZ in their EEPROM
|
// NRZ in their EEPROM
|
||||||
@@ -2041,11 +2047,7 @@ static int sfp_sm_mod_probe(struct sfp *
|
@@ -2043,11 +2049,7 @@ static int sfp_sm_mod_probe(struct sfp *
|
||||||
if (sfp->gpio[GPIO_LOS])
|
if (sfp->gpio[GPIO_LOS])
|
||||||
sfp->state_hw_mask |= SFP_F_LOS;
|
sfp->state_hw_mask |= SFP_F_LOS;
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
if (!memcmp(id.base.vendor_name, "HUAWEI ", 16) &&
|
if (!memcmp(id.base.vendor_name, "HUAWEI ", 16) &&
|
||||||
!memcmp(id.base.vendor_pn, "MA5671A ", 16))
|
!memcmp(id.base.vendor_pn, "MA5671A ", 16))
|
||||||
@@ -2054,6 +2056,8 @@ static int sfp_sm_mod_probe(struct sfp *
|
@@ -2056,6 +2058,8 @@ static int sfp_sm_mod_probe(struct sfp *
|
||||||
sfp->tx_fault_ignore = false;
|
sfp->tx_fault_ignore = false;
|
||||||
|
|
||||||
sfp->quirk = sfp_lookup_quirk(&id);
|
sfp->quirk = sfp_lookup_quirk(&id);
|
||||||
|
|
|
@ -13,7 +13,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -316,6 +316,11 @@ static void sfp_fixup_long_startup(struc
|
@@ -322,6 +322,11 @@ static void sfp_fixup_long_startup(struc
|
||||||
sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
sfp->module_t_start_up = T_START_UP_BAD_GPON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
||||||
unsigned long *modes)
|
unsigned long *modes)
|
||||||
{
|
{
|
||||||
@@ -353,6 +358,7 @@ static const struct sfp_quirk sfp_quirks
|
@@ -359,6 +364,7 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.vendor = "HUAWEI",
|
.vendor = "HUAWEI",
|
||||||
.part = "MA5671A",
|
.part = "MA5671A",
|
||||||
.modes = sfp_quirk_2500basex,
|
.modes = sfp_quirk_2500basex,
|
||||||
|
@ -33,7 +33,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
}, {
|
}, {
|
||||||
// Lantech 8330-262D-E can operate at 2500base-X, but
|
// Lantech 8330-262D-E can operate at 2500base-X, but
|
||||||
// incorrectly report 2500MBd NRZ in their EEPROM
|
// incorrectly report 2500MBd NRZ in their EEPROM
|
||||||
@@ -2049,11 +2055,7 @@ static int sfp_sm_mod_probe(struct sfp *
|
@@ -2051,11 +2057,7 @@ static int sfp_sm_mod_probe(struct sfp *
|
||||||
|
|
||||||
sfp->module_t_start_up = T_START_UP;
|
sfp->module_t_start_up = T_START_UP;
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
linkmode_or(support, support, modes);
|
linkmode_or(support, support, modes);
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -321,6 +321,15 @@ static void sfp_fixup_ignore_tx_fault(st
|
@@ -327,6 +327,15 @@ static void sfp_fixup_ignore_tx_fault(st
|
||||||
sfp->tx_fault_ignore = true;
|
sfp->tx_fault_ignore = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
|
||||||
unsigned long *modes)
|
unsigned long *modes)
|
||||||
{
|
{
|
||||||
@@ -353,6 +362,10 @@ static const struct sfp_quirk sfp_quirks
|
@@ -359,6 +368,10 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.modes = sfp_quirk_2500basex,
|
.modes = sfp_quirk_2500basex,
|
||||||
.fixup = sfp_fixup_long_startup,
|
.fixup = sfp_fixup_long_startup,
|
||||||
}, {
|
}, {
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||||
// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
// Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
|
||||||
// NRZ in their EEPROM
|
// NRZ in their EEPROM
|
||||||
.vendor = "HUAWEI",
|
.vendor = "HUAWEI",
|
||||||
@@ -369,16 +382,18 @@ static const struct sfp_quirk sfp_quirks
|
@@ -375,16 +388,18 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.vendor = "UBNT",
|
.vendor = "UBNT",
|
||||||
.part = "UF-INSTANT",
|
.part = "UF-INSTANT",
|
||||||
.modes = sfp_quirk_ubnt_uf_instant,
|
.modes = sfp_quirk_ubnt_uf_instant,
|
||||||
|
|
|
@ -24,7 +24,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -366,6 +366,10 @@ static const struct sfp_quirk sfp_quirks
|
@@ -372,6 +372,10 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.part = "HL-GSFP",
|
.part = "HL-GSFP",
|
||||||
.fixup = sfp_fixup_halny_gsfp,
|
.fixup = sfp_fixup_halny_gsfp,
|
||||||
}, {
|
}, {
|
||||||
|
|
|
@ -19,7 +19,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -17962,6 +17962,11 @@ L: netdev@vger.kernel.org
|
@@ -17961,6 +17961,11 @@ L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/dlink/sundance.c
|
F: drivers/net/ethernet/dlink/sundance.c
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -12362,6 +12362,14 @@ S: Supported
|
@@ -12361,6 +12361,14 @@ S: Supported
|
||||||
F: Documentation/devicetree/bindings/mtd/atmel-nand.txt
|
F: Documentation/devicetree/bindings/mtd/atmel-nand.txt
|
||||||
F: drivers/mtd/nand/raw/atmel/*
|
F: drivers/mtd/nand/raw/atmel/*
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -377,6 +377,11 @@ static const struct sfp_quirk sfp_quirks
|
@@ -383,6 +383,11 @@ static const struct sfp_quirk sfp_quirks
|
||||||
.modes = sfp_quirk_2500basex,
|
.modes = sfp_quirk_2500basex,
|
||||||
.fixup = sfp_fixup_ignore_tx_fault,
|
.fixup = sfp_fixup_ignore_tx_fault,
|
||||||
}, {
|
}, {
|
||||||
|
@ -38,7 +38,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
// Lantech 8330-262D-E can operate at 2500base-X, but
|
// Lantech 8330-262D-E can operate at 2500base-X, but
|
||||||
// incorrectly report 2500MBd NRZ in their EEPROM
|
// incorrectly report 2500MBd NRZ in their EEPROM
|
||||||
.vendor = "Lantech",
|
.vendor = "Lantech",
|
||||||
@@ -2310,7 +2315,8 @@ static void sfp_sm_main(struct sfp *sfp,
|
@@ -2312,7 +2317,8 @@ static void sfp_sm_main(struct sfp *sfp,
|
||||||
* or t_start_up, so assume there is a fault.
|
* or t_start_up, so assume there is a fault.
|
||||||
*/
|
*/
|
||||||
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
|
sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
|
} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
|
||||||
init_done:
|
init_done:
|
||||||
sfp->sm_phy_retries = R_PHY_RETRY;
|
sfp->sm_phy_retries = R_PHY_RETRY;
|
||||||
@@ -2533,10 +2539,12 @@ static void sfp_check_state(struct sfp *
|
@@ -2535,10 +2541,12 @@ static void sfp_check_state(struct sfp *
|
||||||
mutex_lock(&sfp->st_mutex);
|
mutex_lock(&sfp->st_mutex);
|
||||||
state = sfp_get_state(sfp);
|
state = sfp_get_state(sfp);
|
||||||
changed = state ^ sfp->state;
|
changed = state ^ sfp->state;
|
||||||
|
|
|
@ -854,7 +854,7 @@ Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
|
||||||
+};
|
+};
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -7527,6 +7527,14 @@ F: drivers/ptp/ptp_qoriq.c
|
@@ -7526,6 +7526,14 @@ F: drivers/ptp/ptp_qoriq.c
|
||||||
F: drivers/ptp/ptp_qoriq_debugfs.c
|
F: drivers/ptp/ptp_qoriq_debugfs.c
|
||||||
F: include/linux/fsl/ptp_qoriq.h
|
F: include/linux/fsl/ptp_qoriq.h
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -11798,6 +11798,14 @@ S: Maintained
|
@@ -11797,6 +11797,14 @@ S: Maintained
|
||||||
F: drivers/net/pcs/pcs-mtk-lynxi.c
|
F: drivers/net/pcs/pcs-mtk-lynxi.c
|
||||||
F: include/linux/pcs/pcs-mtk-lynxi.h
|
F: include/linux/pcs/pcs-mtk-lynxi.h
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ Cc: Robert Marko <robert.marko@sartura.hr>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -9064,6 +9064,22 @@ F: include/net/nl802154.h
|
@@ -9063,6 +9063,22 @@ F: include/net/nl802154.h
|
||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
F: net/mac802154/
|
F: net/mac802154/
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -15899,6 +15899,13 @@ S: Maintained
|
@@ -15898,6 +15898,13 @@ S: Maintained
|
||||||
F: include/sound/rt*.h
|
F: include/sound/rt*.h
|
||||||
F: sound/soc/codecs/rt*
|
F: sound/soc/codecs/rt*
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -2151,6 +2151,13 @@ static void sfp_sm_module(struct sfp *sf
|
@@ -2153,6 +2153,13 @@ static void sfp_sm_module(struct sfp *sf
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
|
||||||
|
|
||||||
--- a/drivers/net/phy/sfp.c
|
--- a/drivers/net/phy/sfp.c
|
||||||
+++ b/drivers/net/phy/sfp.c
|
+++ b/drivers/net/phy/sfp.c
|
||||||
@@ -543,32 +543,72 @@ static int sfp_i2c_write(struct sfp *sfp
|
@@ -549,32 +549,72 @@ static int sfp_i2c_write(struct sfp *sfp
|
||||||
return ret == ARRAY_SIZE(msgs) ? len : 0;
|
return ret == ARRAY_SIZE(msgs) ? len : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue