Jianqiu 的个人资料猪圈照片日志列表 工具 帮助

日志


10月16日

N/A

    今天再写一个奇怪的bug,是周一碰到的:free版的64位驱动读取pci header的时候,会少读3个设备;而check版本的64位驱动是好的。反汇编这两个driver看了一下,check版的复制过程memcpy是用rep movsw(记得是movsw,为什么不是movsd呢?),而free版是call了一个函数。这个函数很复杂,大致看了一下,用到了64位的寄存器优化了复制的效率,应该是个intrinsic函数。
    中午吃完饭上楼梯的时候,突然想到了前段时间看BKDG时候扫过的一段话:用MMIO访问PCI空间是有要求的,必须要4字节对齐访问,只能用到al/ax/eax之类的寄存读取1、2、4个字节。MMIO空间中所有的pci header肯定都是4字节对齐的,这个没问题,但是优化后8个字节一读肯定就出事情了。bug肯定是和这个有关,但是有不能全部解释通顺,因为如果是这个问题,不可能只有3个设备读不出来,应该都读不出来才对。专门写了一个循环,8个字节读取,果然是一个设备都没找到。看样子是那段优化过的intrinsic函数的奇怪行径了。当时很急要出版本再送测试,就直接写了个循环读取,没有再深究其原因。明天去把代码搞回来,周末没事分析下看看。所以是未完待续。。。

评论

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

此日志的引用通告 URL 是:
http://zhujianqiu.spaces.live.com/blog/cns!D2AD9BF23E9ED5EA!402.trak
引用此项的网络日志