nonecd
驱动牛犊
驱动牛犊
  • 注册日期2006-08-09
  • 最后登录2010-09-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望54点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2176回复:3

请教多核cpu的同步问题

楼主#
更多 发布于:2008-12-31 12:49
驱动在单核cpu的机器上运行没有问题,但是在双cpu上会崩溃,dump信息如下:
IRQL_NOT_LESS_OR_EQUAL (a)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 0000ffdf, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000001, bitfield :
    bit 0 : value 0 = read operation, 1 = write operation
    bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 806e5a8e, address which referenced memory

Debugging Details:
------------------




WRITE_ADDRESS:  0000ffdf

CURRENT_IRQL:  2

FAULTING_IP:
hal!KeAcquireQueuedSpinLock+42
806e5a8e 8902            mov     dword ptr [edx],eax

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xA

PROCESS_NAME:  Idle

LAST_CONTROL_TRANSFER:  from 804efdb4 to 806e5a8e

STACK_TEXT:  
805512bc 804efdb4 805512e0 ba92ace0 805512dc hal!KeAcquireQueuedSpinLock+0x42
805512c4 ba92ace0 805512dc 80551308 ba18c952 nt!IoAcquireCancelSpinLock+0xe
805512e0 80502717 89c1f344 89c1f0f8 91d0f6a0 serial!SerialIntervalReadTimeout+0x13
805513fc 80502833 8055c0a0 ffdff9c0 ffdff000 nt!KiTimerListExpire+0x14b
80551428 805460df 8055c4a0 00000000 0000ea7e nt!KiTimerExpiration+0xb1
80551440 8055be40 ffdffc50 00000000 8055be40 nt!KiRetireDpcList+0x61
80551450 80545fc4 00000000 0000000e 00000000 nt!KiIdleThread0
80551454 00000000 0000000e 00000000 00000000 nt!KiIdleLoop+0x28


STACK_COMMAND:  kb

FOLLOWUP_IP:
serial!SerialIntervalReadTimeout+13
ba92ace0 8b750c          mov     esi,dword ptr [ebp+0Ch]

SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  serial!SerialIntervalReadTimeout+13

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: serial

IMAGE_NAME:  serial.sys

不是每次都是相同的函数调用栈,但是最后导致崩溃的地址都在hal!KeAcquireQueuedSpinLock+0x42这里。
请问,在多核的情况下,同步过程,应该注意哪些问题呢??谢谢~
tqijin
驱动小牛
驱动小牛
  • 注册日期2006-07-04
  • 最后登录2013-11-21
  • 粉丝3
  • 关注0
  • 积分31分
  • 威望1060点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2009-01-19 20:00
其实就三个字 自旋锁
驱动在单核cpu的机器上运行没有问题,但是在双cpu上会崩溃,
这个问题我刚经历过来,痛苦啊
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-03-18 17:46
你用WINDBG打开DMP之前,先加载PDB文件,这样就可以看到源代码是第几行有错了。
woshixu6119296
驱动牛犊
驱动牛犊
  • 注册日期2008-07-18
  • 最后登录2009-12-01
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望26点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-11-05 22:39
楼主遇到的问题解决了吗,我也遇到同样的问题,不知道楼主是怎么解决的?
游客

返回顶部