On Sun, Dec 31, 2006 at 05:33:21PM +0100, Samuel Thibault wrote: > Well, I actually don't know much details about mach ports :) > > More specifically, I'm talking about an ipc_port_t, as used for instance > in linux/dev/glue/block.c in device_open() > > bd->port = ipc_port_alloc_kernel (); > > and just a few lines below, > > ipc_port_nsrequest (bd->port, 1, notify, ¬ify); > > which eventually calls ipc_notify_no_senders() which does > > n->not_header.msgh_remote_port = (mach_port_t) port; > > Hence casting ipc_port_t into mach_port_t, which later is converted to > device_t as I said: > > > > dev = (device_t) ns->not_header.msgh_remote_port;
ipc_mqueue_send_always(), which is called bye ipc_notify_no_senders(),
is a macro which calls ipc_mqueue_send() :
ipc_mqueue_send(kmsg, option, time_out)
ipc_kmsg_t kmsg;
mach_msg_option_t option;
mach_msg_timeout_t time_out;
{
ipc_port_t port;
port = (ipc_port_t) kmsg->ikm_header.msgh_remote_port;
A mach_port_t is actually a port name, a natural_t integer identifier for
a port in a port space. Maybe the kernel uses this property and considers
it can store the address of a port in a port name, to avoid a lookup ?
--
Richard Braun
signature.asc
Description: Digital signature
_______________________________________________ Bug-hurd mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-hurd
