* [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout
@ 2026-01-27 15:40 Madhumitha Sundar
2026-01-28 11:55 ` Dan Carpenter
0 siblings, 1 reply; 5+ messages in thread
From: Madhumitha Sundar @ 2026-01-27 15:40 UTC (permalink / raw)
To: sudipm.mukherjee, teddy.wang, gregkh
Cc: linux-fbdev, linux-staging, linux-kernel, Madhumitha Sundar
The hardware wait loop in hw_sm750_de_wait used a hardcoded loop
counter (0x10000000), which depends on CPU speed and is unreliable.
Replace the loop counter with a jiffies-based timeout (1 second)
using time_before(). This ensures consistent delays across architectures.
Signed-off-by: Madhumitha Sundar <madhuananda18@gmail.com>
---
Changes in v2:
- Switched from loop counter to jiffies + cpu_relax() as requested by Greg KH.
---
drivers/staging/sm750fb/sm750_hw.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/sm750_hw.c
index ce46f240c..b24d27a77 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -523,19 +523,32 @@ int hw_sm750le_de_wait(void)
int hw_sm750_de_wait(void)
{
- int i = 0x10000000;
+ /* Wait for 1 second (HZ) */
+ unsigned long timeout = jiffies + HZ;
unsigned int mask = SYSTEM_CTRL_DE_STATUS_BUSY |
SYSTEM_CTRL_DE_FIFO_EMPTY |
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY;
+ unsigned int val;
- while (i--) {
- unsigned int val = peek32(SYSTEM_CTRL);
+ /* Run while Current Time is BEFORE the Deadline */
+ while (time_before(jiffies, timeout)) {
+ val = peek32(SYSTEM_CTRL);
+ /* If Not Busy (0) AND Buffers Empty (1), we are good */
if ((val & mask) ==
(SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
return 0;
+
+ /* Polite pause to save power */
+ cpu_relax();
}
- /* timeout error */
+
+ /* Final check in case we succeeded at the last millisecond */
+ val = peek32(SYSTEM_CTRL);
+ if ((val & mask) ==
+ (SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
+ return 0;
+
return -1;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout
2026-01-27 16:48 [PATCH v2] staging: sm750fb: make fix_id array fully const Madhumitha Sundar
@ 2026-01-27 16:48 ` Madhumitha Sundar
2026-01-28 5:57 ` Greg KH
0 siblings, 1 reply; 5+ messages in thread
From: Madhumitha Sundar @ 2026-01-27 16:48 UTC (permalink / raw)
To: gregkh; +Cc: linux-staging, linux-kernel, Madhumitha Sundar
The hardware wait loop in hw_sm750_de_wait used a hardcoded loop
counter (0x10000000), which depends on CPU speed and is unreliable.
Replace the loop counter with a jiffies-based timeout (1 second)
using time_before(). This ensures consistent delays across architectures.
Signed-off-by: Madhumitha Sundar <madhuananda18@gmail.com>
---
Changes in v2:
- Switched from loop counter to jiffies + cpu_relax() as requested by Greg KH.
---
drivers/staging/sm750fb/sm750_hw.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/sm750_hw.c
index ce46f240c..b24d27a77 100644
--- a/drivers/staging/sm750fb/sm750_hw.c
+++ b/drivers/staging/sm750fb/sm750_hw.c
@@ -523,19 +523,32 @@ int hw_sm750le_de_wait(void)
int hw_sm750_de_wait(void)
{
- int i = 0x10000000;
+ /* Wait for 1 second (HZ) */
+ unsigned long timeout = jiffies + HZ;
unsigned int mask = SYSTEM_CTRL_DE_STATUS_BUSY |
SYSTEM_CTRL_DE_FIFO_EMPTY |
SYSTEM_CTRL_DE_MEM_FIFO_EMPTY;
+ unsigned int val;
- while (i--) {
- unsigned int val = peek32(SYSTEM_CTRL);
+ /* Run while Current Time is BEFORE the Deadline */
+ while (time_before(jiffies, timeout)) {
+ val = peek32(SYSTEM_CTRL);
+ /* If Not Busy (0) AND Buffers Empty (1), we are good */
if ((val & mask) ==
(SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
return 0;
+
+ /* Polite pause to save power */
+ cpu_relax();
}
- /* timeout error */
+
+ /* Final check in case we succeeded at the last millisecond */
+ val = peek32(SYSTEM_CTRL);
+ if ((val & mask) ==
+ (SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
+ return 0;
+
return -1;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout
2026-01-27 16:48 ` [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout Madhumitha Sundar
@ 2026-01-28 5:57 ` Greg KH
[not found] ` <CAPn_1uMTAJYCWE08qd-abag77pDUu52yFsNu_x5=zGPL5b8n+g@mail.gmail.com>
0 siblings, 1 reply; 5+ messages in thread
From: Greg KH @ 2026-01-28 5:57 UTC (permalink / raw)
To: Madhumitha Sundar; +Cc: linux-staging, linux-kernel
On Tue, Jan 27, 2026 at 04:48:16PM +0000, Madhumitha Sundar wrote:
> The hardware wait loop in hw_sm750_de_wait used a hardcoded loop
> counter (0x10000000), which depends on CPU speed and is unreliable.
>
> Replace the loop counter with a jiffies-based timeout (1 second)
> using time_before(). This ensures consistent delays across architectures.
>
> Signed-off-by: Madhumitha Sundar <madhuananda18@gmail.com>
> ---
> Changes in v2:
> - Switched from loop counter to jiffies + cpu_relax() as requested by Greg KH.
> ---
> drivers/staging/sm750fb/sm750_hw.c | 21 +++++++++++++++++----
> 1 file changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/staging/sm750fb/sm750_hw.c b/drivers/staging/sm750fb/sm750_hw.c
> index ce46f240c..b24d27a77 100644
> --- a/drivers/staging/sm750fb/sm750_hw.c
> +++ b/drivers/staging/sm750fb/sm750_hw.c
> @@ -523,19 +523,32 @@ int hw_sm750le_de_wait(void)
>
> int hw_sm750_de_wait(void)
> {
> - int i = 0x10000000;
> + /* Wait for 1 second (HZ) */
No need for a comment, right?
> + unsigned long timeout = jiffies + HZ;
Why is a variable needed?
And are you sure 1 second is ok? How short was the original timeout?
> unsigned int mask = SYSTEM_CTRL_DE_STATUS_BUSY |
> SYSTEM_CTRL_DE_FIFO_EMPTY |
> SYSTEM_CTRL_DE_MEM_FIFO_EMPTY;
> + unsigned int val;
Why move this?
> - while (i--) {
> - unsigned int val = peek32(SYSTEM_CTRL);
> + /* Run while Current Time is BEFORE the Deadline */
Run what?
> + while (time_before(jiffies, timeout)) {
> + val = peek32(SYSTEM_CTRL);
>
> + /* If Not Busy (0) AND Buffers Empty (1), we are good */
> if ((val & mask) ==
> (SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
> return 0;
> +
> + /* Polite pause to save power */
> + cpu_relax();
Are you sure you can sleep here?
> }
> - /* timeout error */
> +
> + /* Final check in case we succeeded at the last millisecond */
I do not understand this, why would this matter?
> + val = peek32(SYSTEM_CTRL);
> + if ((val & mask) ==
> + (SYSTEM_CTRL_DE_FIFO_EMPTY | SYSTEM_CTRL_DE_MEM_FIFO_EMPTY))
> + return 0;
> +
Was this tested on real hardware?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout
[not found] ` <CAPn_1uMTAJYCWE08qd-abag77pDUu52yFsNu_x5=zGPL5b8n+g@mail.gmail.com>
@ 2026-01-28 10:31 ` Greg KH
0 siblings, 0 replies; 5+ messages in thread
From: Greg KH @ 2026-01-28 10:31 UTC (permalink / raw)
To: MADHU ANAND; +Cc: linux-staging, linux-kernel
On Wed, Jan 28, 2026 at 10:18:07AM +0000, MADHU ANAND wrote:
> My apologies for the private reply and the top-posting. I am resending my
> responses to the list now and will ensure correct formatting going forward.
>
> You're absolutely right. I over-engineered the implementation and added
> redundant comments that shouldn't be there.
>
> To address your points:
>
> 1.
Sorry, I don't have much context here, you seem to have removed my
responses and the original patch entirely :(
Remember, some of us get over 1000 emails a day and context in an email
matters to know what is going on.
> I used 1 second (HZ) as a safe upper bound, but since I don't have the
> hardware to verify the original loop's speed, this was an assumption.
If you are changing timing loops, testing on the real hardware is
essencial. Please don't do any sort of logic changes like this without
being able to do so.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout
2026-01-27 15:40 [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout Madhumitha Sundar
@ 2026-01-28 11:55 ` Dan Carpenter
0 siblings, 0 replies; 5+ messages in thread
From: Dan Carpenter @ 2026-01-28 11:55 UTC (permalink / raw)
To: Madhumitha Sundar
Cc: sudipm.mukherjee, teddy.wang, gregkh, linux-fbdev, linux-staging,
linux-kernel
On Tue, Jan 27, 2026 at 03:40:56PM +0000, Madhumitha Sundar wrote:
> The hardware wait loop in hw_sm750_de_wait used a hardcoded loop
> counter (0x10000000), which depends on CPU speed and is unreliable.
>
> Replace the loop counter with a jiffies-based timeout (1 second)
> using time_before(). This ensures consistent delays across architectures.
>
> Signed-off-by: Madhumitha Sundar <madhuananda18@gmail.com>
> ---
This feels like an AI patch? AI patches need to be disclosed.
Anyway, we couldn't merge something like this without testing.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-01-28 11:55 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-27 15:40 [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout Madhumitha Sundar
2026-01-28 11:55 ` Dan Carpenter
-- strict thread matches above, loose matches on Subject: below --
2026-01-27 16:48 [PATCH v2] staging: sm750fb: make fix_id array fully const Madhumitha Sundar
2026-01-27 16:48 ` [PATCH v2] staging: sm750fb: replace magic number with jiffies timeout Madhumitha Sundar
2026-01-28 5:57 ` Greg KH
[not found] ` <CAPn_1uMTAJYCWE08qd-abag77pDUu52yFsNu_x5=zGPL5b8n+g@mail.gmail.com>
2026-01-28 10:31 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox