|
7 | 7 | #include <asm/barrier.h>
|
8 | 8 | #include <vdso/datapage.h>
|
9 | 9 |
|
10 |
| -static __always_inline u32 vdso_read_begin(const struct vdso_time_data *vd) |
| 10 | +static __always_inline u32 vdso_read_begin(const struct vdso_clock *vc) |
11 | 11 | {
|
12 | 12 | u32 seq;
|
13 | 13 |
|
14 |
| - while (unlikely((seq = READ_ONCE(vd->seq)) & 1)) |
| 14 | + while (unlikely((seq = READ_ONCE(vc->seq)) & 1)) |
15 | 15 | cpu_relax();
|
16 | 16 |
|
17 | 17 | smp_rmb();
|
18 | 18 | return seq;
|
19 | 19 | }
|
20 | 20 |
|
21 |
| -static __always_inline u32 vdso_read_retry(const struct vdso_time_data *vd, |
| 21 | +static __always_inline u32 vdso_read_retry(const struct vdso_clock *vc, |
22 | 22 | u32 start)
|
23 | 23 | {
|
24 | 24 | u32 seq;
|
25 | 25 |
|
26 | 26 | smp_rmb();
|
27 |
| - seq = READ_ONCE(vd->seq); |
| 27 | + seq = READ_ONCE(vc->seq); |
28 | 28 | return seq != start;
|
29 | 29 | }
|
30 | 30 |
|
31 | 31 | static __always_inline void vdso_write_begin(struct vdso_time_data *vd)
|
32 | 32 | {
|
| 33 | + struct vdso_clock *vc = vd; |
| 34 | + |
33 | 35 | /*
|
34 | 36 | * WRITE_ONCE() is required otherwise the compiler can validly tear
|
35 | 37 | * updates to vd[x].seq and it is possible that the value seen by the
|
36 | 38 | * reader is inconsistent.
|
37 | 39 | */
|
38 |
| - WRITE_ONCE(vd[CS_HRES_COARSE].seq, vd[CS_HRES_COARSE].seq + 1); |
39 |
| - WRITE_ONCE(vd[CS_RAW].seq, vd[CS_RAW].seq + 1); |
| 40 | + WRITE_ONCE(vc[CS_HRES_COARSE].seq, vc[CS_HRES_COARSE].seq + 1); |
| 41 | + WRITE_ONCE(vc[CS_RAW].seq, vc[CS_RAW].seq + 1); |
40 | 42 | smp_wmb();
|
41 | 43 | }
|
42 | 44 |
|
43 | 45 | static __always_inline void vdso_write_end(struct vdso_time_data *vd)
|
44 | 46 | {
|
| 47 | + struct vdso_clock *vc = vd; |
| 48 | + |
45 | 49 | smp_wmb();
|
46 | 50 | /*
|
47 | 51 | * WRITE_ONCE() is required otherwise the compiler can validly tear
|
48 | 52 | * updates to vd[x].seq and it is possible that the value seen by the
|
49 | 53 | * reader is inconsistent.
|
50 | 54 | */
|
51 |
| - WRITE_ONCE(vd[CS_HRES_COARSE].seq, vd[CS_HRES_COARSE].seq + 1); |
52 |
| - WRITE_ONCE(vd[CS_RAW].seq, vd[CS_RAW].seq + 1); |
| 55 | + WRITE_ONCE(vc[CS_HRES_COARSE].seq, vc[CS_HRES_COARSE].seq + 1); |
| 56 | + WRITE_ONCE(vc[CS_RAW].seq, vc[CS_RAW].seq + 1); |
53 | 57 | }
|
54 | 58 |
|
55 | 59 | #endif /* !__ASSEMBLY__ */
|
|
0 commit comments