A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/torvalds/linux/commit/0696b711e4be45fa104c12329f617beb29c03f78 below:

Fix clock_gettime vsyscall time warp · torvalds/linux@0696b71 · GitHub

File tree Expand file treeCollapse file tree 6 files changed

+17

-12

lines changed

Filter options

Expand file treeCollapse file tree 6 files changed

+17

-12

lines changed Original file line number Diff line number Diff line change

@@ -473,15 +473,15 @@ void update_vsyscall_tz(void)

473 473

{

474 474

}

475 475 476 -

void update_vsyscall(struct timespec *wall, struct clocksource *c)

476 +

void update_vsyscall(struct timespec *wall, struct clocksource *c, u32 mult)

477 477

{

478 478

unsigned long flags;

479 479 480 480

write_seqlock_irqsave(&fsyscall_gtod_data.lock, flags);

481 481 482 482

/* copy fsyscall clock data */

483 483

fsyscall_gtod_data.clk_mask = c->mask;

484 -

fsyscall_gtod_data.clk_mult = c->mult;

484 +

fsyscall_gtod_data.clk_mult = mult;

485 485

fsyscall_gtod_data.clk_shift = c->shift;

486 486

fsyscall_gtod_data.clk_fsys_mmio = c->fsys_mmio;

487 487

fsyscall_gtod_data.clk_cycle_last = c->cycle_last;

Original file line number Diff line number Diff line change

@@ -828,7 +828,8 @@ static cycle_t timebase_read(struct clocksource *cs)

828 828

return (cycle_t)get_tb();

829 829

}

830 830 831 -

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)

831 +

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock,

832 +

u32 mult)

832 833

{

833 834

u64 t2x, stamp_xsec;

834 835

@@ -841,7 +842,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)

841 842 842 843

/* XXX this assumes clock->shift == 22 */

843 844

/* 4611686018 ~= 2^(20+64-22) / 1e9 */

844 -

t2x = (u64) clock->mult * 4611686018ULL;

845 +

t2x = (u64) mult * 4611686018ULL;

845 846

stamp_xsec = (u64) xtime.tv_nsec * XSEC_PER_SEC;

846 847

do_div(stamp_xsec, 1000000000);

847 848

stamp_xsec += (u64) xtime.tv_sec * XSEC_PER_SEC;

Original file line number Diff line number Diff line change

@@ -214,7 +214,8 @@ struct clocksource * __init clocksource_default_clock(void)

214 214

return &clocksource_tod;

215 215

}

216 216 217 -

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)

217 +

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock,

218 +

u32 mult)

218 219

{

219 220

if (clock != &clocksource_tod)

220 221

return;

Original file line number Diff line number Diff line change

@@ -73,7 +73,8 @@ void update_vsyscall_tz(void)

73 73

write_sequnlock_irqrestore(&vsyscall_gtod_data.lock, flags);

74 74

}

75 75 76 -

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)

76 +

void update_vsyscall(struct timespec *wall_time, struct clocksource *clock,

77 +

u32 mult)

77 78

{

78 79

unsigned long flags;

79 80

@@ -82,7 +83,7 @@ void update_vsyscall(struct timespec *wall_time, struct clocksource *clock)

82 83

vsyscall_gtod_data.clock.vread = clock->vread;

83 84

vsyscall_gtod_data.clock.cycle_last = clock->cycle_last;

84 85

vsyscall_gtod_data.clock.mask = clock->mask;

85 -

vsyscall_gtod_data.clock.mult = clock->mult;

86 +

vsyscall_gtod_data.clock.mult = mult;

86 87

vsyscall_gtod_data.clock.shift = clock->shift;

87 88

vsyscall_gtod_data.wall_time_sec = wall_time->tv_sec;

88 89

vsyscall_gtod_data.wall_time_nsec = wall_time->tv_nsec;

Original file line number Diff line number Diff line change

@@ -280,10 +280,12 @@ extern struct clocksource * __init __weak clocksource_default_clock(void);

280 280

extern void clocksource_mark_unstable(struct clocksource *cs);

281 281 282 282

#ifdef CONFIG_GENERIC_TIME_VSYSCALL

283 -

extern void update_vsyscall(struct timespec *ts, struct clocksource *c);

283 +

extern void

284 +

update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult);

284 285

extern void update_vsyscall_tz(void);

285 286

#else

286 -

static inline void update_vsyscall(struct timespec *ts, struct clocksource *c)

287 +

static inline void

288 +

update_vsyscall(struct timespec *ts, struct clocksource *c, u32 mult)

287 289

{

288 290

}

289 291 Original file line number Diff line number Diff line change

@@ -177,7 +177,7 @@ void timekeeping_leap_insert(int leapsecond)

177 177

{

178 178

xtime.tv_sec += leapsecond;

179 179

wall_to_monotonic.tv_sec -= leapsecond;

180 -

update_vsyscall(&xtime, timekeeper.clock);

180 +

update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);

181 181

}

182 182 183 183

#ifdef CONFIG_GENERIC_TIME

@@ -337,7 +337,7 @@ int do_settimeofday(struct timespec *tv)

337 337

timekeeper.ntp_error = 0;

338 338

ntp_clear();

339 339 340 -

update_vsyscall(&xtime, timekeeper.clock);

340 +

update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);

341 341 342 342

write_sequnlock_irqrestore(&xtime_lock, flags);

343 343

@@ -811,7 +811,7 @@ void update_wall_time(void)

811 811

update_xtime_cache(nsecs);

812 812 813 813

/* check to see if there is a new clocksource to use */

814 -

update_vsyscall(&xtime, timekeeper.clock);

814 +

update_vsyscall(&xtime, timekeeper.clock, timekeeper.mult);

815 815

}

816 816 817 817

/**

You can’t perform that action at this time.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4