From e301092f10f59f2e8fc87c599cdb5a68292ac63a Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Fri, 2 Feb 2024 16:37:34 -0500 Subject: [PATCH] Fixes for 5.4 Signed-off-by: Sasha Levin --- ...ckdep-positive-in-sk_diag_dump_icons.patch | 243 ++ ...ral-alignment-of-const-ipv6-loopback.patch | 78 + ...or-handling-path-in-ixgbe_read_iosf_.patch | 44 + ...gbe-refactor-overtemp-event-handling.patch | 293 ++ ...actor-returning-internal-error-codes.patch | 2368 +++++++++++++++++ .../ixgbe-remove-non-inclusive-language.patch | 188 ++ ...llc-call-sock_orphan-at-release-time.patch | 205 ++ ...-ipv4-fix-a-memleak-in-ip_setup_cork.patch | 55 + queue-5.4/net-remove-unneeded-break.patch | 84 + ...t-sysfs-fix-sys-class-net-iface-path.patch | 127 + ...-replace-bug_on-by-warn_on_once-when.patch | 46 + ...-sanitize-layer-3-and-4-protocol-num.patch | 60 + ...-error-code-problem-in-isci_io_reque.patch | 38 + queue-5.4/series | 13 + 14 files changed, 3842 insertions(+) create mode 100644 queue-5.4/af_unix-fix-lockdep-positive-in-sk_diag_dump_icons.patch create mode 100644 queue-5.4/ipv6-ensure-natural-alignment-of-const-ipv6-loopback.patch create mode 100644 queue-5.4/ixgbe-fix-an-error-handling-path-in-ixgbe_read_iosf_.patch create mode 100644 queue-5.4/ixgbe-refactor-overtemp-event-handling.patch create mode 100644 queue-5.4/ixgbe-refactor-returning-internal-error-codes.patch create mode 100644 queue-5.4/ixgbe-remove-non-inclusive-language.patch create mode 100644 queue-5.4/llc-call-sock_orphan-at-release-time.patch create mode 100644 queue-5.4/net-ipv4-fix-a-memleak-in-ip_setup_cork.patch create mode 100644 queue-5.4/net-remove-unneeded-break.patch create mode 100644 queue-5.4/net-sysfs-fix-sys-class-net-iface-path.patch create mode 100644 queue-5.4/netfilter-nf_log-replace-bug_on-by-warn_on_once-when.patch create mode 100644 queue-5.4/netfilter-nft_ct-sanitize-layer-3-and-4-protocol-num.patch create mode 100644 queue-5.4/scsi-isci-fix-an-error-code-problem-in-isci_io_reque.patch diff --git a/queue-5.4/af_unix-fix-lockdep-positive-in-sk_diag_dump_icons.patch b/queue-5.4/af_unix-fix-lockdep-positive-in-sk_diag_dump_icons.patch new file mode 100644 index 00000000000..53e86d69f20 --- /dev/null +++ b/queue-5.4/af_unix-fix-lockdep-positive-in-sk_diag_dump_icons.patch @@ -0,0 +1,243 @@ +From 5ffce9b05a592a416c51f8e58adfc1d97c9a937b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 30 Jan 2024 18:42:35 +0000 +Subject: af_unix: fix lockdep positive in sk_diag_dump_icons() + +From: Eric Dumazet + +[ Upstream commit 4d322dce82a1d44f8c83f0f54f95dd1b8dcf46c9 ] + +syzbot reported a lockdep splat [1]. + +Blamed commit hinted about the possible lockdep +violation, and code used unix_state_lock_nested() +in an attempt to silence lockdep. + +It is not sufficient, because unix_state_lock_nested() +is already used from unix_state_double_lock(). + +We need to use a separate subclass. + +This patch adds a distinct enumeration to make things +more explicit. + +Also use swap() in unix_state_double_lock() as a clean up. + +v2: add a missing inline keyword to unix_state_lock_nested() + +[1] +WARNING: possible circular locking dependency detected +6.8.0-rc1-syzkaller-00356-g8a696a29c690 #0 Not tainted + +syz-executor.1/2542 is trying to acquire lock: + ffff88808b5df9e8 (rlock-AF_UNIX){+.+.}-{2:2}, at: skb_queue_tail+0x36/0x120 net/core/skbuff.c:3863 + +but task is already holding lock: + ffff88808b5dfe70 (&u->lock/1){+.+.}-{2:2}, at: unix_dgram_sendmsg+0xfc7/0x2200 net/unix/af_unix.c:2089 + +which lock already depends on the new lock. + +the existing dependency chain (in reverse order) is: + +-> #1 (&u->lock/1){+.+.}-{2:2}: + lock_acquire+0x1e3/0x530 kernel/locking/lockdep.c:5754 + _raw_spin_lock_nested+0x31/0x40 kernel/locking/spinlock.c:378 + sk_diag_dump_icons net/unix/diag.c:87 [inline] + sk_diag_fill+0x6ea/0xfe0 net/unix/diag.c:157 + sk_diag_dump net/unix/diag.c:196 [inline] + unix_diag_dump+0x3e9/0x630 net/unix/diag.c:220 + netlink_dump+0x5c1/0xcd0 net/netlink/af_netlink.c:2264 + __netlink_dump_start+0x5d7/0x780 net/netlink/af_netlink.c:2370 + netlink_dump_start include/linux/netlink.h:338 [inline] + unix_diag_handler_dump+0x1c3/0x8f0 net/unix/diag.c:319 + sock_diag_rcv_msg+0xe3/0x400 + netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543 + sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:280 + netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline] + netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367 + netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908 + sock_sendmsg_nosec net/socket.c:730 [inline] + __sock_sendmsg net/socket.c:745 [inline] + sock_write_iter+0x39a/0x520 net/socket.c:1160 + call_write_iter include/linux/fs.h:2085 [inline] + new_sync_write fs/read_write.c:497 [inline] + vfs_write+0xa74/0xca0 fs/read_write.c:590 + ksys_write+0x1a0/0x2c0 fs/read_write.c:643 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b + +-> #0 (rlock-AF_UNIX){+.+.}-{2:2}: + check_prev_add kernel/locking/lockdep.c:3134 [inline] + check_prevs_add kernel/locking/lockdep.c:3253 [inline] + validate_chain+0x1909/0x5ab0 kernel/locking/lockdep.c:3869 + __lock_acquire+0x1345/0x1fd0 kernel/locking/lockdep.c:5137 + lock_acquire+0x1e3/0x530 kernel/locking/lockdep.c:5754 + __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] + _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162 + skb_queue_tail+0x36/0x120 net/core/skbuff.c:3863 + unix_dgram_sendmsg+0x15d9/0x2200 net/unix/af_unix.c:2112 + sock_sendmsg_nosec net/socket.c:730 [inline] + __sock_sendmsg net/socket.c:745 [inline] + ____sys_sendmsg+0x592/0x890 net/socket.c:2584 + ___sys_sendmsg net/socket.c:2638 [inline] + __sys_sendmmsg+0x3b2/0x730 net/socket.c:2724 + __do_sys_sendmmsg net/socket.c:2753 [inline] + __se_sys_sendmmsg net/socket.c:2750 [inline] + __x64_sys_sendmmsg+0xa0/0xb0 net/socket.c:2750 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b + +other info that might help us debug this: + + Possible unsafe locking scenario: + + CPU0 CPU1 + ---- ---- + lock(&u->lock/1); + lock(rlock-AF_UNIX); + lock(&u->lock/1); + lock(rlock-AF_UNIX); + + *** DEADLOCK *** + +1 lock held by syz-executor.1/2542: + #0: ffff88808b5dfe70 (&u->lock/1){+.+.}-{2:2}, at: unix_dgram_sendmsg+0xfc7/0x2200 net/unix/af_unix.c:2089 + +stack backtrace: +CPU: 1 PID: 2542 Comm: syz-executor.1 Not tainted 6.8.0-rc1-syzkaller-00356-g8a696a29c690 #0 +Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023 +Call Trace: + + __dump_stack lib/dump_stack.c:88 [inline] + dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106 + check_noncircular+0x366/0x490 kernel/locking/lockdep.c:2187 + check_prev_add kernel/locking/lockdep.c:3134 [inline] + check_prevs_add kernel/locking/lockdep.c:3253 [inline] + validate_chain+0x1909/0x5ab0 kernel/locking/lockdep.c:3869 + __lock_acquire+0x1345/0x1fd0 kernel/locking/lockdep.c:5137 + lock_acquire+0x1e3/0x530 kernel/locking/lockdep.c:5754 + __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] + _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162 + skb_queue_tail+0x36/0x120 net/core/skbuff.c:3863 + unix_dgram_sendmsg+0x15d9/0x2200 net/unix/af_unix.c:2112 + sock_sendmsg_nosec net/socket.c:730 [inline] + __sock_sendmsg net/socket.c:745 [inline] + ____sys_sendmsg+0x592/0x890 net/socket.c:2584 + ___sys_sendmsg net/socket.c:2638 [inline] + __sys_sendmmsg+0x3b2/0x730 net/socket.c:2724 + __do_sys_sendmmsg net/socket.c:2753 [inline] + __se_sys_sendmmsg net/socket.c:2750 [inline] + __x64_sys_sendmmsg+0xa0/0xb0 net/socket.c:2750 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b +RIP: 0033:0x7f26d887cda9 +Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48 +RSP: 002b:00007f26d95a60c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000133 +RAX: ffffffffffffffda RBX: 00007f26d89abf80 RCX: 00007f26d887cda9 +RDX: 000000000000003e RSI: 00000000200bd000 RDI: 0000000000000004 +RBP: 00007f26d88c947a R08: 0000000000000000 R09: 0000000000000000 +R10: 00000000000008c0 R11: 0000000000000246 R12: 0000000000000000 +R13: 000000000000000b R14: 00007f26d89abf80 R15: 00007ffcfe081a68 + +Fixes: 2aac7a2cb0d9 ("unix_diag: Pending connections IDs NLA") +Reported-by: syzbot +Signed-off-by: Eric Dumazet +Reviewed-by: Kuniyuki Iwashima +Link: https://lore.kernel.org/r/20240130184235.1620738-1-edumazet@google.com +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + include/net/af_unix.h | 20 ++++++++++++++------ + net/unix/af_unix.c | 14 ++++++-------- + net/unix/diag.c | 2 +- + 3 files changed, 21 insertions(+), 15 deletions(-) + +diff --git a/include/net/af_unix.h b/include/net/af_unix.h +index 3426d6dacc45..6cb5026cf727 100644 +--- a/include/net/af_unix.h ++++ b/include/net/af_unix.h +@@ -43,12 +43,6 @@ struct unix_skb_parms { + + #define UNIXCB(skb) (*(struct unix_skb_parms *)&((skb)->cb)) + +-#define unix_state_lock(s) spin_lock(&unix_sk(s)->lock) +-#define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock) +-#define unix_state_lock_nested(s) \ +- spin_lock_nested(&unix_sk(s)->lock, \ +- SINGLE_DEPTH_NESTING) +- + /* The AF_UNIX socket */ + struct unix_sock { + /* WARNING: sk has to be the first member */ +@@ -72,6 +66,20 @@ static inline struct unix_sock *unix_sk(const struct sock *sk) + return (struct unix_sock *)sk; + } + ++#define unix_state_lock(s) spin_lock(&unix_sk(s)->lock) ++#define unix_state_unlock(s) spin_unlock(&unix_sk(s)->lock) ++enum unix_socket_lock_class { ++ U_LOCK_NORMAL, ++ U_LOCK_SECOND, /* for double locking, see unix_state_double_lock(). */ ++ U_LOCK_DIAG, /* used while dumping icons, see sk_diag_dump_icons(). */ ++}; ++ ++static inline void unix_state_lock_nested(struct sock *sk, ++ enum unix_socket_lock_class subclass) ++{ ++ spin_lock_nested(&unix_sk(sk)->lock, subclass); ++} ++ + #define peer_wait peer_wq.wait + + long unix_inq_len(struct sock *sk); +diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c +index 304eb26b34dc..9b1dd845bca1 100644 +--- a/net/unix/af_unix.c ++++ b/net/unix/af_unix.c +@@ -1118,13 +1118,11 @@ static void unix_state_double_lock(struct sock *sk1, struct sock *sk2) + unix_state_lock(sk1); + return; + } +- if (sk1 < sk2) { +- unix_state_lock(sk1); +- unix_state_lock_nested(sk2); +- } else { +- unix_state_lock(sk2); +- unix_state_lock_nested(sk1); +- } ++ if (sk1 > sk2) ++ swap(sk1, sk2); ++ ++ unix_state_lock(sk1); ++ unix_state_lock_nested(sk2, U_LOCK_SECOND); + } + + static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) +@@ -1343,7 +1341,7 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, + goto out_unlock; + } + +- unix_state_lock_nested(sk); ++ unix_state_lock_nested(sk, U_LOCK_SECOND); + + if (sk->sk_state != st) { + unix_state_unlock(sk); +diff --git a/net/unix/diag.c b/net/unix/diag.c +index 951b33fa8f5c..2975e7a061d0 100644 +--- a/net/unix/diag.c ++++ b/net/unix/diag.c +@@ -83,7 +83,7 @@ static int sk_diag_dump_icons(struct sock *sk, struct sk_buff *nlskb) + * queue lock. With the other's queue locked it's + * OK to lock the state. + */ +- unix_state_lock_nested(req); ++ unix_state_lock_nested(req, U_LOCK_DIAG); + peer = unix_sk(req)->peer; + buf[i++] = (peer ? sock_i_ino(peer) : 0); + unix_state_unlock(req); +-- +2.43.0 + diff --git a/queue-5.4/ipv6-ensure-natural-alignment-of-const-ipv6-loopback.patch b/queue-5.4/ipv6-ensure-natural-alignment-of-const-ipv6-loopback.patch new file mode 100644 index 00000000000..e65254e13bd --- /dev/null +++ b/queue-5.4/ipv6-ensure-natural-alignment-of-const-ipv6-loopback.patch @@ -0,0 +1,78 @@ +From c73eecac6d28a179a273e3a0c30d7f68da552204 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Jan 2024 09:32:20 +0100 +Subject: ipv6: Ensure natural alignment of const ipv6 loopback and router + addresses + +From: Helge Deller + +[ Upstream commit 60365049ccbacd101654a66ddcb299abfabd4fc5 ] + +On a parisc64 kernel I sometimes notice this kernel warning: +Kernel unaligned access to 0x40ff8814 at ndisc_send_skb+0xc0/0x4d8 + +The address 0x40ff8814 points to the in6addr_linklocal_allrouters +variable and the warning simply means that some ipv6 function tries to +read a 64-bit word directly from the not-64-bit aligned +in6addr_linklocal_allrouters variable. + +Unaligned accesses are non-critical as the architecture or exception +handlers usually will fix it up at runtime. Nevertheless it may trigger +a performance penality for some architectures. For details read the +"unaligned-memory-access" kernel documentation. + +The patch below ensures that the ipv6 loopback and router addresses will +always be naturally aligned. This prevents the unaligned accesses for +all architectures. + +Signed-off-by: Helge Deller +Fixes: 034dfc5df99eb ("ipv6: export in6addr_loopback to modules") +Acked-by: Paolo Abeni +Link: https://lore.kernel.org/r/ZbNuFM1bFqoH-UoY@p100 +Signed-off-by: Paolo Abeni +Signed-off-by: Sasha Levin +--- + net/ipv6/addrconf_core.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c +index ea00ce3d4117..8494ee9679b4 100644 +--- a/net/ipv6/addrconf_core.c ++++ b/net/ipv6/addrconf_core.c +@@ -204,19 +204,26 @@ const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) { + EXPORT_SYMBOL_GPL(ipv6_stub); + + /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ +-const struct in6_addr in6addr_loopback = IN6ADDR_LOOPBACK_INIT; ++const struct in6_addr in6addr_loopback __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_LOOPBACK_INIT; + EXPORT_SYMBOL(in6addr_loopback); +-const struct in6_addr in6addr_any = IN6ADDR_ANY_INIT; ++const struct in6_addr in6addr_any __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_ANY_INIT; + EXPORT_SYMBOL(in6addr_any); +-const struct in6_addr in6addr_linklocal_allnodes = IN6ADDR_LINKLOCAL_ALLNODES_INIT; ++const struct in6_addr in6addr_linklocal_allnodes __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_LINKLOCAL_ALLNODES_INIT; + EXPORT_SYMBOL(in6addr_linklocal_allnodes); +-const struct in6_addr in6addr_linklocal_allrouters = IN6ADDR_LINKLOCAL_ALLROUTERS_INIT; ++const struct in6_addr in6addr_linklocal_allrouters __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_LINKLOCAL_ALLROUTERS_INIT; + EXPORT_SYMBOL(in6addr_linklocal_allrouters); +-const struct in6_addr in6addr_interfacelocal_allnodes = IN6ADDR_INTERFACELOCAL_ALLNODES_INIT; ++const struct in6_addr in6addr_interfacelocal_allnodes __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_INTERFACELOCAL_ALLNODES_INIT; + EXPORT_SYMBOL(in6addr_interfacelocal_allnodes); +-const struct in6_addr in6addr_interfacelocal_allrouters = IN6ADDR_INTERFACELOCAL_ALLROUTERS_INIT; ++const struct in6_addr in6addr_interfacelocal_allrouters __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_INTERFACELOCAL_ALLROUTERS_INIT; + EXPORT_SYMBOL(in6addr_interfacelocal_allrouters); +-const struct in6_addr in6addr_sitelocal_allrouters = IN6ADDR_SITELOCAL_ALLROUTERS_INIT; ++const struct in6_addr in6addr_sitelocal_allrouters __aligned(BITS_PER_LONG/8) ++ = IN6ADDR_SITELOCAL_ALLROUTERS_INIT; + EXPORT_SYMBOL(in6addr_sitelocal_allrouters); + + static void snmp6_free_dev(struct inet6_dev *idev) +-- +2.43.0 + diff --git a/queue-5.4/ixgbe-fix-an-error-handling-path-in-ixgbe_read_iosf_.patch b/queue-5.4/ixgbe-fix-an-error-handling-path-in-ixgbe_read_iosf_.patch new file mode 100644 index 00000000000..9bbd7e73f4b --- /dev/null +++ b/queue-5.4/ixgbe-fix-an-error-handling-path-in-ixgbe_read_iosf_.patch @@ -0,0 +1,44 @@ +From fdf292b87bfe2f2e1c463bfb6ceb168f577da4cb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 20 Jan 2024 18:25:36 +0100 +Subject: ixgbe: Fix an error handling path in ixgbe_read_iosf_sb_reg_x550() + +From: Christophe JAILLET + +[ Upstream commit bbc404d20d1b46d89b461918bc44587620eda200 ] + +All error handling paths, except this one, go to 'out' where +release_swfw_sync() is called. +This call balances the acquire_swfw_sync() call done at the beginning of +the function. + +Branch to the error handling path in order to correctly release some +resources in case of error. + +Fixes: ae14a1d8e104 ("ixgbe: Fix IOSF SB access issues") +Signed-off-by: Christophe JAILLET +Reviewed-by: Simon Horman +Tested-by: Pucha Himasekhar Reddy (A Contingent worker at Intel) +Signed-off-by: Tony Nguyen +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +index 7d3da1e823dc..48b95f0bca4e 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +@@ -717,7 +717,8 @@ static s32 ixgbe_read_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr, + error = (command & IXGBE_SB_IOSF_CTRL_CMPL_ERR_MASK) >> + IXGBE_SB_IOSF_CTRL_CMPL_ERR_SHIFT; + hw_dbg(hw, "Failed to read, error %x\n", error); +- return -EIO; ++ ret = -EIO; ++ goto out; + } + + if (!ret) +-- +2.43.0 + diff --git a/queue-5.4/ixgbe-refactor-overtemp-event-handling.patch b/queue-5.4/ixgbe-refactor-overtemp-event-handling.patch new file mode 100644 index 00000000000..5ffb19379e5 --- /dev/null +++ b/queue-5.4/ixgbe-refactor-overtemp-event-handling.patch @@ -0,0 +1,293 @@ +From f8461ba3d7677930b483e0f44748c902a41edfe9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 18 Dec 2023 11:39:25 +0100 +Subject: ixgbe: Refactor overtemp event handling + +From: Jedrzej Jagielski + +[ Upstream commit 6c1b4af8c1b20c70dde01e58381685d6a4a1d2c8 ] + +Currently ixgbe driver is notified of overheating events +via internal IXGBE_ERR_OVERTEMP error code. + +Change the approach for handle_lasi() to use freshly introduced +is_overtemp function parameter which set when such event occurs. +Change check_overtemp() to bool and return true if overtemp +event occurs. + +Reviewed-by: Przemek Kitszel +Signed-off-by: Jedrzej Jagielski +Reviewed-by: Jacob Keller +Reviewed-by: Simon Horman +Tested-by: Sunitha Mekala (A Contingent worker at Intel) +Signed-off-by: Tony Nguyen +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 +++----- + drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 21 +++++----- + drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | 2 +- + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 4 +- + drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 41 +++++++++++-------- + 5 files changed, 43 insertions(+), 41 deletions(-) + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +index f9f1f4153ad6..805aa9f53fc1 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +@@ -2755,7 +2755,6 @@ static void ixgbe_check_overtemp_subtask(struct ixgbe_adapter *adapter) + { + struct ixgbe_hw *hw = &adapter->hw; + u32 eicr = adapter->interrupt_event; +- s32 rc; + + if (test_bit(__IXGBE_DOWN, &adapter->state)) + return; +@@ -2789,14 +2788,13 @@ static void ixgbe_check_overtemp_subtask(struct ixgbe_adapter *adapter) + } + + /* Check if this is not due to overtemp */ +- if (hw->phy.ops.check_overtemp(hw) != IXGBE_ERR_OVERTEMP) ++ if (!hw->phy.ops.check_overtemp(hw)) + return; + + break; + case IXGBE_DEV_ID_X550EM_A_1G_T: + case IXGBE_DEV_ID_X550EM_A_1G_T_L: +- rc = hw->phy.ops.check_overtemp(hw); +- if (rc != IXGBE_ERR_OVERTEMP) ++ if (!hw->phy.ops.check_overtemp(hw)) + return; + break; + default: +@@ -7862,7 +7860,7 @@ static void ixgbe_service_timer(struct timer_list *t) + static void ixgbe_phy_interrupt_subtask(struct ixgbe_adapter *adapter) + { + struct ixgbe_hw *hw = &adapter->hw; +- u32 status; ++ bool overtemp; + + if (!(adapter->flags2 & IXGBE_FLAG2_PHY_INTERRUPT)) + return; +@@ -7872,11 +7870,9 @@ static void ixgbe_phy_interrupt_subtask(struct ixgbe_adapter *adapter) + if (!hw->phy.ops.handle_lasi) + return; + +- status = hw->phy.ops.handle_lasi(&adapter->hw); +- if (status != IXGBE_ERR_OVERTEMP) +- return; +- +- e_crit(drv, "%s\n", ixgbe_overheat_msg); ++ hw->phy.ops.handle_lasi(&adapter->hw, &overtemp); ++ if (overtemp) ++ e_crit(drv, "%s\n", ixgbe_overheat_msg); + } + + static void ixgbe_reset_subtask(struct ixgbe_adapter *adapter) +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +index 2584a1105e79..33f6ee1d5be5 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +@@ -405,8 +405,7 @@ s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw) + return status; + + /* Don't reset PHY if it's shut down due to overtemp. */ +- if (!hw->phy.reset_if_overtemp && +- (IXGBE_ERR_OVERTEMP == hw->phy.ops.check_overtemp(hw))) ++ if (!hw->phy.reset_if_overtemp && hw->phy.ops.check_overtemp(hw)) + return 0; + + /* Blocked by MNG FW so bail */ +@@ -2620,22 +2619,24 @@ static void ixgbe_i2c_bus_clear(struct ixgbe_hw *hw) + * @hw: pointer to hardware structure + * + * Checks if the LASI temp alarm status was triggered due to overtemp ++ * ++ * Return true when an overtemp event detected, otherwise false. + **/ +-s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw) ++bool ixgbe_tn_check_overtemp(struct ixgbe_hw *hw) + { + u16 phy_data = 0; ++ u32 status; + + if (hw->device_id != IXGBE_DEV_ID_82599_T3_LOM) +- return 0; ++ return false; + + /* Check that the LASI temp alarm status was triggered */ +- hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG, +- MDIO_MMD_PMAPMD, &phy_data); +- +- if (!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM)) +- return 0; ++ status = hw->phy.ops.read_reg(hw, IXGBE_TN_LASI_STATUS_REG, ++ MDIO_MMD_PMAPMD, &phy_data); ++ if (status) ++ return false; + +- return IXGBE_ERR_OVERTEMP; ++ return !!(phy_data & IXGBE_TN_LASI_STATUS_TEMP_ALARM); + } + + /** ixgbe_set_copper_phy_power - Control power for copper phy +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h +index 6544c4539c0d..ef72729d7c93 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h +@@ -155,7 +155,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw); + s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, + u16 *list_offset, + u16 *data_offset); +-s32 ixgbe_tn_check_overtemp(struct ixgbe_hw *hw); ++bool ixgbe_tn_check_overtemp(struct ixgbe_hw *hw); + s32 ixgbe_read_i2c_byte_generic(struct ixgbe_hw *hw, u8 byte_offset, + u8 dev_addr, u8 *data); + s32 ixgbe_read_i2c_byte_generic_unlocked(struct ixgbe_hw *hw, u8 byte_offset, +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +index 66963e142024..e84dbf6a3cb8 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +@@ -3505,10 +3505,10 @@ struct ixgbe_phy_operations { + s32 (*read_i2c_sff8472)(struct ixgbe_hw *, u8 , u8 *); + s32 (*read_i2c_eeprom)(struct ixgbe_hw *, u8 , u8 *); + s32 (*write_i2c_eeprom)(struct ixgbe_hw *, u8, u8); +- s32 (*check_overtemp)(struct ixgbe_hw *); ++ bool (*check_overtemp)(struct ixgbe_hw *); + s32 (*set_phy_power)(struct ixgbe_hw *, bool on); + s32 (*enter_lplu)(struct ixgbe_hw *); +- s32 (*handle_lasi)(struct ixgbe_hw *hw); ++ s32 (*handle_lasi)(struct ixgbe_hw *hw, bool *); + s32 (*read_i2c_byte_unlocked)(struct ixgbe_hw *, u8 offset, u8 addr, + u8 *value); + s32 (*write_i2c_byte_unlocked)(struct ixgbe_hw *, u8 offset, u8 addr, +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +index 3906234da369..7d3da1e823dc 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +@@ -600,8 +600,10 @@ static s32 ixgbe_setup_fw_link(struct ixgbe_hw *hw) + rc = ixgbe_fw_phy_activity(hw, FW_PHY_ACT_SETUP_LINK, &setup); + if (rc) + return rc; ++ + if (setup[0] == FW_PHY_ACT_SETUP_LINK_RSP_DOWN) +- return IXGBE_ERR_OVERTEMP; ++ return -EIO; ++ + return 0; + } + +@@ -2319,18 +2321,18 @@ static s32 ixgbe_get_link_capabilities_X550em(struct ixgbe_hw *hw, + * @hw: pointer to hardware structure + * @lsc: pointer to boolean flag which indicates whether external Base T + * PHY interrupt is lsc ++ * @is_overtemp: indicate whether an overtemp event encountered + * + * Determime if external Base T PHY interrupt cause is high temperature + * failure alarm or link status change. +- * +- * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature +- * failure alarm, else return PHY access status. + **/ +-static s32 ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc) ++static s32 ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc, ++ bool *is_overtemp) + { + u32 status; + u16 reg; + ++ *is_overtemp = false; + *lsc = false; + + /* Vendor alarm triggered */ +@@ -2362,7 +2364,8 @@ static s32 ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc) + if (reg & IXGBE_MDIO_GLOBAL_ALM_1_HI_TMP_FAIL) { + /* power down the PHY in case the PHY FW didn't already */ + ixgbe_set_copper_phy_power(hw, false); +- return IXGBE_ERR_OVERTEMP; ++ *is_overtemp = true; ++ return -EIO; + } + if (reg & IXGBE_MDIO_GLOBAL_ALM_1_DEV_FAULT) { + /* device fault alarm triggered */ +@@ -2376,7 +2379,8 @@ static s32 ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc) + if (reg == IXGBE_MDIO_GLOBAL_FAULT_MSG_HI_TMP) { + /* power down the PHY in case the PHY FW didn't */ + ixgbe_set_copper_phy_power(hw, false); +- return IXGBE_ERR_OVERTEMP; ++ *is_overtemp = true; ++ return -EIO; + } + } + +@@ -2412,12 +2416,12 @@ static s32 ixgbe_get_lasi_ext_t_x550em(struct ixgbe_hw *hw, bool *lsc) + **/ + static s32 ixgbe_enable_lasi_ext_t_x550em(struct ixgbe_hw *hw) + { ++ bool lsc, overtemp; + u32 status; + u16 reg; +- bool lsc; + + /* Clear interrupt flags */ +- status = ixgbe_get_lasi_ext_t_x550em(hw, &lsc); ++ status = ixgbe_get_lasi_ext_t_x550em(hw, &lsc, &overtemp); + + /* Enable link status change alarm */ + +@@ -2496,21 +2500,20 @@ static s32 ixgbe_enable_lasi_ext_t_x550em(struct ixgbe_hw *hw) + /** + * ixgbe_handle_lasi_ext_t_x550em - Handle external Base T PHY interrupt + * @hw: pointer to hardware structure ++ * @is_overtemp: indicate whether an overtemp event encountered + * + * Handle external Base T PHY interrupt. If high temperature + * failure alarm then return error, else if link status change + * then setup internal/external PHY link +- * +- * Return IXGBE_ERR_OVERTEMP if interrupt is high temperature +- * failure alarm, else return PHY access status. + **/ +-static s32 ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw) ++static s32 ixgbe_handle_lasi_ext_t_x550em(struct ixgbe_hw *hw, ++ bool *is_overtemp) + { + struct ixgbe_phy_info *phy = &hw->phy; + bool lsc; + u32 status; + +- status = ixgbe_get_lasi_ext_t_x550em(hw, &lsc); ++ status = ixgbe_get_lasi_ext_t_x550em(hw, &lsc, is_overtemp); + if (status) + return status; + +@@ -3138,21 +3141,23 @@ static s32 ixgbe_reset_phy_fw(struct ixgbe_hw *hw) + /** + * ixgbe_check_overtemp_fw - Check firmware-controlled PHYs for overtemp + * @hw: pointer to hardware structure ++ * ++ * Return true when an overtemp event detected, otherwise false. + */ +-static s32 ixgbe_check_overtemp_fw(struct ixgbe_hw *hw) ++static bool ixgbe_check_overtemp_fw(struct ixgbe_hw *hw) + { + u32 store[FW_PHY_ACT_DATA_COUNT] = { 0 }; + s32 rc; + + rc = ixgbe_fw_phy_activity(hw, FW_PHY_ACT_GET_LINK_INFO, &store); + if (rc) +- return rc; ++ return false; + + if (store[0] & FW_PHY_ACT_GET_LINK_INFO_TEMP) { + ixgbe_shutdown_fw_phy(hw); +- return IXGBE_ERR_OVERTEMP; ++ return true; + } +- return 0; ++ return false; + } + + /** +-- +2.43.0 + diff --git a/queue-5.4/ixgbe-refactor-returning-internal-error-codes.patch b/queue-5.4/ixgbe-refactor-returning-internal-error-codes.patch new file mode 100644 index 00000000000..f6bd7244e95 --- /dev/null +++ b/queue-5.4/ixgbe-refactor-returning-internal-error-codes.patch @@ -0,0 +1,2368 @@ +From b699ce942a29b9f1fd135d3c685edb55e78760de Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 18 Dec 2023 11:39:26 +0100 +Subject: ixgbe: Refactor returning internal error codes + +From: Jedrzej Jagielski + +[ Upstream commit 5795f533f30a80aa0473652876296ebc9129e33a ] + +Change returning codes to the kernel ones instead of +the internal ones for the entire ixgbe driver. + +Reviewed-by: Jacob Keller +Reviewed-by: Przemek Kitszel +Reviewed-by: Simon Horman +Signed-off-by: Jedrzej Jagielski +Tested-by: Sunitha Mekala (A Contingent worker at Intel) +Signed-off-by: Tony Nguyen +Stable-dep-of: bbc404d20d1b ("ixgbe: Fix an error handling path in ixgbe_read_iosf_sb_reg_x550()") +Signed-off-by: Sasha Levin +--- + .../net/ethernet/intel/ixgbe/ixgbe_82598.c | 36 ++--- + .../net/ethernet/intel/ixgbe/ixgbe_82599.c | 61 ++++---- + .../net/ethernet/intel/ixgbe/ixgbe_common.c | 145 ++++++++---------- + .../net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 2 +- + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 26 ++-- + drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c | 34 ++-- + drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h | 1 - + drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c | 84 +++++----- + .../net/ethernet/intel/ixgbe/ixgbe_sriov.c | 2 +- + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 39 ----- + drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 44 +++--- + drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 107 +++++++------ + 12 files changed, 264 insertions(+), 317 deletions(-) + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c +index eee277c1bedf..b1788ddffcb2 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82598.c +@@ -123,14 +123,14 @@ static s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw) + if (ret_val) + return ret_val; + if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + + /* Check to see if SFP+ module is supported */ + ret_val = ixgbe_get_sfp_init_sequence_offsets(hw, + &list_offset, + &data_offset); + if (ret_val) +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + break; + default: + break; +@@ -213,7 +213,7 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw, + break; + + default: +- return IXGBE_ERR_LINK_SETUP; ++ return -EIO; + } + + return 0; +@@ -283,7 +283,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw) + + /* Validate the water mark configuration */ + if (!hw->fc.pause_time) +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + + /* Low water mark of zero causes XOFF floods */ + for (i = 0; i < MAX_TRAFFIC_CLASS; i++) { +@@ -292,7 +292,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw) + if (!hw->fc.low_water[i] || + hw->fc.low_water[i] >= hw->fc.high_water[i]) { + hw_dbg(hw, "Invalid water mark configuration\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + } + } +@@ -369,7 +369,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw) + break; + default: + hw_dbg(hw, "Flow control param set incorrectly\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + /* Set 802.3x based flow control settings. */ +@@ -438,7 +438,7 @@ static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw, + msleep(100); + } + if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { +- status = IXGBE_ERR_AUTONEG_NOT_COMPLETE; ++ status = -EIO; + hw_dbg(hw, "Autonegotiation did not complete.\n"); + } + } +@@ -478,7 +478,7 @@ static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw) + + if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) { + hw_dbg(hw, "Link was indicated but link is down\n"); +- return IXGBE_ERR_LINK_SETUP; ++ return -EIO; + } + + return 0; +@@ -594,7 +594,7 @@ static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw, + speed &= link_capabilities; + + if (speed == IXGBE_LINK_SPEED_UNKNOWN) +- return IXGBE_ERR_LINK_SETUP; ++ return -EINVAL; + + /* Set KX4/KX support according to speed requested */ + else if (link_mode == IXGBE_AUTOC_LMS_KX4_AN || +@@ -701,9 +701,9 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw) + + /* Init PHY and function pointers, perform SFP setup */ + phy_status = hw->phy.ops.init(hw); +- if (phy_status == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (phy_status == -EOPNOTSUPP) + return phy_status; +- if (phy_status == IXGBE_ERR_SFP_NOT_PRESENT) ++ if (phy_status == -ENOENT) + goto mac_reset_top; + + hw->phy.ops.reset(hw); +@@ -727,7 +727,7 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw) + udelay(1); + } + if (ctrl & IXGBE_CTRL_RST) { +- status = IXGBE_ERR_RESET_FAILED; ++ status = -EIO; + hw_dbg(hw, "Reset polling failed to complete.\n"); + } + +@@ -789,7 +789,7 @@ static s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq) + /* Make sure we are using a valid rar index range */ + if (rar >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", rar); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar)); +@@ -814,7 +814,7 @@ static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq) + /* Make sure we are using a valid rar index range */ + if (rar >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", rar); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar)); +@@ -845,7 +845,7 @@ static s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind, + u32 vftabyte; + + if (vlan > 4095) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* Determine 32-bit word position in array */ + regindex = (vlan >> 5) & 0x7F; /* upper seven bits */ +@@ -964,7 +964,7 @@ static s32 ixgbe_read_i2c_phy_82598(struct ixgbe_hw *hw, u8 dev_addr, + gssr = IXGBE_GSSR_PHY0_SM; + + if (hw->mac.ops.acquire_swfw_sync(hw, gssr) != 0) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + if (hw->phy.type == ixgbe_phy_nl) { + /* +@@ -993,7 +993,7 @@ static s32 ixgbe_read_i2c_phy_82598(struct ixgbe_hw *hw, u8 dev_addr, + + if (sfp_stat != IXGBE_I2C_EEPROM_STATUS_PASS) { + hw_dbg(hw, "EEPROM read did not pass.\n"); +- status = IXGBE_ERR_SFP_NOT_PRESENT; ++ status = -ENOENT; + goto out; + } + +@@ -1003,7 +1003,7 @@ static s32 ixgbe_read_i2c_phy_82598(struct ixgbe_hw *hw, u8 dev_addr, + + *eeprom_data = (u8)(sfp_data >> 8); + } else { +- status = IXGBE_ERR_PHY; ++ status = -EIO; + } + + out: +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +index 109f8de5a1c2..4817be80c01f 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +@@ -117,7 +117,7 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) + ret_val = hw->mac.ops.acquire_swfw_sync(hw, + IXGBE_GSSR_MAC_CSR_SM); + if (ret_val) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + if (hw->eeprom.ops.read(hw, ++data_offset, &data_value)) + goto setup_sfp_err; +@@ -144,7 +144,7 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) + + if (ret_val) { + hw_dbg(hw, " sfp module setup not complete\n"); +- return IXGBE_ERR_SFP_SETUP_NOT_COMPLETE; ++ return -EIO; + } + } + +@@ -159,7 +159,7 @@ static s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw) + usleep_range(hw->eeprom.semaphore_delay * 1000, + hw->eeprom.semaphore_delay * 2000); + hw_err(hw, "eeprom read at offset %d failed\n", data_offset); +- return IXGBE_ERR_SFP_SETUP_NOT_COMPLETE; ++ return -EIO; + } + + /** +@@ -184,7 +184,7 @@ static s32 prot_autoc_read_82599(struct ixgbe_hw *hw, bool *locked, + ret_val = hw->mac.ops.acquire_swfw_sync(hw, + IXGBE_GSSR_MAC_CSR_SM); + if (ret_val) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + *locked = true; + } +@@ -219,7 +219,7 @@ static s32 prot_autoc_write_82599(struct ixgbe_hw *hw, u32 autoc, bool locked) + ret_val = hw->mac.ops.acquire_swfw_sync(hw, + IXGBE_GSSR_MAC_CSR_SM); + if (ret_val) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + locked = true; + } +@@ -400,7 +400,7 @@ static s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw, + break; + + default: +- return IXGBE_ERR_LINK_SETUP; ++ return -EIO; + } + + if (hw->phy.multispeed_fiber) { +@@ -541,7 +541,7 @@ static s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw, + msleep(100); + } + if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { +- status = IXGBE_ERR_AUTONEG_NOT_COMPLETE; ++ status = -EIO; + hw_dbg(hw, "Autoneg did not complete.\n"); + } + } +@@ -794,7 +794,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw, + speed &= link_capabilities; + + if (speed == IXGBE_LINK_SPEED_UNKNOWN) +- return IXGBE_ERR_LINK_SETUP; ++ return -EINVAL; + + /* Use stored value (EEPROM defaults) of AUTOC to find KR/KX4 support*/ + if (hw->mac.orig_link_settings_stored) +@@ -861,8 +861,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw, + msleep(100); + } + if (!(links_reg & IXGBE_LINKS_KX_AN_COMP)) { +- status = +- IXGBE_ERR_AUTONEG_NOT_COMPLETE; ++ status = -EIO; + hw_dbg(hw, "Autoneg did not complete.\n"); + } + } +@@ -927,7 +926,7 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw) + /* Identify PHY and related function pointers */ + status = hw->phy.ops.init(hw); + +- if (status == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (status == -EOPNOTSUPP) + return status; + + /* Setup SFP module if there is one present. */ +@@ -936,7 +935,7 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw) + hw->phy.sfp_setup_needed = false; + } + +- if (status == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (status == -EOPNOTSUPP) + return status; + + /* Reset PHY */ +@@ -974,7 +973,7 @@ static s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw) + } + + if (ctrl & IXGBE_CTRL_RST_MASK) { +- status = IXGBE_ERR_RESET_FAILED; ++ status = -EIO; + hw_dbg(hw, "Reset polling failed to complete.\n"); + } + +@@ -1093,7 +1092,7 @@ static s32 ixgbe_fdir_check_cmd_complete(struct ixgbe_hw *hw, u32 *fdircmd) + udelay(10); + } + +- return IXGBE_ERR_FDIR_CMD_INCOMPLETE; ++ return -EIO; + } + + /** +@@ -1155,7 +1154,7 @@ s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw) + } + if (i >= IXGBE_FDIR_INIT_DONE_POLL) { + hw_dbg(hw, "Flow Director Signature poll time exceeded!\n"); +- return IXGBE_ERR_FDIR_REINIT_FAILED; ++ return -EIO; + } + + /* Clear FDIR statistics registers (read to clear) */ +@@ -1387,7 +1386,7 @@ s32 ixgbe_fdir_add_signature_filter_82599(struct ixgbe_hw *hw, + break; + default: + hw_dbg(hw, " Error on flow type input\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + /* configure FDIRCMD register */ +@@ -1546,7 +1545,7 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw, + break; + default: + hw_dbg(hw, " Error on vm pool mask\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + switch (input_mask->formatted.flow_type & IXGBE_ATR_L4TYPE_MASK) { +@@ -1555,13 +1554,13 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw, + if (input_mask->formatted.dst_port || + input_mask->formatted.src_port) { + hw_dbg(hw, " Error on src/dst port mask\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + case IXGBE_ATR_L4TYPE_MASK: + break; + default: + hw_dbg(hw, " Error on flow type mask\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + switch (ntohs(input_mask->formatted.vlan_id) & 0xEFFF) { +@@ -1582,7 +1581,7 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw, + break; + default: + hw_dbg(hw, " Error on VLAN mask\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + switch ((__force u16)input_mask->formatted.flex_bytes & 0xFFFF) { +@@ -1594,7 +1593,7 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw, + break; + default: + hw_dbg(hw, " Error on flexible byte mask\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + /* Now mask VM pool and destination IPv6 - bits 5 and 2 */ +@@ -1823,7 +1822,7 @@ static s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw) + + /* Return error if SFP module has been detected but is not supported */ + if (hw->phy.type == ixgbe_phy_sfp_unsupported) +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + + return status; + } +@@ -1862,13 +1861,13 @@ static s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval) + * Verifies that installed the firmware version is 0.6 or higher + * for SFI devices. All 82599 SFI devices should have version 0.6 or higher. + * +- * Returns IXGBE_ERR_EEPROM_VERSION if the FW is not present or +- * if the FW version is not supported. ++ * Return: -EACCES if the FW is not present or if the FW version is ++ * not supported. + **/ + static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw) + { +- s32 status = IXGBE_ERR_EEPROM_VERSION; + u16 fw_offset, fw_ptp_cfg_offset; ++ s32 status = -EACCES; + u16 offset; + u16 fw_version = 0; + +@@ -1882,7 +1881,7 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw) + goto fw_version_err; + + if (fw_offset == 0 || fw_offset == 0xFFFF) +- return IXGBE_ERR_EEPROM_VERSION; ++ return -EACCES; + + /* get the offset to the Pass Through Patch Configuration block */ + offset = fw_offset + IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR; +@@ -1890,7 +1889,7 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw) + goto fw_version_err; + + if (fw_ptp_cfg_offset == 0 || fw_ptp_cfg_offset == 0xFFFF) +- return IXGBE_ERR_EEPROM_VERSION; ++ return -EACCES; + + /* get the firmware version */ + offset = fw_ptp_cfg_offset + IXGBE_FW_PATCH_VERSION_4; +@@ -1904,7 +1903,7 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw) + + fw_version_err: + hw_err(hw, "eeprom read at offset %d failed\n", offset); +- return IXGBE_ERR_EEPROM_VERSION; ++ return -EACCES; + } + + /** +@@ -2037,7 +2036,7 @@ static s32 ixgbe_reset_pipeline_82599(struct ixgbe_hw *hw) + + if (!(anlp1_reg & IXGBE_ANLP1_AN_STATE_MASK)) { + hw_dbg(hw, "auto negotiation not completed\n"); +- ret_val = IXGBE_ERR_RESET_FAILED; ++ ret_val = -EIO; + goto reset_pipeline_out; + } + +@@ -2086,7 +2085,7 @@ static s32 ixgbe_read_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset, + + if (!timeout) { + hw_dbg(hw, "Driver can't access resource, acquiring I2C bus timeout.\n"); +- status = IXGBE_ERR_I2C; ++ status = -EIO; + goto release_i2c_access; + } + } +@@ -2140,7 +2139,7 @@ static s32 ixgbe_write_i2c_byte_82599(struct ixgbe_hw *hw, u8 byte_offset, + + if (!timeout) { + hw_dbg(hw, "Driver can't access resource, acquiring I2C bus timeout.\n"); +- status = IXGBE_ERR_I2C; ++ status = -EIO; + goto release_i2c_access; + } + } +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +index 162adcc2bc9d..40c5baa191c9 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +@@ -124,7 +124,7 @@ s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw) + */ + if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { + hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + + /* +@@ -215,7 +215,7 @@ s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw) + break; + default: + hw_dbg(hw, "Flow control param set incorrectly\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + if (hw->mac.type != ixgbe_mac_X540) { +@@ -500,7 +500,7 @@ s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num, + + if (pba_num == NULL) { + hw_dbg(hw, "PBA string buffer was null\n"); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data); +@@ -526,7 +526,7 @@ s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num, + /* we will need 11 characters to store the PBA */ + if (pba_num_size < 11) { + hw_dbg(hw, "PBA string buffer too small\n"); +- return IXGBE_ERR_NO_SPACE; ++ return -ENOSPC; + } + + /* extract hex string from data and pba_ptr */ +@@ -563,13 +563,13 @@ s32 ixgbe_read_pba_string_generic(struct ixgbe_hw *hw, u8 *pba_num, + + if (length == 0xFFFF || length == 0) { + hw_dbg(hw, "NVM PBA number section invalid length\n"); +- return IXGBE_ERR_PBA_SECTION; ++ return -EIO; + } + + /* check if pba_num buffer is big enough */ + if (pba_num_size < (((u32)length * 2) - 1)) { + hw_dbg(hw, "PBA string buffer too small\n"); +- return IXGBE_ERR_NO_SPACE; ++ return -ENOSPC; + } + + /* trim pba length from start of string */ +@@ -805,7 +805,7 @@ s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index) + u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* To turn on the LED, set mode to ON. */ + led_reg &= ~IXGBE_LED_MODE_MASK(index); +@@ -826,7 +826,7 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index) + u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* To turn off the LED, set mode to OFF. */ + led_reg &= ~IXGBE_LED_MODE_MASK(index); +@@ -904,11 +904,8 @@ s32 ixgbe_write_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, + + hw->eeprom.ops.init_params(hw); + +- if (words == 0) +- return IXGBE_ERR_INVALID_ARGUMENT; +- +- if (offset + words > hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ if (words == 0 || (offset + words > hw->eeprom.word_size)) ++ return -EINVAL; + + /* + * The EEPROM page size cannot be queried from the chip. We do lazy +@@ -962,7 +959,7 @@ static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset, + + if (ixgbe_ready_eeprom(hw) != 0) { + ixgbe_release_eeprom(hw); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + for (i = 0; i < words; i++) { +@@ -1028,7 +1025,7 @@ s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data) + hw->eeprom.ops.init_params(hw); + + if (offset >= hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ return -EINVAL; + + return ixgbe_write_eeprom_buffer_bit_bang(hw, offset, 1, &data); + } +@@ -1050,11 +1047,8 @@ s32 ixgbe_read_eeprom_buffer_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, + + hw->eeprom.ops.init_params(hw); + +- if (words == 0) +- return IXGBE_ERR_INVALID_ARGUMENT; +- +- if (offset + words > hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ if (words == 0 || (offset + words > hw->eeprom.word_size)) ++ return -EINVAL; + + /* + * We cannot hold synchronization semaphores for too long +@@ -1099,7 +1093,7 @@ static s32 ixgbe_read_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset, + + if (ixgbe_ready_eeprom(hw) != 0) { + ixgbe_release_eeprom(hw); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + for (i = 0; i < words; i++) { +@@ -1142,7 +1136,7 @@ s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, + hw->eeprom.ops.init_params(hw); + + if (offset >= hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ return -EINVAL; + + return ixgbe_read_eeprom_buffer_bit_bang(hw, offset, 1, data); + } +@@ -1165,11 +1159,8 @@ s32 ixgbe_read_eerd_buffer_generic(struct ixgbe_hw *hw, u16 offset, + + hw->eeprom.ops.init_params(hw); + +- if (words == 0) +- return IXGBE_ERR_INVALID_ARGUMENT; +- +- if (offset >= hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ if (words == 0 || offset >= hw->eeprom.word_size) ++ return -EINVAL; + + for (i = 0; i < words; i++) { + eerd = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) | +@@ -1262,11 +1253,8 @@ s32 ixgbe_write_eewr_buffer_generic(struct ixgbe_hw *hw, u16 offset, + + hw->eeprom.ops.init_params(hw); + +- if (words == 0) +- return IXGBE_ERR_INVALID_ARGUMENT; +- +- if (offset >= hw->eeprom.word_size) +- return IXGBE_ERR_EEPROM; ++ if (words == 0 || offset >= hw->eeprom.word_size) ++ return -EINVAL; + + for (i = 0; i < words; i++) { + eewr = ((offset + i) << IXGBE_EEPROM_RW_ADDR_SHIFT) | +@@ -1328,7 +1316,7 @@ static s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg) + } + udelay(5); + } +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /** +@@ -1344,7 +1332,7 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw) + u32 i; + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != 0) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + eec = IXGBE_READ_REG(hw, IXGBE_EEC(hw)); + +@@ -1366,7 +1354,7 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw) + hw_dbg(hw, "Could not acquire EEPROM grant\n"); + + hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /* Setup EEPROM for Read/Write */ +@@ -1419,7 +1407,7 @@ static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw) + swsm = IXGBE_READ_REG(hw, IXGBE_SWSM(hw)); + if (swsm & IXGBE_SWSM_SMBI) { + hw_dbg(hw, "Software semaphore SMBI between device drivers not granted.\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + } + +@@ -1447,7 +1435,7 @@ static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw) + if (i >= timeout) { + hw_dbg(hw, "SWESMBI Software EEPROM semaphore not granted.\n"); + ixgbe_release_eeprom_semaphore(hw); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + return 0; +@@ -1503,7 +1491,7 @@ static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw) + */ + if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) { + hw_dbg(hw, "SPI EEPROM Status error\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + return 0; +@@ -1715,7 +1703,7 @@ s32 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw) + for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) { + if (hw->eeprom.ops.read(hw, i, &pointer)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /* If the pointer seems invalid */ +@@ -1724,7 +1712,7 @@ s32 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw) + + if (hw->eeprom.ops.read(hw, pointer, &length)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + if (length == 0xFFFF || length == 0) +@@ -1733,7 +1721,7 @@ s32 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw) + for (j = pointer + 1; j <= pointer + length; j++) { + if (hw->eeprom.ops.read(hw, j, &word)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + checksum += word; + } +@@ -1786,7 +1774,7 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw, + * calculated checksum + */ + if (read_checksum != checksum) +- status = IXGBE_ERR_EEPROM_CHECKSUM; ++ status = -EIO; + + /* If the user cares, return the calculated checksum */ + if (checksum_val) +@@ -1845,7 +1833,7 @@ s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, + /* Make sure we are using a valid rar index range */ + if (index >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", index); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + /* setup VMDq pool selection before this RAR gets enabled */ +@@ -1897,7 +1885,7 @@ s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index) + /* Make sure we are using a valid rar index range */ + if (index >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", index); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + /* +@@ -2146,7 +2134,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw) + + /* Validate the water mark configuration. */ + if (!hw->fc.pause_time) +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + + /* Low water mark of zero causes XOFF floods */ + for (i = 0; i < MAX_TRAFFIC_CLASS; i++) { +@@ -2155,7 +2143,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw) + if (!hw->fc.low_water[i] || + hw->fc.low_water[i] >= hw->fc.high_water[i]) { + hw_dbg(hw, "Invalid water mark configuration\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + } + } +@@ -2212,7 +2200,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw) + break; + default: + hw_dbg(hw, "Flow control param set incorrectly\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + /* Set 802.3x based flow control settings. */ +@@ -2269,7 +2257,7 @@ s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg, + u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm) + { + if ((!(adv_reg)) || (!(lp_reg))) +- return IXGBE_ERR_FC_NOT_NEGOTIATED; ++ return -EINVAL; + + if ((adv_reg & adv_sym) && (lp_reg & lp_sym)) { + /* +@@ -2321,7 +2309,7 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw) + linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA); + if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) || + (!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) +- return IXGBE_ERR_FC_NOT_NEGOTIATED; ++ return -EIO; + + pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); + pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP); +@@ -2353,12 +2341,12 @@ static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw) + */ + links = IXGBE_READ_REG(hw, IXGBE_LINKS); + if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) +- return IXGBE_ERR_FC_NOT_NEGOTIATED; ++ return -EIO; + + if (hw->mac.type == ixgbe_mac_82599EB) { + links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2); + if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) +- return IXGBE_ERR_FC_NOT_NEGOTIATED; ++ return -EIO; + } + /* + * Read the 10g AN autoc and LP ability registers and resolve +@@ -2407,8 +2395,8 @@ static s32 ixgbe_fc_autoneg_copper(struct ixgbe_hw *hw) + **/ + void ixgbe_fc_autoneg(struct ixgbe_hw *hw) + { +- s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED; + ixgbe_link_speed speed; ++ s32 ret_val = -EIO; + bool link_up; + + /* +@@ -2510,7 +2498,7 @@ static u32 ixgbe_pcie_timeout_poll(struct ixgbe_hw *hw) + * @hw: pointer to hardware structure + * + * Disables PCI-Express primary access and verifies there are no pending +- * requests. IXGBE_ERR_PRIMARY_REQUESTS_PENDING is returned if primary disable ++ * requests. -EALREADY is returned if primary disable + * bit hasn't caused the primary requests to be disabled, else 0 + * is returned signifying primary requests disabled. + **/ +@@ -2575,7 +2563,7 @@ static s32 ixgbe_disable_pcie_primary(struct ixgbe_hw *hw) + } + + hw_dbg(hw, "PCIe transaction pending bit also did not clear.\n"); +- return IXGBE_ERR_PRIMARY_REQUESTS_PENDING; ++ return -EALREADY; + } + + /** +@@ -2600,7 +2588,7 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u32 mask) + * SW_FW_SYNC bits (not just NVM) + */ + if (ixgbe_get_eeprom_semaphore(hw)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + gssr = IXGBE_READ_REG(hw, IXGBE_GSSR); + if (!(gssr & (fwmask | swmask))) { +@@ -2620,7 +2608,7 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u32 mask) + ixgbe_release_swfw_sync(hw, gssr & (fwmask | swmask)); + + usleep_range(5000, 10000); +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + /** +@@ -2757,7 +2745,7 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index) + s32 ret_val; + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* + * Link must be up to auto-blink the LEDs; +@@ -2803,7 +2791,7 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index) + s32 ret_val; + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + ret_val = hw->mac.ops.prot_autoc_read(hw, &locked, &autoc_reg); + if (ret_val) +@@ -2963,7 +2951,7 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq) + /* Make sure we are using a valid rar index range */ + if (rar >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", rar); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar)); +@@ -3014,7 +3002,7 @@ s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq) + /* Make sure we are using a valid rar index range */ + if (rar >= rar_entries) { + hw_dbg(hw, "RAR index %d is out of range.\n", rar); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + if (vmdq < 32) { +@@ -3091,7 +3079,7 @@ static s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan, bool vlvf_bypass) + * will simply bypass the VLVF if there are no entries present in the + * VLVF that contain our VLAN + */ +- first_empty_slot = vlvf_bypass ? IXGBE_ERR_NO_SPACE : 0; ++ first_empty_slot = vlvf_bypass ? -ENOSPC : 0; + + /* add VLAN enable bit for comparison */ + vlan |= IXGBE_VLVF_VIEN; +@@ -3115,7 +3103,7 @@ static s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan, bool vlvf_bypass) + if (!first_empty_slot) + hw_dbg(hw, "No space in VLVF.\n"); + +- return first_empty_slot ? : IXGBE_ERR_NO_SPACE; ++ return first_empty_slot ? : -ENOSPC; + } + + /** +@@ -3135,7 +3123,7 @@ s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind, + s32 vlvf_index; + + if ((vlan > 4095) || (vind > 63)) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* + * this is a 2 part operation - first the VFTA, then the +@@ -3596,7 +3584,8 @@ u8 ixgbe_calculate_checksum(u8 *buffer, u32 length) + * + * Communicates with the manageability block. On success return 0 + * else returns semaphore error when encountering an error acquiring +- * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails. ++ * semaphore, -EINVAL when incorrect parameters passed or -EIO when ++ * command fails. + * + * This function assumes that the IXGBE_GSSR_SW_MNG_SM semaphore is held + * by the caller. +@@ -3609,7 +3598,7 @@ s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length, + + if (!length || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) { + hw_dbg(hw, "Buffer length failure buffersize-%d.\n", length); +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EINVAL; + } + + /* Set bit 9 of FWSTS clearing FW reset indication */ +@@ -3620,13 +3609,13 @@ s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length, + hicr = IXGBE_READ_REG(hw, IXGBE_HICR); + if (!(hicr & IXGBE_HICR_EN)) { + hw_dbg(hw, "IXGBE_HOST_EN bit disabled.\n"); +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EIO; + } + + /* Calculate length in DWORDs. We must be DWORD aligned */ + if (length % sizeof(u32)) { + hw_dbg(hw, "Buffer length failure, not aligned to dword"); +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + } + + dword_len = length >> 2; +@@ -3651,7 +3640,7 @@ s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length, + /* Check command successful completion. */ + if ((timeout && i == timeout) || + !(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV)) +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EIO; + + return 0; + } +@@ -3671,7 +3660,7 @@ s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length, + * in these cases. + * + * Communicates with the manageability block. On success return 0 +- * else return IXGBE_ERR_HOST_INTERFACE_COMMAND. ++ * else return -EIO or -EINVAL. + **/ + s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, void *buffer, + u32 length, u32 timeout, +@@ -3688,7 +3677,7 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, void *buffer, + + if (!length || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) { + hw_dbg(hw, "Buffer length failure buffersize-%d.\n", length); +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EINVAL; + } + /* Take management host interface semaphore */ + status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM); +@@ -3718,7 +3707,7 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, void *buffer, + + if (length < round_up(buf_len, 4) + hdr_size) { + hw_dbg(hw, "Buffer not large enough for reply message.\n"); +- status = IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ status = -EIO; + goto rel_out; + } + +@@ -3749,8 +3738,8 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, void *buffer, + * + * Sends driver version number to firmware through the manageability + * block. On success return 0 +- * else returns IXGBE_ERR_SWFW_SYNC when encountering an error acquiring +- * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails. ++ * else returns -EBUSY when encountering an error acquiring ++ * semaphore or -EIO when command fails. + **/ + s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min, + u8 build, u8 sub, __always_unused u16 len, +@@ -3786,7 +3775,7 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min, + FW_CEM_RESP_STATUS_SUCCESS) + ret_val = 0; + else +- ret_val = IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ ret_val = -EIO; + + break; + } +@@ -3884,14 +3873,14 @@ static s32 ixgbe_get_ets_data(struct ixgbe_hw *hw, u16 *ets_cfg, + return status; + + if ((*ets_offset == 0x0000) || (*ets_offset == 0xFFFF)) +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + + status = hw->eeprom.ops.read(hw, *ets_offset, ets_cfg); + if (status) + return status; + + if ((*ets_cfg & IXGBE_ETS_TYPE_MASK) != IXGBE_ETS_TYPE_EMC_SHIFTED) +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + + return 0; + } +@@ -3914,7 +3903,7 @@ s32 ixgbe_get_thermal_sensor_data_generic(struct ixgbe_hw *hw) + + /* Only support thermal sensors attached to physical port 0 */ + if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)) +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + + status = ixgbe_get_ets_data(hw, &ets_cfg, &ets_offset); + if (status) +@@ -3974,7 +3963,7 @@ s32 ixgbe_init_thermal_sensor_thresh_generic(struct ixgbe_hw *hw) + + /* Only support thermal sensors attached to physical port 0 */ + if ((IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)) +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + + status = ixgbe_get_ets_data(hw, &ets_cfg, &ets_offset); + if (status) +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +index a43cb7bfcccd..89812b34a899 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +@@ -3247,7 +3247,7 @@ static int ixgbe_get_module_eeprom(struct net_device *dev, + { + struct ixgbe_adapter *adapter = netdev_priv(dev); + struct ixgbe_hw *hw = &adapter->hw; +- s32 status = IXGBE_ERR_PHY_ADDR_INVALID; ++ s32 status = -EFAULT; + u8 databyte = 0xFF; + int i = 0; + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +index b4f4264ad990..f9f1f4153ad6 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +@@ -5519,7 +5519,7 @@ static int ixgbe_non_sfp_link_config(struct ixgbe_hw *hw) + { + u32 speed; + bool autoneg, link_up = false; +- int ret = IXGBE_ERR_LINK_SETUP; ++ int ret = -EIO; + + if (hw->mac.ops.check_link) + ret = hw->mac.ops.check_link(hw, &speed, &link_up, false); +@@ -5938,13 +5938,13 @@ void ixgbe_reset(struct ixgbe_adapter *adapter) + err = hw->mac.ops.init_hw(hw); + switch (err) { + case 0: +- case IXGBE_ERR_SFP_NOT_PRESENT: +- case IXGBE_ERR_SFP_NOT_SUPPORTED: ++ case -ENOENT: ++ case -EOPNOTSUPP: + break; +- case IXGBE_ERR_PRIMARY_REQUESTS_PENDING: ++ case -EALREADY: + e_dev_err("primary disable timed out\n"); + break; +- case IXGBE_ERR_EEPROM_VERSION: ++ case -EACCES: + /* We are running on a pre-production device, log a warning */ + e_dev_warn("This device is a pre-production adapter/LOM. " + "Please be aware there may be issues associated with " +@@ -7753,10 +7753,10 @@ static void ixgbe_sfp_detection_subtask(struct ixgbe_adapter *adapter) + adapter->sfp_poll_time = jiffies + IXGBE_SFP_POLL_JIFFIES - 1; + + err = hw->phy.ops.identify_sfp(hw); +- if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (err == -EOPNOTSUPP) + goto sfp_out; + +- if (err == IXGBE_ERR_SFP_NOT_PRESENT) { ++ if (err == -ENOENT) { + /* If no cable is present, then we need to reset + * the next time we find a good cable. */ + adapter->flags2 |= IXGBE_FLAG2_SFP_NEEDS_RESET; +@@ -7782,7 +7782,7 @@ static void ixgbe_sfp_detection_subtask(struct ixgbe_adapter *adapter) + else + err = hw->mac.ops.setup_sfp(hw); + +- if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (err == -EOPNOTSUPP) + goto sfp_out; + + adapter->flags |= IXGBE_FLAG_NEED_LINK_CONFIG; +@@ -7791,8 +7791,8 @@ static void ixgbe_sfp_detection_subtask(struct ixgbe_adapter *adapter) + sfp_out: + clear_bit(__IXGBE_IN_SFP_INIT, &adapter->state); + +- if ((err == IXGBE_ERR_SFP_NOT_SUPPORTED) && +- (adapter->netdev->reg_state == NETREG_REGISTERED)) { ++ if (err == -EOPNOTSUPP && ++ adapter->netdev->reg_state == NETREG_REGISTERED) { + e_dev_err("failed to initialize because an unsupported " + "SFP+ module type was detected.\n"); + e_dev_err("Reload the driver after installing a " +@@ -10918,9 +10918,9 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + err = hw->mac.ops.reset_hw(hw); + hw->phy.reset_if_overtemp = false; + ixgbe_set_eee_capable(adapter); +- if (err == IXGBE_ERR_SFP_NOT_PRESENT) { ++ if (err == -ENOENT) { + err = 0; +- } else if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) { ++ } else if (err == -EOPNOTSUPP) { + e_dev_err("failed to load because an unsupported SFP+ or QSFP module type was detected.\n"); + e_dev_err("Reload the driver after installing a supported module.\n"); + goto err_sw_init; +@@ -11137,7 +11137,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) + + /* reset the hardware with the new settings */ + err = hw->mac.ops.start_hw(hw); +- if (err == IXGBE_ERR_EEPROM_VERSION) { ++ if (err == -EACCES) { + /* We are running on a pre-production device, log a warning */ + e_dev_warn("This device is a pre-production adapter/LOM. " + "Please be aware there may be issues associated " +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c +index 5679293e53f7..fe7ef5773369 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c +@@ -24,7 +24,7 @@ s32 ixgbe_read_mbx(struct ixgbe_hw *hw, u32 *msg, u16 size, u16 mbx_id) + size = mbx->size; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + return mbx->ops->read(hw, msg, size, mbx_id); + } +@@ -43,10 +43,10 @@ s32 ixgbe_write_mbx(struct ixgbe_hw *hw, u32 *msg, u16 size, u16 mbx_id) + struct ixgbe_mbx_info *mbx = &hw->mbx; + + if (size > mbx->size) +- return IXGBE_ERR_MBX; ++ return -EINVAL; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + return mbx->ops->write(hw, msg, size, mbx_id); + } +@@ -63,7 +63,7 @@ s32 ixgbe_check_for_msg(struct ixgbe_hw *hw, u16 mbx_id) + struct ixgbe_mbx_info *mbx = &hw->mbx; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + return mbx->ops->check_for_msg(hw, mbx_id); + } +@@ -80,7 +80,7 @@ s32 ixgbe_check_for_ack(struct ixgbe_hw *hw, u16 mbx_id) + struct ixgbe_mbx_info *mbx = &hw->mbx; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + return mbx->ops->check_for_ack(hw, mbx_id); + } +@@ -97,7 +97,7 @@ s32 ixgbe_check_for_rst(struct ixgbe_hw *hw, u16 mbx_id) + struct ixgbe_mbx_info *mbx = &hw->mbx; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + return mbx->ops->check_for_rst(hw, mbx_id); + } +@@ -115,12 +115,12 @@ static s32 ixgbe_poll_for_msg(struct ixgbe_hw *hw, u16 mbx_id) + int countdown = mbx->timeout; + + if (!countdown || !mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + while (mbx->ops->check_for_msg(hw, mbx_id)) { + countdown--; + if (!countdown) +- return IXGBE_ERR_MBX; ++ return -EIO; + udelay(mbx->usec_delay); + } + +@@ -140,12 +140,12 @@ static s32 ixgbe_poll_for_ack(struct ixgbe_hw *hw, u16 mbx_id) + int countdown = mbx->timeout; + + if (!countdown || !mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + while (mbx->ops->check_for_ack(hw, mbx_id)) { + countdown--; + if (!countdown) +- return IXGBE_ERR_MBX; ++ return -EIO; + udelay(mbx->usec_delay); + } + +@@ -169,7 +169,7 @@ static s32 ixgbe_read_posted_mbx(struct ixgbe_hw *hw, u32 *msg, u16 size, + s32 ret_val; + + if (!mbx->ops) +- return IXGBE_ERR_MBX; ++ return -EIO; + + ret_val = ixgbe_poll_for_msg(hw, mbx_id); + if (ret_val) +@@ -197,7 +197,7 @@ static s32 ixgbe_write_posted_mbx(struct ixgbe_hw *hw, u32 *msg, u16 size, + + /* exit if either we can't write or there isn't a defined timeout */ + if (!mbx->ops || !mbx->timeout) +- return IXGBE_ERR_MBX; ++ return -EIO; + + /* send msg */ + ret_val = mbx->ops->write(hw, msg, size, mbx_id); +@@ -217,7 +217,7 @@ static s32 ixgbe_check_for_bit_pf(struct ixgbe_hw *hw, u32 mask, s32 index) + return 0; + } + +- return IXGBE_ERR_MBX; ++ return -EIO; + } + + /** +@@ -238,7 +238,7 @@ static s32 ixgbe_check_for_msg_pf(struct ixgbe_hw *hw, u16 vf_number) + return 0; + } + +- return IXGBE_ERR_MBX; ++ return -EIO; + } + + /** +@@ -259,7 +259,7 @@ static s32 ixgbe_check_for_ack_pf(struct ixgbe_hw *hw, u16 vf_number) + return 0; + } + +- return IXGBE_ERR_MBX; ++ return -EIO; + } + + /** +@@ -295,7 +295,7 @@ static s32 ixgbe_check_for_rst_pf(struct ixgbe_hw *hw, u16 vf_number) + return 0; + } + +- return IXGBE_ERR_MBX; ++ return -EIO; + } + + /** +@@ -317,7 +317,7 @@ static s32 ixgbe_obtain_mbx_lock_pf(struct ixgbe_hw *hw, u16 vf_number) + if (p2v_mailbox & IXGBE_PFMAILBOX_PFU) + return 0; + +- return IXGBE_ERR_MBX; ++ return -EIO; + } + + /** +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h +index a148534d7256..def067b15873 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.h +@@ -7,7 +7,6 @@ + #include "ixgbe_type.h" + + #define IXGBE_VFMAILBOX_SIZE 16 /* 16 32 bit words - 64 bytes */ +-#define IXGBE_ERR_MBX -100 + + #define IXGBE_VFMAILBOX 0x002FC + #define IXGBE_VFMBMEM 0x00200 +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +index ba36be0c7eb4..2584a1105e79 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c +@@ -102,7 +102,7 @@ s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, + csum = ~csum; + do { + if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + ixgbe_i2c_start(hw); + /* Device Address and write indication */ + if (ixgbe_out_i2c_byte_ack(hw, addr)) +@@ -150,7 +150,7 @@ s32 ixgbe_read_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, + hw_dbg(hw, "I2C byte read combined error.\n"); + } while (retry < max_retry); + +- return IXGBE_ERR_I2C; ++ return -EIO; + } + + /** +@@ -179,7 +179,7 @@ s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, + csum = ~csum; + do { + if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + ixgbe_i2c_start(hw); + /* Device Address and write indication */ + if (ixgbe_out_i2c_byte_ack(hw, addr)) +@@ -215,7 +215,7 @@ s32 ixgbe_write_i2c_combined_generic_int(struct ixgbe_hw *hw, u8 addr, + hw_dbg(hw, "I2C byte write combined error.\n"); + } while (retry < max_retry); + +- return IXGBE_ERR_I2C; ++ return -EIO; + } + + /** +@@ -262,8 +262,8 @@ static bool ixgbe_probe_phy(struct ixgbe_hw *hw, u16 phy_addr) + **/ + s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw) + { ++ u32 status = -EFAULT; + u32 phy_addr; +- u32 status = IXGBE_ERR_PHY_ADDR_INVALID; + + if (!hw->phy.phy_semaphore_mask) { + if (hw->bus.lan_id) +@@ -282,7 +282,7 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw) + if (ixgbe_probe_phy(hw, phy_addr)) + return 0; + else +- return IXGBE_ERR_PHY_ADDR_INVALID; ++ return -EFAULT; + } + + for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) { +@@ -454,7 +454,7 @@ s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw) + + if (ctrl & MDIO_CTRL1_RESET) { + hw_dbg(hw, "PHY reset polling failed to complete.\n"); +- return IXGBE_ERR_RESET_FAILED; ++ return -EIO; + } + + return 0; +@@ -496,7 +496,7 @@ s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, + + if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { + hw_dbg(hw, "PHY address command did not complete.\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /* Address cycle complete, setup and write the read +@@ -523,7 +523,7 @@ s32 ixgbe_read_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, u32 device_type, + + if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { + hw_dbg(hw, "PHY read command didn't complete\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /* Read operation is complete. Get the data +@@ -555,7 +555,7 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, + phy_data); + hw->mac.ops.release_swfw_sync(hw, gssr); + } else { +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + return status; +@@ -600,7 +600,7 @@ s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, + + if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { + hw_dbg(hw, "PHY address cmd didn't complete\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /* +@@ -628,7 +628,7 @@ s32 ixgbe_write_phy_reg_mdi(struct ixgbe_hw *hw, u32 reg_addr, + + if ((command & IXGBE_MSCA_MDI_COMMAND) != 0) { + hw_dbg(hw, "PHY write cmd didn't complete\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + return 0; +@@ -653,7 +653,7 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr, + phy_data); + hw->mac.ops.release_swfw_sync(hw, gssr); + } else { +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + return status; +@@ -1302,7 +1302,7 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw) + + if ((phy_data & MDIO_CTRL1_RESET) != 0) { + hw_dbg(hw, "PHY reset did not complete.\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /* Get init offsets */ +@@ -1359,12 +1359,12 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw) + hw_dbg(hw, "SOL\n"); + } else { + hw_dbg(hw, "Bad control value\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + break; + default: + hw_dbg(hw, "Bad control type\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + } + +@@ -1372,7 +1372,7 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw) + + err_eeprom: + hw_err(hw, "eeprom read at offset %d failed\n", data_offset); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /** +@@ -1390,10 +1390,10 @@ s32 ixgbe_identify_module_generic(struct ixgbe_hw *hw) + return ixgbe_identify_qsfp_module_generic(hw); + default: + hw->phy.sfp_type = ixgbe_sfp_type_not_present; +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + + /** +@@ -1418,7 +1418,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) + + if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) { + hw->phy.sfp_type = ixgbe_sfp_type_not_present; +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + + /* LAN ID is needed for sfp_type determination */ +@@ -1433,7 +1433,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) + + if (identifier != IXGBE_SFF_IDENTIFIER_SFP) { + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + status = hw->phy.ops.read_i2c_eeprom(hw, + IXGBE_SFF_1GBE_COMP_CODES, +@@ -1624,7 +1624,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) + hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core0 || + hw->phy.sfp_type == ixgbe_sfp_type_1g_sx_core1)) { + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + + /* Anything else 82598-based is supported */ +@@ -1648,7 +1648,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) + } + hw_dbg(hw, "SFP+ module not supported\n"); + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + return 0; + +@@ -1658,7 +1658,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw) + hw->phy.id = 0; + hw->phy.type = ixgbe_phy_unknown; + } +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + + /** +@@ -1685,7 +1685,7 @@ static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) + + if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber_qsfp) { + hw->phy.sfp_type = ixgbe_sfp_type_not_present; +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + + /* LAN ID is needed for sfp_type determination */ +@@ -1699,7 +1699,7 @@ static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) + + if (identifier != IXGBE_SFF_IDENTIFIER_QSFP_PLUS) { + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + + hw->phy.id = identifier; +@@ -1767,7 +1767,7 @@ static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) + } else { + /* unsupported module type */ + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + } + +@@ -1827,7 +1827,7 @@ static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) + } + hw_dbg(hw, "QSFP module not supported\n"); + hw->phy.type = ixgbe_phy_sfp_unsupported; +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + return 0; + } +@@ -1838,7 +1838,7 @@ static s32 ixgbe_identify_qsfp_module_generic(struct ixgbe_hw *hw) + hw->phy.id = 0; + hw->phy.type = ixgbe_phy_unknown; + +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + } + + /** +@@ -1858,14 +1858,14 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, + u16 sfp_type = hw->phy.sfp_type; + + if (hw->phy.sfp_type == ixgbe_sfp_type_unknown) +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + + if (hw->phy.sfp_type == ixgbe_sfp_type_not_present) +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + + if ((hw->device_id == IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM) && + (hw->phy.sfp_type == ixgbe_sfp_type_da_cu)) +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + + /* + * Limiting active cables and 1G Phys must be initialized as +@@ -1886,11 +1886,11 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, + if (hw->eeprom.ops.read(hw, IXGBE_PHY_INIT_OFFSET_NL, list_offset)) { + hw_err(hw, "eeprom read at %d failed\n", + IXGBE_PHY_INIT_OFFSET_NL); +- return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; ++ return -EIO; + } + + if ((!*list_offset) || (*list_offset == 0xFFFF)) +- return IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT; ++ return -EIO; + + /* Shift offset to first ID word */ + (*list_offset)++; +@@ -1909,7 +1909,7 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, + goto err_phy; + if ((!*data_offset) || (*data_offset == 0xFFFF)) { + hw_dbg(hw, "SFP+ module not supported\n"); +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } else { + break; + } +@@ -1922,14 +1922,14 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw, + + if (sfp_id == IXGBE_PHY_INIT_END_NL) { + hw_dbg(hw, "No matching SFP+ module found\n"); +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + + return 0; + + err_phy: + hw_err(hw, "eeprom read at offset %d failed\n", *list_offset); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + /** +@@ -2024,7 +2024,7 @@ static s32 ixgbe_read_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset, + + do { + if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + ixgbe_i2c_start(hw); + +@@ -2140,7 +2140,7 @@ static s32 ixgbe_write_i2c_byte_generic_int(struct ixgbe_hw *hw, u8 byte_offset, + u32 swfw_mask = hw->phy.phy_semaphore_mask; + + if (lock && hw->mac.ops.acquire_swfw_sync(hw, swfw_mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + do { + ixgbe_i2c_start(hw); +@@ -2382,7 +2382,7 @@ static s32 ixgbe_get_i2c_ack(struct ixgbe_hw *hw) + + if (ack == 1) { + hw_dbg(hw, "I2C ack was not received.\n"); +- status = IXGBE_ERR_I2C; ++ status = -EIO; + } + + ixgbe_lower_i2c_clk(hw, &i2cctl); +@@ -2454,7 +2454,7 @@ static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data) + udelay(IXGBE_I2C_T_LOW); + } else { + hw_dbg(hw, "I2C data was not set to %X\n", data); +- return IXGBE_ERR_I2C; ++ return -EIO; + } + + return 0; +@@ -2550,7 +2550,7 @@ static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data) + *i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL(hw)); + if (data != ixgbe_get_i2c_data(hw, i2cctl)) { + hw_dbg(hw, "Error - I2C data was not set to %X.\n", data); +- return IXGBE_ERR_I2C; ++ return -EIO; + } + + return 0; +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +index a3b129541566..843a13f219d7 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c +@@ -1279,7 +1279,7 @@ static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf) + break; + default: + e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]); +- retval = IXGBE_ERR_MBX; ++ retval = -EIO; + break; + } + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +index 039f7c73a3b5..66963e142024 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +@@ -3661,45 +3661,6 @@ struct ixgbe_info { + const u32 *mvals; + }; + +- +-/* Error Codes */ +-#define IXGBE_ERR_EEPROM -1 +-#define IXGBE_ERR_EEPROM_CHECKSUM -2 +-#define IXGBE_ERR_PHY -3 +-#define IXGBE_ERR_CONFIG -4 +-#define IXGBE_ERR_PARAM -5 +-#define IXGBE_ERR_MAC_TYPE -6 +-#define IXGBE_ERR_UNKNOWN_PHY -7 +-#define IXGBE_ERR_LINK_SETUP -8 +-#define IXGBE_ERR_ADAPTER_STOPPED -9 +-#define IXGBE_ERR_INVALID_MAC_ADDR -10 +-#define IXGBE_ERR_DEVICE_NOT_SUPPORTED -11 +-#define IXGBE_ERR_PRIMARY_REQUESTS_PENDING -12 +-#define IXGBE_ERR_INVALID_LINK_SETTINGS -13 +-#define IXGBE_ERR_AUTONEG_NOT_COMPLETE -14 +-#define IXGBE_ERR_RESET_FAILED -15 +-#define IXGBE_ERR_SWFW_SYNC -16 +-#define IXGBE_ERR_PHY_ADDR_INVALID -17 +-#define IXGBE_ERR_I2C -18 +-#define IXGBE_ERR_SFP_NOT_SUPPORTED -19 +-#define IXGBE_ERR_SFP_NOT_PRESENT -20 +-#define IXGBE_ERR_SFP_NO_INIT_SEQ_PRESENT -21 +-#define IXGBE_ERR_NO_SAN_ADDR_PTR -22 +-#define IXGBE_ERR_FDIR_REINIT_FAILED -23 +-#define IXGBE_ERR_EEPROM_VERSION -24 +-#define IXGBE_ERR_NO_SPACE -25 +-#define IXGBE_ERR_OVERTEMP -26 +-#define IXGBE_ERR_FC_NOT_NEGOTIATED -27 +-#define IXGBE_ERR_FC_NOT_SUPPORTED -28 +-#define IXGBE_ERR_SFP_SETUP_NOT_COMPLETE -30 +-#define IXGBE_ERR_PBA_SECTION -31 +-#define IXGBE_ERR_INVALID_ARGUMENT -32 +-#define IXGBE_ERR_HOST_INTERFACE_COMMAND -33 +-#define IXGBE_ERR_FDIR_CMD_INCOMPLETE -38 +-#define IXGBE_ERR_FW_RESP_INVALID -39 +-#define IXGBE_ERR_TOKEN_RETRY -40 +-#define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF +- + #define IXGBE_FUSES0_GROUP(_i) (0x11158 + ((_i) * 4)) + #define IXGBE_FUSES0_300MHZ BIT(5) + #define IXGBE_FUSES0_REV_MASK (3u << 6) +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +index 4b93ba149ec5..fb4ced963c88 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +@@ -84,7 +84,7 @@ s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw) + status = hw->mac.ops.acquire_swfw_sync(hw, swfw_mask); + if (status) { + hw_dbg(hw, "semaphore failed with %d", status); +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + ctrl = IXGBE_CTRL_RST; +@@ -103,7 +103,7 @@ s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw) + } + + if (ctrl & IXGBE_CTRL_RST_MASK) { +- status = IXGBE_ERR_RESET_FAILED; ++ status = -EIO; + hw_dbg(hw, "Reset polling failed to complete.\n"); + } + msleep(100); +@@ -220,7 +220,7 @@ static s32 ixgbe_read_eerd_X540(struct ixgbe_hw *hw, u16 offset, u16 *data) + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = ixgbe_read_eerd_generic(hw, offset, data); + +@@ -243,7 +243,7 @@ static s32 ixgbe_read_eerd_buffer_X540(struct ixgbe_hw *hw, + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = ixgbe_read_eerd_buffer_generic(hw, offset, words, data); + +@@ -264,7 +264,7 @@ static s32 ixgbe_write_eewr_X540(struct ixgbe_hw *hw, u16 offset, u16 data) + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = ixgbe_write_eewr_generic(hw, offset, data); + +@@ -287,7 +287,7 @@ static s32 ixgbe_write_eewr_buffer_X540(struct ixgbe_hw *hw, + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = ixgbe_write_eewr_buffer_generic(hw, offset, words, data); + +@@ -324,7 +324,7 @@ static s32 ixgbe_calc_eeprom_checksum_X540(struct ixgbe_hw *hw) + for (i = 0; i < checksum_last_word; i++) { + if (ixgbe_read_eerd_generic(hw, i, &word)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + checksum += word; + } +@@ -349,7 +349,7 @@ static s32 ixgbe_calc_eeprom_checksum_X540(struct ixgbe_hw *hw) + + if (ixgbe_read_eerd_generic(hw, pointer, &length)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /* Skip pointer section if length is invalid. */ +@@ -360,7 +360,7 @@ static s32 ixgbe_calc_eeprom_checksum_X540(struct ixgbe_hw *hw) + for (j = pointer + 1; j <= pointer + length; j++) { + if (ixgbe_read_eerd_generic(hw, j, &word)) { + hw_dbg(hw, "EEPROM read failed\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + checksum += word; + } +@@ -397,7 +397,7 @@ static s32 ixgbe_validate_eeprom_checksum_X540(struct ixgbe_hw *hw, + } + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = hw->eeprom.ops.calc_checksum(hw); + if (status < 0) +@@ -418,7 +418,7 @@ static s32 ixgbe_validate_eeprom_checksum_X540(struct ixgbe_hw *hw, + */ + if (read_checksum != checksum) { + hw_dbg(hw, "Invalid EEPROM checksum"); +- status = IXGBE_ERR_EEPROM_CHECKSUM; ++ status = -EIO; + } + + /* If the user cares, return the calculated checksum */ +@@ -455,7 +455,7 @@ static s32 ixgbe_update_eeprom_checksum_X540(struct ixgbe_hw *hw) + } + + if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = hw->eeprom.ops.calc_checksum(hw); + if (status < 0) +@@ -490,7 +490,7 @@ static s32 ixgbe_update_flash_X540(struct ixgbe_hw *hw) + s32 status; + + status = ixgbe_poll_flash_update_done_X540(hw); +- if (status == IXGBE_ERR_EEPROM) { ++ if (status == -EIO) { + hw_dbg(hw, "Flash update time out\n"); + return status; + } +@@ -540,7 +540,7 @@ static s32 ixgbe_poll_flash_update_done_X540(struct ixgbe_hw *hw) + return 0; + udelay(5); + } +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /** +@@ -575,7 +575,7 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask) + * SW_FW_SYNC bits (not just NVM) + */ + if (ixgbe_get_swfw_sync_semaphore(hw)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + swfw_sync = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC(hw)); + if (!(swfw_sync & (fwmask | swmask | hwmask))) { +@@ -599,7 +599,7 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask) + * bits in the SW_FW_SYNC register. + */ + if (ixgbe_get_swfw_sync_semaphore(hw)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + swfw_sync = IXGBE_READ_REG(hw, IXGBE_SWFW_SYNC(hw)); + if (swfw_sync & (fwmask | hwmask)) { + swfw_sync |= swmask; +@@ -622,11 +622,11 @@ s32 ixgbe_acquire_swfw_sync_X540(struct ixgbe_hw *hw, u32 mask) + rmask |= IXGBE_GSSR_I2C_MASK; + ixgbe_release_swfw_sync_X540(hw, rmask); + ixgbe_release_swfw_sync_semaphore(hw); +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + ixgbe_release_swfw_sync_semaphore(hw); + +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + /** +@@ -680,7 +680,7 @@ static s32 ixgbe_get_swfw_sync_semaphore(struct ixgbe_hw *hw) + if (i == timeout) { + hw_dbg(hw, + "Software semaphore SMBI between device drivers not granted.\n"); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /* Now get the semaphore between SW/FW through the REGSMP bit */ +@@ -697,7 +697,7 @@ static s32 ixgbe_get_swfw_sync_semaphore(struct ixgbe_hw *hw) + */ + hw_dbg(hw, "REGSMP Software NVM semaphore not granted\n"); + ixgbe_release_swfw_sync_semaphore(hw); +- return IXGBE_ERR_EEPROM; ++ return -EIO; + } + + /** +@@ -768,7 +768,7 @@ s32 ixgbe_blink_led_start_X540(struct ixgbe_hw *hw, u32 index) + bool link_up; + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* Link should be up in order for the blink bit in the LED control + * register to work. Force link and speed in the MAC if link is down. +@@ -804,7 +804,7 @@ s32 ixgbe_blink_led_stop_X540(struct ixgbe_hw *hw, u32 index) + u32 ledctl_reg; + + if (index > 3) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* Restore the LED to its default value. */ + ledctl_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +index 74728c0a44a8..3906234da369 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +@@ -206,13 +206,13 @@ static s32 ixgbe_reset_cs4227(struct ixgbe_hw *hw) + } + if (retry == IXGBE_CS4227_RETRIES) { + hw_err(hw, "CS4227 reset did not complete\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + status = ixgbe_read_cs4227(hw, IXGBE_CS4227_EEPROM_STATUS, &value); + if (status || !(value & IXGBE_CS4227_EEPROM_LOAD_OK)) { + hw_err(hw, "CS4227 EEPROM did not load successfully\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + return 0; +@@ -350,13 +350,13 @@ static s32 ixgbe_identify_phy_x550em(struct ixgbe_hw *hw) + static s32 ixgbe_read_phy_reg_x550em(struct ixgbe_hw *hw, u32 reg_addr, + u32 device_type, u16 *phy_data) + { +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + } + + static s32 ixgbe_write_phy_reg_x550em(struct ixgbe_hw *hw, u32 reg_addr, + u32 device_type, u16 phy_data) + { +- return IXGBE_NOT_IMPLEMENTED; ++ return -EOPNOTSUPP; + } + + /** +@@ -463,7 +463,7 @@ s32 ixgbe_fw_phy_activity(struct ixgbe_hw *hw, u16 activity, + --retries; + } while (retries > 0); + +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EIO; + } + + static const struct { +@@ -511,7 +511,7 @@ static s32 ixgbe_get_phy_id_fw(struct ixgbe_hw *hw) + hw->phy.id |= phy_id_lo & IXGBE_PHY_REVISION_MASK; + hw->phy.revision = phy_id_lo & ~IXGBE_PHY_REVISION_MASK; + if (!hw->phy.id || hw->phy.id == IXGBE_PHY_REVISION_MASK) +- return IXGBE_ERR_PHY_ADDR_INVALID; ++ return -EFAULT; + + hw->phy.autoneg_advertised = hw->phy.speeds_supported; + hw->phy.eee_speeds_supported = IXGBE_LINK_SPEED_100_FULL | +@@ -568,7 +568,7 @@ static s32 ixgbe_setup_fw_link(struct ixgbe_hw *hw) + + if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { + hw_err(hw, "rx_pause not valid in strict IEEE mode\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + + switch (hw->fc.requested_mode) { +@@ -675,7 +675,7 @@ static s32 ixgbe_iosf_wait(struct ixgbe_hw *hw, u32 *ctrl) + *ctrl = command; + if (i == IXGBE_MDIO_COMMAND_TIMEOUT) { + hw_dbg(hw, "IOSF wait timed out\n"); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + return 0; +@@ -715,7 +715,7 @@ static s32 ixgbe_read_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr, + error = (command & IXGBE_SB_IOSF_CTRL_CMPL_ERR_MASK) >> + IXGBE_SB_IOSF_CTRL_CMPL_ERR_SHIFT; + hw_dbg(hw, "Failed to read, error %x\n", error); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + if (!ret) +@@ -750,9 +750,9 @@ static s32 ixgbe_get_phy_token(struct ixgbe_hw *hw) + if (token_cmd.hdr.cmd_or_resp.ret_status == FW_PHY_TOKEN_OK) + return 0; + if (token_cmd.hdr.cmd_or_resp.ret_status != FW_PHY_TOKEN_RETRY) +- return IXGBE_ERR_FW_RESP_INVALID; ++ return -EIO; + +- return IXGBE_ERR_TOKEN_RETRY; ++ return -EAGAIN; + } + + /** +@@ -778,7 +778,7 @@ static s32 ixgbe_put_phy_token(struct ixgbe_hw *hw) + return status; + if (token_cmd.hdr.cmd_or_resp.ret_status == FW_PHY_TOKEN_OK) + return 0; +- return IXGBE_ERR_FW_RESP_INVALID; ++ return -EIO; + } + + /** +@@ -942,7 +942,7 @@ static s32 ixgbe_checksum_ptr_x550(struct ixgbe_hw *hw, u16 ptr, + local_buffer = buf; + } else { + if (buffer_size < ptr) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + local_buffer = &buffer[ptr]; + } + +@@ -960,7 +960,7 @@ static s32 ixgbe_checksum_ptr_x550(struct ixgbe_hw *hw, u16 ptr, + } + + if (buffer && ((u32)start + (u32)length > buffer_size)) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + for (i = start; length; i++, length--) { + if (i == bufsz && !buffer) { +@@ -1012,7 +1012,7 @@ static s32 ixgbe_calc_checksum_X550(struct ixgbe_hw *hw, u16 *buffer, + local_buffer = eeprom_ptrs; + } else { + if (buffer_size < IXGBE_EEPROM_LAST_WORD) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + local_buffer = buffer; + } + +@@ -1148,7 +1148,7 @@ static s32 ixgbe_validate_eeprom_checksum_X550(struct ixgbe_hw *hw, + * calculated checksum + */ + if (read_checksum != checksum) { +- status = IXGBE_ERR_EEPROM_CHECKSUM; ++ status = -EIO; + hw_dbg(hw, "Invalid EEPROM checksum"); + } + +@@ -1203,7 +1203,7 @@ static s32 ixgbe_write_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset, u16 data) + hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM); + } else { + hw_dbg(hw, "write ee hostif failed to get semaphore"); +- status = IXGBE_ERR_SWFW_SYNC; ++ status = -EBUSY; + } + + return status; +@@ -1415,7 +1415,7 @@ static s32 ixgbe_write_iosf_sb_reg_x550(struct ixgbe_hw *hw, u32 reg_addr, + error = (command & IXGBE_SB_IOSF_CTRL_CMPL_ERR_MASK) >> + IXGBE_SB_IOSF_CTRL_CMPL_ERR_SHIFT; + hw_dbg(hw, "Failed to write, error %x\n", error); +- return IXGBE_ERR_PHY; ++ return -EIO; + } + + out: +@@ -1558,7 +1558,7 @@ static s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw, ixgbe_link_speed *speed) + + /* iXFI is only supported with X552 */ + if (mac->type != ixgbe_mac_X550EM_x) +- return IXGBE_ERR_LINK_SETUP; ++ return -EIO; + + /* Disable AN and force speed to 10G Serial. */ + status = ixgbe_read_iosf_sb_reg_x550(hw, +@@ -1580,7 +1580,7 @@ static s32 ixgbe_setup_ixfi_x550em(struct ixgbe_hw *hw, ixgbe_link_speed *speed) + break; + default: + /* Other link speeds are not supported by internal KR PHY. */ +- return IXGBE_ERR_LINK_SETUP; ++ return -EINVAL; + } + + status = ixgbe_write_iosf_sb_reg_x550(hw, +@@ -1611,7 +1611,7 @@ static s32 ixgbe_supported_sfp_modules_X550em(struct ixgbe_hw *hw, bool *linear) + { + switch (hw->phy.sfp_type) { + case ixgbe_sfp_type_not_present: +- return IXGBE_ERR_SFP_NOT_PRESENT; ++ return -ENOENT; + case ixgbe_sfp_type_da_cu_core0: + case ixgbe_sfp_type_da_cu_core1: + *linear = true; +@@ -1630,7 +1630,7 @@ static s32 ixgbe_supported_sfp_modules_X550em(struct ixgbe_hw *hw, bool *linear) + case ixgbe_sfp_type_1g_cu_core0: + case ixgbe_sfp_type_1g_cu_core1: + default: +- return IXGBE_ERR_SFP_NOT_SUPPORTED; ++ return -EOPNOTSUPP; + } + + return 0; +@@ -1660,7 +1660,7 @@ ixgbe_setup_mac_link_sfp_x550em(struct ixgbe_hw *hw, + * there is no reason to configure CS4227 and SFP not present error is + * not accepted in the setup MAC link flow. + */ +- if (status == IXGBE_ERR_SFP_NOT_PRESENT) ++ if (status == -ENOENT) + return 0; + + if (status) +@@ -1718,7 +1718,7 @@ static s32 ixgbe_setup_sfi_x550a(struct ixgbe_hw *hw, ixgbe_link_speed *speed) + break; + default: + /* Other link speeds are not supported by internal PHY. */ +- return IXGBE_ERR_LINK_SETUP; ++ return -EINVAL; + } + + status = mac->ops.write_iosf_sb_reg(hw, +@@ -1753,7 +1753,7 @@ ixgbe_setup_mac_link_sfp_n(struct ixgbe_hw *hw, ixgbe_link_speed speed, + /* If no SFP module present, then return success. Return success since + * SFP not present error is not excepted in the setup MAC link flow. + */ +- if (ret_val == IXGBE_ERR_SFP_NOT_PRESENT) ++ if (ret_val == -ENOENT) + return 0; + + if (ret_val) +@@ -1803,7 +1803,7 @@ ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw, ixgbe_link_speed speed, + /* If no SFP module present, then return success. Return success since + * SFP not present error is not excepted in the setup MAC link flow. + */ +- if (ret_val == IXGBE_ERR_SFP_NOT_PRESENT) ++ if (ret_val == -ENOENT) + return 0; + + if (ret_val) +@@ -1813,7 +1813,7 @@ ixgbe_setup_mac_link_sfp_x550a(struct ixgbe_hw *hw, ixgbe_link_speed speed, + ixgbe_setup_kr_speed_x550em(hw, speed); + + if (hw->phy.mdio.prtad == MDIO_PRTAD_NONE) +- return IXGBE_ERR_PHY_ADDR_INVALID; ++ return -EFAULT; + + /* Get external PHY SKU id */ + ret_val = hw->phy.ops.read_reg(hw, IXGBE_CS4227_EFUSE_PDF_SKU, +@@ -1912,7 +1912,7 @@ static s32 ixgbe_check_link_t_X550em(struct ixgbe_hw *hw, + u16 i, autoneg_status; + + if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper) +- return IXGBE_ERR_CONFIG; ++ return -EIO; + + status = ixgbe_check_mac_link_generic(hw, speed, link_up, + link_up_wait_to_complete); +@@ -2095,9 +2095,9 @@ static s32 ixgbe_setup_sgmii_fw(struct ixgbe_hw *hw, ixgbe_link_speed speed, + */ + static void ixgbe_fc_autoneg_sgmii_x550em_a(struct ixgbe_hw *hw) + { +- s32 status = IXGBE_ERR_FC_NOT_NEGOTIATED; + u32 info[FW_PHY_ACT_DATA_COUNT] = { 0 }; + ixgbe_link_speed speed; ++ s32 status = -EIO; + bool link_up; + + /* AN should have completed when the cable was plugged in. +@@ -2115,7 +2115,7 @@ static void ixgbe_fc_autoneg_sgmii_x550em_a(struct ixgbe_hw *hw) + /* Check if auto-negotiation has completed */ + status = ixgbe_fw_phy_activity(hw, FW_PHY_ACT_GET_LINK_INFO, &info); + if (status || !(info[0] & FW_PHY_ACT_GET_LINK_INFO_AN_COMPLETE)) { +- status = IXGBE_ERR_FC_NOT_NEGOTIATED; ++ status = -EIO; + goto out; + } + +@@ -2642,7 +2642,7 @@ static s32 ixgbe_setup_internal_phy_t_x550em(struct ixgbe_hw *hw) + u16 speed; + + if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_copper) +- return IXGBE_ERR_CONFIG; ++ return -EIO; + + if (!(hw->mac.type == ixgbe_mac_X550EM_x && + !(hw->phy.nw_mng_if_sel & IXGBE_NW_MNG_IF_SEL_INT_PHY_MODE))) { +@@ -2685,7 +2685,7 @@ static s32 ixgbe_setup_internal_phy_t_x550em(struct ixgbe_hw *hw) + break; + default: + /* Internal PHY does not support anything else */ +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + + return ixgbe_setup_ixfi_x550em(hw, &force_speed); +@@ -2717,7 +2717,7 @@ static s32 ixgbe_led_on_t_x550em(struct ixgbe_hw *hw, u32 led_idx) + u16 phy_data; + + if (led_idx >= IXGBE_X557_MAX_LED_INDEX) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* To turn on the LED, set mode to ON. */ + hw->phy.ops.read_reg(hw, IXGBE_X557_LED_PROVISIONING + led_idx, +@@ -2739,7 +2739,7 @@ static s32 ixgbe_led_off_t_x550em(struct ixgbe_hw *hw, u32 led_idx) + u16 phy_data; + + if (led_idx >= IXGBE_X557_MAX_LED_INDEX) +- return IXGBE_ERR_PARAM; ++ return -EINVAL; + + /* To turn on the LED, set mode to ON. */ + hw->phy.ops.read_reg(hw, IXGBE_X557_LED_PROVISIONING + led_idx, +@@ -2763,8 +2763,9 @@ static s32 ixgbe_led_off_t_x550em(struct ixgbe_hw *hw, u32 led_idx) + * + * Sends driver version number to firmware through the manageability + * block. On success return 0 +- * else returns IXGBE_ERR_SWFW_SYNC when encountering an error acquiring +- * semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails. ++ * else returns -EBUSY when encountering an error acquiring ++ * semaphore, -EIO when command fails or -ENIVAL when incorrect ++ * params passed. + **/ + static s32 ixgbe_set_fw_drv_ver_x550(struct ixgbe_hw *hw, u8 maj, u8 min, + u8 build, u8 sub, u16 len, +@@ -2775,7 +2776,7 @@ static s32 ixgbe_set_fw_drv_ver_x550(struct ixgbe_hw *hw, u8 maj, u8 min, + int i; + + if (!len || !driver_ver || (len > sizeof(fw_cmd.driver_string))) +- return IXGBE_ERR_INVALID_ARGUMENT; ++ return -EINVAL; + + fw_cmd.hdr.cmd = FW_CEM_CMD_DRIVER_INFO; + fw_cmd.hdr.buf_len = FW_CEM_CMD_DRIVER_INFO_LEN + len; +@@ -2800,7 +2801,7 @@ static s32 ixgbe_set_fw_drv_ver_x550(struct ixgbe_hw *hw, u8 maj, u8 min, + + if (fw_cmd.hdr.cmd_or_resp.ret_status != + FW_CEM_RESP_STATUS_SUCCESS) +- return IXGBE_ERR_HOST_INTERFACE_COMMAND; ++ return -EIO; + return 0; + } + +@@ -2857,7 +2858,7 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw) + /* Validate the requested mode */ + if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { + hw_err(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + + /* 10gig parts do not have a word in the EEPROM to determine the +@@ -2892,7 +2893,7 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw) + break; + default: + hw_err(hw, "Flow control param set incorrectly\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + switch (hw->device_id) { +@@ -2936,8 +2937,8 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw) + static void ixgbe_fc_autoneg_backplane_x550em_a(struct ixgbe_hw *hw) + { + u32 link_s1, lp_an_page_low, an_cntl_1; +- s32 status = IXGBE_ERR_FC_NOT_NEGOTIATED; + ixgbe_link_speed speed; ++ s32 status = -EIO; + bool link_up; + + /* AN should have completed when the cable was plugged in. +@@ -2963,7 +2964,7 @@ static void ixgbe_fc_autoneg_backplane_x550em_a(struct ixgbe_hw *hw) + + if (status || (link_s1 & IXGBE_KRM_LINK_S1_MAC_AN_COMPLETE) == 0) { + hw_dbg(hw, "Auto-Negotiation did not complete\n"); +- status = IXGBE_ERR_FC_NOT_NEGOTIATED; ++ status = -EIO; + goto out; + } + +@@ -3201,8 +3202,7 @@ static s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw) + + /* Identify the PHY or SFP module */ + ret_val = phy->ops.identify(hw); +- if (ret_val == IXGBE_ERR_SFP_NOT_SUPPORTED || +- ret_val == IXGBE_ERR_PHY_ADDR_INVALID) ++ if (ret_val == -EOPNOTSUPP || ret_val == -EFAULT) + return ret_val; + + /* Setup function pointers based on detected hardware */ +@@ -3410,8 +3410,7 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw) + + /* PHY ops must be identified and initialized prior to reset */ + status = hw->phy.ops.init(hw); +- if (status == IXGBE_ERR_SFP_NOT_SUPPORTED || +- status == IXGBE_ERR_PHY_ADDR_INVALID) ++ if (status == -EOPNOTSUPP || status == -EFAULT) + return status; + + /* start the external PHY */ +@@ -3427,7 +3426,7 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw) + hw->phy.sfp_setup_needed = false; + } + +- if (status == IXGBE_ERR_SFP_NOT_SUPPORTED) ++ if (status == -EOPNOTSUPP) + return status; + + /* Reset PHY */ +@@ -3451,7 +3450,7 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw) + status = hw->mac.ops.acquire_swfw_sync(hw, swfw_mask); + if (status) { + hw_dbg(hw, "semaphore failed with %d", status); +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + } + + ctrl |= IXGBE_READ_REG(hw, IXGBE_CTRL); +@@ -3469,7 +3468,7 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw) + } + + if (ctrl & IXGBE_CTRL_RST_MASK) { +- status = IXGBE_ERR_RESET_FAILED; ++ status = -EIO; + hw_dbg(hw, "Reset polling failed to complete.\n"); + } + +@@ -3565,7 +3564,7 @@ static s32 ixgbe_setup_fc_backplane_x550em_a(struct ixgbe_hw *hw) + /* Validate the requested mode */ + if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { + hw_err(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n"); +- return IXGBE_ERR_INVALID_LINK_SETTINGS; ++ return -EINVAL; + } + + if (hw->fc.requested_mode == ixgbe_fc_default) +@@ -3622,7 +3621,7 @@ static s32 ixgbe_setup_fc_backplane_x550em_a(struct ixgbe_hw *hw) + break; + default: + hw_err(hw, "Flow control param set incorrectly\n"); +- return IXGBE_ERR_CONFIG; ++ return -EIO; + } + + status = hw->mac.ops.write_iosf_sb_reg(hw, +@@ -3718,7 +3717,7 @@ static s32 ixgbe_acquire_swfw_sync_x550em_a(struct ixgbe_hw *hw, u32 mask) + return 0; + if (hmask) + ixgbe_release_swfw_sync_X540(hw, hmask); +- if (status != IXGBE_ERR_TOKEN_RETRY) ++ if (status != -EAGAIN) + return status; + msleep(FW_PHY_TOKEN_DELAY); + } +@@ -3762,7 +3761,7 @@ static s32 ixgbe_read_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr, + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = hw->phy.ops.read_reg_mdi(hw, reg_addr, device_type, phy_data); + +@@ -3788,7 +3787,7 @@ static s32 ixgbe_write_phy_reg_x550a(struct ixgbe_hw *hw, u32 reg_addr, + s32 status; + + if (hw->mac.ops.acquire_swfw_sync(hw, mask)) +- return IXGBE_ERR_SWFW_SYNC; ++ return -EBUSY; + + status = ixgbe_write_phy_reg_mdi(hw, reg_addr, device_type, phy_data); + hw->mac.ops.release_swfw_sync(hw, mask); +-- +2.43.0 + diff --git a/queue-5.4/ixgbe-remove-non-inclusive-language.patch b/queue-5.4/ixgbe-remove-non-inclusive-language.patch new file mode 100644 index 00000000000..60ab6a64e83 --- /dev/null +++ b/queue-5.4/ixgbe-remove-non-inclusive-language.patch @@ -0,0 +1,188 @@ +From fa694b4072503b00f3f51f9ecf61a8b4fa18d553 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 11 Jan 2022 11:27:23 +0100 +Subject: ixgbe: Remove non-inclusive language + +From: Piotr Skajewski + +[ Upstream commit 93b067f154b3edfd3d75a272fd9433bf787e2e1d ] + +Remove non-inclusive language from the driver. + +Additionally correct the duplication "from from" +reported by checkpatch after the changes above. + +Signed-off-by: Piotr Skajewski +Tested-by: Dave Switzer +Signed-off-by: Tony Nguyen +Stable-dep-of: bbc404d20d1b ("ixgbe: Fix an error handling path in ixgbe_read_iosf_sb_reg_x550()") +Signed-off-by: Sasha Levin +--- + .../net/ethernet/intel/ixgbe/ixgbe_common.c | 36 +++++++++---------- + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 4 +-- + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 10 +++--- + 3 files changed, 25 insertions(+), 25 deletions(-) + +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +index 39c5e6fdb72c..162adcc2bc9d 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +@@ -30,7 +30,7 @@ static s32 ixgbe_write_eeprom_buffer_bit_bang(struct ixgbe_hw *hw, u16 offset, + u16 words, u16 *data); + static s32 ixgbe_detect_eeprom_page_size_generic(struct ixgbe_hw *hw, + u16 offset); +-static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw); ++static s32 ixgbe_disable_pcie_primary(struct ixgbe_hw *hw); + + /* Base table for registers values that change by MAC */ + const u32 ixgbe_mvals_8259X[IXGBE_MVALS_IDX_LIMIT] = { +@@ -746,10 +746,10 @@ s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw) + usleep_range(1000, 2000); + + /* +- * Prevent the PCI-E bus from from hanging by disabling PCI-E master ++ * Prevent the PCI-E bus from hanging by disabling PCI-E primary + * access and verify no pending requests + */ +- return ixgbe_disable_pcie_master(hw); ++ return ixgbe_disable_pcie_primary(hw); + } + + /** +@@ -2506,15 +2506,15 @@ static u32 ixgbe_pcie_timeout_poll(struct ixgbe_hw *hw) + } + + /** +- * ixgbe_disable_pcie_master - Disable PCI-express master access ++ * ixgbe_disable_pcie_primary - Disable PCI-express primary access + * @hw: pointer to hardware structure + * +- * Disables PCI-Express master access and verifies there are no pending +- * requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable +- * bit hasn't caused the master requests to be disabled, else 0 +- * is returned signifying master requests disabled. ++ * Disables PCI-Express primary access and verifies there are no pending ++ * requests. IXGBE_ERR_PRIMARY_REQUESTS_PENDING is returned if primary disable ++ * bit hasn't caused the primary requests to be disabled, else 0 ++ * is returned signifying primary requests disabled. + **/ +-static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw) ++static s32 ixgbe_disable_pcie_primary(struct ixgbe_hw *hw) + { + u32 i, poll; + u16 value; +@@ -2523,23 +2523,23 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw) + IXGBE_WRITE_REG(hw, IXGBE_CTRL, IXGBE_CTRL_GIO_DIS); + + /* Poll for bit to read as set */ +- for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) { ++ for (i = 0; i < IXGBE_PCI_PRIMARY_DISABLE_TIMEOUT; i++) { + if (IXGBE_READ_REG(hw, IXGBE_CTRL) & IXGBE_CTRL_GIO_DIS) + break; + usleep_range(100, 120); + } +- if (i >= IXGBE_PCI_MASTER_DISABLE_TIMEOUT) { ++ if (i >= IXGBE_PCI_PRIMARY_DISABLE_TIMEOUT) { + hw_dbg(hw, "GIO disable did not set - requesting resets\n"); + goto gio_disable_fail; + } + +- /* Exit if master requests are blocked */ ++ /* Exit if primary requests are blocked */ + if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO) || + ixgbe_removed(hw->hw_addr)) + return 0; + +- /* Poll for master request bit to clear */ +- for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) { ++ /* Poll for primary request bit to clear */ ++ for (i = 0; i < IXGBE_PCI_PRIMARY_DISABLE_TIMEOUT; i++) { + udelay(100); + if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO)) + return 0; +@@ -2547,13 +2547,13 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw) + + /* + * Two consecutive resets are required via CTRL.RST per datasheet +- * 5.2.5.3.2 Master Disable. We set a flag to inform the reset routine +- * of this need. The first reset prevents new master requests from ++ * 5.2.5.3.2 Primary Disable. We set a flag to inform the reset routine ++ * of this need. The first reset prevents new primary requests from + * being issued by our device. We then must wait 1usec or more for any + * remaining completions from the PCIe bus to trickle in, and then reset + * again to clear out any effects they may have had on our device. + */ +- hw_dbg(hw, "GIO Master Disable bit didn't clear - requesting resets\n"); ++ hw_dbg(hw, "GIO Primary Disable bit didn't clear - requesting resets\n"); + gio_disable_fail: + hw->mac.flags |= IXGBE_FLAGS_DOUBLE_RESET_REQUIRED; + +@@ -2575,7 +2575,7 @@ static s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw) + } + + hw_dbg(hw, "PCIe transaction pending bit also did not clear.\n"); +- return IXGBE_ERR_MASTER_REQUESTS_PENDING; ++ return IXGBE_ERR_PRIMARY_REQUESTS_PENDING; + } + + /** +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +index 567bb7792f8f..b4f4264ad990 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +@@ -5941,8 +5941,8 @@ void ixgbe_reset(struct ixgbe_adapter *adapter) + case IXGBE_ERR_SFP_NOT_PRESENT: + case IXGBE_ERR_SFP_NOT_SUPPORTED: + break; +- case IXGBE_ERR_MASTER_REQUESTS_PENDING: +- e_dev_err("master disable timed out\n"); ++ case IXGBE_ERR_PRIMARY_REQUESTS_PENDING: ++ e_dev_err("primary disable timed out\n"); + break; + case IXGBE_ERR_EEPROM_VERSION: + /* We are running on a pre-production device, log a warning */ +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +index 2be1c4c72435..039f7c73a3b5 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +@@ -1247,7 +1247,7 @@ struct ixgbe_nvm_version { + #define IXGBE_PSRTYPE_RQPL_SHIFT 29 + + /* CTRL Bit Masks */ +-#define IXGBE_CTRL_GIO_DIS 0x00000004 /* Global IO Master Disable bit */ ++#define IXGBE_CTRL_GIO_DIS 0x00000004 /* Global IO Primary Disable bit */ + #define IXGBE_CTRL_LNK_RST 0x00000008 /* Link Reset. Resets everything. */ + #define IXGBE_CTRL_RST 0x04000000 /* Reset (SW) */ + #define IXGBE_CTRL_RST_MASK (IXGBE_CTRL_LNK_RST | IXGBE_CTRL_RST) +@@ -1810,7 +1810,7 @@ enum { + /* STATUS Bit Masks */ + #define IXGBE_STATUS_LAN_ID 0x0000000C /* LAN ID */ + #define IXGBE_STATUS_LAN_ID_SHIFT 2 /* LAN ID Shift*/ +-#define IXGBE_STATUS_GIO 0x00080000 /* GIO Master Enable Status */ ++#define IXGBE_STATUS_GIO 0x00080000 /* GIO Primary Enable Status */ + + #define IXGBE_STATUS_LAN_ID_0 0x00000000 /* LAN ID 0 */ + #define IXGBE_STATUS_LAN_ID_1 0x00000004 /* LAN ID 1 */ +@@ -2192,8 +2192,8 @@ enum { + #define IXGBE_PCIDEVCTRL2_4_8s 0xd + #define IXGBE_PCIDEVCTRL2_17_34s 0xe + +-/* Number of 100 microseconds we wait for PCI Express master disable */ +-#define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800 ++/* Number of 100 microseconds we wait for PCI Express primary disable */ ++#define IXGBE_PCI_PRIMARY_DISABLE_TIMEOUT 800 + + /* RAH */ + #define IXGBE_RAH_VIND_MASK 0x003C0000 +@@ -3674,7 +3674,7 @@ struct ixgbe_info { + #define IXGBE_ERR_ADAPTER_STOPPED -9 + #define IXGBE_ERR_INVALID_MAC_ADDR -10 + #define IXGBE_ERR_DEVICE_NOT_SUPPORTED -11 +-#define IXGBE_ERR_MASTER_REQUESTS_PENDING -12 ++#define IXGBE_ERR_PRIMARY_REQUESTS_PENDING -12 + #define IXGBE_ERR_INVALID_LINK_SETTINGS -13 + #define IXGBE_ERR_AUTONEG_NOT_COMPLETE -14 + #define IXGBE_ERR_RESET_FAILED -15 +-- +2.43.0 + diff --git a/queue-5.4/llc-call-sock_orphan-at-release-time.patch b/queue-5.4/llc-call-sock_orphan-at-release-time.patch new file mode 100644 index 00000000000..0cda4ff4cf3 --- /dev/null +++ b/queue-5.4/llc-call-sock_orphan-at-release-time.patch @@ -0,0 +1,205 @@ +From f2d5667b1181639140db76e56a8d7cd5f52606aa Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Jan 2024 16:55:32 +0000 +Subject: llc: call sock_orphan() at release time + +From: Eric Dumazet + +[ Upstream commit aa2b2eb3934859904c287bf5434647ba72e14c1c ] + +syzbot reported an interesting trace [1] caused by a stale sk->sk_wq +pointer in a closed llc socket. + +In commit ff7b11aa481f ("net: socket: set sock->sk to NULL after +calling proto_ops::release()") Eric Biggers hinted that some protocols +are missing a sock_orphan(), we need to perform a full audit. + +In net-next, I plan to clear sock->sk from sock_orphan() and +amend Eric patch to add a warning. + +[1] + BUG: KASAN: slab-use-after-free in list_empty include/linux/list.h:373 [inline] + BUG: KASAN: slab-use-after-free in waitqueue_active include/linux/wait.h:127 [inline] + BUG: KASAN: slab-use-after-free in sock_def_write_space_wfree net/core/sock.c:3384 [inline] + BUG: KASAN: slab-use-after-free in sock_wfree+0x9a8/0x9d0 net/core/sock.c:2468 +Read of size 8 at addr ffff88802f4fc880 by task ksoftirqd/1/27 + +CPU: 1 PID: 27 Comm: ksoftirqd/1 Not tainted 6.8.0-rc1-syzkaller-00049-g6098d87eaf31 #0 +Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 +Call Trace: + + __dump_stack lib/dump_stack.c:88 [inline] + dump_stack_lvl+0xd9/0x1b0 lib/dump_stack.c:106 + print_address_description mm/kasan/report.c:377 [inline] + print_report+0xc4/0x620 mm/kasan/report.c:488 + kasan_report+0xda/0x110 mm/kasan/report.c:601 + list_empty include/linux/list.h:373 [inline] + waitqueue_active include/linux/wait.h:127 [inline] + sock_def_write_space_wfree net/core/sock.c:3384 [inline] + sock_wfree+0x9a8/0x9d0 net/core/sock.c:2468 + skb_release_head_state+0xa3/0x2b0 net/core/skbuff.c:1080 + skb_release_all net/core/skbuff.c:1092 [inline] + napi_consume_skb+0x119/0x2b0 net/core/skbuff.c:1404 + e1000_unmap_and_free_tx_resource+0x144/0x200 drivers/net/ethernet/intel/e1000/e1000_main.c:1970 + e1000_clean_tx_irq drivers/net/ethernet/intel/e1000/e1000_main.c:3860 [inline] + e1000_clean+0x4a1/0x26e0 drivers/net/ethernet/intel/e1000/e1000_main.c:3801 + __napi_poll.constprop.0+0xb4/0x540 net/core/dev.c:6576 + napi_poll net/core/dev.c:6645 [inline] + net_rx_action+0x956/0xe90 net/core/dev.c:6778 + __do_softirq+0x21a/0x8de kernel/softirq.c:553 + run_ksoftirqd kernel/softirq.c:921 [inline] + run_ksoftirqd+0x31/0x60 kernel/softirq.c:913 + smpboot_thread_fn+0x660/0xa10 kernel/smpboot.c:164 + kthread+0x2c6/0x3a0 kernel/kthread.c:388 + ret_from_fork+0x45/0x80 arch/x86/kernel/process.c:147 + ret_from_fork_asm+0x11/0x20 arch/x86/entry/entry_64.S:242 + + +Allocated by task 5167: + kasan_save_stack+0x33/0x50 mm/kasan/common.c:47 + kasan_save_track+0x14/0x30 mm/kasan/common.c:68 + unpoison_slab_object mm/kasan/common.c:314 [inline] + __kasan_slab_alloc+0x81/0x90 mm/kasan/common.c:340 + kasan_slab_alloc include/linux/kasan.h:201 [inline] + slab_post_alloc_hook mm/slub.c:3813 [inline] + slab_alloc_node mm/slub.c:3860 [inline] + kmem_cache_alloc_lru+0x142/0x6f0 mm/slub.c:3879 + alloc_inode_sb include/linux/fs.h:3019 [inline] + sock_alloc_inode+0x25/0x1c0 net/socket.c:308 + alloc_inode+0x5d/0x220 fs/inode.c:260 + new_inode_pseudo+0x16/0x80 fs/inode.c:1005 + sock_alloc+0x40/0x270 net/socket.c:634 + __sock_create+0xbc/0x800 net/socket.c:1535 + sock_create net/socket.c:1622 [inline] + __sys_socket_create net/socket.c:1659 [inline] + __sys_socket+0x14c/0x260 net/socket.c:1706 + __do_sys_socket net/socket.c:1720 [inline] + __se_sys_socket net/socket.c:1718 [inline] + __x64_sys_socket+0x72/0xb0 net/socket.c:1718 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xd3/0x250 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b + +Freed by task 0: + kasan_save_stack+0x33/0x50 mm/kasan/common.c:47 + kasan_save_track+0x14/0x30 mm/kasan/common.c:68 + kasan_save_free_info+0x3f/0x60 mm/kasan/generic.c:640 + poison_slab_object mm/kasan/common.c:241 [inline] + __kasan_slab_free+0x121/0x1b0 mm/kasan/common.c:257 + kasan_slab_free include/linux/kasan.h:184 [inline] + slab_free_hook mm/slub.c:2121 [inline] + slab_free mm/slub.c:4299 [inline] + kmem_cache_free+0x129/0x350 mm/slub.c:4363 + i_callback+0x43/0x70 fs/inode.c:249 + rcu_do_batch kernel/rcu/tree.c:2158 [inline] + rcu_core+0x819/0x1680 kernel/rcu/tree.c:2433 + __do_softirq+0x21a/0x8de kernel/softirq.c:553 + +Last potentially related work creation: + kasan_save_stack+0x33/0x50 mm/kasan/common.c:47 + __kasan_record_aux_stack+0xba/0x100 mm/kasan/generic.c:586 + __call_rcu_common.constprop.0+0x9a/0x7b0 kernel/rcu/tree.c:2683 + destroy_inode+0x129/0x1b0 fs/inode.c:315 + iput_final fs/inode.c:1739 [inline] + iput.part.0+0x560/0x7b0 fs/inode.c:1765 + iput+0x5c/0x80 fs/inode.c:1755 + dentry_unlink_inode+0x292/0x430 fs/dcache.c:400 + __dentry_kill+0x1ca/0x5f0 fs/dcache.c:603 + dput.part.0+0x4ac/0x9a0 fs/dcache.c:845 + dput+0x1f/0x30 fs/dcache.c:835 + __fput+0x3b9/0xb70 fs/file_table.c:384 + task_work_run+0x14d/0x240 kernel/task_work.c:180 + exit_task_work include/linux/task_work.h:38 [inline] + do_exit+0xa8a/0x2ad0 kernel/exit.c:871 + do_group_exit+0xd4/0x2a0 kernel/exit.c:1020 + __do_sys_exit_group kernel/exit.c:1031 [inline] + __se_sys_exit_group kernel/exit.c:1029 [inline] + __x64_sys_exit_group+0x3e/0x50 kernel/exit.c:1029 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xd3/0x250 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b + +The buggy address belongs to the object at ffff88802f4fc800 + which belongs to the cache sock_inode_cache of size 1408 +The buggy address is located 128 bytes inside of + freed 1408-byte region [ffff88802f4fc800, ffff88802f4fcd80) + +The buggy address belongs to the physical page: +page:ffffea0000bd3e00 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2f4f8 +head:ffffea0000bd3e00 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0 +anon flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff) +page_type: 0xffffffff() +raw: 00fff00000000840 ffff888013b06b40 0000000000000000 0000000000000001 +raw: 0000000000000000 0000000080150015 00000001ffffffff 0000000000000000 +page dumped because: kasan: bad access detected +page_owner tracks the page as allocated +page last allocated via order 3, migratetype Reclaimable, gfp_mask 0xd20d0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_RECLAIMABLE), pid 4956, tgid 4956 (sshd), ts 31423924727, free_ts 0 + set_page_owner include/linux/page_owner.h:31 [inline] + post_alloc_hook+0x2d0/0x350 mm/page_alloc.c:1533 + prep_new_page mm/page_alloc.c:1540 [inline] + get_page_from_freelist+0xa28/0x3780 mm/page_alloc.c:3311 + __alloc_pages+0x22f/0x2440 mm/page_alloc.c:4567 + __alloc_pages_node include/linux/gfp.h:238 [inline] + alloc_pages_node include/linux/gfp.h:261 [inline] + alloc_slab_page mm/slub.c:2190 [inline] + allocate_slab mm/slub.c:2354 [inline] + new_slab+0xcc/0x3a0 mm/slub.c:2407 + ___slab_alloc+0x4af/0x19a0 mm/slub.c:3540 + __slab_alloc.constprop.0+0x56/0xa0 mm/slub.c:3625 + __slab_alloc_node mm/slub.c:3678 [inline] + slab_alloc_node mm/slub.c:3850 [inline] + kmem_cache_alloc_lru+0x379/0x6f0 mm/slub.c:3879 + alloc_inode_sb include/linux/fs.h:3019 [inline] + sock_alloc_inode+0x25/0x1c0 net/socket.c:308 + alloc_inode+0x5d/0x220 fs/inode.c:260 + new_inode_pseudo+0x16/0x80 fs/inode.c:1005 + sock_alloc+0x40/0x270 net/socket.c:634 + __sock_create+0xbc/0x800 net/socket.c:1535 + sock_create net/socket.c:1622 [inline] + __sys_socket_create net/socket.c:1659 [inline] + __sys_socket+0x14c/0x260 net/socket.c:1706 + __do_sys_socket net/socket.c:1720 [inline] + __se_sys_socket net/socket.c:1718 [inline] + __x64_sys_socket+0x72/0xb0 net/socket.c:1718 + do_syscall_x64 arch/x86/entry/common.c:52 [inline] + do_syscall_64+0xd3/0x250 arch/x86/entry/common.c:83 + entry_SYSCALL_64_after_hwframe+0x63/0x6b +page_owner free stack trace missing + +Memory state around the buggy address: + ffff88802f4fc780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc + ffff88802f4fc800: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb +>ffff88802f4fc880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + ^ + ffff88802f4fc900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + ffff88802f4fc980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb + +Fixes: 43815482370c ("net: sock_def_readable() and friends RCU conversion") +Reported-and-tested-by: syzbot+32b89eaa102b372ff76d@syzkaller.appspotmail.com +Signed-off-by: Eric Dumazet +Cc: Eric Biggers +Cc: Kuniyuki Iwashima +Reviewed-by: Kuniyuki Iwashima +Link: https://lore.kernel.org/r/20240126165532.3396702-1-edumazet@google.com +Signed-off-by: Paolo Abeni +Signed-off-by: Sasha Levin +--- + net/llc/af_llc.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c +index 4ef5896abd06..d57bfce94d60 100644 +--- a/net/llc/af_llc.c ++++ b/net/llc/af_llc.c +@@ -227,6 +227,8 @@ static int llc_ui_release(struct socket *sock) + if (llc->dev) + dev_put(llc->dev); + sock_put(sk); ++ sock_orphan(sk); ++ sock->sk = NULL; + llc_sk_free(sk); + out: + return 0; +-- +2.43.0 + diff --git a/queue-5.4/net-ipv4-fix-a-memleak-in-ip_setup_cork.patch b/queue-5.4/net-ipv4-fix-a-memleak-in-ip_setup_cork.patch new file mode 100644 index 00000000000..7dbc3ea81ad --- /dev/null +++ b/queue-5.4/net-ipv4-fix-a-memleak-in-ip_setup_cork.patch @@ -0,0 +1,55 @@ +From ec7b08961f082ec1f0753b8e2002b744b9d696e5 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 29 Jan 2024 17:10:17 +0800 +Subject: net: ipv4: fix a memleak in ip_setup_cork + +From: Zhipeng Lu + +[ Upstream commit 5dee6d6923458e26966717f2a3eae7d09fc10bf6 ] + +When inetdev_valid_mtu fails, cork->opt should be freed if it is +allocated in ip_setup_cork. Otherwise there could be a memleak. + +Fixes: 501a90c94510 ("inet: protect against too small mtu values.") +Signed-off-by: Zhipeng Lu +Reviewed-by: Eric Dumazet +Link: https://lore.kernel.org/r/20240129091017.2938835-1-alexious@zju.edu.cn +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + net/ipv4/ip_output.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c +index 0f70c2dbbe5b..d57d484a929f 100644 +--- a/net/ipv4/ip_output.c ++++ b/net/ipv4/ip_output.c +@@ -1255,6 +1255,12 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork, + if (unlikely(!rt)) + return -EFAULT; + ++ cork->fragsize = ip_sk_use_pmtu(sk) ? ++ dst_mtu(&rt->dst) : READ_ONCE(rt->dst.dev->mtu); ++ ++ if (!inetdev_valid_mtu(cork->fragsize)) ++ return -ENETUNREACH; ++ + /* + * setup for corking. + */ +@@ -1271,12 +1277,6 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork, + cork->addr = ipc->addr; + } + +- cork->fragsize = ip_sk_use_pmtu(sk) ? +- dst_mtu(&rt->dst) : READ_ONCE(rt->dst.dev->mtu); +- +- if (!inetdev_valid_mtu(cork->fragsize)) +- return -ENETUNREACH; +- + cork->gso_size = ipc->gso_size; + + cork->dst = &rt->dst; +-- +2.43.0 + diff --git a/queue-5.4/net-remove-unneeded-break.patch b/queue-5.4/net-remove-unneeded-break.patch new file mode 100644 index 00000000000..fcc90905ec7 --- /dev/null +++ b/queue-5.4/net-remove-unneeded-break.patch @@ -0,0 +1,84 @@ +From 3450be08feee6d09fd46bac011ecb398c6984fb8 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 19 Oct 2020 10:26:07 -0700 +Subject: net: remove unneeded break + +From: Tom Rix + +[ Upstream commit 7ebb9db011088f9bd357791f49cb7012e66f29e2 ] + +A break is not needed if it is preceded by a return or goto + +Signed-off-by: Tom Rix +Link: https://lore.kernel.org/r/20201019172607.31622-1-trix@redhat.com +Signed-off-by: Jakub Kicinski +Stable-dep-of: bbc404d20d1b ("ixgbe: Fix an error handling path in ixgbe_read_iosf_sb_reg_x550()") +Signed-off-by: Sasha Levin +--- + drivers/net/ethernet/aquantia/atlantic/aq_nic.c | 1 - + drivers/net/ethernet/cisco/enic/enic_ethtool.c | 1 - + drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c | 1 - + drivers/net/wan/lmc/lmc_proto.c | 4 ---- + 4 files changed, 7 deletions(-) + +diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +index 145334fb18f4..4eeafd529385 100644 +--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.c ++++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.c +@@ -903,7 +903,6 @@ int aq_nic_set_link_ksettings(struct aq_nic_s *self, + default: + err = -1; + goto err_exit; +- break; + } + if (!(self->aq_nic_cfg.aq_hw_caps->link_speed_msk & rate)) { + err = -1; +diff --git a/drivers/net/ethernet/cisco/enic/enic_ethtool.c b/drivers/net/ethernet/cisco/enic/enic_ethtool.c +index ebd5c2cf1efe..e799c686594e 100644 +--- a/drivers/net/ethernet/cisco/enic/enic_ethtool.c ++++ b/drivers/net/ethernet/cisco/enic/enic_ethtool.c +@@ -454,7 +454,6 @@ static int enic_grxclsrule(struct enic *enic, struct ethtool_rxnfc *cmd) + break; + default: + return -EINVAL; +- break; + } + + fsp->h_u.tcp_ip4_spec.ip4src = flow_get_u32_src(&n->keys); +diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +index de563cfd294d..4b93ba149ec5 100644 +--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c ++++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c +@@ -350,7 +350,6 @@ static s32 ixgbe_calc_eeprom_checksum_X540(struct ixgbe_hw *hw) + if (ixgbe_read_eerd_generic(hw, pointer, &length)) { + hw_dbg(hw, "EEPROM read failed\n"); + return IXGBE_ERR_EEPROM; +- break; + } + + /* Skip pointer section if length is invalid. */ +diff --git a/drivers/net/wan/lmc/lmc_proto.c b/drivers/net/wan/lmc/lmc_proto.c +index a58301dd0c1f..1c63ae9a3ba8 100644 +--- a/drivers/net/wan/lmc/lmc_proto.c ++++ b/drivers/net/wan/lmc/lmc_proto.c +@@ -101,17 +101,13 @@ __be16 lmc_proto_type(lmc_softc_t *sc, struct sk_buff *skb) /*FOLD00*/ + switch(sc->if_type){ + case LMC_PPP: + return hdlc_type_trans(skb, sc->lmc_device); +- break; + case LMC_NET: + return htons(ETH_P_802_2); +- break; + case LMC_RAW: /* Packet type for skbuff kind of useless */ + return htons(ETH_P_802_2); +- break; + default: + printk(KERN_WARNING "%s: No protocol set for this interface, assuming 802.2 (which is wrong!!)\n", sc->name); + return htons(ETH_P_802_2); +- break; + } + lmc_trace(sc->lmc_device, "lmc_proto_tye out"); + +-- +2.43.0 + diff --git a/queue-5.4/net-sysfs-fix-sys-class-net-iface-path.patch b/queue-5.4/net-sysfs-fix-sys-class-net-iface-path.patch new file mode 100644 index 00000000000..be4a14b97ee --- /dev/null +++ b/queue-5.4/net-sysfs-fix-sys-class-net-iface-path.patch @@ -0,0 +1,127 @@ +From 9626ab0159ee632178ed1529e84b0cec154f874b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 31 Jan 2024 02:21:49 -0800 +Subject: net: sysfs: Fix /sys/class/net/ path + +From: Breno Leitao + +[ Upstream commit ae3f4b44641dfff969604735a0dcbf931f383285 ] + +The documentation is pointing to the wrong path for the interface. +Documentation is pointing to /sys/class/, instead of +/sys/class/net/. + +Fix it by adding the `net/` directory before the interface. + +Fixes: 1a02ef76acfa ("net: sysfs: add documentation entries for /sys/class//queues") +Signed-off-by: Breno Leitao +Link: https://lore.kernel.org/r/20240131102150.728960-2-leitao@debian.org +Signed-off-by: Jakub Kicinski +Signed-off-by: Sasha Levin +--- + .../ABI/testing/sysfs-class-net-queues | 22 +++++++++---------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/Documentation/ABI/testing/sysfs-class-net-queues b/Documentation/ABI/testing/sysfs-class-net-queues +index 978b76358661..40d5aab8452d 100644 +--- a/Documentation/ABI/testing/sysfs-class-net-queues ++++ b/Documentation/ABI/testing/sysfs-class-net-queues +@@ -1,4 +1,4 @@ +-What: /sys/class//queues/rx-/rps_cpus ++What: /sys/class/net//queues/rx-/rps_cpus + Date: March 2010 + KernelVersion: 2.6.35 + Contact: netdev@vger.kernel.org +@@ -8,7 +8,7 @@ Description: + network device queue. Possible values depend on the number + of available CPU(s) in the system. + +-What: /sys/class//queues/rx-/rps_flow_cnt ++What: /sys/class/net//queues/rx-/rps_flow_cnt + Date: April 2010 + KernelVersion: 2.6.35 + Contact: netdev@vger.kernel.org +@@ -16,7 +16,7 @@ Description: + Number of Receive Packet Steering flows being currently + processed by this particular network device receive queue. + +-What: /sys/class//queues/tx-/tx_timeout ++What: /sys/class/net//queues/tx-/tx_timeout + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +@@ -24,7 +24,7 @@ Description: + Indicates the number of transmit timeout events seen by this + network interface transmit queue. + +-What: /sys/class//queues/tx-/tx_maxrate ++What: /sys/class/net//queues/tx-/tx_maxrate + Date: March 2015 + KernelVersion: 4.1 + Contact: netdev@vger.kernel.org +@@ -32,7 +32,7 @@ Description: + A Mbps max-rate set for the queue, a value of zero means disabled, + default is disabled. + +-What: /sys/class//queues/tx-/xps_cpus ++What: /sys/class/net//queues/tx-/xps_cpus + Date: November 2010 + KernelVersion: 2.6.38 + Contact: netdev@vger.kernel.org +@@ -42,7 +42,7 @@ Description: + network device transmit queue. Possible vaules depend on the + number of available CPU(s) in the system. + +-What: /sys/class//queues/tx-/xps_rxqs ++What: /sys/class/net//queues/tx-/xps_rxqs + Date: June 2018 + KernelVersion: 4.18.0 + Contact: netdev@vger.kernel.org +@@ -53,7 +53,7 @@ Description: + number of available receive queue(s) in the network device. + Default is disabled. + +-What: /sys/class//queues/tx-/byte_queue_limits/hold_time ++What: /sys/class/net//queues/tx-/byte_queue_limits/hold_time + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +@@ -62,7 +62,7 @@ Description: + of this particular network device transmit queue. + Default value is 1000. + +-What: /sys/class//queues/tx-/byte_queue_limits/inflight ++What: /sys/class/net//queues/tx-/byte_queue_limits/inflight + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +@@ -70,7 +70,7 @@ Description: + Indicates the number of bytes (objects) in flight on this + network device transmit queue. + +-What: /sys/class//queues/tx-/byte_queue_limits/limit ++What: /sys/class/net//queues/tx-/byte_queue_limits/limit + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +@@ -79,7 +79,7 @@ Description: + on this network device transmit queue. This value is clamped + to be within the bounds defined by limit_max and limit_min. + +-What: /sys/class//queues/tx-/byte_queue_limits/limit_max ++What: /sys/class/net//queues/tx-/byte_queue_limits/limit_max + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +@@ -88,7 +88,7 @@ Description: + queued on this network device transmit queue. See + include/linux/dynamic_queue_limits.h for the default value. + +-What: /sys/class//queues/tx-/byte_queue_limits/limit_min ++What: /sys/class/net//queues/tx-/byte_queue_limits/limit_min + Date: November 2011 + KernelVersion: 3.3 + Contact: netdev@vger.kernel.org +-- +2.43.0 + diff --git a/queue-5.4/netfilter-nf_log-replace-bug_on-by-warn_on_once-when.patch b/queue-5.4/netfilter-nf_log-replace-bug_on-by-warn_on_once-when.patch new file mode 100644 index 00000000000..53e775f5d19 --- /dev/null +++ b/queue-5.4/netfilter-nf_log-replace-bug_on-by-warn_on_once-when.patch @@ -0,0 +1,46 @@ +From 7f143d8c5e7bc5f5ef34e1af334258fd102d4285 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 29 Jan 2024 11:09:43 +0100 +Subject: netfilter: nf_log: replace BUG_ON by WARN_ON_ONCE when putting logger + +From: Pablo Neira Ayuso + +[ Upstream commit 259eb32971e9eb24d1777a28d82730659f50fdcb ] + +Module reference is bumped for each user, this should not ever happen. + +But BUG_ON check should use rcu_access_pointer() instead. + +If this ever happens, do WARN_ON_ONCE() instead of BUG_ON() and +consolidate pointer check under the rcu read side lock section. + +Fixes: fab4085f4e24 ("netfilter: log: nf_log_packet() as real unified interface") +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + net/netfilter/nf_log.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c +index bb25d4c794c7..e25dbeb220b4 100644 +--- a/net/netfilter/nf_log.c ++++ b/net/netfilter/nf_log.c +@@ -203,11 +203,12 @@ void nf_logger_put(int pf, enum nf_log_type type) + return; + } + +- BUG_ON(loggers[pf][type] == NULL); +- + rcu_read_lock(); + logger = rcu_dereference(loggers[pf][type]); +- module_put(logger->me); ++ if (!logger) ++ WARN_ON_ONCE(1); ++ else ++ module_put(logger->me); + rcu_read_unlock(); + } + EXPORT_SYMBOL_GPL(nf_logger_put); +-- +2.43.0 + diff --git a/queue-5.4/netfilter-nft_ct-sanitize-layer-3-and-4-protocol-num.patch b/queue-5.4/netfilter-nft_ct-sanitize-layer-3-and-4-protocol-num.patch new file mode 100644 index 00000000000..afed5c457f0 --- /dev/null +++ b/queue-5.4/netfilter-nft_ct-sanitize-layer-3-and-4-protocol-num.patch @@ -0,0 +1,60 @@ +From fc9ce90a4b3fcd02f75daee676e60ee74d4701cc Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 29 Jan 2024 13:12:33 +0100 +Subject: netfilter: nft_ct: sanitize layer 3 and 4 protocol number in custom + expectations + +From: Pablo Neira Ayuso + +[ Upstream commit 8059918a1377f2f1fff06af4f5a4ed3d5acd6bc4 ] + +- Disallow families other than NFPROTO_{IPV4,IPV6,INET}. +- Disallow layer 4 protocol with no ports, since destination port is a + mandatory attribute for this object. + +Fixes: 857b46027d6f ("netfilter: nft_ct: add ct expectations support") +Signed-off-by: Pablo Neira Ayuso +Signed-off-by: Sasha Levin +--- + net/netfilter/nft_ct.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/net/netfilter/nft_ct.c b/net/netfilter/nft_ct.c +index 7e269f7378cc..9507f1e56107 100644 +--- a/net/netfilter/nft_ct.c ++++ b/net/netfilter/nft_ct.c +@@ -1174,7 +1174,31 @@ static int nft_ct_expect_obj_init(const struct nft_ctx *ctx, + if (tb[NFTA_CT_EXPECT_L3PROTO]) + priv->l3num = ntohs(nla_get_be16(tb[NFTA_CT_EXPECT_L3PROTO])); + ++ switch (priv->l3num) { ++ case NFPROTO_IPV4: ++ case NFPROTO_IPV6: ++ if (priv->l3num != ctx->family) ++ return -EINVAL; ++ ++ fallthrough; ++ case NFPROTO_INET: ++ break; ++ default: ++ return -EOPNOTSUPP; ++ } ++ + priv->l4proto = nla_get_u8(tb[NFTA_CT_EXPECT_L4PROTO]); ++ switch (priv->l4proto) { ++ case IPPROTO_TCP: ++ case IPPROTO_UDP: ++ case IPPROTO_UDPLITE: ++ case IPPROTO_DCCP: ++ case IPPROTO_SCTP: ++ break; ++ default: ++ return -EOPNOTSUPP; ++ } ++ + priv->dport = nla_get_be16(tb[NFTA_CT_EXPECT_DPORT]); + priv->timeout = nla_get_u32(tb[NFTA_CT_EXPECT_TIMEOUT]); + priv->size = nla_get_u8(tb[NFTA_CT_EXPECT_SIZE]); +-- +2.43.0 + diff --git a/queue-5.4/scsi-isci-fix-an-error-code-problem-in-isci_io_reque.patch b/queue-5.4/scsi-isci-fix-an-error-code-problem-in-isci_io_reque.patch new file mode 100644 index 00000000000..2179b52e2b9 --- /dev/null +++ b/queue-5.4/scsi-isci-fix-an-error-code-problem-in-isci_io_reque.patch @@ -0,0 +1,38 @@ +From 9fd0826d21870a727a0a47b65f2dedeb8607d59d Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 12 Jan 2024 12:19:27 +0800 +Subject: scsi: isci: Fix an error code problem in isci_io_request_build() + +From: Su Hui + +[ Upstream commit 658365c6b0857e6a306436e315a8633937e3af42 ] + +Clang static complains that Value stored to 'status' is never read. Return +'status' rather than 'SCI_SUCCESS'. + +Fixes: f1f52e75939b ("isci: uplevel request infrastructure") +Signed-off-by: Su Hui +Link: https://lore.kernel.org/r/20240112041926.3924315-1-suhui@nfschina.com +Reviewed-by: Artur Paszkiewicz +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/isci/request.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/scsi/isci/request.c b/drivers/scsi/isci/request.c +index 343d24c7e788..591aebb40a0f 100644 +--- a/drivers/scsi/isci/request.c ++++ b/drivers/scsi/isci/request.c +@@ -3398,7 +3398,7 @@ static enum sci_status isci_io_request_build(struct isci_host *ihost, + return SCI_FAILURE; + } + +- return SCI_SUCCESS; ++ return status; + } + + static struct isci_request *isci_request_from_tag(struct isci_host *ihost, u16 tag) +-- +2.43.0 + diff --git a/queue-5.4/series b/queue-5.4/series index 6025eb62322..46a6728f6c5 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -157,3 +157,16 @@ ceph-fix-deadlock-or-deadcode-of-misusing-dget.patch drm-amdgpu-release-adev-pm.fw-before-return-in-amdgp.patch perf-fix-the-nr_addr_filters-fix.patch wifi-cfg80211-fix-rcu-dereference-in-__cfg80211_bss_.patch +scsi-isci-fix-an-error-code-problem-in-isci_io_reque.patch +net-remove-unneeded-break.patch +ixgbe-remove-non-inclusive-language.patch +ixgbe-refactor-returning-internal-error-codes.patch +ixgbe-refactor-overtemp-event-handling.patch +ixgbe-fix-an-error-handling-path-in-ixgbe_read_iosf_.patch +ipv6-ensure-natural-alignment-of-const-ipv6-loopback.patch +llc-call-sock_orphan-at-release-time.patch +netfilter-nf_log-replace-bug_on-by-warn_on_once-when.patch +netfilter-nft_ct-sanitize-layer-3-and-4-protocol-num.patch +net-ipv4-fix-a-memleak-in-ip_setup_cork.patch +af_unix-fix-lockdep-positive-in-sk_diag_dump_icons.patch +net-sysfs-fix-sys-class-net-iface-path.patch -- 2.47.3