Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e138e79 authored by Gerrit Renker's avatar Gerrit Renker Committed by David S. Miller
Browse files

[CCID3]: Use a function to update p_inv, and p is never used



This patch
 1) concentrates previously scattered computation of p_inv into one function;
 2) removes the `p' element of the CCID3 RX sock (it is redundant);
 3) makes the tfrc_rx_info structure standalone, only used on demand.

Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
Signed-off-by: default avatarIan McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 17159b0b
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -917,6 +917,7 @@ static int ccid3_hc_rx_getsockopt(struct sock *sk, const int optname, int len,
				  u32 __user *optval, int __user *optlen)
{
	const struct ccid3_hc_rx_sock *hcrx;
	struct tfrc_rx_info rx_info;
	const void *val;

	/* Listen socks doesn't have a private CCID block */
@@ -926,10 +927,14 @@ static int ccid3_hc_rx_getsockopt(struct sock *sk, const int optname, int len,
	hcrx = ccid3_hc_rx_sk(sk);
	switch (optname) {
	case DCCP_SOCKOPT_CCID_RX_INFO:
		if (len < sizeof(hcrx->ccid3hcrx_tfrc))
		if (len < sizeof(rx_info))
			return -EINVAL;
		len = sizeof(hcrx->ccid3hcrx_tfrc);
		val = &hcrx->ccid3hcrx_tfrc;
		rx_info.tfrcrx_x_recv = hcrx->ccid3hcrx_x_recv;
		rx_info.tfrcrx_rtt    = hcrx->ccid3hcrx_rtt;
		rx_info.tfrcrx_p      = hcrx->ccid3hcrx_pinv == 0 ? ~0U :
					   scaled_div(1, hcrx->ccid3hcrx_pinv);
		len = sizeof(rx_info);
		val = &rx_info;
		break;
	default:
		return -ENOPROTOOPT;
+4 −4
Original line number Diff line number Diff line
@@ -139,6 +139,8 @@ enum ccid3_hc_rx_states {
 *  @ccid3hcrx_last_counter  -  Tracks window counter (RFC 4342, 8.1)
 *  @ccid3hcrx_state  -  Receiver state, one of %ccid3_hc_rx_states
 *  @ccid3hcrx_bytes_recv  -  Total sum of DCCP payload bytes
 *  @ccid3hcrx_x_recv  -  Receiver estimate of send rate (RFC 3448, sec. 4.3)
 *  @ccid3hcrx_rtt  -  Receiver estimate of RTT
 *  @ccid3hcrx_tstamp_last_feedback  -  Time at which last feedback was sent
 *  @ccid3hcrx_tstamp_last_ack  -  Time at which last feedback was sent
 *  @ccid3hcrx_hist  -  Packet history (loss detection + RTT sampling)
@@ -147,13 +149,11 @@ enum ccid3_hc_rx_states {
 *  @ccid3hcrx_pinv  -  Inverse of Loss Event Rate (RFC 4342, sec. 8.5)
 */
struct ccid3_hc_rx_sock {
	struct tfrc_rx_info		ccid3hcrx_tfrc;
#define ccid3hcrx_x_recv		ccid3hcrx_tfrc.tfrcrx_x_recv
#define ccid3hcrx_rtt			ccid3hcrx_tfrc.tfrcrx_rtt
#define ccid3hcrx_p			ccid3hcrx_tfrc.tfrcrx_p
	u8				ccid3hcrx_last_counter:4;
	enum ccid3_hc_rx_states		ccid3hcrx_state:8;
	u32				ccid3hcrx_bytes_recv;
	u32				ccid3hcrx_x_recv;
	u32				ccid3hcrx_rtt;
	ktime_t				ccid3hcrx_tstamp_last_feedback;
	struct tfrc_rx_hist		ccid3hcrx_hist;
	struct tfrc_loss_hist		ccid3hcrx_li_hist;