Problem with mol on 7024-E30

Samuel Rydh mol-general@lists.maconlinux.org
Tue, 15 Oct 2002 18:19:24 +0200 (MEST)


> This is definitely due to the copying of the non-existent OF
> device tree (I appreciate the symbolic backtrace, thanks).
>

OK... here is the fix. Unfortunately, I can't push to the BK
tree at the moment (I don't have access to the SSH keys
after having shut down my desktop computer remotely by mistake).

/Samuel


===== src/kmod/Linux/misc.c 1.28 vs 1.29 =====
--- 1.28/src/kmod/Linux/misc.c	Sun Aug 18 21:06:41 2002
+++ 1.29/src/kmod/Linux/misc.c	Tue Oct 15 17:45:55 2002
@@ -1,6 +1,6 @@
 /*
  *   Creation Date: <97/05/26 02:10:43 samuel>
- *   Time-stamp: <2002/08/17 18:41:06 samuel>
+ *   Time-stamp: <2002/10/15 17:34:11 samuel>
  *
  *	<misc.c>
  *
@@ -112,10 +112,11 @@
 	struct device_node *dn;
 	int tsize=0;

-	dn = get_prom_root();
-	if(!src) {
+	if( !(dn=get_prom_root()) )
+		return -ENOTSUPP;
+	if( !src )
 		src = dn;
-	} else {
+	else {
 		for( ; dn && dn!=src ; dn=dn->allnext )
 			;
 		if( !dn )
@@ -180,8 +181,7 @@
 	if( verify_area(VERIFY_WRITE, dest, bufsize) )
 		return -EFAULT;

-	ret = do_prom_copy_node(NULL, dn);
-	if( ret < 0 || ret > bufsize )
+	if( (ret=do_prom_copy_node(NULL, dn)) > bufsize || ret < 0 )
 		return -EFAULT;

 	do_prom_copy_node( dest, dn );
===== src/main/promif.c 1.15 vs 1.16 =====
--- 1.15/src/main/promif.c	Sun Aug  4 02:09:50 2002
+++ 1.16/src/main/promif.c	Tue Oct 15 17:45:55 2002
@@ -1,6 +1,6 @@
 /*
  *   Creation Date: <97/07/03 13:43:50 samuel>
- *   Time-stamp: <2002/08/04 01:00:05 samuel>
+ *   Time-stamp: <2002/10/15 17:43:52 samuel>
  *
  *	<promif.c>
  *
@@ -1066,19 +1066,19 @@
 copy_node( mol_device_node_t *kernel_node )
 {
 	mol_device_node_t *node, *sib;
-	size_t size;
+	ssize_t size;

 	if( !kernel_node )
-		return 0;
+		return NULL;

 	/* check if root */
 	if( kernel_node == (mol_device_node_t*)1 )
 		kernel_node = 0;

 	/* copy node */
-	if( (size = _prom_get_node_size( kernel_node )) < 0 )
-		printm("Error while obtaining OF device node size!\n");
-
+	if( (size=_prom_get_node_size( kernel_node )) <= 0 )
+		return NULL;
+
 	node = obstack_alloc( &hw_tree->stack, size );
 	memset( node, 0, size );