From 0eea10301708c64a6b793894c156e21ddd15eb64 Mon Sep 17 00:00:00 2001 From: Balbir Singh Date: Thu, 7 Feb 2008 00:13:57 -0800 Subject: Memory controller improve user interface Change the interface to use bytes instead of pages. Page sizes can vary across platforms and configurations. A new strategy routine has been added to the resource counters infrastructure to format the data as desired. Suggested by David Rientjes, Andrew Morton and Herbert Poetzl Tested on a UML setup with the config for memory control enabled. [kamezawa.hiroyu@jp.fujitsu.com: possible race fix in res_counter] Signed-off-by: Balbir Singh Signed-off-by: Pavel Emelianov Cc: Paul Menage Cc: Peter Zijlstra Cc: "Eric W. Biederman" Cc: Nick Piggin Cc: Kirill Korotaev Cc: Herbert Poetzl Cc: David Rientjes Cc: Vaidyanathan Srinivasan Signed-off-by: KAMEZAWA Hiroyuki Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- include/linux/res_counter.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'include/linux/res_counter.h') diff --git a/include/linux/res_counter.h b/include/linux/res_counter.h index 5e60a4f3424..61363ce896d 100644 --- a/include/linux/res_counter.h +++ b/include/linux/res_counter.h @@ -23,15 +23,15 @@ struct res_counter { /* * the current resource consumption level */ - unsigned long usage; + unsigned long long usage; /* * the limit that usage cannot exceed */ - unsigned long limit; + unsigned long long limit; /* * the number of unsuccessful attempts to consume the resource */ - unsigned long failcnt; + unsigned long long failcnt; /* * the lock to protect all of the above. * the routines below consider this to be IRQ-safe @@ -52,9 +52,11 @@ struct res_counter { */ ssize_t res_counter_read(struct res_counter *counter, int member, - const char __user *buf, size_t nbytes, loff_t *pos); + const char __user *buf, size_t nbytes, loff_t *pos, + int (*read_strategy)(unsigned long long val, char *s)); ssize_t res_counter_write(struct res_counter *counter, int member, - const char __user *buf, size_t nbytes, loff_t *pos); + const char __user *buf, size_t nbytes, loff_t *pos, + int (*write_strategy)(char *buf, unsigned long long *val)); /* * the field descriptors. one for each member of res_counter -- cgit v1.2.3