Skip to contentSkip to conversation

s390: ctc patch for 2.6.24

PATCH Applied Ursula Braun 4 participants 5 messages Nov 29, 2007 – Dec 1, 2007

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

cover s390: ctc patch for 2.6.24

Signature · 2 lines
The following patch is intended for 2.6.24 and repairs the
ctc driver by introducing alloc_netdev().
#1 lore raw

PATCH 1/1 ctc: make use of alloc_netdev()

From: Peter Tiedemann <[email protected]>

Currently ctc-device initialization is broken (kernel bug in ctc_new_device).
The new network namespace code reveals a deficiency of the ctc driver. It should make use of alloc_netdev() as described in Documentation/networking/netdevices.txt.

---
 drivers/s390/net/ctcmain.c |   45 ++++++++++++++++-----------------------------
 1 file changed, 16 insertions(+), 29 deletions(-)
drivers/s390/net/ctcmain.c +16 -29
Index: linux-2.6-uschi/drivers/s390/net/ctcmain.c
===================================================================
@@ -2782,35 +2782,14 @@ ctc_probe_device(struct ccwgroup_device 
 }
 
 /**
- * Initialize everything of the net device except the name and the
- * channel structs.
+ * Device setup function called by alloc_netdev().
+ *
+ * @param dev  Device to be setup.
  */
-static struct net_device *
-ctc_init_netdevice(struct net_device * dev, int alloc_device,
-		   struct ctc_priv *privptr)
+void ctc_init_netdevice(struct net_device * dev)
 {
-	if (!privptr)
-		return NULL;
-
 	DBF_TEXT(setup, 3, __FUNCTION__);
 
-	if (alloc_device) {
-		dev = kzalloc(sizeof(struct net_device), GFP_KERNEL);
-		if (!dev)
-			return NULL;
-	}
-
-	dev->priv = privptr;
-	privptr->fsm = init_fsm("ctcdev", dev_state_names,
-				dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
-				dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
-	if (privptr->fsm == NULL) {
-		if (alloc_device)
-			kfree(dev);
-		return NULL;
-	}
-	fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
-	fsm_settimer(privptr->fsm, &privptr->restart_timer);
 	if (dev->mtu == 0)
 		dev->mtu = CTC_BUFSIZE_DEFAULT - LL_HEADER_LENGTH - 2;
 	dev->hard_start_xmit = ctc_tx;
@@ -2823,7 +2802,7 @@ ctc_init_netdevice(struct net_device * d
 	dev->type = ARPHRD_SLIP;
 	dev->tx_queue_len = 100;
 	dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-	return dev;
+	SET_MODULE_OWNER(dev);
 }
 
 
@@ -2879,14 +2858,22 @@ ctc_new_device(struct ccwgroup_device *c
 		 	"ccw_device_set_online (cdev[1]) failed with ret = %d\n", ret);
 	}
 
-	dev = ctc_init_netdevice(NULL, 1, privptr);
-
+	dev = alloc_netdev(0, "ctc%d", ctc_init_netdevice);
 	if (!dev) {
 		ctc_pr_warn("ctc_init_netdevice failed\n");
 		goto out;
 	}
+	dev->priv = privptr;
 
-	strlcpy(dev->name, "ctc%d", IFNAMSIZ);
+	privptr->fsm = init_fsm("ctcdev", dev_state_names,
+			dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
+			dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
+	if (privptr->fsm == NULL) {
+		free_netdev(dev);
+		goto out;
+	}
+	fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
+	fsm_settimer(privptr->fsm, &privptr->restart_timer);
 
 	for (direction = READ; direction <= WRITE; direction++) {
 		privptr->channel[direction] =
#2 lore raw

Re: [patch 1/1] ctc: make use of alloc_netdev()

Quoted 70 lines · On Thu, 29 Nov 2007 17:36:27 +0100 Ursula Braun <[email protected]> wrote:

From: Peter Tiedemann <[email protected]>

Currently ctc-device initialization is broken (kernel bug in ctc_new_device).
The new network namespace code reveals a deficiency of the ctc driver. It should make use of alloc_netdev() as described in Documentation/networking/netdevices.txt.

---
 drivers/s390/net/ctcmain.c |   45 ++++++++++++++++-----------------------------
 1 file changed, 16 insertions(+), 29 deletions(-)

Index: linux-2.6-uschi/drivers/s390/net/ctcmain.c
===================================================================

drivers/s390/net/ctcmain.c +5 -26
@@ -2782,35 +2782,14 @@ ctc_probe_device(struct ccwgroup_device 
 }
 
 /**
- * Initialize everything of the net device except the name and the
- * channel structs.
+ * Device setup function called by alloc_netdev().
+ *
+ * @param dev  Device to be setup.
  */
-static struct net_device *
-ctc_init_netdevice(struct net_device * dev, int alloc_device,
-		   struct ctc_priv *privptr)
+void ctc_init_netdevice(struct net_device * dev)
 {
-	if (!privptr)
-		return NULL;
-
 	DBF_TEXT(setup, 3, __FUNCTION__);
 
-	if (alloc_device) {
-		dev = kzalloc(sizeof(struct net_device), GFP_KERNEL);
-		if (!dev)
-			return NULL;
-	}
-
-	dev->priv = privptr;
-	privptr->fsm = init_fsm("ctcdev", dev_state_names,
-				dev_event_names, CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,
-				dev_fsm, DEV_FSM_LEN, GFP_KERNEL);
-	if (privptr->fsm == NULL) {
-		if (alloc_device)
-			kfree(dev);
-		return NULL;
-	}
-	fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
-	fsm_settimer(privptr->fsm, &privptr->restart_timer);
 	if (dev->mtu == 0)
 		dev->mtu = CTC_BUFSIZE_DEFAULT - LL_HEADER_LENGTH - 2;
 	dev->hard_start_xmit = ctc_tx;
@@ -2823,7 +2802,7 @@ ctc_init_netdevice(struct net_device * d
 	dev->type = ARPHRD_SLIP;
 	dev->tx_queue_len = 100;
 	dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-	return dev;
+	SET_MODULE_OWNER(dev);
 }
 
 
@@ -2879,14 +2858,22 @@ ctc_new_device(struct ccwgroup_device *c
 		 	"ccw_device_set_online (cdev[1]) failed with ret = %d\n", ret);
 	}

drivers/s390/net/ctcmain.c ctc_new_device(struct ccwgroup_device *c · line 2867

Quoted 10 lines
drivers/s390/net/ctcmain.c +2 -2
 
-	dev = ctc_init_netdevice(NULL, 1, privptr);
-
+	dev = alloc_netdev(0, "ctc%d", ctc_init_netdevice);
 	if (!dev) {
 		ctc_pr_warn("ctc_init_netdevice failed\n");
 		goto out;
 	}
+	dev->priv = privptr;
 

Why not use standard private data area, rather than allocating it separately?

Signature · 1 line
Stephen Hemminger <[email protected]>
#3 lore raw

Re: [patch 1/1] ctc: make use of alloc_netdev()

To maintain the area used for sysfs attribute data which may be stored already previously.

Mit freundlichen Grüßen / Best regards / Saluti,
Peter Tiedemann
---------------------------------
phone: +49-7031-16-4172 fax: ++3159 e-mail: [email protected]
IBM Deutschland Entwicklung GmbH
Linux for eServer Development, Dept. 3303
Schoenaicher Str. 220
71032 Boeblingen, Germany

IBM Deutschland Entwicklung GmbH, Vorsitzender des Aufsichtsrats: Martin Jetter, Geschäftsführung: Herbert Kircher
Sitz der Gesellschaft: Böblingen, Registergericht: Amtsgericht Stuttgart, HRB 243294

Stephen Hemminger
<shemminger@linux
-foundation.org> To
Ursula Braun1/Germany/IBM@IBMDE
29.11.2007 18:12 cc
[email protected], [email protected], [email protected], Peter Tiedemann/Germany/IBM@IBMDE
Subject
Re: [patch 1/1] ctc: make use of alloc_netdev()

Quoted 8 lines · On Thu, 29 Nov 2007 17:36:27 +0100 Ursula Braun <[email protected]> wrote:

From: Peter Tiedemann <[email protected]>

Currently ctc-device initialization is broken (kernel bug in ctc_new_device).
The new network namespace code reveals a deficiency of the ctc driver. It should make use of alloc_netdev() as described in Documentation/networking/netdevices.txt.

Quoted 4 lines
---
 drivers/s390/net/ctcmain.c |   45

++++++++++++++++-----------------------------

Quoted 18 lines
 1 file changed, 16 insertions(+), 29 deletions(-)

Index: linux-2.6-uschi/drivers/s390/net/ctcmain.c
===================================================================

drivers/s390/net/ctcmain.c +3 -4
@@ -2782,35 +2782,14 @@ ctc_probe_device(struct ccwgroup_device
 }
 
 /**
- * Initialize everything of the net device except the name and the
- * channel structs.
+ * Device setup function called by alloc_netdev().
+ *
+ * @param dev  Device to be setup.
  */
-static struct net_device *
-ctc_init_netdevice(struct net_device * dev, int alloc_device,

drivers/s390/net/ctcmain.c ctc_probe_device(struct ccwgroup_device · line 2798

Quoted 10 lines
drivers/s390/net/ctcmain.c +1 -6
-                         struct ctc_priv *privptr)
+void ctc_init_netdevice(struct net_device * dev)
 {
-          if (!privptr)
-                      return NULL;
-
           DBF_TEXT(setup, 3, __FUNCTION__);
 
-          if (alloc_device) {
-                      dev = kzalloc(sizeof(struct net_device),

GFP_KERNEL);

drivers/s390/net/ctcmain.c ctc_probe_device(struct ccwgroup_device

Quoted 7 lines
drivers/s390/net/ctcmain.c +0 -7
-                      if (!dev)
-                                  return NULL;
-          }
-
-          dev->priv = privptr;
-          privptr->fsm = init_fsm("ctcdev", dev_state_names,
-                                              dev_event_names,

CTC_NR_DEV_STATES, CTC_NR_DEV_EVENTS,

drivers/s390/net/ctcmain.c ctc_probe_device(struct ccwgroup_device · line 2806

Quoted 1 line
drivers/s390/net/ctcmain.c +0 -1
-                                              dev_fsm, DEV_FSM_LEN,

GFP_KERNEL);

drivers/s390/net/ctcmain.c ctc_probe_device(struct ccwgroup_device

Quoted 9 lines
drivers/s390/net/ctcmain.c +0 -7
-          if (privptr->fsm == NULL) {
-                      if (alloc_device)
-                                  kfree(dev);
-                      return NULL;
-          }
-          fsm_newstate(privptr->fsm, DEV_STATE_STOPPED);
-          fsm_settimer(privptr->fsm, &privptr->restart_timer);
           if (dev->mtu == 0)
                       dev->mtu = CTC_BUFSIZE_DEFAULT - LL_HEADER_LENGTH

- 2;

drivers/s390/net/ctcmain.c ctc_new_device(struct ccwgroup_device *c · line 2858

Quoted 12 lines
drivers/s390/net/ctcmain.c +1 -1
           dev->hard_start_xmit = ctc_tx;
@@ -2823,7 +2802,7 @@ ctc_init_netdevice(struct net_device * d
           dev->type = ARPHRD_SLIP;
           dev->tx_queue_len = 100;
           dev->flags = IFF_POINTOPOINT | IFF_NOARP;
-          return dev;
+          SET_MODULE_OWNER(dev);
 }
 
 
@@ -2879,14 +2858,22 @@ ctc_new_device(struct ccwgroup_device *c
                                   "ccw_device_set_online (cdev[1])

failed with ret = %d\n", ret);

drivers/s390/net/ctcmain.c ctc_new_device(struct ccwgroup_device *c · line 2867

Quoted 11 lines
drivers/s390/net/ctcmain.c +2 -2
           }
 
-          dev = ctc_init_netdevice(NULL, 1, privptr);
-
+          dev = alloc_netdev(0, "ctc%d", ctc_init_netdevice);
           if (!dev) {
                       ctc_pr_warn("ctc_init_netdevice failed\n");
                       goto out;
           }
+          dev->priv = privptr;
 

Why not use standard private data area, rather than allocating it separately?

--
Stephen Hemminger <[email protected]>