diff options
author | Arnd Bergmann <arnd@arndb.de> | 2015-11-25 10:16:55 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-11-25 14:00:05 -0500 |
commit | d2b4365809060b256330a99289de9797a5dd6967 (patch) | |
tree | 9365cd0791b20332059ec044962314f152ff4c46 | |
parent | 6c2920926b10e8303378408e3c2b8952071d4344 (diff) |
cpuset: Replace all instances of time_t with time64_t
The following patch replaces all instances of time_t with time64_t i.e.
change the type used for representing time from 32-bit to 64-bit. All
32-bit kernels to date use a signed 32-bit time_t type, which can only
represent time until January 2038. Since embedded systems running 32-bit
Linux are going to survive beyond that date, we have to change all
current uses, in a backwards compatible way.
The patch also changes the function get_seconds() that returns a 32-bit
integer to ktime_get_seconds() that returns seconds as 64-bit integer.
The patch changes the type of ticks from time_t to u32. We keep ticks as
32-bits as the function uses 32-bit arithmetic which would prove less
expensive than 64-bit arithmetic and the function is expected to be
called atleast once every 32 seconds.
Signed-off-by: Heena Sirwani <heenasirwani@gmail.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Tejun Heo <tj@kernel.org>
-rw-r--r-- | kernel/cpuset.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 10ae73611d80..c9ea63ff70a7 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
@@ -51,6 +51,7 @@ | |||
51 | #include <linux/stat.h> | 51 | #include <linux/stat.h> |
52 | #include <linux/string.h> | 52 | #include <linux/string.h> |
53 | #include <linux/time.h> | 53 | #include <linux/time.h> |
54 | #include <linux/time64.h> | ||
54 | #include <linux/backing-dev.h> | 55 | #include <linux/backing-dev.h> |
55 | #include <linux/sort.h> | 56 | #include <linux/sort.h> |
56 | 57 | ||
@@ -68,7 +69,7 @@ struct static_key cpusets_enabled_key __read_mostly = STATIC_KEY_INIT_FALSE; | |||
68 | struct fmeter { | 69 | struct fmeter { |
69 | int cnt; /* unprocessed events count */ | 70 | int cnt; /* unprocessed events count */ |
70 | int val; /* most recent output value */ | 71 | int val; /* most recent output value */ |
71 | time_t time; /* clock (secs) when val computed */ | 72 | time64_t time; /* clock (secs) when val computed */ |
72 | spinlock_t lock; /* guards read or write of above */ | 73 | spinlock_t lock; /* guards read or write of above */ |
73 | }; | 74 | }; |
74 | 75 | ||
@@ -1374,7 +1375,7 @@ out: | |||
1374 | */ | 1375 | */ |
1375 | 1376 | ||
1376 | #define FM_COEF 933 /* coefficient for half-life of 10 secs */ | 1377 | #define FM_COEF 933 /* coefficient for half-life of 10 secs */ |
1377 | #define FM_MAXTICKS ((time_t)99) /* useless computing more ticks than this */ | 1378 | #define FM_MAXTICKS ((u32)99) /* useless computing more ticks than this */ |
1378 | #define FM_MAXCNT 1000000 /* limit cnt to avoid overflow */ | 1379 | #define FM_MAXCNT 1000000 /* limit cnt to avoid overflow */ |
1379 | #define FM_SCALE 1000 /* faux fixed point scale */ | 1380 | #define FM_SCALE 1000 /* faux fixed point scale */ |
1380 | 1381 | ||
@@ -1390,8 +1391,11 @@ static void fmeter_init(struct fmeter *fmp) | |||
1390 | /* Internal meter update - process cnt events and update value */ | 1391 | /* Internal meter update - process cnt events and update value */ |
1391 | static void fmeter_update(struct fmeter *fmp) | 1392 | static void fmeter_update(struct fmeter *fmp) |
1392 | { | 1393 | { |
1393 | time_t now = get_seconds(); | 1394 | time64_t now; |
1394 | time_t ticks = now - fmp->time; | 1395 | u32 ticks; |
1396 | |||
1397 | now = ktime_get_seconds(); | ||
1398 | ticks = now - fmp->time; | ||
1395 | 1399 | ||
1396 | if (ticks == 0) | 1400 | if (ticks == 0) |
1397 | return; | 1401 | return; |