net/sfc: support Rx packet types get in secondary process
authorAndrew Rybchenko <arybchenko@solarflare.com>
Thu, 7 Feb 2019 12:17:53 +0000 (12:17 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 7 Feb 2019 15:06:30 +0000 (16:06 +0100)
Secondary process needs to know packet classes supported
by the NIC on Rx.

Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
doc/guides/rel_notes/release_19_05.rst
drivers/net/sfc/sfc.c
drivers/net/sfc/sfc.h
drivers/net/sfc/sfc_ethdev.c

index 1b7f14c..2b0f60d 100644 (file)
@@ -63,6 +63,7 @@ New Features
   * Added support for Tx descriptor status API in a secondary process.
   * Added support for RSS RETA and hash configuration get API in a secondary
     process.
+  * Added support for Rx packet types list in a secondary process.
 
 
 Removed Items
index 8526a84..83001cb 100644 (file)
@@ -342,6 +342,15 @@ sfc_try_start(struct sfc_adapter *sa)
                goto fail_nic_init;
 
        encp = efx_nic_cfg_get(sa->nic);
+
+       /*
+        * Refresh (since it may change on NIC reset/restart) a copy of
+        * supported tunnel encapsulations in shared memory to be used
+        * on supported Rx packet type classes get.
+        */
+       sa->priv.shared->tunnel_encaps =
+               encp->enc_tunnel_encapsulations_supported;
+
        if (encp->enc_tunnel_encapsulations_supported != 0) {
                sfc_log_init(sa, "apply tunnel config");
                rc = efx_tunnel_reconfigure(sa->nic);
@@ -728,6 +737,13 @@ sfc_attach(struct sfc_adapter *sa)
 
        encp = efx_nic_cfg_get(sa->nic);
 
+       /*
+        * Make a copy of supported tunnel encapsulations in shared
+        * memory to be used on supported Rx packet type classes get.
+        */
+       sa->priv.shared->tunnel_encaps =
+               encp->enc_tunnel_encapsulations_supported;
+
        if (sa->priv.dp_tx->features & SFC_DP_TX_FEAT_TSO) {
                sa->tso = encp->enc_fw_assisted_tso_v2_enabled;
                if (!sa->tso)
index 39b4ba5..725dd5e 100644 (file)
@@ -184,6 +184,7 @@ struct sfc_adapter_shared {
        struct sfc_rss                  rss;
 
        boolean_t                       isolated;
+       uint32_t                        tunnel_encaps;
 
        struct rte_pci_addr             pci_addr;
        uint16_t                        port_id;
index a54a9e6..2865508 100644 (file)
@@ -182,11 +182,8 @@ static const uint32_t *
 sfc_dev_supported_ptypes_get(struct rte_eth_dev *dev)
 {
        const struct sfc_adapter_priv *sap = sfc_adapter_priv_by_eth_dev(dev);
-       struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev);
-       const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic);
-       uint32_t tunnel_encaps = encp->enc_tunnel_encapsulations_supported;
 
-       return sap->dp_rx->supported_ptypes_get(tunnel_encaps);
+       return sap->dp_rx->supported_ptypes_get(sap->shared->tunnel_encaps);
 }
 
 static int
@@ -1897,6 +1894,7 @@ sfc_eth_dev_clear_ops(struct rte_eth_dev *dev)
 }
 
 static const struct eth_dev_ops sfc_eth_dev_secondary_ops = {
+       .dev_supported_ptypes_get       = sfc_dev_supported_ptypes_get,
        .rx_queue_count                 = sfc_rx_queue_count,
        .rx_descriptor_done             = sfc_rx_descriptor_done,
        .rx_descriptor_status           = sfc_rx_descriptor_status,