diff mbox series

[v2,1/2] jiffies: Define secs_to_jiffies()

Message ID 20241028-open-coded-timeouts-v2-1-c7294bb845a1@linux.microsoft.com (mailing list archive)
State Superseded
Headers show
Series Converge on secs_to_jiffies() | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/CheckPatch success CheckPatch PASS
tedd_an/GitLint success Gitlint PASS
tedd_an/SubjectPrefix fail "Bluetooth: " prefix is not specified in the subject
tedd_an/BuildKernel success BuildKernel PASS
tedd_an/CheckAllWarning success CheckAllWarning PASS
tedd_an/CheckSparse warning CheckSparse WARNING net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):

Commit Message

Easwar Hariharan Oct. 28, 2024, 7:11 p.m. UTC
secs_to_jiffies() is defined in hci_event.c and cannot be reused by
other call sites. Hoist it into the core code to allow conversion of the
~1150 usages of msecs_to_jiffies() that either:
- use a multiplier value of 1000 or equivalently MSEC_PER_SEC, or
- have timeouts that are denominated in seconds (i.e. end in 000)

This will also allow conversion of yet more sites that use (sec * HZ)
directly, and improve their readability.

TO: "K. Y. Srinivasan" <kys@microsoft.com>
TO: Haiyang Zhang <haiyangz@microsoft.com>
TO: Wei Liu <wei.liu@kernel.org>
TO: Dexuan Cui <decui@microsoft.com>
TO: linux-hyperv@vger.kernel.org
TO: Anna-Maria Behnsen <anna-maria@linutronix.de>
TO: Thomas Gleixner <tglx@linutronix.de>
TO: Geert Uytterhoeven <geert@linux-m68k.org>
TO: Marcel Holtmann <marcel@holtmann.org>
TO: Johan Hedberg <johan.hedberg@gmail.com>
TO: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
TO: linux-bluetooth@vger.kernel.org
TO: linux-kernel@vger.kernel.org
Suggested-by: Michael Kelley <mhklinux@outlook.com>
Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com>
---
 include/linux/jiffies.h   | 2 ++
 net/bluetooth/hci_event.c | 2 --
 2 files changed, 2 insertions(+), 2 deletions(-)

Comments

Luiz Augusto von Dentz Oct. 28, 2024, 7:25 p.m. UTC | #1
Hi Easwar,

On Mon, Oct 28, 2024 at 3:11 PM Easwar Hariharan
<eahariha@linux.microsoft.com> wrote:
>
> secs_to_jiffies() is defined in hci_event.c and cannot be reused by
> other call sites. Hoist it into the core code to allow conversion of the
> ~1150 usages of msecs_to_jiffies() that either:
> - use a multiplier value of 1000 or equivalently MSEC_PER_SEC, or
> - have timeouts that are denominated in seconds (i.e. end in 000)
>
> This will also allow conversion of yet more sites that use (sec * HZ)
> directly, and improve their readability.
>
> TO: "K. Y. Srinivasan" <kys@microsoft.com>
> TO: Haiyang Zhang <haiyangz@microsoft.com>
> TO: Wei Liu <wei.liu@kernel.org>
> TO: Dexuan Cui <decui@microsoft.com>
> TO: linux-hyperv@vger.kernel.org
> TO: Anna-Maria Behnsen <anna-maria@linutronix.de>
> TO: Thomas Gleixner <tglx@linutronix.de>
> TO: Geert Uytterhoeven <geert@linux-m68k.org>
> TO: Marcel Holtmann <marcel@holtmann.org>
> TO: Johan Hedberg <johan.hedberg@gmail.com>
> TO: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> TO: linux-bluetooth@vger.kernel.org
> TO: linux-kernel@vger.kernel.org
> Suggested-by: Michael Kelley <mhklinux@outlook.com>
> Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com>
> ---
>  include/linux/jiffies.h   | 2 ++
>  net/bluetooth/hci_event.c | 2 --
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
> index 1220f0fbe5bf..e5256bb5f851 100644
> --- a/include/linux/jiffies.h
> +++ b/include/linux/jiffies.h
> @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
>         }
>  }
>
> +#define secs_to_jiffies(_secs) ((_secs) * HZ)
> +
>  extern unsigned long __usecs_to_jiffies(const unsigned int u);
>  #if !(USEC_PER_SEC % HZ)
>  static inline unsigned long _usecs_to_jiffies(const unsigned int u)
> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> index 0bbad90ddd6f..7b35c58bbbeb 100644
> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -42,8 +42,6 @@
>  #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
>                  "\x00\x00\x00\x00\x00\x00\x00\x00"
>
> -#define secs_to_jiffies(_secs) msecs_to_jiffies((_secs) * 1000)
> -
>  /* Handle HCI Event packets */
>
>  static void *hci_ev_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,
>
> --
> 2.34.1
>

Reviewed-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thomas Gleixner Oct. 29, 2024, 4:08 p.m. UTC | #2
On Mon, Oct 28 2024 at 19:11, Easwar Hariharan wrote:
> diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
> index 1220f0fbe5bf..e5256bb5f851 100644
> --- a/include/linux/jiffies.h
> +++ b/include/linux/jiffies.h
> @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
>  	}
>  }
>  
> +#define secs_to_jiffies(_secs) ((_secs) * HZ)

Can you please make that a static inline, as there is no need for macro
magic like in the other conversions, and add a kernel doc comment which
documents this?

Thanks,

        tglx
Geert Uytterhoeven Oct. 29, 2024, 4:22 p.m. UTC | #3
Hi Thomas,

On Tue, Oct 29, 2024 at 5:08 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> On Mon, Oct 28 2024 at 19:11, Easwar Hariharan wrote:
> > diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
> > index 1220f0fbe5bf..e5256bb5f851 100644
> > --- a/include/linux/jiffies.h
> > +++ b/include/linux/jiffies.h
> > @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
> >       }
> >  }
> >
> > +#define secs_to_jiffies(_secs) ((_secs) * HZ)
>
> Can you please make that a static inline, as there is no need for macro
> magic like in the other conversions, and add a kernel doc comment which
> documents this?

Note that a static inline means it cannot be used in e.g. struct initializers,
which are substantial users of  "<value> * HZ".

Gr{oetje,eeting}s,

                        Geert
Thomas Gleixner Oct. 29, 2024, 5:25 p.m. UTC | #4
On Tue, Oct 29 2024 at 17:22, Geert Uytterhoeven wrote:
> On Tue, Oct 29, 2024 at 5:08 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>> On Mon, Oct 28 2024 at 19:11, Easwar Hariharan wrote:
>> > diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
>> > index 1220f0fbe5bf..e5256bb5f851 100644
>> > --- a/include/linux/jiffies.h
>> > +++ b/include/linux/jiffies.h
>> > @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
>> >       }
>> >  }
>> >
>> > +#define secs_to_jiffies(_secs) ((_secs) * HZ)
>>
>> Can you please make that a static inline, as there is no need for macro
>> magic like in the other conversions, and add a kernel doc comment which
>> documents this?
>
> Note that a static inline means it cannot be used in e.g. struct initializers,
> which are substantial users of  "<value> * HZ".

Bah. That wants to be mentioned in the change log then.

Still the macro should be documented.

Thanks,

        tglx
Easwar Hariharan Oct. 29, 2024, 9:35 p.m. UTC | #5
On 10/29/2024 10:25 AM, Thomas Gleixner wrote:
> On Tue, Oct 29 2024 at 17:22, Geert Uytterhoeven wrote:
>> On Tue, Oct 29, 2024 at 5:08 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>>> On Mon, Oct 28 2024 at 19:11, Easwar Hariharan wrote:
>>>> diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
>>>> index 1220f0fbe5bf..e5256bb5f851 100644
>>>> --- a/include/linux/jiffies.h
>>>> +++ b/include/linux/jiffies.h
>>>> @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
>>>>       }
>>>>  }
>>>>
>>>> +#define secs_to_jiffies(_secs) ((_secs) * HZ)
>>>
>>> Can you please make that a static inline, as there is no need for macro
>>> magic like in the other conversions, and add a kernel doc comment which
>>> documents this?
>>
>> Note that a static inline means it cannot be used in e.g. struct initializers,
>> which are substantial users of  "<value> * HZ".
> 
> Bah. That wants to be mentioned in the change log then.
> 
> Still the macro should be documented.
> 
> Thanks,
> 
>         tglx

Thanks for the review, I'll add a kernel doc in v3 and mention the
limitations of an inline function.

- Easwar
David Laight Nov. 6, 2024, 10:19 p.m. UTC | #6
From: Thomas Gleixner
> Sent: 29 October 2024 17:25
> 
> On Tue, Oct 29 2024 at 17:22, Geert Uytterhoeven wrote:
> > On Tue, Oct 29, 2024 at 5:08 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >> On Mon, Oct 28 2024 at 19:11, Easwar Hariharan wrote:
> >> > diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
> >> > index 1220f0fbe5bf..e5256bb5f851 100644
> >> > --- a/include/linux/jiffies.h
> >> > +++ b/include/linux/jiffies.h
> >> > @@ -526,6 +526,8 @@ static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
> >> >       }
> >> >  }
> >> >
> >> > +#define secs_to_jiffies(_secs) ((_secs) * HZ)
> >>
> >> Can you please make that a static inline, as there is no need for macro
> >> magic like in the other conversions, and add a kernel doc comment which
> >> documents this?
> >
> > Note that a static inline means it cannot be used in e.g. struct initializers,
> > which are substantial users of  "<value> * HZ".
> 
> Bah. That wants to be mentioned in the change log then.
> 
> Still the macro should be documented.

I was wondering if it really had any purpose at all.
It just obfuscates code, doesn't even make it smaller.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Thomas Gleixner Nov. 6, 2024, 11:55 p.m. UTC | #7
On Wed, Nov 06 2024 at 22:19, David Laight wrote:
> From: Thomas Gleixner
>> Still the macro should be documented.
>
> I was wondering if it really had any purpose at all.
> It just obfuscates code, doesn't even make it smaller.

What is obfuscated here?

secs_to_jiffies() is clearly describing what this is about, while 5 * HZ
is not. Nothing in a driver has to care about the underlying conversion
of a time delta expressed in SI units to a jiffies based time delta.

Thanks,

        tglx
diff mbox series

Patch

diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 1220f0fbe5bf..e5256bb5f851 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -526,6 +526,8 @@  static __always_inline unsigned long msecs_to_jiffies(const unsigned int m)
 	}
 }
 
+#define secs_to_jiffies(_secs) ((_secs) * HZ)
+
 extern unsigned long __usecs_to_jiffies(const unsigned int u);
 #if !(USEC_PER_SEC % HZ)
 static inline unsigned long _usecs_to_jiffies(const unsigned int u)
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 0bbad90ddd6f..7b35c58bbbeb 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -42,8 +42,6 @@ 
 #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
 		 "\x00\x00\x00\x00\x00\x00\x00\x00"
 
-#define secs_to_jiffies(_secs) msecs_to_jiffies((_secs) * 1000)
-
 /* Handle HCI Event packets */
 
 static void *hci_ev_skb_pull(struct hci_dev *hdev, struct sk_buff *skb,