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

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



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?

> +    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?

> +    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. ;-)

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpOnkwkcXrp9.pgp
Description: PGP signature