X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Ffailsafe%2Ffailsafe_private.h;h=4f58a5c918b85e6c5406239222e8827796a7ea92;hb=cbb66daa3c85;hp=abbe73e872fa61b39c26d1b54bbcb778aa947ad0;hpb=901efc0da92546e5af799bcedd8e32f8e68d2fbc;p=dpdk.git diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index abbe73e872..4f58a5c918 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -6,6 +6,7 @@ #ifndef _RTE_ETH_FAILSAFE_PRIVATE_H_ #define _RTE_ETH_FAILSAFE_PRIVATE_H_ +#include #include #include @@ -13,6 +14,7 @@ #include #include #include +#include #include #define FAILSAFE_DRIVER_NAME "Fail-safe PMD" @@ -81,7 +83,8 @@ struct rte_flow { /* sub_flows */ struct rte_flow *flows[FAILSAFE_MAX_ETHPORTS]; /* flow description for synchronization */ - struct rte_flow_desc *fd; + struct rte_flow_conv_rule rule; + uint8_t rule_data[]; }; enum dev_state { @@ -97,13 +100,15 @@ struct fs_stats { uint64_t timestamp; }; +/* + * Allocated in shared memory. + */ struct sub_device { /* Exhaustive DPDK device description */ struct sub_device *next; struct rte_devargs devargs; - struct rte_bus *bus; - struct rte_device *dev; - struct rte_eth_dev *edev; + struct rte_bus *bus; /* for primary process only. */ + struct rte_device *dev; /* for primary process only. */ uint8_t sid; /* Device state machine */ enum dev_state state; @@ -114,7 +119,9 @@ struct sub_device { /* Others are retrieved through a file descriptor */ char *fd_str; /* fail-safe device backreference */ - struct rte_eth_dev *fs_dev; + uint16_t fs_port_id; /* shared between processes */ + /* sub device port id*/ + uint16_t sdev_port_id; /* shared between processes */ /* flag calling for recollection */ volatile unsigned int remove:1; /* flow isolation state */ @@ -125,14 +132,18 @@ struct sub_device { unsigned int lsc_callback:1; }; +/* + * This is referenced by eth_dev->data->dev_private + * This is shared between processes. + */ struct fs_priv { - struct rte_eth_dev *dev; + struct rte_eth_dev_data *data; /* backreference to shared data. */ /* * Set of sub_devices. * subs[0] is the preferred device * any other is just another slave */ - struct sub_device *subs; + struct sub_device *subs; /* shared between processes */ uint8_t subs_head; /* if head == tail, no subs */ uint8_t subs_tail; /* first invalid */ uint8_t subs_tx; /* current emitting device */ @@ -190,7 +201,7 @@ int failsafe_hotplug_alarm_cancel(struct rte_eth_dev *dev); /* RX / TX */ -void set_burst_fn(struct rte_eth_dev *dev, int force_safe); +void failsafe_set_burst_fn(struct rte_eth_dev *dev, int force_safe); uint16_t failsafe_rx_burst(void *rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); @@ -236,8 +247,8 @@ int failsafe_eth_new_event_callback(uint16_t port_id, extern const char pmd_failsafe_driver_name[]; extern const struct eth_dev_ops failsafe_ops; extern const struct rte_flow_ops fs_flow_ops; -extern uint64_t hotplug_poll; -extern int mac_from_arg; +extern uint64_t failsafe_hotplug_poll; +extern int failsafe_mac_from_arg; /* HELPERS */ @@ -247,11 +258,12 @@ extern int mac_from_arg; /* sdev: (struct sub_device *) */ #define ETH(sdev) \ - ((sdev)->edev) + ((sdev)->sdev_port_id == RTE_MAX_ETHPORTS ? \ + NULL : &rte_eth_devices[(sdev)->sdev_port_id]) /* sdev: (struct sub_device *) */ #define PORT_ID(sdev) \ - (ETH(sdev)->data->port_id) + ((sdev)->sdev_port_id) /* sdev: (struct sub_device *) */ #define SUB_ID(sdev) \ @@ -317,18 +329,18 @@ extern int mac_from_arg; */ #define FS_ATOMIC_RX(s, i) \ rte_atomic64_read( \ - &((struct rxq *)((s)->fs_dev->data->rx_queues[i]))->refcnt[(s)->sid] \ - ) + &((struct rxq *) \ + (fs_dev(s)->data->rx_queues[i]))->refcnt[(s)->sid]) /** * s: (struct sub_device *) * i: uint16_t qid */ #define FS_ATOMIC_TX(s, i) \ rte_atomic64_read( \ - &((struct txq *)((s)->fs_dev->data->tx_queues[i]))->refcnt[(s)->sid] \ - ) + &((struct txq *) \ + (fs_dev(s)->data->tx_queues[i]))->refcnt[(s)->sid]) -#ifdef RTE_EXEC_ENV_BSDAPP +#ifdef RTE_EXEC_ENV_FREEBSD #define FS_THREADID_TYPE void* #define FS_THREADID_FMT "p" #else @@ -372,6 +384,11 @@ fs_find_next(struct rte_eth_dev *dev, return &subs[sid]; } +static inline struct rte_eth_dev * +fs_dev(struct sub_device *sdev) { + return &rte_eth_devices[sdev->fs_port_id]; +} + /* * Lock hot-plug mutex. * is_alarm means that the caller is, for sure, the hot-plug alarm mechanism. @@ -396,9 +413,6 @@ fs_lock(struct rte_eth_dev *dev, unsigned int is_alarm) return ret; } } - DEBUG("Hot-plug mutex was locked by thread %" FS_THREADID_FMT "%s", - (FS_THREADID_TYPE)pthread_self(), - PRIV(dev)->alarm_lock ? " by the hot-plug alarm" : ""); return ret; } @@ -410,7 +424,6 @@ static inline void fs_unlock(struct rte_eth_dev *dev, unsigned int is_alarm) { int ret; - unsigned int prev_alarm_lock = PRIV(dev)->alarm_lock; if (is_alarm) { RTE_ASSERT(PRIV(dev)->alarm_lock == 1); @@ -419,10 +432,6 @@ fs_unlock(struct rte_eth_dev *dev, unsigned int is_alarm) ret = pthread_mutex_unlock(&PRIV(dev)->hotplug_mutex); if (ret) ERROR("Cannot unlock hot-plug mutex(%s)", strerror(ret)); - else - DEBUG("Hot-plug mutex was unlocked by thread %" FS_THREADID_FMT "%s", - (FS_THREADID_TYPE)pthread_self(), - prev_alarm_lock ? " by the hot-plug alarm" : ""); } /* @@ -470,7 +479,7 @@ fs_switch_dev(struct rte_eth_dev *dev, } else { return; } - set_burst_fn(dev, 0); + failsafe_set_burst_fn(dev, 0); rte_wmb(); }