Re: sparse annotation for error types?

2020-12-08 Thread Zhang Changzhong



On 2020/12/8 21:28, Dan Carpenter wrote:
> Hi Zhang,
> 
> Are you using Coccinelle to detect these bugs?

In fact, I'm not familiar with Coccinelle, these bugs are reported by robot.

> 
> On Sat, Dec 05, 2020 at 02:32:50PM -0800, Jakub Kicinski wrote:
>> Hi!
>>
>> Recently we've been getting a steady stream of patches from Changzhong
>> to fix missing assignment to error variables before jumping to error
>> cases.
> 
> I've mucked about with this a little in Smatch trying to work out some
> heuristics to use.  I added a warning for a NULL return followed by a
> goto.  Then on Friday I added a warning for a _dev_err() print followed
> by a goto.  But neither of those rules catches the bug fixed by commit
> 4de377b65903 ("net: marvell: prestera: Fix error return code in
> prestera_port_create()"), where the error was invalid data.
> 
>   if (idx >= size)
>   goto free_whatever;
> 
> I'm going to print a warning if the function ends in a cleanup block
> that can only be reached by gotos.  We'll see how that works tomorrow.
> 
> static void match_return(struct statement *stmt)
> {
> struct sm_state *sm, *tmp;
> sval_t sval;
> char *name;
> bool is_last;
> 
>   // Only complain if the function returns a variable
> if (!stmt->ret_value || stmt->ret_value->type != EXPR_SYMBOL)
> return;
> 
>   // The function returns an int
> if (cur_func_return_type() != _ctype)
> return;
> 
>   // It's only reachable via a goto
> if (get_state(my_id, "path", NULL) != )
> return;
> 
>   // It returns a negative error code
> sm = get_extra_sm_state(stmt->ret_value);
> if (!sm || !estate_rl(sm->state) ||
> !sval_is_negative(rl_min(estate_rl(sm->state
> return;
> 
> FOR_EACH_PTR(sm->possible, tmp) {
>   // There is at least one path where "ret" is zero
> if (estate_get_single_value(tmp->state, ) &&
> sval.value == 0)
> goto warn;
> } END_FOR_EACH_PTR(tmp);
> 
> return;
> warn:
>   // It's the last statement of a function
> is_last = is_last_stmt(stmt);
> 
> name = expr_to_str(stmt->ret_value);
> sm_warning("missing error code '%s' rl='%s' is_last=%d", name, 
> sm->state->name, is_last);
> free_string(name);
> }
> 
> regards,
> dan carpenter
> 
> .
> 


[PATCH] remoteproc: qcom: Fix potential NULL dereference in adsp_init_mmio()

2020-12-07 Thread Zhang Changzhong
platform_get_resource() may fail and in this case a NULL dereference
will occur.

Fix it to use devm_platform_ioremap_resource() instead of calling
platform_get_resource() and devm_ioremap().

This is detected by Coccinelle semantic patch.

@@
expression pdev, res, n, t, e, e1, e2;
@@

res = \(platform_get_resource\|platform_get_resource_byname\)(pdev, t,
n);
+ if (!res)
+   return -EINVAL;
... when != res == NULL
e = devm_ioremap(e1, res->start, e2);

Fixes: dc160e449122 ("remoteproc: qcom: Introduce Non-PAS ADSP PIL driver")
Signed-off-by: Zhang Changzhong 
---
 drivers/remoteproc/qcom_q6v5_adsp.c | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/remoteproc/qcom_q6v5_adsp.c 
b/drivers/remoteproc/qcom_q6v5_adsp.c
index efb2c1a..8674b73 100644
--- a/drivers/remoteproc/qcom_q6v5_adsp.c
+++ b/drivers/remoteproc/qcom_q6v5_adsp.c
@@ -362,15 +362,12 @@ static int adsp_init_mmio(struct qcom_adsp *adsp,
struct platform_device *pdev)
 {
struct device_node *syscon;
-   struct resource *res;
int ret;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   adsp->qdsp6ss_base = devm_ioremap(>dev, res->start,
-   resource_size(res));
-   if (!adsp->qdsp6ss_base) {
+   adsp->qdsp6ss_base = devm_platform_ioremap_resource(pdev, 0);
+   if (IS_ERR(adsp->qdsp6ss_base)) {
dev_err(adsp->dev, "failed to map QDSP6SS registers\n");
-   return -ENOMEM;
+   return PTR_ERR(adsp->qdsp6ss_base);
}
 
syscon = of_parse_phandle(pdev->dev.of_node, "qcom,halt-regs", 0);
-- 
2.9.5



[PATCH] slimbus: qcom: fix potential NULL dereference in qcom_slim_prg_slew()

2020-12-07 Thread Zhang Changzhong
platform_get_resource_byname() may fail and in this case a NULL
dereference will occur.

Fix it to use devm_platform_ioremap_resource_byname() instead of calling
platform_get_resource_byname() and devm_ioremap().

This is detected by Coccinelle semantic patch.

@@
expression pdev, res, n, t, e, e1, e2;
@@

res = \(platform_get_resource\|platform_get_resource_byname\)(pdev, t,
n);
+ if (!res)
+   return -EINVAL;
... when != res == NULL
e = devm_ioremap(e1, res->start, e2);

Fixes: ad7fcbc308b0 ("slimbus: qcom: Add Qualcomm Slimbus controller driver")
Signed-off-by: Zhang Changzhong 
---
 drivers/slimbus/qcom-ctrl.c | 9 ++---
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/slimbus/qcom-ctrl.c b/drivers/slimbus/qcom-ctrl.c
index 4aad256..f04b961 100644
--- a/drivers/slimbus/qcom-ctrl.c
+++ b/drivers/slimbus/qcom-ctrl.c
@@ -472,15 +472,10 @@ static void qcom_slim_rxwq(struct work_struct *work)
 static void qcom_slim_prg_slew(struct platform_device *pdev,
struct qcom_slim_ctrl *ctrl)
 {
-   struct resource *slew_mem;
-
if (!ctrl->slew_reg) {
/* SLEW RATE register for this SLIMbus */
-   slew_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-   "slew");
-   ctrl->slew_reg = devm_ioremap(>dev, slew_mem->start,
-   resource_size(slew_mem));
-   if (!ctrl->slew_reg)
+   ctrl->slew_reg = devm_platform_ioremap_resource_byname(pdev, 
"slew");
+   if (IS_ERR(ctrl->slew_reg))
return;
}
 
-- 
2.9.5



[PATCH net] net: ll_temac: Fix potential NULL dereference in temac_probe()

2020-12-07 Thread Zhang Changzhong
platform_get_resource() may fail and in this case a NULL dereference
will occur.

Fix it to use devm_platform_ioremap_resource() instead of calling
platform_get_resource() and devm_ioremap().

This is detected by Coccinelle semantic patch.

@@
expression pdev, res, n, t, e, e1, e2;
@@

res = \(platform_get_resource\|platform_get_resource_byname\)(pdev, t, n);
+ if (!res)
+   return -EINVAL;
... when != res == NULL
e = devm_ioremap(e1, res->start, e2);

Fixes: 8425c41d1ef7 ("net: ll_temac: Extend support to non-device-tree 
platforms")
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/xilinx/ll_temac_main.c | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c 
b/drivers/net/ethernet/xilinx/ll_temac_main.c
index 60c199f..0301853 100644
--- a/drivers/net/ethernet/xilinx/ll_temac_main.c
+++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
@@ -1351,7 +1351,6 @@ static int temac_probe(struct platform_device *pdev)
struct device_node *temac_np = dev_of_node(>dev), *dma_np;
struct temac_local *lp;
struct net_device *ndev;
-   struct resource *res;
const void *addr;
__be32 *p;
bool little_endian;
@@ -1500,13 +1499,11 @@ static int temac_probe(struct platform_device *pdev)
of_node_put(dma_np);
} else if (pdata) {
/* 2nd memory resource specifies DMA registers */
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-   lp->sdma_regs = devm_ioremap(>dev, res->start,
-resource_size(res));
-   if (!lp->sdma_regs) {
+   lp->sdma_regs = devm_platform_ioremap_resource(pdev, 1);
+   if (IS_ERR(lp->sdma_regs)) {
dev_err(>dev,
"could not map DMA registers\n");
-   return -ENOMEM;
+   return PTR_ERR(lp->sdma_regs);
}
if (pdata->dma_little_endian) {
lp->dma_in = temac_dma_in32_le;
-- 
2.9.5



Re: [PATCH net] xsk: Fix error return code in __xp_assign_dev()

2020-12-04 Thread Zhang Changzhong
> 
> Good catch! My intention here by not setting err is that it should
> fall back to copy mode, which it does. The problem is that the
> force_zc flag is disregarded when err is not set (see exit code below)
> and your patch fixes that. If force_zc is set, we should exit out with
> an error, not fall back. Could you please write about this in your
> cover letter and send a v2?
> 

Thanks for the suggestion, I have sent the v2 patch, please take another look.

> BTW, what is the "Hulk Robot" that is in your Reported-by tag?

It's an auto tester, here is some information: https://lwn.net/Articles/804119/

> 
> Thank you: Magnus
> 
> err_unreg_xsk:
> xp_disable_drv_zc(pool);
> err_unreg_pool:
> if (!force_zc)
> err = 0; /* fallback to copy mode */
> if (err)
> xsk_clear_pool_at_qid(netdev, queue_id);
> return err;
> 
>> goto err_unreg_xsk;
>> }
>> pool->umem->zc = true;
>> --
>> 2.9.5
>>
> .
> 


[PATCH net v2] xsk: Return error code if force_zc is set

2020-12-04 Thread Zhang Changzhong
If force_zc is set, we should exit out with an error, not fall back to
copy mode.

Fixes: 921b68692abb ("xsk: Enable sharing of dma mappings")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 net/xdp/xsk_buff_pool.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
index 9287edd..d5adeee 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -175,6 +175,7 @@ static int __xp_assign_dev(struct xsk_buff_pool *pool,
 
if (!pool->dma_pages) {
WARN(1, "Driver did not DMA map zero-copy buffers");
+   err = -EINVAL;
goto err_unreg_xsk;
}
pool->umem->zc = true;
-- 
2.9.5



[PATCH net] xsk: Fix error return code in __xp_assign_dev()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 921b68692abb ("xsk: Enable sharing of dma mappings")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 net/xdp/xsk_buff_pool.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c
index 9287edd..d5adeee 100644
--- a/net/xdp/xsk_buff_pool.c
+++ b/net/xdp/xsk_buff_pool.c
@@ -175,6 +175,7 @@ static int __xp_assign_dev(struct xsk_buff_pool *pool,
 
if (!pool->dma_pages) {
WARN(1, "Driver did not DMA map zero-copy buffers");
+   err = -EINVAL;
goto err_unreg_xsk;
}
pool->umem->zc = true;
-- 
2.9.5



[PATCH net] net: marvell: prestera: Fix error return code in prestera_port_create()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 501ef3066c89 ("net: marvell: prestera: Add driver for Prestera family 
ASIC devices")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/marvell/prestera/prestera_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/marvell/prestera/prestera_main.c 
b/drivers/net/ethernet/marvell/prestera/prestera_main.c
index 0f20e07..da4b286 100644
--- a/drivers/net/ethernet/marvell/prestera/prestera_main.c
+++ b/drivers/net/ethernet/marvell/prestera/prestera_main.c
@@ -318,8 +318,10 @@ static int prestera_port_create(struct prestera_switch 
*sw, u32 id)
goto err_port_init;
}
 
-   if (port->fp_id >= PRESTERA_MAC_ADDR_NUM_MAX)
+   if (port->fp_id >= PRESTERA_MAC_ADDR_NUM_MAX) {
+   err = -EINVAL;
goto err_port_init;
+   }
 
/* firmware requires that port's MAC address consist of the first
 * 5 bytes of the base MAC address
-- 
2.9.5



[PATCH net] net: bridge: vlan: fix error return code in __vlan_add()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: f8ed289fab84 ("bridge: vlan: use br_vlan_(get|put)_master to deal with 
refcounts")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 net/bridge/br_vlan.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c
index 3e493eb..08c7741 100644
--- a/net/bridge/br_vlan.c
+++ b/net/bridge/br_vlan.c
@@ -266,8 +266,10 @@ static int __vlan_add(struct net_bridge_vlan *v, u16 flags,
}
 
masterv = br_vlan_get_master(br, v->vid, extack);
-   if (!masterv)
+   if (!masterv) {
+   err = -ENOMEM;
goto out_filt;
+   }
v->brvlan = masterv;
if (br_opt_get(br, BROPT_VLAN_STATS_PER_PORT)) {
v->stats = netdev_alloc_pcpu_stats(struct 
br_vlan_stats);
-- 
2.9.5



[PATCH net] ipv4: fix error return code in rtm_to_fib_config()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: d15662682db2 ("ipv4: Allow ipv6 gateway with ipv4 routes")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 net/ipv4/fib_frontend.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
index b87140a..cdf6ec5 100644
--- a/net/ipv4/fib_frontend.c
+++ b/net/ipv4/fib_frontend.c
@@ -825,7 +825,7 @@ static int rtm_to_fib_config(struct net *net, struct 
sk_buff *skb,
if (has_gw && has_via) {
NL_SET_ERR_MSG(extack,
   "Nexthop configuration can not contain both 
GATEWAY and VIA");
-   goto errout;
+   return -EINVAL;
}
 
return 0;
-- 
2.9.5



[PATCH wireless] adm8211: fix error return code in adm8211_probe()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: cc0b88cf5ecf ("[PATCH] Add adm8211 802.11b wireless driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/wireless/admtek/adm8211.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/admtek/adm8211.c 
b/drivers/net/wireless/admtek/adm8211.c
index 5cf2045..c41e725 100644
--- a/drivers/net/wireless/admtek/adm8211.c
+++ b/drivers/net/wireless/admtek/adm8211.c
@@ -1796,6 +1796,7 @@ static int adm8211_probe(struct pci_dev *pdev,
if (io_len < 256 || mem_len < 1024) {
printk(KERN_ERR "%s (adm8211): Too short PCI resources\n",
   pci_name(pdev));
+   err = -ENOMEM;
goto err_disable_pdev;
}
 
@@ -1805,6 +1806,7 @@ static int adm8211_probe(struct pci_dev *pdev,
if (reg != ADM8211_SIG1 && reg != ADM8211_SIG2) {
printk(KERN_ERR "%s (adm8211): Invalid signature (0x%x)\n",
   pci_name(pdev), reg);
+   err = -EINVAL;
goto err_disable_pdev;
}
 
@@ -1815,8 +1817,8 @@ static int adm8211_probe(struct pci_dev *pdev,
return err; /* someone else grabbed it? don't disable it */
}
 
-   if (dma_set_mask(>dev, DMA_BIT_MASK(32)) ||
-   dma_set_coherent_mask(>dev, DMA_BIT_MASK(32))) {
+   err = dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32));
+   if (err) {
printk(KERN_ERR "%s (adm8211): No suitable DMA available\n",
   pci_name(pdev));
goto err_free_reg;
-- 
2.9.5



[PATCH] vhost scsi: fix error return code in vhost_scsi_set_endpoint()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 25b98b64e284 ("vhost scsi: alloc cmds per vq instead of session")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/vhost/scsi.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 6ff8a5096..4ce9f00 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -1643,7 +1643,8 @@ vhost_scsi_set_endpoint(struct vhost_scsi *vs,
if (!vhost_vq_is_setup(vq))
continue;
 
-   if (vhost_scsi_setup_vq_cmds(vq, vq->num))
+   ret = vhost_scsi_setup_vq_cmds(vq, vq->num);
+   if (ret)
goto destroy_vq_cmds;
}
 
-- 
2.9.5



[PATCH] spi: dw: Fix error return code in dw_spi_bt1_probe()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: abf00907538e ("spi: dw: Add Baikal-T1 SPI Controller glue driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/spi/spi-dw-bt1.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-dw-bt1.c b/drivers/spi/spi-dw-bt1.c
index f382dfad..c279b78 100644
--- a/drivers/spi/spi-dw-bt1.c
+++ b/drivers/spi/spi-dw-bt1.c
@@ -280,8 +280,10 @@ static int dw_spi_bt1_probe(struct platform_device *pdev)
dws->bus_num = pdev->id;
dws->reg_io_width = 4;
dws->max_freq = clk_get_rate(dwsbt1->clk);
-   if (!dws->max_freq)
+   if (!dws->max_freq) {
+   ret = -EINVAL;
goto err_disable_clk;
+   }
 
init_func = device_get_match_data(>dev);
ret = init_func(pdev, dwsbt1);
-- 
2.9.5



[PATCH] rsxx: fix error return code in rsxx_pci_probe()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: a3299ab18591 ("rsxx: Individual workqueues for interruptible events.")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/block/rsxx/core.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/block/rsxx/core.c b/drivers/block/rsxx/core.c
index 63f5498..d7e2416 100644
--- a/drivers/block/rsxx/core.c
+++ b/drivers/block/rsxx/core.c
@@ -869,6 +869,7 @@ static int rsxx_pci_probe(struct pci_dev *dev,
card->event_wq = create_singlethread_workqueue(DRIVER_NAME"_event");
if (!card->event_wq) {
dev_err(CARD_TO_DEV(card), "Failed card event setup.\n");
+   st = -ENOMEM;
goto failed_event_handler;
}
 
-- 
2.9.5



[PATCH] PM: AVS: rockchip-io: Fix error return code in rockchip_iodomain_probe()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: e943c43b32ce ("PM: AVS: rockchip-io: Move the driver to the rockchip 
specific drivers")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/soc/rockchip/io-domain.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/soc/rockchip/io-domain.c b/drivers/soc/rockchip/io-domain.c
index eece97f..b29e829 100644
--- a/drivers/soc/rockchip/io-domain.c
+++ b/drivers/soc/rockchip/io-domain.c
@@ -547,6 +547,7 @@ static int rockchip_iodomain_probe(struct platform_device 
*pdev)
if (uV < 0) {
dev_err(iod->dev, "Can't determine voltage: %s\n",
supply_name);
+   ret = uV;
goto unreg_notify;
}
 
-- 
2.9.5



[PATCH] memory: jz4780_nemc: Fix potential NULL dereference in jz4780_nemc_probe()

2020-12-04 Thread Zhang Changzhong
platform_get_resource() may fail and return NULL, so we should
better check it's return value to avoid a NULL pointer dereference
a bit later in the code.

This is detected by Coccinelle semantic patch.

@@
expression pdev, res, n, t, e, e1, e2;
@@

res = \(platform_get_resource\|platform_get_resource_byname\)(pdev, t,
n);
+ if (!res)
+   return -EINVAL;
... when != res == NULL
e = devm_ioremap(e1, res->start, e2);

Fixes: 911a88829725 ("memory: jz4780-nemc: driver for the NEMC on JZ4780 SoCs")
Signed-off-by: Zhang Changzhong 
---
 drivers/memory/jz4780-nemc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/memory/jz4780-nemc.c b/drivers/memory/jz4780-nemc.c
index 3ec5cb0..465ea92 100644
--- a/drivers/memory/jz4780-nemc.c
+++ b/drivers/memory/jz4780-nemc.c
@@ -291,6 +291,8 @@ static int jz4780_nemc_probe(struct platform_device *pdev)
nemc->dev = dev;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   if (!res)
+   return -EINVAL;
 
/*
 * The driver currently only uses the registers up to offset
-- 
2.9.5



[PATCH] media: smiapp: Fix error return code in smiapp_probe()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: de10c1619c48 ("[media] smiapp: Get clock rate if it's not available 
through DT")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/media/i2c/smiapp/smiapp-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/i2c/smiapp/smiapp-core.c 
b/drivers/media/i2c/smiapp/smiapp-core.c
index 6fc0680..45394b9 100644
--- a/drivers/media/i2c/smiapp/smiapp-core.c
+++ b/drivers/media/i2c/smiapp/smiapp-core.c
@@ -2892,7 +2892,7 @@ static int smiapp_probe(struct i2c_client *client)
dev_err(>dev,
"can't set clock freq, asked for %u but 
got %lu\n",
sensor->hwcfg->ext_clk, rate);
-   return rval;
+   return -EINVAL;
}
} else {
sensor->hwcfg->ext_clk = clk_get_rate(sensor->ext_clk);
-- 
2.9.5



[PATCH] media: mtk-vcodec: fix error return code in vdec_vp9_decode()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: dea42fb79f4f ("media: mtk-vcodec: reset segment data then trig decoder")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c 
b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
index 5ea153a..d988021 100644
--- a/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
+++ b/drivers/media/platform/mtk-vcodec/vdec/vdec_vp9_if.c
@@ -890,7 +890,8 @@ static int vdec_vp9_decode(void *h_vdec, struct 
mtk_vcodec_mem *bs,
memset(inst->seg_id_buf.va, 0, inst->seg_id_buf.size);
 
if (vsi->show_frame & BIT(2)) {
-   if (vpu_dec_start(>vpu, NULL, 0)) {
+   ret = vpu_dec_start(>vpu, NULL, 0);
+   if (ret) {
mtk_vcodec_err(inst, "vpu trig decoder 
failed");
goto DECODE_ERROR;
}
-- 
2.9.5



[PATCH] media: aspeed: fix error return code in aspeed_video_setup_video()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: d2b4387f3bdf ("media: platform: Add Aspeed Video Engine driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/media/platform/aspeed-video.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/aspeed-video.c 
b/drivers/media/platform/aspeed-video.c
index c46a79e..f2c4dad 100644
--- a/drivers/media/platform/aspeed-video.c
+++ b/drivers/media/platform/aspeed-video.c
@@ -1551,12 +1551,12 @@ static int aspeed_video_setup_video(struct aspeed_video 
*video)
   V4L2_JPEG_CHROMA_SUBSAMPLING_420, mask,
   V4L2_JPEG_CHROMA_SUBSAMPLING_444);
 
-   if (video->ctrl_handler.error) {
+   rc = video->ctrl_handler.error;
+   if (rc) {
v4l2_ctrl_handler_free(>ctrl_handler);
v4l2_device_unregister(v4l2_dev);
 
-   dev_err(video->dev, "Failed to init controls: %d\n",
-   video->ctrl_handler.error);
+   dev_err(video->dev, "Failed to init controls: %d\n", rc);
return rc;
}
 
-- 
2.9.5



[PATCH] HID: alps: fix error return code in alps_input_configured()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: c7083d3f5348 ("HID: alps: properly handle max_fingers and minimum on X 
and Y axis")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/hid/hid-alps.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
index 3feaece..17782a6 100644
--- a/drivers/hid/hid-alps.c
+++ b/drivers/hid/hid-alps.c
@@ -759,7 +759,8 @@ static int alps_input_configured(struct hid_device *hdev, 
struct hid_input *hi)
__set_bit(INPUT_PROP_POINTER, input2->propbit);
__set_bit(INPUT_PROP_POINTING_STICK, input2->propbit);
 
-   if (input_register_device(data->input2)) {
+   ret = input_register_device(data->input2);
+   if (ret) {
input_free_device(input2);
goto exit;
}
-- 
2.9.5



[PATCH] bus: fsl-mc: fix error return code in fsl_mc_object_allocate()

2020-12-04 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 197f4d6a4a00 ("staging: fsl-mc: fsl-mc object allocator driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/bus/fsl-mc/fsl-mc-allocator.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/fsl-mc/fsl-mc-allocator.c 
b/drivers/bus/fsl-mc/fsl-mc-allocator.c
index e71a6f5..2d7c764 100644
--- a/drivers/bus/fsl-mc/fsl-mc-allocator.c
+++ b/drivers/bus/fsl-mc/fsl-mc-allocator.c
@@ -292,8 +292,10 @@ int __must_check fsl_mc_object_allocate(struct 
fsl_mc_device *mc_dev,
goto error;
 
mc_adev = resource->data;
-   if (!mc_adev)
+   if (!mc_adev) {
+   error = -EINVAL;
goto error;
+   }
 
mc_adev->consumer_link = device_link_add(_dev->dev,
 _adev->dev,
-- 
2.9.5



[PATCH] scsi: fnic: fix error return code in fnic_probe()

2020-12-03 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 5df6d737dd4b ("[SCSI] fnic: Add new Cisco PCI-Express FCoE HBA")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/scsi/fnic/fnic_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/fnic/fnic_main.c b/drivers/scsi/fnic/fnic_main.c
index 5f8a7ef..4f7befb 100644
--- a/drivers/scsi/fnic/fnic_main.c
+++ b/drivers/scsi/fnic/fnic_main.c
@@ -740,6 +740,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
for (i = 0; i < FNIC_IO_LOCKS; i++)
spin_lock_init(>io_req_lock[i]);
 
+   err = -ENOMEM;
fnic->io_req_pool = mempool_create_slab_pool(2, fnic_io_req_cache);
if (!fnic->io_req_pool)
goto err_out_free_resources;
-- 
2.9.5



[PATCH net] vxlan: fix error return code in __vxlan_dev_create()

2020-12-02 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 0ce1822c2a08 ("vxlan: add adjacent link to limit depth level")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/vxlan.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index 1a557ae..a506872 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -3877,8 +3877,10 @@ static int __vxlan_dev_create(struct net *net, struct 
net_device *dev,
 
if (dst->remote_ifindex) {
remote_dev = __dev_get_by_index(net, dst->remote_ifindex);
-   if (!remote_dev)
+   if (!remote_dev) {
+   err = -ENODEV;
goto errout;
+   }
 
err = netdev_upper_dev_link(remote_dev, dev, extack);
if (err)
-- 
2.9.5



[PATCH net] net: pasemi: fix error return code in pasemi_mac_open()

2020-12-02 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 72b05b9940f0 ("pasemi_mac: RX/TX ring management cleanup")
Fixes: 8d636d8bc5ff ("pasemi_mac: jumbo frame support")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/pasemi/pasemi_mac.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/pasemi/pasemi_mac.c 
b/drivers/net/ethernet/pasemi/pasemi_mac.c
index be66601..040a15a 100644
--- a/drivers/net/ethernet/pasemi/pasemi_mac.c
+++ b/drivers/net/ethernet/pasemi/pasemi_mac.c
@@ -1078,16 +1078,20 @@ static int pasemi_mac_open(struct net_device *dev)
 
mac->tx = pasemi_mac_setup_tx_resources(dev);
 
-   if (!mac->tx)
+   if (!mac->tx) {
+   ret = -ENOMEM;
goto out_tx_ring;
+   }
 
/* We might already have allocated rings in case mtu was changed
 * before interface was brought up.
 */
if (dev->mtu > 1500 && !mac->num_cs) {
pasemi_mac_setup_csrings(mac);
-   if (!mac->num_cs)
+   if (!mac->num_cs) {
+   ret = -ENOMEM;
goto out_tx_ring;
+   }
}
 
/* Zero out rmon counters */
-- 
2.9.5



[PATCH net] cxgb3: fix error return code in t3_sge_alloc_qset()

2020-12-02 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: b1fb1f280d09 ("cxgb3 - Fix dma mapping error path")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/chelsio/cxgb3/sge.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/chelsio/cxgb3/sge.c 
b/drivers/net/ethernet/chelsio/cxgb3/sge.c
index e18e9ce..1cc3c51 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/sge.c
@@ -3175,6 +3175,7 @@ int t3_sge_alloc_qset(struct adapter *adapter, unsigned 
int id, int nports,
  GFP_KERNEL | __GFP_COMP);
if (!avail) {
CH_ALERT(adapter, "free list queue 0 initialization failed\n");
+   ret = -ENOMEM;
goto err;
}
if (avail < q->fl[0].size)
-- 
2.9.5



[PATCH net] bnxt_en: fix error return code in bnxt_init_board()

2020-11-19 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: c0c050c58d84 ("bnxt_en: New Broadcom ethernet driver.")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 7c21aaa8..11d0542 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -11590,6 +11590,7 @@ static int bnxt_init_board(struct pci_dev *pdev, struct 
net_device *dev)
if (dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(64)) != 0 &&
dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32)) != 0) {
dev_err(>dev, "System does not support DMA, aborting\n");
+   rc = -EIO;
goto init_err_disable;
}
 
-- 
2.9.5



[PATCH] pwm: add missed clk_disable_unprepare() in zx_pwm_probe()

2020-11-18 Thread Zhang Changzhong
Add the missing clk_disable_unprepare() before return from
zx_pwm_probe() in the error handling case.

Fixes: 4836193c435c ("pwm: Add ZTE ZX PWM device driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/pwm/pwm-zx.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/pwm/pwm-zx.c b/drivers/pwm/pwm-zx.c
index e2c21cc..3763ce5 100644
--- a/drivers/pwm/pwm-zx.c
+++ b/drivers/pwm/pwm-zx.c
@@ -238,6 +238,7 @@ static int zx_pwm_probe(struct platform_device *pdev)
ret = pwmchip_add(>chip);
if (ret < 0) {
dev_err(>dev, "failed to add PWM chip: %d\n", ret);
+   clk_disable_unprepare(zpc->pclk);
return ret;
}
 
-- 
2.9.5



[PATCH net] bnxt_en: fix error return code in bnxt_init_one()

2020-11-18 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: c213eae8d3cd ("bnxt_en: Improve VF/PF link change logic.")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/bnxt/bnxt.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 7c21aaa8..092775e 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -12674,6 +12674,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const 
struct pci_device_id *ent)
create_singlethread_workqueue("bnxt_pf_wq");
if (!bnxt_pf_wq) {
dev_err(>dev, "Unable to create 
workqueue.\n");
+   rc = -ENOMEM;
goto init_err_pci_clean;
}
}
-- 
2.9.5



Re: [PATCH net] atl1e: fix error return code in atl1e_probe()

2020-11-17 Thread Zhang Changzhong



On 2020/11/18 4:38, Marion & Christophe JAILLET wrote:
> 
> Le 17/11/2020 à 03:57, Zhang Changzhong a écrit :
>> Fix to return a negative error code from the error handling
>> case instead of 0, as done elsewhere in this function.
>>
>> Fixes: 85eb5bc33717 ("net: atheros: switch from 'pci_' to 'dma_' API")
> Hi, should it have any importance, the Fixes tag is wrong.
> 
> The issue was already there before 85eb5bc33717 which was just a mechanical 
> update.
> 
> just my 2c
> 
> CJ
> 
Thanks for reminding, the correct Fixes tag should be:

Fixes: a6a5325239c2 ("atl1e: Atheros L1E Gigabit Ethernet driver"


[PATCH net] rsi_91x: fix error return code in rsi_reset_card()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 17ff2c794f39 ("rsi: reset device changes for 9116")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/wireless/rsi/rsi_91x_usb.c | 30 +++---
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c 
b/drivers/net/wireless/rsi/rsi_91x_usb.c
index a62d41c..00b5589 100644
--- a/drivers/net/wireless/rsi/rsi_91x_usb.c
+++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
@@ -741,24 +741,24 @@ static int rsi_reset_card(struct rsi_hw *adapter)
if (ret < 0)
goto fail;
} else {
-   if ((rsi_usb_master_reg_write(adapter,
- NWP_WWD_INTERRUPT_TIMER,
- NWP_WWD_INT_TIMER_CLKS,
- RSI_9116_REG_SIZE)) < 0) {
+   ret = rsi_usb_master_reg_write(adapter,
+  NWP_WWD_INTERRUPT_TIMER,
+  NWP_WWD_INT_TIMER_CLKS,
+  RSI_9116_REG_SIZE);
+   if (ret < 0)
goto fail;
-   }
-   if ((rsi_usb_master_reg_write(adapter,
- NWP_WWD_SYSTEM_RESET_TIMER,
- NWP_WWD_SYS_RESET_TIMER_CLKS,
- RSI_9116_REG_SIZE)) < 0) {
+   ret = rsi_usb_master_reg_write(adapter,
+  NWP_WWD_SYSTEM_RESET_TIMER,
+  NWP_WWD_SYS_RESET_TIMER_CLKS,
+  RSI_9116_REG_SIZE);
+   if (ret < 0)
goto fail;
-   }
-   if ((rsi_usb_master_reg_write(adapter,
- NWP_WWD_MODE_AND_RSTART,
- NWP_WWD_TIMER_DISABLE,
- RSI_9116_REG_SIZE)) < 0) {
+   ret = rsi_usb_master_reg_write(adapter,
+  NWP_WWD_MODE_AND_RSTART,
+  NWP_WWD_TIMER_DISABLE,
+  RSI_9116_REG_SIZE);
+   if (ret < 0)
goto fail;
-   }
}
 
rsi_dbg(INFO_ZONE, "Reset card done\n");
-- 
2.9.5



[PATCH net] net: b44: fix error return code in b44_init_one()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 39a6f4bce6b4 ("b44: replace the ssb_dma API with the generic DMA API")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/b44.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/b44.c 
b/drivers/net/ethernet/broadcom/b44.c
index 74c1778..b455b60 100644
--- a/drivers/net/ethernet/broadcom/b44.c
+++ b/drivers/net/ethernet/broadcom/b44.c
@@ -2383,7 +2383,8 @@ static int b44_init_one(struct ssb_device *sdev,
goto err_out_free_dev;
}
 
-   if (dma_set_mask_and_coherent(sdev->dma_dev, DMA_BIT_MASK(30))) {
+   err = dma_set_mask_and_coherent(sdev->dma_dev, DMA_BIT_MASK(30));
+   if (err) {
dev_err(sdev->dev,
"Required 30BIT DMA mask unsupported by the system\n");
goto err_out_powerdown;
-- 
2.9.5



[PATCH net] atl1e: fix error return code in atl1e_probe()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 85eb5bc33717 ("net: atheros: switch from 'pci_' to 'dma_' API")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c 
b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
index 098b032..ff9f96d 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -2312,8 +2312,8 @@ static int atl1e_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
 * various kernel subsystems to support the mechanics required by a
 * fixed-high-32-bit system.
 */
-   if ((dma_set_mask(>dev, DMA_BIT_MASK(32)) != 0) ||
-   (dma_set_coherent_mask(>dev, DMA_BIT_MASK(32)) != 0)) {
+   err = dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32));
+   if (err) {
dev_err(>dev, "No usable DMA configuration,aborting\n");
goto err_dma;
}
-- 
2.9.5



[PATCH net] atl1c: fix error return code in atl1c_probe()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 85eb5bc33717 ("net: atheros: switch from 'pci_' to 'dma_' API")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c 
b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 0c12cf7..3f65f2b 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -2543,8 +2543,8 @@ static int atl1c_probe(struct pci_dev *pdev, const struct 
pci_device_id *ent)
 * various kernel subsystems to support the mechanics required by a
 * fixed-high-32-bit system.
 */
-   if ((dma_set_mask(>dev, DMA_BIT_MASK(32)) != 0) ||
-   (dma_set_coherent_mask(>dev, DMA_BIT_MASK(32)) != 0)) {
+   err = dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32));
+   if (err) {
dev_err(>dev, "No usable DMA configuration,aborting\n");
goto err_dma;
}
-- 
2.9.5



[PATCH net] ah6: fix error return code in ah6_input()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 net/ipv6/ah6.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c
index d88d976..440080d 100644
--- a/net/ipv6/ah6.c
+++ b/net/ipv6/ah6.c
@@ -588,7 +588,8 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff 
*skb)
memcpy(auth_data, ah->auth_data, ahp->icv_trunc_len);
memset(ah->auth_data, 0, ahp->icv_trunc_len);
 
-   if (ipv6_clear_mutable_options(ip6h, hdr_len, XFRM_POLICY_IN))
+   err = ipv6_clear_mutable_options(ip6h, hdr_len, XFRM_POLICY_IN);
+   if (err)
goto out_free;
 
ip6h->priority= 0;
-- 
2.9.5



[PATCH net] qed: fix error return code in qed_iwarp_ll2_start()

2020-11-16 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 469981b17a4f ("qed: Add unaligned and packed packet processing")
Fixes: fcb39f6c10b2 ("qed: Add mpa buffer descriptors for storing and 
processing mpa fpdus")
Fixes: 1e28eaad07ea ("qed: Add iWARP support for fpdu spanned over more than 
two tcp packets")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 12 +---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c 
b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
index 512cbef..a998611 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
@@ -2754,14 +2754,18 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn,
iwarp_info->partial_fpdus = kcalloc((u16)p_hwfn->p_rdma_info->num_qps,
sizeof(*iwarp_info->partial_fpdus),
GFP_KERNEL);
-   if (!iwarp_info->partial_fpdus)
+   if (!iwarp_info->partial_fpdus) {
+   rc = -ENOMEM;
goto err;
+   }
 
iwarp_info->max_num_partial_fpdus = (u16)p_hwfn->p_rdma_info->num_qps;
 
iwarp_info->mpa_intermediate_buf = kzalloc(buff_size, GFP_KERNEL);
-   if (!iwarp_info->mpa_intermediate_buf)
+   if (!iwarp_info->mpa_intermediate_buf) {
+   rc = -ENOMEM;
goto err;
+   }
 
/* The mpa_bufs array serves for pending RX packets received on the
 * mpa ll2 that don't have place on the tx ring and require later
@@ -2771,8 +2775,10 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn,
iwarp_info->mpa_bufs = kcalloc(data.input.rx_num_desc,
   sizeof(*iwarp_info->mpa_bufs),
   GFP_KERNEL);
-   if (!iwarp_info->mpa_bufs)
+   if (!iwarp_info->mpa_bufs) {
+   rc = -ENOMEM;
goto err;
+   }
 
INIT_LIST_HEAD(_info->mpa_buf_pending_list);
INIT_LIST_HEAD(_info->mpa_buf_list);
-- 
2.9.5



[PATCH net] net: ethernet: ti: cpsw: fix error return code in cpsw_probe()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 83a8471ba255 ("net: ethernet: ti: cpsw: refactor probe to group common 
hw initialization")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/ti/cpsw.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 9fd1f77..7882a00 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1631,6 +1631,7 @@ static int cpsw_probe(struct platform_device *pdev)
   CPSW_MAX_QUEUES, CPSW_MAX_QUEUES);
if (!ndev) {
dev_err(dev, "error allocating net_device\n");
+   ret = -ENOMEM;
goto clean_cpts;
}
 
-- 
2.9.5



[PATCH] IB/hfi1: fix error return code in hfi1_init_dd()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 4730f4a6c6b2 ("IB/hfi1: Activate the dummy netdev")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/infiniband/hw/hfi1/chip.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/hfi1/chip.c 
b/drivers/infiniband/hw/hfi1/chip.c
index 7eaf9953..c87b94e 100644
--- a/drivers/infiniband/hw/hfi1/chip.c
+++ b/drivers/infiniband/hw/hfi1/chip.c
@@ -15245,7 +15245,8 @@ int hfi1_init_dd(struct hfi1_devdata *dd)
& CCE_REVISION_SW_MASK);
 
/* alloc netdev data */
-   if (hfi1_netdev_alloc(dd))
+   ret = hfi1_netdev_alloc(dd);
+   if (ret)
goto bail_cleanup;
 
ret = set_up_context_variables(dd);
-- 
2.9.5



[PATCH net] net: stmmac: dwmac-intel-plat: fix error return code in intel_eth_plat_probe()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 9efc9b2b04c7 ("net: stmmac: Add dwmac-intel-plat for GBE driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
index f61cb99..82b1c7a 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
@@ -113,8 +113,10 @@ static int intel_eth_plat_probe(struct platform_device 
*pdev)
/* Enable TX clock */
if (dwmac->data->tx_clk_en) {
dwmac->tx_clk = devm_clk_get(>dev, "tx_clk");
-   if (IS_ERR(dwmac->tx_clk))
+   if (IS_ERR(dwmac->tx_clk)) {
+   ret = PTR_ERR(dwmac->tx_clk);
goto err_remove_config_dt;
+   }
 
clk_prepare_enable(dwmac->tx_clk);
 
-- 
2.9.5



[PATCH] brcmfmac: fix error return code in brcmf_cfg80211_connect()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 3b1e0a7bdfee ("brcmfmac: add support for SAE authentication offload")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index a2dbbb9..0ee421f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -2137,7 +2137,8 @@ brcmf_cfg80211_connect(struct wiphy *wiphy, struct 
net_device *ndev,
BRCMF_WSEC_MAX_PSK_LEN);
else if (profile->use_fwsup == BRCMF_PROFILE_FWSUP_SAE) {
/* clean up user-space RSNE */
-   if (brcmf_fil_iovar_data_set(ifp, "wpaie", NULL, 0)) {
+   err = brcmf_fil_iovar_data_set(ifp, "wpaie", NULL, 0);
+   if (err) {
bphy_err(drvr, "failed to clean up user-space RSNE\n");
goto done;
}
-- 
2.9.5



[PATCH net] qlcnic: fix error return code in qlcnic_83xx_restart_hw()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 3ced0a88cd4c ("qlcnic: Add support to run firmware POST")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index b8af59f..d2c1907 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -2231,7 +2231,8 @@ static int qlcnic_83xx_restart_hw(struct qlcnic_adapter 
*adapter)
 
/* Boot either flash image or firmware image from host file system */
if (qlcnic_load_fw_file == 1) {
-   if (qlcnic_83xx_load_fw_image_from_host(adapter))
+   err = qlcnic_83xx_load_fw_image_from_host(adapter);
+   if (err)
return err;
} else {
QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID,
-- 
2.9.5



[PATCH net] cx82310_eth: fix error return code in cx82310_bind()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: ca139d76b0d9 ("cx82310_eth: re-enable ethernet mode after router reboot")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/usb/cx82310_eth.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/usb/cx82310_eth.c b/drivers/net/usb/cx82310_eth.c
index ca89d82..c4568a4 100644
--- a/drivers/net/usb/cx82310_eth.c
+++ b/drivers/net/usb/cx82310_eth.c
@@ -197,7 +197,8 @@ static int cx82310_bind(struct usbnet *dev, struct 
usb_interface *intf)
}
 
/* enable ethernet mode (?) */
-   if (cx82310_enable_ethernet(dev))
+   ret = cx82310_enable_ethernet(dev);
+   if (ret)
goto err;
 
/* get the MAC address */
-- 
2.9.5



Re: [PATCH net] net: dsa: lantiq_gswip: add missed clk_disable_unprepare() in gswip_gphy_fw_load()

2020-11-12 Thread Zhang Changzhong
On 2020/11/12 20:41, Vladimir Oltean wrote:
> 
> gswip_gphy_fw_list
> -> gswip_gphy_fw_probe
>-> gswip_gphy_fw_load
>   -> clk_prepare_enable
>   -> then fails
> 
> Then gswip_gphy_fw_list does this:
>   for_each_available_child_of_node(gphy_fw_list_np, gphy_fw_np) {
>   err = gswip_gphy_fw_probe(priv, >gphy_fw[i],
> gphy_fw_np, i);
>   if (err)
>   goto remove_gphy;
>   i++;
>   }
> 
>   return 0;
> 
> remove_gphy:
>   for (i = 0; i < priv->num_gphy_fw; i++)
>   gswip_gphy_fw_remove(priv, >gphy_fw[i]);
> 
> 
> Then gswip_gphy_fw_remove does this:
> gswip_gphy_fw_remove
> -> clk_disable_unprepare
> 
> What's wrong with this?
> .
> 
Thanks for reminding, I got it wrong.


[PATCH net] iavf: fix error return code in iavf_init_get_resources()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: b66c7bc1cd4d ("iavf: Refactor init state machine")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/intel/iavf/iavf_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c 
b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 95543df..ff1102d 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -1776,7 +1776,8 @@ static int iavf_init_get_resources(struct iavf_adapter 
*adapter)
goto err_alloc;
}
 
-   if (iavf_process_config(adapter))
+   err = iavf_process_config(adapter);
+   if (err)
goto err_alloc;
adapter->current_op = VIRTCHNL_OP_UNKNOWN;
 
-- 
2.9.5



[PATCH net] net: ethernet: mtk-star-emac: fix error return code in mtk_star_enable()

2020-11-12 Thread Zhang Changzhong
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 8c7bd5a454ff ("net: ethernet: mtk-star-emac: new driver")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/mediatek/mtk_star_emac.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/mediatek/mtk_star_emac.c 
b/drivers/net/ethernet/mediatek/mtk_star_emac.c
index 1325055..2ebacb6 100644
--- a/drivers/net/ethernet/mediatek/mtk_star_emac.c
+++ b/drivers/net/ethernet/mediatek/mtk_star_emac.c
@@ -966,6 +966,7 @@ static int mtk_star_enable(struct net_device *ndev)
  mtk_star_adjust_link, 0, priv->phy_intf);
if (!priv->phydev) {
netdev_err(ndev, "failed to connect to PHY\n");
+   ret = -ENODEV;
goto err_free_irq;
}
 
-- 
2.9.5



[PATCH net] net: phy: smsc: add missed clk_disable_unprepare in smsc_phy_probe()

2020-11-12 Thread Zhang Changzhong
Add the missing clk_disable_unprepare() before return from
smsc_phy_probe() in the error handling case.

Fixes: bedd8d78aba3 ("net: phy: smsc: LAN8710/20: add phy refclk in support")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/phy/smsc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
index ec97669..0fc39ac 100644
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -291,8 +291,10 @@ static int smsc_phy_probe(struct phy_device *phydev)
return ret;
 
ret = clk_set_rate(priv->refclk, 50 * 1000 * 1000);
-   if (ret)
+   if (ret) {
+   clk_disable_unprepare(priv->refclk);
return ret;
+   }
 
return 0;
 }
-- 
2.9.5



[PATCH net] net: dsa: lantiq_gswip: add missed clk_disable_unprepare() in gswip_gphy_fw_load()

2020-11-12 Thread Zhang Changzhong
Fix missing clk_disable_unprepare() before return from
gswip_gphy_fw_load() in the error handling case.

Fixes: 14fceff4771e ("net: dsa: Add Lantiq / Intel DSA driver for vrx200")
Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/dsa/lantiq_gswip.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/lantiq_gswip.c b/drivers/net/dsa/lantiq_gswip.c
index 74db81d..8936d65 100644
--- a/drivers/net/dsa/lantiq_gswip.c
+++ b/drivers/net/dsa/lantiq_gswip.c
@@ -1682,6 +1682,7 @@ static int gswip_gphy_fw_load(struct gswip_priv *priv, 
struct gswip_gphy_fw *gph
if (ret) {
dev_err(dev, "failed to load firmware: %s, error: %i\n",
gphy_fw->fw_name, ret);
+   clk_disable_unprepare(gphy_fw->clk_gate);
return ret;
}
 
@@ -1698,14 +1699,17 @@ static int gswip_gphy_fw_load(struct gswip_priv *priv, 
struct gswip_gphy_fw *gph
} else {
dev_err(dev, "failed to alloc firmware memory\n");
release_firmware(fw);
+   clk_disable_unprepare(gphy_fw->clk_gate);
return -ENOMEM;
}
 
release_firmware(fw);
 
ret = regmap_write(priv->rcu_regmap, gphy_fw->fw_addr_offset, dev_addr);
-   if (ret)
+   if (ret) {
+   clk_disable_unprepare(gphy_fw->clk_gate);
return ret;
+   }
 
reset_control_deassert(gphy_fw->reset);
 
-- 
2.9.5



[PATCH net-next] net: mventa: remove unused variable 'dummy' in mvneta_mib_counters_clear()

2020-09-18 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/ethernet/marvell/mvneta.c:754:6: warning:
 variable 'dummy' set but not used [-Wunused-but-set-variable]
  754 |  u32 dummy;
  |  ^

This variable is not used in function mvneta_mib_counters_clear(), so
remove it to avoid build warning.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/marvell/mvneta.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mvneta.c 
b/drivers/net/ethernet/marvell/mvneta.c
index f75e05e..4694242 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -751,13 +751,12 @@ static void mvneta_txq_inc_put(struct mvneta_tx_queue 
*txq)
 static void mvneta_mib_counters_clear(struct mvneta_port *pp)
 {
int i;
-   u32 dummy;
 
/* Perform dummy reads from MIB counters */
for (i = 0; i < MVNETA_MIB_LATE_COLLISION; i += 4)
-   dummy = mvreg_read(pp, (MVNETA_MIB_COUNTERS_BASE + i));
-   dummy = mvreg_read(pp, MVNETA_RX_DISCARD_FRAME_COUNT);
-   dummy = mvreg_read(pp, MVNETA_OVERRUN_FRAME_COUNT);
+   mvreg_read(pp, (MVNETA_MIB_COUNTERS_BASE + i));
+   mvreg_read(pp, MVNETA_RX_DISCARD_FRAME_COUNT);
+   mvreg_read(pp, MVNETA_OVERRUN_FRAME_COUNT);
 }
 
 /* Get System Network Statistics */
-- 
2.9.5



[PATCH v2] brcmfmac: check return value of driver_for_each_device()

2020-09-18 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c:1576:6: warning:
 variable 'ret' set but not used [-Wunused-but-set-variable]
  1576 |  int ret;
   |  ^~~

driver_for_each_device() has been declared with __must_check, so the
return value should be checked.

Signed-off-by: Zhang Changzhong 
---
v2:
- cc linux-wireless
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index ac54638..6f67fef 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -1578,6 +1578,9 @@ void brcmf_usb_exit(void)
brcmf_dbg(USB, "Enter\n");
ret = driver_for_each_device(drv, NULL, NULL,
 brcmf_usb_reset_device);
+   if (ret)
+   brcmf_err("failed to reset all usb devices %d\n", ret);
+
usb_deregister(_usbdrvr);
 }
 
-- 
2.9.5



[PATCH net-next] net: brcmfmac: check return value of driver_for_each_device()

2020-09-18 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c:1576:6: warning:
 variable 'ret' set but not used [-Wunused-but-set-variable]
  1576 |  int ret;
   |  ^~~

driver_for_each_device() has been declared with __must_check, so the
return value should be checked.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c 
b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
index ac54638..6f67fef 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
@@ -1578,6 +1578,9 @@ void brcmf_usb_exit(void)
brcmf_dbg(USB, "Enter\n");
ret = driver_for_each_device(drv, NULL, NULL,
 brcmf_usb_reset_device);
+   if (ret)
+   brcmf_err("failed to reset all usb devices %d\n", ret);
+
usb_deregister(_usbdrvr);
 }
 
-- 
2.9.5



[PATCH net-next] net: qlcnic: remove unused variable 'val' in qlcnic_83xx_cam_unlock()

2020-09-14 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c:661:6: warning:
 variable 'val' set but not used [-Wunused-but-set-variable]
  661 |  u32 val;
  |  ^~~

After commit 7f9664525f9c ("qlcnic: 83xx memory map and HW access
routines"), variable 'val' is never used in qlcnic_83xx_cam_unlock(), so
removing it to avoid build warning.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c 
b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 29b9c72..fc49088 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -658,11 +658,10 @@ int qlcnic_83xx_cam_lock(struct qlcnic_adapter *adapter)
 void qlcnic_83xx_cam_unlock(struct qlcnic_adapter *adapter)
 {
void __iomem *addr;
-   u32 val;
struct qlcnic_hardware_context *ahw = adapter->ahw;
 
addr = ahw->pci_base0 + QLC_83XX_SEM_UNLOCK_FUNC(ahw->pci_func);
-   val = readl(addr);
+   readl(addr);
 }
 
 void qlcnic_83xx_read_crb(struct qlcnic_adapter *adapter, char *buf,
-- 
2.9.5



[PATCH net-next] net: pxa168_eth: remove unused variable 'retval' int pxa168_eth_change_mtu()

2020-09-14 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/ethernet/marvell/pxa168_eth.c:1190:6: warning:
 variable 'retval' set but not used [-Wunused-but-set-variable]
 1190 |  int retval;
  |  ^~

Function pxa168_eth_change_mtu() always return zero, so variable 'retval'
is redundant, just remove it.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/marvell/pxa168_eth.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c 
b/drivers/net/ethernet/marvell/pxa168_eth.c
index faac94b..d1e4d42 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -1187,11 +1187,10 @@ static int pxa168_eth_stop(struct net_device *dev)
 
 static int pxa168_eth_change_mtu(struct net_device *dev, int mtu)
 {
-   int retval;
struct pxa168_eth_private *pep = netdev_priv(dev);
 
dev->mtu = mtu;
-   retval = set_port_config_ext(pep);
+   set_port_config_ext(pep);
 
if (!netif_running(dev))
return 0;
-- 
2.9.5



[PATCH net-next] net: fec: ptp: remove unused variable 'ns' in fec_time_keep()

2020-09-14 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/ethernet/freescale/fec_ptp.c:523:6: warning:
 variable 'ns' set but not used [-Wunused-but-set-variable]
  523 |  u64 ns;
  |  ^~

After commit 6605b730c061 ("FEC: Add time stamping code and a PTP
hardware clock"), variable 'ns' is never used in fec_time_keep(),
so removing it to avoid build warning.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/freescale/fec_ptp.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_ptp.c 
b/drivers/net/ethernet/freescale/fec_ptp.c
index a0c1f44..0405a39 100644
--- a/drivers/net/ethernet/freescale/fec_ptp.c
+++ b/drivers/net/ethernet/freescale/fec_ptp.c
@@ -520,13 +520,12 @@ static void fec_time_keep(struct work_struct *work)
 {
struct delayed_work *dwork = to_delayed_work(work);
struct fec_enet_private *fep = container_of(dwork, struct 
fec_enet_private, time_keep);
-   u64 ns;
unsigned long flags;
 
mutex_lock(>ptp_clk_mutex);
if (fep->ptp_clk_on) {
spin_lock_irqsave(>tmreg_lock, flags);
-   ns = timecounter_read(>tc);
+   timecounter_read(>tc);
spin_unlock_irqrestore(>tmreg_lock, flags);
}
mutex_unlock(>ptp_clk_mutex);
-- 
2.9.5



[PATCH net-next] net: dnet: remove unused variable 'tx_status 'in dnet_start_xmit()

2020-09-14 Thread Zhang Changzhong
Fixes the following W=1 kernel build warning(s):

drivers/net/ethernet/dnet.c:510:6: warning:
 variable 'tx_status' set but not used [-Wunused-but-set-variable]
  u32 tx_status, irq_enable;
  ^

After commit 4796417417a6 ("dnet: Dave DNET ethernet controller driver
(updated)"), variable 'tx_status' is never used in dnet_start_xmit(),
so removing it to avoid build warning.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/dnet.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/dnet.c b/drivers/net/ethernet/dnet.c
index 3143df9..7f87b0f 100644
--- a/drivers/net/ethernet/dnet.c
+++ b/drivers/net/ethernet/dnet.c
@@ -507,12 +507,12 @@ static netdev_tx_t dnet_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
 {
 
struct dnet *bp = netdev_priv(dev);
-   u32 tx_status, irq_enable;
+   u32 irq_enable;
unsigned int i, tx_cmd, wrsz;
unsigned long flags;
unsigned int *bufp;
 
-   tx_status = dnet_readl(bp, TX_STATUS);
+   dnet_readl(bp, TX_STATUS);
 
pr_debug("start_xmit: len %u head %p data %p\n",
   skb->len, skb->head, skb->data);
@@ -520,7 +520,7 @@ static netdev_tx_t dnet_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
 
spin_lock_irqsave(>lock, flags);
 
-   tx_status = dnet_readl(bp, TX_STATUS);
+   dnet_readl(bp, TX_STATUS);
 
bufp = (unsigned int *)(((unsigned long) skb->data) & ~0x3UL);
wrsz = (u32) skb->len + 3;
@@ -542,7 +542,7 @@ static netdev_tx_t dnet_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
 
if (dnet_readl(bp, TX_FIFO_WCNT) > DNET_FIFO_TX_DATA_AF_TH) {
netif_stop_queue(dev);
-   tx_status = dnet_readl(bp, INTR_SRC);
+   dnet_readl(bp, INTR_SRC);
irq_enable = dnet_readl(bp, INTR_ENB);
irq_enable |= DNET_INTR_ENB_TX_FIFOAE;
dnet_writel(bp, irq_enable, INTR_ENB);
-- 
2.9.5



[PATCH net-next] net: stmmac: dwmac-intel-plat: remove redundant null check before clk_disable_unprepare()

2020-09-09 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 8 ++--
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
index ccac7bf..b1323d5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
@@ -149,9 +149,7 @@ static int intel_eth_plat_probe(struct platform_device 
*pdev)
 
ret = stmmac_dvr_probe(>dev, plat_dat, _res);
if (ret) {
-   if (dwmac->tx_clk)
-   clk_disable_unprepare(dwmac->tx_clk);
-
+   clk_disable_unprepare(dwmac->tx_clk);
goto err_remove_config_dt;
}
 
@@ -169,9 +167,7 @@ static int intel_eth_plat_remove(struct platform_device 
*pdev)
int ret;
 
ret = stmmac_pltfr_remove(pdev);
-
-   if (dwmac->tx_clk)
-   clk_disable_unprepare(dwmac->tx_clk);
+   clk_disable_unprepare(dwmac->tx_clk);
 
return ret;
 }
-- 
2.9.5



[PATCH net-next] net: pxa168_eth: remove redundant null check before clk_disable_unprepare()

2020-09-09 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/marvell/pxa168_eth.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c 
b/drivers/net/ethernet/marvell/pxa168_eth.c
index eb8cf60..faac94b 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -1541,10 +1541,8 @@ static int pxa168_eth_remove(struct platform_device 
*pdev)
}
if (dev->phydev)
phy_disconnect(dev->phydev);
-   if (pep->clk) {
-   clk_disable_unprepare(pep->clk);
-   }
 
+   clk_disable_unprepare(pep->clk);
mdiobus_unregister(pep->smi_bus);
mdiobus_free(pep->smi_bus);
unregister_netdev(dev);
-- 
2.9.5



[PATCH net-next] net: xilinx: remove redundant null check before clk_disable_unprepare()

2020-09-07 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c 
b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index fa5dc299..9aafd3e 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -2038,8 +2038,7 @@ static int axienet_remove(struct platform_device *pdev)
 
axienet_mdio_teardown(lp);
 
-   if (lp->clk)
-   clk_disable_unprepare(lp->clk);
+   clk_disable_unprepare(lp->clk);
 
of_node_put(lp->phy_node);
lp->phy_node = NULL;
-- 
2.9.5



[PATCH net-next] net: stmmac: remove redundant null check before clk_disable_unprepare()

2020-09-07 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 89b2b34..c553047 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -788,8 +788,7 @@ static int stmmac_init_ptp(struct stmmac_priv *priv)
 
 static void stmmac_release_ptp(struct stmmac_priv *priv)
 {
-   if (priv->plat->clk_ptp_ref)
-   clk_disable_unprepare(priv->plat->clk_ptp_ref);
+   clk_disable_unprepare(priv->plat->clk_ptp_ref);
stmmac_ptp_unregister(priv);
 }
 
@@ -5108,8 +5107,7 @@ int stmmac_suspend(struct device *dev)
stmmac_mac_set(priv, priv->ioaddr, false);
pinctrl_pm_select_sleep_state(priv->device);
/* Disable clock in case of PWM is off */
-   if (priv->plat->clk_ptp_ref)
-   clk_disable_unprepare(priv->plat->clk_ptp_ref);
+   clk_disable_unprepare(priv->plat->clk_ptp_ref);
clk_disable_unprepare(priv->plat->pclk);
clk_disable_unprepare(priv->plat->stmmac_clk);
}
-- 
2.9.5



[PATCH net-next] net: ethernet: fec: remove redundant null check before clk_disable_unprepare()

2020-09-07 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/freescale/fec_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_main.c 
b/drivers/net/ethernet/freescale/fec_main.c
index fb37816..c043afb 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1960,8 +1960,7 @@ static int fec_enet_clk_enable(struct net_device *ndev, 
bool enable)
mutex_unlock(>ptp_clk_mutex);
}
 failed_clk_ptp:
-   if (fep->clk_enet_out)
-   clk_disable_unprepare(fep->clk_enet_out);
+   clk_disable_unprepare(fep->clk_enet_out);
 
return ret;
 }
-- 
2.9.5



[PATCH net-next] net: ethernet: dwmac: remove redundant null check before clk_disable_unprepare()

2020-09-07 Thread Zhang Changzhong
Because clk_prepare_enable() and clk_disable_unprepare() already checked
NULL clock parameter, so the additional checks are unnecessary, just
remove them.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c 
b/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
index 3c5df5e..efef547 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
@@ -129,8 +129,7 @@ static void imx_dwmac_exit(struct platform_device *pdev, 
void *priv)
 {
struct imx_priv_data *dwmac = priv;
 
-   if (dwmac->clk_tx)
-   clk_disable_unprepare(dwmac->clk_tx);
+   clk_disable_unprepare(dwmac->clk_tx);
clk_disable_unprepare(dwmac->clk_mem);
 }
 
-- 
2.9.5



[PATCH net] can: j1939: j1939_sk_bind(): return failure if netdev is down

2020-09-07 Thread Zhang Changzhong
When a netdev down event occurs after a successful call to
j1939_sk_bind(), j1939_netdev_notify() can handle it correctly.

But if the netdev already in down state before calling j1939_sk_bind(),
j1939_sk_release() will stay in wait_event_interruptible() blocked
forever. Because in this case, j1939_netdev_notify() won't be called and
j1939_tp_txtimer() won't call j1939_session_cancel() or other function
to clear session for ENETDOWN error, this lead to mismatch of
j1939_session_get/put() and jsk->skb_pending will never decrease to
zero.

To reproduce it use following commands:
1. ip link add dev vcan0 type vcan
2. j1939acd -r 100,80-120 1122334455667788 vcan0
3. presses ctrl-c and thread will be blocked forever

This patch adds check for ndev->flags in j1939_sk_bind() to avoid this
kind of situation and return with -ENETDOWN.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong 
---
 net/can/j1939/socket.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c
index 1be4c89..f239665 100644
--- a/net/can/j1939/socket.c
+++ b/net/can/j1939/socket.c
@@ -475,6 +475,12 @@ static int j1939_sk_bind(struct socket *sock, struct 
sockaddr *uaddr, int len)
goto out_release_sock;
}
 
+   if (!(ndev->flags & IFF_UP)) {
+   dev_put(ndev);
+   ret = -ENETDOWN;
+   goto out_release_sock;
+   }
+
priv = j1939_netdev_start(ndev);
dev_put(ndev);
if (IS_ERR(priv)) {
-- 
2.9.5



Re: [PATCH net 0/4] support multipacket broadcast message

2020-08-07 Thread Zhang Changzhong
Hi Oleksij,

We have tested this j1939 stack according to SAE J1939-21. It works fine for
most cases, but when we test multipacket broadcast message function we found
the receiver can't receive those packets.

You can reproduce on CAN bus or vcan, for vcan case use cangw to connect vcan0
and vcan1:
sudo cangw -A -s vcan0 -d vcan1 -e
sudo cangw -A -s vcan1 -d vcan0 -e

To reproduce it use following commands:
testj1939 -B -r vcan1:0x90 &
testj1939 -B -s20 vcan0:0x80 :,0x12300

Besides, candump receives correct packets while testj1939 receives nothing.

Regards,
Zhang Changzhong

On 2020/8/7 0:10, Oleksij Rempel wrote:
> Hello,
> 
> Thank you for your patches! Currently I'm busy, but I'll take a look at it as
> soon possible.
> 
> btw. can you tell me about more of your use case/work. I would like to
> have some feedback about this stack. You can write a personal message,
> if it is not for public.
> 
> On Wed, Aug 05, 2020 at 11:50:21AM +0800, Zhang Changzhong wrote:
>> Zhang Changzhong (4):
>>   can: j1939: fix support for multipacket broadcast message
>>   can: j1939: cancel rxtimer on multipacket broadcast session complete
>>   can: j1939: abort multipacket broadcast session when timeout occurs
>>   can: j1939: add rxtimer for multipacket broadcast session
>>
>>  net/can/j1939/transport.c | 48 
>> +++
>>  1 file changed, 36 insertions(+), 12 deletions(-)
> 
> Regards,
> Oleksij
> 


[PATCH net 2/4] can: j1939: cancel rxtimer on multipacket broadcast session complete

2020-08-04 Thread Zhang Changzhong
If j1939_xtp_rx_dat_one() receive last frame of multipacket broadcast
message, j1939_session_timers_cancel() should be called to cancel
rxtimer.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong 
---
 net/can/j1939/transport.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index e5188ac..dd6a120 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1788,6 +1788,7 @@ static void j1939_xtp_rx_dat_one(struct j1939_session 
*session,
}
 
if (final) {
+   j1939_session_timers_cancel(session);
j1939_session_completed(session);
} else if (do_cts_eoma) {
j1939_tp_set_rxtimeout(session, 1250);
-- 
2.9.5



[PATCH net 4/4] can: j1939: add rxtimer for multipacket broadcast session

2020-08-04 Thread Zhang Changzhong
According to SAE J1939/21 (Chapter 5.12.3 and APPENDIX C), for transmit
side the required time interval between packets of a multipacket
broadcast message is 50 to 200 ms, the responder shall use a timeout of
250ms (provides margin allowing for the maximumm spacing of 200ms). For
receive side a timeout will occur when a time of greater than 750 ms
elapsed between two message packets when more packets were expected.

So this patch fix and add rxtimer for multipacket broadcast session.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong 
---
 net/can/j1939/transport.c | 28 
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index 5757f9f..fad210e 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -716,10 +716,12 @@ static int j1939_session_tx_rts(struct j1939_session 
*session)
return ret;
 
session->last_txcmd = dat[0];
-   if (dat[0] == J1939_TP_CMD_BAM)
+   if (dat[0] == J1939_TP_CMD_BAM) {
j1939_tp_schedule_txtimer(session, 50);
-
-   j1939_tp_set_rxtimeout(session, 1250);
+   j1939_tp_set_rxtimeout(session, 250);
+   } else {
+   j1939_tp_set_rxtimeout(session, 1250);
+   }
 
netdev_dbg(session->priv->ndev, "%s: 0x%p\n", __func__, session);
 
@@ -1665,11 +1667,15 @@ static void j1939_xtp_rx_rts(struct j1939_priv *priv, 
struct sk_buff *skb,
}
session->last_cmd = cmd;
 
-   j1939_tp_set_rxtimeout(session, 1250);
-
-   if (cmd != J1939_TP_CMD_BAM && !session->transmission) {
-   j1939_session_txtimer_cancel(session);
-   j1939_tp_schedule_txtimer(session, 0);
+   if (cmd == J1939_TP_CMD_BAM) {
+   if (!session->transmission)
+   j1939_tp_set_rxtimeout(session, 750);
+   } else {
+   if (!session->transmission) {
+   j1939_session_txtimer_cancel(session);
+   j1939_tp_schedule_txtimer(session, 0);
+   }
+   j1939_tp_set_rxtimeout(session, 1250);
}
 
j1939_session_put(session);
@@ -1720,6 +1726,7 @@ static void j1939_xtp_rx_dat_one(struct j1939_session 
*session,
int offset;
int nbytes;
bool final = false;
+   bool remain = false;
bool do_cts_eoma = false;
int packet;
 
@@ -1781,6 +1788,8 @@ static void j1939_xtp_rx_dat_one(struct j1939_session 
*session,
j1939_cb_is_broadcast(>skcb)) {
if (session->pkt.rx >= session->pkt.total)
final = true;
+   else
+   remain = true;
} else {
/* never final, an EOMA must follow */
if (session->pkt.rx >= session->pkt.last)
@@ -1790,6 +1799,9 @@ static void j1939_xtp_rx_dat_one(struct j1939_session 
*session,
if (final) {
j1939_session_timers_cancel(session);
j1939_session_completed(session);
+   } else if (remain) {
+   if (!session->transmission)
+   j1939_tp_set_rxtimeout(session, 750);
} else if (do_cts_eoma) {
j1939_tp_set_rxtimeout(session, 1250);
if (!session->transmission)
-- 
2.9.5



[PATCH net 3/4] can: j1939: abort multipacket broadcast session when timeout occurs

2020-08-04 Thread Zhang Changzhong
If timeout occurs, j1939_tp_rxtimer() first calls hrtimer_start() to
restart rxtimer, and then calls __j1939_session_cancel() to set
session->state = J1939_SESSION_WAITING_ABORT. At next timeout
expiration, because of the J1939_SESSION_WAITING_ABORT session state
j1939_tp_rxtimer() will call j1939_session_deactivate_activate_next()
to deactivate current session, and rxtimer won't be set.

But for multipacket broadcast session, __j1939_session_cancel() don't
set session->state = J1939_SESSION_WAITING_ABORT, thus current session
won't be deactivate and hrtimer_start() is called to start new
rxtimer again and again.

So fix it by moving session->state = J1939_SESSION_WAITING_ABORT out of
if (!j1939_cb_is_broadcast(>skcb)) statement.

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong 
---
 net/can/j1939/transport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index dd6a120..5757f9f 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1055,9 +1055,9 @@ static void __j1939_session_cancel(struct j1939_session 
*session,
lockdep_assert_held(>priv->active_session_list_lock);
 
session->err = j1939_xtp_abort_to_errno(priv, err);
+   session->state = J1939_SESSION_WAITING_ABORT;
/* do not send aborts on incoming broadcasts */
if (!j1939_cb_is_broadcast(>skcb)) {
-   session->state = J1939_SESSION_WAITING_ABORT;
j1939_xtp_tx_abort(priv, >skcb,
   !session->transmission,
   err, session->skcb.addr.pgn);
-- 
2.9.5



[PATCH net 0/4] support multipacket broadcast message

2020-08-04 Thread Zhang Changzhong
Zhang Changzhong (4):
  can: j1939: fix support for multipacket broadcast message
  can: j1939: cancel rxtimer on multipacket broadcast session complete
  can: j1939: abort multipacket broadcast session when timeout occurs
  can: j1939: add rxtimer for multipacket broadcast session

 net/can/j1939/transport.c | 48 +++
 1 file changed, 36 insertions(+), 12 deletions(-)

-- 
2.9.5



[PATCH net 1/4] can: j1939: fix support for multipacket broadcast message

2020-08-04 Thread Zhang Changzhong
Currently j1939_tp_im_involved_anydir() in j1939_tp_recv() check the
previously set flags J1939_ECU_LOCAL_DST and J1939_ECU_LOCAL_SRC of
incoming skb, thus multipacket broadcast message was aborted by
receive side because it may come from remote ECUs and have no exact
dst address. Similarly, j1939_tp_cmd_recv() and j1939_xtp_rx_dat()
didn't process broadcast message.

So fix it by checking and process broadcast message in j1939_tp_recv(),
j1939_tp_cmd_recv() and j1939_xtp_rx_dat().

Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
Signed-off-by: Zhang Changzhong 
---
 net/can/j1939/transport.c | 17 ++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index 9f99af5..e5188ac 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1651,8 +1651,12 @@ static void j1939_xtp_rx_rts(struct j1939_priv *priv, 
struct sk_buff *skb,
return;
}
session = j1939_xtp_rx_rts_session_new(priv, skb);
-   if (!session)
+   if (!session) {
+   if (cmd == J1939_TP_CMD_BAM && 
j1939_sk_recv_match(priv, skcb))
+   netdev_info(priv->ndev, "%s: failed to create 
TP BAM session\n",
+   __func__);
return;
+   }
} else {
if (j1939_xtp_rx_rts_session_active(session, skb)) {
j1939_session_put(session);
@@ -1829,6 +1833,13 @@ static void j1939_xtp_rx_dat(struct j1939_priv *priv, 
struct sk_buff *skb)
else
j1939_xtp_rx_dat_one(session, skb);
}
+
+   if (j1939_cb_is_broadcast(skcb)) {
+   session = j1939_session_get_by_addr(priv, >addr, false,
+   false);
+   if (session)
+   j1939_xtp_rx_dat_one(session, skb);
+   }
 }
 
 /* j1939 main intf */
@@ -1920,7 +1931,7 @@ static void j1939_tp_cmd_recv(struct j1939_priv *priv, 
struct sk_buff *skb)
if (j1939_tp_im_transmitter(skcb))
j1939_xtp_rx_rts(priv, skb, true);
 
-   if (j1939_tp_im_receiver(skcb))
+   if (j1939_tp_im_receiver(skcb) || j1939_cb_is_broadcast(skcb))
j1939_xtp_rx_rts(priv, skb, false);
 
break;
@@ -1984,7 +1995,7 @@ int j1939_tp_recv(struct j1939_priv *priv, struct sk_buff 
*skb)
 {
struct j1939_sk_buff_cb *skcb = j1939_skb_to_cb(skb);
 
-   if (!j1939_tp_im_involved_anydir(skcb))
+   if (!j1939_tp_im_involved_anydir(skcb) && !j1939_cb_is_broadcast(skcb))
return 0;
 
switch (skcb->addr.pgn) {
-- 
2.9.5



[PATCH net-next] net: fs_enet: remove redundant null check

2020-07-20 Thread Zhang Changzhong
Because clk_prepare_enable and clk_disable_unprepare already
checked NULL clock parameter, so the additional checks are
unnecessary, just remove them.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c 
b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
index b0d4b198..bf846b4 100644
--- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
+++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
@@ -1043,8 +1043,7 @@ static int fs_enet_probe(struct platform_device *ofdev)
 out_free_dev:
free_netdev(ndev);
 out_put:
-   if (fpi->clk_per)
-   clk_disable_unprepare(fpi->clk_per);
+   clk_disable_unprepare(fpi->clk_per);
 out_deregister_fixed_link:
of_node_put(fpi->phy_node);
if (of_phy_is_fixed_link(ofdev->dev.of_node))
@@ -1065,8 +1064,7 @@ static int fs_enet_remove(struct platform_device *ofdev)
fep->ops->cleanup_data(ndev);
dev_set_drvdata(fep->dev, NULL);
of_node_put(fep->fpi->phy_node);
-   if (fep->fpi->clk_per)
-   clk_disable_unprepare(fep->fpi->clk_per);
+   clk_disable_unprepare(fep->fpi->clk_per);
if (of_phy_is_fixed_link(ofdev->dev.of_node))
of_phy_deregister_fixed_link(ofdev->dev.of_node);
free_netdev(ndev);
-- 
1.8.3.1



[PATCH net] net: bcmgenet: add missed clk_disable_unprepare in bcmgenet_probe

2020-07-20 Thread Zhang Changzhong
The driver forgets to call clk_disable_unprepare() in error path after
a success calling for clk_prepare_enable().

Fix to goto err_clk_disable if clk_prepare_enable() is successful.

Fixes: c80d36ff63a5 ("net: bcmgenet: Use devm_clk_get_optional() to get the 
clocks")
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 368e05b..79d27be 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -4000,14 +4000,14 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (IS_ERR(priv->clk_wol)) {
dev_dbg(>pdev->dev, "failed to get enet-wol clock\n");
err = PTR_ERR(priv->clk_wol);
-   goto err;
+   goto err_clk_disable;
}
 
priv->clk_eee = devm_clk_get_optional(>pdev->dev, "enet-eee");
if (IS_ERR(priv->clk_eee)) {
dev_dbg(>pdev->dev, "failed to get enet-eee clock\n");
err = PTR_ERR(priv->clk_eee);
-   goto err;
+   goto err_clk_disable;
}
 
/* If this is an internal GPHY, power it on now, before UniMAC is
-- 
1.8.3.1



[PATCH net] net: bcmgenet: fix error returns in bcmgenet_probe()

2020-07-20 Thread Zhang Changzhong
The driver forgets to call clk_disable_unprepare() in error path after
a success calling for clk_prepare_enable().

Fix to goto err_clk_disable if clk_prepare_enable() is successful.

Fixes: c80d36ff63a5 ("net: bcmgenet: Use devm_clk_get_optional() to get the 
clocks")
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 368e05b..79d27be 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -4000,14 +4000,14 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (IS_ERR(priv->clk_wol)) {
dev_dbg(>pdev->dev, "failed to get enet-wol clock\n");
err = PTR_ERR(priv->clk_wol);
-   goto err;
+   goto err_clk_disable;
}
 
priv->clk_eee = devm_clk_get_optional(>pdev->dev, "enet-eee");
if (IS_ERR(priv->clk_eee)) {
dev_dbg(>pdev->dev, "failed to get enet-eee clock\n");
err = PTR_ERR(priv->clk_eee);
-   goto err;
+   goto err_clk_disable;
}
 
/* If this is an internal GPHY, power it on now, before UniMAC is
-- 
1.8.3.1



[PATCH net] net: bcmgenet: fix error returns in bcmgenet_probe()

2020-07-20 Thread Zhang Changzhong
The driver forgets to call clk_disable_unprepare() in error path after
a success calling for clk_prepare_enable().

Fix to goto err_clk_disable if clk_prepare_enable() is successful.

Fixes: 99d55638d4b0 ("net: bcmgenet: enable NETIF_F_HIGHDMA flag")
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 368e05b..903811e 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3988,7 +3988,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (err)
err = dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32));
if (err)
-   goto err;
+   goto err_clk_disable;
 
/* Mii wait queue */
init_waitqueue_head(>wq);
-- 
1.8.3.1



[PATCH net-next] net: ethernet: et131x: Remove unused variable 'pm_csr'

2020-07-17 Thread Zhang Changzhong
Gcc report warning as follows:

drivers/net/ethernet/agere/et131x.c:953:6: warning:
 variable 'pm_csr' set but not used [-Wunused-but-set-variable]
  953 |  u32 pm_csr;
  |  ^~
drivers/net/ethernet/agere/et131x.c:1002:6:warning:
 variable 'pm_csr' set but not used [-Wunused-but-set-variable]
 1002 |  u32 pm_csr;
  |  ^~
drivers/net/ethernet/agere/et131x.c:3446:8: warning:
 variable 'pm_csr' set but not used [-Wunused-but-set-variable]
 3446 |u32 pm_csr;
  |^~

After commit 38df6492eb51 ("et131x: Add PCIe gigabit ethernet driver
et131x to drivers/net"), 'pm_csr' is never used in these functions,
so removing it to avoid build warning.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/agere/et131x.c | 10 +++---
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/agere/et131x.c 
b/drivers/net/ethernet/agere/et131x.c
index 865892c..8806e1e 100644
--- a/drivers/net/ethernet/agere/et131x.c
+++ b/drivers/net/ethernet/agere/et131x.c
@@ -950,7 +950,6 @@ static void et1310_setup_device_for_multicast(struct 
et131x_adapter *adapter)
u32 hash2 = 0;
u32 hash3 = 0;
u32 hash4 = 0;
-   u32 pm_csr;
 
/* If ET131X_PACKET_TYPE_MULTICAST is specified, then we provision
 * the multi-cast LIST.  If it is NOT specified, (and "ALL" is not
@@ -984,7 +983,7 @@ static void et1310_setup_device_for_multicast(struct 
et131x_adapter *adapter)
}
 
/* Write out the new hash to the device */
-   pm_csr = readl(>regs->global.pm_csr);
+   readl(>regs->global.pm_csr);
if (!et1310_in_phy_coma(adapter)) {
writel(hash1, >multi_hash1);
writel(hash2, >multi_hash2);
@@ -999,7 +998,6 @@ static void et1310_setup_device_for_unicast(struct 
et131x_adapter *adapter)
u32 uni_pf1;
u32 uni_pf2;
u32 uni_pf3;
-   u32 pm_csr;
 
/* Set up unicast packet filter reg 3 to be the first two octets of
 * the MAC address for both address
@@ -1025,7 +1023,7 @@ static void et1310_setup_device_for_unicast(struct 
et131x_adapter *adapter)
  (adapter->addr[4] << ET_RX_UNI_PF_ADDR1_5_SHIFT) |
   adapter->addr[5];
 
-   pm_csr = readl(>regs->global.pm_csr);
+   readl(>regs->global.pm_csr);
if (!et1310_in_phy_coma(adapter)) {
writel(uni_pf1, >uni_pf_addr1);
writel(uni_pf2, >uni_pf_addr2);
@@ -3443,12 +3441,10 @@ static irqreturn_t et131x_isr(int irq, void *dev_id)
 * send a pause packet, otherwise just exit
 */
if (adapter->flow == FLOW_TXONLY || adapter->flow == FLOW_BOTH) 
{
-   u32 pm_csr;
-
/* Tell the device to send a pause packet via the back
 * pressure register (bp req and bp xon/xoff)
 */
-   pm_csr = readl(>global.pm_csr);
+   readl(>global.pm_csr);
if (!et1310_in_phy_coma(adapter))
writel(3, >txmac.bp_ctrl);
}
-- 
1.8.3.1



[PATCH net-next] net: bna: Remove unused variable 't'

2020-07-17 Thread Zhang Changzhong
Gcc report warning as follows:

drivers/net/ethernet/brocade/bna/bfa_ioc.c:1538:6: warning:
 variable 't' set but not used [-Wunused-but-set-variable]
 1538 |  u32 t;
  |  ^

After commit c107ba171f3d ("bna: Firmware Patch Simplification"),
't' is never used, so removing it to avoid build warning.

Reported-by: Hulk Robot 
Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/brocade/bna/bfa_ioc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c 
b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
index e17bfc8..49358d4 100644
--- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c
+++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c
@@ -1535,7 +1535,6 @@ enum bfa_flash_err {
 bfa_flash_fifo_flush(void __iomem *pci_bar)
 {
u32 i;
-   u32 t;
union bfa_flash_dev_status_reg dev_status;
 
dev_status.i = readl(pci_bar + FLI_DEV_STATUS_REG);
@@ -1545,7 +1544,7 @@ enum bfa_flash_err {
 
/* fifo counter in terms of words */
for (i = 0; i < dev_status.r.fifo_cnt; i++)
-   t = readl(pci_bar + FLI_RDDATA_REG);
+   readl(pci_bar + FLI_RDDATA_REG);
 
/* Check the device status. It may take some time. */
for (i = 0; i < BFA_FLASH_CHECK_MAX; i++) {
-- 
1.8.3.1



[PATCH net-next] net: bcmgenet: fix error returns in bcmgenet_probe()

2020-07-17 Thread Zhang Changzhong
The driver forgets to call clk_disable_unprepare() in error path after
a success calling for clk_prepare_enable().

Fix to goto err_clk_disable if clk_prepare_enable() is successful.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c 
b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index ee84a26..23df6f2 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -4016,7 +4016,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (err)
err = dma_set_mask_and_coherent(>dev, DMA_BIT_MASK(32));
if (err)
-   goto err;
+   goto err_clk_disable;
 
/* Mii wait queue */
init_waitqueue_head(>wq);
@@ -4028,14 +4028,14 @@ static int bcmgenet_probe(struct platform_device *pdev)
if (IS_ERR(priv->clk_wol)) {
dev_dbg(>pdev->dev, "failed to get enet-wol clock\n");
err = PTR_ERR(priv->clk_wol);
-   goto err;
+   goto err_clk_disable;
}
 
priv->clk_eee = devm_clk_get_optional(>pdev->dev, "enet-eee");
if (IS_ERR(priv->clk_eee)) {
dev_dbg(>pdev->dev, "failed to get enet-eee clock\n");
err = PTR_ERR(priv->clk_eee);
-   goto err;
+   goto err_clk_disable;
}
 
/* If this is an internal GPHY, power it on now, before UniMAC is
-- 
1.8.3.1



[PATCH net-next v2] can: ti_hecc: add missed clk_disable_unprepare() in error path

2020-07-17 Thread Zhang Changzhong
The driver forgets to call clk_disable_unprepare() in error path after
a success calling for clk_prepare_enable().

Fix it by adding a clk_disable_unprepare() in error path.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/can/ti_hecc.c | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c
index 94b1491..228ecd4 100644
--- a/drivers/net/can/ti_hecc.c
+++ b/drivers/net/can/ti_hecc.c
@@ -950,7 +950,7 @@ static int ti_hecc_probe(struct platform_device *pdev)
err = clk_prepare_enable(priv->clk);
if (err) {
dev_err(>dev, "clk_prepare_enable() failed\n");
-   goto probe_exit_clk;
+   goto probe_exit_release_clk;
}
 
priv->offload.mailbox_read = ti_hecc_mailbox_read;
@@ -959,7 +959,7 @@ static int ti_hecc_probe(struct platform_device *pdev)
err = can_rx_offload_add_timestamp(ndev, >offload);
if (err) {
dev_err(>dev, "can_rx_offload_add_timestamp() failed\n");
-   goto probe_exit_clk;
+   goto probe_exit_disable_clk;
}
 
err = register_candev(ndev);
@@ -977,7 +977,9 @@ static int ti_hecc_probe(struct platform_device *pdev)
 
 probe_exit_offload:
can_rx_offload_del(>offload);
-probe_exit_clk:
+probe_exit_disable_clk:
+   clk_disable_unprepare(priv->clk);
+probe_exit_release_clk:
clk_put(priv->clk);
 probe_exit_candev:
free_candev(ndev);
-- 
1.8.3.1



[PATCH net-next] can: mscan: simplify clock enable/disable

2020-07-17 Thread Zhang Changzhong
All the NULL checks are pointless, clk_*() routines already deal with
NULL just fine.

Signed-off-by: Zhang Changzhong 
---
 drivers/net/can/mscan/mscan.c | 28 ++--
 1 file changed, 10 insertions(+), 18 deletions(-)

diff --git a/drivers/net/can/mscan/mscan.c b/drivers/net/can/mscan/mscan.c
index 99101d7..d4390b6 100644
--- a/drivers/net/can/mscan/mscan.c
+++ b/drivers/net/can/mscan/mscan.c
@@ -540,16 +540,12 @@ static int mscan_open(struct net_device *dev)
struct mscan_priv *priv = netdev_priv(dev);
struct mscan_regs __iomem *regs = priv->reg_base;
 
-   if (priv->clk_ipg) {
-   ret = clk_prepare_enable(priv->clk_ipg);
-   if (ret)
-   goto exit_retcode;
-   }
-   if (priv->clk_can) {
-   ret = clk_prepare_enable(priv->clk_can);
-   if (ret)
-   goto exit_dis_ipg_clock;
-   }
+   ret = clk_prepare_enable(priv->clk_ipg);
+   if (ret)
+   goto exit_retcode;
+   ret = clk_prepare_enable(priv->clk_can);
+   if (ret)
+   goto exit_dis_ipg_clock;
 
/* common open */
ret = open_candev(dev);
@@ -583,11 +579,9 @@ static int mscan_open(struct net_device *dev)
napi_disable(>napi);
close_candev(dev);
 exit_dis_can_clock:
-   if (priv->clk_can)
-   clk_disable_unprepare(priv->clk_can);
+   clk_disable_unprepare(priv->clk_can);
 exit_dis_ipg_clock:
-   if (priv->clk_ipg)
-   clk_disable_unprepare(priv->clk_ipg);
+   clk_disable_unprepare(priv->clk_ipg);
 exit_retcode:
return ret;
 }
@@ -606,10 +600,8 @@ static int mscan_close(struct net_device *dev)
close_candev(dev);
free_irq(dev->irq, dev);
 
-   if (priv->clk_can)
-   clk_disable_unprepare(priv->clk_can);
-   if (priv->clk_ipg)
-   clk_disable_unprepare(priv->clk_ipg);
+   clk_disable_unprepare(priv->clk_can);
+   clk_disable_unprepare(priv->clk_ipg);
 
return 0;
 }
-- 
1.8.3.1



[PATCH net-next] can: silence remove_proc_entry warning

2020-07-14 Thread Zhang Changzhong
If can_init_proc() fail to create /proc/net/can directory,
can_remove_proc() will trigger a warning:

WARNING: CPU: 6 PID: 7133 at fs/proc/generic.c:672 remove_proc_entry+0x17b0
Kernel panic - not syncing: panic_on_warn set ...

Fix to return early from can_remove_proc() if can proc_dir
does not exists.

Signed-off-by: Zhang Changzhong 
---
 net/can/proc.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/can/proc.c b/net/can/proc.c
index e6881bf..077af42 100644
--- a/net/can/proc.c
+++ b/net/can/proc.c
@@ -471,6 +471,9 @@ void can_init_proc(struct net *net)
  */
 void can_remove_proc(struct net *net)
 {
+   if (!net->can.proc_dir)
+   return;
+
if (net->can.pde_version)
remove_proc_entry(CAN_PROC_VERSION, net->can.proc_dir);
 
@@ -498,6 +501,5 @@ void can_remove_proc(struct net *net)
if (net->can.pde_rcvlist_sff)
remove_proc_entry(CAN_PROC_RCVLIST_SFF, net->can.proc_dir);
 
-   if (net->can.proc_dir)
-   remove_proc_entry("can", net->proc_net);
+   remove_proc_entry("can", net->proc_net);
 }
-- 
1.8.3.1