mbox series

[*-next,00/18] Remove weird and needless 'return' for void APIs

Message ID 20250221-rmv_return-v1-0-cc8dff275827@quicinc.com (mailing list archive)
Headers show
Series Remove weird and needless 'return' for void APIs | expand

Message

Zijun Hu Feb. 21, 2025, 1:02 p.m. UTC
This patch series is to remove weird and needless 'return' for
void APIs under include/ with the following pattern:

api_header.h:

void api_func_a(...);

static inline void api_func_b(...)
{
	return api_func_a(...);
}

Remove the needless 'return' in api_func_b().

Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
Zijun Hu (18):
      mm/mmu_gather: Remove needless return in void API tlb_remove_page()
      cpu: Remove needless return in void API suspend_enable_secondary_cpus()
      crypto: api - Remove needless return in void API crypto_free_tfm()
      crypto: scomp - Remove needless return in void API crypto_scomp_free_ctx()
      sysfs: Remove needless return in void API sysfs_enable_ns()
      skbuff: Remove needless return in void API consume_skb()
      wifi: mac80211: Remove needless return in void API _ieee80211_hw_set()
      net: sched: Remove needless return in void API qdisc_watchdog_schedule_ns()
      ipv4/igmp: Remove needless return in void API ip_mc_dec_group()
      IB/rdmavt: Remove needless return in void API rvt_mod_retry_timer()
      ratelimit: Remove needless return in void API ratelimit_default_init()
      siox: Remove needless return in void API siox_driver_unregister()
      gpiolib: Remove needless return in two void APIs
      PM: wakeup: Remove needless return in three void APIs
      mfd: db8500-prcmu: Remove needless return in three void APIs
      rhashtable: Remove needless return in three void APIs
      dma-mapping: Remove needless return in five void APIs
      mtd: nand: Do not return void function in void function

 include/asm-generic/tlb.h           |  2 +-
 include/crypto/internal/scompress.h |  2 +-
 include/linux/cpu.h                 |  2 +-
 include/linux/crypto.h              |  2 +-
 include/linux/dma-mapping.h         | 12 ++++++------
 include/linux/gpio.h                |  4 ++--
 include/linux/igmp.h                |  2 +-
 include/linux/mfd/dbx500-prcmu.h    |  6 +++---
 include/linux/mtd/nand.h            | 18 ++++++++++++------
 include/linux/pm_wakeup.h           |  6 +++---
 include/linux/ratelimit.h           |  4 ++--
 include/linux/rhashtable.h          |  6 +++---
 include/linux/siox.h                |  2 +-
 include/linux/skbuff.h              |  2 +-
 include/linux/sysfs.h               |  2 +-
 include/net/mac80211.h              |  2 +-
 include/net/pkt_sched.h             |  2 +-
 include/rdma/rdmavt_qp.h            |  2 +-
 18 files changed, 42 insertions(+), 36 deletions(-)
---
base-commit: 2014c95afecee3e76ca4a56956a936e23283f05b
change-id: 20250221-rmv_return-f1dc82d492f0

Best regards,

Comments

Greg Kroah-Hartman Feb. 21, 2025, 1:12 p.m. UTC | #1
On Fri, Feb 21, 2025 at 05:02:05AM -0800, Zijun Hu wrote:
> This patch series is to remove weird and needless 'return' for
> void APIs under include/ with the following pattern:
> 
> api_header.h:
> 
> void api_func_a(...);
> 
> static inline void api_func_b(...)
> {
> 	return api_func_a(...);
> }
> 
> Remove the needless 'return' in api_func_b().
> 
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> ---
> Zijun Hu (18):
>       mm/mmu_gather: Remove needless return in void API tlb_remove_page()
>       cpu: Remove needless return in void API suspend_enable_secondary_cpus()
>       crypto: api - Remove needless return in void API crypto_free_tfm()
>       crypto: scomp - Remove needless return in void API crypto_scomp_free_ctx()
>       sysfs: Remove needless return in void API sysfs_enable_ns()
>       skbuff: Remove needless return in void API consume_skb()
>       wifi: mac80211: Remove needless return in void API _ieee80211_hw_set()
>       net: sched: Remove needless return in void API qdisc_watchdog_schedule_ns()
>       ipv4/igmp: Remove needless return in void API ip_mc_dec_group()
>       IB/rdmavt: Remove needless return in void API rvt_mod_retry_timer()
>       ratelimit: Remove needless return in void API ratelimit_default_init()
>       siox: Remove needless return in void API siox_driver_unregister()
>       gpiolib: Remove needless return in two void APIs
>       PM: wakeup: Remove needless return in three void APIs
>       mfd: db8500-prcmu: Remove needless return in three void APIs
>       rhashtable: Remove needless return in three void APIs
>       dma-mapping: Remove needless return in five void APIs
>       mtd: nand: Do not return void function in void function

These span loads of different subsystems, please just submit them all to
the different subsystems directly, not as one big patch series which
none of us could take individually.

thanks,

greg k-h
Zijun Hu Feb. 21, 2025, 1:15 p.m. UTC | #2
On 2/21/2025 9:12 PM, Greg Kroah-Hartman wrote:
> These span loads of different subsystems, please just submit them all to
> the different subsystems directly, not as one big patch series which
> none of us could take individually.
> 

sure. will do it as you suggest.
thank you.

> thanks,
> 
> greg k-h
Arnd Bergmann Feb. 21, 2025, 3:40 p.m. UTC | #3
On Fri, Feb 21, 2025, at 14:02, Zijun Hu wrote:
> This patch series is to remove weird and needless 'return' for
> void APIs under include/ with the following pattern:
>
> api_header.h:
>
> void api_func_a(...);
>
> static inline void api_func_b(...)
> {
> 	return api_func_a(...);
> }
>
> Remove the needless 'return' in api_func_b().
>
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>

I have no objection to the changes, but I think you should
describe the motivation for them beyond them being 'weird'.

Do these 'return' statements get in the way of some other
work you are doing? Is there a compiler warning you want
to enable to ensure they don't come back? Is this all of
the instances in the kernel or just the ones you found by
inspection?

    Arnd
Stephen Hemminger Feb. 21, 2025, 7 p.m. UTC | #4
On Fri, 21 Feb 2025 05:02:05 -0800
Zijun Hu <quic_zijuhu@quicinc.com> wrote:

> This patch series is to remove weird and needless 'return' for
> void APIs under include/ with the following pattern:
> 
> api_header.h:
> 
> void api_func_a(...);
> 
> static inline void api_func_b(...)
> {
> 	return api_func_a(...);
> }
> 
> Remove the needless 'return' in api_func_b().
> 
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> ---
> Zijun Hu (18):
>       mm/mmu_gather: Remove needless return in void API tlb_remove_page()
>       cpu: Remove needless return in void API suspend_enable_secondary_cpus()
>       crypto: api - Remove needless return in void API crypto_free_tfm()
>       crypto: scomp - Remove needless return in void API crypto_scomp_free_ctx()
>       sysfs: Remove needless return in void API sysfs_enable_ns()
>       skbuff: Remove needless return in void API consume_skb()
>       wifi: mac80211: Remove needless return in void API _ieee80211_hw_set()
>       net: sched: Remove needless return in void API qdisc_watchdog_schedule_ns()
>       ipv4/igmp: Remove needless return in void API ip_mc_dec_group()
>       IB/rdmavt: Remove needless return in void API rvt_mod_retry_timer()
>       ratelimit: Remove needless return in void API ratelimit_default_init()
>       siox: Remove needless return in void API siox_driver_unregister()
>       gpiolib: Remove needless return in two void APIs
>       PM: wakeup: Remove needless return in three void APIs
>       mfd: db8500-prcmu: Remove needless return in three void APIs
>       rhashtable: Remove needless return in three void APIs
>       dma-mapping: Remove needless return in five void APIs
>       mtd: nand: Do not return void function in void function
> 
>  include/asm-generic/tlb.h           |  2 +-
>  include/crypto/internal/scompress.h |  2 +-
>  include/linux/cpu.h                 |  2 +-
>  include/linux/crypto.h              |  2 +-
>  include/linux/dma-mapping.h         | 12 ++++++------
>  include/linux/gpio.h                |  4 ++--
>  include/linux/igmp.h                |  2 +-
>  include/linux/mfd/dbx500-prcmu.h    |  6 +++---
>  include/linux/mtd/nand.h            | 18 ++++++++++++------
>  include/linux/pm_wakeup.h           |  6 +++---
>  include/linux/ratelimit.h           |  4 ++--
>  include/linux/rhashtable.h          |  6 +++---
>  include/linux/siox.h                |  2 +-
>  include/linux/skbuff.h              |  2 +-
>  include/linux/sysfs.h               |  2 +-
>  include/net/mac80211.h              |  2 +-
>  include/net/pkt_sched.h             |  2 +-
>  include/rdma/rdmavt_qp.h            |  2 +-
>  18 files changed, 42 insertions(+), 36 deletions(-)
> ---
> base-commit: 2014c95afecee3e76ca4a56956a936e23283f05b
> change-id: 20250221-rmv_return-f1dc82d492f0
> 
> Best regards,

Is this something that could be done with a coccinelle script?
Johannes Berg Feb. 21, 2025, 7:36 p.m. UTC | #5
On Fri, 2025-02-21 at 11:00 -0800, Stephen Hemminger wrote:
> 
> Is this something that could be done with a coccinelle script?
> 

Almost enough to do this:

@@
identifier fn;
expression E;
@@
void fn(...)
{
...
-return
E;
}


It takes a long time to run though, and does some wrong things as well:
if the return is in the middle of the function, it still matches and
removes it erroneously.

johannes
Zijun Hu Feb. 22, 2025, 10:38 a.m. UTC | #6
On 2025/2/21 23:40, Arnd Bergmann wrote:
>> This patch series is to remove weird and needless 'return' for
>> void APIs under include/ with the following pattern:
>>
>> api_header.h:
>>
>> void api_func_a(...);
>>
>> static inline void api_func_b(...)
>> {
>> 	return api_func_a(...);
>> }
>>
>> Remove the needless 'return' in api_func_b().
>>
>> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> I have no objection to the changes, but I think you should
> describe the motivation for them beyond them being 'weird'.
> 

yes. C spec such as C17 have this description about return
statement:

6.8.6.4:
A return statement with an expression shall not appear in a function
whose return type is void. A return statement without an expression
shall only appear in a function whose return type is void.

do we need to treat below return statement as bad code style ?

void api_func_a(...);
void api_func_b(...) {
...
	return api_func_a(...); // return void function in void func
...
}

> Do these 'return' statements get in the way of some other
> work you are doing? Is there a compiler warning you want
> to enable to ensure they don't come back? Is this all of
> the instances in the kernel or just the ones you found by
> inspection?

actually, i find this weird return usage by reading code by accident
in driver core firstly:
https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git/commit/?h=driver-core-testing&id=a44073c28bc6d4118891d61e31c9fa9dc4333dc0

then i check folder include/ and work out this patch series.

not sure if there are still such instances in current kernel tree.
Zijun Hu Feb. 22, 2025, 10:51 a.m. UTC | #7
On 2025/2/22 03:36, Johannes Berg wrote:
> On Fri, 2025-02-21 at 11:00 -0800, Stephen Hemminger wrote:
>> Is this something that could be done with a coccinelle script?
>>
> Almost enough to do this:
> 
> @@
> identifier fn;
> expression E;
> @@
> void fn(...)
> {
> ...
> -return
> E;
> }
> 
> 
> It takes a long time to run though, and does some wrong things as well:
> if the return is in the middle of the function, it still matches and
> removes it erroneously.

if return is in the middle, we may need to convert the return statement
in to two statement as [PATCH 18/18] does:
https://lore.kernel.org/all/20250221-rmv_return-v1-18-cc8dff275827@quicinc.com/

namely, Convert  "return func(...);" to "func(...); return;"

C spec such as C17 have this description about return
statement:
6.8.6.4:
A return statement with an expression shall not appear in a function
whose return type is void. A return statement without an expression
shall only appear in a function whose return type is void.


so, do we need to treat "return void function in void function" as
bad code style and make coccinelle script check this bad usage?