hibernate crash under Windows 2008

My scsiport driver is causing a crash on hibernate under Windows 2008
(x86… don’t know about x64). It talks to Xen so it isn’t exactly
standard scsiport and I’m inclined to think that it’s well overdue for a
rewrite to storport anyway, but maybe the fix is simple?

The stack trace is:

nt!KiTrap0E+0x2cf
nt!memcpy+0x33
hal!HalpCopyBufferMap+0xb2
hal!IoFlushAdapterBuffers+0xac
hiber_diskdump+0x3194 (?)
hiber_XenVbd+0x16d9 (call to ScsiPortInitialize)

And I assume that IoFlushAdapterBuffers is trying to flush some
non-existent DMA adapter. Can anyone suggest why it might do that and/or
why doing that might cause it to crash?

Thanks

James

Maybe it’s assuming you’re doing legacy DMA? Check what DMA attributes you have. You may want to have MapBuffers set to TRUE. Or Master set to FALSE.

And dump works correctly on the same platform?

Mark Roddy

On Thu, Jan 13, 2011 at 6:32 AM, James Harper
wrote:
> My scsiport driver is causing a crash on hibernate under Windows 2008
> (x86… don’t know about x64). It talks to Xen so it isn’t exactly
> standard scsiport and I’m inclined to think that it’s well overdue for a
> rewrite to storport anyway, but maybe the fix is simple?
>
> The stack trace is:
>
> nt!KiTrap0E+0x2cf
> nt!memcpy+0x33
> hal!HalpCopyBufferMap+0xb2
> hal!IoFlushAdapterBuffers+0xac
> hiber_diskdump+0x3194 (?)
> hiber_XenVbd+0x16d9 (call to ScsiPortInitialize)
>
> And I assume that IoFlushAdapterBuffers is trying to flush some
> non-existent DMA adapter. Can anyone suggest why it might do that and/or
> why doing that might cause it to crash?
>
> Thanks
>
> James
>
> —
> NTDEV is sponsored by OSR
>
> For our schedule of WDF, WDM, debugging and other seminars visit:
> http://www.osr.com/seminars
>
> To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer
>

>

And dump works correctly on the same platform?

Yes, dump works fine.

James

The IoFlushAdapterBuffers routine is obsolete and exported only to support existing drivers. See FlushAdapterBuffers instead.

What is the Build Environments?

USE:-
The FlushAdapterBuffers routine flushes any data remaining in the system DMA controller’s internal cache or in a bus-master adapter’s internal cache at the end of a DMA transfer operation.
BOOLEAN
FlushAdapterBuffers(
IN PDMA_ADAPTER DmaAdapter,
IN PMDL Mdl,
IN PVOID MapRegisterBase,
IN PVOID CurrentVa,
IN ULONG Length,
IN BOOLEAN WriteToDevice
);

>

The IoFlushAdapterBuffers routine is obsolete and exported only to
support
existing drivers. See FlushAdapterBuffers instead.

What is the Build Environments?

USE:-
The FlushAdapterBuffers routine flushes any data remaining in the
system DMA
controller’s internal cache or in a bus-master adapter’s internal
cache at the
end of a DMA transfer operation.
BOOLEAN
FlushAdapterBuffers(
IN PDMA_ADAPTER DmaAdapter,
IN PMDL Mdl,
IN PVOID MapRegisterBase,
IN PVOID CurrentVa,
IN ULONG Length,
IN BOOLEAN WriteToDevice
);

Build environment is Windows 2008 32 bit. FlushAdapterBuffers is being
called by hiber, not by me.

James