网络子系统3_do_softirq调用点

//中断退出时
1.void irq_exit(void)
{
       ...
       //递减中断嵌套深度
       sub_preempt_count(IRQ_EXIT_OFFSET);
       //如果已经退出中断,并且软中断标志被置位
       if (!in_interrupt() && local_softirq_pending())
       			//执行软中断
           		do_softirq();           

       ...
}
//APIC时钟中断中
2.void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
{
        ...
        irq_exit();
        ...
}

//重新激活下半部时
3.void local_bh_enable(void)
{
        _local_bh_enable_ip((unsigned long)__builtin_return_address(0));
}
static inline void _local_bh_enable_ip(unsigned long ip)
{
		...
        if (unlikely(!in_interrupt() && local_softirq_pending()))
                do_softirq();
        ...
}
时间: 2024-10-29 18:11:11

网络子系统3_do_softirq调用点的相关文章

网络子系统38_ip子系统初始化

//ip子系统初始化 //调用路径inet_init->ip_init //包括路由子系统的初始化,inet_peer缓存的初始化 1.1 void __init ip_init(void) { dev_add_pack(&ip_packet_type);//添加l3协议处理函数 ip_rt_init(); //路由子系统初始化 inet_initpeers();//inet_peer缓存 } //调用路径ip_init->inet_initpeers //inet_peer缓存初始化

Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl

网络子系统61_路由子系统初始化

// 路由缓存内存量指定办法: // 1.通过启动参数rhash_entries指定hash表bucket个数 // 2.根据物理内存页数确定使用的内存量 // 根据物理页数分配缓存内存: // 1.goal目标内存页数=总页数/(2**(26-PAGE_SHIFT)) // 2.最接近goal内存页数的order,用于从伙伴系统中分配 // 3.rt_hash_mask=order页可容纳的bucket数 // 4.对齐rt_hash_mask到2的幂次 // 5.从伙伴系统中分配order页

xamarin for android 网络通讯 是调用 system.Net.Sockets 吗?

问题描述 xamarinforandroid网络通讯是调用system.Net.Sockets吗?xamarinforandroid网络通讯简单例子提供一下,要做一个电力通讯的手机小软件,刚接触这一块,有高手,请指点一下. 解决方案 解决方案二:自己顶一下,xamarin国内资料有点少,我这边有些资料,XamariniOS开发实战(上册)试读C#开发Android应用实战--使用MonoforAndroid和.NETC#源程序iPhone高级编程--使用MonoTouch和.NETC#.PDF有

网络子系统14_邻居子系统通用接口

//创建一个新的邻居项 //参考 深入理解linux网络技术内幕 // 1.邻居子系统为具体的邻居协议,提供通用的功能接口 // 2.系统中所有的邻居协议被链接在neigh_tables链表中 // 3.neigh_table代表一个具体的邻居协议 // 4.具体邻居协议在运行时的行为,可以通过struct neigh_parms调节, // neigh_params与设备关联,每个邻居协议neigh_table提供一个默认的neigh_params. //注册一个邻居协议到系统中 // 1.与

网络子系统2_设备子系统相关的初始化

//在socket文件系统注册之后,设备驱动程序注册之前被调用 //start_kernel->rest_init->kernel_thread->init->do_basic_setup->do_initcalls->net_dev_init 2.1 static int __init net_dev_init(void) { ... //proc文件系统中相关项的初始化 if (dev_proc_init()) goto out; //注册网络设备类 if (net

网络子系统4_以太网设备描述符

//分配以太网设备描述符 1.1 struct net_device *alloc_etherdev(int sizeof_priv) { //设备名默认为eth%d,其中%d随系统中以太网络设备数递增 return alloc_netdev(sizeof_priv, "eth%d", ether_setup); } //网络设备描述符标准分配函数 // alloc_etherdev->alloc_netdev 1.2 struct net_device *alloc_netde

网络子系统11_arp子系统初始化

// 1.邻居: // 网络中的邻居指连接到同一个LAN中,且至少有一个接口有相同的ip子网配置 // 2.邻居协议的作用: // 通过l3地址获取主机的l2地址 // 3.通过l3获取l2地址办法: // 3.1 点到点连接,此时不需要l2地址 // 3.2 特殊的l3地址,通过简单的规则获取l2的映射 // 3.3 多播地址通过简单的转换规则转换为l2地址 // 3.4 ip中使用arp协议完成映射 // arp协议的初始化 // 向内核邻居子系统注册arp地址解析协议. // 调用路径:i

网络子系统15_arp邻居项初始化

// 初始化struct neighbour // 当邻居子系统新创一个neighbour时,邻居子系统调用特定协议的初始化函数,初始化邻居项. // 调用路径:neigh_create->arp_constructor // 函数主要任务: // 1.设置邻居项的地址类型,a,b,c,d // 2.使用与此邻居项关联的接口设备的neigh_param作为该邻居项调整邻居协议的参数. // 3.根据与此邻居项关联的接口设备的信息,初始化邻居项的状态,以及ops // 3.1 驱动没有提供填充l2