Andorid 打开热点,关闭有线网,ifconfig卡死分析解决

Andorid 打开热点,关闭有线网,ifconfig卡死分析解决

文章目录

一、前言

这个问题在AML 方案是有出现的,在其他芯片方案好像没有,不确实是不是供应商默认规避了。

因为是内核上的修改,我这里只简单记录。

普通系统源码是看不到这个内容的。

二、分析解决

1、复现问题步骤

打开热点,接入有线网并且识别到能上网的有线网ip;

应用调用有线网api接口,关闭有线网;

这时候所有网络接口都卡死了,ifconfig都会没有数据返回。

任何应用调用wifi、热点、有线网相关接口都会阻塞卡死,最后ANR崩溃。

2、原因

**根因链路(stmmac 驱动 bug) **

复制代码
1. 开启 **NETIF_F_HW_TC** → 内核认为 eth0 支持硬件 TC;
2. eth0 执行 `ndo_stop`(网卡 down 流程),**同时触发 TC 硬件资源回收、TC qdisc 销毁**;
3. stmmac 驱动内部 TC 子系统(EST、多队列、TC filter)持有内部 mutex spinlock,**并且在 rtn\_lock 上下文嵌套锁操作**;
4. 一边 eth0 down 清理 TC 硬件资源、删除路由;一边 wlan0 启动热点新增 NAT/路由;
5. **锁顺序倒置 / 嵌套争锁 → rtnl 全局锁被永久占用**;
6. 用户态 `ifconfig ip` 通过 netlink 查询网卡信息,需要获取 rtnl_lock,拿不到 → 永久卡死。

3、问题解决

复制代码
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -7632,7 +7632,7 @@ int stmmac_dvr_probe(struct device *device,

        ret = stmmac_tc_init(priv, priv);
        if (!ret) {

    -    ndev->hw_features |= NETIF_F_HW_TC;

   + // ndev->hw_features |= NETIF_F_HW_TC;
  }

  if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {

上面修改就是注释了 ndev->hw_features |= NETIF_F_HW_TC; 这行代码。

这个drivers目录在普通系统源码是看不到的,是底层内核的源码。

这个其实是供应商给的对策。

三、其他

1、小结

ifconfig/ip link 卡死本质可能是:NETLINK_ROUTE rtnl_lock 全局锁竞争 / 阻塞

2、NETIF_F_HW_TC 的作用

NETIF_F_HW_TC = 硬件 TC 卸载,本质就是用来支持硬件 TSN 调度(EST/TAPRIO、CBS、帧抢占等)

打开该标志: 内核允许 tc tapriotc cbs 下发配置给 GMAC 硬件;

报文调度在 MAC 硬件完成,不占用 CPU,时延抖动极小

设备用途:工业网关、车载以太网、机器人主控、多路实时视频低时延传输,需要微秒级稳定时延 。

设备只是普通上网、Android 平板、普通网关,不用工业实时 / 车载实时业务 是可以注释这行代码的。

如果需要根治这个问题需要内核更深入的了解:

修复 stmmac_tc_deinit 网卡下线时的锁竞争死锁,而不是直接屏蔽硬件 TC 能力。

相关推荐
Julien20043 小时前
控制 SELinux 文件上下文
linux·运维·服务器
EXI-小洲3 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
sulikey4 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
Lifangyun_WD4 小时前
第一次租 GPU 服务器怎么开始?镜像、SSH、数据存储和停机前要做什么
服务器·云计算·gpu算力·gpu算力租赁
2601_961901705 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
DevLoom_5 小时前
SD卡插电脑提示:驱动器中的磁盘未被格式化?恢复数据正确处理步骤
运维·服务器·电脑
STQY燊桐启元(深圳)电子科技5 小时前
医疗精密电源散热方案:相变陶瓷片保障医疗设备长效稳定低干扰
大数据·网络·人工智能
何以解忧,唯有..5 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
QQ_21696290966 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
yyuuuzz7 小时前
记一次 VPS 性能排查:共享 CPU 突发额度导致的限流
运维·服务器·人工智能