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

Re: [tyndur-devel] [Lost] [PATCH v2 08/10] kernel2: Syscall mem_allocate_physical



On Sat, Dec 20 23:49, Kevin Wolf wrote:
> + kernel2: Syscall syscall_mem_allocate_physical
> ---
>  src/kernel2/include/syscall.h  |    4 ++++
>  src/kernel2/src/syscall.c      |    2 ++
>  src/kernel2/src/syscalls/mem.c |   33 +++++++++++++++++++++++++++++++++
>  3 files changed, 39 insertions(+), 0 deletions(-)
> 
> diff --git a/src/kernel2/include/syscall.h b/src/kernel2/include/syscall.h
> index 160cbf3..05715a3 100644
> --- a/src/kernel2/include/syscall.h
> +++ b/src/kernel2/include/syscall.h
> @@ -77,6 +77,10 @@ void syscall_init();
>  /// Einen Speicherblock allokieren.
>  vaddr_t syscall_mem_allocate(size_t bytes, syscall_arg_t flags, paddr_t* phys);
>  
> +/// Physischen Speicher mappen
> +vaddr_t syscall_mem_allocate_physical(
> +    size_t bytes, paddr_t position, syscall_arg_t flags);
> +
>  /// Einen Speicherblock freigeben
>  void syscall_mem_free(vaddr_t start, size_t bytes);
>  
> diff --git a/src/kernel2/src/syscall.c b/src/kernel2/src/syscall.c
> index 1749c7e..58c82de 100644
> --- a/src/kernel2/src/syscall.c
> +++ b/src/kernel2/src/syscall.c
> @@ -49,6 +49,8 @@ syscall_t syscalls[SYSCALL_MAX];
>  void syscall_init()
>  {
>      syscall_register(SYSCALL_MEM_ALLOCATE, &syscall_mem_allocate, 3);
> +    syscall_register(SYSCALL_MEM_ALLOCATE_PHYSICAL,
> +            &syscall_mem_allocate_physical, 3);
>      syscall_register(SYSCALL_MEM_FREE, &syscall_mem_free, 2);
>  
>      syscall_register(SYSCALL_PM_GET_PID, (void*) &syscall_pm_get_pid, 0);
> diff --git a/src/kernel2/src/syscalls/mem.c b/src/kernel2/src/syscalls/mem.c
> index bd41073..91457da 100644
> --- a/src/kernel2/src/syscalls/mem.c
> +++ b/src/kernel2/src/syscalls/mem.c
> @@ -74,6 +74,39 @@ vaddr_t syscall_mem_allocate(size_t bytes, syscall_arg_t flags, paddr_t* phys)
>  }
>  
>  /**
> + * Einen Speicherblock an bekannter physischer Adresse mappen.
> + *
> + * @param bytes Groesse des Speicherblocks
> + * @param position Physische Adresse des Speicherblocks
> + * @param flags Unbenutzt
> + *
> + * @return Virtuelle Adresse des Blocks
> + *
> + * --- TODO laut Mail von Freaky ---
> + * Hm k??nnten wir hier vielleicht noch irgendwas einbauen um sicher zu

Sind hier meine oder deine oder gar keine Umlaute kaputt? ;-)

> + * gehen, dass sie dass diese Blocks in der physischen Speicherverwaltung
> + * reserviert sind? Ok, jo sie _sollten_ in der Memory-Map reserviert
> + * sein, aber irgendwie weiss ich nicht so recht ob wir da nicht besser auf
> + * nummer sicher gehen sollten...
> + *
> + * Das andere Problem w??re SMU wenn ich den Treiber versehtentlich mehrmals
> + * starte,oder sogar 2 verschiedene Treiber habe, die gerne den selben
> + * Speicherbereich h??tten?
> + *
> + * Aber weit schlimmer k??nnte das ausgehen, wenn der Prozess sich beendet,
> + * oder beendet wird. Dann wird der Speicher doch physisch freigegeben?
> + * --- Ende des TODO ---
> + */
> +vaddr_t syscall_mem_allocate_physical(
> +    size_t bytes, paddr_t position, syscall_arg_t flags)
> +{
> +    size_t page_count = NUM_PAGES(PAGE_ALIGN_ROUND_UP(bytes));
> +
> +    return mmc_automap(&mmc_current_context(), position, page_count,
> +        USER_MEM_START, USER_MEM_END, MM_FLAGS_USER_DATA);
> +}
> +
> +/**
>   * Einen Speicherbereich freigeben
>   *
>   * @param start Startadresse des Bereichs

Schieb rein.

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpUlvHhlE_R3.pgp
Description: PGP signature