net: hns3: Fixes the state to indicate client-type initialization
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: 38caee9d3e
("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>
This commit is contained in:
Родитель
7c4bfcb055
Коммит
90b99b094b
|
@ -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;
|
||||
|
|
|
@ -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))
|
||||
|
|
Загрузка…
Ссылка в новой задаче