bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNU Mach devices: no-sender notifications


From: Thomas Schwinge
Subject: GNU Mach devices: no-sender notifications
Date: Sun, 8 Apr 2007 13:06:25 +0200
User-agent: Mutt/1.5.11

Hello!

I think I don't really undestand the matter of no-sender notifications in
the GNU Mach device code.

All device glue codes (native Mach, Linux block and net and pcmcia) use
the following code sequence to request a no-sender notification:

#v+
  /*
   * Request no-senders notifications on device port.
   */
  notify = ipc_port_make_sonce(device->port);
  ip_lock(device->port);
  ipc_port_nsrequest(device->port, 1, notify, &notify);
#v-

(`device/ds_routines.c', `device_open', call to `ipc_port_nsrequest' as
one example.)

But then, in every emulation ops structure, the no-senders stuff is
essentially disabled again.  So, why are they doing this request in the
first place?

In `kern/ipc_kobject.c', `ipc_kobject_notify' we have...

#v+
  switch (ip_kotype(port)) {
    case IKOT_DEVICE:
    return ds_notify(request_header);
#v-

... where `ds_notify' again is in defined `device/ds_routines.c' and
essentially does the following:

#v+
  if (dev->emul_ops->no_senders)
    (*dev->emul_ops->no_senders) (ns);
#v-

... where this `no_senders' is simply NULL for all Linux drivers or the
following printf-noop-function for the Mach ones:

#v+
/*
 * Doesn't do anything (yet).
 */
static void
ds_no_senders(notification)
        mach_no_senders_notification_t *notification;
{
        printf("ds_no_senders called! device_port=0x%x count=%d\n",
               notification->not_header.msgh_remote_port,
               notification->not_count);
}
#v-

Do these no-sender notifications perhaps have some side effects
somewhere that I'm not yet aware about?

What also is strange is that in `device/conf.h''s `struct dev_ops' (which
is used for the Mach-native drivers) there is an element `d_port_death'
(to ``clean up reply ports'') which is also initialized in
`i386/i386at/conf.c', to `kdportdeath' or `comportdeath', for example,
but which will obviously never be called given the above `ds_no_senders'.


How can all this be explained?


Regards,
 Thomas

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]