:I would like to see "the PIIX problem" caught on camera, personally.  
:We're aware of one errata for it already, and we work around it.  If 
:there's another problem, or ideally if someone has some relatively quick 
:code to test it, that would be much better.

    If the _safe version works I'll reinstrument the code to catch and
    print the problem counter values.

    Is the ACPI on a 16 or 32 bit bus?  Idiot chip designers have made
    'non-atomic counter carry' bugs endemic in the PC world.  The standard
    solution is to just read the counter twice and and loop if the top
    17 bits have changed in order to avoid the carry problem entirely.
    Something like this:

        u_int32_t u1;
        u_int32_t u2;

        u1 = TIMER_READ;
        u2 = TIMER_READ;
        while ((u1 ^ u2) & 0xFFFF8000) {
            u1 = u2;
            u2 = TIMER_READ;

    The solution you have in there will theoretically work as long as the
    16-bit carry itself is synchronized (which it probably is), but it should
    be possible to do it with only two timer reads in the best-case instead of

    I'll investigate further.

                                        Matthew Dillon 
                                        <[EMAIL PROTECTED]>

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to