Re: gnumach 1.3 release
Marcus Brinkmann <[email protected]>
| Newsgroups | gmane.os.hurd.devel.readers |
|---|---|
| Message-ID | <[email protected]> |
On Wed, May 22, 2002 at 08:11:45PM -0400, Roland McGrath wrote: > Will it work and be the right > thing for that tarball to be the debian source tarball too? It includes > the debian subdir. I guess that needs a new entry in changelog if nothing > else. Yes, that is all that is required, except for: > Oh, hmm, I guess there is that "cdromlock" patch, whatever that was. It unlocks the cdrom door when the device is closed. Very useful, but we don't have an assignment for it and it is more than a few lines of code. Furthermore, it will not be necessary for gnumach 2.0. I have applied the patch. > Please give that a whirl and when > someone says go, I will make the 1.3 release. Building right now. Thanks, Marcus -- `Rhubarb is no Egyptian god.' Debian http://www.debian.org [email protected] Marcus Brinkmann GNU http://www.gnu.org [email protected] [email protected] http://www.marcus-brinkmann.de
cdromlock
(text/plain, 2.8 KB)
From: Alexey Dejneka <[email protected]> Subject: CD-ROM lock Date: Wed, 08 Nov 2000 11:33:42 +0300 Message-ID: <[email protected]> diff -ru g/i386/i386at/i386at_ds_routines.c gnumach-1.2/i386/i386at/i386at_ds_routines.c --- g/i386/i386at/i386at_ds_routines.c Mon Jun 21 20:59:22 1999 +++ gnumach-1.2/i386/i386at/i386at_ds_routines.c Sun Nov 26 03:40:36 2000 @@ -229,7 +229,8 @@ mach_no_senders_notification_t *ns; ns = (mach_no_senders_notification_t *) msg; - dev = (device_t) ns->not_header.msgh_remote_port; + dev = (device_t) ((ipc_port_t) ns->not_header.msgh_remote_port) + -> ip_kobject; if (dev->emul_ops->no_senders) (*dev->emul_ops->no_senders) (ns); return TRUE; diff -ru g/linux/dev/glue/block.c gnumach-1.2/linux/dev/glue/block.c --- g/linux/dev/glue/block.c Fri Sep 29 20:22:27 2000 +++ gnumach-1.2/linux/dev/glue/block.c Sun Nov 26 03:40:36 2000 @@ -797,6 +797,7 @@ extern struct device_emulation_ops linux_block_emulation_ops; static io_return_t device_close (void *); +static io_return_t device_close_forced (void *, int); /* Return a send right for block device BD. */ static ipc_port_t @@ -1172,6 +1173,7 @@ { ipc_kobject_set (bd->port, IKO_NULL, IKOT_NONE); ipc_port_dealloc_kernel (bd->port); + *devp = IP_NULL; } kfree ((vm_offset_t) bd, sizeof (struct block_data)); bd = NULL; @@ -1182,18 +1184,16 @@ bd->open_count = 1; bd->next = open_list; open_list = bd; + *devp = &bd -> device; } - if (IP_VALID (reply_port)) - ds_device_open_reply (reply_port, reply_port_type, err, dev_to_port (bd)); - else if (! err) + if (!IP_VALID (reply_port) && ! err) device_close (bd); - - return MIG_NO_REPLY; + return err; } static io_return_t -device_close (void *d) +device_close_forced (void *d, int force) { struct block_data *bd = d, *bdp, **prev; struct device_struct *ds = bd->ds; @@ -1210,7 +1210,7 @@ } ds->busy = 1; - if (--bd->open_count == 0) + if (force || --bd->open_count == 0) { /* Wait for pending I/O to complete. */ while (bd->iocount > 0) @@ -1253,6 +1253,13 @@ return D_SUCCESS; } +static io_return_t +device_close (void *d) +{ + return device_close_forced (d, 0); +} + + #define MAX_COPY (VM_MAP_COPY_PAGE_LIST_MAX << PAGE_SHIFT) /* Check block BN and size COUNT for I/O validity @@ -1674,6 +1681,16 @@ return D_SUCCESS; } + +static void +device_no_senders (mach_no_senders_notification_t *ns) +{ + device_t dev; + + dev = (device_t) ((ipc_port_t) ns->not_header.msgh_remote_port) -> ip_kobject; + device_close_forced (dev->emul_data, 1); +} + struct device_emulation_ops linux_block_emulation_ops = { NULL, @@ -1689,7 +1706,7 @@ device_get_status, NULL, NULL, - NULL, + device_no_senders, NULL, NULL };