1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * linux/include/linux/sunrpc/timer.h
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * Declarations for the RPC transport timer.
61da177e4SLinus Torvalds *
71da177e4SLinus Torvalds * Copyright (C) 2002 Trond Myklebust <[email protected]>
81da177e4SLinus Torvalds */
91da177e4SLinus Torvalds
101da177e4SLinus Torvalds #ifndef _LINUX_SUNRPC_TIMER_H
111da177e4SLinus Torvalds #define _LINUX_SUNRPC_TIMER_H
121da177e4SLinus Torvalds
1360063497SArun Sharma #include <linux/atomic.h>
141da177e4SLinus Torvalds
151da177e4SLinus Torvalds struct rpc_rtt {
161da177e4SLinus Torvalds unsigned long timeo; /* default timeout value */
171da177e4SLinus Torvalds unsigned long srtt[5]; /* smoothed round trip time << 3 */
181da177e4SLinus Torvalds unsigned long sdrtt[5]; /* smoothed medium deviation of RTT */
191da177e4SLinus Torvalds int ntimeouts[5]; /* Number of timeouts for the last request */
201da177e4SLinus Torvalds };
211da177e4SLinus Torvalds
221da177e4SLinus Torvalds
231da177e4SLinus Torvalds extern void rpc_init_rtt(struct rpc_rtt *rt, unsigned long timeo);
241da177e4SLinus Torvalds extern void rpc_update_rtt(struct rpc_rtt *rt, unsigned timer, long m);
251da177e4SLinus Torvalds extern unsigned long rpc_calc_rto(struct rpc_rtt *rt, unsigned timer);
261da177e4SLinus Torvalds
rpc_set_timeo(struct rpc_rtt * rt,int timer,int ntimeo)271da177e4SLinus Torvalds static inline void rpc_set_timeo(struct rpc_rtt *rt, int timer, int ntimeo)
281da177e4SLinus Torvalds {
291da177e4SLinus Torvalds int *t;
301da177e4SLinus Torvalds if (!timer)
311da177e4SLinus Torvalds return;
321da177e4SLinus Torvalds t = &rt->ntimeouts[timer-1];
331da177e4SLinus Torvalds if (ntimeo < *t) {
341da177e4SLinus Torvalds if (*t > 0)
351da177e4SLinus Torvalds (*t)--;
361da177e4SLinus Torvalds } else {
371da177e4SLinus Torvalds if (ntimeo > 8)
381da177e4SLinus Torvalds ntimeo = 8;
391da177e4SLinus Torvalds *t = ntimeo;
401da177e4SLinus Torvalds }
411da177e4SLinus Torvalds }
421da177e4SLinus Torvalds
rpc_ntimeo(struct rpc_rtt * rt,int timer)431da177e4SLinus Torvalds static inline int rpc_ntimeo(struct rpc_rtt *rt, int timer)
441da177e4SLinus Torvalds {
451da177e4SLinus Torvalds if (!timer)
461da177e4SLinus Torvalds return 0;
471da177e4SLinus Torvalds return rt->ntimeouts[timer-1];
481da177e4SLinus Torvalds }
491da177e4SLinus Torvalds
501da177e4SLinus Torvalds #endif /* _LINUX_SUNRPC_TIMER_H */
51