posix-clocks: Wire up clock_gettime() with timens offsets
Adjust monotonic and boottime clocks with per-timens offsets. As the result a process inside time namespace will see timers and clocks corrected to offsets that were set when the namespace was created Note that applications usually go through vDSO to get time, which is not yet adjusted. Further changes will complete time namespace virtualisation with vDSO support. Co-developed-by: Dmitry Safonov <dima@arista.com> Signed-off-by: Andrei Vagin <avagin@gmail.com> Signed-off-by: Dmitry Safonov <dima@arista.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20191112012724.250792-12-dima@arista.com
This commit is contained in:

committed by
Thomas Gleixner

parent
198fa445d5
commit
5a590f35ad
@@ -26,6 +26,7 @@
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/compat.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/time_namespace.h>
|
||||
|
||||
#include "posix-timers.h"
|
||||
|
||||
@@ -886,6 +887,12 @@ static struct platform_driver alarmtimer_driver = {
|
||||
}
|
||||
};
|
||||
|
||||
static void get_boottime_timespec(struct timespec64 *tp)
|
||||
{
|
||||
ktime_get_boottime_ts64(tp);
|
||||
timens_add_boottime(tp);
|
||||
}
|
||||
|
||||
/**
|
||||
* alarmtimer_init - Initialize alarm timer code
|
||||
*
|
||||
@@ -906,7 +913,7 @@ static int __init alarmtimer_init(void)
|
||||
alarm_bases[ALARM_REALTIME].get_timespec = ktime_get_real_ts64,
|
||||
alarm_bases[ALARM_BOOTTIME].base_clockid = CLOCK_BOOTTIME;
|
||||
alarm_bases[ALARM_BOOTTIME].get_ktime = &ktime_get_boottime;
|
||||
alarm_bases[ALARM_BOOTTIME].get_timespec = ktime_get_boottime_ts64;
|
||||
alarm_bases[ALARM_BOOTTIME].get_timespec = get_boottime_timespec;
|
||||
for (i = 0; i < ALARM_NUMTYPE; i++) {
|
||||
timerqueue_init_head(&alarm_bases[i].timerqueue);
|
||||
spin_lock_init(&alarm_bases[i].lock);
|
||||
|
Reference in New Issue
Block a user