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

From: Martin Schwidefsky (schwidefsky@de.ibm.com)
Date: Mon Apr 14 2003 - 12:49:24 EST


s390 network driver fixes:
 - 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:
 Kconfig | 6 +++---
 ctcmain.c | 37 +++++++++++++++----------------------
 ctctty.c | 3 +--
 fsm.c | 3 +--
 iucv.c | 7 +++----
 lcs.c | 31 +++++++++++++++++--------------
 netiucv.c | 15 ++++++++-------
 7 files changed, 48 insertions(+), 54 deletions(-)

diff -urN linux-2.5.67/drivers/s390/net/Kconfig linux-2.5.67-s390/drivers/s390/net/Kconfig
--- linux-2.5.67/drivers/s390/net/Kconfig Mon Apr 7 19:32:30 2003
+++ linux-2.5.67-s390/drivers/s390/net/Kconfig Mon Apr 14 19:11:51 2003
@@ -9,7 +9,7 @@
              or zSeries. This device driver supports Token Ring (IEEE 802.5),
              FDDI (IEEE 802.7) and Ethernet.
            This option is also available as a module which will be
- called lcs.o . If you do not know what it is, it's safe to say "Y".
+ called lcs.ko. If you do not know what it is, it's safe to say "Y".
 
 config CTC
         tristate "CTC device support"
@@ -20,7 +20,7 @@
           coupling using ESCON. It also supports virtual CTCs when running
           under VM. It will use the channel device configuration if this is
           available. This option is also available as a module which will be
- called ctc.o. If you do not know what it is, it's safe to say "Y".
+ called ctc.ko. If you do not know what it is, it's safe to say "Y".
 
 config IUCV
         tristate "IUCV device support (VM only)"
@@ -28,7 +28,7 @@
         help
           Select this option if you want to use inter-user communication
           vehicle networking under VM or VIF. This option is also available
- as a module which will be called iucv.o. If unsure, say "Y".
+ as a module which will be called iucv.ko. If unsure, say "Y".
 
 config CCWGROUP
          tristate
diff -urN linux-2.5.67/drivers/s390/net/ctcmain.c linux-2.5.67-s390/drivers/s390/net/ctcmain.c
--- linux-2.5.67/drivers/s390/net/ctcmain.c Mon Apr 7 19:31:04 2003
+++ linux-2.5.67-s390/drivers/s390/net/ctcmain.c Mon Apr 14 19:11:51 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: ctcmain.c,v 1.36 2003/02/18 09:15:14 mschwide Exp $
+ * $Id: ctcmain.c,v 1.40 2003/04/08 16:00:17 mschwide Exp $
  *
  * CTC / ESCON network driver
  *
@@ -36,13 +36,12 @@
  * 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.40 $
  *
  */
 
 #undef DEBUG
 
-#include <linux/version.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
@@ -273,7 +272,7 @@
 print_banner(void)
 {
         static int printed = 0;
- char vbuf[] = "$Revision: 1.36 $";
+ char vbuf[] = "$Revision: 1.40 $";
         char *version = vbuf;
 
         if (printed)
@@ -1962,22 +1961,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 +2386,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 +2402,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 +2753,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.67/drivers/s390/net/ctctty.c linux-2.5.67-s390/drivers/s390/net/ctctty.c
--- linux-2.5.67/drivers/s390/net/ctctty.c Mon Apr 7 19:31:44 2003
+++ linux-2.5.67-s390/drivers/s390/net/ctctty.c Mon Apr 14 19:11:51 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.67/drivers/s390/net/fsm.c linux-2.5.67-s390/drivers/s390/net/fsm.c
--- linux-2.5.67/drivers/s390/net/fsm.c Mon Apr 7 19:31:19 2003
+++ linux-2.5.67-s390/drivers/s390/net/fsm.c Mon Apr 14 19:11:51 2003
@@ -1,12 +1,11 @@
 /**
- * $Id: fsm.c,v 1.3 2002/10/08 16:53:45 mschwide Exp $
+ * $Id: fsm.c,v 1.4 2003/03/28 08:54:40 mschwide Exp $
  *
  * A generic FSM based on fsm used in isdn4linux
  *
  */
 
 #include "fsm.h"
-#include <linux/version.h>
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/timer.h>
diff -urN linux-2.5.67/drivers/s390/net/iucv.c linux-2.5.67-s390/drivers/s390/net/iucv.c
--- linux-2.5.67/drivers/s390/net/iucv.c Mon Apr 7 19:30:40 2003
+++ linux-2.5.67-s390/drivers/s390/net/iucv.c Mon Apr 14 19:11:51 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: iucv.c,v 1.9 2002/11/06 13:37:25 cohuck Exp $
+ * $Id: iucv.c,v 1.10 2003/03/28 08:54:40 mschwide Exp $
  *
  * IUCV network driver
  *
@@ -29,14 +29,13 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.9 $
+ * RELEASE-TAG: IUCV lowlevel driver $Revision: 1.10 $
  *
  */
 
 #include <linux/module.h>
 #include <linux/config.h>
 
-#include <linux/version.h>
 #include <linux/spinlock.h>
 #include <linux/kernel.h>
 #include <linux/slab.h>
@@ -333,7 +332,7 @@
 static void
 iucv_banner(void)
 {
- char vbuf[] = "$Revision: 1.9 $";
+ char vbuf[] = "$Revision: 1.10 $";
         char *version = vbuf;
 
         if ((version = strchr(version, ':'))) {
diff -urN linux-2.5.67/drivers/s390/net/lcs.c linux-2.5.67-s390/drivers/s390/net/lcs.c
--- linux-2.5.67/drivers/s390/net/lcs.c Mon Apr 7 19:30:42 2003
+++ linux-2.5.67-s390/drivers/s390/net/lcs.c Mon Apr 14 19:11:51 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.51 $ $Date: 2003/03/28 08:54:40 $
  *
  * 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
@@ -28,7 +28,6 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <linux/version.h>
 #include <linux/module.h>
 #include <linux/if.h>
 #include <linux/netdevice.h>
@@ -59,7 +58,7 @@
 /**
  * initialization string for output
  */
-#define VERSION_LCS_C "$Revision: 1.44 $"
+#define VERSION_LCS_C "$Revision: 1.51 $"
 
 static char version[] __initdata = "LCS driver ("VERSION_LCS_C "/" VERSION_LCS_H ")";
 
@@ -335,7 +334,9 @@
                   (void *)lcs_start_kernel_thread,card);
         card->thread_mask = 0;
         spin_lock_init(&card->lock);
+#ifdef CONFIG_IP_MULTICAST
         INIT_LIST_HEAD(&card->ipm_list);
+#endif
         INIT_LIST_HEAD(&card->lancmd_waiters);
         return 0;
 }
@@ -358,6 +359,7 @@
                 kfree(ipm_list);
         }
 #endif
+ kfree(card->dev);
         /* Cleanup channels. */
         lcs_cleanup_channel(&card->write);
         lcs_cleanup_channel(&card->read);
@@ -556,13 +558,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 +1083,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 +1093,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 +1433,7 @@
 lcs_lgw_stoplan_thread(void *data)
 {
         struct lcs_card *card;
+ int rc;
 
         card = (struct lcs_card *) data;
         daemonize("lgwstop");
@@ -1446,7 +1446,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;
 }
 
 /**
@@ -1462,8 +1466,10 @@
                 kernel_thread(lcs_lgw_startlan_thread, (void *) card, SIGCHLD);
         if (test_and_clear_bit(2, &card->thread_mask))
                 kernel_thread(lcs_lgw_stoplan_thread, (void *) card, SIGCHLD);
+#ifdef CONFIG_IP_MULTICAST
         if (test_and_clear_bit(3, &card->thread_mask))
                 kernel_thread(lcs_fix_multicast_list, (void *) card, SIGCHLD);
+#endif
 }
 
 /**
@@ -1599,12 +1605,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 +1629,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 +1786,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.67/drivers/s390/net/netiucv.c linux-2.5.67-s390/drivers/s390/net/netiucv.c
--- linux-2.5.67/drivers/s390/net/netiucv.c Mon Apr 7 19:31:45 2003
+++ linux-2.5.67-s390/drivers/s390/net/netiucv.c Mon Apr 14 19:11:51 2003
@@ -1,5 +1,5 @@
 /*
- * $Id: netiucv.c,v 1.16 2003/02/18 09:15:14 mschwide Exp $
+ * $Id: netiucv.c,v 1.19 2003/04/08 16:00:17 mschwide 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.19 $
  *
  */
 
@@ -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.19 $";
         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 : Tue Apr 15 2003 - 22:00:31 EST