tree: https://gitee.com/openeuler/kernel.git OLK-5.10
head: 9e82708a746dc5d4ec8995a3e6edace2cf23c6fd
commit: 79c68ab3280fab8ace1b10bf8eadce508ee89c3c [14902/30000] etmem: add original kernel swap enabled options
config: x86_64-buildonly-randconfig-004-20240314 (https://download.01.org/0day-ci/archive/20240314/202403141618.ndy1WEyB-lkp@…)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240314/202403141618.ndy1WEyB-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202403141618.ndy1WEyB-lkp@intel.com/
All errors (new ones prefixed by >>):
ld: warning: arch/x86/lib/retpoline.o: missing .note.GNU-stack section implies executable stack
ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
ld: warning: arch/x86/lib/retpoline.o: missing .note.GNU-stack section implies executable stack
ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
ld: warning: .tmp_vmlinux.kallsyms1 has a LOAD segment with RWX permissions
ld: mm/vmscan.o: in function `balance_pgdat':
>> vmscan.c:(.text+0xc5bf): undefined reference to `kernel_swap_enabled'
ld: mm/vmscan.o: in function `try_to_free_pages':
>> (.text+0xda7f): undefined reference to `kernel_swap_enabled'
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
From: Xiubo Li <xiubli(a)redhat.com>
mainline inclusion
from mainline-v6.8-rc1
commit b493ad718b1f0357394d2cdecbf00a44a36fa085
category: bugfix
bugzilla: 189667
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
--------------------------------
The lock order is incorrect between denty and its parent, we should
always make sure that the parent get the lock first.
But since this deadcode is never used and the parent dir will always
be set from the callers, let's just remove it.
Link: https://lore.kernel.org/r/20231116081919.GZ1957730@ZenIV
Reported-by: Al Viro <viro(a)zeniv.linux.org.uk>
Signed-off-by: Xiubo Li <xiubli(a)redhat.com>
Reviewed-by: Jeff Layton <jlayton(a)kernel.org>
Signed-off-by: Ilya Dryomov <idryomov(a)gmail.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Yifan Qiao <qiaoyifan4(a)huawei.com>
---
fs/ceph/caps.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 4c0b220e20ba..1cc433de4200 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -4174,12 +4174,14 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
struct inode *dir,
int mds, int drop, int unless)
{
- struct dentry *parent = NULL;
struct ceph_mds_request_release *rel = *p;
struct ceph_dentry_info *di = ceph_dentry(dentry);
int force = 0;
int ret;
+ /* This shouldn't happen */
+ BUG_ON(!dir);
+
/*
* force an record for the directory caps if we have a dentry lease.
* this is racy (can't take i_ceph_lock and d_lock together), but it
@@ -4189,14 +4191,9 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
spin_lock(&dentry->d_lock);
if (di->lease_session && di->lease_session->s_mds == mds)
force = 1;
- if (!dir) {
- parent = dget(dentry->d_parent);
- dir = d_inode(parent);
- }
spin_unlock(&dentry->d_lock);
ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
- dput(parent);
spin_lock(&dentry->d_lock);
if (ret && di->lease_session && di->lease_session->s_mds == mds) {
--
2.39.2
From: Xiubo Li <xiubli(a)redhat.com>
mainline inclusion
from mainline-v6.8-rc1
commit b493ad718b1f0357394d2cdecbf00a44a36fa085
category: bugfix
bugzilla: 189667
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
--------------------------------
The lock order is incorrect between denty and its parent, we should
always make sure that the parent get the lock first.
But since this deadcode is never used and the parent dir will always
be set from the callers, let's just remove it.
Link: https://lore.kernel.org/r/20231116081919.GZ1957730@ZenIV
Reported-by: Al Viro <viro(a)zeniv.linux.org.uk>
Signed-off-by: Xiubo Li <xiubli(a)redhat.com>
Reviewed-by: Jeff Layton <jlayton(a)kernel.org>
Signed-off-by: Ilya Dryomov <idryomov(a)gmail.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Yifan Qiao <qiaoyifan4(a)huawei.com>
---
fs/ceph/caps.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 4c0b220e20ba..1cc433de4200 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -4174,12 +4174,14 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
struct inode *dir,
int mds, int drop, int unless)
{
- struct dentry *parent = NULL;
struct ceph_mds_request_release *rel = *p;
struct ceph_dentry_info *di = ceph_dentry(dentry);
int force = 0;
int ret;
+ /* This shouldn't happen */
+ BUG_ON(!dir);
+
/*
* force an record for the directory caps if we have a dentry lease.
* this is racy (can't take i_ceph_lock and d_lock together), but it
@@ -4189,14 +4191,9 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
spin_lock(&dentry->d_lock);
if (di->lease_session && di->lease_session->s_mds == mds)
force = 1;
- if (!dir) {
- parent = dget(dentry->d_parent);
- dir = d_inode(parent);
- }
spin_unlock(&dentry->d_lock);
ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
- dput(parent);
spin_lock(&dentry->d_lock);
if (ret && di->lease_session && di->lease_session->s_mds == mds) {
--
2.39.2
From: Xiubo Li <xiubli(a)redhat.com>
mainline inclusion
from mainline-v6.8-rc1
commit b493ad718b1f0357394d2cdecbf00a44a36fa085
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I96G92
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
--------------------------------
The lock order is incorrect between denty and its parent, we should
always make sure that the parent get the lock first.
But since this deadcode is never used and the parent dir will always
be set from the callers, let's just remove it.
Link: https://lore.kernel.org/r/20231116081919.GZ1957730@ZenIV
Reported-by: Al Viro <viro(a)zeniv.linux.org.uk>
Signed-off-by: Xiubo Li <xiubli(a)redhat.com>
Reviewed-by: Jeff Layton <jlayton(a)kernel.org>
Signed-off-by: Ilya Dryomov <idryomov(a)gmail.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Yifan Qiao <qiaoyifan4(a)huawei.com>
---
fs/ceph/caps.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 4c0b220e20ba..1cc433de4200 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -4174,12 +4174,14 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
struct inode *dir,
int mds, int drop, int unless)
{
- struct dentry *parent = NULL;
struct ceph_mds_request_release *rel = *p;
struct ceph_dentry_info *di = ceph_dentry(dentry);
int force = 0;
int ret;
+ /* This shouldn't happen */
+ BUG_ON(!dir);
+
/*
* force an record for the directory caps if we have a dentry lease.
* this is racy (can't take i_ceph_lock and d_lock together), but it
@@ -4189,14 +4191,9 @@ int ceph_encode_dentry_release(void **p, struct dentry *dentry,
spin_lock(&dentry->d_lock);
if (di->lease_session && di->lease_session->s_mds == mds)
force = 1;
- if (!dir) {
- parent = dget(dentry->d_parent);
- dir = d_inode(parent);
- }
spin_unlock(&dentry->d_lock);
ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force);
- dput(parent);
spin_lock(&dentry->d_lock);
if (ret && di->lease_session && di->lease_session->s_mds == mds) {
--
2.39.2
tree: https://gitee.com/openeuler/kernel.git OLK-5.10
head: 9e82708a746dc5d4ec8995a3e6edace2cf23c6fd
commit: 00d37128abe2687fac974c5d21aa67fac6518c7c [27244/30000] sched: Introduce smart grid scheduling strategy for cfs
config: x86_64-buildonly-randconfig-001-20240314 (https://download.01.org/0day-ci/archive/20240314/202403141540.Qo9LqVrW-lkp@…)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240314/202403141540.Qo9LqVrW-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202403141540.Qo9LqVrW-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from kernel/sched/core.c:13:
kernel/sched/sched.h:1837:15: warning: cast from 'void (*)(struct rq *)' to 'void (*)(struct callback_head *)' converts to incompatible function type [-Wcast-function-type-strict]
1837 | head->func = (void (*)(struct callback_head *))func;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/core.c:2746:6: warning: no previous prototype for function 'sched_set_stop_task' [-Wmissing-prototypes]
2746 | void sched_set_stop_task(int cpu, struct task_struct *stop)
| ^
kernel/sched/core.c:2746:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
2746 | void sched_set_stop_task(int cpu, struct task_struct *stop)
| ^
| static
kernel/sched/core.c:4121:10: warning: cast from 'void (*)(struct callback_head *)' to 'void (*)(struct rq *)' converts to incompatible function type [-Wcast-function-type-strict]
4121 | func = (void (*)(struct rq *))head->func;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/core.c:9530:5: warning: no previous prototype for function 'tg_set_dynamic_affinity_mode' [-Wmissing-prototypes]
9530 | int tg_set_dynamic_affinity_mode(struct task_group *tg, u64 mode)
| ^
kernel/sched/core.c:9530:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
9530 | int tg_set_dynamic_affinity_mode(struct task_group *tg, u64 mode)
| ^
| static
kernel/sched/core.c:9567:5: warning: no previous prototype for function 'tg_set_affinity_period' [-Wmissing-prototypes]
9567 | int tg_set_affinity_period(struct task_group *tg, u64 period_ms)
| ^
kernel/sched/core.c:9567:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
9567 | int tg_set_affinity_period(struct task_group *tg, u64 period_ms)
| ^
| static
kernel/sched/core.c:9578:5: warning: no previous prototype for function 'tg_get_affinity_period' [-Wmissing-prototypes]
9578 | u64 tg_get_affinity_period(struct task_group *tg)
| ^
kernel/sched/core.c:9578:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
9578 | u64 tg_get_affinity_period(struct task_group *tg)
| ^
| static
>> kernel/sched/core.c:9634:4: warning: format specifies type 'unsigned long long' but the argument has type 'int' [-Wformat]
9632 | seq_printf(sf, "sd_level %d, cpu list %*pbl, stay_cnt %llu\n",
| ~~~~
| %d
9633 | i, cpumask_pr_args(ad->domains[i]),
9634 | schedstat_val(ad->stay_cnt[i]));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/sched/stats.h:72:32: note: expanded from macro 'schedstat_val'
72 | # define schedstat_val(var) 0
| ^
7 warnings generated.
vim +9634 kernel/sched/core.c
9619
9620 static int cpu_affinity_stat_show(struct seq_file *sf, void *v)
9621 {
9622 struct task_group *tg = css_tg(seq_css(sf));
9623 struct auto_affinity *auto_affi = tg->auto_affinity;
9624 struct affinity_domain *ad = &auto_affi->ad;
9625 int i;
9626
9627 seq_printf(sf, "period_active %d\n", auto_affi->period_active);
9628 seq_printf(sf, "dcount %d\n", ad->dcount);
9629 seq_printf(sf, "domain_mask 0x%x\n", ad->domain_mask);
9630 seq_printf(sf, "curr_level %d\n", ad->curr_level);
9631 for (i = 0; i < ad->dcount; i++)
9632 seq_printf(sf, "sd_level %d, cpu list %*pbl, stay_cnt %llu\n",
9633 i, cpumask_pr_args(ad->domains[i]),
> 9634 schedstat_val(ad->stay_cnt[i]));
9635
9636 return 0;
9637 }
9638 #endif /* CONFIG_QOS_SCHED_SMART_GRID */
9639
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
From: Somnath Kotur <somnath.kotur(a)broadcom.com>
stable inclusion
from stable-v5.10.184
commit 3f6dfff5fe416bda6469cf235eaa9c54fee2a0bc
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8L4MY
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
[ Upstream commit 1eb4ef12591348c440ac9d6efcf7521e73cf2b10 ]
As per the new udp tunnel framework, drivers which need to know the
details of a port entry (i.e. port type) when it gets deleted should
use the .set_port / .unset_port callbacks.
Implementing the current .udp_tunnel_sync callback would mean that the
deleted tunnel port entry would be all zeros. This used to work on
older firmware because it would not check the input when deleting a
tunnel port. With newer firmware, the delete will now fail and
subsequent tunnel port allocation will fail as a result.
Fixes: 442a35a5a7aa ("bnxt: convert to new udp_tunnel_nic infra")
Reviewed-by: Kalesh Anakkur Purayil <kalesh-anakkur.purayil(a)broadcom.com>
Signed-off-by: Somnath Kotur <somnath.kotur(a)broadcom.com>
Signed-off-by: Michael Chan <michael.chan(a)broadcom.com>
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Dapeng Yu <dapeng.yu(a)windriver.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 25 ++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 4db84ed9d698..3dc826353b02 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -12099,26 +12099,37 @@ static void bnxt_cfg_ntp_filters(struct bnxt *bp)
#endif /* CONFIG_RFS_ACCEL */
-static int bnxt_udp_tunnel_sync(struct net_device *netdev, unsigned int table)
+static int bnxt_udp_tunnel_set_port(struct net_device *netdev, unsigned int table,
+ unsigned int entry, struct udp_tunnel_info *ti)
{
struct bnxt *bp = netdev_priv(netdev);
- struct udp_tunnel_info ti;
unsigned int cmd;
- udp_tunnel_nic_get_port(netdev, table, 0, &ti);
- if (ti.type == UDP_TUNNEL_TYPE_VXLAN)
+ if (ti->type == UDP_TUNNEL_TYPE_VXLAN)
cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN;
else
cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE;
- if (ti.port)
- return bnxt_hwrm_tunnel_dst_port_alloc(bp, ti.port, cmd);
+ return bnxt_hwrm_tunnel_dst_port_alloc(bp, ti->port, cmd);
+}
+
+static int bnxt_udp_tunnel_unset_port(struct net_device *netdev, unsigned int table,
+ unsigned int entry, struct udp_tunnel_info *ti)
+{
+ struct bnxt *bp = netdev_priv(netdev);
+ unsigned int cmd;
+
+ if (ti->type == UDP_TUNNEL_TYPE_VXLAN)
+ cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN;
+ else
+ cmd = TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE;
return bnxt_hwrm_tunnel_dst_port_free(bp, cmd);
}
static const struct udp_tunnel_nic_info bnxt_udp_tunnels = {
- .sync_table = bnxt_udp_tunnel_sync,
+ .set_port = bnxt_udp_tunnel_set_port,
+ .unset_port = bnxt_udp_tunnel_unset_port,
.flags = UDP_TUNNEL_NIC_INFO_MAY_SLEEP |
UDP_TUNNEL_NIC_INFO_OPEN_ONLY,
.tables = {
--
2.43.0
From: Somnath Kotur <somnath.kotur(a)broadcom.com>
stable inclusion
from stable-v5.10.184
commit deead0d8729f33f47cbedd0010a7e0e381527f9b
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8L4MY
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
[ Upstream commit 1a9e4f501bc6ff1b6ecb60df54fbf2b54db43bfe ]
We need to call bnxt_hwrm_func_qcfg() on a VF to query the default
VLAN that may be setup by the PF. If a default VLAN is enabled,
the VF cannot support VLAN acceleration on the receive side and
the VNIC must be setup to strip out the default VLAN tag. If a
default VLAN is not enabled, the VF can support VLAN acceleration
on the receive side. The VNIC should be set up to strip or not
strip the VLAN based on the RX VLAN acceleration setting.
Without this call to determine the default VLAN before calling
bnxt_setup_vnic(), the VNIC may not be set up correctly. For
example, bnxt_setup_vnic() may set up to strip the VLAN tag based
on stale default VLAN information. If RX VLAN acceleration is
not enabled, the VLAN tag will be incorrectly stripped and the
RX data path will not work correctly.
Fixes: cf6645f8ebc6 ("bnxt_en: Add function for VF driver to query default VLAN.")
Reviewed-by: Pavan Chebbi <pavan.chebbi(a)broadcom.com>
Signed-off-by: Somnath Kotur <somnath.kotur(a)broadcom.com>
Signed-off-by: Michael Chan <michael.chan(a)broadcom.com>
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Dapeng Yu <dapeng.yu(a)windriver.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index b818d5f342d5..4db84ed9d698 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -8336,6 +8336,9 @@ static int bnxt_init_chip(struct bnxt *bp, bool irq_re_init)
goto err_out;
}
+ if (BNXT_VF(bp))
+ bnxt_hwrm_func_qcfg(bp);
+
rc = bnxt_setup_vnic(bp, 0);
if (rc)
goto err_out;
--
2.43.0
From: Sreekanth Reddy <sreekanth.reddy(a)broadcom.com>
stable inclusion
from stable-v5.10.184
commit 84dbd27ad5dace21830c67d01470e9121a044b22
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8L4MY
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
[ Upstream commit 1d997801c7cc6a7f542e46d5a6bf16f893ad3fe9 ]
Only older NIC controller's firmware uses the PROC AP reset type.
Firmware on 5731X/5741X and newer chips does not support this reset
type. When bnxt_reset() issues a series of resets, this PROC AP
reset may actually fail on these newer chips because the firmware
is not ready to accept this unsupported command yet. Avoid this
unnecessary error by skipping this reset type on chips that don't
support it.
Fixes: 7a13240e3718 ("bnxt_en: fix ethtool_reset_flags ABI violations")
Reviewed-by: Pavan Chebbi <pavan.chebbi(a)broadcom.com>
Signed-off-by: Sreekanth Reddy <sreekanth.reddy(a)broadcom.com>
Signed-off-by: Michael Chan <michael.chan(a)broadcom.com>
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Dapeng Yu <dapeng.yu(a)windriver.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index d90b7b85c052..310c1d72205f 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -3446,7 +3446,7 @@ static int bnxt_reset(struct net_device *dev, u32 *flags)
}
}
- if (req & BNXT_FW_RESET_AP) {
+ if (!BNXT_CHIP_P4_PLUS(bp) && (req & BNXT_FW_RESET_AP)) {
/* This feature is not supported in older firmware versions */
if (bp->hwrm_spec_code >= 0x10803) {
if (!bnxt_firmware_reset_ap(dev)) {
--
2.43.0
From: Florian Fainelli <f.fainelli(a)gmail.com>
stable inclusion
from stable-v5.10.181
commit 43f6575004e0bbe0acc5d7a1955f326b22f38121
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I8L4MY
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id…
--------------------------------
[ Upstream commit 225c657945c4a6307741cb3cc89467eadcc26e9b ]
Removing the phy_stop() from bcmgenet_netif_stop() ended up causing
warnings from the PHY library that phy_start() is called from the
RUNNING state since we are no longer stopping the PHY state machine
during bcmgenet_suspend().
Restore the call to phy_stop() but make it conditional on being called
from the close or suspend path.
Fixes: c96e731c93ff ("net: bcmgenet: connect and disconnect from the PHY state machine")
Fixes: 93e0401e0fc0 ("net: bcmgenet: Remove phy_stop() from bcmgenet_netif_stop()")
Signed-off-by: Florian Fainelli <f.fainelli(a)gmail.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi(a)broadcom.com>
Link: https://lore.kernel.org/r/20230515025608.2587012-1-f.fainelli@gmail.com
Signed-off-by: Paolo Abeni <pabeni(a)redhat.com>
Signed-off-by: Sasha Levin <sashal(a)kernel.org>
Signed-off-by: Dapeng Yu <dapeng.yu(a)windriver.com>
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 52c93701a9e4..f198144a7ce1 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3393,7 +3393,7 @@ static int bcmgenet_open(struct net_device *dev)
return ret;
}
-static void bcmgenet_netif_stop(struct net_device *dev)
+static void bcmgenet_netif_stop(struct net_device *dev, bool stop_phy)
{
struct bcmgenet_priv *priv = netdev_priv(dev);
@@ -3408,6 +3408,8 @@ static void bcmgenet_netif_stop(struct net_device *dev)
/* Disable MAC transmit. TX DMA disabled must be done before this */
umac_enable_set(priv, CMD_TX_EN, false);
+ if (stop_phy)
+ phy_stop(dev->phydev);
bcmgenet_disable_rx_napi(priv);
bcmgenet_intr_disable(priv);
@@ -3433,7 +3435,7 @@ static int bcmgenet_close(struct net_device *dev)
netif_dbg(priv, ifdown, dev, "bcmgenet_close\n");
- bcmgenet_netif_stop(dev);
+ bcmgenet_netif_stop(dev, false);
/* Really kill the PHY state machine and disconnect from it */
phy_disconnect(dev->phydev);
@@ -4235,7 +4237,7 @@ static int bcmgenet_suspend(struct device *d)
netif_device_detach(dev);
- bcmgenet_netif_stop(dev);
+ bcmgenet_netif_stop(dev, true);
if (!device_may_wakeup(d))
phy_suspend(dev->phydev);
--
2.43.0