public inbox for linux-serial@vger.kernel.org
 help / color / mirror / Atom feed
* RE: Change to serial_core.c .... causing my serial driver problem Help Request
       [not found] <8CA6D5E4DEA920C-1128-2973@webmail-nb07.sysops.aol.com>
@ 2008-04-15 22:49 ` Guennadi Liakhovetski
       [not found]   ` <8CA6D67D9E313CC-1128-35BB@webmail-nb07.sysops.aol.com>
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-15 22:49 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Tue, 15 Apr 2008, vcgandhi1@aol.com wrote:

> Will do,

I added linux-serial to cc.

> But it seems like the code that was check in has issues.

Given the number and names of signed-off's under this patch, it is pretty 
unlikely.

> If you look in 
> the directory no serial driver properly sets port->dev to be pointing to 
> the parent. It looks like they all point to themselves. Can you tell me 
> which driver you tested this change on. I can look to see how they set 
> port->dev.

8250_pci.c, and I do think it sets it properly in pciserial_init_ports().

Thanks
Guennadi

> Vipul?
> ?
> 
> -----Original Message-----
> From: Guennadi Liakhovetski [mailto:g.liakhovetski@gmx.de] 
> Sent: Tuesday, April 15, 2008 2:50 PM
> To: Gandhi, Vipul
> Subject: Re: Change to serial_core.c .... causing my serial driver problem Help Request
> 
> ?
> 
> On Tue, 15 Apr 2008, Gandhi, Vipul wrote:
> 
> ?
> 
> > For my driver the following call is returning a NULL .????????? 
> 
> > 
> 
> >? 
> 
> > 
> 
> > tty_dev = device_find_child(port->dev, &match, serial_match_port);
> 
> > 
> 
> >? 
> 
> > 
> 
> > Any idea? why, previously this was not in serial_core.c but was recently
> 
> > added by you I believe. Any help would be appreciated.
> 
> ?
> 
> No, not without seeing the source-code of your driver. Also, please, 
> 
> direct such questions to the linux-serial or linux-kernel mailing list, 
> 
> you may then additionally CC the person, who you think can help you best.
> 
> ?
> 
> Thanks
> 
> Guennadi
> 
> ---
> 
> Guennadi Liakhovetski
> 

---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
       [not found]   ` <8CA6D67D9E313CC-1128-35BB@webmail-nb07.sysops.aol.com>
@ 2008-04-16  0:08     ` vcgandhi1
  2008-04-16 23:11       ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-16  0:08 UTC (permalink / raw)
  To: vcgandhi1, g.liakhovetski; +Cc: linux-serial



Guennadi,

I think the issue is when the serial port is embedded and not connected 
through the bus. So I am talking about the drivers in the 
kernel/drivers/serial directory. A few of them use suspend and resume 
and I think they may not be compatible with your change. 

Do you know if you anybody tested any serial ports that are located in 
that directory and use  the suspend and resume calls. Ports not 
connected through the pci  bus.

Vipul



-----Original Message-----
From: vcgandhi1@aol.com
To: g.liakhovetski@gmx.de
Cc: linux-serial@vger.kernel.org
Sent: Tue, 15 Apr 2008 4:30 pm
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request


Guennadi,

I think the issue is when the serial port is embedded and not connected 
through the bus. So I am talking about the drivers in the 
kernel/drivers/serial directory. A few of them use suspend and resume 
and I think they may not be compatible with your change. I not sure who 
signed off on in but I am having problems with the change and would 
like to like to get it resolved.  

Do you know if you anybody tested any serial ports that are located in 
that directory and use  the suspend and resume calls. Ports not 
connected through a bus.

Vipul




-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Tue, 15 Apr 2008 3:49 pm
Subject: RE: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Tue, 15 Apr 2008, vcgandhi1@aol.com wrote:

> Will do,

I added linux-serial to cc.

> But it seems like the code that was check in has issues.

Given the number and names of signed-off's under this patch, it is 
pretty
unlikely.

> If you look in
> the directory no serial driver properly sets port->dev to be pointing 
to
> the parent. It looks like they all point to themselves. Can you tell 
me
> which driver you tested this change on. I can look to see how they 
set
> port->dev.

8250_pci.c, and I do think it sets it properly in 
pciserial_init_ports().

Thanks
Guennadi

> Vipul?
> ?
>
> -----Original Message-----
> From: Guennadi Liakhovetski [mailto:g.liakhovetski@gmx.de]
> Sent: Tuesday, April 15, 2008 2:50 PM
> To: Gandhi, Vipul
> Subject: Re: Change to serial_core.c .... causing my serial driver 
problem
Help Request
>
> ?
>
> On Tue, 15 Apr 2008, Gandhi, Vipul wrote:
>
> ?
>
> > For my driver the following call is returning a NULL .?????????
>
> >
>
> >?
>
> >
>
> > tty_dev = device_find_child(port->dev, &match, serial_match_port);
>
> >
>
> >?
>
> >
>
> > Any idea? why, previously this was not in serial_core.c but was 
recently
>
> > added by you I believe. Any help would be appreciated.
>
> ?
>
> No, not without seeing the source-code of your driver. Also, please,
>
> direct such questions to the linux-serial or linux-kernel mailing 
list,
>
> you may then additionally CC the person, who you think can help you 
best.
>
> ?
>
> Thanks
>
> Guennadi
>
> ---
>
> Guennadi Liakhovetski
>

---
Guennadi Liakhovetski
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-16  0:08     ` vcgandhi1
@ 2008-04-16 23:11       ` Guennadi Liakhovetski
  2008-04-17  2:16         ` vcgandhi1
  2008-04-17  2:20         ` vcgandhi1
  0 siblings, 2 replies; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-16 23:11 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Tue, 15 Apr 2008, vcgandhi1@aol.com wrote:

> I think the issue is when the serial port is embedded and not connected
> through the bus. So I am talking about the drivers in the
> kernel/drivers/serial directory. A few of them use suspend and resume and I
> think they may not be compatible with your change. 

Which specific driver do you see the problem with? I cannot check all 
drivers. I took as an example mpc52xx_uart.c. And I see there

	port->dev	= &dev->dev;

in its ->probe, so, it shouldn't have a problem either.

> Do you know if you anybody tested any serial ports that are located in that
> directory and use  the suspend and resume calls. Ports not connected through
> the pci  bus.

No, I don't know.

Thanks
Guennadi
---
Guennadi Liakhovetski
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-16 23:11       ` Guennadi Liakhovetski
@ 2008-04-17  2:16         ` vcgandhi1
  2008-04-17 14:55           ` Guennadi Liakhovetski
  2008-04-17  2:20         ` vcgandhi1
  1 sibling, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-17  2:16 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

Hi,

I do the same

port->dev   = &dev->dev;

But I am not sure &dev->dev points to the parent. I think it points to 
the device it's self, but I may be wrong.  I have tried port->dev = 
&dev->dev as well as port->dev = dev->dev.parent. One of these found 
something when the port was TTYS0 but did not work when the port was 
TTYS2.

Did you test with a non zero port->line. I working on ttyS2.


Just trying to narrow down what could be wrong. It just that    

tty_dev = device_find_child(port->dev, &match, serial_match_port);

is returning NULL for me.

Thank You for your help.
Vipul

PS. One quick suggestion you may want to check the return value and 
verify it is non-NULL before using it. Makes it easier to debug the 
code. ...


-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Wed, 16 Apr 2008 4:11 pm
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Tue, 15 Apr 2008, vcgandhi1@aol.com wrote:

> I think the issue is when the serial port is embedded and not 
connected
> through the bus. So I am talking about the drivers in the
> kernel/drivers/serial directory. A few of them use suspend and resume 
and I
> think they may not be compatible with your change. 

Which specific driver do you see the problem with? I cannot check all
drivers. I took as an example mpc52xx_uart.c. And I see there

    port->dev   = &dev->dev;

in its ->probe, so, it shouldn't have a problem either.

> Do you know if you anybody tested any serial ports that are located 
in that
> directory and use  the suspend and resume calls. Ports not connected 
through
> the pci  bus.

No, I don't know.

Thanks
Guennadi
---
Guennadi Liakhovetski

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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-16 23:11       ` Guennadi Liakhovetski
  2008-04-17  2:16         ` vcgandhi1
@ 2008-04-17  2:20         ` vcgandhi1
  2008-04-17 14:58           ` Guennadi Liakhovetski
  1 sibling, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-17  2:20 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial



dev_t devt = MKDEV(match->driver->major, match->driver->minor) + 
match->port->line;

One more thing, I use dynamic major and minor number could that be the 
problem. Does the driver you test use  dynamic Major and Minor Numbers?


Vipul
-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Wed, 16 Apr 2008 4:11 pm
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Tue, 15 Apr 2008, vcgandhi1@aol.com wrote:

> I think the issue is when the serial port is embedded and not 
connected
> through the bus. So I am talking about the drivers in the
> kernel/drivers/serial directory. A few of them use suspend and resume 
and I
> think they may not be compatible with your change. 

Which specific driver do you see the problem with? I cannot check all
drivers. I took as an example mpc52xx_uart.c. And I see there

    port->dev   = &dev->dev;

in its ->probe, so, it shouldn't have a problem either.

> Do you know if you anybody tested any serial ports that are located 
in that
> directory and use  the suspend and resume calls. Ports not connected 
through
> the pci  bus.

No, I don't know.

Thanks
Guennadi
---
Guennadi Liakhovetski

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

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17  2:16         ` vcgandhi1
@ 2008-04-17 14:55           ` Guennadi Liakhovetski
  2008-04-17 16:06             ` vcgandhi1
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-17 14:55 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Wed, 16 Apr 2008, vcgandhi1@aol.com wrote:

> I do the same
> 
> port->dev   = &dev->dev;
> 
> But I am not sure &dev->dev points to the parent. I think it points to the
> device it's self, but I may be wrong.  I have tried port->dev = &dev->dev as
> well as port->dev = dev->dev.parent.

It depends on what your "dev" is, and this is driver-specific. So, 
unfortunately, I don't think I'll be able to help you any further without 
seeing the sources.

> One of these found something when the
> port was TTYS0 but did not work when the port was TTYS2.
> 
> Did you test with a non zero port->line. I working on ttyS2.

Yes, I tested it with ttyS0 and ttyS1.

> Just trying to narrow down what could be wrong. It just that    
> tty_dev = device_find_child(port->dev, &match, serial_match_port);
> 
> is returning NULL for me.
> 
> Thank You for your help.
> Vipul
> 
> PS. One quick suggestion you may want to check the return value and verify it
> is non-NULL before using it. Makes it easier to debug the code. ...

Feel free to submit a patch.

Thanks
Guennadi
---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17  2:20         ` vcgandhi1
@ 2008-04-17 14:58           ` Guennadi Liakhovetski
  2008-04-17 16:41             ` vcgandhi1
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-17 14:58 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Wed, 16 Apr 2008, vcgandhi1@aol.com wrote:

> dev_t devt = MKDEV(match->driver->major, match->driver->minor) +
> match->port->line;
> 
> One more thing, I use dynamic major and minor number could that be the
> problem. Does the driver you test use  dynamic Major and Minor Numbers?

Doesn't look like 8250.c uses dynamic major and minor numbers.

Thanks
Guennadi
---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17 14:55           ` Guennadi Liakhovetski
@ 2008-04-17 16:06             ` vcgandhi1
  0 siblings, 0 replies; 21+ messages in thread
From: vcgandhi1 @ 2008-04-17 16:06 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

Guennadi,

I think the problem is with dynamic Major and Minor Addresses.


This is the code from serial_core.c ...

"
static int serial_match_port(struct device *dev, void *data)
{
    struct uart_match *match = data;
    dev_t devt = MKDEV(match->driver->major, match->driver->minor) + 
match->port->line;

    return dev->devt == devt; /* Actually, only one tty per port */
}
"

Well when you uses Dynamic Major and Minor number you set it equal to 0 
in the driver structure of the UART.

Example.

"
static struct uart_driver uart_driver = {
    .owner                  = THIS_MODULE,
    .driver_name            = "msm_serial",
    .dev_name               = "ttyS0",
    .major                  = 0, /* tty layer will assign the major id */
    .minor                  = 0,
    .nr                     = UART_MAX_COUNT,
    .cons                   = uart_console,
};

"

You match function does not work. At least this is my thoughts.  What 
do you think.

Can you try to use  Dynamic Major and Minor address and see if you 
driver works.


Thank You
Vipul







-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Thu, 17 Apr 2008 7:55 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Wed, 16 Apr 2008, vcgandhi1@aol.com wrote:

> I do the same
>
> port->dev   = &dev->dev;
>
> But I am not sure &dev->dev points to the parent. I think it points 
to the
> device it's self, but I may be wrong.  I have tried port->dev = 
&dev->dev as
> well as port->dev = dev->dev.parent.

It depends on what your "dev" is, and this is driver-specific. So,
unfortunately, I don't think I'll be able to help you any further 
without
seeing the sources.

> One of these found something when the
> port was TTYS0 but did not work when the port was TTYS2.
>
> Did you test with a non zero port->line. I working on ttyS2.

Yes, I tested it with ttyS0 and ttyS1.

> Just trying to narrow down what could be wrong. It just that
> tty_dev = device_find_child(port->dev, &match, serial_match_port);
>
> is returning NULL for me.
>
> Thank You for your help.
> Vipul
>
> PS. One quick suggestion you may want to check the return value and 
verify it
> is non-NULL before using it. Makes it easier to debug the code. ...

Feel free to submit a patch.

Thanks
Guennadi
---
Guennadi Liakhovetski


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17 14:58           ` Guennadi Liakhovetski
@ 2008-04-17 16:41             ` vcgandhi1
  2008-04-17 17:19               ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-17 16:41 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

Guennadi,

When I switch to static Major and Minor numbers, the code started to 
work. So I believe the issue is with dynamic Major and Minor number.

I switch to static Major and Minor number till this gets fix or if it 
ever gets fixed. Let me know what your thoughts are maybe I doing 
something wrong which is causing Dynamic Major and Minor numbers not to 
work.

Thank You
Vipul



-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Thu, 17 Apr 2008 7:58 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Wed, 16 Apr 2008, vcgandhi1@aol.com wrote:

> dev_t devt = MKDEV(match->driver->major, match->driver->minor) +
> match->port->line;
>
> One more thing, I use dynamic major and minor number could that be the
> problem. Does the driver you test use  dynamic Major and Minor 
Numbers?

Doesn't look like 8250.c uses dynamic major and minor numbers.

Thanks
Guennadi
---
Guennadi Liakhovetski


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17 16:41             ` vcgandhi1
@ 2008-04-17 17:19               ` Guennadi Liakhovetski
  2008-04-17 22:58                 ` vcgandhi1
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-17 17:19 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Thu, 17 Apr 2008, vcgandhi1@aol.com wrote:

> When I switch to static Major and Minor numbers, the code started to work. So
> I believe the issue is with dynamic Major and Minor number.

I still don't understand. drivers/serial/jsm/jsm_driver.c does the same. 
But as it calls in its jsm_init_module:

uart_register_driver
tty_register_driver

where

	if (!driver->major) {
		error = alloc_chrdev_region(&dev, driver->minor_start,
						driver->num, driver->name);
		if (!error) {
			driver->major = MAJOR(dev);
			driver->minor_start = MINOR(dev);
		}

then it does get non-zero major and minor numbers. Doesn't this work for 
you?

Thanks
Guennadi
---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17 17:19               ` Guennadi Liakhovetski
@ 2008-04-17 22:58                 ` vcgandhi1
  2008-04-18 15:04                   ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-17 22:58 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

Guennadi,

My driver does the same as jsm_init_module. I would be very surprised 
if jsm actually worked with your change. You need to test it under 
suspend and resume condition.

My driver does the same uart_register_driver/tty_register_driver, but 
it looks like tty_register_driver sets the major address for the tty 
structure, but that does not get set back in the uart_driver structure. 
So uart_driver structure is still at zero.

To try to simplify this a little.

tty_register_driver will fill in the major and minor address in the 
following structure. struct tty_driver *driver

uart_register_driver input is struct uart_driver *drv. The value never 
gets set back into uart_driver and that is where you are looking to do 
the match.

To me this is either a bug in uart_register_driver for not propagating 
the value into uart_driver structure. But again it really did not 
matter since no one was looking at it till you modified the code.

Or your change should look at the tty_driver structure not the 
uart_driver structure, easy enough change. I do not think it is good 
for the lower level driver to fill in the value. It should not have to 
look at the tty structure it is suppose to be abstracted out.


Vipul

My recommendation is change you test driver to use 0 as the major 
address and do a suspend. It should crash.






-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Thu, 17 Apr 2008 10:19 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Thu, 17 Apr 2008, vcgandhi1@aol.com wrote:

> When I switch to static Major and Minor numbers, the code started to 
work. So
> I believe the issue is with dynamic Major and Minor number.

I still don't understand. drivers/serial/jsm/jsm_driver.c does the 
same.
But as it calls in its jsm_init_module:

uart_register_driver
tty_register_driver

where

if (!driver->major) {
error = alloc_chrdev_region(&dev, driver->minor_start,
driver->num, driver->name);
if (!error) {
driver->major = MAJOR(dev);
driver->minor_start = MINOR(dev);
}

then it does get non-zero major and minor numbers. Doesn't this work 
for
you?

Thanks
Guennadi
---
Guennadi Liakhovetski


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-17 22:58                 ` vcgandhi1
@ 2008-04-18 15:04                   ` Guennadi Liakhovetski
  2008-04-19  5:23                     ` vcgandhi1
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-18 15:04 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Thu, 17 Apr 2008, vcgandhi1@aol.com wrote:

> My driver does the same as jsm_init_module. I would be very surprised if jsm
> actually worked with your change. You need to test it under suspend and resume
> condition.
> 
> My driver does the same uart_register_driver/tty_register_driver, but it looks
> like tty_register_driver sets the major address for the tty structure, but
> that does not get set back in the uart_driver structure. So uart_driver
> structure is still at zero.

Indeed, you're right. One possible solution would be to pull the just 
obtained numbers into struct uart_driver in the specific serial driver 
like

diff --git a/drivers/serial/jsm/jsm_driver.c b/drivers/serial/jsm/jsm_driver.c
index 6767ee3..3afebab 100644
--- a/drivers/serial/jsm/jsm_driver.c
+++ b/drivers/serial/jsm/jsm_driver.c
@@ -225,6 +225,8 @@ static int __init jsm_init_module(void)
 
 	rc = uart_register_driver(&jsm_uart_driver);
 	if (!rc) {
+		jsm_uart_driver.major = jsm_uart_driver.tty_driver->major;
+		jsm_uart_driver.minor = jsm_uart_driver.tty_driver->minor_start;
 		rc = pci_register_driver(&jsm_driver);
 		if (rc)
 			uart_unregister_driver(&jsm_uart_driver);

You could do the same in your driver and see if this fixes your problem. 
However, maybe it is really better to fix it once for all drivers like

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..11e96bc 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -2274,6 +2274,11 @@ int uart_register_driver(struct uart_driver *drv)
 	if (retval < 0) {
 		put_tty_driver(normal);
 		kfree(drv->state);
+	} else if (!drv->major) {
+		/* Driver uses dynamic major and minor numbers,
+		 * propagate the numbers, we just obtained, back */
+		drv->major = normal->major;
+		drv->minor = normal->minor_start;
 	}
 	return retval;
 }

Could you test this one too, please (without the previous one, of course)?

Thanks
Guennadi
---
Guennadi Liakhovetski

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-18 15:04                   ` Guennadi Liakhovetski
@ 2008-04-19  5:23                     ` vcgandhi1
  2008-04-23  9:09                       ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-19  5:23 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

FYI,

I have not had a chance to test it today, Sorry. The patches should 
solve the problem, but I will confirm on the hardware this weekend.

Vipul



-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Fri, 18 Apr 2008 8:04 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Thu, 17 Apr 2008, vcgandhi1@aol.com wrote:

> My driver does the same as jsm_init_module. I would be very surprised 
if jsm
> actually worked with your change. You need to test it under suspend 
and resume
> condition.
>
> My driver does the same uart_register_driver/tty_register_driver, but 
it looks
> like tty_register_driver sets the major address for the tty 
structure, but
> that does not get set back in the uart_driver structure. So 
uart_driver
> structure is still at zero.

Indeed, you're right. One possible solution would be to pull the just
obtained numbers into struct uart_driver in the specific serial driver
like

diff --git a/drivers/serial/jsm/jsm_driver.c 
b/drivers/serial/jsm/jsm_driver.c
index 6767ee3..3afebab 100644
--- a/drivers/serial/jsm/jsm_driver.c
+++ b/drivers/serial/jsm/jsm_driver.c
@@ -225,6 +225,8 @@ static int __init jsm_init_module(void)

    rc = uart_register_driver(&jsm_uart_driver);
    if (!rc) {
+       jsm_uart_driver.major = jsm_uart_driver.tty_driver->major;
+       jsm_uart_driver.minor = jsm_uart_driver.tty_driver->minor_start;
        rc = pci_register_driver(&jsm_driver);
        if (rc)
            uart_unregister_driver(&jsm_uart_driver);

You could do the same in your driver and see if this fixes your 
problem.
However, maybe it is really better to fix it once for all drivers like

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..11e96bc 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -2274,6 +2274,11 @@ int uart_register_driver(struct uart_driver *drv)
    if (retval < 0) {
        put_tty_driver(normal);
        kfree(drv->state);
+   } else if (!drv->major) {
+       /* Driver uses dynamic major and minor numbers,
+        * propagate the numbers, we just obtained, back */
+       drv->major = normal->major;
+       drv->minor = normal->minor_start;
    }
    return retval;
 }

Could you test this one too, please (without the previous one, of 
course)?

Thanks
Guennadi
---
Guennadi Liakhovetski


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-19  5:23                     ` vcgandhi1
@ 2008-04-23  9:09                       ` Guennadi Liakhovetski
  2008-04-24  0:21                         ` vcgandhi1
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-23  9:09 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Sat, 19 Apr 2008, vcgandhi1@aol.com wrote:

> I have not had a chance to test it today, Sorry. The patches should solve the
> problem, but I will confirm on the hardware this weekend.

Have you been able to test the patches? We need to know it if we want to 
fix it in the mainline.

Thanks
Guennadi
---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-23  9:09                       ` Guennadi Liakhovetski
@ 2008-04-24  0:21                         ` vcgandhi1
  2008-04-24 14:02                           ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-04-24  0:21 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial


Guennadi,

Yes that fixes the problem. Sorry for taking some time to test it, but 
been busy buying a house. The process is making me exhausted.

Please do try to get the patch into the mainline, and thank you for 
your time.

Vipul


-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Wed, 23 Apr 2008 2:09 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Sat, 19 Apr 2008, vcgandhi1@aol.com wrote:

> I have not had a chance to test it today, Sorry. The patches should 
solve the
> problem, but I will confirm on the hardware this weekend.

Have you been able to test the patches? We need to know it if we want 
to
fix it in the mainline.

Thanks
Guennadi
---
Guennadi Liakhovetski


^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-24  0:21                         ` vcgandhi1
@ 2008-04-24 14:02                           ` Guennadi Liakhovetski
  2008-04-30  7:43                             ` vcgandhi1
  2008-05-31 15:33                             ` vcgandhi1
  0 siblings, 2 replies; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-04-24 14:02 UTC (permalink / raw)
  To: vcgandhi1; +Cc: linux-serial

On Wed, 23 Apr 2008, vcgandhi1@aol.com wrote:

> Yes that fixes the problem. Sorry for taking some time to test it, but been
> busy buying a house. The process is making me exhausted.
> 
> Please do try to get the patch into the mainline, and thank you for your time.

Thanks for testing, I presume, you tested the generic patch, modifying 
drivers/serial/serial_core.c, not setting major and minor numbers in your 
driver. However, on a second thought, I think, you probably were right, 
suggesting to use major and minor numbers from the tty device in 
serial_match_port. So, if you just could confirm that the patch below also 
works for you, I'll submit it. Sorry for asking you again, I just cannot 
easily test it myself ATM. And if it does work, please add your 
"Tested-by:" to it.

Thanks
Guennadi
---
Guennadi Liakhovetski

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..593ae85 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1949,7 +1949,9 @@ struct uart_match {
 static int serial_match_port(struct device *dev, void *data)
 {
 	struct uart_match *match = data;
-	dev_t devt = MKDEV(match->driver->major, match->driver->minor) + match->port->line;
+	struct tty_driver *tty_drv = match->driver->tty_driver;
+	dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
+		match->port->line;
 
 	return dev->devt == devt; /* Actually, only one tty per port */
 }

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-24 14:02                           ` Guennadi Liakhovetski
@ 2008-04-30  7:43                             ` vcgandhi1
  2008-05-31 15:33                             ` vcgandhi1
  1 sibling, 0 replies; 21+ messages in thread
From: vcgandhi1 @ 2008-04-30  7:43 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial

FYI,

I will get the patch tested tomorrow.

Vipul


-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Thu, 24 Apr 2008 7:02 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Wed, 23 Apr 2008, vcgandhi1@aol.com wrote:

> Yes that fixes the problem. Sorry for taking some time to test it, 
but been
> busy buying a house. The process is making me exhausted.
>
> Please do try to get the patch into the mainline, and thank you for 
your time.

Thanks for testing, I presume, you tested the generic patch, modifying
drivers/serial/serial_core.c, not setting major and minor numbers in 
your
driver. However, on a second thought, I think, you probably were right,
suggesting to use major and minor numbers from the tty device in
serial_match_port. So, if you just could confirm that the patch below 
also
works for you, I'll submit it. Sorry for asking you again, I just 
cannot
easily test it myself ATM. And if it does work, please add your
"Tested-by:" to it.

Thanks
Guennadi
---
Guennadi Liakhovetski

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..593ae85 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1949,7 +1949,9 @@ struct uart_match {
 static int serial_match_port(struct device *dev, void *data)
 {
    struct uart_match *match = data;
-   dev_t devt = MKDEV(match->driver->major, match->driver->minor) +
match->port->line;
+   struct tty_driver *tty_drv = match->driver->tty_driver;
+   dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
+       match->port->line;

    return dev->devt == devt; /* Actually, only one tty per port */
 }


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: Change to serial_core.c .... causing my serial driver problem Help Request
  2008-04-24 14:02                           ` Guennadi Liakhovetski
  2008-04-30  7:43                             ` vcgandhi1
@ 2008-05-31 15:33                             ` vcgandhi1
  2008-06-21 22:45                               ` [PATCH] Fix serial_match_port() for dynamic major tty-device numbers Guennadi Liakhovetski
  1 sibling, 1 reply; 21+ messages in thread
From: vcgandhi1 @ 2008-05-31 15:33 UTC (permalink / raw)
  To: g.liakhovetski; +Cc: linux-serial


This patch worked, sorry for the delay.


Tested-by:vcgandhi1@aol.com


Vipul Gandhi

-----Original Message-----
From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: vcgandhi1@aol.com
Cc: linux-serial@vger.kernel.org
Sent: Thu, 24 Apr 2008 7:02 am
Subject: Re: Change to serial_core.c .... causing my serial driver 
problem Help Request



On Wed, 23 Apr 2008, vcgandhi1@aol.com wrote:

> Yes that fixes the problem. Sorry for taking some time to test it, 
but been
> busy buying a house. The process is making me exhausted.
>
> Please do try to get the patch into the mainline, and thank you for 
your time.

Thanks for testing, I presume, you tested the generic patch, modifying
drivers/serial/serial_core.c, not setting major and minor numbers in 
your
driver. However, on a second thought, I think, you probably were right,
suggesting to use major and minor numbers from the tty device in
serial_match_port. So, if you just could confirm that the patch below 
also
works for you, I'll submit it. Sorry for asking you again, I just 
cannot
easily test it myself ATM. And if it does work, please add your
"Tested-by:" to it.

Thanks
Guennadi
---
Guennadi Liakhovetski

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..593ae85 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1949,7 +1949,9 @@ struct uart_match {
 static int serial_match_port(struct device *dev, void *data)
 {
    struct uart_match *match = data;
-   dev_t devt = MKDEV(match->driver->major, match->driver->minor) +
match->port->line;
+   struct tty_driver *tty_drv = match->driver->tty_driver;
+   dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
+       match->port->line;

    return dev->devt == devt; /* Actually, only one tty per port */
 }


^ permalink raw reply related	[flat|nested] 21+ messages in thread

* [PATCH] Fix serial_match_port() for dynamic major tty-device numbers
  2008-05-31 15:33                             ` vcgandhi1
@ 2008-06-21 22:45                               ` Guennadi Liakhovetski
  2008-06-24 22:22                                 ` Andrew Morton
  0 siblings, 1 reply; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-06-21 22:45 UTC (permalink / raw)
  To: vcgandhi1, linux-kernel; +Cc: linux-serial

As reported by Vipul Gandhi, the current serial_match_port() doesn't work 
for tty-devices using dynamic major number allocation. Fix it.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Tested-by: Vipul Gandhi <vcgandhi1@aol.com>

---

diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index 0f5a179..593ae85 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -1949,7 +1949,9 @@ struct uart_match {
 static int serial_match_port(struct device *dev, void *data)
 {
 	struct uart_match *match = data;
-	dev_t devt = MKDEV(match->driver->major, match->driver->minor) + match->port->line;
+	struct tty_driver *tty_drv = match->driver->tty_driver;
+	dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
+		match->port->line;
 
 	return dev->devt == devt; /* Actually, only one tty per port */
 }

^ permalink raw reply related	[flat|nested] 21+ messages in thread

* Re: [PATCH] Fix serial_match_port() for dynamic major tty-device numbers
  2008-06-21 22:45                               ` [PATCH] Fix serial_match_port() for dynamic major tty-device numbers Guennadi Liakhovetski
@ 2008-06-24 22:22                                 ` Andrew Morton
  2008-06-24 22:54                                   ` Guennadi Liakhovetski
  0 siblings, 1 reply; 21+ messages in thread
From: Andrew Morton @ 2008-06-24 22:22 UTC (permalink / raw)
  To: Guennadi Liakhovetski; +Cc: vcgandhi1, linux-kernel, linux-serial, Alan Cox

On Sun, 22 Jun 2008 00:45:25 +0200 (CEST)
Guennadi Liakhovetski <g.liakhovetski@gmx.de> wrote:

> As reported by Vipul Gandhi, the current serial_match_port() doesn't work 
> for tty-devices using dynamic major number allocation. Fix it.
> 
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> Tested-by: Vipul Gandhi <vcgandhi1@aol.com>
> 
> ---
> 
> diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
> index 0f5a179..593ae85 100644
> --- a/drivers/serial/serial_core.c
> +++ b/drivers/serial/serial_core.c
> @@ -1949,7 +1949,9 @@ struct uart_match {
>  static int serial_match_port(struct device *dev, void *data)
>  {
>  	struct uart_match *match = data;
> -	dev_t devt = MKDEV(match->driver->major, match->driver->minor) + match->port->line;
> +	struct tty_driver *tty_drv = match->driver->tty_driver;
> +	dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
> +		match->port->line;
>  
>  	return dev->devt == devt; /* Actually, only one tty per port */

Well that sounds bad.  We need to work out whether this fix is needed
in 2.6.25 and possibly eariler.

What are the consequences of this error?

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH] Fix serial_match_port() for dynamic major tty-device numbers
  2008-06-24 22:22                                 ` Andrew Morton
@ 2008-06-24 22:54                                   ` Guennadi Liakhovetski
  0 siblings, 0 replies; 21+ messages in thread
From: Guennadi Liakhovetski @ 2008-06-24 22:54 UTC (permalink / raw)
  To: Andrew Morton; +Cc: vcgandhi1, linux-kernel, linux-serial, Alan Cox

On Tue, 24 Jun 2008, Andrew Morton wrote:

> On Sun, 22 Jun 2008 00:45:25 +0200 (CEST)
> Guennadi Liakhovetski <g.liakhovetski@gmx.de> wrote:
> 
> > As reported by Vipul Gandhi, the current serial_match_port() doesn't work 
> > for tty-devices using dynamic major number allocation. Fix it.
> > 
> > Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> > Tested-by: Vipul Gandhi <vcgandhi1@aol.com>
> > 
> > ---
> > 
> > diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
> > index 0f5a179..593ae85 100644
> > --- a/drivers/serial/serial_core.c
> > +++ b/drivers/serial/serial_core.c
> > @@ -1949,7 +1949,9 @@ struct uart_match {
> >  static int serial_match_port(struct device *dev, void *data)
> >  {
> >  	struct uart_match *match = data;
> > -	dev_t devt = MKDEV(match->driver->major, match->driver->minor) + match->port->line;
> > +	struct tty_driver *tty_drv = match->driver->tty_driver;
> > +	dev_t devt = MKDEV(tty_drv->major, tty_drv->minor_start) +
> > +		match->port->line;
> >  
> >  	return dev->devt == devt; /* Actually, only one tty per port */
> 
> Well that sounds bad.  We need to work out whether this fix is needed
> in 2.6.25 and possibly eariler.

Not earlier, this code is only there since 2.6.25.

> What are the consequences of this error?

It Oopses, if you suspend a serial port with _dynamic_ major number. ATM, 
I think, there's only the drivers/serial/jsm/jsm_driver.c driver, that 
does it in-tree.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2008-06-24 22:54 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <8CA6D5E4DEA920C-1128-2973@webmail-nb07.sysops.aol.com>
2008-04-15 22:49 ` Change to serial_core.c .... causing my serial driver problem Help Request Guennadi Liakhovetski
     [not found]   ` <8CA6D67D9E313CC-1128-35BB@webmail-nb07.sysops.aol.com>
2008-04-16  0:08     ` vcgandhi1
2008-04-16 23:11       ` Guennadi Liakhovetski
2008-04-17  2:16         ` vcgandhi1
2008-04-17 14:55           ` Guennadi Liakhovetski
2008-04-17 16:06             ` vcgandhi1
2008-04-17  2:20         ` vcgandhi1
2008-04-17 14:58           ` Guennadi Liakhovetski
2008-04-17 16:41             ` vcgandhi1
2008-04-17 17:19               ` Guennadi Liakhovetski
2008-04-17 22:58                 ` vcgandhi1
2008-04-18 15:04                   ` Guennadi Liakhovetski
2008-04-19  5:23                     ` vcgandhi1
2008-04-23  9:09                       ` Guennadi Liakhovetski
2008-04-24  0:21                         ` vcgandhi1
2008-04-24 14:02                           ` Guennadi Liakhovetski
2008-04-30  7:43                             ` vcgandhi1
2008-05-31 15:33                             ` vcgandhi1
2008-06-21 22:45                               ` [PATCH] Fix serial_match_port() for dynamic major tty-device numbers Guennadi Liakhovetski
2008-06-24 22:22                                 ` Andrew Morton
2008-06-24 22:54                                   ` Guennadi Liakhovetski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox