当前位置: 首页 > wzjs >正文

厦门建设网站首页工作证模板word

厦门建设网站首页,工作证模板word,免费做那个的视频网站,页面设计高度1,查看日志信息打印 我们看到日志发现发包的skb模块有NULL pointer情况,我们看代码分析skb指针不可能出现是空指针,这个时候我们怀疑可能是出现了踩内存导致的空指针情况,所以我们首先需要找到系统PANIC的条件,也就是…

1,查看日志信息打印

我们看到日志发现发包的skb模块有NULL pointer情况,我们看代码分析skb指针不可能出现是空指针,这个时候我们怀疑可能是出现了踩内存导致的空指针情况,所以我们首先需要找到系统PANIC的条件,也就是触发空指针(踩内存的条件)。

2,分析问题出现场景

最开始测试说这个问题是必现或者高概率复现的,我们查看日志看着空指针又没看出什么,后面我们自己想复现问题找到问题的触发条件,后面我们发现wifi测速时这个问题出现的概率比较高,但是后面我们加了一些打开符号表和其他的调试信息后发现问题问题出现的概率也不是很高,驱动专家们怀疑这个时候改了逻辑打开了符号表,可能踩到了其他的内存,这个时候我们只能通过测试场景去看问题了。

3,猜测内存踩踏点

最开始出现的场景是wifi测速时出现的,虽然PANIC收集的信息不是很完整,但是我们可以看到是wifi模块的tx_buf发包函数出现了空指针,所以我们先和协议的同事确认了一些测速时一些发包情况和发包函数,我们首先看到了协议栈的发包函数使用的是ndo_start_xmit。

netdev_tx_t ndo_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
    // 停止队列以避免更多数据包进入
    netif_stop_queue(dev);

    // 调用硬件发送接口发送数据包
    if (0 == hardware_send_frame(skb->data, skb->len)) {
        // 更新设备统计信息
        dev->stats.tx_packets++;
        dev->stats.tx_bytes += skb->len;
        dev_kfree_skb(skb); // 释放数据包
        return NETDEV_TX_OK;
    } else {
        // 发送失败,重启队列
        netif_wake_queue(dev);
        return NETDEV_TX_BUSY;
    }
}

 和协议栈的专家确认以及查看协议栈的发包函数的实现以及发包的流程,发现该线程是可重入的,但是没有加锁,所以可能会有问题,所以我们试着把ndo_start_xmit换成有RCU锁保护的dev_queue_xmit 函数,我们来看看函数dev_queue_xmit 的具体实现。

int dev_queue_xmit(struct sk_buff *skb)
{
    struct net_device *dev = skb->dev;
    struct Qdisc *q;
    int rc = -ENOMEM;

    // 使用RCU读取设备的队列规则
    rcu_read_lock();                  // 开启RCU读端临界区
    q = rcu_dereference(dev->qdisc);  // 安全地读取qdisc
    rcu_read_unlock();                // 关闭RCU读端临界区

    // 入队操作和发送流程
    if (q->enqueue) {
        rc = q->enqueue(skb, q);
        if (likely(rc == NET_XMIT_SUCCESS)) {
            __netif_schedule(q);
            rc = NET_XMIT_SUCCESS;
        }
    }

    // 无队列设备直接发送
    if (dev->flags & IFF_LOOPBACK) {
        rc = dev_hard_start_xmit(skb, dev, NULL, NULL);
    }

    return rc;
}

struct sk_buff *dev_hard_start_xmit(struct sk_buff *first, struct net_device *dev,
                                    struct netdev_queue *txq, int *ret) 
{
    struct sk_buff *skb = first;
    int rc = NETDEV_TX_OK;

    while (skb) {
        struct sk_buff *next = skb->next;

        skb->next = NULL;
        rc = xmit_one(skb, dev, txq, next != NULL); // 调用 xmit_one 发送数据包

        if (unlikely(!dev_xmit_complete(rc))) {
            skb->next = next;
            goto out;
        }

        skb = next;
        if (netif_xmit_stopped(txq) && skb) {
            rc = NETDEV_TX_BUSY;
            break;
        }
    }

out:
    *ret = rc;
    return skb;
}

换成上面的函数后测速接近300次没有出现空指针相关的问题了。 

总结:我们使用和封装线程函数时我们需要考虑不同的场景,考虑函数的调用情况,看函数是否可以重入,如果是就需要考虑加入一些锁机制来实现互斥,还有一些共享资源的使用情况也是如此。


文章转载自:

http://Jlv33WWB.Lqqqh.cn
http://izag4aBw.Lqqqh.cn
http://qj2IGQ4a.Lqqqh.cn
http://RKOQv1Kt.Lqqqh.cn
http://dADNFRgS.Lqqqh.cn
http://lQ5du58y.Lqqqh.cn
http://BeKqQBL9.Lqqqh.cn
http://3hbhO22i.Lqqqh.cn
http://WGfxMauj.Lqqqh.cn
http://rUOKZFYI.Lqqqh.cn
http://WQZBJoBd.Lqqqh.cn
http://iFPYLZoQ.Lqqqh.cn
http://ombSwokD.Lqqqh.cn
http://ozdH92C6.Lqqqh.cn
http://emoanpC3.Lqqqh.cn
http://Po55PQ0w.Lqqqh.cn
http://DSCAbq49.Lqqqh.cn
http://fqgygvyO.Lqqqh.cn
http://mMWtEnLj.Lqqqh.cn
http://kMIoQvVR.Lqqqh.cn
http://B4KlQLZ1.Lqqqh.cn
http://23hwQ3a1.Lqqqh.cn
http://5vot2XqZ.Lqqqh.cn
http://Oer5OOHI.Lqqqh.cn
http://NGp1e00e.Lqqqh.cn
http://Z4B44ytr.Lqqqh.cn
http://zQGjGx0Y.Lqqqh.cn
http://IqwBIg7Y.Lqqqh.cn
http://pXKdBk8l.Lqqqh.cn
http://I3a6sbdS.Lqqqh.cn
http://www.dtcms.com/wzjs/768734.html

相关文章:

  • 江门北京网站建设手工制作钟表
  • 做百度推广送网站wordpress的数据库在那里
  • 企业核名网站百度网站收录提交入口
  • 企业网站建设规划书的内容建设公司网站要注意哪些
  • 网站备案名称几个字软件外包公司怎么找业务
  • 网站编辑好做吗wordpress视频站主题
  • 石家庄市城乡建设局网站中国建设银行u盾官方网站
  • 建设租车网站泽国镇规划建设局网站
  • 公司做的网站费用如何做账为什么上不了建设银行个人网站
  • 网站制作基本规则怎么搭建php网站
  • 无锡企业建站模板上海市建设工程咨询网
  • 网站风格类型是如何做简易个人网站
  • 菏泽做企业网站国外简约网站
  • 做蛋糕的网站企业名录是什么
  • 苏州规划建设局网站短链接在线工具
  • 做古玩的网站合肥网站设计建设
  • 太仓网站建设企业网站竞价如何屏蔽恶意点击
  • 1企业网站案例郑州网站推广¥做下拉去118cr
  • 精仿源码社区网站源码永川网站制作
  • 建立微网站动漫制作专业学习方法
  • 国外做伞的品牌网站广州天华建筑设计有限公司
  • 深圳盐田建设交易中心网站商标设计logo免费软件
  • 网站建设客户需求学术网站怎么做
  • 换空间网站备案百度网址大全官网
  • 成都网站运营维护厂家企业设计网站
  • 太原网站建设工作室网站大全浏览器
  • 网站建设批复意见一台主机做两个网站
  • 网站源码搭建网站网站建设如果没有源代码
  • 做百度网站排手机网站开发框架php
  • 如果网站曾被挂木马湖北山河建设集团网站