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

Re: [tyndur-devel] [PATCH] Libc: p()/v() in Makros umgewandelt, die noch eine Barrier beinhalten



On Wed, Dec 09, 2009 at 07:52:41PM +0100, Antoine Kaufmann wrote:
> * Libc: p()/v() in Makros umgewandelt, die noch eine Barrier beinhalten,
>         die eigentlichen Funktionen wurden in syscall_p/v umbenannt.
> 
> Signed-off-by: Antoine Kaufmann <toni@xxxxxxxxxx>
> ---
>  src/kernel/src/init.c         |    4 ++--
>  src/kernel2/src/pv.c          |    4 ++--
>  src/lib/stdlibc/liballoc.c    |    8 ++++----
>  src/modules/include/syscall.h |    8 ++++++--
>  src/modules/lib/syscalls/pv.c |    4 ++--
>  5 files changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/src/kernel/src/init.c b/src/kernel/src/init.c
> index 58309ca..f8fd58d 100644
> --- a/src/kernel/src/init.c
> +++ b/src/kernel/src/init.c
> @@ -176,5 +176,5 @@ __attribute__((noreturn)) void panic(char * message, ...)
>      }
>  }
>  
> -void p(void) {}
> -void v(void) {}
> +void syscall_p(void) {}
> +void syscall_v(void) {}
> diff --git a/src/kernel2/src/pv.c b/src/kernel2/src/pv.c
> index fe79fe1..780c352 100644
> --- a/src/kernel2/src/pv.c
> +++ b/src/kernel2/src/pv.c
> @@ -1,4 +1,4 @@
>  // Das hier ist ein gemeiner Hack, damit es in den Locking-Funktionen von 
>  // liballoc keine nicht-aufgel?sten Symbole gibt.
> -void  __attribute__((weak)) p(void) {}
> -void  __attribute__((weak)) v(void) {}
> +void  __attribute__((weak)) syscall_p(void) {}
> +void  __attribute__((weak)) syscall_v(void) {}
> diff --git a/src/lib/stdlibc/liballoc.c b/src/lib/stdlibc/liballoc.c
> index c02892f..da125b3 100644
> --- a/src/lib/stdlibc/liballoc.c
> +++ b/src/lib/stdlibc/liballoc.c
> @@ -8,8 +8,8 @@
>  #define PREFIX(func)		func
>  
>  extern void* mem_allocate(dword size, dword flags);
> -extern void p(void);
> -extern void v(void);
> +extern void syscall_p(void);
> +extern void syscall_v(void);
>  extern void mem_free(void* address, dword size);
>  
>  /**  Durand's Amazing Super Duper Memory functions.  */
> @@ -114,14 +114,14 @@ static lock_t la_lock = 0;
>  static int liballoc_lock(void)
>  {
>  	//lock(&la_lock);
> -    p();
> +    syscall_p();
>  	return 0;
>  }
>  
>  static int liballoc_unlock(void)
>  {
>      //unlock(&la_lock);
> -    v();
> +    syscall_v();
>      return 0;
>  }
>  
> diff --git a/src/modules/include/syscall.h b/src/modules/include/syscall.h
> index 6bb3593..325e11c 100644
> --- a/src/modules/include/syscall.h
> +++ b/src/modules/include/syscall.h
> @@ -65,8 +65,12 @@ bool release_ports(dword port, dword length);
>  
>  void yield(void);
>  void wait_for_rpc(void);
> -void p(void);
> -void v(void);
> +void syscall_p(void);
> +void syscall_v(void);
> +
> +#define p() do { asm volatile (""); syscall_p(); } while (0)
> +#define v() do { asm volatile (""); syscall_v(); } while (0)

Ich würde ein __sync_synchronize() bevorzugen, wenn gcc schon solche
Builtins hat. Ansonsten wäre wohl zumindest ein asm("" ::: "memory")
angebracht, damit es auch wirklich wirkt.