lkml.org 
[lkml]   [2002]   [Feb]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[Fwd: Patch 2.4.18-pre9-SERIAL:Address in use error, mem based cards]
On Wed, Nov 14, 2001 at 01:02:47PM +0300, Roman Kurakin wrote:

>> I have found a bug. It is in support of serial cards which uses
>> memory for I/O insted of ports. I made a patch for serial.c and fix
>> one place, but probably the problem like this one could be somewhere
>> else.
>

I've got this fish caught in the my serial driver rewrite - the driver
always handles the requesting and freeing of the resources. If it is
unable to request the resources, then you will receive a suitable error
when trying to configure two ports.

Please note that I'm not about to take on maintainence of the current
serial.c driver, except where I spot obvious bugs.

I'd recommend that you pass this one to Marcelo to incorporate (only
after he's got his feet on the ground again. 8)) It looks sensible.

--
Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux
http://www.arm.linux.org.uk/personal/aboutme.html

-------- Original Message --------
Subject: Patch 2.4.18-pre9-SERIAL:Address in use error, mem based cards
Date: Mon, 11 Feb 2002 12:08:07 +0300
From: Roman Kurakin <rik@cronyx.ru>
To: linux-kernel@vger.kernel.org



Hi,

I have found a bug. It is in support of serial cards which uses memory
for I/O
insted of ports. I made a patch for serial.c and fix one place, but
probably the
problem like this one could be somewhere else.

Description:
If you try to use setserial with such cards you will get "Address in
use" (-EADDRINUSE)

Best regards,
Kurakin Roman


--- serial.c.orig Mon Feb 11 11:54:21 2002
+++ serial.c Mon Feb 11 11:55:44 2002
@@ -2084,6 +2084,7 @@
unsigned int i,change_irq,change_port;
int retval = 0;
unsigned long new_port;
+ unsigned long new_mem;

if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
return -EFAULT;
@@ -2094,6 +2095,8 @@
if (HIGH_BITS_OFFSET)
new_port += (unsigned long) new_serial.port_high << HIGH_BITS_OFFSET;

+ new_mem = new_serial.iomem_base;
+
change_irq = new_serial.irq != state->irq;
change_port = (new_port != ((int) state->port)) ||
(new_serial.hub6 != state->hub6);
@@ -2134,6 +2137,7 @@
for (i = 0 ; i < NR_PORTS; i++)
if ((state != &rs_table[i]) &&
(rs_table[i].port == new_port) &&
+ (rs_table[i].iomem_base == new_mem) &&
rs_table[i].type)
return -EADDRINUSE;
}
\
 
 \ /
  Last update: 2005-03-22 13:20    [W:0.026 / U:2.884 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site