mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
time: Add timens_offsets to be used for tasks in time namespace
Introduce offsets for time namespace. They will contain an adjustment needed to convert clocks to/from host's. A new namespace is created with the same offsets as the time namespace of the current process. Co-developed-by: Dmitry Safonov <dima@arista.com> Signed-off-by: Andrei Vagin <avagin@openvz.org> Signed-off-by: Dmitry Safonov <dima@arista.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20191112012724.250792-5-dima@arista.com
This commit is contained in:
parent
769071ac9f
commit
af993f58d6
@ -12,11 +12,17 @@
|
||||
struct user_namespace;
|
||||
extern struct user_namespace init_user_ns;
|
||||
|
||||
struct timens_offsets {
|
||||
struct timespec64 monotonic;
|
||||
struct timespec64 boottime;
|
||||
};
|
||||
|
||||
struct time_namespace {
|
||||
struct kref kref;
|
||||
struct user_namespace *user_ns;
|
||||
struct ucounts *ucounts;
|
||||
struct ns_common ns;
|
||||
struct timens_offsets offsets;
|
||||
} __randomize_layout;
|
||||
|
||||
extern struct time_namespace init_time_ns;
|
||||
@ -39,6 +45,20 @@ static inline void put_time_ns(struct time_namespace *ns)
|
||||
kref_put(&ns->kref, free_time_ns);
|
||||
}
|
||||
|
||||
static inline void timens_add_monotonic(struct timespec64 *ts)
|
||||
{
|
||||
struct timens_offsets *ns_offsets = ¤t->nsproxy->time_ns->offsets;
|
||||
|
||||
*ts = timespec64_add(*ts, ns_offsets->monotonic);
|
||||
}
|
||||
|
||||
static inline void timens_add_boottime(struct timespec64 *ts)
|
||||
{
|
||||
struct timens_offsets *ns_offsets = ¤t->nsproxy->time_ns->offsets;
|
||||
|
||||
*ts = timespec64_add(*ts, ns_offsets->boottime);
|
||||
}
|
||||
|
||||
#else
|
||||
static inline struct time_namespace *get_time_ns(struct time_namespace *ns)
|
||||
{
|
||||
@ -66,6 +86,8 @@ static inline int timens_on_fork(struct nsproxy *nsproxy,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void timens_add_monotonic(struct timespec64 *ts) { }
|
||||
static inline void timens_add_boottime(struct timespec64 *ts) { }
|
||||
#endif
|
||||
|
||||
#endif /* _LINUX_TIMENS_H */
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/cred.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
static struct ucounts *inc_time_namespaces(struct user_namespace *ns)
|
||||
{
|
||||
@ -60,6 +61,7 @@ static struct time_namespace *clone_time_ns(struct user_namespace *user_ns,
|
||||
ns->ucounts = ucounts;
|
||||
ns->ns.ops = &timens_operations;
|
||||
ns->user_ns = get_user_ns(user_ns);
|
||||
ns->offsets = old_ns->offsets;
|
||||
return ns;
|
||||
|
||||
fail_free:
|
||||
|
Loading…
Reference in New Issue
Block a user