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; }
- 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/
This archive was generated by hypermail 2b29 : Sat Feb 23 2002 - 21:00:43 EST