阅读:2514回复:10
【passthru】进入PtReceive/PtReceivePacket后会被别的进程中断吗
好像ptreceive/ptreceivepacket是在dispatch level吧,我在passthru里设了个时钟,用NdisMSetPeriodicTimer设的,每秒调用一次回调函数timerfunc。我现在在timerfunc和ptreceive/ptreceivepacket里面使用了同步代码(不是spinlock),程序运行没有问题,现在为了加快速度,我想去掉同步代码,不知道会不会有问题?
|
|
沙发#
发布于:2003-06-15 21:32
用户被禁言,该主题自动屏蔽! |
|
板凳#
发布于:2003-06-16 17:41
我做的同步是用NDIS_EVENT做的一个互斥量,以前用的fastmutex好像会出错。现在为了提高驱动的效率,我想把同步代码去掉。我觉得如果ptreceive里面都会被中断的话,那简直没天理啦 :D
|
|
地板#
发布于:2003-06-16 22:04
我做的同步是用NDIS_EVENT做的一个互斥量,以前用的fastmutex好像会出错。现在为了提高驱动的效率,我想把同步代码去掉。我觉得如果ptreceive里面都会被中断的话,那简直没天理啦 :D 我用SOFTICE跟过无数次,从来没有被中断过了 按照我的理解ptreceive这样的函数应该是一个线程吧,线程会在运行中被同级的线程抢先吗? 答案是?Y/N? 我都糊涂了 |
|
|
地下室#
发布于:2003-06-16 22:06
好像ptreceive/ptreceivepacket是在dispatch level吧,我在passthru里设了个时钟,用NdisMSetPeriodicTimer设的,每秒调用一次回调函数timerfunc。我现在在timerfunc和ptreceive/ptreceivepacket里面使用了同步代码(不是spinlock),程序运行没有问题,现在为了加快速度,我想去掉同步代码,不知道会不会有问题? 能不能把你的代码帖出来看看,或者发给我? :D 我想看看啊 |
|
|
5楼#
发布于:2003-06-16 22:08
1、在单CPU的机器上不会有问题。
2、在多CPU的机器上会出问题。条件:邦定两个Adapter以上时。 祝好运。 |
|
6楼#
发布于:2003-06-16 22:13
1、在单CPU的机器上不会有问题。 能解释一下吗?》 |
|
|
7楼#
发布于:2003-06-16 23:59
用户被禁言,该主题自动屏蔽! |
|
8楼#
发布于:2003-06-17 09:03
在多处理器、多网卡的时候,Ptreceive是可以重入的。
原因: 1、每个网卡都可以有一个中断处理程序来回调PtReceive 2、每个CPU都可以接受一个中断。 |
|
9楼#
发布于:2003-06-17 16:04
这个是用ndis_event做的互斥量,因为用fastmutex好像有问题
#if NDIS_WDM typedef struct _NDIS_MUTEX { NDIS_EVENT ndisEvent; }NDIS_MUTEX, *PNDIS_MUTEX; #define InitializeNDISMutex( mutex ) NdisInitializeEvent( &mutex.ndisEvent ); NdisSetEvent( &mutex.ndisEvent ) #define AcquireNDISMutex( mutex ) NdisWaitEvent( &mutex.ndisEvent, 0 ) #define ReleaseNDISMutex( mutex ) NdisSetEvent( &mutex.ndisEvent ) #endif 然后用NdisMInitializeTimer建立时钟,NdisMSetPeriodicTimer设置一秒一次。 然后就在ptreceivepacket和timerfunc里使用上面的同步量了。主要执行每秒一次的清理工作 好像ptreceivepacket和timerfunc都工作在dispatch level,那么这样应该不会被中断吧? 如果工作在两个cpu模式下,我也觉得需要同步量。不过不知道2000内核或者xp内核对于双cpu的支持是怎样的?我听说大多的软件都要增加为多处理器优化的代码,那ndis这层还需要增加吗?我觉得如果它内核不支持的话也没办法为多处理器优化了 谢谢楼上的讨论,等了好久了 :P |
|
10楼#
发布于:2008-05-24 19:31
我也遇到这个问题了,我做了一下测试,很简单,就是定义个全局变量,在PtReceive里对其自增1,而在定时器里把它置0, 结果会蓝屏!!我用的同步机制是自旋锁。
|
|
|