Re: patch: delay_50ms() in ide-probe.c in 2.2.14

From: Rogier Wolff (R.E.Wolff@BitWizard.nl)
Date: Mon Feb 21 2000 - 04:16:09 EST


 <arijort@valinux.com> wrote:
>
> Simple arithmetic tells me this patch
>
> a) produces same behavior as previous code, and

No.

> b) does it with fewer calculations.
>
> So it has to be good, right?

No. Its bad and doesn't work.

> But then how do we exit the while loop?

In your case: never.

> How does jiffies change?

It is modified from the timer interrupt. It is also marked "volatile".
This means that the compiler is NOT allowed to move the "move jiffies
into a register" outside the while loop.

So, without that volatile the compiler would indeed be allowed to
do something like

        load jiffies, r4 ; jiffies temporarily in r4.
        add r4, 6, r5 ; calculate timeout into r5.

0: sub r4, r5, r0
        jnz 0b

(which if the compiler is really good actually optimizes even futher:
0: jmp 0b
)

but with the volatile attribute on the "jiffies" variable, it will
need to reload "jiffies" every time around the loop:

        load jiffies, r4 ; jiffies temporarily in r4.
        add r4, 6, r5 ; calculate timeout into r5.

0: load jiffies, r4 ; reload jiffies in r4.
        sub r4, r5, r0
        jnz 0b

And the timer interrupt will increment jiffies 100 times
a second, until the thing times out.

                                Roger.

-- 
** R.E.Wolff@BitWizard.nl ** http://www.BitWizard.nl/ ** +31-15-2137555 **
*-- BitWizard writes Linux device drivers for any device you may have! --*
*       Common sense is the collection of                                *
******  prejudices acquired by age eighteen.   -- Albert Einstein ********

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Feb 23 2000 - 21:00:27 EST