Kernel
Threads by month
- ----- 2025 -----
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
August 2020
- 10 participants
- 44 discussions

17 Aug '20
From: Chiqijun <chiqijun(a)huawei.com>
driver inclusion
category: bugfix
bugzilla: 4472
-----------------------------------------------------------------------
Fix misspelled word and wrong print format.
Signed-off-by: Chiqijun <chiqijun(a)huawei.com>
Reviewed-by: Zengweiliang <zengweiliang.zengweiliang(a)huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang(a)huawei.com>
---
.../net/ethernet/huawei/hinic/hinic_api_cmd.c | 4 +-
drivers/net/ethernet/huawei/hinic/hinic_cfg.c | 20 +++---
.../net/ethernet/huawei/hinic/hinic_cmdq.c | 4 +-
drivers/net/ethernet/huawei/hinic/hinic_dcb.c | 34 +++++-----
drivers/net/ethernet/huawei/hinic/hinic_eqs.c | 4 +-
.../net/ethernet/huawei/hinic/hinic_ethtool.c | 20 +++---
.../net/ethernet/huawei/hinic/hinic_hwdev.c | 40 +++++------
drivers/net/ethernet/huawei/hinic/hinic_lld.c | 20 +++---
.../net/ethernet/huawei/hinic/hinic_main.c | 6 +-
.../net/ethernet/huawei/hinic/hinic_mbox.c | 9 +--
.../net/ethernet/huawei/hinic/hinic_mgmt.c | 20 +++---
.../net/ethernet/huawei/hinic/hinic_nic_cfg.c | 34 +++++-----
.../net/ethernet/huawei/hinic/hinic_nic_dbg.c | 6 +-
.../net/ethernet/huawei/hinic/hinic_nic_io.c | 2 +-
.../net/ethernet/huawei/hinic/hinic_nictool.c | 68 +++++++++----------
.../ethernet/huawei/hinic/hinic_port_cmd.h | 2 +-
.../net/ethernet/huawei/hinic/hinic_sriov.c | 4 +-
drivers/net/ethernet/huawei/hinic/hinic_tx.c | 4 +-
drivers/net/ethernet/huawei/hinic/hinic_wq.c | 2 +-
19 files changed, 154 insertions(+), 149 deletions(-)
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_api_cmd.c b/drivers/net/ethernet/huawei/hinic/hinic_api_cmd.c
index 5a1e8655be38..6ce69dc73064 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_api_cmd.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_api_cmd.c
@@ -129,7 +129,7 @@ static void dump_api_chain_reg(struct hinic_api_cmd_chain *chain)
addr = HINIC_CSR_API_CMD_STATUS_0_ADDR(chain->chain_type);
val = hinic_hwif_read_reg(chain->hwdev->hwif, addr);
- sdk_err(dev, "Chain type: 0x%x, cpld error: 0x%x, check error: 0x%x, current fsm: 0x%x\n",
+ sdk_err(dev, "Chain type: 0x%x, cpld error: 0x%x, check error: 0x%x, current fsm: 0x%x\n",
chain->chain_type, HINIC_API_CMD_STATUS_GET(val, CPLD_ERR),
HINIC_API_CMD_STATUS_GET(val, CHKSUM_ERR),
HINIC_API_CMD_STATUS_GET(val, FSM));
@@ -161,7 +161,7 @@ static int chain_busy(struct hinic_api_cmd_chain *chain)
resp_header = be64_to_cpu(ctxt->resp->header);
if (ctxt->status &&
!HINIC_API_CMD_RESP_HEADER_VALID(resp_header)) {
- sdk_err(dev, "Context(0x%x) busy!, pi: %d, resp_header: 0x%08x%08x\n",
+ sdk_err(dev, "Context(0x%x) busy, pi: %d, resp_header: 0x%08x%08x\n",
ctxt->status, chain->prod_idx,
upper_32_bits(resp_header),
lower_32_bits(resp_header));
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_cfg.c b/drivers/net/ethernet/huawei/hinic/hinic_cfg.c
index 18937d7d9057..303225e5689e 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_cfg.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_cfg.c
@@ -629,7 +629,7 @@ static int get_cap_from_pf(struct hinic_hwdev *dev, enum func_type type)
err = hinic_msg_to_mgmt_sync(dev, HINIC_MOD_CFGM, HINIC_CFG_MBOX_CAP,
&dev_cap, in_len, &dev_cap, &out_len, 0);
if (err || dev_cap.status || !out_len) {
- sdk_err(dev->dev_hdl, "Failed to get capability from PF, err: %d, status: 0x%x, out size: 0x%x\n",
+ sdk_err(dev->dev_hdl, "Failed to get capability from PF, err: %d, status: 0x%x, out size: 0x%x\n",
err, dev_cap.status, out_len);
return -EFAULT;
}
@@ -925,7 +925,7 @@ int hinic_vector_to_eqn(void *hwdev, enum hinic_service_type type, int vector)
if (type != SERVICE_T_ROCE && type != SERVICE_T_IWARP) {
sdk_err(dev->dev_hdl,
- "Service type :%d, only RDMA service could get eqn by vector.\n",
+ "Service type: %d, only RDMA service could get eqn by vector\n",
type);
return -EINVAL;
}
@@ -982,7 +982,7 @@ static int cfg_enable_interrupt(struct hinic_hwdev *dev)
irq_info = cfg_mgmt->irq_param_info.alloc_info;
- sdk_info(dev->dev_hdl, "Interrupt type: %d, irq num: %d.\n",
+ sdk_info(dev->dev_hdl, "Interrupt type: %d, irq num: %d\n",
cfg_mgmt->svc_cap.interrupt_type, nreq);
switch (cfg_mgmt->svc_cap.interrupt_type) {
@@ -1001,7 +1001,7 @@ static int cfg_enable_interrupt(struct hinic_hwdev *dev)
actual_irq = pci_enable_msix_range(pcidev, entry,
VECTOR_THRESHOLD, nreq);
if (actual_irq < 0) {
- sdk_err(dev->dev_hdl, "Alloc msix entries with threshold 2 failed.\n");
+ sdk_err(dev->dev_hdl, "Alloc msix entries with threshold 2 failed\n");
kfree(entry);
return -ENOMEM;
}
@@ -1009,7 +1009,7 @@ static int cfg_enable_interrupt(struct hinic_hwdev *dev)
nreq = (u16)actual_irq;
cfg_mgmt->irq_param_info.num_total = nreq;
cfg_mgmt->irq_param_info.num_irq_remain = nreq;
- sdk_info(dev->dev_hdl, "Request %d msix vector success.\n",
+ sdk_info(dev->dev_hdl, "Request %d msix vector success\n",
nreq);
for (i = 0; i < nreq; ++i) {
@@ -1059,12 +1059,12 @@ int hinic_alloc_irqs(void *hwdev, enum hinic_service_type type, u16 num,
if (num > free_num_irq) {
if (free_num_irq == 0) {
sdk_err(dev->dev_hdl,
- "no free irq resource in cfg mgmt.\n");
+ "no free irq resource in cfg mgmt\n");
mutex_unlock(&irq_info->irq_mutex);
return -ENOMEM;
}
- sdk_warn(dev->dev_hdl, "only %d irq resource in cfg mgmt.\n",
+ sdk_warn(dev->dev_hdl, "only %d irq resource in cfg mgmt\n",
free_num_irq);
num = free_num_irq;
}
@@ -1125,7 +1125,7 @@ void hinic_free_irq(void *hwdev, enum hinic_service_type type, u32 irq_id)
alloc_info[i].free = CFG_FREE;
irq_info->num_irq_remain++;
if (irq_info->num_irq_remain > max_num_irq) {
- sdk_err(dev->dev_hdl, "Find target,but over range\n");
+ sdk_err(dev->dev_hdl, "Find target, but over range\n");
mutex_unlock(&irq_info->irq_mutex);
return;
}
@@ -1135,7 +1135,7 @@ void hinic_free_irq(void *hwdev, enum hinic_service_type type, u32 irq_id)
}
if (i >= max_num_irq)
- sdk_warn(dev->dev_hdl, "Irq %d don`t need to free\n", irq_id);
+ sdk_warn(dev->dev_hdl, "Irq %d don't need to free\n", irq_id);
mutex_unlock(&irq_info->irq_mutex);
}
@@ -1262,7 +1262,7 @@ void hinic_free_ceq(void *hwdev, enum hinic_service_type type, int ceq_id)
}
if (i >= num_ceq)
- sdk_warn(dev->dev_hdl, "ceq %d don`t need to free.\n", ceq_id);
+ sdk_warn(dev->dev_hdl, "ceq %d don't need to free\n", ceq_id);
mutex_unlock(&eq->eq_mutex);
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_cmdq.c b/drivers/net/ethernet/huawei/hinic/hinic_cmdq.c
index 7293ff216a7c..6d78d22272f0 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_cmdq.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_cmdq.c
@@ -251,7 +251,7 @@ struct hinic_cmd_buf *hinic_alloc_cmd_buf(void *hwdev)
void *dev;
if (!hwdev) {
- pr_err("Failed to alloc cmd buf, Invalid hwdev\n");
+ pr_err("Failed to alloc cmd buf, invalid hwdev\n");
return NULL;
}
@@ -1516,7 +1516,7 @@ int hinic_cmdqs_init(struct hinic_hwdev *hwdev)
err = init_cmdq(&cmdqs->cmdq[cmdq_type], hwdev,
&cmdqs->saved_wqs[cmdq_type], cmdq_type);
if (err) {
- sdk_err(hwdev->dev_hdl, "Failed to initialize cmdq type :%d\n",
+ sdk_err(hwdev->dev_hdl, "Failed to initialize cmdq type: %d\n",
cmdq_type);
goto init_cmdq_err;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_dcb.c b/drivers/net/ethernet/huawei/hinic/hinic_dcb.c
index e17a91f8bd59..0c7ae9133407 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_dcb.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_dcb.c
@@ -338,8 +338,8 @@ u8 hinic_setup_dcb_tool(struct net_device *netdev, u8 *dcb_en, bool wr_flag)
if (wr_flag) {
if (nic_dev->max_qps < nic_dev->dcb_cfg.pg_tcs && *dcb_en) {
- netif_err(nic_dev, drv, netdev,
- "max_qps:%d is less than %d\n",
+ nicif_err(nic_dev, drv, netdev,
+ "max_qps: %d is less than %d\n",
nic_dev->max_qps, nic_dev->dcb_cfg.pg_tcs);
return 1;
}
@@ -357,7 +357,7 @@ u8 hinic_setup_dcb_tool(struct net_device *netdev, u8 *dcb_en, bool wr_flag)
mutex_lock(&nic_dev->nic_mutex);
if (!err)
- netif_info(nic_dev, drv, netdev, "%s DCB\n",
+ nicif_info(nic_dev, drv, netdev, "%s DCB\n",
*dcb_en ? "Enable" : "Disable");
} else {
*dcb_en = (u8)test_bit(HINIC_DCB_ENABLE, &nic_dev->flags);
@@ -386,15 +386,15 @@ static u8 hinic_dcbnl_set_state(struct net_device *netdev, u8 state)
return 0;
if (nic_dev->max_qps < nic_dev->dcb_cfg.pg_tcs && state) {
- netif_err(nic_dev, drv, netdev,
- "max_qps:%d is less than %d\n",
+ nicif_err(nic_dev, drv, netdev,
+ "max_qps: %d is less than %d\n",
nic_dev->max_qps, nic_dev->dcb_cfg.pg_tcs);
return 1;
}
err = hinic_setup_tc(netdev, state ? nic_dev->dcb_cfg.pg_tcs : 0);
if (!err)
- netif_info(nic_dev, drv, netdev, "%s DCB\n",
+ nicif_info(nic_dev, drv, netdev, "%s DCB\n",
state ? "Enable" : "Disable");
return !!err;
@@ -1062,12 +1062,12 @@ static int __set_hw_ets(struct hinic_nic_dev *nic_dev)
err = hinic_dcb_set_ets(nic_dev->hwdev, up_tc, pg_bw, up_pgid,
up_bw, up_strict);
if (err) {
- hinic_err(nic_dev, drv, "Failed to set ets with mode:%d\n",
+ hinic_err(nic_dev, drv, "Failed to set ets with mode: %d\n",
nic_dev->dcbx_cap);
return err;
}
- hinic_info(nic_dev, drv, "Set ets to hw done with mode:%d\n",
+ hinic_info(nic_dev, drv, "Set ets to hw done with mode: %d\n",
nic_dev->dcbx_cap);
return 0;
@@ -1332,8 +1332,8 @@ static int hinic_dcbnl_ieee_set_ets(struct net_device *netdev,
if (max_tc != netdev_get_num_tc(netdev)) {
err = hinic_setup_tc(netdev, max_tc);
if (err) {
- netif_err(nic_dev, drv, netdev,
- "Failed to setup tc with max_tc:%d, err:%d\n",
+ nicif_err(nic_dev, drv, netdev,
+ "Failed to setup tc with max_tc: %d, err: %d\n",
max_tc, err);
memcpy(my_ets, &back_ets, sizeof(struct ieee_ets));
return err;
@@ -1386,7 +1386,7 @@ static int hinic_dcbnl_ieee_set_pfc(struct net_device *netdev,
pfc_map = pfc->pfc_en & nic_dev->up_valid_bitmap;
outof_range_pfc = pfc->pfc_en & (~nic_dev->up_valid_bitmap);
if (outof_range_pfc)
- netif_info(nic_dev, drv, netdev,
+ nicif_info(nic_dev, drv, netdev,
"pfc setting out of range, 0x%x will be ignored\n",
outof_range_pfc);
@@ -1407,7 +1407,7 @@ static int hinic_dcbnl_ieee_set_pfc(struct net_device *netdev,
err = hinic_dcb_set_pfc(nic_dev->hwdev, pfc_en, pfc_map);
if (err) {
hinic_info(nic_dev, drv,
- "Failed to set pfc to hw with pfc_map:0x%x err:%d\n",
+ "Failed to set pfc to hw with pfc_map: 0x%x err: %d\n",
pfc_map, err);
hinic_start_port_traffic_flow(nic_dev);
return err;
@@ -1416,7 +1416,7 @@ static int hinic_dcbnl_ieee_set_pfc(struct net_device *netdev,
hinic_start_port_traffic_flow(nic_dev);
my_pfc->pfc_en = pfc->pfc_en;
hinic_info(nic_dev, drv,
- "Set pfc successfully with pfc_map:0x%x, pfc_en:%d\n",
+ "Set pfc successfully with pfc_map: 0x%x, pfc_en: %d\n",
pfc_map, pfc_en);
return 0;
@@ -1479,7 +1479,7 @@ static u8 hinic_dcbnl_setdcbx(struct net_device *netdev, u8 mode)
((mode & DCB_CAP_DCBX_LLD_MANAGED) &&
(!(mode & DCB_CAP_DCBX_HOST)))) {
nicif_info(nic_dev, drv, netdev,
- "Set dcbx failed with invalid mode:%d\n", mode);
+ "Set dcbx failed with invalid mode: %d\n", mode);
return 1;
}
@@ -1497,7 +1497,7 @@ static u8 hinic_dcbnl_setdcbx(struct net_device *netdev, u8 mode)
err = hinic_setup_tc(netdev, 0);
if (err) {
nicif_err(nic_dev, drv, netdev,
- "Failed to setup tc with mode:%d\n",
+ "Failed to setup tc with mode: %d\n",
mode);
return 1;
}
@@ -1509,7 +1509,7 @@ static u8 hinic_dcbnl_setdcbx(struct net_device *netdev, u8 mode)
err = hinic_setup_tc(netdev, 0);
if (err) {
nicif_err(nic_dev, drv, netdev,
- "Failed to setup tc with mode:%d\n", mode);
+ "Failed to setup tc with mode: %d\n", mode);
return 1;
}
}
@@ -1617,7 +1617,7 @@ int __set_cos_up_map(struct hinic_nic_dev *nic_dev, u8 *cos_up)
return -EFAULT;
}
- nicif_info(nic_dev, drv, netdev, "Set cos2up:%d%d%d%d%d%d%d%d\n",
+ nicif_info(nic_dev, drv, netdev, "Set cos2up: %d%d%d%d%d%d%d%d\n",
cos_up[0], cos_up[1], cos_up[2], cos_up[3],
cos_up[4], cos_up[5], cos_up[6], cos_up[7]);
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_eqs.c b/drivers/net/ethernet/huawei/hinic/hinic_eqs.c
index 22fc49d16462..6c352dff996a 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_eqs.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_eqs.c
@@ -486,7 +486,7 @@ static void ceq_event_handler(struct hinic_ceqs *ceqs, u32 ceqe)
u32 ceqe_data = CEQE_DATA(ceqe);
if (event >= HINIC_MAX_CEQ_EVENTS) {
- sdk_err(hwdev->dev_hdl, "Ceq unknown event:%d, ceqe date: 0x%x\n",
+ sdk_err(hwdev->dev_hdl, "Ceq unknown event: %d, ceqe date: 0x%x\n",
event, ceqe_data);
return;
}
@@ -1126,7 +1126,7 @@ static int init_eq(struct hinic_eq *eq, struct hinic_hwdev *hwdev, u16 q_id,
eq->orig_page_size = eq->page_size;
eq->num_pages = GET_EQ_NUM_PAGES(eq, eq->page_size);
if (eq->num_pages > HINIC_EQ_MAX_PAGES) {
- sdk_err(hwdev->dev_hdl, "Number pages:%d too many pages for eq\n",
+ sdk_err(hwdev->dev_hdl, "Number pages: %d too many pages for eq\n",
eq->num_pages);
return -EINVAL;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
index 98e230d4e3c1..f79594570002 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
@@ -753,7 +753,7 @@ static int hinic_set_settings_to_hw(struct hinic_nic_dev *nic_dev,
(autoneg ? "autong enable " : "autong disable ") : "");
if (err < 0 || err >= SET_LINK_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
- "Failed snprintf link state, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf link state, function return(%d) and dest_len(%d)\n",
err, SET_LINK_STR_MAX_LEN);
return -EFAULT;
}
@@ -763,7 +763,7 @@ static int hinic_set_settings_to_hw(struct hinic_nic_dev *nic_dev,
"%sspeed %d ", set_link_str, speed);
if (err <= 0 || err >= SET_LINK_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
- "Failed snprintf link speed, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf link speed, function return(%d) and dest_len(%d)\n",
err, SET_LINK_STR_MAX_LEN);
return -EFAULT;
}
@@ -897,7 +897,7 @@ static void hinic_get_drvinfo(struct net_device *netdev,
"%s", mgmt_ver);
if (err <= 0 || err >= (int)sizeof(info->fw_version))
nicif_err(nic_dev, drv, netdev,
- "Failed snprintf fw_version, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf fw_version, function return(%d) and dest_len(%d)\n",
err, (int)sizeof(info->fw_version));
}
@@ -997,7 +997,7 @@ static int hinic_set_ringparam(struct net_device *netdev,
ring->rx_pending > HINIC_MAX_QUEUE_DEPTH ||
ring->rx_pending < HINIC_MIN_QUEUE_DEPTH) {
nicif_err(nic_dev, drv, netdev,
- "Queue depth out of rang [%d-%d]\n",
+ "Queue depth out of range [%d-%d]\n",
HINIC_MIN_QUEUE_DEPTH, HINIC_MAX_QUEUE_DEPTH);
return -EINVAL;
}
@@ -1449,7 +1449,7 @@ static int __hinic_set_coalesce(struct net_device *netdev,
err = snprintf(obj_str, sizeof(obj_str), "for netdev");
if (err <= 0 || err >= OBJ_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
- "Failed snprintf string, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf string, function return(%d) and dest_len(%d)\n",
err, OBJ_STR_MAX_LEN);
return -EFAULT;
}
@@ -1458,7 +1458,7 @@ static int __hinic_set_coalesce(struct net_device *netdev,
err = snprintf(obj_str, sizeof(obj_str), "for queue %d", queue);
if (err <= 0 || err >= OBJ_STR_MAX_LEN) {
nicif_err(nic_dev, drv, netdev,
- "Failed snprintf string, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf string, function return(%d) and dest_len(%d)\n",
err, OBJ_STR_MAX_LEN);
return -EFAULT;
}
@@ -1712,7 +1712,7 @@ static void hinic_get_strings(struct net_device *netdev,
return;
default:
nicif_err(nic_dev, drv, netdev,
- "Invalid string set %d.", stringset);
+ "Invalid string set %d", stringset);
return;
}
}
@@ -1913,7 +1913,7 @@ static int hinic_run_lp_test(struct hinic_nic_dev *nic_dev, u32 test_time)
}
dev_kfree_skb_any(skb_tmp);
- nicif_info(nic_dev, drv, netdev, "Loopback test succeed.\n");
+ nicif_info(nic_dev, drv, netdev, "Loopback test succeed\n");
return 0;
}
@@ -1961,7 +1961,7 @@ void hinic_lp_test(struct net_device *netdev, struct ethtool_test *eth_test,
lb_test_rx_buf = vmalloc(LP_PKT_CNT * LP_PKT_LEN);
if (!lb_test_rx_buf) {
nicif_err(nic_dev, drv, netdev,
- "Failed to alloc rx buffer for loopback test.\n");
+ "Failed to alloc rx buffer for loopback test\n");
err = 1;
} else {
nic_dev->lb_test_rx_buf = lb_test_rx_buf;
@@ -1980,7 +1980,7 @@ void hinic_lp_test(struct net_device *netdev, struct ethtool_test *eth_test,
if (!(test.flags & ETH_TEST_FL_EXTERNAL_LB)) {
if (hinic_set_loopback_mode(nic_dev->hwdev, false)) {
nicif_err(nic_dev, drv, netdev,
- "Failed to cancel port loopback mode after loopback test.\n");
+ "Failed to cancel port loopback mode after loopback test\n");
err = 1;
goto resume_link;
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c b/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c
index e815eec59b45..d19da7238f9b 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c
@@ -1369,7 +1369,7 @@ int hinic_clean_root_ctxt(void *hwdev)
&root_ctxt, &out_size, 0);
if (err || !out_size || root_ctxt.status) {
sdk_err(((struct hinic_hwdev *)hwdev)->dev_hdl,
- "Failed to set root context, err: %d, status: 0x%x, out_size: 0x%x\n",
+ "Failed to clean root context, err: %d, status: 0x%x, out_size: 0x%x\n",
err, root_ctxt.status, out_size);
return -EFAULT;
}
@@ -1528,7 +1528,7 @@ static int hinic_vf_rx_tx_flush_in_pf(struct hinic_hwdev *hwdev, u16 vf_id)
HINIC_MGMT_CMD_START_FLR, &clr_res,
sizeof(clr_res), &clr_res, &out_size, 0);
if (err || !out_size || clr_res.status) {
- sdk_warn(hwdev->dev_hdl, "Failed to flush doorbell, err: %d, status: 0x%x, out_size: 0x%x\n",
+ sdk_warn(hwdev->dev_hdl, "Failed to start flr, err: %d, status: 0x%x, out_size: 0x%x\n",
err, clr_res.status, out_size);
ret = err ? err : (-EFAULT);
}
@@ -1759,7 +1759,7 @@ static int init_aeqs_msix_attr(struct hinic_hwdev *hwdev)
info.msix_index = eq->eq_irq.msix_entry_idx;
err = hinic_set_interrupt_cfg_direct(hwdev, &info);
if (err) {
- sdk_err(hwdev->dev_hdl, "Set msix attr for aeq %d failed\n",
+ sdk_err(hwdev->dev_hdl, "Failed to set msix attr for aeq %d\n",
q_id);
return -EFAULT;
}
@@ -1789,7 +1789,7 @@ static int init_ceqs_msix_attr(struct hinic_hwdev *hwdev)
info.msix_index = eq->eq_irq.msix_entry_idx;
err = hinic_set_interrupt_cfg(hwdev, info);
if (err) {
- sdk_err(hwdev->dev_hdl, "Set msix attr for ceq %d failed\n",
+ sdk_err(hwdev->dev_hdl, "Failed to set msix attr for ceq %d\n",
q_id);
return -EFAULT;
}
@@ -2032,7 +2032,7 @@ int comm_pf_mbox_handler(void *handle, u16 vf_id, u8 cmd, void *buf_in,
if (!hinic_mbox_check_cmd_valid(handle, hw_cmd_support_vf, vf_id, cmd,
buf_in, in_size, size)) {
sdk_err(((struct hinic_hwdev *)handle)->dev_hdl,
- "PF Receive VF(%d) common cmd(0x%x), mbox len(0x%x) is invalid\n",
+ "PF Receive VF(%d) common cmd(0x%x) or mbox len(0x%x) is invalid\n",
vf_id + hinic_glb_pf_vf_offset(handle), cmd, in_size);
err = HINIC_MBOX_VF_CMD_ERROR;
return err;
@@ -2050,8 +2050,8 @@ int comm_pf_mbox_handler(void *handle, u16 vf_id, u8 cmd, void *buf_in,
if (err && err != HINIC_DEV_BUSY_ACTIVE_FW &&
err != HINIC_MBOX_PF_BUSY_ACTIVE_FW)
sdk_err(((struct hinic_hwdev *)handle)->dev_hdl,
- "PF mbox common callback handler err: %d\n",
- err);
+ "PF mbox common cmd %d callback handler err: %d\n",
+ cmd, err);
}
return err;
@@ -2462,7 +2462,7 @@ int hinic_init_comm_ch(struct hinic_hwdev *hwdev)
err = __get_func_misc_info(hwdev);
if (err) {
- sdk_err(hwdev->dev_hdl, "Failed to get function msic information\n");
+ sdk_err(hwdev->dev_hdl, "Failed to get function misc information\n");
goto get_func_info_err;
}
@@ -3133,7 +3133,7 @@ int mqm_eqm_init(struct hinic_hwdev *hwdev)
&info_eqm_fix, sizeof(info_eqm_fix),
&info_eqm_fix, &len, 0);
if (ret || !len || info_eqm_fix.status) {
- sdk_err(hwdev->dev_hdl, "Get mqm fix info fail,err: %d, status: 0x%x, out_size: 0x%x\n",
+ sdk_err(hwdev->dev_hdl, "Get mqm fix info failed, err: %d, status: 0x%x, out_size: 0x%x\n",
ret, info_eqm_fix.status, len);
return -EFAULT;
}
@@ -3149,25 +3149,25 @@ int mqm_eqm_init(struct hinic_hwdev *hwdev)
kcalloc(hwdev->mqm_att.chunk_num,
sizeof(struct hinic_page_addr), GFP_KERNEL);
if (!(hwdev->mqm_att.brm_srch_page_addr)) {
- sdk_err(hwdev->dev_hdl, "Alloc virtual mem failed\r\n");
+ sdk_err(hwdev->dev_hdl, "Alloc virtual mem failed\n");
return -EFAULT;
}
ret = mqm_eqm_alloc_page_mem(hwdev);
if (ret) {
- sdk_err(hwdev->dev_hdl, "Alloc eqm page mem failed\r\n");
+ sdk_err(hwdev->dev_hdl, "Alloc eqm page mem failed\n");
goto err_page;
}
ret = mqm_eqm_set_page_2_hw(hwdev);
if (ret) {
- sdk_err(hwdev->dev_hdl, "Set page to hw failed\r\n");
+ sdk_err(hwdev->dev_hdl, "Set page to hw failed\n");
goto err_ecmd;
}
ret = mqm_eqm_set_cfg_2_hw(hwdev, 1);
if (ret) {
- sdk_err(hwdev->dev_hdl, "Set page to hw failed\r\n");
+ sdk_err(hwdev->dev_hdl, "Set page to hw failed\n");
goto err_ecmd;
}
@@ -3197,7 +3197,7 @@ void mqm_eqm_deinit(struct hinic_hwdev *hwdev)
ret = mqm_eqm_set_cfg_2_hw(hwdev, 0);
if (ret) {
- sdk_err(hwdev->dev_hdl, "Set mqm eqm cfg to chip fail! err: %d\n",
+ sdk_err(hwdev->dev_hdl, "Set mqm eqm cfg to chip fail, err: %d\n",
ret);
return;
}
@@ -3218,7 +3218,7 @@ int hinic_ppf_ext_db_init(void *dev)
ret = mqm_eqm_init(hwdev);
if (ret) {
- sdk_err(hwdev->dev_hdl, "MQM eqm init fail!\n");
+ sdk_err(hwdev->dev_hdl, "MQM eqm init failed\n");
return -EFAULT;
}
@@ -3425,7 +3425,7 @@ static void fault_report_show(struct hinic_hwdev *hwdev,
struct hinic_fault_event_stats *fault;
u8 node_id;
- sdk_err(hwdev->dev_hdl, "Fault event report received, func_id: %d.\n",
+ sdk_err(hwdev->dev_hdl, "Fault event report received, func_id: %d\n",
hinic_global_func_id(hwdev));
memset(type_str, 0, FAULT_SHOW_STR_LEN + 1);
@@ -3759,7 +3759,7 @@ static void sw_watchdog_timeout_info_show(struct hinic_hwdev *hwdev,
u32 *dump_addr, *reg, stack_len, i, j;
if (in_size != sizeof(*watchdog_info)) {
- sdk_err(hwdev->dev_hdl, "Invalid mgmt watchdog report, length: %d, should be %ld.\n",
+ sdk_err(hwdev->dev_hdl, "Invalid mgmt watchdog report, length: %d, should be %ld\n",
in_size, sizeof(*watchdog_info));
return;
}
@@ -3924,7 +3924,7 @@ static void hinic_fmw_act_ntc_handler(struct hinic_hwdev *hwdev,
struct hinic_fmw_act_ntc *notice_info;
if (in_size != sizeof(*notice_info)) {
- sdk_err(hwdev->dev_hdl, "Invalid mgmt firmware active notice, length: %d, should be %ld.\n",
+ sdk_err(hwdev->dev_hdl, "Invalid mgmt firmware active notice, length: %d, should be %ld\n",
in_size, sizeof(*notice_info));
return;
}
@@ -3957,7 +3957,7 @@ static void hinic_pcie_dfx_event_handler(struct hinic_hwdev *hwdev,
u32 *reg;
if (in_size != sizeof(*notice_info)) {
- sdk_err(hwdev->dev_hdl, "Invalid mgmt firmware active notice, length: %d, should be %ld.\n",
+ sdk_err(hwdev->dev_hdl, "Invalid mgmt firmware active notice, length: %d, should be %ld\n",
in_size, sizeof(*notice_info));
return;
}
@@ -4724,7 +4724,7 @@ u8 hinic_nic_sw_aeqe_handler(void *handle, u8 event, u64 data)
event_level = FAULT_LEVEL_FATAL;
break;
default:
- sdk_err(hwdev->dev_hdl, "Unsupported sw event %d to process.\n",
+ sdk_err(hwdev->dev_hdl, "Unsupported sw event %d to process\n",
event);
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_lld.c b/drivers/net/ethernet/huawei/hinic/hinic_lld.c
index 81461da5e9aa..a19a1f67bc97 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_lld.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_lld.c
@@ -668,7 +668,7 @@ static void hinic_ignore_minor_version(char *version)
err = snprintf(version, max_ver_len, "%s.%s.%s.0",
ver_split[0], ver_split[1], ver_split[2]);
if (err <= 0 || err >= max_ver_len)
- pr_err("Failed snprintf version, function return(%d) and dest_len(%d)\n",
+ pr_err("Failed to snprintf version, function return(%d) and dest_len(%d)\n",
err, max_ver_len);
}
@@ -1087,7 +1087,7 @@ void *hinic_get_uld_dev_by_ifname(char *ifname, enum hinic_service_type type)
struct hinic_pcidev *dev;
if (type >= SERVICE_T_MAX) {
- pr_err("Service type :%d is error\n", type);
+ pr_err("Service type: %d is error\n", type);
return NULL;
}
@@ -1467,7 +1467,7 @@ struct net_device *hinic_get_netdev_by_lld(struct hinic_lld_dev *lld_dev)
nic_dev = pci_adapter->uld_dev[SERVICE_T_NIC];
if (!nic_dev) {
sdk_err(&pci_adapter->pcidev->dev,
- "There's no net device attached on the pci device");
+ "There's no net device attached on the pci device\n");
return NULL;
}
@@ -1501,7 +1501,7 @@ struct net_device *hinic_get_netdev_by_pcidev(struct pci_dev *pdev)
nic_dev = pci_adapter->uld_dev[SERVICE_T_NIC];
if (!nic_dev) {
sdk_err(&pci_adapter->pcidev->dev,
- "There`s no net device attached on the pci device");
+ "There`s no net device attached on the pci device\n");
return NULL;
}
@@ -1739,7 +1739,7 @@ int hinic_ovs_set_vf_nic_state(struct hinic_lld_dev *lld_dev, u16 vf_func_id,
if (err) {
sdk_err(&des_dev->pcidev->dev,
- "%s driver Set VF max_queue_num failed, err=%d.\n",
+ "%s driver Set VF max_queue_num failed, err=%d\n",
s_uld_name[SERVICE_T_NIC], err);
break;
@@ -2071,7 +2071,7 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter)
HINIC_CHIP_NAME, i);
if (err <= 0 || err >= IFNAMSIZ) {
sdk_err(&pci_adapter->pcidev->dev,
- "Failed snprintf chip_name, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf chip_name, function return(%d) and dest_len(%d)\n",
err, IFNAMSIZ);
goto alloc_dbgtool_attr_file_err;
}
@@ -2080,7 +2080,7 @@ static int alloc_chip_node(struct hinic_pcidev *pci_adapter)
IFNAMSIZ, "%s%d", HINIC_CHIP_NAME, i);
if (err <= 0 || err >= IFNAMSIZ) {
sdk_err(&pci_adapter->pcidev->dev,
- "Failed snprintf dbgtool_attr_file_name, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf dbgtool_attr_file_name, function return(%d) and dest_len(%d)\n",
err, IFNAMSIZ);
goto alloc_dbgtool_attr_file_err;
}
@@ -2188,13 +2188,13 @@ int hinic_ovs_set_vf_load_state(struct pci_dev *pdev)
{
struct hinic_pcidev *pci_adapter;
if (!pdev) {
- pr_err("pdev is null.\n");
+ pr_err("pdev is null\n");
return -EINVAL;
}
pci_adapter = pci_get_drvdata(pdev);
if (!pci_adapter) {
- pr_err("pci_adapter is null.\n");
+ pr_err("pci_adapter is null\n");
return -EFAULT;
}
@@ -2699,7 +2699,7 @@ static int hinic_probe(struct pci_dev *pdev, const struct pci_device_id *id)
create_singlethread_workqueue(HINIC_SLAVE_NIC_DELAY);
if (!pci_adapter->slave_nic_init_workq) {
sdk_err(&pdev->dev,
- "Failed to create work queue:%s\n",
+ "Failed to create work queue: %s\n",
HINIC_SLAVE_NIC_DELAY);
goto ceate_nic_delay_work_fail;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
index 1679c24eba9d..56af81d132fd 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
@@ -407,7 +407,7 @@ static int hinic_setup_num_qps(struct hinic_nic_dev *nic_dev)
}
nic_dev->qps_irq_info = kzalloc(irq_size, GFP_KERNEL);
if (!nic_dev->qps_irq_info) {
- nicif_err(nic_dev, drv, netdev, "Failed to alloc msix entries\n");
+ nicif_err(nic_dev, drv, netdev, "Failed to alloc qps_irq_info\n");
return -ENOMEM;
}
@@ -560,7 +560,7 @@ static int hinic_request_irq(struct hinic_irq *irq_cfg, u16 q_id)
err = hinic_set_interrupt_cfg(nic_dev->hwdev, info);
if (err) {
nicif_err(nic_dev, drv, irq_cfg->netdev,
- "Failed to set RX interrupt coalescing attribute.\n");
+ "Failed to set RX interrupt coalescing attribute\n");
qp_del_napi(irq_cfg);
return err;
}
@@ -2977,7 +2977,7 @@ int hinic_enable_func_rss(struct hinic_nic_dev *nic_dev)
if (err) {
if (err == -ENOSPC)
nicif_warn(nic_dev, drv, netdev,
- "Failed to alloc RSS template,table is full\n");
+ "Failed to alloc RSS template, table is full\n");
else
nicif_err(nic_dev, drv, netdev,
"Failed to alloc RSS template\n");
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_mbox.c b/drivers/net/ethernet/huawei/hinic/hinic_mbox.c
index fc91bdffe1eb..29feb9b4a16c 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_mbox.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_mbox.c
@@ -213,8 +213,8 @@ static bool check_func_id(struct hinic_hwdev *hwdev, u16 src_func_idx,
if (in_size < offset + sizeof(func_idx)) {
sdk_warn(hwdev->dev_hdl,
- "Reveice mailbox msg len: %d less than 10 Bytes is invalid\n",
- in_size);
+ "Receive mailbox msg len: %d less than %ld Bytes is invalid\n",
+ in_size, offset + sizeof(func_idx));
return false;
}
@@ -222,7 +222,7 @@ static bool check_func_id(struct hinic_hwdev *hwdev, u16 src_func_idx,
if (src_func_idx != func_idx) {
sdk_warn(hwdev->dev_hdl,
- "Reveice mailbox function id(0x%x) not equal to msg function id(0x%x)\n",
+ "Reveive mailbox function id(0x%x) not equal to msg function id(0x%x)\n",
src_func_idx, func_idx);
return false;
}
@@ -909,7 +909,8 @@ void hinic_mbox_func_aeqe_handler(void *handle, u8 *header, u8 size)
if (src >= HINIC_MAX_FUNCTIONS) {
sdk_err(func_to_func->hwdev->dev_hdl,
- "Mailbox source function id:%u is invalid\n", (u32)src);
+ "Mailbox source function id: %u is invalid\n",
+ (u32)src);
return;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c b/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c
index 38abf8fe0817..3a8362cc7d01 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c
@@ -680,7 +680,7 @@ static int hinic_read_clp_data(struct hinic_hwdev *hwdev,
err = hinic_read_clp_reg(hwdev, HINIC_CLP_RSP_HOST,
HINIC_CLP_READY_RSP_HOST, &ready);
if (err || delay_cnt > HINIC_CLP_DELAY_CNT_MAX) {
- sdk_err(hwdev->dev_hdl, "timeout with delay_cnt:%d\n",
+ sdk_err(hwdev->dev_hdl, "Timeout with delay_cnt: %d\n",
delay_cnt);
return -EINVAL;
}
@@ -692,7 +692,7 @@ static int hinic_read_clp_data(struct hinic_hwdev *hwdev,
return err;
if (temp_out_size > HINIC_CLP_SRAM_SIZE_REG_MAX || !temp_out_size) {
- sdk_err(hwdev->dev_hdl, "invalid temp_out_size:%d\n",
+ sdk_err(hwdev->dev_hdl, "Invalid temp_out_size: %d\n",
temp_out_size);
return -EINVAL;
}
@@ -757,14 +757,16 @@ static int hinic_check_clp_init_status(struct hinic_hwdev *hwdev)
err = hinic_read_clp_reg(hwdev, HINIC_CLP_REQ_HOST,
HINIC_CLP_BA_HOST, ®_value);
if (err || !reg_value) {
- sdk_err(hwdev->dev_hdl, "Wrong req ba value:0x%x\n", reg_value);
+ sdk_err(hwdev->dev_hdl, "Wrong req ba value: 0x%x\n",
+ reg_value);
return -EINVAL;
}
err = hinic_read_clp_reg(hwdev, HINIC_CLP_RSP_HOST,
HINIC_CLP_BA_HOST, ®_value);
if (err || !reg_value) {
- sdk_err(hwdev->dev_hdl, "Wrong rsp ba value:0x%x\n", reg_value);
+ sdk_err(hwdev->dev_hdl, "Wrong rsp ba value: 0x%x\n",
+ reg_value);
return -EINVAL;
}
@@ -822,7 +824,7 @@ int hinic_pf_clp_to_mgmt(void *hwdev, enum hinic_mod_type mod, u8 cmd,
if (real_size >
(HINIC_CLP_INPUT_BUFFER_LEN_HOST / HINIC_CLP_DATA_UNIT_HOST)) {
- sdk_err(dev->dev_hdl, "Invalid real_size:%d\n", real_size);
+ sdk_err(dev->dev_hdl, "Invalid real_size: %d\n", real_size);
return -EINVAL;
}
down(&clp_pf_to_mgmt->clp_msg_lock);
@@ -871,13 +873,13 @@ int hinic_pf_clp_to_mgmt(void *hwdev, enum hinic_mod_type mod, u8 cmd,
real_size = (u16)((real_size * HINIC_CLP_DATA_UNIT_HOST) & 0xffff);
if (real_size <= sizeof(header) ||
real_size > HINIC_CLP_INPUT_BUFFER_LEN_HOST) {
- sdk_err(dev->dev_hdl, "Invalid response size:%d", real_size);
+ sdk_err(dev->dev_hdl, "Invalid response size: %d", real_size);
up(&clp_pf_to_mgmt->clp_msg_lock);
return -EINVAL;
}
real_size = real_size - sizeof(header);
if (real_size != *out_size) {
- sdk_err(dev->dev_hdl, "Invalid real_size:%d, out_size:%d\n",
+ sdk_err(dev->dev_hdl, "Invalid real_size: %d, out_size: %d\n",
real_size, *out_size);
up(&clp_pf_to_mgmt->clp_msg_lock);
return -EINVAL;
@@ -1090,11 +1092,11 @@ static void mgmt_resp_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt,
pf_to_mgmt->event_flag == SEND_EVENT_START) {
complete(&recv_msg->recv_done);
} else if (recv_msg->msg_id != pf_to_mgmt->sync_msg_id) {
- sdk_err(dev, "Send msg id(0x%x) recv msg id(0x%x) dismatch, event state=%d\n",
+ sdk_err(dev, "Send msg id(0x%x) recv msg id(0x%x) dismatch, event state: %d\n",
pf_to_mgmt->sync_msg_id, recv_msg->msg_id,
pf_to_mgmt->event_flag);
} else {
- sdk_err(dev, "Wait timeout, send msg id(0x%x) recv msg id(0x%x), event state=%d!\n",
+ sdk_err(dev, "Wait timeout, send msg id(0x%x) recv msg id(0x%x), event state: %d\n",
pf_to_mgmt->sync_msg_id, recv_msg->msg_id,
pf_to_mgmt->event_flag);
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_nic_cfg.c b/drivers/net/ethernet/huawei/hinic/hinic_nic_cfg.c
index 90b16ea9658d..1bac0ea08a52 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_nic_cfg.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_nic_cfg.c
@@ -309,7 +309,7 @@ int hinic_del_mac(void *hwdev, const u8 *mac_addr, u16 vlan_id, u16 func_id)
return -EINVAL;
}
if (mac_info.status == HINIC_PF_SET_VF_ALREADY) {
- nic_warn(nic_hwdev->dev_hdl, "PF has already set VF mac, Ignore delete operation.\n");
+ nic_warn(nic_hwdev->dev_hdl, "PF has already set VF mac, Ignore delete operation\n");
return HINIC_PF_SET_VF_ALREADY;
}
@@ -461,12 +461,14 @@ int hinic_set_port_mtu(void *hwdev, u32 new_mtu)
if (new_mtu < HINIC_MIN_MTU_SIZE) {
nic_err(nic_hwdev->dev_hdl,
- "Invalid mtu size, mtu size < 256bytes");
+ "Invalid mtu size, mtu size < %dbytes\n",
+ HINIC_MIN_MTU_SIZE);
return -EINVAL;
}
if (new_mtu > HINIC_MAX_JUMBO_FRAME_SIZE) {
- nic_err(nic_hwdev->dev_hdl, "Invalid mtu size, mtu size > 9600bytes");
+ nic_err(nic_hwdev->dev_hdl, "Invalid mtu size, mtu size > %dbytes\n",
+ HINIC_MAX_JUMBO_FRAME_SIZE);
return -EINVAL;
}
@@ -2220,7 +2222,7 @@ int hinic_get_mgmt_version(void *hwdev, u8 *mgmt_ver)
err = snprintf(mgmt_ver, HINIC_MGMT_VERSION_MAX_LEN, "%s", up_ver.ver);
if (err <= 0 || err >= HINIC_MGMT_VERSION_MAX_LEN) {
nic_err(dev->dev_hdl,
- "Failed snprintf fw version, function return(%d) and dest_len(%d)\n",
+ "Failed to snprintf fw version, function return(%d) and dest_len(%d)\n",
err, HINIC_MGMT_VERSION_MAX_LEN);
return -EINVAL;
}
@@ -2501,7 +2503,7 @@ static int hinic_del_vf_mac_msg_handler(struct hinic_nic_io *nic_io, u16 vf,
if (vf_info->pf_set_mac && !(vf_info->trust) &&
is_valid_ether_addr(mac_in->mac) &&
!memcmp(vf_info->vf_mac_addr, mac_in->mac, ETH_ALEN)) {
- nic_warn(nic_io->hwdev->dev_hdl, "PF has already set VF mac.\n");
+ nic_warn(nic_io->hwdev->dev_hdl, "PF has already set VF mac\n");
mac_out->status = HINIC_PF_SET_VF_ALREADY;
*out_size = sizeof(*mac_out);
return 0;
@@ -2530,12 +2532,12 @@ static int hinic_update_vf_mac_msg_handler(struct hinic_nic_io *nic_io, u16 vf,
int err;
if (!is_valid_ether_addr(mac_in->new_mac)) {
- nic_err(nic_io->hwdev->dev_hdl, "Update VF MAC is invalid.\n");
+ nic_err(nic_io->hwdev->dev_hdl, "Update VF MAC is invalid\n");
return -EINVAL;
}
if (vf_info->pf_set_mac && !(vf_info->trust)) {
- nic_warn(nic_io->hwdev->dev_hdl, "PF has already set VF mac.\n");
+ nic_warn(nic_io->hwdev->dev_hdl, "PF has already set VF mac\n");
mac_out->status = HINIC_PF_SET_VF_ALREADY;
*out_size = sizeof(*mac_out);
return 0;
@@ -2724,7 +2726,7 @@ int nic_pf_mbox_handler(void *hwdev, u16 vf_id, u8 cmd, void *buf_in,
if (!hinic_mbox_check_cmd_valid(hwdev, nic_cmd_support_vf, vf_id, cmd,
buf_in, in_size, size)) {
nic_err(((struct hinic_hwdev *)hwdev)->dev_hdl,
- "PF Receive VF nic cmd(0x%x), mbox len(0x%x) is invalid\n",
+ "PF Receive VF nic cmd(0x%x) or mbox len(0x%x) is invalid\n",
cmd, in_size);
err = HINIC_MBOX_VF_CMD_ERROR;
return err;
@@ -2793,7 +2795,7 @@ int nic_pf_mbox_handler(void *hwdev, u16 vf_id, u8 cmd, void *buf_in,
if (err && err != HINIC_DEV_BUSY_ACTIVE_FW &&
err != HINIC_MBOX_PF_BUSY_ACTIVE_FW)
- nic_err(nic_io->hwdev->dev_hdl, "PF receive VF L2NIC cmd: %d process error, err:%d\n",
+ nic_err(nic_io->hwdev->dev_hdl, "PF receive VF L2NIC cmd: %d process error, err: %d\n",
cmd, err);
return err;
}
@@ -3522,13 +3524,13 @@ int hinic_set_anti_attack(void *hwdev, bool enable)
&rate, sizeof(rate), &rate,
&out_size);
if (err || !out_size || rate.status) {
- nic_err(nic_hwdev->dev_hdl, "Can`t %s port Anti-Attack rate limit err: %d, status: 0x%x, out size: 0x%x\n",
+ nic_err(nic_hwdev->dev_hdl, "Can't %s port Anti-Attack rate limit err: %d, status: 0x%x, out size: 0x%x\n",
(enable ? "enable" : "disable"), err, rate.status,
out_size);
return -EINVAL;
}
- nic_info(nic_hwdev->dev_hdl, "%s port Anti-Attack rate limit succeed.\n",
+ nic_info(nic_hwdev->dev_hdl, "%s port Anti-Attack rate limit succeed\n",
(enable ? "Enable" : "Disable"));
return 0;
@@ -3616,13 +3618,13 @@ int hinic_set_super_cqe_state(void *hwdev, bool enable)
&super_cqe, sizeof(super_cqe), &super_cqe,
&out_size);
if (err || !out_size || super_cqe.status) {
- nic_err(nic_hwdev->dev_hdl, "Can`t %s surper cqe, err: %d, status: 0x%x, out size: 0x%x\n",
+ nic_err(nic_hwdev->dev_hdl, "Can't %s surper cqe, err: %d, status: 0x%x, out size: 0x%x\n",
(enable ? "enable" : "disable"), err, super_cqe.status,
out_size);
return -EINVAL;
}
- nic_info(nic_hwdev->dev_hdl, "%s super cqe succeed.\n",
+ nic_info(nic_hwdev->dev_hdl, "%s super cqe succeed\n",
(enable ? "Enable" : "Disable"));
return 0;
@@ -3960,16 +3962,16 @@ int hinic_disable_tx_promisc(void *hwdev)
info.cfg = HINIC_TX_PROMISC_DISABLE;
err = hinic_msg_to_mgmt_sync(hwdev, HINIC_MOD_L2NIC,
- HINIC_PORT_CMD_DISABLE_PROMISIC, &info,
+ HINIC_PORT_CMD_DISABLE_PROMISC, &info,
sizeof(info), &info, &out_size, 0);
if (err || !out_size || info.status) {
if (info.status == HINIC_MGMT_CMD_UNSUPPORTED) {
nic_info(((struct hinic_hwdev *)hwdev)->dev_hdl,
- "Unsupported to disable TX promisic\n");
+ "Unsupported to disable TX promisc\n");
return 0;
}
nic_err(((struct hinic_hwdev *)hwdev)->dev_hdl,
- "Failed to disable multihost promisic, err: %d, status: 0x%x, out size: 0x%x\n",
+ "Failed to disable multihost promisc, err: %d, status: 0x%x, out size: 0x%x\n",
err, info.status, out_size);
return -EFAULT;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_nic_dbg.c b/drivers/net/ethernet/huawei/hinic/hinic_nic_dbg.c
index e49a21fa952e..9bcdcd3ce1c0 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_nic_dbg.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_nic_dbg.c
@@ -101,7 +101,7 @@ u16 hinic_dbg_get_rq_hw_pi(void *hwdev, u16 q_id)
if (qp)
return cpu_to_be16(*qp->rq.pi_virt_addr);
- nic_err(((struct hinic_hwdev *)hwdev)->dev_hdl, "Get rq hw pi failed!\n");
+ nic_err(((struct hinic_hwdev *)hwdev)->dev_hdl, "Get rq hw pi failed\n");
return INVALID_PI;
}
@@ -184,7 +184,7 @@ static int get_wqe_info(struct hinic_wq *wq, u16 idx, u16 wqebb_cnt,
return -EFAULT;
if (*wqe_size != (u16)(wq->wqebb_size * wqebb_cnt)) {
- pr_err("Unexpect out buf size from user :%d, expect: %d\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %d\n",
*wqe_size, (u16)(wq->wqebb_size * wqebb_cnt));
return -EFAULT;
}
@@ -231,7 +231,7 @@ int hinic_dbg_get_rq_wqe_info(void *hwdev, u16 q_id, u16 idx, u16 wqebb_cnt,
int hinic_dbg_get_hw_stats(const void *hwdev, u8 *hw_stats, u16 *out_size)
{
if (!hw_stats || *out_size != sizeof(struct hinic_hw_stats)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(struct hinic_hw_stats));
return -EFAULT;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_nic_io.c b/drivers/net/ethernet/huawei/hinic/hinic_nic_io.c
index f2fb0bc54570..b935c41a4435 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_nic_io.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_nic_io.c
@@ -253,7 +253,7 @@ int hinic_create_qps(void *dev, u16 num_qp, u16 sq_depth, u16 rq_depth,
max_qps = hinic_func_max_qnum(hwdev);
if (num_qp > max_qps) {
- nic_err(hwdev->dev_hdl, "Create number of qps: %d > max number of qps:%d\n",
+ nic_err(hwdev->dev_hdl, "Create number of qps: %d > max number of qps: %d\n",
num_qp, max_qps);
return -EINVAL;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_nictool.c b/drivers/net/ethernet/huawei/hinic/hinic_nictool.c
index 3fcb855bd605..8ef008af05e8 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_nictool.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_nictool.c
@@ -336,7 +336,7 @@ static int get_inter_num(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(u16)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(u16));
return -EFAULT;
}
@@ -381,7 +381,7 @@ static int get_num_cos(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(*num_cos)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*num_cos));
return -EFAULT;
}
@@ -399,7 +399,7 @@ static int get_dcb_cos_up_map(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(*map)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*map));
return -EFAULT;
}
@@ -438,7 +438,7 @@ static int get_rx_cqe_info(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(struct hinic_rq_cqe)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(struct hinic_rq_cqe));
return -EFAULT;
}
@@ -477,7 +477,7 @@ static int hinic_dbg_get_sq_info(struct hinic_nic_dev *nic_dev, u16 q_id,
if (*msg_size != sizeof(*sq_info)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*msg_size, sizeof(*sq_info));
return -EFAULT;
}
@@ -576,7 +576,7 @@ static int get_loopback_mode(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(*mode)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*mode));
return -EFAULT;
}
@@ -717,7 +717,7 @@ int set_pfc_control(struct hinic_nic_dev *nic_dev, void *buf_in,
pfc_en = *((u8 *)buf_in);
if (!(test_bit(HINIC_DCB_ENABLE, &nic_dev->flags))) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Need to enable dcb first.\n");
+ "Need to enable dcb first\n");
err = 0xff;
goto exit;
}
@@ -752,7 +752,7 @@ int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in,
if (!(test_bit(HINIC_DCB_ENABLE, &nic_dev->flags))) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Need to enable dcb first.\n");
+ "Need to enable dcb first\n");
err = 0xff;
goto exit;
}
@@ -765,7 +765,7 @@ int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in,
if (!(test_bit(HINIC_ETS_ENABLE, &nic_dev->flags))) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Need to enable ets first.\n");
+ "Need to enable ets first\n");
err = 0xff;
goto exit;
}
@@ -792,7 +792,7 @@ int set_ets(struct hinic_nic_dev *nic_dev, void *buf_in,
err = hinic_dcbnl_set_ets_tool(nic_dev->netdev);
if (err) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Failed to set ets [%d].\n", err);
+ "Failed to set ets [%d]\n", err);
}
exit:
*((u8 *)buf_out) = err;
@@ -838,7 +838,7 @@ int get_support_tc(struct hinic_nic_dev *nic_dev, void *buf_in,
if (*out_size != sizeof(*tc_num)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*tc_num));
return -EFAULT;
}
@@ -881,7 +881,7 @@ int set_pfc_priority(struct hinic_nic_dev *nic_dev, void *buf_in,
if (!((test_bit(HINIC_DCB_ENABLE, &nic_dev->flags)) &&
nic_dev->tmp_dcb_cfg.pfc_state)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Need to enable pfc first.\n");
+ "Need to enable pfc first\n");
err = 0xff;
goto exit;
}
@@ -983,7 +983,7 @@ static int set_poll_weight(struct hinic_nic_dev *nic_dev, void *buf_in,
if (!buf_in || in_size != sizeof(*weight_info)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect in buf size from user :%u, expect: %lu\n",
+ "Unexpect in buf size from user: %u, expect: %lu\n",
*out_size, sizeof(*weight_info));
return -EFAULT;
}
@@ -999,7 +999,7 @@ static int get_homologue(struct hinic_nic_dev *nic_dev, void *buf_in,
struct hinic_homologues *homo = buf_out;
if (!buf_out || *out_size != sizeof(*homo)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*homo));
return -EFAULT;
}
@@ -1020,7 +1020,7 @@ static int set_homologue(struct hinic_nic_dev *nic_dev, void *buf_in,
struct hinic_homologues *homo = buf_in;
if (!buf_in || in_size != sizeof(*homo)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect in buf size from user :%d, expect: %lu\n",
+ "Unexpect in buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*homo));
return -EFAULT;
}
@@ -1030,7 +1030,7 @@ static int set_homologue(struct hinic_nic_dev *nic_dev, void *buf_in,
} else if (homo->homo_state == HINIC_HOMOLOGUES_OFF) {
clear_bit(HINIC_SAME_RXTX, &nic_dev->flags);
} else {
- pr_err("Invalid parameters.\n");
+ pr_err("Invalid parameters\n");
return -EFAULT;
}
@@ -1047,7 +1047,7 @@ static int get_sset_count(struct hinic_nic_dev *nic_dev, void *buf_in,
if (!buf_in || !buf_out || in_size != sizeof(u32) ||
*out_size != sizeof(u32)) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Invalid parameters.\n");
+ "Invalid parameters\n");
return -EINVAL;
}
@@ -1083,7 +1083,7 @@ static int get_sset_stats(struct hinic_nic_dev *nic_dev, void *buf_in,
if (count * sizeof(*items) != *out_size) {
nicif_err(nic_dev, drv, nic_dev->netdev,
- "Unexpect out buf size from user :%d, expect: %lu\n",
+ "Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, count * sizeof(*items));
return -EINVAL;
}
@@ -1112,7 +1112,7 @@ static int get_func_type(void *hwdev, void *buf_in, u32 in_size,
func_typ = hinic_func_type(hwdev);
if (!buf_out || *out_size != sizeof(u16)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(u16));
return -EFAULT;
}
@@ -1126,7 +1126,7 @@ static int get_func_id(void *hwdev, void *buf_in, u32 in_size,
u16 func_id;
if (!buf_out || *out_size != sizeof(u16)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(u16));
return -EFAULT;
}
@@ -1145,7 +1145,7 @@ static int get_chip_faults_stats(void *hwdev, void *buf_in, u32 in_size,
if (!buf_in || !buf_out || *out_size != sizeof(*fault_info) ||
in_size != sizeof(*fault_info)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*fault_info));
return -EFAULT;
}
@@ -1178,7 +1178,7 @@ static int get_drv_version(void *hwdev, void *buf_in, u32 in_size,
int err;
if (*out_size != sizeof(*ver_info)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(*ver_info));
return -EFAULT;
}
@@ -1212,7 +1212,7 @@ static int get_single_card_info(void *hwdev, void *buf_in, u32 in_size,
{
if (!buf_in || !buf_out || in_size != sizeof(struct card_info) ||
*out_size != sizeof(struct card_info)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(struct card_info));
return -EFAULT;
}
@@ -1230,7 +1230,7 @@ static int get_device_id(void *hwdev, void *buf_in, u32 in_size,
int err;
if (!buf_out || !buf_in || *out_size != sizeof(u16) ||
in_size != sizeof(u16)) {
- pr_err("Unexpect out buf size from user :%d, expect: %lu\n",
+ pr_err("Unexpect out buf size from user: %d, expect: %lu\n",
*out_size, sizeof(u16));
return -EFAULT;
}
@@ -1297,7 +1297,7 @@ static int __get_card_usr_api_chain_mem(int card_idx)
(void *)__get_free_pages(GFP_KERNEL,
DBGTOOL_PAGE_ORDER);
if (!g_card_vir_addr[card_idx]) {
- pr_err("Alloc api chain memory fail for card %d.\n",
+ pr_err("Alloc api chain memory fail for card %d\n",
card_idx);
mutex_unlock(&g_addr_lock);
return -EFAULT;
@@ -1309,7 +1309,7 @@ static int __get_card_usr_api_chain_mem(int card_idx)
g_card_phy_addr[card_idx] =
virt_to_phys(g_card_vir_addr[card_idx]);
if (!g_card_phy_addr[card_idx]) {
- pr_err("phy addr for card %d is 0.\n", card_idx);
+ pr_err("phy addr for card %d is 0\n", card_idx);
free_pages((unsigned long)g_card_vir_addr[card_idx],
DBGTOOL_PAGE_ORDER);
g_card_vir_addr[card_idx] = NULL;
@@ -1589,7 +1589,7 @@ static int send_to_ucode(void *hwdev, struct msg_module *nt_msg,
nt_msg->ucode_cmd.ucode_db.ucode_cmd_type,
buf_in, buf_out, 0);
if (ret)
- pr_err("Send direct cmdq err: %d!\n", ret);
+ pr_err("Send direct cmdq err: %d\n", ret);
} else {
ret = hinic_cmdq_detail_resp
(hwdev, nt_msg->ucode_cmd.ucode_db.cmdq_ack_type,
@@ -1597,7 +1597,7 @@ static int send_to_ucode(void *hwdev, struct msg_module *nt_msg,
nt_msg->ucode_cmd.ucode_db.ucode_cmd_type,
buf_in, buf_out, 0);
if (ret)
- pr_err("Send detail cmdq err: %d!\n", ret);
+ pr_err("Send detail cmdq err: %d\n", ret);
}
return ret;
@@ -1732,7 +1732,7 @@ static int check_useparam_valid(struct msg_module *nt_msg, void *buf_in)
u32 rd_len = csr_write_msg->rd_len;
if (rd_len > TOOL_COUNTER_MAX_LEN) {
- pr_err("Csr read or write len is invalid!\n");
+ pr_err("Csr read or write len is invalid\n");
return -EINVAL;
}
@@ -1810,7 +1810,7 @@ static int sm_rd32(void *hwdev, u32 id, u8 instance,
ret = hinic_sm_ctr_rd32(hwdev, node, instance, id, &val1);
if (ret) {
- pr_err("Get sm ctr information (32 bits)failed!\n");
+ pr_err("Get sm ctr information (32 bits)failed\n");
val1 = 0xffffffff;
}
@@ -1827,7 +1827,7 @@ static int sm_rd64_pair(void *hwdev, u32 id, u8 instance,
ret = hinic_sm_ctr_rd64_pair(hwdev, node, instance, id, &val1, &val2);
if (ret) {
- pr_err("Get sm ctr information (64 bits pair)failed!\n");
+ pr_err("Get sm ctr information (64 bits pair)failed\n");
val1 = 0xffffffff;
}
@@ -1845,7 +1845,7 @@ static int sm_rd64(void *hwdev, u32 id, u8 instance,
ret = hinic_sm_ctr_rd64(hwdev, node, instance, id, &val1);
if (ret) {
- pr_err("Get sm ctr information (64 bits)failed!\n");
+ pr_err("Get sm ctr information (64 bits)failed\n");
val1 = 0xffffffff;
}
buf_out->val1 = val1;
@@ -1890,7 +1890,7 @@ static int send_to_sm(void *hwdev, struct msg_module *nt_msg,
}
if (ret)
- pr_err("Get sm information fail!\n");
+ pr_err("Get sm information fail\n");
*out_size = sizeof(struct sm_out_st);
@@ -2024,7 +2024,7 @@ static int get_self_test_cmd(struct msg_module *nt_msg)
ret = hinic_get_self_test_result(nt_msg->device_name, &res);
if (ret) {
- pr_err("Get self test result failed!\n");
+ pr_err("Get self test result failed\n");
return -EFAULT;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_port_cmd.h b/drivers/net/ethernet/huawei/hinic/hinic_port_cmd.h
index 0b13ba9d2f26..1d3c0301ba63 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_port_cmd.h
+++ b/drivers/net/ethernet/huawei/hinic/hinic_port_cmd.h
@@ -93,7 +93,7 @@ enum hinic_port_cmd {
HINIC_PORT_CMD_SET_JUMBO_FRAME_SIZE,
/* 0x4c ~ 0x57 have defined in base line */
- HINIC_PORT_CMD_DISABLE_PROMISIC = 0x4c,
+ HINIC_PORT_CMD_DISABLE_PROMISC = 0x4c,
HINIC_PORT_CMD_ENABLE_SPOOFCHK = 0x4e,
HINIC_PORT_CMD_GET_MGMT_VERSION = 0x58,
HINIC_PORT_CMD_GET_BOOT_VERSION,
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
index 047023267ead..1a436c133785 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_sriov.c
@@ -39,7 +39,7 @@ int hinic_pci_sriov_disable(struct pci_dev *dev)
if (test_and_set_bit(HINIC_SRIOV_DISABLE, &sriov_info->state)) {
nic_err(&sriov_info->pdev->dev,
- "SR-IOV disable in process, please wait");
+ "SR-IOV disable in process, please wait\n");
return -EPERM;
}
@@ -190,7 +190,7 @@ int hinic_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
return err;
nic_info(&sriov_info->pdev->dev, "Setting MAC %pM on VF %d\n", mac, vf);
- nic_info(&sriov_info->pdev->dev, "Reload the VF driver to make this change effective.");
+ nic_info(&sriov_info->pdev->dev, "Reload the VF driver to make this change effective\n");
return 0;
}
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_tx.c b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
index b556132a72af..8d921ad104e8 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_tx.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
@@ -949,7 +949,7 @@ int hinic_setup_all_tx_resources(struct net_device *netdev)
txq = &nic_dev->txqs[q_id];
tx_info_sz = txq->q_depth * sizeof(*txq->tx_info);
if (!tx_info_sz) {
- nicif_err(nic_dev, drv, netdev, "Cannot allocate zero size tx%d info\n",
+ nicif_err(nic_dev, drv, netdev, "Cannot allocate zero size txq%d info\n",
q_id);
err = -EINVAL;
goto init_txq_err;
@@ -965,7 +965,7 @@ int hinic_setup_all_tx_resources(struct net_device *netdev)
err = hinic_setup_tx_wqe(txq);
if (err != txq->q_depth) {
- nicif_err(nic_dev, drv, netdev, "Failed to setup Tx:%d wqe\n",
+ nicif_err(nic_dev, drv, netdev, "Failed to setup Tx: %d wqe\n",
q_id);
q_id++;
goto init_txq_err;
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_wq.c b/drivers/net/ethernet/huawei/hinic/hinic_wq.c
index 032b28332a65..fcf98413d2de 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_wq.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_wq.c
@@ -55,7 +55,7 @@ static int queue_alloc_page(void *handle, u64 **vaddr, u64 *paddr,
}
if (!ADDR_4K_ALIGNED(dma_addr)) {
- sdk_err(handle, "Cla is not 4k aligned!\n");
+ sdk_err(handle, "Cla is not 4k aligned\n");
goto shadow_vaddr_err;
}
--
2.25.1
1
5
Adam Ford (1):
omapfb: dss: Fix max fclk divider for omap36xx
Ben Skeggs (2):
drm/nouveau/fbcon: fix module unload when fbcon init has failed for
some reason
drm/nouveau/fbcon: zero-initialise the mode_cmd2 structure
Christoph Hellwig (1):
net/9p: validate fds in p9_fd_open
Cong Wang (1):
ipv6: fix memory leaks on IPV6_ADDRFORM path
David Howells (1):
rxrpc: Fix race between recvmsg and sendmsg on immediate call failure
Dexuan Cui (1):
Drivers: hv: vmbus: Ignore CHANNELMSG_TL_CONNECT_RESULT(23)
Eric Biggers (1):
Smack: fix use-after-free in smk_write_relabel_self()
Erik Ekman (1):
USB: serial: qcserial: add EM7305 QDL product ID
Forest Crossman (2):
usb: xhci: define IDs for various ASMedia host controllers
usb: xhci: Fix ASMedia ASM1142 DMA addressing
Francesco Ruggeri (1):
igb: reinit_locked() should be called with rtnl_lock
Frank van der Linden (1):
xattr: break delegations in {set,remove}xattr
Greg Kroah-Hartman (3):
USB: iowarrior: fix up report size handling for some devices
mtd: properly check all write ioctls for permissions
Linux 4.19.139
Grzegorz Siwik (1):
i40e: Wrong truncation from u16 to u8
Hangbin Liu (1):
Revert "vxlan: fix tos value before xmit"
Hui Wang (1):
Revert "ALSA: hda: call runtime_allow() for all hda controllers"
Ido Schimmel (2):
ipv4: Silence suspicious RCU usage warning
vxlan: Ensure FDB dump is performed under RCU
Jann Horn (1):
binder: Prevent context manager from incrementing ref 0
Johan Hovold (5):
leds: wm831x-status: fix use-after-free on unbind
leds: da903x: fix use-after-free on unbind
leds: lm3533: fix use-after-free on unbind
leds: 88pm860x: fix use-after-free on unbind
net: lan78xx: replace bogus endpoint lookup
Julian Squires (1):
cfg80211: check vendor command doit pointer before use
Landen Chao (1):
net: ethernet: mtk_eth_soc: fix MTU warnings
Lorenzo Bianconi (1):
net: gre: recompute gre csum for sctp over gre tunnels
Martyna Szapar (2):
i40e: Fix of memory leak and integer truncation in i40e_virtchnl.c
i40e: Memory leak in i40e_config_iwarp_qvlist
Peilin Ye (4):
Bluetooth: Fix slab-out-of-bounds read in
hci_extended_inquiry_result_evt()
Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_evt()
Bluetooth: Prevent out-of-bounds read in
hci_inquiry_result_with_rssi_evt()
openvswitch: Prevent kernel-infoleak in ovs_ct_put_key()
Philippe Duplessis-Guindon (1):
tools lib traceevent: Fix memory leak in process_dynamic_array_len
Qiushi Wu (1):
firmware: Fix a reference count leak.
Rustam Kovhaev (1):
usb: hso: check for return value in hso_serial_common_create()
Sergey Nemov (1):
i40e: add num_vectors checker in iwarp handler
Stephen Hemminger (1):
hv_netvsc: do not use VF device if link is down
Suren Baghdasaryan (1):
staging: android: ashmem: Fix lockdep warning for write operation
Takashi Iwai (1):
ALSA: seq: oss: Serialize ioctls
Willem de Bruijn (1):
selftests/net: relax cpu affinity requirement in msg_zerocopy test
Wolfram Sang (2):
i2c: slave: improve sanity check when registering
i2c: slave: add sanity check when unregistering
Xin Long (1):
net: thunderx: use spin_lock_bh in nicvf_set_rx_mode_task()
Xin Xiong (1):
atm: fix atm_dev refcnt leaks in atmtcp_remove_persistent
Makefile | 2 +-
drivers/android/binder.c | 15 ++-
drivers/atm/atmtcp.c | 10 +-
drivers/firmware/qemu_fw_cfg.c | 7 +-
drivers/gpu/drm/nouveau/nouveau_fbcon.c | 3 +-
drivers/hv/channel_mgmt.c | 21 ++--
drivers/hv/vmbus_drv.c | 4 +
drivers/i2c/i2c-core-slave.c | 7 +-
drivers/leds/leds-88pm860x.c | 14 ++-
drivers/leds/leds-da903x.c | 14 ++-
drivers/leds/leds-lm3533.c | 12 +-
drivers/leds/leds-wm831x-status.c | 14 ++-
drivers/mtd/mtdchar.c | 56 +++++++--
.../net/ethernet/cavium/thunder/nicvf_main.c | 4 +-
.../ethernet/intel/i40e/i40e_virtchnl_pf.c | 51 +++++---
drivers/net/ethernet/intel/igb/igb_main.c | 9 ++
drivers/net/ethernet/mediatek/mtk_eth_soc.c | 2 +
drivers/net/hyperv/netvsc_drv.c | 7 +-
drivers/net/usb/hso.c | 5 +-
drivers/net/usb/lan78xx.c | 117 +++++-------------
drivers/net/vxlan.c | 10 +-
drivers/staging/android/ashmem.c | 12 ++
drivers/usb/host/xhci-pci.c | 10 +-
drivers/usb/misc/iowarrior.c | 35 ++++--
drivers/usb/serial/qcserial.c | 1 +
drivers/video/fbdev/omap2/omapfb/dss/dss.c | 2 +-
fs/xattr.c | 84 +++++++++++--
include/linux/hyperv.h | 2 +
include/linux/xattr.h | 2 +
include/net/addrconf.h | 1 +
net/9p/trans_fd.c | 24 ++--
net/bluetooth/hci_event.c | 11 +-
net/ipv4/fib_trie.c | 2 +-
net/ipv4/gre_offload.c | 13 +-
net/ipv6/anycast.c | 17 ++-
net/ipv6/ipv6_sockglue.c | 1 +
net/openvswitch/conntrack.c | 38 +++---
net/rxrpc/call_object.c | 27 ++--
net/rxrpc/conn_object.c | 8 +-
net/rxrpc/recvmsg.c | 2 +-
net/rxrpc/sendmsg.c | 3 +
net/wireless/nl80211.c | 6 +-
security/smack/smackfs.c | 13 +-
sound/core/seq/oss/seq_oss.c | 8 +-
sound/pci/hda/hda_intel.c | 1 -
tools/lib/traceevent/event-parse.c | 1 +
tools/testing/selftests/net/msg_zerocopy.c | 5 +-
47 files changed, 483 insertions(+), 230 deletions(-)
--
2.25.1
1
48

[PATCH 01/26] arm64/ascend: Add new enable_oom_killer interface for oom contrl
by Yang Yingliang 17 Aug '20
by Yang Yingliang 17 Aug '20
17 Aug '20
From: Weilong Chen <chenweilong(a)huawei.com>
ascend inclusion
category: feature
bugzilla: NA
CVE: NA
-------------------------------------------------
Support disable oom-killer, and report oom events to bbox
vm.enable_oom_killer:
0: disable oom killer
1: enable oom killer (default,compatible with mainline)
2: disable oom killer and panic on oom
Signed-off-by: Weilong Chen <chenweilong(a)huawei.com>
Reviewed-by: Kefeng Wang <wangkefeng.wang(a)huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang(a)huawei.com>
---
arch/arm64/Kconfig | 11 +++++++++
include/linux/oom.h | 11 +++++++++
kernel/sysctl.c | 12 ++++++++++
mm/memcontrol.c | 6 +++++
mm/oom_kill.c | 56 +++++++++++++++++++++++++++++++++++++++++++++
mm/util.c | 6 +++++
6 files changed, 102 insertions(+)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 10fabb5f633d..4412f14547af 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -1351,6 +1351,17 @@ config ASCEND_DVPP_MMAP
special memory for DvPP processor, the new flag is only valid for Ascend
platform.
+config ASCEND_OOM
+ bool "Enable support for disable oom killer"
+ default y
+ help
+ In some cases we hopes that the oom will not kill the process when it occurs,
+ be able to notify the black box to report the event, and be able to trigger
+ the panic to locate the problem.
+ vm.enable_oom_killer:
+ 0: disable oom killer
+ 1: enable oom killer (default,compatible with mainline)
+ 2: disable oom killer and panic on oom
endif
endmenu
diff --git a/include/linux/oom.h b/include/linux/oom.h
index 69864a547663..689d32ab694b 100644
--- a/include/linux/oom.h
+++ b/include/linux/oom.h
@@ -117,4 +117,15 @@ extern struct task_struct *find_lock_task_mm(struct task_struct *p);
extern int sysctl_oom_dump_tasks;
extern int sysctl_oom_kill_allocating_task;
extern int sysctl_panic_on_oom;
+
+#ifdef CONFIG_ASCEND_OOM
+#define HISI_OOM_TYPE_NOMEM 0
+#define HISI_OOM_TYPE_OVERCOMMIT 1
+#define HISI_OOM_TYPE_CGROUP 2
+
+extern int sysctl_enable_oom_killer;
+extern int register_hisi_oom_notifier(struct notifier_block *nb);
+extern int hisi_oom_notifier_call(unsigned long val, void *v);
+extern int unregister_hisi_oom_notifier(struct notifier_block *nb);
+#endif
#endif /* _INCLUDE_LINUX_OOM_H */
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 54ae74d3180b..665c9e2a8802 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -1264,6 +1264,18 @@ static struct ctl_table vm_table[] = {
.extra1 = &zero,
.extra2 = &two,
},
+#ifdef CONFIG_ASCEND_OOM
+ {
+ /* 0: diasable, 1: enable, 2: disable and panic on oom */
+ .procname = "enable_oom_killer",
+ .data = &sysctl_enable_oom_killer,
+ .maxlen = sizeof(sysctl_enable_oom_killer),
+ .mode = 0644,
+ .proc_handler = proc_dointvec_minmax,
+ .extra1 = &zero,
+ .extra2 = &two,
+ },
+#endif
{
.procname = "oom_kill_allocating_task",
.data = &sysctl_oom_kill_allocating_task,
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index e0377bae0bf6..a63bfd73da9a 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -1729,6 +1729,9 @@ static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int
current->memcg_in_oom = memcg;
current->memcg_oom_gfp_mask = mask;
current->memcg_oom_order = order;
+#ifdef CONFIG_ASCEND_OOM
+ hisi_oom_notifier_call(HISI_OOM_TYPE_CGROUP, NULL);
+#endif
return OOM_ASYNC;
}
@@ -1802,6 +1805,9 @@ bool mem_cgroup_oom_synchronize(bool handle)
mem_cgroup_out_of_memory(memcg, current->memcg_oom_gfp_mask,
current->memcg_oom_order);
} else {
+#ifdef CONFIG_ASCEND_OOM
+ hisi_oom_notifier_call(HISI_OOM_TYPE_CGROUP, NULL);
+#endif
schedule();
mem_cgroup_unmark_under_oom(memcg);
finish_wait(&memcg_oom_waitq, &owait.wait);
diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 8a4570c53e83..c08041ecd286 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -52,6 +52,9 @@
int sysctl_panic_on_oom;
int sysctl_oom_kill_allocating_task;
int sysctl_oom_dump_tasks = 1;
+#ifdef CONFIG_ASCEND_OOM
+int sysctl_enable_oom_killer = 1;
+#endif
/*
* Serializes oom killer invocations (out_of_memory()) from all contexts to
@@ -1047,6 +1050,42 @@ int unregister_oom_notifier(struct notifier_block *nb)
}
EXPORT_SYMBOL_GPL(unregister_oom_notifier);
+#ifdef CONFIG_ASCEND_OOM
+static BLOCKING_NOTIFIER_HEAD(hisi_oom_notify_list);
+
+int register_hisi_oom_notifier(struct notifier_block *nb)
+{
+ return blocking_notifier_chain_register(&hisi_oom_notify_list, nb);
+}
+EXPORT_SYMBOL_GPL(register_hisi_oom_notifier);
+
+static unsigned long last_jiffies;
+int hisi_oom_notifier_call(unsigned long val, void *v)
+{
+ /* when enable oom killer, just return */
+ if (sysctl_enable_oom_killer == 1)
+ return 0;
+
+ /* Print time interval to 10 seconds */
+ if (time_after(jiffies, last_jiffies + 10 * HZ)) {
+ pr_err("OOM_NOTIFIER: oom type %lu\n", val);
+ dump_stack();
+ show_mem(SHOW_MEM_FILTER_NODES, NULL);
+ dump_tasks(NULL, 0);
+ last_jiffies = jiffies;
+ }
+
+ return blocking_notifier_call_chain(&hisi_oom_notify_list, val, v);
+}
+EXPORT_SYMBOL_GPL(hisi_oom_notifier_call);
+
+int unregister_hisi_oom_notifier(struct notifier_block *nb)
+{
+ return blocking_notifier_chain_unregister(&hisi_oom_notify_list, nb);
+}
+EXPORT_SYMBOL_GPL(unregister_hisi_oom_notifier);
+#endif
+
/**
* out_of_memory - kill the "best" process when we run out of memory
* @oc: pointer to struct oom_control
@@ -1060,10 +1099,27 @@ bool out_of_memory(struct oom_control *oc)
{
unsigned long freed = 0;
enum oom_constraint constraint = CONSTRAINT_NONE;
+#ifdef CONFIG_ASCEND_OOM
+ unsigned long oom_type;
+#endif
if (oom_killer_disabled)
return false;
+#ifdef CONFIG_ASCEND_OOM
+ if (sysctl_enable_oom_killer == 0 || sysctl_enable_oom_killer == 2) {
+ if (is_memcg_oom(oc))
+ oom_type = HISI_OOM_TYPE_CGROUP;
+ else
+ oom_type = HISI_OOM_TYPE_NOMEM;
+
+ hisi_oom_notifier_call(oom_type, NULL);
+ if (unlikely(sysctl_enable_oom_killer == 2))
+ panic("Out of memory, panic by sysctl_enable_oom_killer");
+ return false;
+ }
+#endif
+
if (!is_memcg_oom(oc)) {
blocking_notifier_call_chain(&oom_notify_list, 0, &freed);
if (freed > 0)
diff --git a/mm/util.c b/mm/util.c
index 5515219168e8..ed64ef1f8387 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -17,6 +17,9 @@
#include <asm/sections.h>
#include <linux/uaccess.h>
+#ifdef CONFIG_ASCEND_OOM
+#include <linux/oom.h>
+#endif
#include "internal.h"
@@ -744,6 +747,9 @@ int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
if (percpu_counter_read_positive(&vm_committed_as) < allowed)
return 0;
error:
+#ifdef CONFIG_ASCEND_OOM
+ hisi_oom_notifier_call(HISI_OOM_TYPE_OVERCOMMIT, NULL);
+#endif
vm_unacct_memory(pages);
return -ENOMEM;
--
2.25.1
1
25
Hi ALL,
[Description]
The kernel branch openEuler-1.0-LTS has import the patch f6b330acc
but has no no_refcnt
and build failed
[Debug]
the upstream commit ad0f75 has introduce the no_refcnt to the struct sock_cgroup_data.
Maybe we should the merge the patch or revert it on branch openEuler-1.0-LTS
2
1
Euleros inclusion
Category: feature
Bugzilla: NA
CVE: NA
Use reserved memory to create a pmem device to store the
processes information that dumped before kernel update.
When you want to use this feature you need to declare by
"pmemmem=pmem_size:pmem_phystart" in cmdline.
(exp: pmemmem=100M:0x202000000000)
Signed-off-by: zhuling <zhuling8(a)huawei.com>
---
arch/arm64/kernel/setup.c | 5 +++
arch/arm64/mm/init.c | 90 ++++++++++++++++++++++++++++++++++++++
drivers/nvdimm/Kconfig | 11 +++++
drivers/nvdimm/Makefile | 3 ++
drivers/nvdimm/kup_pmem.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++
include/linux/ioport.h | 1 +
include/linux/mm.h | 4 ++
lib/Kconfig | 6 +++
8 files changed, 227 insertions(+)
create mode 100644 drivers/nvdimm/kup_pmem.c
diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c
index 155b8a6..e96cade 100644
--- a/arch/arm64/kernel/setup.c
+++ b/arch/arm64/kernel/setup.c
@@ -251,6 +251,11 @@ static void __init request_standard_resources(void)
if (kernel_data.start >= res->start &&
kernel_data.end <= res->end)
request_resource(res, &kernel_data);
+#ifdef CONFIG_KUP_PMEM_MEMORY
+ if (pmem_res.end)
+ insert_resource(&iomem_resource, &pmem_res);
+#endif
+
#ifdef CONFIG_KEXEC_CORE
/* Userspace will find "Crash kernel" region in /proc/iomem. */
if (crashk_low_res.end && crashk_low_res.start >= res->start &&
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index e43764d..169d663 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -65,6 +65,18 @@ phys_addr_t arm64_dma_phys_limit __ro_after_init;
struct res_mem res_mem[MAX_RES_REGIONS];
int res_mem_count;
+#ifdef CONFIG_KUP_PMEM_MEMORY
+static unsigned long long pmem_size, pmem_phystart;
+
+struct resource pmem_res = {
+ .name = "Kpmem Dev",
+ .start = 0,
+ .end = 0,
+ .flags = IORESOURCE_MEM,
+ .desc = IORES_DESC_KPMEM_DEV
+};
+#endif
+
#ifdef CONFIG_BLK_DEV_INITRD
static int __init early_initrd(char *p)
{
@@ -192,6 +204,80 @@ static void __init kexec_reserve_crashkres_pages(void)
}
#endif /* CONFIG_KEXEC_CORE */
+#ifdef CONFIG_KUP_PMEM_MEMORY
+/*
+ * reserve_pmem() - reserves memory for pmem
+ *
+ * This function reserves memory area given in "pmemmem=" kernel command
+ * line parameter. The memory reserved is used by pmem restore progress
+ * when kernel update.
+ */
+static int __init parse_pmem(char *par)
+{
+ char *cur = par;
+
+ if(!par)
+ return 0;
+
+ pmem_size = 0;
+ pmem_phystart = 0;
+
+ pmem_size = memparse(par, &cur);
+ if (par == cur) {
+ pr_warn("pmem: memory value expected\n");
+ return -EINVAL;
+ }
+
+ if (*cur == ':')
+ pmem_phystart = memparse(cur+1, &cur);
+ else if (*cur != ' ' && *cur != '\0') {
+ pr_warn("pmem: unrecognized char %c\n", *cur);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+early_param("pmemmem", parse_pmem);
+
+static void __init reserve_pmem(void)
+{
+ if (!pmem_size ||!pmem_phystart) {
+ return;
+ }
+
+ pmem_size = PAGE_ALIGN(pmem_size);
+
+ if (!memblock_is_region_memory(pmem_phystart, pmem_size)) {
+ pr_warn("cannot reserve pmem: region is not memory!\n");
+ return;
+ }
+
+ if (memblock_is_region_reserved(pmem_phystart, pmem_size)) {
+ pr_warn("cannot reserve pmem: region overlaps reserved memory!\n");
+ return;
+ }
+
+ if (!IS_ALIGNED(pmem_phystart, SZ_2M)) {
+ pr_warn("cannot reserve pmem: base address is not 2MB aligned\n");
+ return;
+ }
+ memblock_reserve(pmem_phystart, pmem_size);
+ memblock_remove(pmem_phystart, pmem_size);
+ pr_info("pmem reserved: 0x%016llx - 0x%016llx (%lld MB)\n",
+ pmem_phystart, pmem_phystart + pmem_size, pmem_size >> 20);
+
+ pmem_res.start = pmem_phystart;
+ pmem_res.end = pmem_phystart + pmem_size - 1;
+}
+#else
+static void __init reserve_pmem(void)
+{
+}
+static void __init reserve_pmem_pages(void)
+{
+}
+#endif /*CONFIG_KUP_PMEM_MEMORY*/
+
#ifdef CONFIG_CRASH_DUMP
static int __init early_init_dt_scan_elfcorehdr(unsigned long node,
const char *uname, int depth, void *data)
@@ -584,6 +670,10 @@ void __init arm64_memblock_init(void)
reserve_elfcorehdr();
+#ifdef CONFIG_KUP_PMEM_MEMORY
+ reserve_pmem();
+#endif
+
high_memory = __va(memblock_end_of_DRAM() - 1) + 1;
dma_contiguous_reserve(arm64_dma_phys_limit);
diff --git a/drivers/nvdimm/Kconfig b/drivers/nvdimm/Kconfig
index 9d36473..1097a8d 100644
--- a/drivers/nvdimm/Kconfig
+++ b/drivers/nvdimm/Kconfig
@@ -112,4 +112,15 @@ config OF_PMEM
Select Y if unsure.
+config KUP_PMEM
+ tristate "Persistent memory for kernel update"
+ depends on LIBNVDIMM
+ depends on KUP_PMEM_MEMORY
+ default LIBNVDIMM
+ help
+ Allows regions of persistent memory to be described in the
+ device-tree.
+
+ Select Y if unsure.
+
endif
diff --git a/drivers/nvdimm/Makefile b/drivers/nvdimm/Makefile
index e884704..853cbcb 100644
--- a/drivers/nvdimm/Makefile
+++ b/drivers/nvdimm/Makefile
@@ -5,6 +5,7 @@ obj-$(CONFIG_ND_BTT) += nd_btt.o
obj-$(CONFIG_ND_BLK) += nd_blk.o
obj-$(CONFIG_X86_PMEM_LEGACY) += nd_e820.o
obj-$(CONFIG_OF_PMEM) += of_pmem.o
+obj-$(CONFIG_KUP_PMEM) += nd_kup_pmem.o
nd_pmem-y := pmem.o
@@ -14,6 +15,8 @@ nd_blk-y := blk.o
nd_e820-y := e820.o
+nd_kup_pmem-y := kup_pmem.o
+
libnvdimm-y := core.o
libnvdimm-y += bus.o
libnvdimm-y += dimm_devs.o
diff --git a/drivers/nvdimm/kup_pmem.c b/drivers/nvdimm/kup_pmem.c
new file mode 100644
index 00000000..d9b0633
--- /dev/null
+++ b/drivers/nvdimm/kup_pmem.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
+ *
+ * This source code is licensed under the GNU General Public License,
+ * Version 2. See the file COPYING for more details.
+ *
+ * kup_pmem.c - kernel update support code.
+ * create a pmem device to store the processes information that is dumped
+ * when we want to kernel update.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/memory_hotplug.h>
+#include <linux/libnvdimm.h>
+#include <linux/module.h>
+#include <asm/io.h>
+
+static const struct attribute_group *kup_pmem_attribute_groups[] = {
+ &nvdimm_bus_attribute_group,
+ NULL,
+};
+
+static const struct attribute_group *kup_pmem_region_attribute_groups[] = {
+ &nd_region_attribute_group,
+ &nd_device_attribute_group,
+ NULL,
+};
+
+static int kup_pmem_remove(struct platform_device *pdev)
+{
+ struct nvdimm_bus *nvdimm_bus = platform_get_drvdata(pdev);
+
+ nvdimm_bus_unregister(nvdimm_bus);
+
+ return 0;
+}
+
+static int kup_register_one(struct resource *res, void *data)
+{
+ struct nd_region_desc ndr_desc;
+ struct nvdimm_bus *nvdimm_bus = data;
+
+ memset(&ndr_desc, 0, sizeof(ndr_desc));
+ ndr_desc.res = res;
+ ndr_desc.attr_groups = kup_pmem_region_attribute_groups;
+ ndr_desc.numa_node = NUMA_NO_NODE;
+ set_bit(ND_REGION_PAGEMAP, &ndr_desc.flags);
+ if (!nvdimm_pmem_region_create(nvdimm_bus, &ndr_desc))
+ return -ENXIO;
+ return 0;
+}
+
+static int kup_pmem_probe(struct platform_device *pdev)
+{
+ static struct nvdimm_bus_descriptor nd_desc;
+ struct device *dev = &pdev->dev;
+ struct nvdimm_bus *nvdimm_bus;
+ int rc = -ENXIO;
+
+ nd_desc.attr_groups = kup_pmem_attribute_groups;
+ nd_desc.provider_name = "kup_pmem";
+ nd_desc.module = THIS_MODULE;
+ nvdimm_bus = nvdimm_bus_register(dev, &nd_desc);
+ if (!nvdimm_bus)
+ goto err;
+ platform_set_drvdata(pdev, nvdimm_bus);
+
+ rc = walk_iomem_res_desc(IORES_DESC_KPMEM_DEV,
+ IORESOURCE_MEM, 0, -1, nvdimm_bus, kup_register_one);
+ if (rc)
+ goto err;
+
+ return 0;
+err:
+ nvdimm_bus_unregister(nvdimm_bus);
+ dev_err(dev, "kup_pmem: failed to register legacy persistent memory ranges\n");
+ return rc;
+}
+
+static struct platform_driver kup_pmem_driver = {
+ .probe = kup_pmem_probe,
+ .remove = kup_pmem_remove,
+ .driver = {
+ .name = "kup_pmem",
+ },
+};
+static struct platform_device *pdev;
+
+static __init int register_kup_pmem(void)
+{
+ platform_driver_register(&kup_pmem_driver);
+ pdev = platform_device_alloc("kup_pmem", -1);
+
+ return platform_device_add(pdev);
+}
+
+static __exit void unregister_kup_pmem(void)
+{
+ platform_device_del(pdev);
+ platform_driver_unregister(&kup_pmem_driver);
+}
+
+module_init(register_kup_pmem);
+module_exit(unregister_kup_pmem);
+MODULE_ALIAS("platform:kup_pmem*");
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Huawei Corporation");
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index 5330288..c5f59b9 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -139,6 +139,7 @@ enum {
IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
IORES_DESC_DEVICE_PUBLIC_MEMORY = 7,
+ IORES_DESC_KPMEM_DEV = 8,
};
/* helpers to define resources */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index b985af8..d84b0f0 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -38,6 +38,10 @@ struct bdi_writeback;
void init_mm_internals(void);
+#ifdef CONFIG_KUP_PMEM_MEMORY
+extern struct resource pmem_res;
+#endif
+
#ifndef CONFIG_NEED_MULTIPLE_NODES /* Don't use mapnrs, do it properly */
extern unsigned long max_mapnr;
diff --git a/lib/Kconfig b/lib/Kconfig
index a3928d4..cc49a86 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -621,3 +621,9 @@ config GENERIC_LIB_CMPDI2
config GENERIC_LIB_UCMPDI2
bool
+
+config KUP_PMEM_MEMORY
+ bool "reserve memory for kup pmem to store image"
+ default y
+ help
+ Say y here to enable this feature
--
2.9.5
1
0
euleros inclusion
category: feature
bugzilla: NA
issues: #I1RC8Z
CVE: NA
In normal kexec, relocating kernel may cost 5 ~ 10 seconds, to
copy all segments from vmalloced memory to kernel boot memory,
because of disabled mmu.
We introduce quick kexec to save time of copying memory as above,
just like kdump(kexec on crash), by using reserved memory
"Quick Kexec".
Constructing quick kimage as the same as crash kernel,
then simply copy all segments of kimage to reserved memroy.
We also add this support in syscall kexec_load using flags
of KEXEC_QUICK.
Signed-off-by: Sang Yan <sangyan(a)huawei.com>
---
arch/Kconfig | 7 +++++++
include/linux/ioport.h | 3 +++
include/linux/kexec.h | 13 +++++++++++-
include/uapi/linux/kexec.h | 3 +++
kernel/kexec.c | 10 ++++++++++
kernel/kexec_core.c | 41 +++++++++++++++++++++++++++++---------
6 files changed, 67 insertions(+), 10 deletions(-)
diff --git a/arch/Kconfig b/arch/Kconfig
index b54e485e47ae..1a9d00a6e122 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -18,6 +18,13 @@ config KEXEC_CORE
select CRASH_CORE
bool
+config QUICK_KEXEC
+ bool "Support for quick kexec"
+ depends on KEXEC_CORE
+ help
+ Say y here to enable this feature.
+ It use reserved memory to accelerate kexec.
+
config HAVE_IMA_KEXEC
bool
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index 5330288da8db..a42a1800c133 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -139,6 +139,9 @@ enum {
IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
IORES_DESC_DEVICE_PUBLIC_MEMORY = 7,
+#ifdef CONFIG_QUICK_KEXEC
+ IORES_DESC_QUICK_KEXEC = 8,
+#endif
};
/* helpers to define resources */
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index d6b8d0a69720..d5e42a44f2ca 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -233,9 +233,12 @@ struct kimage {
unsigned long control_page;
/* Flags to indicate special processing */
- unsigned int type : 1;
+ unsigned int type : 2;
#define KEXEC_TYPE_DEFAULT 0
#define KEXEC_TYPE_CRASH 1
+#ifdef CONFIG_QUICK_KEXEC
+#define KEXEC_TYPE_QUICK 2
+#endif
unsigned int preserve_context : 1;
/* If set, we are using file mode kexec syscall */
unsigned int file_mode:1;
@@ -296,6 +299,11 @@ extern int kexec_load_disabled;
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
#endif
+#ifdef CONFIG_QUICK_KEXEC
+#undef KEXEC_FLAGS
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_QUICK)
+#endif
+
/* List of defined/legal kexec file flags */
#define KEXEC_FILE_FLAGS (KEXEC_FILE_UNLOAD | KEXEC_FILE_ON_CRASH | \
KEXEC_FILE_NO_INITRAMFS)
@@ -305,6 +313,9 @@ extern int kexec_load_disabled;
extern struct resource crashk_res;
extern struct resource crashk_low_res;
extern note_buf_t __percpu *crash_notes;
+#ifdef CONFIG_QUICK_KEXEC
+extern struct resource quick_kexec_res;
+#endif
/* flag to track if kexec reboot is in progress */
extern bool kexec_in_progress;
diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h
index 6d112868272d..dcf9857452da 100644
--- a/include/uapi/linux/kexec.h
+++ b/include/uapi/linux/kexec.h
@@ -12,6 +12,9 @@
/* kexec flags for different usage scenarios */
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+#ifdef CONFIG_QUICK_KEXEC
+#define KEXEC_QUICK 0x00000004
+#endif
#define KEXEC_ARCH_MASK 0xffff0000
/*
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 68559808fdfa..47dfad722b7c 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -46,6 +46,9 @@ static int kimage_alloc_init(struct kimage **rimage, unsigned long entry,
int ret;
struct kimage *image;
bool kexec_on_panic = flags & KEXEC_ON_CRASH;
+#ifdef CONFIG_QUICK_KEXEC
+ bool kexec_on_quick = flags & KEXEC_QUICK;
+#endif
if (kexec_on_panic) {
/* Verify we have a valid entry point */
@@ -71,6 +74,13 @@ static int kimage_alloc_init(struct kimage **rimage, unsigned long entry,
image->type = KEXEC_TYPE_CRASH;
}
+#ifdef CONFIG_QUICK_KEXEC
+ if (kexec_on_quick) {
+ image->control_page = quick_kexec_res.start;
+ image->type = KEXEC_TYPE_QUICK;
+ }
+#endif
+
ret = sanity_check_segment_list(image);
if (ret)
goto out_free_image;
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index b36c9c46cd2c..595a757af656 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -74,6 +74,16 @@ struct resource crashk_low_res = {
.desc = IORES_DESC_CRASH_KERNEL
};
+#ifdef CONFIG_QUICK_KEXEC
+struct resource quick_kexec_res = {
+ .name = "Quick kexec",
+ .start = 0,
+ .end = 0,
+ .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
+ .desc = IORES_DESC_QUICK_KEXEC
+};
+#endif
+
int kexec_should_crash(struct task_struct *p)
{
/*
@@ -470,8 +480,10 @@ static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
return pages;
}
-static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
- unsigned int order)
+
+static struct page *kimage_alloc_special_control_pages(struct kimage *image,
+ unsigned int order,
+ unsigned long end)
{
/* Control pages are special, they are the intermediaries
* that are needed while we copy the rest of the pages
@@ -501,7 +513,7 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
size = (1 << order) << PAGE_SHIFT;
hole_start = (image->control_page + (size - 1)) & ~(size - 1);
hole_end = hole_start + size - 1;
- while (hole_end <= crashk_res.end) {
+ while (hole_end <= end) {
unsigned long i;
cond_resched();
@@ -536,7 +548,6 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
return pages;
}
-
struct page *kimage_alloc_control_pages(struct kimage *image,
unsigned int order)
{
@@ -547,8 +558,15 @@ struct page *kimage_alloc_control_pages(struct kimage *image,
pages = kimage_alloc_normal_control_pages(image, order);
break;
case KEXEC_TYPE_CRASH:
- pages = kimage_alloc_crash_control_pages(image, order);
+ pages = kimage_alloc_special_control_pages(image, order,
+ crashk_res.end);
+ break;
+#ifdef CONFIG_QUICK_KEXEC
+ case KEXEC_TYPE_QUICK:
+ pages = kimage_alloc_special_control_pages(image, order,
+ quick_kexec_res.end);
break;
+#endif
}
return pages;
@@ -898,11 +916,11 @@ static int kimage_load_normal_segment(struct kimage *image,
return result;
}
-static int kimage_load_crash_segment(struct kimage *image,
+static int kimage_load_special_segment(struct kimage *image,
struct kexec_segment *segment)
{
- /* For crash dumps kernels we simply copy the data from
- * user space to it's destination.
+ /* For crash dumps kernels and quick kexec kernels
+ * we simply copy the data from user space to it's destination.
* We do things a page at a time for the sake of kmap.
*/
unsigned long maddr;
@@ -976,8 +994,13 @@ int kimage_load_segment(struct kimage *image,
result = kimage_load_normal_segment(image, segment);
break;
case KEXEC_TYPE_CRASH:
- result = kimage_load_crash_segment(image, segment);
+ result = kimage_load_special_segment(image, segment);
+ break;
+#ifdef CONFIG_QUICK_KEXEC
+ case KEXEC_TYPE_QUICK:
+ result = kimage_load_special_segment(image, segment);
break;
+#endif
}
return result;
--
2.19.1
1
1
euleros inclusion
category: feature
bugzilla: NA
issues: #I1RC8Z
CVE: NA
In normal kexec, relocating kernel may cost 5 ~ 10 seconds, to
copy all segments from vmalloced memory to kernel boot memory,
because of disabled mmu.
We introduce quick kexec to save time of copying memory as above,
just like kdump(kexec on crash), by using reserved memory
"Quick Kexec".
Constructing quick kimage as the same as crash kernel,
then simply copy all segments of kimage to reserved memroy.
We also add this support in syscall kexec_load using flags
of KEXEC_QUICK.
Signed-off-by: Sang Yan <sangyan(a)huawei.com>
---
arch/Kconfig | 7 +++++++
include/linux/ioport.h | 3 +++
include/linux/kexec.h | 13 +++++++++++-
include/uapi/linux/kexec.h | 3 +++
kernel/kexec.c | 10 ++++++++++
kernel/kexec_core.c | 41 +++++++++++++++++++++++++++++---------
6 files changed, 67 insertions(+), 10 deletions(-)
diff --git a/arch/Kconfig b/arch/Kconfig
index b54e485e47ae..1a9d00a6e122 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -18,6 +18,13 @@ config KEXEC_CORE
select CRASH_CORE
bool
+config QUICK_KEXEC
+ bool "Support for quick kexec"
+ depends on KEXEC_CORE
+ help
+ Say y here to enable this feature.
+ It use reserved memory to accelerate kexec.
+
config HAVE_IMA_KEXEC
bool
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index 5330288da8db..a42a1800c133 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -139,6 +139,9 @@ enum {
IORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,
IORES_DESC_DEVICE_PRIVATE_MEMORY = 6,
IORES_DESC_DEVICE_PUBLIC_MEMORY = 7,
+#ifdef CONFIG_QUICK_KEXEC
+ IORES_DESC_QUICK_KEXEC = 8,
+#endif
};
/* helpers to define resources */
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index d6b8d0a69720..d5e42a44f2ca 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -233,9 +233,12 @@ struct kimage {
unsigned long control_page;
/* Flags to indicate special processing */
- unsigned int type : 1;
+ unsigned int type : 2;
#define KEXEC_TYPE_DEFAULT 0
#define KEXEC_TYPE_CRASH 1
+#ifdef CONFIG_QUICK_KEXEC
+#define KEXEC_TYPE_QUICK 2
+#endif
unsigned int preserve_context : 1;
/* If set, we are using file mode kexec syscall */
unsigned int file_mode:1;
@@ -296,6 +299,11 @@ extern int kexec_load_disabled;
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
#endif
+#ifdef CONFIG_QUICK_KEXEC
+#undef KEXEC_FLAGS
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_QUICK)
+#endif
+
/* List of defined/legal kexec file flags */
#define KEXEC_FILE_FLAGS (KEXEC_FILE_UNLOAD | KEXEC_FILE_ON_CRASH | \
KEXEC_FILE_NO_INITRAMFS)
@@ -305,6 +313,9 @@ extern int kexec_load_disabled;
extern struct resource crashk_res;
extern struct resource crashk_low_res;
extern note_buf_t __percpu *crash_notes;
+#ifdef CONFIG_QUICK_KEXEC
+extern struct resource quick_kexec_res;
+#endif
/* flag to track if kexec reboot is in progress */
extern bool kexec_in_progress;
diff --git a/include/uapi/linux/kexec.h b/include/uapi/linux/kexec.h
index 6d112868272d..dcf9857452da 100644
--- a/include/uapi/linux/kexec.h
+++ b/include/uapi/linux/kexec.h
@@ -12,6 +12,9 @@
/* kexec flags for different usage scenarios */
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+#ifdef CONFIG_QUICK_KEXEC
+#define KEXEC_QUICK 0x00000004
+#endif
#define KEXEC_ARCH_MASK 0xffff0000
/*
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 68559808fdfa..47dfad722b7c 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -46,6 +46,9 @@ static int kimage_alloc_init(struct kimage **rimage, unsigned long entry,
int ret;
struct kimage *image;
bool kexec_on_panic = flags & KEXEC_ON_CRASH;
+#ifdef CONFIG_QUICK_KEXEC
+ bool kexec_on_quick = flags & KEXEC_QUICK;
+#endif
if (kexec_on_panic) {
/* Verify we have a valid entry point */
@@ -71,6 +74,13 @@ static int kimage_alloc_init(struct kimage **rimage, unsigned long entry,
image->type = KEXEC_TYPE_CRASH;
}
+#ifdef CONFIG_QUICK_KEXEC
+ if (kexec_on_quick) {
+ image->control_page = quick_kexec_res.start;
+ image->type = KEXEC_TYPE_QUICK;
+ }
+#endif
+
ret = sanity_check_segment_list(image);
if (ret)
goto out_free_image;
diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c
index b36c9c46cd2c..595a757af656 100644
--- a/kernel/kexec_core.c
+++ b/kernel/kexec_core.c
@@ -74,6 +74,16 @@ struct resource crashk_low_res = {
.desc = IORES_DESC_CRASH_KERNEL
};
+#ifdef CONFIG_QUICK_KEXEC
+struct resource quick_kexec_res = {
+ .name = "Quick kexec",
+ .start = 0,
+ .end = 0,
+ .flags = IORESOURCE_BUSY | IORESOURCE_SYSTEM_RAM,
+ .desc = IORES_DESC_QUICK_KEXEC
+};
+#endif
+
int kexec_should_crash(struct task_struct *p)
{
/*
@@ -470,8 +480,10 @@ static struct page *kimage_alloc_normal_control_pages(struct kimage *image,
return pages;
}
-static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
- unsigned int order)
+
+static struct page *kimage_alloc_special_control_pages(struct kimage *image,
+ unsigned int order,
+ unsigned long end)
{
/* Control pages are special, they are the intermediaries
* that are needed while we copy the rest of the pages
@@ -501,7 +513,7 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
size = (1 << order) << PAGE_SHIFT;
hole_start = (image->control_page + (size - 1)) & ~(size - 1);
hole_end = hole_start + size - 1;
- while (hole_end <= crashk_res.end) {
+ while (hole_end <= end) {
unsigned long i;
cond_resched();
@@ -536,7 +548,6 @@ static struct page *kimage_alloc_crash_control_pages(struct kimage *image,
return pages;
}
-
struct page *kimage_alloc_control_pages(struct kimage *image,
unsigned int order)
{
@@ -547,8 +558,15 @@ struct page *kimage_alloc_control_pages(struct kimage *image,
pages = kimage_alloc_normal_control_pages(image, order);
break;
case KEXEC_TYPE_CRASH:
- pages = kimage_alloc_crash_control_pages(image, order);
+ pages = kimage_alloc_special_control_pages(image, order,
+ crashk_res.end);
+ break;
+#ifdef CONFIG_QUICK_KEXEC
+ case KEXEC_TYPE_QUICK:
+ pages = kimage_alloc_special_control_pages(image, order,
+ quick_kexec_res.end);
break;
+#endif
}
return pages;
@@ -898,11 +916,11 @@ static int kimage_load_normal_segment(struct kimage *image,
return result;
}
-static int kimage_load_crash_segment(struct kimage *image,
+static int kimage_load_special_segment(struct kimage *image,
struct kexec_segment *segment)
{
- /* For crash dumps kernels we simply copy the data from
- * user space to it's destination.
+ /* For crash dumps kernels and quick kexec kernels
+ * we simply copy the data from user space to it's destination.
* We do things a page at a time for the sake of kmap.
*/
unsigned long maddr;
@@ -976,8 +994,13 @@ int kimage_load_segment(struct kimage *image,
result = kimage_load_normal_segment(image, segment);
break;
case KEXEC_TYPE_CRASH:
- result = kimage_load_crash_segment(image, segment);
+ result = kimage_load_special_segment(image, segment);
+ break;
+#ifdef CONFIG_QUICK_KEXEC
+ case KEXEC_TYPE_QUICK:
+ result = kimage_load_special_segment(image, segment);
break;
+#endif
}
return result;
--
2.19.1
1
1
This patch set provides some improvements and fixes. The first three
patches solve a permission problem caused by EVM. EVM denies xattr
operations also for files that are not appraised by IMA. If only
executables are appraised, xattr operations on the other files should be
allowed, even if metadata verification fails (for example due to missing
security.evm).
At the moment, in openEuler we use EVM_ALLOW_METADATA_WRITES to avoid this
problem (EVM does not check metadata integrity), but it would be useful to
do the verification for example to prevent accidental changes on immutable
metadata.
The fourth patch enables the choice of the algorithm for the HMAC and
ensures that the parameters passed to the functions which handle the HMAC
are consistent with the algorithm chosen.
The last three patches are simple bug fixes.
Roberto Sassu (7):
evm: Move hooks outside LSM infrastructure
evm: Extend API of post hooks to pass the result of pre hooks
evm: Return -EAGAIN to ignore verification failures
evm: Propagate choice of HMAC algorithm in evm_crypto.c
ima: Fix datalen check in ima_write_data()
evm: Fix validation of fake xattr passed by IMA
evm: Initialize saved_evm_status
fs/attr.c | 7 ++-
fs/xattr.c | 64 +++++++++++++++++---------
include/linux/evm.h | 18 +++++---
security/integrity/evm/Kconfig | 32 +++++++++++++
security/integrity/evm/evm.h | 1 +
security/integrity/evm/evm_crypto.c | 15 ++++--
security/integrity/evm/evm_main.c | 71 +++++++++++++++++++++--------
security/integrity/ima/ima_fs.c | 2 +-
security/integrity/integrity.h | 2 +-
security/security.c | 18 ++------
10 files changed, 158 insertions(+), 72 deletions(-)
--
2.27.GIT
1
7

[PATCH 01/23] ima: Use buffer large enough to store fake IMA xattr for appraisal
by Roberto Sassu 06 Aug '20
by Roberto Sassu 06 Aug '20
06 Aug '20
hulk inclusion
category: feature
feature: digest-lists
---------------------------
A fake IMA xattr is created to perform EVM verification even if
security.ima is not present. Appraisal could succeed if EVM status
is unknown and the file digest is found in a digest list.
This patch allocates a larger buffer to store fake IMA xattrs (struct
evm_ima_xattr_data can be used only for SHA1 digests).
Signed-off-by: Roberto Sassu <roberto.sassu(a)huawei.com>
---
security/integrity/ima/ima_appraise.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c
index a11577147022..c6376ec28ccd 100644
--- a/security/integrity/ima/ima_appraise.c
+++ b/security/integrity/ima/ima_appraise.c
@@ -193,19 +193,19 @@ int ima_appraise_measurement(enum ima_hooks func,
struct dentry *dentry = file_dentry(file);
struct inode *inode = d_backing_inode(dentry);
enum integrity_status status = INTEGRITY_UNKNOWN;
- struct evm_ima_xattr_data digest_list_value;
+ char _buf[sizeof(struct evm_ima_xattr_data) + SHA512_DIGEST_SIZE];
int rc = xattr_len, hash_start = 0;
if (!(inode->i_opflags & IOP_XATTR))
return INTEGRITY_UNKNOWN;
if (rc == -ENODATA && found_digest &&
- !(file->f_mode && FMODE_CREATED)) {
- digest_list_value.type = EVM_IMA_XATTR_DIGEST_LIST;
- digest_list_value.digest[0] = found_digest->algo;
- memcpy(&digest_list_value.digest[1], found_digest->digest,
+ !(file->f_mode & FMODE_CREATED)) {
+ xattr_value = (struct evm_ima_xattr_data *)_buf;
+ xattr_value->type = IMA_XATTR_DIGEST_NG;
+ xattr_value->digest[0] = found_digest->algo;
+ memcpy(&xattr_value->digest[1], found_digest->digest,
hash_digest_size[found_digest->algo]);
- xattr_value = &digest_list_value;
rc = hash_digest_size[found_digest->algo] + 2;
}
@@ -283,7 +283,6 @@ int ima_appraise_measurement(enum ima_hooks func,
status = INTEGRITY_PASS;
break;
}
-
if (!ima_appraise_no_metadata) {
cause = "IMA-xattr-untrusted";
status = INTEGRITY_FAIL;
--
2.27.GIT
3
26

06 Aug '20
From: Jonathan Lebon <jlebon(a)redhat.com>
mainline inclusion
from mainline-v5.5-rc1
commit 3e3e24b42043eceb97ed834102c2d094dfd7aaa6
category: bugfix
---------------------------
Currently, the SELinux LSM prevents one from setting the
`security.selinux` xattr on an inode without a policy first being
loaded. However, this restriction is problematic: it makes it impossible
to have newly created files with the correct label before actually
loading the policy.
This is relevant in distributions like Fedora, where the policy is
loaded by systemd shortly after pivoting out of the initrd. In such
instances, all files created prior to pivoting will be unlabeled. One
then has to relabel them after pivoting, an operation which inherently
races with other processes trying to access those same files.
Going further, there are use cases for creating the entire root
filesystem on first boot from the initrd (e.g. Container Linux supports
this today[1], and we'd like to support it in Fedora CoreOS as well[2]).
One can imagine doing this in two ways: at the block device level (e.g.
laying down a disk image), or at the filesystem level. In the former,
labeling can simply be part of the image. But even in the latter
scenario, one still really wants to be able to set the right labels when
populating the new filesystem.
This patch enables this by changing behaviour in the following two ways:
1. allow `setxattr` on mounts without `SBLABEL_MNT` (which is all of
them if no policy is loaded yet)
2. don't try to set the in-core inode SID if we're not initialized;
instead leave it as `LABEL_INVALID` so that revalidation may be
attempted at a later time
Note the first hunk of this patch is functionally the same as a
previously discussed one[3], though it was part of a larger series which
wasn't accepted.
Co-developed-by: Victor Kamensky <kamensky(a)cisco.com>
Signed-off-by: Victor Kamensky <kamensky(a)cisco.com>
Signed-off-by: Jonathan Lebon <jlebon(a)redhat.com>
[1] https://coreos.com/os/docs/latest/root-filesystem-placement.html
[2] https://github.com/coreos/fedora-coreos-tracker/issues/94
[3] https://www.spinics.net/lists/linux-initramfs/msg04593.html
---
security/selinux/hooks.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 452254fd89f8..931546d80211 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -3305,7 +3305,7 @@ static int selinux_inode_setxattr(struct dentry *dentry, const char *name,
}
sbsec = inode->i_sb->s_security;
- if (!(sbsec->flags & SBLABEL_MNT))
+ if (!(sbsec->flags & SBLABEL_MNT) && selinux_state.initialized)
return -EOPNOTSUPP;
if (!inode_owner_or_capable(inode))
@@ -3387,6 +3387,15 @@ static void selinux_inode_post_setxattr(struct dentry *dentry, const char *name,
return;
}
+ if (!selinux_state.initialized) {
+ /* If we haven't even been initialized, then we can't validate
+ * against a policy, so leave the label as invalid. It may
+ * resolve to a valid label on the next revalidation try if
+ * we've since initialized.
+ */
+ return;
+ }
+
rc = security_context_to_sid_force(&selinux_state, value, size,
&newsid);
if (rc) {
--
2.27.GIT
3
40