]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
net: hns3: Fixes the state to indicate client-type initialization
authorPeng Li <lipeng321@huawei.com>
Fri, 25 May 2018 18:43:01 +0000 (19:43 +0100)
committerKhalid Elmously <khalid.elmously@canonical.com>
Wed, 6 Jun 2018 18:41:18 +0000 (14:41 -0400)
BugLink: https://bugs.launchpad.net/bugs/1768670
HNAE3 module supports kernel nic driver, user nic driver and roce driver,
and there are 3 client types. Driver uses one bit(HNAE3_CLIENT_INITED_B)
to indicate the client initialization state, it will cause confusion
for 3 client types. This patch fixes it by use 3 bits to indicate the
initialization state.

Fixes: 38caee9d3ee8 ("net: hns3: Add support of the HNAE3 framework")
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 90b99b094b4bd270542e3ade8cf74e21c228c069 linux-next)
Signed-off-by: dann frazier <dann.frazier@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/net/ethernet/hisilicon/hns3/hnae3.c
drivers/net/ethernet/hisilicon/hns3/hnae3.h

index 63d7dbfb90bf3feeaa755390b78ab1bc67f9006b..9d79dad2c6aae0f9bdbddeac1659ae4f08751d3d 100644 (file)
@@ -36,6 +36,49 @@ static bool hnae3_client_match(enum hnae3_client_type client_type,
        return false;
 }
 
+static void hnae3_set_client_init_flag(struct hnae3_client *client,
+                                      struct hnae3_ae_dev *ae_dev, int inited)
+{
+       switch (client->type) {
+       case HNAE3_CLIENT_KNIC:
+               hnae_set_bit(ae_dev->flag, HNAE3_KNIC_CLIENT_INITED_B, inited);
+               break;
+       case HNAE3_CLIENT_UNIC:
+               hnae_set_bit(ae_dev->flag, HNAE3_UNIC_CLIENT_INITED_B, inited);
+               break;
+       case HNAE3_CLIENT_ROCE:
+               hnae_set_bit(ae_dev->flag, HNAE3_ROCE_CLIENT_INITED_B, inited);
+               break;
+       default:
+               break;
+       }
+}
+
+static int hnae3_get_client_init_flag(struct hnae3_client *client,
+                                      struct hnae3_ae_dev *ae_dev)
+{
+       int inited = 0;
+
+       switch (client->type) {
+       case HNAE3_CLIENT_KNIC:
+               inited = hnae_get_bit(ae_dev->flag,
+                                      HNAE3_KNIC_CLIENT_INITED_B);
+               break;
+       case HNAE3_CLIENT_UNIC:
+               inited = hnae_get_bit(ae_dev->flag,
+                                      HNAE3_UNIC_CLIENT_INITED_B);
+               break;
+       case HNAE3_CLIENT_ROCE:
+               inited = hnae_get_bit(ae_dev->flag,
+                                     HNAE3_ROCE_CLIENT_INITED_B);
+               break;
+       default:
+               break;
+       }
+
+       return inited;
+}
+
 static int hnae3_match_n_instantiate(struct hnae3_client *client,
                                     struct hnae3_ae_dev *ae_dev, bool is_reg)
 {
@@ -56,14 +99,14 @@ static int hnae3_match_n_instantiate(struct hnae3_client *client,
                        return ret;
                }
 
-               hnae_set_bit(ae_dev->flag, HNAE3_CLIENT_INITED_B, 1);
+               hnae3_set_client_init_flag(client, ae_dev, 1);
                return 0;
        }
 
-       if (hnae_get_bit(ae_dev->flag, HNAE3_CLIENT_INITED_B)) {
+       if (hnae3_get_client_init_flag(client, ae_dev)) {
                ae_dev->ops->uninit_client_instance(client, ae_dev);
 
-               hnae_set_bit(ae_dev->flag, HNAE3_CLIENT_INITED_B, 0);
+               hnae3_set_client_init_flag(client, ae_dev, 0);
        }
 
        return 0;
index 45c571eea2ae530316b9f3f7bcfea85e44f723b7..f250c592a2185e08f01f61cfa874d9934cddc9de 100644 (file)
@@ -54,7 +54,9 @@
 #define HNAE3_DEV_INITED_B                     0x0
 #define HNAE3_DEV_SUPPORT_ROCE_B               0x1
 #define HNAE3_DEV_SUPPORT_DCB_B                        0x2
-#define HNAE3_CLIENT_INITED_B                  0x3
+#define HNAE3_KNIC_CLIENT_INITED_B             0x3
+#define HNAE3_UNIC_CLIENT_INITED_B             0x4
+#define HNAE3_ROCE_CLIENT_INITED_B             0x5
 
 #define HNAE3_DEV_SUPPORT_ROCE_DCB_BITS (BIT(HNAE3_DEV_SUPPORT_DCB_B) |\
                BIT(HNAE3_DEV_SUPPORT_ROCE_B))