Windows NT provides more mature support for device driver development than Linux. NT has complete documentation, many example sources, and a good kernel debugger to work with. Linux lacks good documentation of device driver support. So we had to study existing device drivers and kernel source code. Further, we had to modify the kernel source to export more symbols that were needed for the VMMC device driver module.
Since we do not have NT kernel source code, sometimes it is difficult to pinpoint bugs in the driver.
NT supports SMP and provides a set of kernel primitives to support thread synchronization. However, they can not be used in all places, ie. interrupt handler, kernel DPC handler, and device IOCTL can use different subset of primitives. It took us some time to figure out which primitives to use.
Much of the porting effort was focused on making VMMC thread-safe to take advantage of NT's kernel threads. For example, our Linux SVM system used multiple processes on each SMP, while our newer NT SVM uses a single process with multiple kernel threads. Using kernel threads resulted in a significant performance improvement for SVM on VMMC.