cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ice_arfs.h (2395B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Copyright (C) 2018-2020, Intel Corporation. */
      3
      4#ifndef _ICE_ARFS_H_
      5#define _ICE_ARFS_H_
      6
      7#include "ice_fdir.h"
      8
      9enum ice_arfs_fltr_state {
     10	ICE_ARFS_INACTIVE,
     11	ICE_ARFS_ACTIVE,
     12	ICE_ARFS_TODEL,
     13};
     14
     15struct ice_arfs_entry {
     16	struct ice_fdir_fltr fltr_info;
     17	struct hlist_node list_entry;
     18	u64 time_activated;	/* only valid for UDP flows */
     19	u32 flow_id;
     20	/* fltr_state = 0 - ICE_ARFS_INACTIVE:
     21	 *	filter needs to be updated or programmed in HW.
     22	 * fltr_state = 1 - ICE_ARFS_ACTIVE:
     23	 *	filter is active and programmed in HW.
     24	 * fltr_state = 2 - ICE_ARFS_TODEL:
     25	 *	filter has been deleted from HW and needs to be removed from
     26	 *	the aRFS hash table.
     27	 */
     28	u8 fltr_state;
     29};
     30
     31struct ice_arfs_entry_ptr {
     32	struct ice_arfs_entry *arfs_entry;
     33	struct hlist_node list_entry;
     34};
     35
     36struct ice_arfs_active_fltr_cntrs {
     37	atomic_t active_tcpv4_cnt;
     38	atomic_t active_tcpv6_cnt;
     39	atomic_t active_udpv4_cnt;
     40	atomic_t active_udpv6_cnt;
     41};
     42
     43#ifdef CONFIG_RFS_ACCEL
     44int
     45ice_rx_flow_steer(struct net_device *netdev, const struct sk_buff *skb,
     46		  u16 rxq_idx, u32 flow_id);
     47void ice_clear_arfs(struct ice_vsi *vsi);
     48void ice_free_cpu_rx_rmap(struct ice_vsi *vsi);
     49void ice_init_arfs(struct ice_vsi *vsi);
     50void ice_sync_arfs_fltrs(struct ice_pf *pf);
     51int ice_set_cpu_rx_rmap(struct ice_vsi *vsi);
     52void ice_remove_arfs(struct ice_pf *pf);
     53void ice_rebuild_arfs(struct ice_pf *pf);
     54bool
     55ice_is_arfs_using_perfect_flow(struct ice_hw *hw,
     56			       enum ice_fltr_ptype flow_type);
     57#else
     58static inline void ice_clear_arfs(struct ice_vsi *vsi) { }
     59static inline void ice_free_cpu_rx_rmap(struct ice_vsi *vsi) { }
     60static inline void ice_init_arfs(struct ice_vsi *vsi) { }
     61static inline void ice_sync_arfs_fltrs(struct ice_pf *pf) { }
     62static inline void ice_remove_arfs(struct ice_pf *pf) { }
     63static inline void ice_rebuild_arfs(struct ice_pf *pf) { }
     64
     65static inline int ice_set_cpu_rx_rmap(struct ice_vsi __always_unused *vsi)
     66{
     67	return 0;
     68}
     69
     70static inline int
     71ice_rx_flow_steer(struct net_device __always_unused *netdev,
     72		  const struct sk_buff __always_unused *skb,
     73		  u16 __always_unused rxq_idx, u32 __always_unused flow_id)
     74{
     75	return -EOPNOTSUPP;
     76}
     77
     78static inline bool
     79ice_is_arfs_using_perfect_flow(struct ice_hw __always_unused *hw,
     80			       enum ice_fltr_ptype __always_unused flow_type)
     81{
     82	return false;
     83}
     84#endif /* CONFIG_RFS_ACCEL */
     85#endif /* _ICE_ARFS_H_ */