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

Re: [Lost] [PATCH 2/2] kernel2: Shared Memory



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