linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Patch] Fix errors in aironet4500 driver (cli_sti_removal-004) (fwd)
@ 2003-01-23 20:09 Michael Still
  2003-01-23 23:15 ` romieu
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Still @ 2003-01-23 20:09 UTC (permalink / raw)
  To: linux-kernel


I'm resending this in the hope of people applying it.

Mikal

-- 

Michael Still (mikal@stillhq.com) | Stage 1: Steal underpants
http://www.stillhq.com            | Stage 2: ????
UTC + 11                          | Stage 3: Profit

---------- Forwarded message ----------
Date: Sat, 11 Jan 2003 22:26:04 +1100
From: Michael Still <mikal@stillhq.com>
To: linux-kernel@vger.kernel.org
Cc: Linus Torvalds <torvalds@transmeta.com>
Subject: [Patch] Fix errors in aironet4500 driver (cli_sti_removal-004)


Hello.

Linux 2.5.55 includes a trivial patch from me which removed some
references to cli() and sti() from the aironet4500 driver. There were two
errors in the implementation of this patch, as well as the rest of the
files in the driver not having been updated. My apologies for this.

This patch below (which is against 2.5.55) corrects these problems. Please
let me know if you think there are errors I have still made, for future
reference.

Please apply.

Cheers,
Mikal

Binary files linux-2.5.55/drivers/atm/pca200e.bin and linux-2.5.55-cli_sti_removal-002/drivers/atm/pca200e.bin differ
diff -Nur linux-2.5.55/drivers/net/aironet4500.h linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500.h
--- linux-2.5.55/drivers/net/aironet4500.h	Fri Jan 10 09:21:06 2003
+++ linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500.h	Thu Jan  9 22:19:56 2003
@@ -1,13 +1,13 @@
 /*
  *	 Aironet 4500 Pcmcia driver
  *
- *		Elmer Joandi, Januar 1999
+ *		Elmer Joandi, January 1999
+ *              Michael Still, January 2003
  *	Copyright:	GPL
  *
  *
  *	Revision 0.1 ,started  30.12.1998
- *      Revision 0.3, Jan 10, 2003
- *              Michael Still (mikal@stillhq.com) - cli / sti conversion
+ *      Revision 0.2, locking tweaks 10 Jan 2003
  *
  *
  */
@@ -15,24 +15,12 @@

 #ifndef AIRONET4500_H
 #define	AIRONET4500_H
-// redefined to avoid PCMCIA includes

- #include <linux/version.h>
-/*#include <linux/module.h>
- #include <linux/kernel.h>
-*/
-
-/*
-#include <linux/types.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/delay.h>
-#include <linux/time.h>
-*/
+#include <linux/version.h>
 #include <linux/802_11.h>
 #include <linux/workqueue.h>

-//damn idiot PCMCIA stuff
+/* Damn idiot PCMCIA stuff */
 #ifndef DEV_NAME_LEN
 	#define DEV_NAME_LEN 32
 #endif
@@ -94,7 +82,7 @@
 #define awc_Select1_register 		0x1A
 #define awc_Offset1_register 		0x1E
 #define awc_Data1_register 		0x38
-//
+
 #define awc_RxFID_register 		0x20
 #define awc_TxAllocFID_register 	0x22
 #define awc_TxComplFID_register 	0x24
@@ -1606,4 +1594,7 @@
 	#define AWC_ENTRY_EXIT_DEBUG(a)
 #endif

+/* This has been changed to a hopefully globally unique name */
+spinlock_t aironet4500_lock = SPIN_LOCK_UNLOCKED;
+
 #endif /* AIRONET4500_H */
diff -Nur linux-2.5.55/drivers/net/aironet4500_card.c linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_card.c
--- linux-2.5.55/drivers/net/aironet4500_card.c	Fri Jan 10 09:18:46 2003
+++ linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_card.c	Thu Jan  9 22:24:11 2003
@@ -10,13 +10,10 @@
  *	Revision 0.2, Feb 27, 2000
  *		Jeff Garzik - softnet, cleanups
  *
- *      Revision 0.3, Jan 10, 2003
- *              Michael Still (mikal@stillhq.com) - cli / sti conversion
- *
  */
 #ifdef MODULE
 static const char *awc_version =
-"aironet4500_cards.c v0.3  Jan, 2003  Elmer Joandi, elmer@ylenurme.ee and Michael Still (mikal@stillhq.com)\n";
+"aironet4500_cards.c v0.2  Feb 27, 2000  Elmer Joandi, elmer@ylenurme.ee.\n";
 #endif

 #include <linux/delay.h>
@@ -381,14 +378,9 @@
 		};
 		((struct awc_private *)dev->priv)->bus =  logdev;

-	//	ether_setup(dev);
-
-	//	dev->tx_queue_len = tx_queue_len;

 		dev->hard_start_xmit = 		&awc_start_xmit;
-	//	dev->set_config = 		&awc_config_misiganes,aga mitte awc_config;
 		dev->get_stats = 		&awc_get_stats;
-	//	dev->set_multicast_list = 	&awc_set_multicast_list;
 		dev->change_mtu		=	awc_change_mtu;
 		dev->init = &awc_init;
 		dev->open = &awc_open;
@@ -406,18 +398,18 @@

 		((struct awc_private *)dev->priv)->bus =  logdev;

-		cli();
+		spin_lock_irq(&aironet4500_lock);
 		if ( awc_init(dev) ){
 			printk("card not found at irq %x io %lx\n",dev->irq, dev->base_addr);
 			if (card==0){
-				sti();
+				spin_unlock_irq(&aironet4500_lock);
 				return -1;
 			}
-			sti();
+			spin_unlock_irq(&aironet4500_lock);
 			break;
 		}
 		udelay(10);
-		sti();
+		spin_unlock_irq(&aironet4500_lock);
 		i=0;
 		while (aironet4500_devices[i] && i < MAX_AWCS-1) i++;
 		if (!aironet4500_devices[i] && i < MAX_AWCS-1 ){
diff -Nur linux-2.5.55/drivers/net/aironet4500_core.c linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_core.c
--- linux-2.5.55/drivers/net/aironet4500_core.c	Fri Jan 10 09:20:35 2003
+++ linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_core.c	Thu Jan  9 23:08:29 2003
@@ -6,19 +6,16 @@
  *
  *
  *	Revision 0.1 ,started  30.12.1998
- *      Revision 0.3, Jan 10, 2003
- *              Michael Still (mikal@stillhq.com) - cli / sti conversion
  *
  *
  */
  /* CHANGELOG:
- 	   03.99, stable version 2.0
- 	   08.99, stable version 2.2
- 	   11.99, integration with 2.3
-	17.12.99, finally, got SMP near-correct.
-		  timing issues remain- on SMP box its 15% slower on tcp
-	10.03.00, looks like softnet take us back to normal on SMP
-	10.01.03, cli / sti removal
+ 	march 99, stable version 2.0
+ 	august 99, stable version 2.2
+ 	november 99, integration with 2.3
+	17.12.99: finally, got SMP near-correct.
+		timing issues remain- on SMP box its 15% slower on tcp
+	10.03.00 looks like softnet take us back to normal on SMP
  */

 #include <linux/delay.h>
@@ -427,14 +424,11 @@
 	  	//	AWC_OUT(cmd->bap->offset, 0x800);
 	  }

-	  save_flags(flags);
-	  cli();
-
+	  spin_lock_irqsave(&aironet4500_lock, flags);
           AWC_OUT(cmd->bap->select, cmd->rid);
 	  WAIT61x3;
           AWC_OUT(cmd->bap->offset, cmd->offset);
-
-          restore_flags(flags);
+	  spin_unlock_irqrestore(&aironet4500_lock, flags);

 	  WAIT61x3;

@@ -454,48 +448,47 @@
 	      };
               status = AWC_IN(cmd->bap->offset);
               if (status & AWC_BAP_BUSY) {
-                 if (cycles % 100 == 99 ) {
-                      save_flags(flags);
-                      cli();
-                      if (!cleared){
-                      	AWC_IN(cmd->dev->base_addr + 0x26);
-                      	AWC_OUT(cmd->dev->base_addr + 0x26, 0);
-                      	WAIT61x3;
-                      	cleared = 1;
-                      }
-                      AWC_OUT(cmd->bap->select, cmd->rid);
-                      WAIT61x3;
-                      AWC_OUT(cmd->bap->offset, cmd->offset);
-                      restore_flags(flags);
-                	#ifdef AWC_DEBUG
-	  			printk("B");
-	  		#endif
-
-                      if ( cmd->priv->sleeping_bap)
-         		udelay(bap_sleep);
-         	      else udelay(30);
-                      //restart_timeout();
-                  }
-                  if (jiffies - jiff > 1 ) {
-                  	AWC_ENTRY_EXIT_DEBUG(" BAD BUSY  exit \n");
-                  	awc_dump_registers(cmd->dev);
-                  	goto return_AWC_ERROR;
-                  }
-                  continue;
+		      if (cycles % 100 == 99 ) {
+			      spin_lock_irqsave(&aironet4500_lock, flags);
+			      if (!cleared){
+				      AWC_IN(cmd->dev->base_addr + 0x26);
+				      AWC_OUT(cmd->dev->base_addr + 0x26, 0);
+				      WAIT61x3;
+				      cleared = 1;
+			      }
+			      AWC_OUT(cmd->bap->select, cmd->rid);
+			      WAIT61x3;
+			      AWC_OUT(cmd->bap->offset, cmd->offset);
+			      spin_unlock_irqrestore(&aironet4500_lock, flags);
+#ifdef AWC_DEBUG
+			      printk("B");
+#endif
+
+			      if ( cmd->priv->sleeping_bap)
+				      udelay(bap_sleep);
+			      else udelay(30);
+			      //restart_timeout();
+		      }
+		      if (jiffies - jiff > 1 ) {
+			      AWC_ENTRY_EXIT_DEBUG(" BAD BUSY  exit \n");
+			      awc_dump_registers(cmd->dev);
+			      goto return_AWC_ERROR;
+		      }
+		      continue;
               }
-             if (status & AWC_BAP_DONE) {
-                  WAIT61x3; WAIT61x3; WAIT61x3;
-
-                //  if ((status & 0xfff) != cmd->offset)
-                //  	printk(KERN_ERR "awcPBD %x ",status);
-                   AWC_ENTRY_EXIT_DEBUG(" exit \n");
-                  if (cmd->priv->sleeping_bap)
-                  	udelay(bap_sleep_after_setup);
-
-                  // success
-                  goto return_AWC_SUCCESS;
+	      if (status & AWC_BAP_DONE) {
+		      WAIT61x3; WAIT61x3; WAIT61x3;
+
+		      //  if ((status & 0xfff) != cmd->offset)
+		      //  	printk(KERN_ERR "awcPBD %x ",status);
+		      AWC_ENTRY_EXIT_DEBUG(" exit \n");
+		      if (cmd->priv->sleeping_bap)
+			      udelay(bap_sleep_after_setup);
+
+		      // success
+		      goto return_AWC_SUCCESS;
               }
-
+
               if (status & AWC_BAP_ERR) {
              	  AWC_ENTRY_EXIT_DEBUG(" BAD  exit \n");
                   // invalid rid or offse

-- 

Michael Still (mikal@stillhq.com) | Stage 1: Steal underpants
http://www.stillhq.com            | Stage 2: ????
UTC + 11                          | Stage 3: Profit


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


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

* Re: [Patch] Fix errors in aironet4500 driver (cli_sti_removal-004) (fwd)
  2003-01-23 20:09 [Patch] Fix errors in aironet4500 driver (cli_sti_removal-004) (fwd) Michael Still
@ 2003-01-23 23:15 ` romieu
  0 siblings, 0 replies; 2+ messages in thread
From: romieu @ 2003-01-23 23:15 UTC (permalink / raw)
  To: Michael Still; +Cc: linux-kernel

Michael Still <mikal@stillhq.com> :
> 
> I'm resending this in the hope of people applying it.
> 
>  #endif /* AIRONET4500_H */
> diff -Nur linux-2.5.55/drivers/net/aironet4500_card.c linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_card.c
> --- linux-2.5.55/drivers/net/aironet4500_card.c	Fri Jan 10 09:18:46 2003
> +++ linux-2.5.55-cli_sti_removal-002/drivers/net/aironet4500_card.c	Thu Jan  9 22:24:11 2003
[...]
> @@ -406,18 +398,18 @@
> 
>  		((struct awc_private *)dev->priv)->bus =  logdev;
> 
> -		cli();
> +		spin_lock_irq(&aironet4500_lock);
>  		if ( awc_init(dev) ){
>  			printk("card not found at irq %x io %lx\n",dev->irq, dev->base_addr);
>  			if (card==0){
> -				sti();
> +				spin_unlock_irq(&aironet4500_lock);
>  				return -1;
>  			}
> -			sti();
> +			spin_unlock_irq(&aironet4500_lock);

It isn't pretty and awc4500_pnp_probe() leaks memory with this return
(hint: follow 'dev').

--
Ueimor

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

end of thread, other threads:[~2003-01-23 23:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-23 20:09 [Patch] Fix errors in aironet4500 driver (cli_sti_removal-004) (fwd) Michael Still
2003-01-23 23:15 ` romieu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).