diff options
Diffstat (limited to 'sys/sys/vmmeter.h')
-rw-r--r-- | sys/sys/vmmeter.h | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/sys/sys/vmmeter.h b/sys/sys/vmmeter.h index 793f32d..375a2ce 100644 --- a/sys/sys/vmmeter.h +++ b/sys/sys/vmmeter.h @@ -102,7 +102,18 @@ struct vmmeter { }; #ifdef _KERNEL -extern struct vmmeter cnt; +extern volatile struct vmmeter cnt; + +#define VMCNT __DEVOLATILE(struct vmmeter *, &cnt) +#define VMCNT_SET(member, val) \ + atomic_store_rel_int(__CONCAT(&cnt.v_, member), val) +#define VMCNT_ADD(member, val) \ + atomic_add_int(__CONCAT(&cnt.v_, member), val) +#define VMCNT_DEC(member, val) \ + atomic_subtract_int(__CONCAT(&cnt.v_, member), val) +#define VMCNT_GET(member) (__CONCAT(cnt.v_, member)) +#define VMCNT_PTR(member) \ + __DEVOLATILE(u_int *, __CONCAT(&cnt.v_, member)) /* * Return TRUE if we are under our reserved low-free-pages threshold @@ -112,7 +123,8 @@ static __inline int vm_page_count_reserved(void) { - return (cnt.v_free_reserved > (cnt.v_free_count + cnt.v_cache_count)); + return (VMCNT_GET(free_reserved) > (VMCNT_GET(free_count) + + VMCNT_GET(cache_count))); } /* @@ -126,7 +138,8 @@ static __inline int vm_page_count_severe(void) { - return (cnt.v_free_severe > (cnt.v_free_count + cnt.v_cache_count)); + return (VMCNT_GET(free_severe) > (VMCNT_GET(free_count) + + VMCNT_GET(cache_count))); } /* @@ -143,7 +156,8 @@ static __inline int vm_page_count_min(void) { - return (cnt.v_free_min > (cnt.v_free_count + cnt.v_cache_count)); + return (VMCNT_GET(free_min) > (VMCNT_GET(free_count) + + VMCNT_GET(cache_count))); } /* @@ -155,7 +169,8 @@ static __inline int vm_page_count_target(void) { - return (cnt.v_free_target > (cnt.v_free_count + cnt.v_cache_count)); + return (VMCNT_GET(free_target) > (VMCNT_GET(free_count) + + VMCNT_GET(cache_count))); } /* @@ -168,8 +183,8 @@ int vm_paging_target(void) { return ( - (cnt.v_free_target + cnt.v_cache_min) - - (cnt.v_free_count + cnt.v_cache_count) + (VMCNT_GET(free_target) + VMCNT_GET(cache_min)) - + (VMCNT_GET(free_count) + VMCNT_GET(cache_count)) ); } @@ -182,8 +197,8 @@ int vm_paging_needed(void) { return ( - (cnt.v_free_reserved + cnt.v_cache_min) > - (cnt.v_free_count + cnt.v_cache_count) + (VMCNT_GET(free_reserved) + VMCNT_GET(cache_min)) > + (VMCNT_GET(free_count) + VMCNT_GET(cache_count)) ); } |