[tip: timers/core] tick: Use tick_check_replacement() instead of open coding it

2021-04-16 Thread tip-bot2 for Wang Wensheng
The following commit has been merged into the timers/core branch of tip:

Commit-ID: d7840aaadd6e84915866a8f0dab586f6107dadf1
Gitweb:
https://git.kernel.org/tip/d7840aaadd6e84915866a8f0dab586f6107dadf1
Author:Wang Wensheng 
AuthorDate:Fri, 26 Mar 2021 02:23:28 
Committer: Thomas Gleixner 
CommitterDate: Fri, 16 Apr 2021 21:03:50 +02:00

tick: Use tick_check_replacement() instead of open coding it

The function tick_check_replacement() is the combination of
tick_check_percpu() and tick_check_preferred(), but tick_check_new_device()
has the same logic open coded.

Use the helper to simplify the code.

[ tglx: Massage changelog ]

Signed-off-by: Wang Wensheng 
Signed-off-by: Thomas Gleixner 
Link: https://lore.kernel.org/r/20210326022328.3266-1-wangwenshe...@huawei.com

---
 kernel/time/tick-common.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 9d3a225..e15bc0e 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -348,12 +348,7 @@ void tick_check_new_device(struct clock_event_device 
*newdev)
td = &per_cpu(tick_cpu_device, cpu);
curdev = td->evtdev;
 
-   /* cpu local device ? */
-   if (!tick_check_percpu(curdev, newdev, cpu))
-   goto out_bc;
-
-   /* Preference decision */
-   if (!tick_check_preferred(curdev, newdev))
+   if (!tick_check_replacement(curdev, newdev))
goto out_bc;
 
if (!try_module_get(newdev->owner))


[PATCH -next] IB/hfi1: Fix error return code in parse_platform_config()

2021-04-08 Thread Wang Wensheng
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 7724105686e7 ("IB/hfi1: add driver files")
Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 drivers/infiniband/hw/hfi1/firmware.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/hw/hfi1/firmware.c 
b/drivers/infiniband/hw/hfi1/firmware.c
index 0e83d4b..2cf102b 100644
--- a/drivers/infiniband/hw/hfi1/firmware.c
+++ b/drivers/infiniband/hw/hfi1/firmware.c
@@ -1916,6 +1916,7 @@ int parse_platform_config(struct hfi1_devdata *dd)
dd_dev_err(dd, "%s: Failed CRC check at offset %ld\n",
   __func__, (ptr -
   (u32 *)dd->platform_config.data));
+   ret = -EINVAL;
goto bail;
}
/* Jump the CRC DWORD */
-- 
2.9.4



[PATCH -next] RDMA/bnxt_re: Fix error return code in bnxt_qplib_cq_process_terminal()

2021-04-08 Thread Wang Wensheng
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 drivers/infiniband/hw/bnxt_re/qplib_fp.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c 
b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index 995d463..d4d4959 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -2784,6 +2784,7 @@ static int bnxt_qplib_cq_process_terminal(struct 
bnxt_qplib_cq *cq,
dev_err(&cq->hwq.pdev->dev,
"FP: CQ Processed terminal reported rq_cons_idx 0x%x 
exceeds max 0x%x\n",
cqe_cons, rq->max_wqe);
+   rc = -EINVAL;
goto done;
}
 
-- 
2.9.4



[PATCH -next] RDMA/srpt: Fix error return code in srpt_cm_req_recv()

2021-04-08 Thread Wang Wensheng
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: db7683d7deb2 ("IB/srpt: Fix login-related race conditions")
Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 drivers/infiniband/ulp/srpt/ib_srpt.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c 
b/drivers/infiniband/ulp/srpt/ib_srpt.c
index 98a393d..ea44780 100644
--- a/drivers/infiniband/ulp/srpt/ib_srpt.c
+++ b/drivers/infiniband/ulp/srpt/ib_srpt.c
@@ -2382,6 +2382,7 @@ static int srpt_cm_req_recv(struct srpt_device *const 
sdev,
pr_info("rejected SRP_LOGIN_REQ because target %s_%d is not 
enabled\n",
dev_name(&sdev->device->dev), port_num);
mutex_unlock(&sport->mutex);
+   ret = -EINVAL;
goto reject;
}
 
-- 
2.9.4



[PATCH -next] RDMA/qedr: Fix error return code in qedr_iw_connect()

2021-04-08 Thread Wang Wensheng
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: 82af6d19d8d9 ("RDMA/qedr: Fix synchronization methods and memory leaks 
in qedr")
Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 drivers/infiniband/hw/qedr/qedr_iw_cm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/hw/qedr/qedr_iw_cm.c 
b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
index c4bc587..1715fbe 100644
--- a/drivers/infiniband/hw/qedr/qedr_iw_cm.c
+++ b/drivers/infiniband/hw/qedr/qedr_iw_cm.c
@@ -636,8 +636,10 @@ int qedr_iw_connect(struct iw_cm_id *cm_id, struct 
iw_cm_conn_param *conn_param)
memcpy(in_params.local_mac_addr, dev->ndev->dev_addr, ETH_ALEN);
 
if (test_and_set_bit(QEDR_IWARP_CM_WAIT_FOR_CONNECT,
-&qp->iwarp_cm_flags))
+&qp->iwarp_cm_flags)) {
+   rc = -ENODEV;
goto err; /* QP already being destroyed */
+   }
 
rc = dev->ops->iwarp_connect(dev->rdma_ctx, &in_params, &out_params);
if (rc) {
-- 
2.9.4



[PATCH -next] KVM: arm64: Fix error return code in init_hyp_mode()

2021-04-06 Thread Wang Wensheng
Fix to return a negative error code from the error handling
case instead of 0, as done elsewhere in this function.

Fixes: e7193df0 ("KVM: arm64: Bootstrap PSCI SMC handler in nVHE EL2")
Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 arch/arm64/kvm/arm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 76a7de1..41e0b2a 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -1877,8 +1877,10 @@ static int init_hyp_mode(void)
if (is_protected_kvm_enabled()) {
init_cpu_logical_map();
 
-   if (!init_psci_relay())
+   if (!init_psci_relay()) {
+   err = -ENODEV;
goto out_err;
+   }
}
 
if (is_protected_kvm_enabled()) {
-- 
2.9.4



[PATCH] mm/sparse: Add the missing sparse_buffer_fini() in error branch

2021-03-25 Thread Wang Wensheng
sparse_buffer_init() and sparse_buffer_fini() should appear in pair, or
a WARN issue would be through the next time sparse_buffer_init() runs.

Add the missing sparse_buffer_fini() in error branch.

Fixes: 85c77f791390 ("mm/sparse: add new sparse_init_nid() and sparse_init()")
Signed-off-by: Wang Wensheng 
---
 mm/sparse.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/sparse.c b/mm/sparse.c
index 7bd23f9..33406ea 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -547,6 +547,7 @@ static void __init sparse_init_nid(int nid, unsigned long 
pnum_begin,
pr_err("%s: node[%d] memory map backing failed. Some 
memory will not be available.",
   __func__, nid);
pnum_begin = pnum;
+   sparse_buffer_fini();
goto failed;
}
check_usemap_section_nr(nid, usage);
-- 
2.9.4



[PATCH] tick: Use the wrapped function to clear the logic

2021-03-25 Thread Wang Wensheng
The function tick_check_replacement() is the combination of
tick_check_percpu() and tick_check_preferred(). It make the code easier to
understand to use the self-described one function.

Signed-off-by: Wang Wensheng 
---
 kernel/time/tick-common.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 9d3a225..e15bc0e 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -348,12 +348,7 @@ void tick_check_new_device(struct clock_event_device 
*newdev)
td = &per_cpu(tick_cpu_device, cpu);
curdev = td->evtdev;
 
-   /* cpu local device ? */
-   if (!tick_check_percpu(curdev, newdev, cpu))
-   goto out_bc;
-
-   /* Preference decision */
-   if (!tick_check_preferred(curdev, newdev))
+   if (!tick_check_replacement(curdev, newdev))
goto out_bc;
 
if (!try_module_get(newdev->owner))
-- 
2.9.4



[PATCH] mm/sparse: Add the missing sparse_buffer_fini() in error branch

2021-03-25 Thread Wang Wensheng
sparse_buffer_init() and sparse_buffer_fini() should appear in pair, or
a WARN issue would be through the next time sparse_buffer_init() runs.

Add the missing sparse_buffer_fini() in error branch.

Fixes: 85c77f791390 ("mm/sparse: add new sparse_init_nid() and sparse_init()")
Signed-off-by: Wang Wensheng 
---
 mm/sparse.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/sparse.c b/mm/sparse.c
index 7bd23f9..33406ea 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -547,6 +547,7 @@ static void __init sparse_init_nid(int nid, unsigned long 
pnum_begin,
pr_err("%s: node[%d] memory map backing failed. Some 
memory will not be available.",
   __func__, nid);
pnum_begin = pnum;
+   sparse_buffer_fini();
goto failed;
}
check_usemap_section_nr(nid, usage);
-- 
2.9.4



[PATCH -next] tick: Use the wrapped function to clear the logic

2021-03-23 Thread Wang Wensheng
The function tick_check_replacement() is the combination of
tick_check_percpu() and tick_check_preferred(). It make the code easy to
understand to use the self-described one function.

Signed-off-by: Wang Wensheng 
---
 kernel/time/tick-common.c | 7 +--
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/kernel/time/tick-common.c b/kernel/time/tick-common.c
index 9d3a225..e15bc0e 100644
--- a/kernel/time/tick-common.c
+++ b/kernel/time/tick-common.c
@@ -348,12 +348,7 @@ void tick_check_new_device(struct clock_event_device 
*newdev)
td = &per_cpu(tick_cpu_device, cpu);
curdev = td->evtdev;
 
-   /* cpu local device ? */
-   if (!tick_check_percpu(curdev, newdev, cpu))
-   goto out_bc;
-
-   /* Preference decision */
-   if (!tick_check_preferred(curdev, newdev))
+   if (!tick_check_replacement(curdev, newdev))
goto out_bc;
 
if (!try_module_get(newdev->owner))
-- 
2.9.4



[PATCH -next v4] watchdog: Fix potential dereferencing of null pointer

2020-11-09 Thread Wang Wensheng
A reboot notifier, which stops the WDT by calling the stop hook without
any check, would be registered when we set WDOG_STOP_ON_REBOOT flag.

Howerer we allow the WDT driver to omit the stop hook since commit
"d0684c8a93549" ("watchdog: Make stop function optional") and provide
a module parameter for user that controls the WDOG_STOP_ON_REBOOT flag
in commit 9232c80659e94 ("watchdog: Add stop_on_reboot parameter to
control reboot policy"). Together that commits make user potential to
insert a watchdog driver that don't provide a stop hook but with the
stop_on_reboot parameter set, then dereferencing of null pointer occurs
on system reboot.

Check the stop hook before registering the reboot notifier to fix the
issue.

Fixes: d0684c8a9354 ("watchdog: Make stop function optional")
Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 22 +-
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 423844757812..0e9a99559609 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -267,15 +267,19 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
-   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
-
-   ret = register_reboot_notifier(&wdd->reboot_nb);
-   if (ret) {
-   pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
-  wdd->id, ret);
-   watchdog_dev_unregister(wdd);
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
+   if (!wdd->ops->stop)
+   pr_warn("watchdog%d: stop_on_reboot not supported\n", 
wdd->id);
+   else {
+   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
+
+   ret = register_reboot_notifier(&wdd->reboot_nb);
+   if (ret) {
+   pr_err("watchdog%d: Cannot register reboot 
notifier (%d)\n",
+   wdd->id, ret);
+   watchdog_dev_unregister(wdd);
+   ida_simple_remove(&watchdog_ida, id);
+   return ret;
+   }
}
}
 
-- 
2.25.0



[PATCH -next v3 2/2] watchdog: Clean up error handlings

2020-11-05 Thread Wang Wensheng
Clean up the repeated error handling process in function
__watchdog_register_device().

Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 22 --
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 945ab38b14b8..4fa54a620ccd 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -252,10 +252,8 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
wdd->id = id;
 
ret = watchdog_dev_register(wdd);
-   if (ret) {
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
-   }
+   if (ret)
+   goto id_remove;
}
 
/* Module parameter to force watchdog policy on reboot. */
@@ -270,9 +268,8 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
if (!wdd->ops->stop) {
pr_err("watchdog%d: Cannot support stop_on_reboot\n",
wdd->id);
-   watchdog_dev_unregister(wdd);
-   ida_simple_remove(&watchdog_ida, id);
-   return -EINVAL;
+   ret = -EINVAL;
+   goto dev_unregister;
}
 
wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
@@ -280,9 +277,7 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
if (ret) {
pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
   wdd->id, ret);
-   watchdog_dev_unregister(wdd);
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
+   goto dev_unregister;
}
}
 
@@ -296,6 +291,13 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
return 0;
+
+dev_unregister:
+   watchdog_dev_unregister(wdd);
+id_remove:
+   ida_simple_remove(&watchdog_ida, id);
+
+   return ret;
 }
 
 /**
-- 
2.25.0



[PATCH -next v3 1/2] watchdog: Fix potential dereferencing of null pointer

2020-11-05 Thread Wang Wensheng
A reboot notifier, which stops the WDT by calling the stop hook without
any check, would be registered when we set WDOG_STOP_ON_REBOOT flag.

Howerer we allow the WDT driver to omit the stop hook since commit
"d0684c8a93549" ("watchdog: Make stop function optional") and provide
a module parameter for user that controls the WDOG_STOP_ON_REBOOT flag
in commit 9232c80659e94 ("watchdog: Add stop_on_reboot parameter to
control reboot policy"). Together that commits make user potential to
insert a watchdog driver that don't provide a stop hook but with the
stop_on_reboot parameter set, then dereferencing of null pointer occurs
on system reboot.

Check the stop hook before registering the reboot notifier to fix the
issue.

Fixes: d0684c8a9354 ("watchdog: Make stop function optional")
Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 423844757812..945ab38b14b8 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -267,8 +267,15 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
-   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
+   if (!wdd->ops->stop) {
+   pr_err("watchdog%d: Cannot support stop_on_reboot\n",
+   wdd->id);
+   watchdog_dev_unregister(wdd);
+   ida_simple_remove(&watchdog_ida, id);
+   return -EINVAL;
+   }
 
+   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
ret = register_reboot_notifier(&wdd->reboot_nb);
if (ret) {
pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
-- 
2.25.0



[PATCH -next v2 1/2] watchdog: Clean up error handlings of __watchdog_register_device

2020-11-02 Thread Wang Wensheng
Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 17 ++---
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 423844757812..c73871f41142 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -252,10 +252,8 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
wdd->id = id;
 
ret = watchdog_dev_register(wdd);
-   if (ret) {
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
-   }
+   if (ret)
+   goto id_remove;
}
 
/* Module parameter to force watchdog policy on reboot. */
@@ -273,9 +271,7 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
if (ret) {
pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
   wdd->id, ret);
-   watchdog_dev_unregister(wdd);
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
+   goto dev_unregister;
}
}
 
@@ -289,6 +285,13 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
return 0;
+
+dev_unregister:
+   watchdog_dev_unregister(wdd);
+id_remove:
+   ida_simple_remove(&watchdog_ida, id);
+
+   return ret;
 }
 
 /**
-- 
2.25.0



[PATCH -next v2 2/2] watchdog: Fix potential dereferencing of null pointer

2020-11-02 Thread Wang Wensheng
A reboot notifier, which stops the WDT by calling the stop hook without
any check, would be registered when we set WDOG_STOP_ON_REBOOT flag.

Howerer we allow the WDT driver to omit the stop hook since commit
"d0684c8a93549" ("watchdog: Make stop function optional") and provide
a module parameter for user that controls the WDOG_STOP_ON_REBOOT flag
in commit 9232c80659e94 ("watchdog: Add stop_on_reboot parameter to
control reboot policy"). Together that commits make user potential to
insert a watchdog driver that don't provide a stop hook but with the
stop_on_reboot parameter set, then dereferencing of null pointer occurs
on system reboot.

Check the stop hook before registering the reboot notifier to fix the
issue.

Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index c73871f41142..5269761ba072 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -265,8 +265,12 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
-   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
+   if (!wdd->ops->stop) {
+   ret = -EINVAL;
+   goto dev_unregister;
+   }
 
+   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
ret = register_reboot_notifier(&wdd->reboot_nb);
if (ret) {
pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
-- 
2.25.0



[PATCH -next] watchdog: Fix potential dereferencing of null pointer

2020-11-01 Thread Wang Wensheng
A reboot notifier, which stops the WDT by calling the stop hook without
any check, would be registered when we set WDOG_STOP_ON_REBOOT flag.

Howerer we allow the WDT driver to omit the stop hook since commit
"d0684c8a93549" ("watchdog: Make stop function optional") and provide
a module parameter for user that controls the WDOG_STOP_ON_REBOOT flag
in commit 9232c80659e94 ("watchdog: Add stop_on_reboot parameter to
control reboot policy"). Together that commits make user potential to
insert a watchdog driver that don't provide a stop hook but with the
stop_on_reboot parameter set, then dereferencing of null pointer occurs
on system reboot.

Check the stop hook before registering the reboot notifier to fix the
issue.

Fixes: d0684c8a9354 ("watchdog: Make stop function optional")
Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_core.c | 23 +++
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/watchdog/watchdog_core.c b/drivers/watchdog/watchdog_core.c
index 423844757812..5269761ba072 100644
--- a/drivers/watchdog/watchdog_core.c
+++ b/drivers/watchdog/watchdog_core.c
@@ -252,10 +252,8 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
wdd->id = id;
 
ret = watchdog_dev_register(wdd);
-   if (ret) {
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
-   }
+   if (ret)
+   goto id_remove;
}
 
/* Module parameter to force watchdog policy on reboot. */
@@ -267,15 +265,17 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) {
-   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
+   if (!wdd->ops->stop) {
+   ret = -EINVAL;
+   goto dev_unregister;
+   }
 
+   wdd->reboot_nb.notifier_call = watchdog_reboot_notifier;
ret = register_reboot_notifier(&wdd->reboot_nb);
if (ret) {
pr_err("watchdog%d: Cannot register reboot notifier 
(%d)\n",
   wdd->id, ret);
-   watchdog_dev_unregister(wdd);
-   ida_simple_remove(&watchdog_ida, id);
-   return ret;
+   goto dev_unregister;
}
}
 
@@ -289,6 +289,13 @@ static int __watchdog_register_device(struct 
watchdog_device *wdd)
}
 
return 0;
+
+dev_unregister:
+   watchdog_dev_unregister(wdd);
+id_remove:
+   ida_simple_remove(&watchdog_ida, id);
+
+   return ret;
 }
 
 /**
-- 
2.25.0



[PATCH -next v2] powerpc/perf: Fix symbol undeclared warning

2020-09-23 Thread Wang Wensheng
Build kernel with `C=2`:
arch/powerpc/perf/isa207-common.c:24:18: warning: symbol
'isa207_pmu_format_attr' was not declared. Should it be static?
arch/powerpc/perf/power9-pmu.c:101:5: warning: symbol 'p9_dd21_bl_ev'
was not declared. Should it be static?
arch/powerpc/perf/power9-pmu.c:115:5: warning: symbol 'p9_dd22_bl_ev'
was not declared. Should it be static?

Those symbols are used only in the files that define them so we declare
them as static to fix the warnings.

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/perf/isa207-common.c | 2 +-
 arch/powerpc/perf/power9-pmu.c| 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/perf/isa207-common.c 
b/arch/powerpc/perf/isa207-common.c
index 964437adec18..85dc860b265b 100644
--- a/arch/powerpc/perf/isa207-common.c
+++ b/arch/powerpc/perf/isa207-common.c
@@ -21,7 +21,7 @@ PMU_FORMAT_ATTR(thresh_stop,  "config:32-35");
 PMU_FORMAT_ATTR(thresh_start,  "config:36-39");
 PMU_FORMAT_ATTR(thresh_cmp,"config:40-49");
 
-struct attribute *isa207_pmu_format_attr[] = {
+static struct attribute *isa207_pmu_format_attr[] = {
&format_attr_event.attr,
&format_attr_pmcxsel.attr,
&format_attr_mark.attr,
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
index 2a57e93a79dc..4a315fad1f99 100644
--- a/arch/powerpc/perf/power9-pmu.c
+++ b/arch/powerpc/perf/power9-pmu.c
@@ -98,7 +98,7 @@ extern u64 PERF_REG_EXTENDED_MASK;
 /* PowerISA v2.07 format attribute structure*/
 extern struct attribute_group isa207_pmu_format_group;
 
-int p9_dd21_bl_ev[] = {
+static int p9_dd21_bl_ev[] = {
PM_MRK_ST_DONE_L2,
PM_RADIX_PWC_L1_HIT,
PM_FLOP_CMPL,
@@ -112,7 +112,7 @@ int p9_dd21_bl_ev[] = {
PM_DISP_HELD_SYNC_HOLD,
 };
 
-int p9_dd22_bl_ev[] = {
+static int p9_dd22_bl_ev[] = {
PM_DTLB_MISS_16G,
PM_DERAT_MISS_2M,
PM_DTLB_MISS_2M,
-- 
2.25.0



[PATCH -next] powerpc/security: Fix symbol undeclared warning

2020-09-21 Thread Wang Wensheng
Build kernel with `C=2`:
arch/powerpc/kernel/security.c:253:6: warning: symbol 'stf_barrier' was
not declared. Should it be static?

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/kernel/security.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index c9876aab3142..fbcd5611a67e 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -250,7 +250,7 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct 
device_attribute *attr, c
 
 static enum stf_barrier_type stf_enabled_flush_types;
 static bool no_stf_barrier;
-bool stf_barrier;
+static bool stf_barrier;
 
 static int __init handle_no_stf_barrier(char *p)
 {
-- 
2.25.0



[PATCH -next] powerpc/perf: Fix symbol undeclared warning

2020-09-21 Thread Wang Wensheng
Build kernel with `C=2`:
arch/powerpc/perf/isa207-common.c:24:18: warning: symbol
'isa207_pmu_format_attr' was not declared. Should it be static?
arch/powerpc/perf/power9-pmu.c:101:5: warning: symbol 'p9_dd21_bl_ev'
was not declared. Should it be static?
arch/powerpc/perf/power9-pmu.c:115:5: warning: symbol 'p9_dd22_bl_ev'
was not declared. Should it be static?

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/perf/isa207-common.c | 2 +-
 arch/powerpc/perf/power9-pmu.c| 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/perf/isa207-common.c 
b/arch/powerpc/perf/isa207-common.c
index 964437adec18..85dc860b265b 100644
--- a/arch/powerpc/perf/isa207-common.c
+++ b/arch/powerpc/perf/isa207-common.c
@@ -21,7 +21,7 @@ PMU_FORMAT_ATTR(thresh_stop,  "config:32-35");
 PMU_FORMAT_ATTR(thresh_start,  "config:36-39");
 PMU_FORMAT_ATTR(thresh_cmp,"config:40-49");
 
-struct attribute *isa207_pmu_format_attr[] = {
+static struct attribute *isa207_pmu_format_attr[] = {
&format_attr_event.attr,
&format_attr_pmcxsel.attr,
&format_attr_mark.attr,
diff --git a/arch/powerpc/perf/power9-pmu.c b/arch/powerpc/perf/power9-pmu.c
index 2a57e93a79dc..4a315fad1f99 100644
--- a/arch/powerpc/perf/power9-pmu.c
+++ b/arch/powerpc/perf/power9-pmu.c
@@ -98,7 +98,7 @@ extern u64 PERF_REG_EXTENDED_MASK;
 /* PowerISA v2.07 format attribute structure*/
 extern struct attribute_group isa207_pmu_format_group;
 
-int p9_dd21_bl_ev[] = {
+static int p9_dd21_bl_ev[] = {
PM_MRK_ST_DONE_L2,
PM_RADIX_PWC_L1_HIT,
PM_FLOP_CMPL,
@@ -112,7 +112,7 @@ int p9_dd21_bl_ev[] = {
PM_DISP_HELD_SYNC_HOLD,
 };
 
-int p9_dd22_bl_ev[] = {
+static int p9_dd22_bl_ev[] = {
PM_DTLB_MISS_16G,
PM_DERAT_MISS_2M,
PM_DTLB_MISS_2M,
-- 
2.25.0



[PATCH -next] powerpc/opalcore: Fix symbol undeclared warning

2020-09-21 Thread Wang Wensheng
Build kernel with `C=2`:
arch/powerpc/platforms/powernv/opal-core.c:74:16: warning: symbol
'mpipl_kobj' was not declared. Should it be static?

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/platforms/powernv/opal-core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/powernv/opal-core.c 
b/arch/powerpc/platforms/powernv/opal-core.c
index 6dba3b62269f..c25f9f254f05 100644
--- a/arch/powerpc/platforms/powernv/opal-core.c
+++ b/arch/powerpc/platforms/powernv/opal-core.c
@@ -71,7 +71,7 @@ static LIST_HEAD(opalcore_list);
 static struct opalcore_config *oc_conf;
 static const struct opal_mpipl_fadump *opalc_metadata;
 static const struct opal_mpipl_fadump *opalc_cpu_metadata;
-struct kobject *mpipl_kobj;
+static struct kobject *mpipl_kobj;
 
 /*
  * Set crashing CPU's signal to SIGUSR1. if the kernel is triggered
-- 
2.25.0



[PATCH -next] powerpc/kvm/books: Fix symbol undeclared warnings

2020-09-21 Thread Wang Wensheng
Build the kernel with `C=2`:
arch/powerpc/kvm/book3s_hv_nested.c:572:25: warning: symbol
'kvmhv_alloc_nested' was not declared. Should it be static?
arch/powerpc/kvm/book3s_64_mmu_radix.c:350:6: warning: symbol
'kvmppc_radix_set_pte_at' was not declared. Should it be static?
arch/powerpc/kvm/book3s_hv.c:3568:5: warning: symbol
'kvmhv_p9_guest_entry' was not declared. Should it be static?
arch/powerpc/kvm/book3s_hv_rm_xics.c:767:15: warning: symbol 'eoi_rc'
was not declared. Should it be static?
arch/powerpc/kvm/book3s_64_vio_hv.c:240:13: warning: symbol
'iommu_tce_kill_rm' was not declared. Should it be static?
arch/powerpc/kvm/book3s_64_vio.c:492:6: warning: symbol
'kvmppc_tce_iommu_do_map' was not declared. Should it be static?
arch/powerpc/kvm/book3s_pr.c:572:6: warning: symbol 'kvmppc_set_pvr_pr'
was not declared. Should it be static?

Those symbols are used only in the files that define them so make them
static to fix the warnings.

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/kvm/book3s_64_mmu_radix.c | 2 +-
 arch/powerpc/kvm/book3s_64_vio.c   | 2 +-
 arch/powerpc/kvm/book3s_64_vio_hv.c| 2 +-
 arch/powerpc/kvm/book3s_hv.c   | 2 +-
 arch/powerpc/kvm/book3s_hv_nested.c| 2 +-
 arch/powerpc/kvm/book3s_hv_rm_xics.c   | 2 +-
 arch/powerpc/kvm/book3s_pr.c   | 2 +-
 7 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c 
b/arch/powerpc/kvm/book3s_64_mmu_radix.c
index 22a677b18695..bb35490400e9 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
@@ -347,7 +347,7 @@ static unsigned long kvmppc_radix_update_pte(struct kvm 
*kvm, pte_t *ptep,
return __radix_pte_update(ptep, clr, set);
 }
 
-void kvmppc_radix_set_pte_at(struct kvm *kvm, unsigned long addr,
+static void kvmppc_radix_set_pte_at(struct kvm *kvm, unsigned long addr,
 pte_t *ptep, pte_t pte)
 {
radix__set_pte_at(kvm->mm, addr, ptep, pte, 0);
diff --git a/arch/powerpc/kvm/book3s_64_vio.c b/arch/powerpc/kvm/book3s_64_vio.c
index 1a529df0ab44..c2fbeb04bba2 100644
--- a/arch/powerpc/kvm/book3s_64_vio.c
+++ b/arch/powerpc/kvm/book3s_64_vio.c
@@ -489,7 +489,7 @@ static long kvmppc_tce_iommu_unmap(struct kvm *kvm,
return ret;
 }
 
-long kvmppc_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
+static long kvmppc_tce_iommu_do_map(struct kvm *kvm, struct iommu_table *tbl,
unsigned long entry, unsigned long ua,
enum dma_data_direction dir)
 {
diff --git a/arch/powerpc/kvm/book3s_64_vio_hv.c 
b/arch/powerpc/kvm/book3s_64_vio_hv.c
index ac6ac192b8bb..470e7c518a10 100644
--- a/arch/powerpc/kvm/book3s_64_vio_hv.c
+++ b/arch/powerpc/kvm/book3s_64_vio_hv.c
@@ -237,7 +237,7 @@ static long iommu_tce_xchg_no_kill_rm(struct mm_struct *mm,
return ret;
 }
 
-extern void iommu_tce_kill_rm(struct iommu_table *tbl,
+static void iommu_tce_kill_rm(struct iommu_table *tbl,
unsigned long entry, unsigned long pages)
 {
if (tbl->it_ops->tce_kill)
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index cb1d16a3730c..31407be44e57 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -3575,7 +3575,7 @@ static int kvmhv_load_hv_regs_and_go(struct kvm_vcpu 
*vcpu, u64 time_limit,
  * Virtual-mode guest entry for POWER9 and later when the host and
  * guest are both using the radix MMU.  The LPIDR has already been set.
  */
-int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,
+static int kvmhv_p9_guest_entry(struct kvm_vcpu *vcpu, u64 time_limit,
 unsigned long lpcr)
 {
struct kvmppc_vcore *vc = vcpu->arch.vcore;
diff --git a/arch/powerpc/kvm/book3s_hv_nested.c 
b/arch/powerpc/kvm/book3s_hv_nested.c
index 6822d23a2da4..33b58549a9aa 100644
--- a/arch/powerpc/kvm/book3s_hv_nested.c
+++ b/arch/powerpc/kvm/book3s_hv_nested.c
@@ -569,7 +569,7 @@ static void kvmhv_update_ptbl_cache(struct kvm_nested_guest 
*gp)
kvmhv_set_nested_ptbl(gp);
 }
 
-struct kvm_nested_guest *kvmhv_alloc_nested(struct kvm *kvm, unsigned int lpid)
+static struct kvm_nested_guest *kvmhv_alloc_nested(struct kvm *kvm, unsigned 
int lpid)
 {
struct kvm_nested_guest *gp;
long shadow_lpid;
diff --git a/arch/powerpc/kvm/book3s_hv_rm_xics.c 
b/arch/powerpc/kvm/book3s_hv_rm_xics.c
index 4d7e5610731a..c2c9c733f359 100644
--- a/arch/powerpc/kvm/book3s_hv_rm_xics.c
+++ b/arch/powerpc/kvm/book3s_hv_rm_xics.c
@@ -764,7 +764,7 @@ int xics_rm_h_eoi(struct kvm_vcpu *vcpu, unsigned long xirr)
return ics_rm_eoi(vcpu, irq);
 }
 
-unsigned long eoi_rc;
+static unsigned long eoi_rc;
 
 static void icp_eoi(struct irq_chip *c, u32 hwirq, __be32 xirr, bool *again)
 {
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
index 88fac22fbf09..b1fefa63e125 100644
--- a/arch/pow

[PATCH -next] powerpc/papr_scm: Fix warnings about undeclared variable

2020-09-18 Thread Wang Wensheng
Build the kernel with 'make C=2':
arch/powerpc/platforms/pseries/papr_scm.c:825:1: warning: symbol
'dev_attr_perf_stats' was not declared. Should it be static?

Signed-off-by: Wang Wensheng 
---
 arch/powerpc/platforms/pseries/papr_scm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/platforms/pseries/papr_scm.c 
b/arch/powerpc/platforms/pseries/papr_scm.c
index 5493bc847bd0..a95aa425e7d4 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -823,7 +823,7 @@ static ssize_t perf_stats_show(struct device *dev,
kfree(stats);
return rc ? rc : (ssize_t)seq_buf_used(&s);
 }
-DEVICE_ATTR_ADMIN_RO(perf_stats);
+static DEVICE_ATTR_ADMIN_RO(perf_stats);
 
 static ssize_t flags_show(struct device *dev,
  struct device_attribute *attr, char *buf)
-- 
2.25.0



[PATCH -next] ide: Fix symbol undeclared warnings

2020-09-16 Thread Wang Wensheng
Build the object file with `C=2` and get the following warnings:
make allmodconfig ARCH=powerpc CROSS_COMPILE=powerpc64-linux-gnu-
make C=2 drivers/ide/pmac.o ARCH=powerpc64
CROSS_COMPILE=powerpc64-linux-gnu-

drivers/ide/pmac.c:228:23: warning: symbol 'mdma_timings_33' was not
declared. Should it be static?
drivers/ide/pmac.c:241:23: warning: symbol 'mdma_timings_33k' was not
declared. Should it be static?
drivers/ide/pmac.c:254:23: warning: symbol 'mdma_timings_66' was not
declared. Should it be static?
drivers/ide/pmac.c:272:3: warning: symbol 'kl66_udma_timings' was not
declared. Should it be static?
drivers/ide/pmac.c:1418:12: warning: symbol 'pmac_ide_probe' was not
declared. Should it be static?

Signed-off-by: Wang Wensheng 
---
 drivers/ide/pmac.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/ide/pmac.c b/drivers/ide/pmac.c
index ea0b064b5f56..6bb2fc6755c2 100644
--- a/drivers/ide/pmac.c
+++ b/drivers/ide/pmac.c
@@ -225,7 +225,7 @@ struct mdma_timings_t {
int cycleTime;
 };
 
-struct mdma_timings_t mdma_timings_33[] =
+static struct mdma_timings_t mdma_timings_33[] =
 {
 { 240, 240, 480 },
 { 180, 180, 360 },
@@ -238,7 +238,7 @@ struct mdma_timings_t mdma_timings_33[] =
 {   0,   0,   0 }
 };
 
-struct mdma_timings_t mdma_timings_33k[] =
+static struct mdma_timings_t mdma_timings_33k[] =
 {
 { 240, 240, 480 },
 { 180, 180, 360 },
@@ -251,7 +251,7 @@ struct mdma_timings_t mdma_timings_33k[] =
 {   0,   0,   0 }
 };
 
-struct mdma_timings_t mdma_timings_66[] =
+static struct mdma_timings_t mdma_timings_66[] =
 {
 { 240, 240, 480 },
 { 180, 180, 360 },
@@ -265,7 +265,7 @@ struct mdma_timings_t mdma_timings_66[] =
 };
 
 /* KeyLargo ATA-4 Ultra DMA timings (rounded) */
-struct {
+static struct {
int addrSetup; /* ??? */
int rdy2pause;
int wrDataSetup;
@@ -1415,7 +1415,7 @@ static struct pci_driver pmac_ide_pci_driver = {
 };
 MODULE_DEVICE_TABLE(pci, pmac_ide_pci_match);
 
-int __init pmac_ide_probe(void)
+static int __init pmac_ide_probe(void)
 {
int error;
 
-- 
2.25.0



[PATCH -next] drivers/macintosh/smu.c: Fix undeclared symbol warning

2020-09-14 Thread Wang Wensheng
Make kernel with `C=2`:
drivers/macintosh/smu.c:1018:30: warning: symbol
'__smu_get_sdb_partition' was not declared. Should it be static?

Reported-by: Hulk Robot 
Signed-off-by: Wang Wensheng 
---
 drivers/macintosh/smu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/macintosh/smu.c b/drivers/macintosh/smu.c
index 96684581a25d..bae94caaad5c 100644
--- a/drivers/macintosh/smu.c
+++ b/drivers/macintosh/smu.c
@@ -1015,7 +1015,7 @@ static struct smu_sdbp_header 
*smu_create_sdb_partition(int id)
 /* Note: Only allowed to return error code in pointers (using ERR_PTR)
  * when interruptible is 1
  */
-const struct smu_sdbp_header *__smu_get_sdb_partition(int id,
+static const struct smu_sdbp_header *__smu_get_sdb_partition(int id,
unsigned int *size, int interruptible)
 {
char pname[32];
-- 
2.25.0



[PATCH] watchdog: Add interface to config timeout and pretimeout in sysfs

2020-08-19 Thread Wang Wensheng
Those interfaces exist already in sysfs of watchdog driver core, but
they are readonly. This patch add write hook so we can config timeout
and pretimeout by writing those files.

Signed-off-by: Wang Wensheng 
---
 drivers/watchdog/watchdog_dev.c | 48 +++--
 1 file changed, 46 insertions(+), 2 deletions(-)

diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c
index 10b2090f3e5e..bb8ddc71d4ea 100644
--- a/drivers/watchdog/watchdog_dev.c
+++ b/drivers/watchdog/watchdog_dev.c
@@ -485,7 +485,29 @@ static ssize_t timeout_show(struct device *dev, struct 
device_attribute *attr,
 
return sprintf(buf, "%u\n", wdd->timeout);
 }
-static DEVICE_ATTR_RO(timeout);
+
+static ssize_t timeout_store(struct device *dev, struct device_attribute *attr,
+   const char *buf, size_t count)
+{
+   int ret;
+   unsigned int val;
+   struct watchdog_device *wdd = dev_get_drvdata(dev);
+   struct watchdog_core_data *wd_data = wdd->wd_data;
+
+   ret = kstrtouint(buf, 0, &val);
+   if (ret)
+   return ret;
+
+   mutex_lock(&wd_data->lock);
+   ret = watchdog_set_timeout(wdd, val);
+   mutex_unlock(&wd_data->lock);
+
+   if (!ret)
+   ret = count;
+
+   return ret;
+}
+static DEVICE_ATTR_RW(timeout);
 
 static ssize_t pretimeout_show(struct device *dev,
   struct device_attribute *attr, char *buf)
@@ -494,7 +516,29 @@ static ssize_t pretimeout_show(struct device *dev,
 
return sprintf(buf, "%u\n", wdd->pretimeout);
 }
-static DEVICE_ATTR_RO(pretimeout);
+
+static ssize_t pretimeout_store(struct device *dev,
+   struct device_attribute *attr, const char *buf, size_t count)
+{
+   int ret;
+   unsigned int val;
+   struct watchdog_device *wdd = dev_get_drvdata(dev);
+   struct watchdog_core_data *wd_data = wdd->wd_data;
+
+   ret = kstrtouint(buf, 0, &val);
+   if (ret)
+   return ret;
+
+   mutex_lock(&wd_data->lock);
+   ret = watchdog_set_pretimeout(wdd, val);
+   mutex_unlock(&wd_data->lock);
+
+   if (!ret)
+   ret = count;
+
+   return ret;
+}
+static DEVICE_ATTR_RW(pretimeout);
 
 static ssize_t identity_show(struct device *dev, struct device_attribute *attr,
char *buf)
-- 
2.25.0