Integrated a bit differently, thanks!

Damien Zammit, le dim. 04 oct. 2026 03:44:56 +0000, a ecrit:
> TESTED: With MACH_LOCK_MON set to 1 in configfrag.ac
> 
> ---
>  kern/lock.h     | 22 +++++++++++++---------
>  kern/lock_mon.c | 22 +++++++++-------------
>  2 files changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/kern/lock.h b/kern/lock.h
> index 74f2e26e..226735f3 100644
> --- a/kern/lock.h
> +++ b/kern/lock.h
> @@ -59,12 +59,25 @@
>   */
>  
>  #include <machine/lock.h>/*XXX*/
> +
> +/*
> + *   A simple spin lock.
> + */
> +
> +struct slock {
> +     volatile natural_t lock_data;   /* in general 1 bit is sufficient */
> +     struct {} is_a_simple_lock;
> +};
> +
>  #if NCPUS > 1
>  #if MACH_LOCK_MON == 0
>  #define simple_lock_nocheck  _simple_lock
>  #define simple_lock_try_nocheck      _simple_lock_try
>  #define simple_unlock_nocheck        _simple_unlock
>  #else
> +extern void simple_lock(struct slock *l);
> +extern int simple_lock_try(struct slock *l);
> +extern void simple_unlock(struct slock *l);
>  #define simple_lock_nocheck  simple_lock
>  #define simple_lock_try_nocheck      simple_lock_try
>  #define simple_unlock_nocheck        simple_unlock
> @@ -73,15 +86,6 @@
>  
>  #define MACH_SLOCKS  ((NCPUS > 1) || MACH_LDEBUG)
>  
> -/*
> - *   A simple spin lock.
> - */
> -
> -struct slock {
> -     volatile natural_t lock_data;   /* in general 1 bit is sufficient */
> -     struct {} is_a_simple_lock;
> -};
> -
>  /*
>   *   Used by macros to assert that the given argument is a simple
>   *   lock.
> diff --git a/kern/lock_mon.c b/kern/lock_mon.c
> index edc8ae55..e4a933b9 100644
> --- a/kern/lock_mon.c
> +++ b/kern/lock_mon.c
> @@ -60,11 +60,11 @@ typedef unsigned int time_stamp_t;
>  /* in milliseconds */
>  #define      time_stamp (elapsed_ticks * 1000 / hz)
>  
> -#define LOCK_INFO_MAX             (1024*32)
> -#define LOCK_INFO_HASH_COUNT 1024
> -#define LOCK_INFO_PER_BUCKET (LOCK_INFO_MAX/LOCK_INFO_HASH_COUNT)
> -
> -#define HASH_LOCK(lock)      ((long)lock>>5 & (LOCK_INFO_HASH_COUNT-1))
> +#define LOCK_INFO_HASH_COUNT 1024
> +#define LOCK_INFO_BUCKET_BITS        5
> +#define LOCK_INFO_PER_BUCKET (1 << LOCK_INFO_BUCKET_BITS)
> +#define LOCK_INFO_MAX                (LOCK_INFO_HASH_COUNT << 
> LOCK_INFO_BUCKET_BITS)
> +#define HASH_LOCK(lock)              (((long)lock >> LOCK_INFO_BUCKET_BITS) 
> & (LOCK_INFO_HASH_COUNT-1))
>  
>  struct lock_info {
>       unsigned int    success;
> @@ -91,8 +91,7 @@ extern spl_t curr_ipl[];
>  
>  
>  struct lock_info *
> -locate_lock_info(lock)
> -decl_simple_lock_data(, **lock)
> +locate_lock_info(struct slock **lock)
>  {
>       struct lock_info *li =  &(lock_info[HASH_LOCK(*lock)].info[0]);
>       int i;
> @@ -112,8 +111,7 @@ decl_simple_lock_data(, **lock)
>  }
>  
>  
> -void simple_lock(lock)
> -decl_simple_lock_data(, *lock)
> +void simple_lock(struct slock *lock)
>  {
>       struct lock_info *li = locate_lock_info(&lock);
>       int my_cpu = cpu_number();
> @@ -131,8 +129,7 @@ decl_simple_lock_data(, *lock)
>       li->time = time_stamp - li->time;
>  }
>  
> -int simple_lock_try(lock)
> -decl_simple_lock_data(, *lock)
> +int simple_lock_try(struct slock *lock)
>  {
>       struct lock_info *li = locate_lock_info(&lock);
>       int my_cpu = cpu_number();
> @@ -151,8 +148,7 @@ decl_simple_lock_data(, *lock)
>       }
>  }
>  
> -void simple_unlock(lock)
> -decl_simple_lock_data(, *lock)
> +void simple_unlock(struct slock *lock)
>  {
>       time_stamp_t stamp = time_stamp;
>       time_stamp_t *time = &locate_lock_info(&lock)->time;
> -- 
> 2.51.0
> 
> 
> 

-- 
Samuel
<s> cool, j'ai un rapport a rendre pour le 31 decembre a minuit...
 -+- #ens-mim - bonne année ! -+-

Reply via email to