Messages in this thread Patch in this message | | | Date | Sun, 2 Nov 2008 17:46:22 +0900 | From | Komuro <> | Subject | Re: [BUG REPORT!!!] [PATCH 19/49] pcmcia: remove remaining in-kernel pcmcia_get_configuration_info() users |
| |
Dear Dominik
The reason of this bug is link->io is not copied to the slave serial_cs device.
My patch below fix this problem.
--- ds.c.orig 2008-11-01 08:59:13.000000000 +0900 +++ ds.c 2008-11-02 17:05:44.000000000 +0900 @@ -668,6 +668,7 @@ struct pcmcia_device * pcmcia_device_add list_for_each_entry(tmp_dev, &s->devices_list, socket_device_list) if (p_dev->func == tmp_dev->func) { p_dev->function_config = tmp_dev->function_config; + p_dev->io = tmp_dev->io; kref_get(&p_dev->function_config->ref); }
Best Regards Komuro
> Dear Dominik > > Unfortunately, your path "[PATCH 19/49] pcmcia: remove remaining in-kernel > pcmcia_get_configuration_info() users" > broke the "serial_cs" and other drivers. > > You replace "config->BasePort2" to "link->io.BasePort2" at serial_cs. > > But link->io.BasePort2, link->io.NumPorts2(etc) > does not contain correct value (it is zero). > > Please fix this problem (or reveart the patch). > > > Best Regards > Komuro > > Here is your patch. > >--- a/drivers/serial/serial_cs.c > >+++ b/drivers/serial/serial_cs.c > >@@ -488,23 +488,23 @@ static int simple_config_check_notpicky(struct pcmcia_device *p_dev, > > static int simple_config(struct pcmcia_device *link) > > { > > struct serial_info *info = link->priv; > >- config_info_t config; > >- int i, try; > >+ int i = -ENODEV, try; > > > > /* If the card is already configured, look up the port and irq */ > >- i = pcmcia_get_configuration_info(link, &config); > >- if ((i == CS_SUCCESS) && (config.Attributes & CONF_VALID_CLIENT)) { > >+ if (link->function_config) { > > unsigned int port = 0; > >- if ((config.BasePort2 != 0) && (config.NumPorts2 == 8)) { > >- port = config.BasePort2; > >+ if ((link->io.BasePort2 != 0) && > >+ (link->io.NumPorts2 == 8)) { > >+ port = link->io.BasePort2; > > info->slave = 1; > > } else if ((info->manfid == MANFID_OSITECH) && > >- (config.NumPorts1 == 0x40)) { > >- port = config.BasePort1 + 0x28; > >+ (link->io.NumPorts1 == 0x40)) { > >+ port = link->io.BasePort1 + 0x28; > > info->slave = 1; > > } > > if (info->slave) { > >- return setup_serial(link, info, port, config.AssignedIRQ); > >+ return setup_serial(link, info, port, > >+ link->irq.AssignedIRQ); > } > } > > > > > _______________________________________________ > Linux PCMCIA reimplementation list > http://lists.infradead.org/mailman/listinfo/linux-pcmcia
-- Komuro <komurojun-mbn@nifty.com>
| |