• 内核中Mips架构内存屏障的实现

    前言 内存屏障是一项与硬件架构紧密相关的关键技术,直接决定了多核场景中,并发数据访问的安全性。由于不同硬件架构的memory order实现不同,在需要保证内存访问顺序的场景中,内存屏障能发挥关键作用。 而Linux内核中,很多关键场景中都需要使用内存屏障保证可靠,内核中也实现了多种不同类型的内存屏障,本文主要分析内核中Mips架构相关内存屏障的主要实现。 关于内存屏障的原理,见其它文章说明。...


  • Howto通过git向邮件列表中提交开源补丁

    前言 社区贡献能体现公司价值,更能体现个人价值,目前很多大型的开源社区都通过邮件列表来提交补丁,典型的如Linux Kernl、Qemu、GNU之类的(也有其它一些社区更规范、直接使用git&gerrit来操作,本文暂不关注),具体操作方式通常为: 通过邮件客户端向指定的邮件列表中发补丁,并抄送相关的maintainer。 相关模块的maintainer或相关人员进行code...


  • Qemu-i386(linux-user模式)在Loongson 3A3000环境中崩溃问题

    问题 在Loongson 3A3000环境中,使用qemu的用户态模式,执行x86 32位(i386)的HelloWorld程序,直接崩溃。 复现步骤如下:...


  • Git笔记:版本回退

    场景 使用git合版本时,遇到这样的场景: 在合入了多个补丁后,发现之前合入的莫个补丁有问题,如: O->P1->P2->P3 O表示初始代码,P1-P3分别对应3次补丁合入。合入P3后,发现P1补丁有问题,此时怎么办?...


  • Wine ediary在最小化后无法恢复问题

    问题 ediary是个很简单的Windows笔记软件,相对小众,但易用性还不错,还是有不少fans。 尝试使用Wine对其进行适配时,发现其基本功能可用,但有一个影响使用的大问题: 在最小化后,其会进入托盘区(systray),点击后会正常弹出密码输入提示框,但输入密码后,没有反应,看不到本应出现的笔记编辑窗口。 分析...


  • Marco:Normal窗口最大化流程分析

    前言 分析Wine EDiary工具不能最大化的问题时,对比分析了SourceInsight3工具的最大化流程,由于SI3工具的主窗口是Normal类型窗口,其最大化、最小化等功能都是有窗口管理器提供的,比较典型,本文进行整体了分析,供参考。 分析 原理分析...


  • Wine相关问题:TOOLWINDOW类型窗口无法最大化

    问题 使用Wine适配一个简单的笔记软件,该笔记软件的主窗口类型为TOOLWINDOW 无法最大化,点击按钮后闪烁几下后,只是将窗口移到了桌面的左上角,但是大小没变。 对应在窗口管理器marco中的类型为META_WINDOW_DIALOG 分析...


  • Tramp data In Kernel

    表象 内核中经常见到某些函数有很多的参数,而且这些参数会一级一级往下面传递,部分参数可能只有最深一级函数才会用到,但却被传递了很多级,其中不乏一些bool型的参数,比如如下的代码流程,6个参数传递了很多级。 kvm_mips_map_page() -> gfn_to_pfn_prot()...


  • Qemu static方式configure错误

    现象 需要编译qemu,使用static的方式,带–static参数执行configure,报错: [root@localhost qemu]# ./configure...


  • Mips KVM Trap&Emulate implemented in Linux

    基本原理 Trap&Emulate,即陷入&模拟的方式,是纯软件实现的全虚拟化方案,基本不借助硬件虚拟化功能。本文主要关注内存虚拟化实现中的核心,TLB miss相关实现。基本原理是: 所有的TLB miss都将导致Guest退出到VMM处理,然后在VMM中进行相应模拟。...