xref: /linux-6.15/include/linux/sunrpc/timer.h (revision b2441318)
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