Serial.c driver problem 2.4.17

Roman Kurakin (rik@cronyx.ru)
Thu, 07 Feb 2002 17:54:12 +0300


This is a multi-part message in MIME format.
--------------090908010502060800080003
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

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

--------------090908010502060800080003
Content-Type: text/plain;
name="serial_2.4.17.pch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="serial_2.4.17.pch"

--- serial.c.orig Fri Dec 21 20:41:54 2001
+++ serial.c Fri Jan 25 15:00:20 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;
}

--------------090908010502060800080003--

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