diff options
Diffstat (limited to 'lib/dim')
| -rw-r--r-- | lib/dim/dim.c | 4 | ||||
| -rw-r--r-- | lib/dim/net_dim.c | 56 | 
2 files changed, 58 insertions, 2 deletions
diff --git a/lib/dim/dim.c b/lib/dim/dim.c index 439d641ec796..38045d6d0538 100644 --- a/lib/dim/dim.c +++ b/lib/dim/dim.c @@ -74,8 +74,8 @@ void dim_calc_stats(struct dim_sample *start, struct dim_sample *end,  					delta_us);  	curr_stats->cpms = DIV_ROUND_UP(ncomps * USEC_PER_MSEC, delta_us);  	if (curr_stats->epms != 0) -		curr_stats->cpe_ratio = -				(curr_stats->cpms * 100) / curr_stats->epms; +		curr_stats->cpe_ratio = DIV_ROUND_DOWN_ULL( +			curr_stats->cpms * 100, curr_stats->epms);  	else  		curr_stats->cpe_ratio = 0; diff --git a/lib/dim/net_dim.c b/lib/dim/net_dim.c index 5bcc902c5388..a4db51c21266 100644 --- a/lib/dim/net_dim.c +++ b/lib/dim/net_dim.c @@ -5,6 +5,62 @@  #include <linux/dim.h> +/* + * Net DIM profiles: + *        There are different set of profiles for each CQ period mode. + *        There are different set of profiles for RX/TX CQs. + *        Each profile size must be of NET_DIM_PARAMS_NUM_PROFILES + */ +#define NET_DIM_PARAMS_NUM_PROFILES 5 +#define NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE 256 +#define NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE 128 +#define NET_DIM_DEF_PROFILE_CQE 1 +#define NET_DIM_DEF_PROFILE_EQE 1 + +#define NET_DIM_RX_EQE_PROFILES { \ +	{1,   NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE}, \ +	{8,   NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE}, \ +	{64,  NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE}, \ +	{128, NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE}, \ +	{256, NET_DIM_DEFAULT_RX_CQ_MODERATION_PKTS_FROM_EQE}, \ +} + +#define NET_DIM_RX_CQE_PROFILES { \ +	{2,  256},             \ +	{8,  128},             \ +	{16, 64},              \ +	{32, 64},              \ +	{64, 64}               \ +} + +#define NET_DIM_TX_EQE_PROFILES { \ +	{1,   NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE},  \ +	{8,   NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE},  \ +	{32,  NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE},  \ +	{64,  NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE},  \ +	{128, NET_DIM_DEFAULT_TX_CQ_MODERATION_PKTS_FROM_EQE}   \ +} + +#define NET_DIM_TX_CQE_PROFILES { \ +	{5,  128},  \ +	{8,  64},  \ +	{16, 32},  \ +	{32, 32},  \ +	{64, 32}   \ +} + +static const struct dim_cq_moder +rx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = { +	NET_DIM_RX_EQE_PROFILES, +	NET_DIM_RX_CQE_PROFILES, +}; + +static const struct dim_cq_moder +tx_profile[DIM_CQ_PERIOD_NUM_MODES][NET_DIM_PARAMS_NUM_PROFILES] = { +	NET_DIM_TX_EQE_PROFILES, +	NET_DIM_TX_CQE_PROFILES, +}; +  struct dim_cq_moder  net_dim_get_rx_moderation(u8 cq_period_mode, int ix)  {  | 
