static void
dp_netdev_flow_used(struct dp_netdev_flow *netdev_flow, int cnt, int size,
- uint16_t tcp_flags)
+ uint16_t tcp_flags, long long now)
{
- long long now = time_msec();
uint16_t flags;
atomic_store_relaxed(&netdev_flow->stats.used, now);
static inline void
packet_batch_execute(struct packet_batch *batch,
struct dp_netdev_pmd_thread *pmd,
- enum dp_stat_type hit_type)
+ enum dp_stat_type hit_type,
+ long long now)
{
struct dp_netdev_actions *actions;
struct dp_netdev_flow *flow = batch->flow;
dp_netdev_flow_used(batch->flow, batch->packet_count, batch->byte_count,
- batch->tcp_flags);
+ batch->tcp_flags, now);
actions = dp_netdev_flow_get_actions(flow);
*/
static inline size_t
emc_processing(struct dp_netdev_pmd_thread *pmd, struct dp_packet **packets,
- size_t cnt, struct netdev_flow_key *keys)
+ size_t cnt, struct netdev_flow_key *keys, long long now)
{
struct netdev_flow_key key;
struct packet_batch batches[4];
}
for (i = 0; i < n_batches; i++) {
- packet_batch_execute(&batches[i], pmd, DP_STAT_EXACT_HIT);
+ packet_batch_execute(&batches[i], pmd, DP_STAT_EXACT_HIT, now);
}
return notfound_cnt;
static inline void
fast_path_processing(struct dp_netdev_pmd_thread *pmd,
struct dp_packet **packets, size_t cnt,
- struct netdev_flow_key *keys)
+ struct netdev_flow_key *keys, long long now)
{
#if !defined(__CHECKER__) && !defined(_WIN32)
const size_t PKT_ARRAY_SIZE = cnt;
}
for (i = 0; i < n_batches; i++) {
- packet_batch_execute(&batches[i], pmd, DP_STAT_MASKED_HIT);
+ packet_batch_execute(&batches[i], pmd, DP_STAT_MASKED_HIT, now);
}
}
enum { PKT_ARRAY_SIZE = NETDEV_MAX_RX_BATCH };
#endif
struct netdev_flow_key keys[PKT_ARRAY_SIZE];
+ long long now = time_msec();
size_t newcnt;
- newcnt = emc_processing(pmd, packets, cnt, keys);
+ newcnt = emc_processing(pmd, packets, cnt, keys, now);
if (OVS_UNLIKELY(newcnt)) {
- fast_path_processing(pmd, packets, newcnt, keys);
+ fast_path_processing(pmd, packets, newcnt, keys, now);
}
}