lkml.org 
[lkml]   [2008]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: [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>


\
 
 \ /
  Last update: 2008-11-02 09:55    [W:0.089 / U:0.424 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site