On Sat, Nov 01 23:18, Kevin Wolf wrote: > Am Samstag, 1. November 2008 22:56:03 schrieb Antoine Kaufmann: > > On Sat, Oct 25 23:05, Kevin Wolf wrote: > > > + kernel2: Shared Memory > > > diff --git a/src/kernel2/src/mm/shm.c b/src/kernel2/src/mm/shm.c > > > new file mode 100644 > > > index 0000000..b48defc > > > --- /dev/null > > > +++ b/src/kernel2/src/mm/shm.c > > > @@ -0,0 +1,171 @@ > > > ... > > > +struct shm_desc { > > > + uint64_t id; > > > > Aber unten werden immer nur 32-Bit Ids verwendet, oder sehe ich das > > falsch? > > Der Schlüssel ist bei AVL-Bäumen per definitionem 64 Bit lang. Es gab sogar > irgendeinen Grund, warum ich hier trotzdem nur 32 Bit davon verwende, aber er > fällt mir gerade nicht mehr ein... > > > > > > + struct tree_item tree_item; > > > + > > > + paddr_t paddr; > > > + size_t num_pages; > > > + list_t* processes; > > > +}; > > > ... > > > +uint32_t shm_create(size_t size) > > > +{ > > > + // FIXME Die Pages muessen nicht physisch zusammenhaengend sein > > > + paddr_t shm_phys = pmm_alloc(NUM_PAGES(size)); > > > + uint32_t id = ++shm_last_id; > > > + struct shm_desc* shm; > > > + > > > + while (tree_search(shms, id)) { > > > + id++; > > > + } > > > > Warum ist das denn notwendig? Müsste ++shm_last_id nicht sowieso noch > > frei sein? Und wie fängst du die mögliche Endlosschleife ab? *g* > Außer nach einem Overflow ja. > > > > + shm = calloc(1, sizeof(*shm)); > > > + shm->id = id; > > > + shm->num_pages = NUM_PAGES(size); > > > + shm->paddr = shm_phys; > > > + shm->processes = list_create(); > > > + > > > + tree_insert(shms, shm); > > > + > > > + return id; > > > +} > > >... > > > diff --git a/src/kernel2/src/tasks/pm.c b/src/kernel2/src/tasks/pm.c > > > index e47a11c..64a814c 100644 > > > --- a/src/kernel2/src/tasks/pm.c > > > +++ b/src/kernel2/src/tasks/pm.c > > > @@ -166,6 +166,8 @@ void pm_destroy(pm_process_t* process) > > > // TODO Die einzelnen Listenglieder freigeben > > > list_destroy(process->rpcs); > > > > > > + // TODO Alle SHMs freigeben > > > + > > > // Den Prozess aus der Liste entfernen > > > pm_process_t* _proc; > > > int i = 0; > > > > Das TODO ist aber nicht gerade schön... ;-) Aber jo wenn es tut, dann > > kann es zumindest mal rein. ;-) > > Tasks beenden ist in kernel2 sowieso noch total kaputt, glaube ich. Na dann. Ack. -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgpgDsnunf9aB.pgp
Description: PGP signature