Okay I found the problem.

WmCreateControlDevice is called but get an error after creating the device 
object, as a result the function calls to WdfObjectDelete to delete the control 
device.
Afterwards WmPowerD0Exit function is called. Since the DevList is empty it sets 
the destroy flag to true and then try to delete the device object. However this 
object already deleted and we got a BS

I think that the right fix is not delete it on error in WmCreateControlDevice, 
and always delete it in WmPowerD0Exit function

Sean what do you think.

BTW, if the winmad\winverb has debug print we can find the problem more easily 
without wasting too much time. Sean any objection to add debug print. If it's 
okay with you I will add it.

Uri
-----Original Message-----
From: Hefty, Sean [mailto:[email protected]] 
Sent: Thursday, November 18, 2010 6:16 PM
To: Uri Habusha; [email protected]; Smith, Stan
Subject: RE: Add Assert to debug BS while deleting WDF device

> It's SM 3.3.6 if I understand correctly it uses winmad

Stan, can you confirm this?

There is an issue in the code that I can see.  If during D0Entry, winmad fails 
to create the ControlDevice for some reason, then it will crash during D0Exit.  
Additional error handling or a couple of simple checks are needed to prevent 
this.

However, if opensm was using winmad at the time of the crash, then the 
ControlDevice must be valid.  If this is the case, then tracking down the 
problem is going to prove more difficult, and it may not be associated with the 
ControlDevice at all.  Possibly stack corruption, since WdfObjectDelete is 
called with a stack variable..?

- Sean
_______________________________________________
ofw mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw

Reply via email to