[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [tyndur-devel] [PATCH 1/3] kernel2: SHM-Funktionen bekommen Prozess als Parameter
On Fri, Jan 01, 2010 at 03:37:39PM +0100, Antoine Kaufmann wrote:
> On Fri, Jan 01 14:58, Kevin Wolf wrote:
> > * kernel2: Bis jetzt haben die SHM-Funktionen immer angenommen, dass
> > fuer den aktuellen Prozess geoeffnet/geschlossen wird. Den Prozess
> > wird jetzt als Parameter uebergeben.
> >
> > Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
> > ---
> > src/kernel2/include/mm.h | 4 ++--
> > src/kernel2/include/tasks.h | 2 +-
> > src/kernel2/src/arch/i386/gdt.c | 1 +
> > src/kernel2/src/mm/shm.c | 13 +++++++------
> > src/kernel2/src/syscalls/pm.c | 1 +
> > src/kernel2/src/syscalls/rpc.c | 1 +
> > src/kernel2/src/syscalls/shm.c | 4 ++--
> > src/kernel2/src/tasks/pm.c | 1 +
> > 8 files changed, 16 insertions(+), 11 deletions(-)
> >
> > diff --git a/src/kernel2/include/mm.h b/src/kernel2/include/mm.h
> > index 0144aca..617713c 100644
> > --- a/src/kernel2/include/mm.h
> > +++ b/src/kernel2/include/mm.h
> > @@ -140,10 +140,10 @@ void shm_init(void);
> > uint32_t shm_create(size_t size);
> >
> > /// Bestehenden Shared Memory oeffnen.
> > -void* shm_attach(uint32_t id);
> > +void* shm_attach(pm_process_t* process, uint32_t id);
> >
> > /// Shared Memory schliessen.
> > -void shm_detach(uint32_t id);
> > +void shm_detach(pm_process_t* process, uint32_t id);
> >
> > #endif
> >
> > diff --git a/src/kernel2/include/tasks.h b/src/kernel2/include/tasks.h
> > index 1aedbec..c8370f4 100644
> > --- a/src/kernel2/include/tasks.h
> > +++ b/src/kernel2/include/tasks.h
> > @@ -39,7 +39,7 @@
> > #include <types.h>
> > #include <collections.h>
> >
> > -#include "mm.h"
> > +#include "mm_arch.h"
> > #include "lock.h"
> >
> > #define PM_STATUS_READY 0
> > diff --git a/src/kernel2/src/arch/i386/gdt.c b/src/kernel2/src/arch/i386/gdt.c
> > index e42c973..3dcdd3b 100644
> > --- a/src/kernel2/src/arch/i386/gdt.c
> > +++ b/src/kernel2/src/arch/i386/gdt.c
> > @@ -35,6 +35,7 @@
> >
> > #include <types.h>
> >
> > +#include "mm.h"
> > #include "cpu.h"
> > #include "lock.h"
> >
> > diff --git a/src/kernel2/src/mm/shm.c b/src/kernel2/src/mm/shm.c
> > index 67b4831..d05de0e 100644
> > --- a/src/kernel2/src/mm/shm.c
> > +++ b/src/kernel2/src/mm/shm.c
> > @@ -94,11 +94,12 @@ uint32_t shm_create(size_t size)
> > /**
> > * Bestehenden Shared Memory oeffnen.
> > *
> > + * @param process Prozess, der den Shared Memory oeffnet
> > * @param id ID des zu oeffnenden Shared Memory
> > * @return Virtuelle Adresse des geoeffneten Shared Memory; NULL, wenn der
> > * Shared Memory mit der angegebenen ID nicht existiert.
> > */
> > -void* shm_attach(uint32_t id)
> > +void* shm_attach(pm_process_t* process, uint32_t id)
> > {
> > struct shm_desc* shm = tree_search(shms, id);
> > void* ret;
> > @@ -115,7 +116,7 @@ void* shm_attach(uint32_t id)
> > } else {
> > // Ansonsten Mapping von einem anderen Prozess uebernehmen
> > struct shm_process* first = list_get_element_at(shm->processes, 0);
> > - ret = mmc_automap_user(&mmc_current_context(),
> > + ret = mmc_automap_user(&process->context,
> > &first->process->context, first->vaddr, shm->num_pages,
> > MM_USER_START, MM_USER_END, MM_FLAGS_USER_DATA);
> > }
> > @@ -125,7 +126,7 @@ void* shm_attach(uint32_t id)
> > }
> >
> > shm_proc = calloc(1, sizeof(*shm_proc));
> > - shm_proc->process = current_process;
> > + shm_proc->process = process;
> > shm_proc->vaddr = ret;
> > list_push(shm->processes, shm_proc);
> >
> > @@ -136,13 +137,13 @@ void* shm_attach(uint32_t id)
> > * Shared Memory schliessen. Wenn keine Prozesse den Shared Memory mehr
> > * geoeffnet haben, wird er geloescht.
> > *
> > + * @param process Prozess, der den Shared Memory schliesst
> > * @param id ID des zu schliessenden Shared Memory
> > */
> > -void shm_detach(uint32_t id)
> > +void shm_detach(pm_process_t* process, uint32_t id)
> > {
> > struct shm_desc* shm = tree_search(shms, id);
> > struct shm_process* shm_proc;
> > - pm_process_t* current_proc = current_process;
> > int i;
> >
> > if (shm == NULL) {
> > @@ -150,7 +151,7 @@ void shm_detach(uint32_t id)
> > }
> >
> > for (i = 0; (shm_proc = list_get_element_at(shm->processes, i)); i++) {
> > - if (shm_proc->process == current_proc) {
> > + if (shm_proc->process == process) {
> > list_remove(shm->processes, i);
> > goto found;
> > }
> > diff --git a/src/kernel2/src/syscalls/pm.c b/src/kernel2/src/syscalls/pm.c
> > index 8826a50..486b030 100644
> > --- a/src/kernel2/src/syscalls/pm.c
> > +++ b/src/kernel2/src/syscalls/pm.c
> > @@ -39,6 +39,7 @@
> >
> > #include "syscall.h"
> > #include "syscall_structs.h"
> > +#include "mm.h"
> > #include "tasks.h"
> > #include "cpu.h"
> >
> > diff --git a/src/kernel2/src/syscalls/rpc.c b/src/kernel2/src/syscalls/rpc.c
> > index 3c51ec6..515ad80 100644
> > --- a/src/kernel2/src/syscalls/rpc.c
> > +++ b/src/kernel2/src/syscalls/rpc.c
> > @@ -41,6 +41,7 @@
> >
> > #include "kernel.h"
> > #include "syscall.h"
> > +#include "mm.h"
> > #include "tasks.h"
> > #include "cpu.h"
> > #include "im.h"
> > diff --git a/src/kernel2/src/syscalls/shm.c b/src/kernel2/src/syscalls/shm.c
> > index c3aed63..0892622 100644
> > --- a/src/kernel2/src/syscalls/shm.c
> > +++ b/src/kernel2/src/syscalls/shm.c
> > @@ -56,7 +56,7 @@ uint32_t syscall_shm_create(size_t size)
> > */
> > void* syscall_shm_attach(uint32_t id)
> > {
> > - return shm_attach(id);
> > + return shm_attach(current_process, id);
> > }
> >
> > /**
> > @@ -67,6 +67,6 @@ void* syscall_shm_attach(uint32_t id)
> > */
> > void syscall_shm_detach(uint32_t id)
> > {
> > - shm_detach(id);
> > + shm_detach(current_process, id);
> > }
> >
> > diff --git a/src/kernel2/src/tasks/pm.c b/src/kernel2/src/tasks/pm.c
> > index e5c4b9f..8dc8f2b 100644
> > --- a/src/kernel2/src/tasks/pm.c
> > +++ b/src/kernel2/src/tasks/pm.c
> > @@ -39,6 +39,7 @@
> > #include <string.h>
> > #include <collections.h>
> >
> > +#include "mm.h"
> > #include "tasks.h"
> > #include "lock.h"
> > #include "timer.h"
>
> Was haben denn die ganzen include-Änderungen hier zu suchen?
mm.h und tasks.h haben sich bisher gegenseitig eingebunden, obwohl task.h
eigentlich nur mm_arch.h braucht. Das Ergebnis war halt, dass wenn
tasks.h zuerst eingebunden wird, das #include "tasks.h" in mm.h nichts
gebracht hat und pm_process_t undefiniert war.
Sollte ich vielleicht noch in die Commitlog aufnehmen.
>
> Aber sonst sieht das vernünfig aus.
> Acked-by: Antoine Kaufmann <toni@xxxxxxxxxx>
>
> --
> Antoine Kaufmann
> <toni@xxxxxxxxxxxxxxxx>
> _______________________________________________
> tyndur-devel mailing list
> tyndur-devel@xxxxxxxxxx
> http://list.tyndur.org/mailman/listinfo/tyndur-devel