From 3b13c9e15e84e6a84c4c5b8a376cb4b5528b475c Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 10 Apr 2011 19:41:46 +0200 Subject: Fix magic link with gold * trans/Makefile (magic): Link against libiohelp. --- trans/Makefile | 1 + 1 file changed, 1 insertion(+) (limited to 'trans') diff --git a/trans/Makefile b/trans/Makefile index 8eb6c78e..4e6a22dd 100644 --- a/trans/Makefile +++ b/trans/Makefile @@ -46,6 +46,7 @@ proxy-defpager crash password streamio: ../libthreads/libthreads.a ../libports/l fifo new-fifo: ../libpipe/libpipe.a fwd: ../libfshelp/libfshelp.a ../libports/libports.a hello-mt magic null ifsock fifo new-fifo firmlink: ../libtrivfs/libtrivfs.a ../libfshelp/libfshelp.a ../libthreads/libthreads.a ../libports/libports.a ../libihash/libihash.a +magic: ../libiohelp/libiohelp.a hello: ../libtrivfs/libtrivfs.a ../libfshelp/libfshelp.a ../libports/libports.a ../libihash/libihash.a fakeroot: ../libnetfs/libnetfs.a ../libfshelp/libfshelp.a ../libiohelp/libiohelp.a ../libthreads/libthreads.a ../libports/libports.a ../libihash/libihash.a $(targets): ../libshouldbeinlibc/libshouldbeinlibc.a -- cgit v1.2.3 From 0162d565bf9b48d8ee33406f2f1d65c05c37fe88 Mon Sep 17 00:00:00 2001 From: Maksym Planeta Date: Sun, 20 Nov 2011 09:41:59 +0100 Subject: Fix defpager into using the correct control port The reply_port is only the correct control port when RPCs are from the kernel, not from e.g. tmpfs, such as default_pager_object_set_size calls. * mach-defpager/default_pager.c (seqnos_memory_object_terminate, S_default_pager_object_set_size): Make default pager use its own memory object control ports for external objects, remove reply_to parameter. * trans/proxy-defpager.c (S_default_pager_object_set_size): Remove reply_to parameter. * hurd/default_pager.defs (default_pager_object_set_size): Remove unused parameter. --- hurd/default_pager.defs | 1 - mach-defpager/default_pager.c | 9 ++++++--- trans/proxy-defpager.c | 1 - 3 files changed, 6 insertions(+), 5 deletions(-) (limited to 'trans') diff --git a/hurd/default_pager.defs b/hurd/default_pager.defs index 7b1549a0..8ad82dcc 100644 --- a/hurd/default_pager.defs +++ b/hurd/default_pager.defs @@ -91,6 +91,5 @@ routine default_pager_paging_storage( will fail. */ routine default_pager_object_set_size( memory_object : mach_port_t; - sreplyport reply_port : mach_port_send_once_t; msgseqno seqno : mach_port_seqno_t; object_size_limit : vm_size_t); diff --git a/mach-defpager/default_pager.c b/mach-defpager/default_pager.c index 5944e4eb..82619b4b 100644 --- a/mach-defpager/default_pager.c +++ b/mach-defpager/default_pager.c @@ -2500,6 +2500,8 @@ ddprintf ("seqnos_memory_object_terminate <%p>: pager_port_lock: <%p>[s:%d,r:%d, pager_port_wait_for_refs(ds); + if (ds->external) + pager_request = ds->pager_request; ds->pager_request = MACH_PORT_NULL; request_refs = ds->request_refs; ds->request_refs = 0; @@ -2515,6 +2517,8 @@ ddprintf ("seqnos_memory_object_terminate <%p>: pager_port_unlock: <%p>[s:%d,r:% * Now we deallocate our various port rights. */ + kr = mach_port_get_refs(default_pager_self, pager_request, + MACH_PORT_RIGHT_SEND, &request_refs); kr = mach_port_mod_refs(default_pager_self, pager_request, MACH_PORT_RIGHT_SEND, -request_refs); if (kr != KERN_SUCCESS) @@ -3724,7 +3728,6 @@ S_default_pager_object_pages (mach_port_t pager, kern_return_t S_default_pager_object_set_size (mach_port_t pager, - mach_port_t reply_to, mach_port_seqno_t seqno, vm_size_t limit) { @@ -3736,7 +3739,7 @@ S_default_pager_object_set_size (mach_port_t pager, return KERN_INVALID_ARGUMENT; pager_port_lock(ds, seqno); - pager_port_check_request(ds, reply_to); + pager_port_check_request(ds, ds->pager_request); pager_port_wait_for_readers(ds); pager_port_wait_for_writers(ds); @@ -3760,7 +3763,7 @@ S_default_pager_object_set_size (mach_port_t pager, VM_PROT_ALL, ds->pager); if (kr != KERN_SUCCESS) panic ("memory_object_lock_request: %d", kr); - ds->lock_request = reply_to; + ds->lock_request = ds->pager_request; kr = MIG_NO_REPLY; } else diff --git a/trans/proxy-defpager.c b/trans/proxy-defpager.c index cda79592..0a5ab65e 100644 --- a/trans/proxy-defpager.c +++ b/trans/proxy-defpager.c @@ -107,7 +107,6 @@ S_default_pager_paging_storage (mach_port_t default_pager, kern_return_t S_default_pager_object_set_size (mach_port_t memory_object, - mach_port_t reply_port, mach_port_seqno_t seqno, vm_size_t object_size_limit) { -- cgit v1.2.3 From a9dae4d97b82b35ba3e03960255b605b260d1208 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 28 Nov 2011 11:20:12 +0100 Subject: Fix select on pfinet tunnel and streamio * pfinet/tunnel.c (trivfs_S_io_select): Do not return EINVAL on SELECT_URG. * trans/streamio.c (trivfs_S_io_select): Likewise. --- pfinet/tunnel.c | 3 +-- trans/streamio.c | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) (limited to 'trans') diff --git a/pfinet/tunnel.c b/pfinet/tunnel.c index c4f95804..ec96861a 100644 --- a/pfinet/tunnel.c +++ b/pfinet/tunnel.c @@ -469,8 +469,7 @@ trivfs_S_io_select (struct trivfs_protid *cred, tdev = (struct tunnel_device *) cred->po->cntl->hook; /* We only deal with SELECT_READ here. */ - if (*type & ~SELECT_READ) - return EINVAL; + *type &= SELECT_READ; if (*type == 0) return 0; diff --git a/trans/streamio.c b/trans/streamio.c index 0faa8a3e..c563c03c 100644 --- a/trans/streamio.c +++ b/trans/streamio.c @@ -554,8 +554,7 @@ trivfs_S_io_select (struct trivfs_protid *cred, if (!(cred->po->openmodes & O_WRITE) && (*type & SELECT_WRITE)) return EBADF; - if (*type & ~(SELECT_READ | SELECT_WRITE)) - return EINVAL; + *type &= SELECT_READ | SELECT_WRITE; if (*type == 0) return 0; -- cgit v1.2.3