public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* patch for 2.5.42. 2/2
@ 2002-10-13  3:20 Hu Gang
  2002-10-13  3:34 ` Rik van Riel
  0 siblings, 1 reply; 6+ messages in thread
From: Hu Gang @ 2002-10-13  3:20 UTC (permalink / raw)
  To: linux-kernel


[-- Attachment #1.1: Type: text/plain, Size: 1965 bytes --]

Hello Pavel Machek:

With this patch, My machine has work very fine. Without it my machine will hangup/Oops in suspend/resume.
By the way, If i'm right , I can change other driver in kernel to this model.

--- linux-2.5.42/sound/pci/intel8x0.c	Sat Oct 12 21:24:58 2002
+++ linux-2.5.42-suspend/sound/pci/intel8x0.c	Sat Oct 12 21:21:12 2002
@@ -1891,6 +1891,8 @@
 {
 	snd_card_t *card = chip->card;
 
+	if (chip->in_suspend) 
+		return;
 	chip->in_suspend = 1;
 	snd_power_lock(card);
 	if (card->power_state == SNDRV_CTL_POWER_D3hot)
@@ -1909,7 +1911,10 @@
 	snd_card_t *card = chip->card;
 	int i;
 
+	if (!chip->in_suspend)
+		return;
 	snd_power_lock(card);
+	chip->in_suspend = 0;
 	if (card->power_state == SNDRV_CTL_POWER_D0)
 		goto __skip;
 
@@ -1919,7 +1924,6 @@
 		if (chip->ac97[i])
 			snd_ac97_resume(chip->ac97[i]);
 
-	chip->in_suspend = 0;
 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
       __skip:
       	snd_power_unlock(card);
--- linux-2.5.42/drivers/net/3c59x.c	Sat Oct 12 21:25:00 2002
+++ linux-2.5.42-suspend/drivers/net/3c59x.c	Sat Oct 12 21:20:48 2002
@@ -809,6 +809,9 @@
 	spinlock_t lock;					/* Serialise access to device & its vortex_private */
 	spinlock_t mdio_lock;				/* Serialise access to mdio hardware */
 	u32 power_state[16];
+#ifdef CONFIG_PM
+	int in_suspend;
+#endif
 };
 
 /* The action to take with a media selection timer tick.
@@ -893,6 +896,10 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 
 	if (dev && dev->priv) {
+		struct vortex_private *vp = dev->priv;
+		if (vp->in_suspend)
+			return 0;
+		vp->in_suspend = 1;
 		if (netif_running(dev)) {
 			netif_device_detach(dev);
 			vortex_down(dev);
@@ -906,6 +913,10 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 
 	if (dev && dev->priv) {
+		struct vortex_private *vp = dev->priv;
+		if (!vp->in_suspend)
+			return 0;
+		vp->in_suspend = 1;
 		if (netif_running(dev)) {
 			vortex_up(dev);
 			netif_device_attach(dev);


-- 
		- Hu Gang



[-- Attachment #1.2: 00000004.mimetmp --]
[-- Type: text/plain, Size: 1965 bytes --]

Hello Pavel Machek:

With this patch, My machine has work very fine. Without it my machine will hangup/Oops in suspend/resume.
By the way, If i'm right , I can change other driver in kernel to this model.

--- linux-2.5.42/sound/pci/intel8x0.c	Sat Oct 12 21:24:58 2002
+++ linux-2.5.42-suspend/sound/pci/intel8x0.c	Sat Oct 12 21:21:12 2002
@@ -1891,6 +1891,8 @@
 {
 	snd_card_t *card = chip->card;
 
+	if (chip->in_suspend) 
+		return;
 	chip->in_suspend = 1;
 	snd_power_lock(card);
 	if (card->power_state == SNDRV_CTL_POWER_D3hot)
@@ -1909,7 +1911,10 @@
 	snd_card_t *card = chip->card;
 	int i;
 
+	if (!chip->in_suspend)
+		return;
 	snd_power_lock(card);
+	chip->in_suspend = 0;
 	if (card->power_state == SNDRV_CTL_POWER_D0)
 		goto __skip;
 
@@ -1919,7 +1924,6 @@
 		if (chip->ac97[i])
 			snd_ac97_resume(chip->ac97[i]);
 
-	chip->in_suspend = 0;
 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
       __skip:
       	snd_power_unlock(card);
--- linux-2.5.42/drivers/net/3c59x.c	Sat Oct 12 21:25:00 2002
+++ linux-2.5.42-suspend/drivers/net/3c59x.c	Sat Oct 12 21:20:48 2002
@@ -809,6 +809,9 @@
 	spinlock_t lock;					/* Serialise access to device & its vortex_private */
 	spinlock_t mdio_lock;				/* Serialise access to mdio hardware */
 	u32 power_state[16];
+#ifdef CONFIG_PM
+	int in_suspend;
+#endif
 };
 
 /* The action to take with a media selection timer tick.
@@ -893,6 +896,10 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 
 	if (dev && dev->priv) {
+		struct vortex_private *vp = dev->priv;
+		if (vp->in_suspend)
+			return 0;
+		vp->in_suspend = 1;
 		if (netif_running(dev)) {
 			netif_device_detach(dev);
 			vortex_down(dev);
@@ -906,6 +913,10 @@
 	struct net_device *dev = pci_get_drvdata(pdev);
 
 	if (dev && dev->priv) {
+		struct vortex_private *vp = dev->priv;
+		if (!vp->in_suspend)
+			return 0;
+		vp->in_suspend = 1;
 		if (netif_running(dev)) {
 			vortex_up(dev);
 			netif_device_attach(dev);


-- 
		- Hu Gang



[-- Attachment #1.3: 00000003.mimetmp --]
[-- Type: application/pgp-signature, Size: 191 bytes --]

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: patch for 2.5.42. 2/2
  2002-10-13  3:34 ` Rik van Riel
@ 2002-10-13  3:33   ` Hu Gang
  2002-10-14 16:52   ` Pavel Machek
  1 sibling, 0 replies; 6+ messages in thread
From: Hu Gang @ 2002-10-13  3:33 UTC (permalink / raw)
  To: Rik van Riel; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 755 bytes --]

On Sun, 13 Oct 2002 01:34:22 -0200 (BRST)
Rik van Riel <riel@conectiva.com.br> wrote:

|On Sun, 13 Oct 2002, Hu Gang wrote:
|
|> --- linux-2.5.42/drivers/net/3c59x.c	Sat Oct 12 21:25:00 2002
|> +++ linux-2.5.42-suspend/drivers/net/3c59x.c	Sat Oct 12 21:20:48 2002
|
|> +#ifdef CONFIG_PM
|> +	int in_suspend;
|> +#endif
|
|This looks like a serious design mistake.  Surely it would be
|better to just have the network layer stop operations when the
|system is going into suspend, instead of having to modify 100
|individual network drivers ?

Yes, The other drivers have this problem , such as sound.

I'm can not confirm that idea is the best way. But I can not found any other way can do it. If you have good idea, Tell me know.

thanks.
-- 
		- Hu Gang

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: patch for 2.5.42. 2/2
  2002-10-13  3:20 patch for 2.5.42. 2/2 Hu Gang
@ 2002-10-13  3:34 ` Rik van Riel
  2002-10-13  3:33   ` Hu Gang
  2002-10-14 16:52   ` Pavel Machek
  0 siblings, 2 replies; 6+ messages in thread
From: Rik van Riel @ 2002-10-13  3:34 UTC (permalink / raw)
  To: Hu Gang; +Cc: linux-kernel

On Sun, 13 Oct 2002, Hu Gang wrote:

> --- linux-2.5.42/drivers/net/3c59x.c	Sat Oct 12 21:25:00 2002
> +++ linux-2.5.42-suspend/drivers/net/3c59x.c	Sat Oct 12 21:20:48 2002

> +#ifdef CONFIG_PM
> +	int in_suspend;
> +#endif

This looks like a serious design mistake.  Surely it would be
better to just have the network layer stop operations when the
system is going into suspend, instead of having to modify 100
individual network drivers ?

Rik
-- 
Bravely reimplemented by the knights who say "NIH".
http://www.surriel.com/		http://distro.conectiva.com/
Current spamtrap:  <a href=mailto:"october@surriel.com">october@surriel.com</a>


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

* Re: patch for 2.5.42. 2/2
  2002-10-13  3:34 ` Rik van Riel
  2002-10-13  3:33   ` Hu Gang
@ 2002-10-14 16:52   ` Pavel Machek
  2002-10-15 14:10     ` Rik van Riel
  1 sibling, 1 reply; 6+ messages in thread
From: Pavel Machek @ 2002-10-14 16:52 UTC (permalink / raw)
  To: Rik van Riel; +Cc: Hu Gang, linux-kernel

Hi!

> > --- linux-2.5.42/drivers/net/3c59x.c	Sat Oct 12 21:25:00 2002
> > +++ linux-2.5.42-suspend/drivers/net/3c59x.c	Sat Oct 12 21:20:48 2002
> 
> > +#ifdef CONFIG_PM
> > +	int in_suspend;
> > +#endif
> 
> This looks like a serious design mistake.  Surely it would be
> better to just have the network layer stop operations when the
> system is going into suspend, instead of having to modify 100
> individual network drivers ?

Whole userland is stopped at that point. That should mean that new
requests can not come.

OTOH packet from the network *can* come, and higher levels can not do
much with that. [They could ifconfig down the network interface... But
that can have sideefects we don't want to see...]

								Pavel
-- 
When do you have heart between your knees?

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

* Re: patch for 2.5.42. 2/2
  2002-10-14 16:52   ` Pavel Machek
@ 2002-10-15 14:10     ` Rik van Riel
  2002-10-15 20:11       ` Pavel Machek
  0 siblings, 1 reply; 6+ messages in thread
From: Rik van Riel @ 2002-10-15 14:10 UTC (permalink / raw)
  To: Pavel Machek; +Cc: Hu Gang, linux-kernel

On Mon, 14 Oct 2002, Pavel Machek wrote:

> > This looks like a serious design mistake.  Surely it would be
> > better to just have the network layer stop operations when the
> > system is going into suspend, instead of having to modify 100
> > individual network drivers ?
>
> Whole userland is stopped at that point. That should mean that new
> requests can not come.
>
> OTOH packet from the network *can* come, and higher levels can not do
> much with that.

Higher layers can throw away the packet.  This means you just
need to modify the higher layer at one or two places, instead
of needing to modify every single network driver out there.

I don't need to tell you which of these two options is gonna
be the easiest to maintain, do I ?

regards,

Rik
-- 
A: No.
Q: Should I include quotations after my reply?

http://www.surriel.com/		http://distro.conectiva.com/


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

* Re: patch for 2.5.42. 2/2
  2002-10-15 14:10     ` Rik van Riel
@ 2002-10-15 20:11       ` Pavel Machek
  0 siblings, 0 replies; 6+ messages in thread
From: Pavel Machek @ 2002-10-15 20:11 UTC (permalink / raw)
  To: Rik van Riel; +Cc: Pavel Machek, Hu Gang, linux-kernel

Hi!

> > > better to just have the network layer stop operations when the
> > > system is going into suspend, instead of having to modify 100
> > > individual network drivers ?
> >
> > Whole userland is stopped at that point. That should mean that new
> > requests can not come.
> >
> > OTOH packet from the network *can* come, and higher levels can not do
> > much with that.
> 
> Higher layers can throw away the packet.  This means you just
> need to modify the higher layer at one or two places, instead
> of needing to modify every single network driver out there.
> 
> I don't need to tell you which of these two options is gonna
> be the easiest to maintain, do I ?

No, that one is simple.

What is not so simple is seeing that throwing that packet away is not
enough. Receiving packet means DMA, and DMA is no-no during S4
resume. So simply throwing packet away is not enough.

						Pavel
-- 
Casualities in World Trade Center: ~3k dead inside the building,
cryptography in U.S.A. and free speech in Czech Republic.

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

end of thread, other threads:[~2002-10-15 20:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-10-13  3:20 patch for 2.5.42. 2/2 Hu Gang
2002-10-13  3:34 ` Rik van Riel
2002-10-13  3:33   ` Hu Gang
2002-10-14 16:52   ` Pavel Machek
2002-10-15 14:10     ` Rik van Riel
2002-10-15 20:11       ` Pavel Machek

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