net/sfc: use zero RSS channels as disabled RSS indicator
[dpdk.git] / drivers / net / sfc / sfc_ethdev.c
index 7620080..4c9335f 100644 (file)
@@ -1084,10 +1084,12 @@ sfc_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
 {
        struct sfc_adapter *sa = dev->data->dev_private;
 
-       if ((sa->rss_channels == 1) ||
-           (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE))
+       if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)
                return -ENOTSUP;
 
+       if (sa->rss_channels == 0)
+               return -EINVAL;
+
        sfc_adapter_lock(sa);
 
        /*
@@ -1114,12 +1116,16 @@ sfc_dev_rss_hash_update(struct rte_eth_dev *dev,
        unsigned int efx_hash_types;
        int rc = 0;
 
-       if ((sa->rss_channels == 1) ||
-           (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) {
+       if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) {
                sfc_err(sa, "RSS is not available");
                return -ENOTSUP;
        }
 
+       if (sa->rss_channels == 0) {
+               sfc_err(sa, "RSS is not configured");
+               return -EINVAL;
+       }
+
        if ((rss_conf->rss_key != NULL) &&
            (rss_conf->rss_key_len != sizeof(sa->rss_key))) {
                sfc_err(sa, "RSS key size is wrong (should be %lu)",
@@ -1176,10 +1182,12 @@ sfc_dev_rss_reta_query(struct rte_eth_dev *dev,
        struct sfc_adapter *sa = dev->data->dev_private;
        int entry;
 
-       if ((sa->rss_channels == 1) ||
-           (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE))
+       if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)
                return -ENOTSUP;
 
+       if (sa->rss_channels == 0)
+               return -EINVAL;
+
        if (reta_size != EFX_RSS_TBL_SIZE)
                return -EINVAL;
 
@@ -1209,12 +1217,16 @@ sfc_dev_rss_reta_update(struct rte_eth_dev *dev,
        int rc;
 
 
-       if ((sa->rss_channels == 1) ||
-           (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE)) {
+       if (sa->rss_support != EFX_RX_SCALE_EXCLUSIVE) {
                sfc_err(sa, "RSS is not available");
                return -ENOTSUP;
        }
 
+       if (sa->rss_channels == 0) {
+               sfc_err(sa, "RSS is not configured");
+               return -EINVAL;
+       }
+
        if (reta_size != EFX_RSS_TBL_SIZE) {
                sfc_err(sa, "RETA size is wrong (should be %u)",
                        EFX_RSS_TBL_SIZE);