[PATCH] s390 update (5/9): s390 network driver fixes.

From: Martin Schwidefsky (schwidefsky@de.ibm.com)
Date: Wed Mar 26 2003 - 10:11:05 EST


* lcs: Don't free net_device in lcs_stop_device.
* lcs: Reset card after LGW initiaited stoplan.
* lcs: Fix bug in lcs_tasklet
* ctc: Get channel structure from private pointer. Remove __NO_VERSION__.
* lcs,ctc,iucv: Remove MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT. Set dev->owner.

diffstat:
 ctcmain.c | 36 +++++++++++++++---------------------
 ctctty.c | 3 +--
 lcs.c | 26 +++++++++++++-------------
 netiucv.c | 15 ++++++++-------
 4 files changed, 37 insertions(+), 43 deletions(-)

diff -urN linux-2.5.66/drivers/s390/net/ctcmain.c linux-2.5.66-s390/drivers/s390/net/ctcmain.c
--- linux-2.5.66/drivers/s390/net/ctcmain.c Wed Mar 26 15:45:05 2003
+++ linux-2.5.66-s390/drivers/s390/net/ctcmain.c Wed Mar 26 15:45:16 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: ctcmain.c,v 1.36 2003/02/18 09:15:14 mschwide Exp $
+ * $Id: ctcmain.c,v 1.38 2003/03/25 14:54:59 cohuck Exp $
  *
  * CTC / ESCON network driver
  *
@@ -36,7 +36,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.36 $
+ * RELEASE-TAG: CTC/ESCON network driver $Revision: 1.38 $
  *
  */
 
@@ -273,7 +273,7 @@
 print_banner(void)
 {
         static int printed = 0;
- char vbuf[] = "$Revision: 1.36 $";
+ char vbuf[] = "$Revision: 1.38 $";
         char *version = vbuf;
 
         if (printed)
@@ -1962,22 +1962,17 @@
         }
         
         priv = cdev->dev.driver_data;
- ch = (struct channel *) intparm;
- if ((ch != priv->channel[READ]) && (ch != priv->channel[WRITE]))
- ch = NULL;
-
- if (!ch) {
- /* Try to extract channel from driver data. */
- if (priv->channel[READ]->cdev == cdev)
- ch = priv->channel[READ];
- else if (priv->channel[WRITE]->cdev == cdev)
- ch = priv->channel[READ];
- else {
- printk(KERN_ERR
- "ctc: Can't determine channel for interrupt, "
- "device %s\n", cdev->dev.bus_id);
- return;
- }
+
+ /* Try to extract channel from driver data. */
+ if (priv->channel[READ]->cdev == cdev)
+ ch = priv->channel[READ];
+ else if (priv->channel[WRITE]->cdev == cdev)
+ ch = priv->channel[READ];
+ else {
+ printk(KERN_ERR
+ "ctc: Can't determine channel for interrupt, "
+ "device %s\n", cdev->dev.bus_id);
+ return;
         }
         
         dev = (struct net_device *) (ch->netdev);
@@ -2392,7 +2387,6 @@
 static int
 ctc_open(struct net_device * dev)
 {
- MOD_INC_USE_COUNT;
         fsm_event(((struct ctc_priv *) dev->priv)->fsm, DEV_EVENT_START, dev);
         return 0;
 }
@@ -2409,7 +2403,6 @@
 ctc_close(struct net_device * dev)
 {
         fsm_event(((struct ctc_priv *) dev->priv)->fsm, DEV_EVENT_STOP, dev);
- MOD_DEC_USE_COUNT;
         return 0;
 }
 
@@ -2761,6 +2754,7 @@
         dev->addr_len = 0;
         dev->type = ARPHRD_SLIP;
         dev->tx_queue_len = 100;
+ dev->owner = THIS_MODULE;
         dev->flags = IFF_POINTOPOINT | IFF_NOARP;
         return dev;
 }
diff -urN linux-2.5.66/drivers/s390/net/ctctty.c linux-2.5.66-s390/drivers/s390/net/ctctty.c
--- linux-2.5.66/drivers/s390/net/ctctty.c Mon Mar 24 23:00:45 2003
+++ linux-2.5.66-s390/drivers/s390/net/ctctty.c Wed Mar 26 15:45:17 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: ctctty.c,v 1.9 2002/12/02 15:25:13 aberg Exp $
+ * $Id: ctctty.c,v 1.10 2003/03/21 18:47:31 aberg Exp $
  *
  * CTC / ESCON network driver, tty interface.
  *
@@ -22,7 +22,6 @@
  *
  */
 
-#define __NO_VERSION__
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/tty.h>
diff -urN linux-2.5.66/drivers/s390/net/lcs.c linux-2.5.66-s390/drivers/s390/net/lcs.c
--- linux-2.5.66/drivers/s390/net/lcs.c Mon Mar 24 23:00:01 2003
+++ linux-2.5.66-s390/drivers/s390/net/lcs.c Wed Mar 26 15:45:17 2003
@@ -11,7 +11,7 @@
  * Frank Pavlic (pavlic@de.ibm.com) and
  * Martin Schwidefsky <schwidefsky@de.ibm.com>
  *
- * $Revision: 1.44 $ $Date: 2003/02/18 19:49:02 $
+ * $Revision: 1.49 $ $Date: 2003/03/25 14:54:59 $
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -59,7 +59,7 @@
 /**
  * initialization string for output
  */
-#define VERSION_LCS_C "$Revision: 1.44 $"
+#define VERSION_LCS_C "$Revision: 1.49 $"
 
 static char version[] __initdata = "LCS driver ("VERSION_LCS_C "/" VERSION_LCS_H ")";
 
@@ -358,6 +358,7 @@
                 kfree(ipm_list);
         }
 #endif
+ kfree(card->dev);
         /* Cleanup channels. */
         lcs_cleanup_channel(&card->write);
         lcs_cleanup_channel(&card->read);
@@ -556,13 +557,12 @@
 static int
 __lcs_processed_buffer(struct lcs_channel *channel, struct lcs_buffer *buffer)
 {
- int index, prevprev, prev, next;
+ int index, prev, next;
 
         if (buffer->state != BUF_STATE_READY)
                 BUG();
         buffer->state = BUF_STATE_PROCESSED;
         index = buffer - channel->iob;
- prevprev = (index - 1) & (LCS_NUM_BUFFS - 1);
         prev = (index - 1) & (LCS_NUM_BUFFS - 1);
         next = (index + 1) & (LCS_NUM_BUFFS - 1);
         /* Set the suspend bit and clear the PCI bit of this buffer. */
@@ -1082,7 +1082,7 @@
         unsigned long flags;
         struct lcs_channel *channel;
         struct lcs_buffer *iob;
- int buf_idx, io_idx;
+ int buf_idx;
         int rc;
 
         channel = (struct lcs_channel *) data;
@@ -1092,9 +1092,7 @@
         /* Check for processed buffers. */
         iob = channel->iob;
         buf_idx = channel->buf_idx;
- io_idx = channel->io_idx;
- while (buf_idx != io_idx &&
- iob[buf_idx].state == BUF_STATE_PROCESSED) {
+ while (iob[buf_idx].state == BUF_STATE_PROCESSED) {
                 /* Do the callback thing. */
                 if (iob[buf_idx].callback != NULL)
                         iob[buf_idx].callback(channel, iob + buf_idx);
@@ -1434,6 +1432,7 @@
 lcs_lgw_stoplan_thread(void *data)
 {
         struct lcs_card *card;
+ int rc;
 
         card = (struct lcs_card *) data;
         daemonize("lgwstop");
@@ -1446,7 +1445,11 @@
         else
                 PRINT_ERR("Stoplan %s initiated by LGW failed!\n",
                           card->dev->name);
- return 0;
+ /*Try to reset the card, stop it on failure */
+ rc = lcs_resetcard(card);
+ if (rc != 0)
+ rc = lcs_stopcard(card);
+ return rc;
 }
 
 /**
@@ -1599,12 +1602,9 @@
         LCS_DBF_TEXT(2, trace, "stopdev");
         card = (struct lcs_card *) dev->priv;
         netif_stop_queue(dev);
- // FIXME: really free the net_device here ?!?
- kfree(card->dev);
         rc = lcs_stopcard(card);
         if (rc)
                 PRINT_ERR("Try it again!\n ");
- MOD_DEC_USE_COUNT;
         return rc;
 }
 
@@ -1626,7 +1626,6 @@
                 PRINT_ERR("LCS:Error in opening device!\n");
 
         } else {
- MOD_INC_USE_COUNT;
                 netif_wake_queue(dev);
                 card->state = DEV_STATE_UP;
         }
@@ -1784,6 +1783,7 @@
                 dev->set_multicast_list = lcs_set_multicast_list;
 #endif
         dev->get_stats = lcs_getstats;
+ dev->owner = THIS_MODULE;
         netif_stop_queue(dev);
         lcs_stopcard(card);
         return 0;
diff -urN linux-2.5.66/drivers/s390/net/netiucv.c linux-2.5.66-s390/drivers/s390/net/netiucv.c
--- linux-2.5.66/drivers/s390/net/netiucv.c Wed Mar 26 15:45:05 2003
+++ linux-2.5.66-s390/drivers/s390/net/netiucv.c Wed Mar 26 15:45:17 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: netiucv.c,v 1.16 2003/02/18 09:15:14 mschwide Exp $
+ * $Id: netiucv.c,v 1.18 2003/03/25 14:54:59 cohuck Exp $
  *
  * IUCV network driver
  *
@@ -30,7 +30,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: IUCV network driver $Revision: 1.16 $
+ * RELEASE-TAG: IUCV network driver $Revision: 1.18 $
  *
  */
 
@@ -1140,7 +1140,6 @@
  */
 static int
 netiucv_open(struct net_device *dev) {
- MOD_INC_USE_COUNT;
         SET_DEVICE_START(dev, 1);
         fsm_event(((struct netiucv_priv *)dev->priv)->fsm, DEV_EVENT_START, dev);
         return 0;
@@ -1158,7 +1157,6 @@
 netiucv_close(struct net_device *dev) {
         SET_DEVICE_START(dev, 0);
         fsm_event(((struct netiucv_priv *)dev->priv)->fsm, DEV_EVENT_STOP, dev);
- MOD_DEC_USE_COUNT;
         return 0;
 }
 
@@ -1517,12 +1515,14 @@
                 conn->max_buffsize = NETIUCV_BUFSIZE_DEFAULT;
                 conn->netdev = dev;
 
- conn->rx_buff = alloc_skb(NETIUCV_BUFSIZE_DEFAULT, GFP_DMA);
+ conn->rx_buff = alloc_skb(NETIUCV_BUFSIZE_DEFAULT,
+ GFP_KERNEL | GFP_DMA);
                 if (!conn->rx_buff) {
                         kfree(conn);
                         return NULL;
                 }
- conn->tx_buff = alloc_skb(NETIUCV_BUFSIZE_DEFAULT, GFP_DMA);
+ conn->tx_buff = alloc_skb(NETIUCV_BUFSIZE_DEFAULT,
+ GFP_KERNEL | GFP_DMA);
                 if (!conn->tx_buff) {
                         kfree_skb(conn->rx_buff);
                         kfree(conn);
@@ -1630,6 +1630,7 @@
         dev->addr_len = 0;
         dev->type = ARPHRD_SLIP;
         dev->tx_queue_len = NETIUCV_QUEUELEN_DEFAULT;
+ dev->owner = THIS_MODULE;
         dev->flags = IFF_POINTOPOINT | IFF_NOARP;
         return dev;
 }
@@ -1716,7 +1717,7 @@
 static void
 netiucv_banner(void)
 {
- char vbuf[] = "$Revision: 1.16 $";
+ char vbuf[] = "$Revision: 1.18 $";
         char *version = vbuf;
 
         if ((version = strchr(version, ':'))) {

-
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/



This archive was generated by hypermail 2b29 : Mon Mar 31 2003 - 22:00:24 EST