physio() seems to be aware of the possibility that it might be called to do I/O to kernel memory, yet it sets the B_PHYS flag regardless. This means that when the request hits the I/O kit in dkreadwrite, IOMemoryDescriptor::withAddress() will get called with the user task instead of the kernel task. The result is a failure in IOGeneralMemoryDescriptor::prepare(). I'm currently circumventing this behaviour with a hack. If it's UIO_SYSSPACE I mark the buffer in some way, then when my strategy routine is called I check for the mark and clear the B_PHYS flag. This works, but I'm curious to know if there's a better way. Sam _______________________________________________ darwin-kernel mailing list | darwin-kernel@lists.apple.com Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/darwin-kernel Do not post admin requests to the list. They will be ignored.