Rui Sousa wrote:
> 
> Hi,
> 
> I'm posting this again since I didn't get an answer for the problem
> and also because now I have better information.
> 
> As the subject states the problem appeared with kernel 2.3.43,
> and it seems to affect SMP machines only (well at least no report
> yet involving UP).
> 
> Basically a task queued in the tq_immediate queue is never run
> and seems to stay in the queue forever. I debugged the driver side

The problem was traced to a corruption in the tasklet list and Jeff Defouw
found the real reason:

>Subject: Re: [Emu10k1-devel] Unable to play any sound through dsp
>   Date: Sat, 26 Feb 2000 06:13:54 -0500 (EST)
>   From: Jeff DeFouw <[EMAIL PROTECTED]>
>    To: Rui Sousa <[EMAIL PROTECTED]>
>    CC: [EMAIL PROTECTED]
>
>
>Solution found.  It's not a kernel bug after all.  We need to add the CPU
>type to the CFLAGS somehow.  "-DCPU=686" in my case.  On 586 and 686 CPU
>types the L1_CACHE_BYTES is set to 32 instead of 16, which directly sets
>SMP_CACHE_BYTES.  SMP_CACHE_BYTES is used for the per-cpu tasklet list
>byte alignment.  On SMP 586 and 686 systems only the first tasklet list
>was being aligned correctly, so when cpu 0 happened to be used there were
>no problems.  Once the cpu 1 tasklet list was used, the emu10k1 module
>wrote to the wrong address and bad things happened.  The compiler adjusted
>the address for the wrong array increment for the byte alignment.  The
>driver's working great now on my system.  Now to figure out the best way
>to get the kernel source's -DCPU=xxx ...
>
>--
>Jeff DeFouw <[EMAIL PROTECTED]>


So I would suggest either always use a 32 bytes alignment for the tasklet list
or state in the config help file that the 586 option is no longer forward
compatible in SMP systems.

Rui Sousa

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to