All of lore.kernel.org
 help / color / mirror / Atom feed
* speakup bug
@ 2012-03-03 17:18 John G. Heim
  2012-03-03 17:39 ` Alan Cox
  0 siblings, 1 reply; 13+ messages in thread
From: John G. Heim @ 2012-03-03 17:18 UTC (permalink / raw)
  To: linux-kernel

I need help fixing a bug in the driver for serial hardware  speech synths in 
the speakup screen reader. According to the comments in the code, it is in a 
part of the code that is trying to "steal" the serial port.

First it calls request_region and when that fails (it always fails), it 
calls         __release_region(&then it calls release_region again to see if 
__release_region worked. But it never works because the region being 
requested is already taken.

The code in question is in 2 source code files in drivers/staging/speakup. 
It starts in serialio.c on line 38. Here it calls a function named 
synth_request_region which in turn, calls request_region. On line 41 it 
calls __release_region, and on line 42 it calls synth_request_region again. 
The function synth_request_region (which calls request_region) is in a file 
named synth.c. But this code always fails.  Here is a kind of simplified 
version of it...

int error;
struct resource tmp;
tmp .name = "ltlk";
tmps.start = 0x3F8;
tmp.end = 0x3FF;
tmp.flags = IORESOURCE_BUSY;
error = request_resource (&ioport_resource, &tmp);

The error returned is always -16. I looked at the code in kernel/resource.c 
where the request_region function is  defined. It builds a linked list of 
resources with start & end addresses. If you request a region that is 
already within the start-end range of a resource already in the list, it 
returns an error code. But it looks as if the region for a serial port, 
0x3f8 - 0x3ff,  in ioport_resource cannot be reserved because the entire 
range from 0x000 through 0xcf7 is already taken by something named "PCI Bus 
0000:00".  Therefore calling request_resource always fails and the driver 
for the speech synth errors out.

And therefore I can't use my hardware speech synth without modifying the 
kernel code.  If you comment out the line that checks the return code from 
request_region, it works. So you have to modify  the kernel code and compile 
a custom kernel to use a hardware speech synth. That's not such a problem 
for me but it is for a lot of people. Plus, the grml live CD doesn't work 
with hardware speech.  That is a problem for me.

Can anyone tell me how to fix this so it can be patched in the official 
kernel code?



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-03-04 21:04 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-03 17:18 speakup bug John G. Heim
2012-03-03 17:39 ` Alan Cox
2012-03-03 22:01   ` Ted Ts'o
2012-03-04  0:01   ` John G. Heim
2012-03-04  0:18     ` Samuel Thibault
2012-03-04  0:21       ` Samuel Thibault
2012-03-04  0:41         ` Ted Ts'o
2012-03-04  0:43           ` Samuel Thibault
2012-03-04  0:44             ` Samuel Thibault
2012-03-04  1:41             ` Ted Ts'o
2012-03-04  0:26     ` Ted Ts'o
2012-03-04  2:03   ` John G. Heim
2012-03-04 21:06     ` Alan Cox

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.