mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/
synced 2026-04-17 22:23:45 -04:00
timex: use __kernel_timex internally
struct timex is not y2038 safe.
Replace all uses of timex with y2038 safe __kernel_timex.
Note that struct __kernel_timex is an ABI interface definition.
We could define a new structure based on __kernel_timex that
is only available internally instead. Right now, there isn't
a strong motivation for this as the structure is isolated to
a few defined struct timex interfaces and such a structure would
be exactly the same as struct timex.
The patch was generated by the following coccinelle script:
virtual patch
@depends on patch forall@
identifier ts;
expression e;
@@
(
- struct timex ts;
+ struct __kernel_timex ts;
|
- struct timex ts = {};
+ struct __kernel_timex ts = {};
|
- struct timex ts = e;
+ struct __kernel_timex ts = e;
|
- struct timex *ts;
+ struct __kernel_timex *ts;
|
(memset \| copy_from_user \| copy_to_user \)(...,
- sizeof(struct timex))
+ sizeof(struct __kernel_timex))
)
@depends on patch forall@
identifier ts;
identifier fn;
@@
fn(...,
- struct timex *ts,
+ struct __kernel_timex *ts,
...) {
...
}
@depends on patch forall@
identifier ts;
identifier fn;
@@
fn(...,
- struct timex *ts) {
+ struct __kernel_timex *ts) {
...
}
Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: linux-alpha@vger.kernel.org
Cc: netdev@vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
committed by
Arnd Bergmann
parent
1a596398a3
commit
ead25417f8
@@ -188,13 +188,13 @@ static inline int is_error_status(int status)
|
||||
&& (status & (STA_PPSWANDER|STA_PPSERROR)));
|
||||
}
|
||||
|
||||
static inline void pps_fill_timex(struct timex *txc)
|
||||
static inline void pps_fill_timex(struct __kernel_timex *txc)
|
||||
{
|
||||
txc->ppsfreq = shift_right((pps_freq >> PPM_SCALE_INV_SHIFT) *
|
||||
PPM_SCALE_INV, NTP_SCALE_SHIFT);
|
||||
txc->jitter = pps_jitter;
|
||||
if (!(time_status & STA_NANO))
|
||||
txc->jitter /= NSEC_PER_USEC;
|
||||
txc->jitter = pps_jitter / NSEC_PER_USEC;
|
||||
txc->shift = pps_shift;
|
||||
txc->stabil = pps_stabil;
|
||||
txc->jitcnt = pps_jitcnt;
|
||||
@@ -220,7 +220,7 @@ static inline int is_error_status(int status)
|
||||
return status & (STA_UNSYNC|STA_CLOCKERR);
|
||||
}
|
||||
|
||||
static inline void pps_fill_timex(struct timex *txc)
|
||||
static inline void pps_fill_timex(struct __kernel_timex *txc)
|
||||
{
|
||||
/* PPS is not implemented, so these are zero */
|
||||
txc->ppsfreq = 0;
|
||||
@@ -633,7 +633,7 @@ void ntp_notify_cmos_timer(void)
|
||||
/*
|
||||
* Propagate a new txc->status value into the NTP state:
|
||||
*/
|
||||
static inline void process_adj_status(const struct timex *txc)
|
||||
static inline void process_adj_status(const struct __kernel_timex *txc)
|
||||
{
|
||||
if ((time_status & STA_PLL) && !(txc->status & STA_PLL)) {
|
||||
time_state = TIME_OK;
|
||||
@@ -656,7 +656,8 @@ static inline void process_adj_status(const struct timex *txc)
|
||||
}
|
||||
|
||||
|
||||
static inline void process_adjtimex_modes(const struct timex *txc, s32 *time_tai)
|
||||
static inline void process_adjtimex_modes(const struct __kernel_timex *txc,
|
||||
s32 *time_tai)
|
||||
{
|
||||
if (txc->modes & ADJ_STATUS)
|
||||
process_adj_status(txc);
|
||||
@@ -707,7 +708,8 @@ static inline void process_adjtimex_modes(const struct timex *txc, s32 *time_tai
|
||||
* adjtimex mainly allows reading (and writing, if superuser) of
|
||||
* kernel time-keeping variables. used by xntpd.
|
||||
*/
|
||||
int __do_adjtimex(struct timex *txc, const struct timespec64 *ts, s32 *time_tai)
|
||||
int __do_adjtimex(struct __kernel_timex *txc, const struct timespec64 *ts,
|
||||
s32 *time_tai)
|
||||
{
|
||||
int result;
|
||||
|
||||
@@ -729,7 +731,7 @@ int __do_adjtimex(struct timex *txc, const struct timespec64 *ts, s32 *time_tai)
|
||||
txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ,
|
||||
NTP_SCALE_SHIFT);
|
||||
if (!(time_status & STA_NANO))
|
||||
txc->offset /= NSEC_PER_USEC;
|
||||
txc->offset = (u32)txc->offset / NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
result = time_state; /* mostly `TIME_OK' */
|
||||
@@ -754,7 +756,7 @@ int __do_adjtimex(struct timex *txc, const struct timespec64 *ts, s32 *time_tai)
|
||||
txc->time.tv_sec = (time_t)ts->tv_sec;
|
||||
txc->time.tv_usec = ts->tv_nsec;
|
||||
if (!(time_status & STA_NANO))
|
||||
txc->time.tv_usec /= NSEC_PER_USEC;
|
||||
txc->time.tv_usec = ts->tv_nsec / NSEC_PER_USEC;
|
||||
|
||||
/* Handle leapsec adjustments */
|
||||
if (unlikely(ts->tv_sec >= ntp_next_leap_sec)) {
|
||||
|
||||
Reference in New Issue
Block a user