Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-10 Thread Karol Kozimor
Thus wrote Russell King:
> Ok, here's the patch.  Please test and let me know if it resolves your
> problem.  Thanks.

Oh, I thought I did reply to your previous mail. In case you didn't get it,
yes, the patch fixes the problem.
Thanks,

-- 
Karol 'sziwan' Kozimor
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-10 Thread Russell King
On Tue, Mar 01, 2005 at 11:37:20PM +, Russell King wrote:
> On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
> > I've finally got around to test latest kernels and managed to find a bug in 
> > the serial subsystem, which happens during suspend.
> 
> Yes, serial_cs is claiming that we don't have a device associated with
> the port, so we're treating it as a legacy port.  However, serial_cs is
> implementing the suspend/resume methods.  This is wrong, since that
> means the port will be suspended twice, and hence causes this bug.

Ok, here's the patch.  Please test and let me know if it resolves your
problem.  Thanks.

diff -up -x BitKeeper -x ChangeSet -x SCCS -x _xlk -x *.orig -x *.rej 
orig/drivers/serial/serial_cs.c linux/drivers/serial/serial_cs.c
--- orig/drivers/serial/serial_cs.c Sun Feb  6 11:38:41 2005
+++ linux/drivers/serial/serial_cs.cSat Mar  5 14:09:53 2005
@@ -289,7 +289,8 @@ static void serial_detach(dev_link_t * l
 
 /**/
 
-static int setup_serial(struct serial_info * info, kio_addr_t iobase, int irq)
+static int setup_serial(client_handle_t handle, struct serial_info * info,
+   kio_addr_t iobase, int irq)
 {
struct uart_port port;
int line;
@@ -299,6 +300,7 @@ static int setup_serial(struct serial_in
port.irq = irq;
port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
port.uartclk = 1843200;
+   port.dev = _to_dev(handle);
if (buggy_uart)
port.flags |= UPF_BUGGY_UART;
line = serial8250_register_port();
@@ -376,7 +378,7 @@ static int simple_config(dev_link_t *lin
info->slave = 1;
}
if (info->slave)
-   return setup_serial(info, port, config.AssignedIRQ);
+   return setup_serial(handle, info, port, 
config.AssignedIRQ);
}
link->conf.Vcc = config.Vcc;
 
@@ -451,7 +453,7 @@ next_entry:
return -1;
}
 
-   return setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+   return setup_serial(handle, info, link->io.BasePort1, 
link->irq.AssignedIRQ);
 }
 
 static int multi_config(dev_link_t * link)
@@ -546,21 +548,21 @@ static int multi_config(dev_link_t * lin
   8 registers are for the UART, the others are extra registers */
if (info->manfid == MANFID_OXSEMI) {
if (cf->index == 1 || cf->index == 3) {
-   setup_serial(info, base2, link->irq.AssignedIRQ);
+   setup_serial(handle, info, base2, 
link->irq.AssignedIRQ);
outb(12, link->io.BasePort1 + 1);
} else {
-   setup_serial(info, link->io.BasePort1, 
link->irq.AssignedIRQ);
+   setup_serial(handle, info, link->io.BasePort1, 
link->irq.AssignedIRQ);
outb(12, base2 + 1);
}
return 0;
}
 
-   setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+   setup_serial(handle, info, link->io.BasePort1, link->irq.AssignedIRQ);
/* The Nokia cards are not really multiport cards */
if (info->manfid == MANFID_NOKIA)
return 0;
for (i = 0; i < info->multi - 1; i++)
-   setup_serial(info, base2 + (8 * i), link->irq.AssignedIRQ);
+   setup_serial(handle, info, base2 + (8 * i), 
link->irq.AssignedIRQ);
 
return 0;
 }


-- 
Russell King
 Linux kernel2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-10 Thread Russell King
On Tue, Mar 01, 2005 at 11:37:20PM +, Russell King wrote:
 On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
  I've finally got around to test latest kernels and managed to find a bug in 
  the serial subsystem, which happens during suspend.
 
 Yes, serial_cs is claiming that we don't have a device associated with
 the port, so we're treating it as a legacy port.  However, serial_cs is
 implementing the suspend/resume methods.  This is wrong, since that
 means the port will be suspended twice, and hence causes this bug.

Ok, here's the patch.  Please test and let me know if it resolves your
problem.  Thanks.

diff -up -x BitKeeper -x ChangeSet -x SCCS -x _xlk -x *.orig -x *.rej 
orig/drivers/serial/serial_cs.c linux/drivers/serial/serial_cs.c
--- orig/drivers/serial/serial_cs.c Sun Feb  6 11:38:41 2005
+++ linux/drivers/serial/serial_cs.cSat Mar  5 14:09:53 2005
@@ -289,7 +289,8 @@ static void serial_detach(dev_link_t * l
 
 /**/
 
-static int setup_serial(struct serial_info * info, kio_addr_t iobase, int irq)
+static int setup_serial(client_handle_t handle, struct serial_info * info,
+   kio_addr_t iobase, int irq)
 {
struct uart_port port;
int line;
@@ -299,6 +300,7 @@ static int setup_serial(struct serial_in
port.irq = irq;
port.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_SHARE_IRQ;
port.uartclk = 1843200;
+   port.dev = handle_to_dev(handle);
if (buggy_uart)
port.flags |= UPF_BUGGY_UART;
line = serial8250_register_port(port);
@@ -376,7 +378,7 @@ static int simple_config(dev_link_t *lin
info-slave = 1;
}
if (info-slave)
-   return setup_serial(info, port, config.AssignedIRQ);
+   return setup_serial(handle, info, port, 
config.AssignedIRQ);
}
link-conf.Vcc = config.Vcc;
 
@@ -451,7 +453,7 @@ next_entry:
return -1;
}
 
-   return setup_serial(info, link-io.BasePort1, link-irq.AssignedIRQ);
+   return setup_serial(handle, info, link-io.BasePort1, 
link-irq.AssignedIRQ);
 }
 
 static int multi_config(dev_link_t * link)
@@ -546,21 +548,21 @@ static int multi_config(dev_link_t * lin
   8 registers are for the UART, the others are extra registers */
if (info-manfid == MANFID_OXSEMI) {
if (cf-index == 1 || cf-index == 3) {
-   setup_serial(info, base2, link-irq.AssignedIRQ);
+   setup_serial(handle, info, base2, 
link-irq.AssignedIRQ);
outb(12, link-io.BasePort1 + 1);
} else {
-   setup_serial(info, link-io.BasePort1, 
link-irq.AssignedIRQ);
+   setup_serial(handle, info, link-io.BasePort1, 
link-irq.AssignedIRQ);
outb(12, base2 + 1);
}
return 0;
}
 
-   setup_serial(info, link-io.BasePort1, link-irq.AssignedIRQ);
+   setup_serial(handle, info, link-io.BasePort1, link-irq.AssignedIRQ);
/* The Nokia cards are not really multiport cards */
if (info-manfid == MANFID_NOKIA)
return 0;
for (i = 0; i  info-multi - 1; i++)
-   setup_serial(info, base2 + (8 * i), link-irq.AssignedIRQ);
+   setup_serial(handle, info, base2 + (8 * i), 
link-irq.AssignedIRQ);
 
return 0;
 }


-- 
Russell King
 Linux kernel2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-10 Thread Karol Kozimor
Thus wrote Russell King:
 Ok, here's the patch.  Please test and let me know if it resolves your
 problem.  Thanks.

Oh, I thought I did reply to your previous mail. In case you didn't get it,
yes, the patch fixes the problem.
Thanks,

-- 
Karol 'sziwan' Kozimor
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-02 Thread Dominik Brodowski
On Tue, Mar 01, 2005 at 11:37:20PM +, Russell King wrote:
> On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
> > I've finally got around to test latest kernels and managed to find a bug in 
> > the serial subsystem, which happens during suspend.
> 
> Yes, serial_cs is claiming that we don't have a device associated with
> the port, so we're treating it as a legacy port.  However, serial_cs is
> implementing the suspend/resume methods.  This is wrong, since that
> means the port will be suspended twice, and hence causes this bug.
> 
> serial_cs needs to register the ports along with the PCMCIA device with
> which the port belongs to.  This will stop it being treated as a legacy
> serial port.
> 
> Unfortunately, it's too late tonight for me to dig into PCMCIA to work
> out how we get at the device structure - I can't find any examples off
> hand either.

For the time being:

{
client_handle_t handle = ...
struct device *dev;

dev = _to_dev(handle);
}


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


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-02 Thread Dominik Brodowski
On Tue, Mar 01, 2005 at 11:37:20PM +, Russell King wrote:
 On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
  I've finally got around to test latest kernels and managed to find a bug in 
  the serial subsystem, which happens during suspend.
 
 Yes, serial_cs is claiming that we don't have a device associated with
 the port, so we're treating it as a legacy port.  However, serial_cs is
 implementing the suspend/resume methods.  This is wrong, since that
 means the port will be suspended twice, and hence causes this bug.
 
 serial_cs needs to register the ports along with the PCMCIA device with
 which the port belongs to.  This will stop it being treated as a legacy
 serial port.
 
 Unfortunately, it's too late tonight for me to dig into PCMCIA to work
 out how we get at the device structure - I can't find any examples off
 hand either.

For the time being:

{
client_handle_t handle = ...
struct device *dev;

dev = handle_to_dev(handle);
}


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


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-01 Thread Russell King
On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
> I've finally got around to test latest kernels and managed to find a bug in 
> the serial subsystem, which happens during suspend.

Yes, serial_cs is claiming that we don't have a device associated with
the port, so we're treating it as a legacy port.  However, serial_cs is
implementing the suspend/resume methods.  This is wrong, since that
means the port will be suspended twice, and hence causes this bug.

serial_cs needs to register the ports along with the PCMCIA device with
which the port belongs to.  This will stop it being treated as a legacy
serial port.

Unfortunately, it's too late tonight for me to dig into PCMCIA to work
out how we get at the device structure - I can't find any examples off
hand either.  Therefore, it may be a while before I can produce a patch
to resolve this.

-- 
Russell King
 Linux kernel2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


kernel BUG at drivers/serial/8250.c:1256!

2005-03-01 Thread Karol Kozimor
Hi,

I've finally got around to test latest kernels and managed to find a bug in 
the serial subsystem, which happens during suspend.

I use a 3Com PC Card Bluetooth adapter that needs serial_cs and hci_uart
modules. Whenever I try to suspend using 2.6.10 or a newer kernel, the
following bug appears. Note that 2.6.9 works perfectly.

#v+ handwritten, 2.6.11-rc5
kernel BUG at drivers/serial/8250.c:1256!
invalid operand:  [#1]
PREEMPT
[...]
EIP is at serial_unlink_irq_chain+0x4b/0x60 [8250]
[...]
Call Trace:
uart_suspend_port [serial_core]
serial_suspend [serial_cs]
serial_event [serial_cs]
send_event_callback [pcmcia]
__bus_for_each_dev
bus_for_each_dev
send_event_callback [pcmcia]
send_event [pcmcia]
send_event_callback [pcmcia]
handle_event [pcmcia]
ds_event [pcmcia]
send_event [pcmcia_core]
socket_suspend [pcmcia_core]
#v-

Photos are available here (sorry for the quality):
http://hell.org.pl/~sziwan/bug_8250-1.jpg
http://hell.org.pl/~sziwan/bug_8250-2.jpg
http://hell.org.pl/~sziwan/bug_8250-3.jpg

I'll be happy to provide whatever information is needed.

Best regards,

-- 
Karol 'sziwan' Kozimor
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


kernel BUG at drivers/serial/8250.c:1256!

2005-03-01 Thread Karol Kozimor
Hi,

I've finally got around to test latest kernels and managed to find a bug in 
the serial subsystem, which happens during suspend.

I use a 3Com PC Card Bluetooth adapter that needs serial_cs and hci_uart
modules. Whenever I try to suspend using 2.6.10 or a newer kernel, the
following bug appears. Note that 2.6.9 works perfectly.

#v+ handwritten, 2.6.11-rc5
kernel BUG at drivers/serial/8250.c:1256!
invalid operand:  [#1]
PREEMPT
[...]
EIP is at serial_unlink_irq_chain+0x4b/0x60 [8250]
[...]
Call Trace:
uart_suspend_port [serial_core]
serial_suspend [serial_cs]
serial_event [serial_cs]
send_event_callback [pcmcia]
__bus_for_each_dev
bus_for_each_dev
send_event_callback [pcmcia]
send_event [pcmcia]
send_event_callback [pcmcia]
handle_event [pcmcia]
ds_event [pcmcia]
send_event [pcmcia_core]
socket_suspend [pcmcia_core]
#v-

Photos are available here (sorry for the quality):
http://hell.org.pl/~sziwan/bug_8250-1.jpg
http://hell.org.pl/~sziwan/bug_8250-2.jpg
http://hell.org.pl/~sziwan/bug_8250-3.jpg

I'll be happy to provide whatever information is needed.

Best regards,

-- 
Karol 'sziwan' Kozimor
[EMAIL PROTECTED]
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: kernel BUG at drivers/serial/8250.c:1256!

2005-03-01 Thread Russell King
On Wed, Mar 02, 2005 at 12:09:46AM +0100, Karol Kozimor wrote:
 I've finally got around to test latest kernels and managed to find a bug in 
 the serial subsystem, which happens during suspend.

Yes, serial_cs is claiming that we don't have a device associated with
the port, so we're treating it as a legacy port.  However, serial_cs is
implementing the suspend/resume methods.  This is wrong, since that
means the port will be suspended twice, and hence causes this bug.

serial_cs needs to register the ports along with the PCMCIA device with
which the port belongs to.  This will stop it being treated as a legacy
serial port.

Unfortunately, it's too late tonight for me to dig into PCMCIA to work
out how we get at the device structure - I can't find any examples off
hand either.  Therefore, it may be a while before I can produce a patch
to resolve this.

-- 
Russell King
 Linux kernel2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:  2.6 Serial core
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/